@object-ui/plugin-form 17.7.0 → 18.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 (41) hide show
  1. package/CHANGELOG.md +804 -0
  2. package/README.md +148 -38
  3. package/dist/DrawerForm.d.ts +13 -2
  4. package/dist/DrawerForm.d.ts.map +1 -1
  5. package/dist/LineItemsPanel.d.ts.map +1 -1
  6. package/dist/MasterDetailForm.d.ts +49 -29
  7. package/dist/MasterDetailForm.d.ts.map +1 -1
  8. package/dist/ModalForm.d.ts +13 -2
  9. package/dist/ModalForm.d.ts.map +1 -1
  10. package/dist/ObjectForm.d.ts.map +1 -1
  11. package/dist/SplitForm.d.ts +13 -2
  12. package/dist/SplitForm.d.ts.map +1 -1
  13. package/dist/TabbedForm.d.ts +11 -3
  14. package/dist/TabbedForm.d.ts.map +1 -1
  15. package/dist/WizardForm.d.ts +5 -3
  16. package/dist/WizardForm.d.ts.map +1 -1
  17. package/dist/autoLayout.d.ts +101 -5
  18. package/dist/autoLayout.d.ts.map +1 -1
  19. package/dist/deriveMasterDetail.d.ts +53 -24
  20. package/dist/deriveMasterDetail.d.ts.map +1 -1
  21. package/dist/fieldGroups.d.ts +14 -1
  22. package/dist/fieldGroups.d.ts.map +1 -1
  23. package/dist/fieldWriteGate.d.ts +31 -11
  24. package/dist/fieldWriteGate.d.ts.map +1 -1
  25. package/dist/index.d.ts +32 -7
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2206 -1896
  28. package/dist/index.umd.cjs +1 -1
  29. package/dist/initialFieldFocus.d.ts +23 -0
  30. package/dist/initialFieldFocus.d.ts.map +1 -0
  31. package/dist/sanitize.d.ts +88 -3
  32. package/dist/sanitize.d.ts.map +1 -1
  33. package/dist/schemaDefaults.d.ts +80 -6
  34. package/dist/schemaDefaults.d.ts.map +1 -1
  35. package/dist/sectionFields.d.ts +17 -6
  36. package/dist/sectionFields.d.ts.map +1 -1
  37. package/dist/submitTarget.d.ts +17 -0
  38. package/dist/submitTarget.d.ts.map +1 -1
  39. package/dist/writePayload.d.ts +24 -5
  40. package/dist/writePayload.d.ts.map +1 -1
  41. package/package.json +10 -10
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema, ObjectFormSection } from '@object-ui/types';
3
3
  export interface FormSectionConfig {
4
4
  /**
5
5
  * Section identifier (used as tab value)
@@ -19,9 +19,11 @@ export interface FormSectionConfig {
19
19
  */
20
20
  columns?: 1 | 2 | 3 | 4;
21
21
  /**
22
- * Field names or configurations in this section
22
+ * The same three entry shapes as `ObjectFormSection.fields`, by reference:
23
+ * a field name, the form view's `{ field, … }` entry, or an inline
24
+ * `FormField` (objectui#11615).
23
25
  */
24
- fields: (string | FormField)[];
26
+ fields: NonNullable<ObjectFormSection['fields']>;
25
27
  /**
26
28
  * ADR-0089 `FormSection.visibleWhen` — the TABBED arm of the one grouping
27
29
  * contract ruled 2026-08-29 (objectui#6237, option A). Spelled exactly as the
@@ -56,6 +58,12 @@ export interface FormSectionConfig {
56
58
  dialect?: string;
57
59
  source: string;
58
60
  };
61
+ /**
62
+ * The fault direction of {@link visibleWhen}, by reference to
63
+ * `ObjectFormSection.visibleWhenFault` (objectui#13055): `'hidden'` (a field
64
+ * group's predicate) hides the section when it cannot be evaluated.
65
+ */
66
+ visibleWhenFault?: ObjectFormSection['visibleWhenFault'];
59
67
  /**
60
68
  * Custom CSS class for the section's Card wrapper.
61
69
  *
@@ -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,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"}
1
+ {"version":3,"file":"TabbedForm.d.ts","sourceRoot":"","sources":["../src/TabbedForm.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { FormField, DataSource, ObjectFormSchema } from '@object-ui/types';
2
+ import { FormField, DataSource, ObjectFormSchema, ObjectFormSection } from '@object-ui/types';
3
3
  import { SubmitBehavior } from './successBehavior.js';
4
4
  /**
5
5
  * A wizard STEP — the wizard's OWN authored group shape (objectui#6237).
@@ -90,9 +90,11 @@ export interface WizardStepConfig {
90
90
  */
91
91
  columns?: 1 | 2 | 3 | 4;
92
92
  /**
93
- * Field names or configurations in this step.
93
+ * The same three entry shapes as `ObjectFormSection.fields`, by reference:
94
+ * a field name, the form view's `{ field, … }` entry, or an inline
95
+ * `FormField` (objectui#11615).
94
96
  */
95
- fields: (string | FormField)[];
97
+ fields: NonNullable<ObjectFormSection['fields']>;
96
98
  /**
97
99
  * Custom CSS class for this step's container.
98
100
  *
@@ -1 +1 @@
1
- {"version":3,"file":"WizardForm.d.ts","sourceRoot":"","sources":["../src/WizardForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WizardForm.d.ts","sourceRoot":"","sources":["../src/WizardForm.tsx"],"names":[],"mappings":"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"}
@@ -103,6 +103,96 @@ export declare function filterAutoGeneratedFields(fields: FormField[], objectSch
103
103
  export declare const CONTAINER_GRID_COLS: Record<number, string | undefined>;
104
104
  /** Clamp an arbitrary column count into the 1–4 keys of {@link CONTAINER_GRID_COLS}. */
105
105
  export declare function containerGridColsFor(columns: number | undefined): string | undefined;
106
+ /**
107
+ * The field grid of a sectioned form whose sections do not all fit one grid
108
+ * (objectui#12548): one column below `@md`, twelve tracks from `@md` up.
109
+ *
110
+ * Twelve is the least count every authored section density divides
111
+ * (`@objectstack/spec` `FormSectionSchema.columns` is `1 | 2 | 3 | 4`), so in
112
+ * this grid a field's colSpan is in TWELFTHS of the row: 12 / 6 / 4 / 3 for a
113
+ * 1 / 2 / 3 / 4-column section. The form renderer draws a twelfths colSpan as
114
+ * one class per tier, keeping each density's step ladder from
115
+ * {@link CONTAINER_GRID_COLS} (at most two per row at `@md`, three at `@2xl`,
116
+ * four at `@4xl`); its table is `TWELVE_TRACK_SPAN_CLASS` in
117
+ * `@object-ui/components`' form renderer.
118
+ *
119
+ * ⛔ A literal, never assembled: Tailwind's scanner reads source text.
120
+ */
121
+ export declare const TWELVE_TRACK_GRID_COLS = "grid gap-4 grid-cols-1 @md:grid-cols-12";
122
+ /**
123
+ * How many fields per row a section draws where neither it nor its form
124
+ * declares `columns` (objectui#12592): two from the container's `@md` tier up,
125
+ * one below it, so a phone keeps its single column.
126
+ *
127
+ * An undeclared density is the renderer's choice by available width, and a
128
+ * declared one — `1` included — is drawn as written (the section-`columns`
129
+ * fork on objectui#12521, ruled 6204264665; `@objectstack/spec` dropped
130
+ * `FormSectionSchema.columns`' `default(1)` in objectstack-ai/objectstack#23740,
131
+ * so an undeclared section reaches every host). The container query makes
132
+ * "available width" literal: the same section draws one per row in a narrow
133
+ * drawer or on a phone, and two in a dialog or a page.
134
+ */
135
+ export declare const UNDECLARED_SECTION_COLUMNS = 2;
136
+ /**
137
+ * One section's fields per row: its declared `columns` as written, else the
138
+ * form's declared `columns` (what an undeclared section always filled), else
139
+ * {@link UNDECLARED_SECTION_COLUMNS}.
140
+ */
141
+ export declare function sectionColumnsFor(sectionColumns: unknown, formColumns: unknown): number;
142
+ /**
143
+ * The ONE grid width of a sectioned form: the form's declared `columns`, else
144
+ * the widest section's {@link sectionColumnsFor}.
145
+ *
146
+ * @param formColumns The form's DECLARED `columns` (`undefined` when none).
147
+ * @param sectionColumns The DECLARED `columns` of every section the form draws.
148
+ */
149
+ export declare function sectionedFormColumns(formColumns: unknown, sectionColumns: ReadonlyArray<unknown>): 1 | 2 | 3 | 4;
150
+ /** The field grid a sectioned host draws, and how it lays out one section's fields on it. */
151
+ export interface SectionedGridLayout {
152
+ /** The form's grid width in the 1–4 vocabulary (`FormSchema.columns`). */
153
+ columns: 1 | 2 | 3 | 4;
154
+ /** The field container's grid classes; `undefined` for a one-column form. */
155
+ fieldContainerClass: string | undefined;
156
+ /** Lay one section's fields out at that section's DECLARED `columns` (`undefined` when none). */
157
+ layOut: (fields: FormField[], sectionColumns?: unknown) => FormField[];
158
+ }
159
+ /**
160
+ * The ONE layout rule of a sectioned form — `ModalForm`, `ObjectForm`,
161
+ * `SplitForm`, `TabbedForm` and `WizardForm` all call it (objectui#12548).
162
+ *
163
+ * Every section shares the form's single field grid (one form, one
164
+ * react-hook-form instance — #2153/#2959), and every authored section must
165
+ * still draw its OWN `columns` count per row: `FormSectionSchema.columns` is a
166
+ * per-section count, whatever the other sections declare.
167
+ *
168
+ * - When every section's count is 1 or the grid's own width, the grid is
169
+ * {@link CONTAINER_GRID_COLS}' and the spans are {@link applyAutoColSpan}'s,
170
+ * byte for byte what a single-density form always drew: on that grid a
171
+ * one-column section's fields take the row and a full-width section's take
172
+ * one cell each, which is exactly their count.
173
+ * - Otherwise a section's count does not fit that grid at some tier — a
174
+ * `columns: 2` section on a 3-wide grid spanned 2 of 3 cells, ONE field per
175
+ * row, and a `columns: 3` section on a 4-wide grid spanned 1 cell, FOUR per
176
+ * row (`Math.round(grid / sectionColumns)`). The grid becomes
177
+ * {@link TWELVE_TRACK_GRID_COLS} and each field spans twelfths of the row:
178
+ * 1. `span: 'full'`, or a wide widget type → 12, the whole row;
179
+ * 2. an authored `colSpan` → that many of its SECTION's columns, clamped
180
+ * to them (it keeps winning over the density);
181
+ * 3. otherwise → 12 / the section's columns.
182
+ *
183
+ * A section's count is clamped to the grid width, as it always was: the form
184
+ * view's own `columns` outranks how a section fills it.
185
+ *
186
+ * Every host hands it what the AUTHOR wrote, never a count it resolved itself
187
+ * (objectui#12592): an undeclared section and an undeclared form resolve here,
188
+ * through {@link sectionColumnsFor} and {@link sectionedFormColumns}, so a
189
+ * section that declares nothing draws {@link UNDECLARED_SECTION_COLUMNS} per
190
+ * row in the dialog and on every page host alike.
191
+ *
192
+ * @param formColumns The form's DECLARED `columns` (`undefined` when none).
193
+ * @param sectionColumns The DECLARED `columns` of every section the form draws.
194
+ */
195
+ export declare function sectionedGridLayout(formColumns: unknown, sectionColumns: ReadonlyArray<unknown>): SectionedGridLayout;
106
196
  /**
107
197
  * Build the layout-related props for a *section's* inner form (`SchemaRenderer`).
108
198
  *
@@ -123,13 +213,19 @@ export declare function sectionFormLayout(fields: FormField[], columns: number |
123
213
  fieldContainerClass?: string;
124
214
  };
125
215
  /**
126
- * Infer an appropriate modal size based on the number of layout columns.
127
- * Used to auto-upgrade the modal width when auto-layout detects multi-column forms.
216
+ * Infer the modal size for a dialog whose author declared none, from the
217
+ * number of layout columns it will show.
128
218
  *
129
219
  * Mapping:
130
- * - 1 column → 'default' (max-w-lg)
131
- * - 2 columns → 'xl' (max-w-5xl)
132
- * - 3+ columns → 'full' (max-w-[95vw])
220
+ * - 0–1 column → 'lg' (max-w-2xl)
221
+ * - 2+ columns → 'xl' (max-w-5xl)
222
+ *
223
+ * ⛔ Never 'full' (objectui#12521): a derived dialog is bounded, and its width
224
+ * follows its content (the objectui#12080 ruling). 'full' (95vw) stays
225
+ * available to an author who declares `modalSize: 'full'`. The bound changes
226
+ * no grid class an authored layout carries: the field grid's tiers are
227
+ * container queries, so an authored section draws as many of its columns as
228
+ * the bounded dialog's width admits.
133
229
  */
134
230
  export declare function inferModalSize(columns: number): 'sm' | 'default' | 'lg' | 'xl' | 'full';
135
231
  /**
@@ -1 +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;AAsElD;;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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;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;AAiBD;;;;;;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"}
1
+ {"version":3,"file":"autoLayout.d.ts","sourceRoot":"","sources":["../src/autoLayout.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { GridColumn } from '@object-ui/fields';
1
+ import { BooleanValueLabel, GridColumn } from '@object-ui/fields';
2
2
  /**
3
3
  * Minimal shape of a MASTER-DETAIL CHILD object's schema, as returned by
4
4
  * `DataSource.getObjectSchema` — the `childSchema` parameter of every derive
@@ -32,23 +32,29 @@ export declare function fieldTypeToColumnType(type: string | undefined): GridCol
32
32
  */
33
33
  export declare function findRelationshipField(childSchema: ChildObjectSchemaLike | undefined, parentObjectName: string): string | undefined;
34
34
  /**
35
- * Default-visible column budget for an auto-derived inline grid. An inline
36
- * line-item grid lives in a constrained width (modal / detail card), so we show
37
- * a focused set by default and mark the rest `defaultHidden` — they are NOT
38
- * dropped: the grid's column chooser reveals them on demand (the mainstream
39
- * "personalize columns" pattern; cf. Odoo `optional` / Salesforce column
40
- * personalization). Required columns are always visible. Authors can override
41
- * with explicit `columns` / `inlineColumns` (no curation), or `maxColumns: 0`.
42
- */
43
- export declare const DEFAULT_MAX_INLINE_COLUMNS = 6;
44
- /**
45
- * Derive editable grid columns from a child object's fields, skipping system /
46
- * audit fields, non-editable types, and the back-reference FK to the parent.
47
- * Every editable column is returned; those beyond {@link DEFAULT_MAX_INLINE_COLUMNS}
48
- * are flagged `defaultHidden` (collapsed into the grid's column chooser, not
49
- * dropped). Pass `maxColumns: 0` to flag none.
35
+ * Derive editable grid columns from a child object's fields — the grid an
36
+ * inline master-detail collection draws when its author listed no columns.
37
+ *
38
+ * WHICH columns, in what order, and which are `defaultHidden`, is
39
+ * `@objectstack/spec`'s rule, `deriveInlineGridColumns` (objectui#11345): it
40
+ * skips system / audit fields, sort-position fields, fields flagged `system`,
41
+ * `readonly` or `hidden`, non-editable types, the back-reference FK to the
42
+ * parent and any `exclude`d name, and keeps every other field. Past the
43
+ * visible budget ({@link DEFAULT_MAX_INLINE_GRID_COLUMNS}, the spec's) the
44
+ * overflow is flagged `defaultHidden` — collapsed into the grid's column
45
+ * chooser, never dropped; required columns always stay visible. Pass
46
+ * `maxColumns: 0` to flag none. The rule lives in the spec so that an
47
+ * author-time tool (objectstack's `field-no-consumers` lint) credits exactly
48
+ * the columns this grid draws, and the two cannot disagree.
49
+ *
50
+ * What each column carries — label, cell type, options, lookup target,
51
+ * conditional rules, computed expression — is built here, from the child
52
+ * field, by {@link deriveColumn}. `booleanLabel` is required: it draws the
53
+ * option labels of a `boolean` / `toggle` child field in the session language
54
+ * (see `optionsFor`, objectui#12924).
50
55
  */
51
- export declare function deriveColumns(childSchema: ChildObjectSchemaLike | undefined, opts?: {
56
+ export declare function deriveColumns(childSchema: ChildObjectSchemaLike | undefined, opts: {
57
+ booleanLabel: BooleanValueLabel;
52
58
  relationshipField?: string;
53
59
  exclude?: string[];
54
60
  maxColumns?: number;
@@ -68,13 +74,33 @@ export declare function deriveColumns(childSchema: ChildObjectSchemaLike | undef
68
74
  * its type is declared or hydrated, is reported by
69
75
  * {@link reportCurrencyColumnScale} (objectui#10783): the grid does not read
70
76
  * that key.
77
+ *
78
+ * `booleanLabel` is required for the same reason as on {@link deriveColumns}:
79
+ * an untyped column over a `boolean` / `toggle` child field hydrates into a
80
+ * select whose two option labels it draws (objectui#12924).
71
81
  */
72
- export declare function hydrateColumns(columns: GridColumn[] | undefined, childSchema: ChildObjectSchemaLike | undefined): GridColumn[];
82
+ export declare function hydrateColumns(columns: GridColumn[] | undefined, childSchema: ChildObjectSchemaLike | undefined, opts: {
83
+ booleanLabel: BooleanValueLabel;
84
+ }): GridColumn[];
73
85
  /**
74
- * Field names for a child's full "row form" (the per-row expand editor) — every
75
- * editable business field, skipping system/audit fields, the back-reference FK,
76
- * and computed types. Broader than {@link deriveColumns} (which only returns
77
- * grid-friendly types): the form has room for textarea/richtext/file/etc.
86
+ * Field names for a child's full "row form" (the per-row expand editor) — the
87
+ * form an inline master-detail collection opens when its author listed no
88
+ * `formFields`.
89
+ *
90
+ * WHICH fields, in what order, is `@objectstack/spec`'s rule,
91
+ * `deriveInlineRowFormFields` (objectui#11428), the row-form twin of the
92
+ * `deriveInlineGridColumns` rule {@link deriveColumns} reads: it skips system /
93
+ * audit fields, sort-position fields, fields flagged `system` or `hidden`, the
94
+ * computed types, the back-reference FK to the parent and any `exclude`d name,
95
+ * and keeps every other field in the child's field order. So it is broader than
96
+ * the grid: `readonly` fields and the rich types a grid cell omits (textarea,
97
+ * richtext, json, file, …) stay, since the form has room for them. The rule
98
+ * lives in the spec so that an author-time tool (objectstack's
99
+ * `field-no-consumers` lint) credits exactly the fields this form draws.
100
+ *
101
+ * WHETHER a row offers the form at all is the spec's `isInlineRowFormOffered`,
102
+ * which `MasterDetailForm` asks. How each named field renders is the form's own
103
+ * per-field builder, over these names.
78
104
  */
79
105
  export declare function deriveFormFields(childSchema: ChildObjectSchemaLike | undefined, opts?: {
80
106
  relationshipField?: string;
@@ -117,9 +143,12 @@ export interface DerivedDetail {
117
143
  * Resolve a child collection's full config (FK + columns) from its object
118
144
  * schema. Throws when no relationship to the parent can be found. The caller
119
145
  * supplies any explicit overrides (relationshipField / columns / amountField),
120
- * which win over the derived values.
146
+ * which win over the derived values, and the required `booleanLabel`, which
147
+ * is not an override: it draws a `boolean` / `toggle` column's two option
148
+ * labels in the session language (objectui#12924, see {@link deriveColumns}).
121
149
  */
122
- export declare function deriveDetail(childObject: string, childSchema: ChildObjectSchemaLike | undefined, parentObjectName: string, override?: {
150
+ export declare function deriveDetail(childObject: string, childSchema: ChildObjectSchemaLike | undefined, parentObjectName: string, override: {
151
+ booleanLabel: BooleanValueLabel;
123
152
  relationshipField?: string;
124
153
  columns?: GridColumn[];
125
154
  amountField?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deriveMasterDetail.d.ts","sourceRoot":"","sources":["../src/deriveMasterDetail.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,qBAAqB;IACpC,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,CAqClF;AAgCD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,gBAAgB,EAAE,MAAM,GACvB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAuD5C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,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,CAsDd;AAkDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,qBAAqB,GAAG,SAAS,GAC7C,UAAU,EAAE,CAqCd;AAOD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,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,qBAAqB,GAAG,SAAS,EAC9C,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,qBAAqB,GAAG,SAAS,EAC9C,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"}
1
+ {"version":3,"file":"deriveMasterDetail.d.ts","sourceRoot":"","sources":["../src/deriveMasterDetail.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAQD,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAqClF;AA+CD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,gBAAgB,EAAE,MAAM,GACvB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,IAAI,EAAE;IAAE,YAAY,EAAE,iBAAiB,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7G,UAAU,EAAE,CAYd;AA2GD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,IAAI,EAAE;IAAE,YAAY,EAAE,iBAAiB,CAAA;CAAE,GACxC,UAAU,EAAE,CAqCd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5D,MAAM,EAAE,CAKV;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,qBAAqB,GAAG,SAAS,EAC9C,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;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE;IACR,YAAY,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CACnC,GACA,aAAa,CAoBf"}
@@ -53,6 +53,11 @@ export interface SectionDividerSource {
53
53
  description?: string;
54
54
  /** ADR-0089 `FormSection.visibleWhen` (#6111), unevaluated. */
55
55
  visibleWhen?: unknown;
56
+ /**
57
+ * The fault direction of {@link visibleWhen}, copied onto the row unchanged
58
+ * (`ObjectFormSection.visibleWhenFault`, objectui#13055).
59
+ */
60
+ visibleWhenFault?: ObjectFormSection['visibleWhenFault'];
56
61
  /** The objectui#6236 membership claim: RESOLVED (post-FLS) member names. */
57
62
  members: string[];
58
63
  /** Read by one arm only — see `projectSectionDivider`. */
@@ -177,8 +182,16 @@ export declare function resolveSectionCollapse(declared: {
177
182
  * evaluates it on this pseudo-field with the host predicate scope bound
178
183
  * (#6010), so copying it here is what makes the authored predicate reach an
179
184
  * evaluator at all.
185
+ * - `visibleWhenFault` — the fault direction of that predicate, emitted only
186
+ * when the section carries one (a field group's: `'hidden'`,
187
+ * objectui#13055). The renderer reads it for the divider's fault fallback.
180
188
  * - `fields` — the objectui#6236 membership claim: RESOLVED member names, so
181
- * the predicate gates the whole group and not just the heading.
189
+ * the predicate gates the whole group and not just the heading. The form
190
+ * renderer also ends the group's field grid where the claim ends
191
+ * (`splitAtUntitledRuns`, `@object-ui/components`, objectui#11777), which is
192
+ * how an untitled section after it — the trailing ungrouped bucket, which
193
+ * gets no row here — is drawn as its own block instead of under this
194
+ * heading. A row that dropped the claim would put those fields back under it.
182
195
  * - `colSpan` — see `DIVIDER_COL_SPAN`.
183
196
  * - `collapsible` / `collapsed` / `onToggle` — on the visible row only (the
184
197
  * control lives on the row), and only when the arm hands over a resolved
@@ -1 +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,CA6C5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CAClF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhE;AAGD;;;;GAIG;AACH,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACxD,IAAI,EAAE;IACJ,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,GACA;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAWrE;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,CAgC/E"}
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,CAsD5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACzD,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CAClF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhE;AAGD;;;;GAIG;AACH,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACxD,IAAI,EAAE;IACJ,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,GACA;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAWrE;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,CAkC/E"}
@@ -7,7 +7,7 @@ import { SchemaLike } from '@object-ui/core';
7
7
  */
8
8
  export interface FieldWritePrincipal {
9
9
  isLoaded: boolean;
10
- checkField: (object: string, field: string, action: 'read' | 'write') => boolean;
10
+ checkField(object: string, field: string, action: 'read' | 'write' | 'create'): boolean;
11
11
  }
12
12
  /** A field-name predicate: `true` when the caller may write that field. */
13
13
  export type FieldWriteGate = (fieldName: string) => boolean;
@@ -19,12 +19,21 @@ export type FieldWriteGate = (fieldName: string) => boolean;
19
19
  * this straight to `sanitizeFormData`, whose option is absent-or-predicate, so
20
20
  * an unresolved principal produces the byte-identical payload it produced
21
21
  * before this gate existed.
22
+ *
23
+ * `mode` is required, not optional: it picks the question (objectui#12082),
24
+ * and a container that forgot it would silently strip a create-only caller's
25
+ * whole body again. A mode that writes nothing (`view`) gets the edit
26
+ * question, the stricter of the two.
22
27
  */
23
- export declare function fieldWriteGate(perms: FieldWritePrincipal | null | undefined, objectName: string): FieldWriteGate | undefined;
28
+ export declare function fieldWriteGate(perms: FieldWritePrincipal | null | undefined, objectName: string, mode: string | undefined): FieldWriteGate | undefined;
24
29
  export interface ApplyFieldPermissionsOptions {
25
30
  perms: FieldWritePrincipal | null | undefined;
26
31
  objectName: string;
27
- /** A `view`-mode form renders everything read-only already. */
32
+ /**
33
+ * The form's mode, which picks the field question (objectui#12082): `create`
34
+ * asks the insert rule, any other mode but `view` the update rule. A
35
+ * `view`-mode form renders everything read-only already.
36
+ */
28
37
  mode?: string;
29
38
  /**
30
39
  * Optional hint placed on a field the caller may read but not edit, used
@@ -39,12 +48,14 @@ export interface ApplyFieldPermissionsOptions {
39
48
  */
40
49
  export declare function applyFieldPermissions<T extends Record<string, any>>(fields: T[] | undefined, { perms, objectName, mode, deniedDescription }: ApplyFieldPermissionsOptions): T[] | undefined;
41
50
  /**
42
- * The principal surface {@link gateFormFields} reads: the field-level resolver
43
- * plus the server's effective API operation set for an object (`/me/permissions`
44
- * `apiOperations`, objectstack#3391). `undefined` from it means "no effective set", which
45
- * leaves the object's own affordance standing.
51
+ * The principal surface {@link gateFormFields} reads: the field-level resolver,
52
+ * the server's effective API operation set for an object (`/me/permissions`
53
+ * `apiOperations`, objectstack#3391; `undefined` means "no effective set",
54
+ * which leaves the object's own affordance standing), and the caller's object
55
+ * grant (`usePermissions().can`, objectui#12082).
46
56
  */
47
57
  export interface FormFieldPrincipal extends FieldWritePrincipal {
58
+ can(object: string, action: 'create' | 'update' | 'delete'): boolean;
48
59
  getObjectApiOperations?: (object: string) => readonly string[] | undefined;
49
60
  }
50
61
  export interface GateFormFieldsOptions extends ApplyFieldPermissionsOptions {
@@ -59,8 +70,10 @@ export interface GateFormFieldsOptions extends ApplyFieldPermissionsOptions {
59
70
  /** The form-level affordance {@link closedFormAffordance} can report closed. */
60
71
  export type ClosedFormAffordance = 'create' | 'edit';
61
72
  /**
62
- * Which affordance the managed-object lock found CLOSED for this form, or
63
- * `undefined` when the lock does not engage (objectui#11000).
73
+ * Which affordance the form-wide lock found CLOSED for this form, or
74
+ * `undefined` when the lock does not engage (objectui#11000) — closed by the
75
+ * managed-object policy, the effective API operation set or, since
76
+ * objectui#12082, the caller's object grant.
64
77
  *
65
78
  * It is {@link managedModeLocked}, the very predicate {@link gateFormFields}
66
79
  * disables every drawn field on, read for its reason: `create` for a create
@@ -84,7 +97,7 @@ export declare function closedFormAffordance({ perms, objectName, mode, objectSc
84
97
  *
85
98
  * 1. field-level security — {@link applyFieldPermissions}: drop what the
86
99
  * caller may not READ, lock what they may read but not WRITE;
87
- * 2. the managed-object lock — every drawn field is `disabled` when
100
+ * 2. the form-wide lock — every drawn field is `disabled` when
88
101
  * {@link managedModeLocked} says the mode's affordance is closed. Only
89
102
  * `disabled`, not `readOnly`: the default arm's lock always drew a
90
103
  * disabled input, and the submit button is left as it is.
@@ -111,6 +124,13 @@ export declare function gateFormFields<T extends Record<string, any>>(fields: T[
111
124
  * replaces any `readonlyWhen` it declared — a lock on every row already covers
112
125
  * every row a narrower lock would. Rows are untouched: whether a line may be
113
126
  * added or removed stays the container's own answer.
127
+ *
128
+ * `mode` is the form the grid sits in, and picks the question the cells ask
129
+ * the same way it does for a form's fields (objectui#12082): a CREATE form's
130
+ * lines are all new child records, so their cells ask the create question. A
131
+ * grid anywhere else — an edit form, a record page's line-items block — may
132
+ * hold existing lines beside new ones, and one lock per column cannot split
133
+ * per row, so it asks the edit question, as it always did.
114
134
  */
115
- export declare function applyColumnPermissions<T extends Record<string, any>>(columns: T[] | undefined, { perms, objectName }: Pick<ApplyFieldPermissionsOptions, 'perms' | 'objectName'>): T[] | undefined;
135
+ export declare function applyColumnPermissions<T extends Record<string, any>>(columns: T[] | undefined, { perms, objectName, mode }: Pick<ApplyFieldPermissionsOptions, 'perms' | 'objectName' | 'mode'>): T[] | undefined;
116
136
  //# sourceMappingURL=fieldWriteGate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldWriteGate.d.ts","sourceRoot":"","sources":["../src/fieldWriteGate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,KAAK,OAAO,CAAC;CAClF;AAED,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAC7C,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,SAAS,CAG5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAqCD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,EACvB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,4BAA4B,GAC3E,CAAC,EAAE,GAAG,SAAS,CAMjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5E;AAED,MAAM,WAAW,qBAAsB,SAAQ,4BAA4B;IACzE,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C;;;;OAIG;IACH,YAAY,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAC7C;AAoCD,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,UAAU,EACV,IAAI,EACJ,YAAY,GACb,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,CAAC,GAC5E,oBAAoB,GACpB,SAAS,CAGZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,EACvB,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,EAAE,qBAAqB,GAClD,CAAC,EAAE,GAAG,SAAS,CAOjB;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,OAAO,EAAE,CAAC,EAAE,GAAG,SAAS,EACxB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,4BAA4B,EAAE,OAAO,GAAG,YAAY,CAAC,GAChF,CAAC,EAAE,GAAG,SAAS,CAKjB"}
1
+ {"version":3,"file":"fieldWriteGate.d.ts","sourceRoot":"","sources":["../src/fieldWriteGate.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -54,16 +54,26 @@ export type { DerivedDetail, InlineMode, ChildObjectSchemaLike } from './deriveM
54
54
  * reach one and not the other can build exactly that state, which is the defect
55
55
  * #4069 and #5883 closed on the two chains separately.
56
56
  *
57
+ * `optionListDefault` joined them for a named consumer (objectui#13049): the
58
+ * console's public form page (`/f/:slug`) seeds its own create values and had
59
+ * no reading of an option's `default: true`, so a required select the server
60
+ * would default opened empty and the client refused the submit. That page now
61
+ * calls the very function `schemaDefaultValues` calls (objectui#11914), so the
62
+ * two renderers cannot disagree about which option is the default. It travels
63
+ * with its parameter type, `OptionListFieldLike` (objectui#7324).
64
+ *
57
65
  * Deliberately NOT the rest of `schemaDefaults.ts`. `seedCreateValues`,
58
66
  * `schemaDefaultValues`, `isSeedableDefault`, `isCreateFormMode` and
59
67
  * `SeedContext` are adjacent, not asked for — no consumer outside this package
60
68
  * has needed them, and every added name is published surface somebody then has
61
- * to keep. `isRuntimeDefault` stays out for a stronger reason: it is
62
- * `@object-ui/core`'s to publish, this module only re-exports it for its own
63
- * call sites, and a second published spelling of one classifier is the very
64
- * thing #4085 collapsed.
69
+ * to keep. The public form page needed the option-list reading alone: its
70
+ * literal-default and runtime-default rules were already its own (#5727), and
71
+ * the precedence gate (`defaultValue == null`) is the caller's. `isRuntimeDefault`
72
+ * stays out for a stronger reason: it is `@object-ui/core`'s to publish, this
73
+ * module only re-exports it for its own call sites, and a second published
74
+ * spelling of one classifier is the very thing #4085 collapsed.
65
75
  */
66
- export { omitServerResolvedDefaults, isRequiredInForm } from './schemaDefaults.js';
76
+ export { omitServerResolvedDefaults, isRequiredInForm, optionListDefault } from './schemaDefaults.js';
67
77
  /**
68
78
  * The `form.sections[].group` RESOLVER, published for the third form-section
69
79
  * consumer (objectui#8641).
@@ -105,6 +115,20 @@ export { omitServerResolvedDefaults, isRequiredInForm } from './schemaDefaults.j
105
115
  */
106
116
  export { resolveSectionGroupReferences } from './sectionGroups.js';
107
117
  export type { ResolveSectionGroupsOptions } from './sectionGroups.js';
118
+ /**
119
+ * The field name a section entry resolves to — the identity rule of the three
120
+ * entry shapes `ObjectFormSection.fields` declares, spelled once
121
+ * (objectui#11615): a bare string is the name, the form view's `{ field }`
122
+ * entry names its field by `field`, an inline `FormField` by `name`;
123
+ * `undefined` when the entry names nothing.
124
+ *
125
+ * Published beside the resolver because the resolver RETURNS that union, and
126
+ * objectui#7324's rule applies to reading what a published function hands
127
+ * back as much as to naming what it takes: a consumer narrowing an entry by
128
+ * hand reads `.name` off a `{ field }` entry — the second dialect this one
129
+ * spelling exists to prevent. A pure function over plain data.
130
+ */
131
+ export { sectionEntryName } from './sectionFields.js';
108
132
  /**
109
133
  * The parameter types those published signatures require, so a consumer can
110
134
  * NAME what it must pass (objectui#7324).
@@ -127,7 +151,8 @@ export type { ResolveSectionGroupsOptions } from './sectionGroups.js';
127
151
  *
128
152
  * These are types, not values: they add no runtime surface, and each is the
129
153
  * type a signature already published requires — not an adjacent name lifted
130
- * because it was nearby.
154
+ * because it was nearby. `OptionListFieldLike` is the `field` of
155
+ * `optionListDefault` (objectui#13049), on the same rule.
131
156
  */
132
- export type { FieldDefaultsSchemaLike } from './schemaDefaults.js';
157
+ export type { FieldDefaultsSchemaLike, OptionListFieldLike } from './schemaDefaults.js';
133
158
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;GAMG;AACH,YAAY,EAAE,wBAAwB,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAChF,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,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxF,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,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;GAMG;AACH,YAAY,EAAE,wBAAwB,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAChF,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,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxF,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,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}