@object-ui/plugin-form 17.5.0 → 17.7.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 (78) hide show
  1. package/CHANGELOG.md +4841 -0
  2. package/README.md +772 -77
  3. package/dist/DrawerForm.d.ts +30 -2
  4. package/dist/DrawerForm.d.ts.map +1 -1
  5. package/dist/EmbeddableForm.d.ts.map +1 -1
  6. package/dist/FormAnalytics.d.ts.map +1 -1
  7. package/dist/LineItemsPanel.d.ts +6 -3
  8. package/dist/LineItemsPanel.d.ts.map +1 -1
  9. package/dist/MasterDetailForm.d.ts +31 -10
  10. package/dist/MasterDetailForm.d.ts.map +1 -1
  11. package/dist/ModalForm.d.ts +48 -4
  12. package/dist/ModalForm.d.ts.map +1 -1
  13. package/dist/ObjectForm.d.ts +18 -2
  14. package/dist/ObjectForm.d.ts.map +1 -1
  15. package/dist/SplitForm.d.ts +37 -2
  16. package/dist/SplitForm.d.ts.map +1 -1
  17. package/dist/TabbedForm.d.ts +65 -3
  18. package/dist/TabbedForm.d.ts.map +1 -1
  19. package/dist/WizardForm.d.ts +149 -11
  20. package/dist/WizardForm.d.ts.map +1 -1
  21. package/dist/autoLayout.d.ts +12 -3
  22. package/dist/autoLayout.d.ts.map +1 -1
  23. package/dist/closedAffordanceNotice.d.ts +14 -0
  24. package/dist/closedAffordanceNotice.d.ts.map +1 -0
  25. package/dist/customFieldsMerge.d.ts +29 -0
  26. package/dist/customFieldsMerge.d.ts.map +1 -0
  27. package/dist/deriveMasterDetail.d.ts +33 -9
  28. package/dist/deriveMasterDetail.d.ts.map +1 -1
  29. package/dist/fieldGroups.d.ts +176 -0
  30. package/dist/fieldGroups.d.ts.map +1 -1
  31. package/dist/fieldWriteGate.d.ts +116 -0
  32. package/dist/fieldWriteGate.d.ts.map +1 -0
  33. package/dist/flatFields.d.ts +30 -0
  34. package/dist/flatFields.d.ts.map +1 -0
  35. package/dist/formChrome.d.ts +55 -0
  36. package/dist/formChrome.d.ts.map +1 -0
  37. package/dist/index.d.ts +131 -25
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3676 -1967
  40. package/dist/index.umd.cjs +1 -1
  41. package/dist/initialRecord.d.ts +72 -0
  42. package/dist/initialRecord.d.ts.map +1 -0
  43. package/dist/loadFailure.d.ts +28 -0
  44. package/dist/loadFailure.d.ts.map +1 -0
  45. package/dist/masterDetailTx.d.ts.map +1 -1
  46. package/dist/occSave.d.ts +6 -1
  47. package/dist/occSave.d.ts.map +1 -1
  48. package/dist/recordInvalidation.d.ts +33 -0
  49. package/dist/recordInvalidation.d.ts.map +1 -0
  50. package/dist/recordReadGate.d.ts +34 -0
  51. package/dist/recordReadGate.d.ts.map +1 -0
  52. package/dist/sanitize.d.ts +187 -5
  53. package/dist/sanitize.d.ts.map +1 -1
  54. package/dist/schemaDefaults.d.ts +51 -30
  55. package/dist/schemaDefaults.d.ts.map +1 -1
  56. package/dist/sectionFields.d.ts +65 -2
  57. package/dist/sectionFields.d.ts.map +1 -1
  58. package/dist/sectionGroups.d.ts +62 -0
  59. package/dist/sectionGroups.d.ts.map +1 -0
  60. package/dist/sectionPredicateDiagnostic.d.ts +38 -0
  61. package/dist/sectionPredicateDiagnostic.d.ts.map +1 -0
  62. package/dist/submitRedirect.d.ts +148 -0
  63. package/dist/submitRedirect.d.ts.map +1 -0
  64. package/dist/submitRedirectNavigation.d.ts +82 -0
  65. package/dist/submitRedirectNavigation.d.ts.map +1 -0
  66. package/dist/submitTarget.d.ts +119 -0
  67. package/dist/submitTarget.d.ts.map +1 -0
  68. package/dist/successBehavior.d.ts +44 -8
  69. package/dist/successBehavior.d.ts.map +1 -1
  70. package/dist/thankYouRedirectCountdown.d.ts +17 -0
  71. package/dist/thankYouRedirectCountdown.d.ts.map +1 -0
  72. package/dist/thankYouRedirectNavigation.d.ts +111 -0
  73. package/dist/thankYouRedirectNavigation.d.ts.map +1 -0
  74. package/dist/uploadGate.d.ts +35 -0
  75. package/dist/uploadGate.d.ts.map +1 -0
  76. package/dist/writePayload.d.ts +68 -0
  77. package/dist/writePayload.d.ts.map +1 -0
  78. package/package.json +13 -12
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
3
3
  export interface DrawerFormSectionConfig {
4
4
  name?: string;
5
5
  label?: string;
@@ -8,6 +8,15 @@ export interface DrawerFormSectionConfig {
8
8
  fields: (string | FormField)[];
9
9
  collapsible?: boolean;
10
10
  collapsed?: boolean;
11
+ /**
12
+ * ADR-0089 `FormSection.visibleWhen` — conditional visibility for the
13
+ * section's divider HEADER, evaluated by the form renderer with the canonical
14
+ * engine and the host predicate scope (#6010/#6111). Fails OPEN.
15
+ */
16
+ visibleWhen?: string | {
17
+ dialect?: string;
18
+ source: string;
19
+ };
11
20
  /** Custom CSS class for the section's divider header. */
12
21
  className?: string;
13
22
  }
@@ -16,7 +25,8 @@ export interface DrawerFormSchema {
16
25
  formType: 'drawer';
17
26
  objectName: string;
18
27
  mode: 'create' | 'edit' | 'view';
19
- recordId?: string | number;
28
+ /** Record ID (for edit/view modes). A string, per the one record-id rule on `DataSource` (objectui#9511) — `ObjectForm` builds this schema from the authorable `ObjectFormSchema.recordId`, which is a string, and `findOne` takes a string. */
29
+ recordId?: string;
20
30
  title?: string;
21
31
  description?: string;
22
32
  sections?: DrawerFormSectionConfig[];
@@ -60,6 +70,24 @@ export interface DrawerFormSchema {
60
70
  readOnly?: boolean;
61
71
  layout?: 'vertical' | 'horizontal';
62
72
  columns?: number;
73
+ /**
74
+ * Override persistence — the seam a host uses to own the write. Declared as
75
+ * `ObjectFormSchema['submitHandler']` rather than restated, so this variant
76
+ * and the canonical key `ObjectForm` forwards can never drift apart.
77
+ * When supplied, the form validates and hands the collected values
78
+ * to this handler INSTEAD of calling `dataSource.create` /
79
+ * `dataSource.update`; the returned record is passed on to `onSuccess`.
80
+ * In `edit` mode, for a record this form read itself, it hands over what it
81
+ * would have written: the fields that differ from that read, or the full
82
+ * sanitized payload when nothing changed (objectui#10156; the whole rule is
83
+ * on `ObjectFormSchema['submitHandler']`).
84
+ *
85
+ * `MasterDetailForm` supplies it to route the parent AND its child
86
+ * collections through one atomic `batchTransaction` (#2679 / ADR-0034
87
+ * item 4). A renderer that does not read it writes the parent on its own and
88
+ * escapes that transaction — objectui#6176.
89
+ */
90
+ submitHandler?: ObjectFormSchema['submitHandler'];
63
91
  onSuccess?: (data: any) => void | Promise<void>;
64
92
  onError?: (error: Error) => void;
65
93
  onCancel?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerForm.d.ts","sourceRoot":"","sources":["../src/DrawerForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DrawerForm.d.ts","sourceRoot":"","sources":["../src/DrawerForm.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmbeddableForm.d.ts","sourceRoot":"","sources":["../src/EmbeddableForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EmbeddableForm.d.ts","sourceRoot":"","sources":["../src/EmbeddableForm.tsx"],"names":[],"mappings":"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"}
@@ -1 +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
+ {"version":3,"file":"FormAnalytics.d.ts","sourceRoot":"","sources":["../src/FormAnalytics.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAIvC,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,CA+ItD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -8,7 +8,9 @@ export interface LineItemsPanelSchema {
8
8
  parentObject?: string;
9
9
  parentId?: string;
10
10
  recordId?: string;
11
+ /** Numeric CHILD column summed into the grid's footer total, e.g. `'amount'`. */
11
12
  amountField?: string;
13
+ /** PARENT field that receives that sum on save, e.g. `'total_amount'`. */
12
14
  totalField?: string;
13
15
  title?: string;
14
16
  readonly?: boolean;
@@ -29,10 +31,11 @@ export interface LineItemsPanelSchema {
29
31
  */
30
32
  filter?: any[] | Record<string, any>;
31
33
  /**
32
- * Load order for the child rows — the legacy `"line_no desc"` clause or the
33
- * spec's `SortConfig[]`. Without one the rows arrive in storage order.
34
+ * Load order for the child rows — the spec's `SortConfig[]`. Without one the
35
+ * rows arrive in storage order. The legacy `"line_no desc"` clause is RETIRED
36
+ * (objectui#8221): `convertSortToQueryParams` refuses it out loud.
34
37
  */
35
- sort?: string | Array<{
38
+ sort?: Array<{
36
39
  field?: string;
37
40
  order?: 'asc' | 'desc';
38
41
  }>;
@@ -1 +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;AAUpE,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;IACjB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAsLrE,CAAC"}
1
+ {"version":3,"file":"LineItemsPanel.d.ts","sourceRoot":"","sources":["../src/LineItemsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AASjF,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA8DpE,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,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,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;IACjB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAsE5C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,CA2mBrE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
- import { DataSource } from '@object-ui/types';
2
+ import { DataSource, I18nLabel } from '@object-ui/types';
3
3
  import { GridColumn } from '@object-ui/fields';
4
- import { InlineMode } from './deriveMasterDetail';
4
+ import { InlineMode } from './deriveMasterDetail.js';
5
5
  export interface MasterDetailDetailConfig {
6
6
  /** Child object name, e.g. 'expense_line'. */
7
7
  childObject: string;
@@ -21,9 +21,6 @@ export interface MasterDetailDetailConfig {
21
21
  inlineMode?: InlineMode;
22
22
  /** Numeric child column to sum, e.g. 'amount'. */
23
23
  amountField?: string;
24
- /** Child field holding the line sort position — stamped on drag-reorder so
25
- * order persists. Auto-derived from a `position`/`sort_order`/… field. */
26
- sortField?: string;
27
24
  /** Parent field to receive the rolled-up sum, e.g. 'total_amount'. */
28
25
  totalField?: string;
29
26
  /** Section title. */
@@ -53,11 +50,28 @@ export interface MasterDetailFormSchema {
53
50
  sections?: any[];
54
51
  fields?: any[];
55
52
  formType?: 'simple' | 'tabbed';
56
- title?: string;
57
- submitText?: string;
58
- /** Label for the Cancel button in the action bar. i18n is the host's job
59
- * (this plugin is locale-agnostic); defaults to English 'Cancel'. */
60
- cancelText?: string;
53
+ /**
54
+ * `title`, `submitText` and `cancelText` are the spec's `I18nLabel`, as
55
+ * `ComponentPropsMap['object-master-detail-form']` in `@objectstack/spec`
56
+ * declares them: a plain string or an inline per-locale map such as
57
+ * `{ en: 'Purchase order', 'zh-CN': '采购单' }`. The form resolves each one
58
+ * with `pickLocalized` against the active UI language
59
+ * (`useObjectTranslation().language`) before it reaches the screen
60
+ * (objectui#10935).
61
+ *
62
+ * `title` names the record in the built-in edit-save toast ("… saved",
63
+ * pack key `form.savedNamed`), which shows only when the host supplies no
64
+ * `onSuccess`.
65
+ */
66
+ title?: I18nLabel;
67
+ /** Label of the Save button. Defaults to the session locale's `common.save`
68
+ * (edit) or `form.create` ('Save' / 'Create' in English). */
69
+ submitText?: I18nLabel;
70
+ /** Label for the Cancel button in the action bar, which renders only when the
71
+ * host supplies `onCancel`. Defaults to the session locale's `common.cancel`
72
+ * ('Cancel' in English); an authored label, a string or a per-locale map,
73
+ * always wins (objectui#11039). */
74
+ cancelText?: I18nLabel;
61
75
  /** Hide the bottom Save/Cancel action bar — e.g. a non-persisting design
62
76
  * preview. Defaults to shown (the form owns the only Save in this layout). */
63
77
  showSubmit?: boolean;
@@ -68,6 +82,13 @@ export interface MasterDetailFormSchema {
68
82
  * Defaults to `tax_rate`; the stack only appears if the field is present. */
69
83
  taxRateField?: string;
70
84
  onSuccess?: (parent: any) => void | Promise<void>;
85
+ /**
86
+ * Called after a refused save, for bookkeeping only (logging, custom focus
87
+ * handling, …) — NOT for showing the failure to the user. The form
88
+ * renderer already toasts every rejected write for any host `submitHandler`
89
+ * (objectui#7354); a host that also toasts here puts the same refusal on
90
+ * screen twice.
91
+ */
71
92
  onError?: (err: Error) => void;
72
93
  onCancel?: () => void;
73
94
  className?: string;
@@ -1 +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"}
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,EAA6B,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0BpE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErE,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;IAMrB,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;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;kEAC8D;IAC9D,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;wCAGoC;IACpC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;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;;;;;;OAMG;IACH,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;AA8uBD,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,CAo8B5D,CAAC"}
@@ -1,11 +1,31 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
3
3
  export interface ModalFormSectionConfig {
4
4
  name?: string;
5
5
  label?: string;
6
6
  description?: string;
7
7
  columns?: 1 | 2 | 3 | 4;
8
8
  fields: (string | FormField)[];
9
+ /**
10
+ * Whether the section can be collapsed — spec `FormSection.collapsible`.
11
+ * `collapsed: true` implies it (objectui#9780). The control lives on the
12
+ * section's divider row, so a section with neither `label` nor
13
+ * `description` cannot carry one: it renders open and is reported
14
+ * (objectui#9849, director ruling letter E). Stacked layout only — the
15
+ * `tabbed` content layout draws tabs, which do not collapse.
16
+ */
17
+ collapsible?: boolean;
18
+ /** Whether the section starts collapsed — spec `FormSection.collapsed`. Same rules as `collapsible`. */
19
+ collapsed?: boolean;
20
+ /**
21
+ * ADR-0089 `FormSection.visibleWhen` — conditional visibility for the
22
+ * section's divider HEADER, evaluated by the form renderer with the canonical
23
+ * engine and the host predicate scope (#6010/#6111). Fails OPEN.
24
+ */
25
+ visibleWhen?: string | {
26
+ dialect?: string;
27
+ source: string;
28
+ };
9
29
  /** Custom CSS class for the section's header row (stacked layout). */
10
30
  className?: string;
11
31
  /**
@@ -20,11 +40,12 @@ export interface ModalFormSchema {
20
40
  formType: 'modal';
21
41
  objectName: string;
22
42
  mode: 'create' | 'edit' | 'view';
23
- recordId?: string | number;
43
+ /** Record ID (for edit/view modes). A string, per the one record-id rule on `DataSource` (objectui#9511) — `ObjectForm` builds this schema from the authorable `ObjectFormSchema.recordId`, which is a string, and `findOne` takes a string. */
44
+ recordId?: string;
24
45
  title?: string;
25
46
  description?: string;
26
47
  sections?: ModalFormSectionConfig[];
27
- /** Internal content layout (ADR-0050, #1890): 'tabbed' renders sections as
48
+ /** Internal content layout (ADR-0050, objectstack-ai/objectstack#1890): 'tabbed' renders sections as
28
49
  * tabs inside the modal, so "modal + tabbed" composes. Default stacks them. */
29
50
  contentLayout?: 'simple' | 'tabbed';
30
51
  fields?: string[];
@@ -44,7 +65,12 @@ export interface ModalFormSchema {
44
65
  */
45
66
  modalSize?: 'sm' | 'default' | 'lg' | 'xl' | 'full';
46
67
  /**
47
- * Whether to show a close button in the header.
68
+ * Whether the dialog draws its close (X) button. Only an explicit `false`
69
+ * hides it (objectui#11061); both dialog arms (the flat form and the
70
+ * `subforms` master-detail form) pass it to `MobileDialogContent`'s
71
+ * `showCloseButton`. Hidden, the form is still dismissable: Escape (and a
72
+ * backdrop click) still reach `onOpenChange(false)`, as does the Cancel
73
+ * action when it is shown.
48
74
  * @default true
49
75
  */
50
76
  modalCloseButton?: boolean;
@@ -66,6 +92,24 @@ export interface ModalFormSchema {
66
92
  readOnly?: boolean;
67
93
  layout?: 'vertical' | 'horizontal';
68
94
  columns?: number;
95
+ /**
96
+ * Override persistence — the seam a host uses to own the write. Declared as
97
+ * `ObjectFormSchema['submitHandler']` rather than restated, so this variant
98
+ * and the canonical key `ObjectForm` forwards can never drift apart.
99
+ * When supplied, the form validates and hands the collected values
100
+ * to this handler INSTEAD of calling `dataSource.create` /
101
+ * `dataSource.update`; the returned record is passed on to `onSuccess`.
102
+ * In `edit` mode, for a record this form read itself, it hands over what it
103
+ * would have written: the fields that differ from that read, or the full
104
+ * sanitized payload when nothing changed (objectui#10156; the whole rule is
105
+ * on `ObjectFormSchema['submitHandler']`).
106
+ *
107
+ * `MasterDetailForm` supplies it to route the parent AND its child
108
+ * collections through one atomic `batchTransaction` (#2679 / ADR-0034
109
+ * item 4). A renderer that does not read it writes the parent on its own and
110
+ * escapes that transaction — objectui#6176.
111
+ */
112
+ submitHandler?: ObjectFormSchema['submitHandler'];
69
113
  onSuccess?: (data: any) => void | Promise<void>;
70
114
  onError?: (error: Error) => void;
71
115
  onCancel?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ModalForm.d.ts","sourceRoot":"","sources":["../src/ModalForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModalForm.d.ts","sourceRoot":"","sources":["../src/ModalForm.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  import { default as React } from 'react';
2
2
  import { ObjectFormSchema, DataSource } from '@object-ui/types';
3
- export interface ObjectFormProps {
3
+ /**
4
+ * Props of the `ObjectForm` React component.
5
+ *
6
+ * Renamed off the bare `ObjectFormProps` (objectui#4650): from 17.0.0
7
+ * `@objectstack/spec/ui` owns that name, where it is the AUTHORED props
8
+ * document of the `object-form` element — `z.input<typeof
9
+ * ObjectFormPropsSchema>`, i.e. serialisable authoring keys only. This is the
10
+ * RENDERER's props: a live `dataSource`, submit/cancel callbacks and imperative
11
+ * handles, none of which can exist in authored metadata. Two layers under one
12
+ * word, resolved the way this repo already resolved it for `PageHeaderProps` ->
13
+ * `PageHeaderComponentProps` (app-shell) and the `Record*ComponentProps` family
14
+ * in `@object-ui/types`.
15
+ *
16
+ * The barrel keeps `ObjectFormProps` as a deprecated alias of this type, so no
17
+ * importer breaks. Tripwire: `__tests__/spec-symbol-4650.test.ts`.
18
+ */
19
+ export interface ObjectFormComponentProps {
4
20
  /**
5
21
  * The schema configuration for the form
6
22
  */
@@ -33,5 +49,5 @@ export interface ObjectFormProps {
33
49
  * />
34
50
  * ```
35
51
  */
36
- export declare const ObjectForm: React.FC<ObjectFormProps>;
52
+ export declare const ObjectForm: React.FC<ObjectFormComponentProps>;
37
53
  //# sourceMappingURL=ObjectForm.d.ts.map
@@ -1 +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;AA+B5F,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"}
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;AAgE5F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAC;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuFD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAoZzD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
3
3
  export interface SplitFormSectionConfig {
4
4
  name?: string;
5
5
  label?: string;
@@ -13,6 +13,15 @@ export interface SplitFormSectionConfig {
13
13
  */
14
14
  pane?: 'primary' | 'secondary';
15
15
  fields: (string | FormField)[];
16
+ /**
17
+ * ADR-0089 `FormSection.visibleWhen` — conditional visibility for the
18
+ * section's divider HEADER, evaluated by the form renderer with the canonical
19
+ * engine and the host predicate scope (#6010/#6111). Fails OPEN.
20
+ */
21
+ visibleWhen?: string | {
22
+ dialect?: string;
23
+ source: string;
24
+ };
16
25
  /** Custom CSS class for the section's header row. */
17
26
  className?: string;
18
27
  /**
@@ -28,8 +37,16 @@ export interface SplitFormSchema {
28
37
  formType: 'split';
29
38
  objectName: string;
30
39
  mode: 'create' | 'edit' | 'view';
31
- recordId?: string | number;
40
+ /** Record ID (for edit/view modes). A string, per the one record-id rule on `DataSource` (objectui#9511) — `ObjectForm` builds this schema from the authorable `ObjectFormSchema.recordId`, which is a string, and `findOne` takes a string. */
41
+ recordId?: string;
32
42
  sections: SplitFormSectionConfig[];
43
+ /**
44
+ * Inline field definitions (`object-form.customFields`). A member naming a
45
+ * field a section lists is that field's definition, as on every other
46
+ * `formType` (objectui#10254); `ObjectForm` hands the key over in its
47
+ * `{...schema}` spread.
48
+ */
49
+ customFields?: FormField[];
33
50
  /**
34
51
  * Split direction.
35
52
  * @default 'horizontal'
@@ -59,6 +76,24 @@ export interface SplitFormSchema {
59
76
  initialValues?: Record<string, any>;
60
77
  initialData?: Record<string, any>;
61
78
  readOnly?: boolean;
79
+ /**
80
+ * Override persistence — the seam a host uses to own the write. Declared as
81
+ * `ObjectFormSchema['submitHandler']` rather than restated, so this variant
82
+ * and the canonical key `ObjectForm` forwards can never drift apart.
83
+ * When supplied, the form validates and hands the collected values
84
+ * to this handler INSTEAD of calling `dataSource.create` /
85
+ * `dataSource.update`; the returned record is passed on to `onSuccess`.
86
+ * In `edit` mode, for a record this form read itself, it hands over what it
87
+ * would have written: the fields that differ from that read, or the full
88
+ * sanitized payload when nothing changed (objectui#10156, objectui#10563;
89
+ * the whole rule is on `ObjectFormSchema['submitHandler']`).
90
+ *
91
+ * `MasterDetailForm` supplies it to route the parent AND its child
92
+ * collections through one atomic `batchTransaction` (#2679 / ADR-0034
93
+ * item 4). A renderer that does not read it writes the parent on its own and
94
+ * escapes that transaction — objectui#6176.
95
+ */
96
+ submitHandler?: ObjectFormSchema['submitHandler'];
62
97
  onSuccess?: (data: any) => void | Promise<void>;
63
98
  onError?: (error: Error) => void;
64
99
  onCancel?: () => void;
@@ -1 +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;AAQ9D,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,CAiS9C,CAAC;AAEF,eAAe,SAAS,CAAC"}
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,EAAc,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAyB5F,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;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,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,gPAAgP;IAChP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAE3B;;;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;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAElD,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,CA0b9C,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
3
3
  export interface FormSectionConfig {
4
4
  /**
5
5
  * Section identifier (used as tab value)
@@ -22,6 +22,40 @@ export interface FormSectionConfig {
22
22
  * Field names or configurations in this section
23
23
  */
24
24
  fields: (string | FormField)[];
25
+ /**
26
+ * ADR-0089 `FormSection.visibleWhen` — the TABBED arm of the one grouping
27
+ * contract ruled 2026-08-29 (objectui#6237, option A). Spelled exactly as the
28
+ * sibling `ModalFormSectionConfig.visibleWhen`, because it IS the same
29
+ * authored key: `ObjectForm` copies a section's predicate here, this layout
30
+ * copies it onto the tab it synthesises (`FormFieldTab.visibleWhen`), and the
31
+ * form renderer evaluates it on the canonical engine with the live record and
32
+ * the host predicate scope bound (#6010) — the same path a field's own
33
+ * `visibleWhen` takes. A broken predicate fails OPEN (the tab stays visible).
34
+ *
35
+ * Ruled semantics (maintainer 2026-08-27, the same ruling for tabs as for
36
+ * sections), inherited from the renderer rather than re-implemented here:
37
+ * visibility decides what is DRAWN and nothing else — a hidden tab's values
38
+ * still submit — and a hidden tab's fields skip CLIENT-side validation, so a
39
+ * user is never blocked by an error pointing at a control they cannot see.
40
+ * The server-side contract stays the loud floor for genuinely-required data;
41
+ * see the boundary note on `WizardStepConfig` and objectui#6237 for the
42
+ * measured reason the server cannot read this predicate.
43
+ *
44
+ * ⛔ Deliberately NOT on the wizard's step type, and that boundary is now
45
+ * structural rather than subtractive (maintainer ruling 2026-08-30,
46
+ * objectui#6237). `WizardForm` used to type its steps as
47
+ * `Omit<FormSectionConfig, 'visibleWhen'>` — a derivation that defended the
48
+ * one key it named while every FUTURE key added here still reached a wizard
49
+ * step by default. `WizardStepConfig` is now declared independently, exactly
50
+ * as `SplitFormSectionConfig` / `ModalFormSectionConfig` /
51
+ * `DrawerFormSectionConfig` already are, so this type and the wizard's share
52
+ * nothing: a key is authorable on a wizard step only if someone writes it
53
+ * there, on the type whose renderer has to honour it.
54
+ */
55
+ visibleWhen?: string | {
56
+ dialect?: string;
57
+ source: string;
58
+ };
25
59
  /**
26
60
  * Custom CSS class for the section's Card wrapper.
27
61
  *
@@ -47,13 +81,23 @@ export interface TabbedFormSchema {
47
81
  */
48
82
  mode: 'create' | 'edit' | 'view';
49
83
  /**
50
- * Record ID (for edit/view modes)
84
+ * Record ID (for edit/view modes). A string, per the one record-id rule on
85
+ * `DataSource` (objectui#9511) — `ObjectForm` builds this schema from the
86
+ * authorable `ObjectFormSchema.recordId`, which is a string, and `findOne`
87
+ * takes a string.
51
88
  */
52
- recordId?: string | number;
89
+ recordId?: string;
53
90
  /**
54
91
  * Tab sections configuration
55
92
  */
56
93
  sections: FormSectionConfig[];
94
+ /**
95
+ * Inline field definitions (`object-form.customFields`). A member naming a
96
+ * field a section lists is that field's definition, as on every other
97
+ * `formType` (objectui#10254); `ObjectForm` hands the key over in its
98
+ * `{...schema}` spread.
99
+ */
100
+ customFields?: FormField[];
57
101
  /**
58
102
  * Grid width for the whole form (1–4). Aligns with @objectstack/spec
59
103
  * FormView.columns and OUTRANKS the per-section `columns`, which say how a
@@ -100,6 +144,24 @@ export interface TabbedFormSchema {
100
144
  * Read-only mode
101
145
  */
102
146
  readOnly?: boolean;
147
+ /**
148
+ * Override persistence — the seam a host uses to own the write. Declared as
149
+ * `ObjectFormSchema['submitHandler']` rather than restated, so this variant
150
+ * and the canonical key `ObjectForm` forwards can never drift apart.
151
+ * When supplied, the form validates and hands the collected values
152
+ * to this handler INSTEAD of calling `dataSource.create` /
153
+ * `dataSource.update`; the returned record is passed on to `onSuccess`.
154
+ * In `edit` mode, for a record this form read itself, it hands over what it
155
+ * would have written: the fields that differ from that read, or the full
156
+ * sanitized payload when nothing changed (objectui#10156, objectui#10563;
157
+ * the whole rule is on `ObjectFormSchema['submitHandler']`).
158
+ *
159
+ * `MasterDetailForm` supplies it to route the parent AND its child
160
+ * collections through one atomic `batchTransaction` (#2679 / ADR-0034
161
+ * item 4). A renderer that does not read it writes the parent on its own and
162
+ * escapes that transaction — objectui#6176.
163
+ */
164
+ submitHandler?: ObjectFormSchema['submitHandler'];
103
165
  /**
104
166
  * Callbacks
105
167
  */
@@ -1 +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;AAQ9D,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,CA2PhD,CAAC;AAEF,eAAe,UAAU,CAAC"}
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,EAAc,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAyB5F,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5D;;;;;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;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAE3B;;;;;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;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAElD;;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,CAuchD,CAAC;AAEF,eAAe,UAAU,CAAC"}