@object-ui/plugin-form 16.1.0 → 17.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +831 -1
  2. package/README.md +106 -0
  3. package/dist/DrawerForm.d.ts +1 -0
  4. package/dist/DrawerForm.d.ts.map +1 -0
  5. package/dist/EmbeddableForm.d.ts +1 -0
  6. package/dist/EmbeddableForm.d.ts.map +1 -0
  7. package/dist/FormAnalytics.d.ts +1 -0
  8. package/dist/FormAnalytics.d.ts.map +1 -0
  9. package/dist/FormSection.d.ts +7 -6
  10. package/dist/FormSection.d.ts.map +1 -0
  11. package/dist/LineItemsPanel.d.ts +1 -0
  12. package/dist/LineItemsPanel.d.ts.map +1 -0
  13. package/dist/MasterDetailForm.d.ts +9 -1
  14. package/dist/MasterDetailForm.d.ts.map +1 -0
  15. package/dist/ModalForm.d.ts +7 -2
  16. package/dist/ModalForm.d.ts.map +1 -0
  17. package/dist/ObjectForm.d.ts +1 -0
  18. package/dist/ObjectForm.d.ts.map +1 -0
  19. package/dist/SplitForm.d.ts +22 -2
  20. package/dist/SplitForm.d.ts.map +1 -0
  21. package/dist/TabbedForm.d.ts +13 -1
  22. package/dist/TabbedForm.d.ts.map +1 -0
  23. package/dist/WizardForm.d.ts +14 -1
  24. package/dist/WizardForm.d.ts.map +1 -0
  25. package/dist/autoLayout.d.ts +1 -0
  26. package/dist/autoLayout.d.ts.map +1 -0
  27. package/dist/deriveMasterDetail.d.ts +1 -0
  28. package/dist/deriveMasterDetail.d.ts.map +1 -0
  29. package/dist/fieldGroups.d.ts +1 -0
  30. package/dist/fieldGroups.d.ts.map +1 -0
  31. package/dist/index.d.ts +3 -2
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +1609 -1326
  34. package/dist/index.umd.cjs +1 -1
  35. package/dist/masterDetailTx.d.ts +1 -0
  36. package/dist/masterDetailTx.d.ts.map +1 -0
  37. package/dist/occSave.d.ts +78 -0
  38. package/dist/occSave.d.ts.map +1 -0
  39. package/dist/sanitize.d.ts +1 -0
  40. package/dist/sanitize.d.ts.map +1 -0
  41. package/dist/sectionFields.d.ts +10 -2
  42. package/dist/sectionFields.d.ts.map +1 -0
  43. package/dist/successBehavior.d.ts +1 -0
  44. package/dist/successBehavior.d.ts.map +1 -0
  45. package/package.json +12 -11
package/README.md CHANGED
@@ -83,6 +83,112 @@ interface FormField {
83
83
  }
84
84
  ```
85
85
 
86
+ ### Column width of a sectioned form
87
+
88
+ A sectioned form renders as ONE grid, and two keys decide its shape:
89
+
90
+ | Key | Meaning |
91
+ |---|---|
92
+ | the form view's `columns` | how wide the grid is (1–4) — spec `FormView.columns` |
93
+ | a section's `columns` | how densely THAT section fills the grid (via per-field `colSpan`) |
94
+
95
+ The view's `columns` wins; without it the grid takes the widest section's
96
+ density, and without either it is single-column. Every sectioned host resolves it
97
+ the same way — `ObjectForm` (simple), `ModalForm`, `TabbedForm`, `SplitForm`,
98
+ `WizardForm` — so one piece of metadata lays out identically wherever it is
99
+ rendered. (`WizardForm` has no widest-section fallback: its steps never share a
100
+ viewport, so each step keeps its own authored width.)
101
+
102
+ The grid is applied to the field container **inside** the form, never wrapped
103
+ around the `<form>` (which would put the whole form in cell 1 and leave the other
104
+ columns empty — #2128).
105
+
106
+ ### Tabbed field layout (`fieldTabs`)
107
+
108
+ A sectioned form is **one** form. Instead of rendering a form per section — which
109
+ strands every section but the first outside the submit, and (in tabs) lets the
110
+ inactive panel unmount with its values — declare tabs on the single form and let
111
+ the renderer distribute the fields:
112
+
113
+ ```typescript
114
+ {
115
+ type: 'form',
116
+ fields: [/* every tab's fields, in one flat list */],
117
+ fieldTabs: [
118
+ { key: 'basics', label: 'Basics', fields: ['subject', 'status'] },
119
+ { key: 'detail', label: 'Detail', description: 'Anything else', fields: ['description'] },
120
+ ],
121
+ defaultFieldTab?: 'basics', // defaults to the first tab
122
+ fieldTabsPosition?: 'top', // 'top' | 'bottom' | 'left' | 'right'
123
+ }
124
+ ```
125
+
126
+ - All panels are **force-mounted** and only CSS-hidden, so a tab the user leaves
127
+ keeps its values *and* its validation (react-hook-form skips unmounted fields,
128
+ which is how a required field on an unopened tab used to reach the server).
129
+ - A failed submit **activates the tab holding the first offending field** and
130
+ marks every tab with a rejected field (`data-error` on the trigger) — for both
131
+ client-side rules and server `fields[]` rejections.
132
+ - Fields no tab claims render above the tab strip rather than disappearing.
133
+ - Needs at least two tabs, and is ignored when the form uses `children`.
134
+
135
+ `ModalForm` (`contentLayout: 'tabbed'`) and `TabbedForm` are built on this.
136
+
137
+ ### Wizard steps and `allowSkip`
138
+
139
+ `allowSkip` lets the user jump to any step from the indicator instead of walking
140
+ through them in order. It is **navigation** freedom, not an exemption from the
141
+ object's rules:
142
+
143
+ - Next validates the step you are leaving, as always.
144
+ - The **final submit checks every step's required fields** — not just the last
145
+ one's — and if something is outstanding it sends the user to the first step
146
+ that has one, marks that step's indicator (`data-error="true"`), and names the
147
+ fields in a toast. Nothing is sent.
148
+ - Conditional rules are respected: a field whose `visibleWhen` is false, or whose
149
+ `requiredWhen` is false, is not demanded. The check runs on the same canonical
150
+ engine as the renderer and the server's rule-validator, so all three agree.
151
+
152
+ This matters because react-hook-form only validates the fields currently
153
+ **mounted**, and a wizard mounts one step at a time — so a required field on a
154
+ step nobody opened used to be absent from the payload with nothing on screen
155
+ saying so (#2959's validation half, in a wizard).
156
+
157
+ ### Split field layout (`fieldPanes`)
158
+
159
+ The same rule for side-by-side panels: the `<form>` wraps the whole panel group
160
+ and each pane holds only fields, so one react-hook-form instance spans the
161
+ divider.
162
+
163
+ ```typescript
164
+ {
165
+ type: 'form',
166
+ fields: [/* every pane's fields, in one flat list */],
167
+ fieldPanes: [
168
+ { key: 'primary', fields: ['subject'], defaultSize: 50 },
169
+ { key: 'secondary', fields: ['status', 'priority'], defaultSize: 50, minSize: 20 },
170
+ ],
171
+ fieldPanesOrientation?: 'horizontal', // 'horizontal' | 'vertical'
172
+ fieldPanesResizable?: true, // false pins the divider
173
+ }
174
+ ```
175
+
176
+ - A submit from anywhere carries **every** pane's values, and a field rule
177
+ (`visibleWhen` / `requiredWhen` / …) in one pane can read a field in another —
178
+ neither is possible with a form per panel.
179
+ - `defaultSize` / `minSize` are **percentages** of the group.
180
+ - Each pane is its own `@container`, so a multi-column group inside it collapses
181
+ as the divider is dragged narrower.
182
+ - Fields no pane claims render above the panel group rather than disappearing.
183
+ - Needs at least two panes; ignored when the form uses `children` or `fieldTabs`.
184
+
185
+ `SplitForm` is built on this. Each section declares its panel via `pane:
186
+ 'primary' | 'secondary'` (spec `FormSection.pane`) — explicit per-section
187
+ placement, so reordering sections never silently moves them across the divider.
188
+ When omitted, the legacy positional rule applies: the first section becomes the
189
+ primary pane, the rest stack in the secondary one behind inline section headers.
190
+ (The spec rejects `pane` on non-split form types at parse.)
191
+
86
192
  ## Examples
87
193
 
88
194
  ### Basic Form
@@ -85,3 +85,4 @@ export interface DrawerFormProps {
85
85
  }
86
86
  export declare const DrawerForm: React.FC<DrawerFormProps>;
87
87
  export default DrawerForm;
88
+ //# sourceMappingURL=DrawerForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerForm.d.ts","sourceRoot":"","sources":["../src/DrawerForm.tsx"],"names":[],"mappings":"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"}
@@ -114,3 +114,4 @@ export declare function applyDefaultMaxLengths(fields: FormField[] | undefined):
114
114
  */
115
115
  export declare const EmbeddableForm: React.FC<EmbeddableFormProps>;
116
116
  export default EmbeddableForm;
117
+ //# sourceMappingURL=EmbeddableForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmbeddableForm.d.ts","sourceRoot":"","sources":["../src/EmbeddableForm.tsx"],"names":[],"mappings":"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"}
@@ -36,3 +36,4 @@ export interface FormAnalyticsProps {
36
36
  */
37
37
  export declare const FormAnalytics: React.FC<FormAnalyticsProps>;
38
38
  export default FormAnalytics;
39
+ //# sourceMappingURL=FormAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormAnalytics.d.ts","sourceRoot":"","sources":["../src/FormAnalytics.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,gCAAgC;IAChC,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA4ItD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- export interface FormSectionProps {
2
+ export interface FormSectionContainerProps {
3
3
  /**
4
4
  * Section title/label
5
5
  */
@@ -47,17 +47,18 @@ export interface FormSectionProps {
47
47
  showBorder?: boolean;
48
48
  }
49
49
  /**
50
- * FormSection Component
50
+ * FormSectionContainer Component
51
51
  *
52
52
  * Groups form fields with optional header, collapsibility, and multi-column layout.
53
53
  *
54
54
  * @example
55
55
  * ```tsx
56
- * <FormSection label="Contact Details" columns={2} collapsible>
56
+ * <FormSectionContainer label="Contact Details" columns={2} collapsible>
57
57
  * <FormField name="firstName" />
58
58
  * <FormField name="lastName" />
59
- * </FormSection>
59
+ * </FormSectionContainer>
60
60
  * ```
61
61
  */
62
- export declare const FormSection: React.FC<FormSectionProps>;
63
- export default FormSection;
62
+ export declare const FormSectionContainer: React.FC<FormSectionContainerProps>;
63
+ export default FormSectionContainer;
64
+ //# sourceMappingURL=FormSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.d.ts","sourceRoot":"","sources":["../src/FormSection.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAExB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAqFpE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -18,3 +18,4 @@ export interface LineItemsPanelSchema {
18
18
  export declare const LineItemsPanel: React.FC<{
19
19
  schema: LineItemsPanelSchema;
20
20
  }>;
21
+ //# sourceMappingURL=LineItemsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineItemsPanel.d.ts","sourceRoot":"","sources":["../src/LineItemsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAC;AASzE,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpE,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAiJrE,CAAC"}
@@ -37,7 +37,14 @@ export interface MasterDetailFormSchema {
37
37
  /** Parent object name, e.g. 'expense_claim'. */
38
38
  objectName: string;
39
39
  mode?: 'create' | 'edit';
40
- recordId?: string;
40
+ /**
41
+ * `string | number` to match `ObjectFormSchema` and the drawer/modal/split/
42
+ * tabbed/wizard envelopes that hand a record straight through to this form —
43
+ * a numeric primary key is a real backend shape. Narrowed to a string only at
44
+ * the batch-transaction boundary, whose `BatchTransactionOperation.id` is a
45
+ * string by protocol.
46
+ */
47
+ recordId?: string | number;
41
48
  /** Prefilled parent header values (create mode) — seeds the parent form's
42
49
  * initial values, e.g. a conversion wizard carrying the lead/account over. */
43
50
  initialValues?: Record<string, any>;
@@ -71,3 +78,4 @@ export interface MasterDetailFormProps {
71
78
  className?: string;
72
79
  }
73
80
  export declare const MasterDetailForm: React.FC<MasterDetailFormProps>;
81
+ //# sourceMappingURL=MasterDetailForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasterDetailForm.d.ts","sourceRoot":"","sources":["../src/MasterDetailForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpE,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErF,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB;;qDAEiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;yEACqE;IACrE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB;sFACkF;IAClF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;kDAE8C;IAC9C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;+EAC2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B;mFAC+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;0EACsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;mFAC+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC;;kFAE8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgMD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA2a5D,CAAC"}
@@ -6,9 +6,13 @@ export interface ModalFormSectionConfig {
6
6
  description?: string;
7
7
  columns?: 1 | 2 | 3 | 4;
8
8
  fields: (string | FormField)[];
9
- /** Custom CSS class for the section's Card wrapper. */
9
+ /** Custom CSS class for the section's header row (stacked layout). */
10
10
  className?: string;
11
- /** Custom CSS class for the section's field grid. */
11
+ /**
12
+ * Custom CSS class for the section's field grid. Applied to the section's tab
13
+ * panel in the `tabbed` layout; in the stacked layout every section shares one
14
+ * grid inside the single form (#2959), so there is none to override.
15
+ */
12
16
  gridClassName?: string;
13
17
  }
14
18
  export interface ModalFormSchema {
@@ -87,3 +91,4 @@ export interface ModalFormProps {
87
91
  }
88
92
  export declare const ModalForm: React.FC<ModalFormProps>;
89
93
  export default ModalForm;
94
+ //# sourceMappingURL=ModalForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalForm.d.ts","sourceRoot":"","sources":["../src/ModalForm.tsx"],"names":[],"mappings":"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"}
@@ -34,3 +34,4 @@ export interface ObjectFormProps {
34
34
  * ```
35
35
  */
36
36
  export declare const ObjectForm: React.FC<ObjectFormProps>;
37
+ //# sourceMappingURL=ObjectForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectForm.d.ts","sourceRoot":"","sources":["../src/ObjectForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAyB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAyB5F,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAC;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmPhD,CAAC"}
@@ -5,10 +5,22 @@ export interface SplitFormSectionConfig {
5
5
  label?: string;
6
6
  description?: string;
7
7
  columns?: 1 | 2 | 3 | 4;
8
+ /**
9
+ * Which panel this section renders in. Aligns with @objectstack/spec
10
+ * FormSection.pane — explicit per-section placement, so reordering sections
11
+ * never silently moves them across the divider. Omitted → the legacy
12
+ * positional rule (first section 'primary', every other 'secondary').
13
+ */
14
+ pane?: 'primary' | 'secondary';
8
15
  fields: (string | FormField)[];
9
- /** Custom CSS class for the section's Card wrapper. */
16
+ /** Custom CSS class for the section's header row. */
10
17
  className?: string;
11
- /** Custom CSS class for the section's field grid. */
18
+ /**
19
+ * Custom CSS class for the section's field grid. Applied to the panel's grid
20
+ * when that panel holds this section alone (the common case — the first
21
+ * section owns the left/top panel); a panel stacking several sections shares
22
+ * one grid inside the single form (#2153), so there is none to override.
23
+ */
12
24
  gridClassName?: string;
13
25
  }
14
26
  export interface SplitFormSchema {
@@ -33,6 +45,13 @@ export interface SplitFormSchema {
33
45
  * @default true
34
46
  */
35
47
  splitResizable?: boolean;
48
+ /**
49
+ * Grid width for the whole form (1–4). Aligns with @objectstack/spec
50
+ * FormView.columns and OUTRANKS the per-section `columns`, which say how a
51
+ * section fills the grid rather than how wide it is. Omitted = the widest
52
+ * section's density.
53
+ */
54
+ columns?: number;
36
55
  showSubmit?: boolean;
37
56
  submitText?: string;
38
57
  showCancel?: boolean;
@@ -52,3 +71,4 @@ export interface SplitFormProps {
52
71
  }
53
72
  export declare const SplitForm: React.FC<SplitFormProps>;
54
73
  export default SplitForm;
74
+ //# sourceMappingURL=SplitForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitForm.d.ts","sourceRoot":"","sources":["../src/SplitForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9D,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,MAAM,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAC/B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IAEnC;;;OAGG;IACH,cAAc,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAE3C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmR9C,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -24,10 +24,14 @@ export interface FormSectionConfig {
24
24
  fields: (string | FormField)[];
25
25
  /**
26
26
  * Custom CSS class for the section's Card wrapper.
27
+ *
28
+ * Unused in the tabbed layout: all tabs share ONE form (#2959), so a tab's
29
+ * panel has no per-section Card to carry it.
27
30
  */
28
31
  className?: string;
29
32
  /**
30
- * Custom CSS class for the section's field grid.
33
+ * Custom CSS class for the section's field grid — applied to this tab's panel
34
+ * grid (overrides the shared column classes).
31
35
  */
32
36
  gridClassName?: string;
33
37
  }
@@ -50,6 +54,13 @@ export interface TabbedFormSchema {
50
54
  * Tab sections configuration
51
55
  */
52
56
  sections: FormSectionConfig[];
57
+ /**
58
+ * Grid width for the whole form (1–4). Aligns with @objectstack/spec
59
+ * FormView.columns and OUTRANKS the per-section `columns`, which say how a
60
+ * section fills the grid rather than how wide it is. Omitted = the widest
61
+ * section's density.
62
+ */
63
+ columns?: number;
53
64
  /**
54
65
  * Default active tab (section name)
55
66
  */
@@ -129,3 +140,4 @@ export interface TabbedFormProps {
129
140
  */
130
141
  export declare const TabbedForm: React.FC<TabbedFormProps>;
131
142
  export default TabbedForm;
143
+ //# sourceMappingURL=TabbedForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabbedForm.d.ts","sourceRoot":"","sources":["../src/TabbedForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9D,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAExB;;OAEG;IACH,MAAM,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAE/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAElD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA6OhD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -22,10 +22,22 @@ export interface WizardFormSchema {
22
22
  */
23
23
  sections: FormSectionConfig[];
24
24
  /**
25
- * Allow navigation to any step (not just sequential)
25
+ * Allow navigation to any step (not just sequential).
26
+ *
27
+ * This is navigation freedom, NOT an exemption from the object's rules: the
28
+ * final submit still checks every step's required fields and sends the user
29
+ * back to the first step that has one outstanding (#2959's validation half —
30
+ * react-hook-form only validates the fields currently mounted, so a step
31
+ * nobody opened used to reach the server unvalidated).
26
32
  * @default false
27
33
  */
28
34
  allowSkip?: boolean;
35
+ /**
36
+ * Grid width for each step (1–4). Aligns with @objectstack/spec
37
+ * FormView.columns and OUTRANKS the per-step `columns`, which says how densely
38
+ * that step fills the grid. Omitted = the step's own `columns`, else 1.
39
+ */
40
+ columns?: number;
29
41
  /**
30
42
  * Show step indicators
31
43
  * @default true
@@ -132,3 +144,4 @@ export interface WizardFormProps {
132
144
  */
133
145
  export declare const WizardForm: React.FC<WizardFormProps>;
134
146
  export default WizardForm;
147
+ //# sourceMappingURL=WizardForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WizardForm.d.ts","sourceRoot":"","sources":["../src/WizardForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9D,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiBtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;+CAG2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;iBAEa;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAujBhD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -137,3 +137,4 @@ export declare function applyAutoLayout(formFields: FormField[], objectSchema: a
137
137
  fields: FormField[];
138
138
  columns: number | undefined;
139
139
  };
140
+ //# sourceMappingURL=autoLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoLayout.d.ts","sourceRoot":"","sources":["../src/autoLayout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+ClD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKvD;AAOD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAmBR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,SAAS,EAAE,CAab;AAmCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EAAE,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,SAAS,EAAE,CAgBb;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,SAAS,EAAE,CAmBb;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EAAE,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,SAAS,EAAE,CAOb;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAKlE,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B;IAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,CASxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAIvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,EAAE,GAAG,EACjB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB;IAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CA6BtD"}
@@ -101,3 +101,4 @@ export declare function deriveDetail(childObject: string, childSchema: ObjectSch
101
101
  amountField?: string;
102
102
  inlineEdit?: boolean | InlineMode;
103
103
  }): DerivedDetail;
104
+ //# sourceMappingURL=deriveMasterDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveMasterDetail.d.ts","sourceRoot":"","sources":["../src/deriveMasterDetail.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAuBD,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CA6BlF;AAgCD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,gBAAgB,EAAE,MAAM,GACvB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAkD5C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACjF,UAAU,EAAE,CA0Cd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,gBAAgB,GAAG,SAAS,GACxC,UAAU,EAAE,CAgCd;AAOD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5D,MAAM,EAAE,CAaV;AAED,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAiBzC,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;iFAEiF;AACjF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,EAC5C,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,UAAU,CAaZ;AAwBD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mFAAmF;IACnF,IAAI,EAAE,UAAU,CAAC;IACjB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;+EAC2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;CAAO,GAC7H,aAAa,CAmBf"}
@@ -19,3 +19,4 @@ import { FormField, ObjectFormSection } from '@object-ui/types';
19
19
  * into ObjectForm's existing section-render path.
20
20
  */
21
21
  export declare function deriveFieldGroupSections(fields: FormField[], fieldGroups: unknown): ObjectFormSection[] | null;
22
+ //# sourceMappingURL=fieldGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldGroups.d.ts","sourceRoot":"","sources":["../src/fieldGroups.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,OAAO,GACnB,iBAAiB,EAAE,GAAG,IAAI,CAiC5B"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { ObjectForm } from './ObjectForm';
2
2
  export { ObjectForm };
3
3
  export type { ObjectFormProps } from './ObjectForm';
4
- export { FormSection } from './FormSection';
5
- export type { FormSectionProps } from './FormSection';
4
+ export { FormSectionContainer } from './FormSection';
5
+ export type { FormSectionContainerProps } from './FormSection';
6
6
  export { applyAutoLayout, inferColumns, inferModalSize, isWideFieldType, isAutoGeneratedFieldType, applyAutoColSpan, containerGridColsFor, filterCreateModeFields, filterSystemFields, filterAutoGeneratedFields, } from './autoLayout';
7
7
  export { TabbedForm } from './TabbedForm';
8
8
  export type { TabbedFormProps, TabbedFormSchema, FormSectionConfig } from './TabbedForm';
@@ -24,3 +24,4 @@ export { LineItemsPanel } from './LineItemsPanel';
24
24
  export type { LineItemsPanelSchema } from './LineItemsPanel';
25
25
  export { deriveDetail, deriveColumns, deriveFormFields, findRelationshipField, resolveInlineMode } from './deriveMasterDetail';
26
26
  export type { DerivedDetail, InlineMode } from './deriveMasterDetail';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC/H,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}