@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.
- package/CHANGELOG.md +804 -0
- package/README.md +148 -38
- package/dist/DrawerForm.d.ts +13 -2
- package/dist/DrawerForm.d.ts.map +1 -1
- package/dist/LineItemsPanel.d.ts.map +1 -1
- package/dist/MasterDetailForm.d.ts +49 -29
- package/dist/MasterDetailForm.d.ts.map +1 -1
- package/dist/ModalForm.d.ts +13 -2
- package/dist/ModalForm.d.ts.map +1 -1
- package/dist/ObjectForm.d.ts.map +1 -1
- package/dist/SplitForm.d.ts +13 -2
- package/dist/SplitForm.d.ts.map +1 -1
- package/dist/TabbedForm.d.ts +11 -3
- package/dist/TabbedForm.d.ts.map +1 -1
- package/dist/WizardForm.d.ts +5 -3
- package/dist/WizardForm.d.ts.map +1 -1
- package/dist/autoLayout.d.ts +101 -5
- package/dist/autoLayout.d.ts.map +1 -1
- package/dist/deriveMasterDetail.d.ts +53 -24
- package/dist/deriveMasterDetail.d.ts.map +1 -1
- package/dist/fieldGroups.d.ts +14 -1
- package/dist/fieldGroups.d.ts.map +1 -1
- package/dist/fieldWriteGate.d.ts +31 -11
- package/dist/fieldWriteGate.d.ts.map +1 -1
- package/dist/index.d.ts +32 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2206 -1896
- package/dist/index.umd.cjs +1 -1
- package/dist/initialFieldFocus.d.ts +23 -0
- package/dist/initialFieldFocus.d.ts.map +1 -0
- package/dist/sanitize.d.ts +88 -3
- package/dist/sanitize.d.ts.map +1 -1
- package/dist/schemaDefaults.d.ts +80 -6
- package/dist/schemaDefaults.d.ts.map +1 -1
- package/dist/sectionFields.d.ts +17 -6
- package/dist/sectionFields.d.ts.map +1 -1
- package/dist/submitTarget.d.ts +17 -0
- package/dist/submitTarget.d.ts.map +1 -1
- package/dist/writePayload.d.ts +24 -5
- package/dist/writePayload.d.ts.map +1 -1
- package/package.json +10 -10
package/dist/TabbedForm.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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:
|
|
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
|
*
|
package/dist/TabbedForm.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"TabbedForm.d.ts","sourceRoot":"","sources":["../src/TabbedForm.tsx"],"names":[],"mappings":"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"}
|
package/dist/WizardForm.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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:
|
|
97
|
+
fields: NonNullable<ObjectFormSection['fields']>;
|
|
96
98
|
/**
|
|
97
99
|
* Custom CSS class for this step's container.
|
|
98
100
|
*
|
package/dist/WizardForm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WizardForm.d.ts","sourceRoot":"","sources":["../src/WizardForm.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAc,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"WizardForm.d.ts","sourceRoot":"","sources":["../src/WizardForm.tsx"],"names":[],"mappings":"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"}
|
package/dist/autoLayout.d.ts
CHANGED
|
@@ -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
|
|
127
|
-
*
|
|
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
|
|
131
|
-
* - 2 columns
|
|
132
|
-
*
|
|
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
|
/**
|
package/dist/autoLayout.d.ts.map
CHANGED
|
@@ -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
|
|
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;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,4CAA4C,CAAC;AAEhF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAO5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,GACrC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAKf;AAED,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,iGAAiG;IACjG,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,GACrC,mBAAmB,CA6BrB;AAcD;;;;;;;;;;;;;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;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAGvF;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,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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
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
|
|
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) —
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
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;
|
|
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"}
|
package/dist/fieldGroups.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/fieldWriteGate.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { SchemaLike } from '@object-ui/core';
|
|
|
7
7
|
*/
|
|
8
8
|
export interface FieldWritePrincipal {
|
|
9
9
|
isLoaded: boolean;
|
|
10
|
-
checkField
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
44
|
-
* `apiOperations`, objectstack#3391
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
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"}
|