@object-ui/plugin-detail 15.0.0 → 16.1.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 CHANGED
@@ -1,5 +1,199 @@
1
1
  # @object-ui/plugin-detail
2
2
 
3
+ ## 16.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - faebac3: Related lists paginate by default and fetch server-side windows (#2711).
8
+
9
+ `record:related_list` now applies the spec default `limit` of 5 when a node
10
+ doesn't declare one, so detail-page related lists render pages with
11
+ Previous/Next controls instead of dumping every child row. On the auto-fetch
12
+ path RelatedList requests one page at a time (`$top`/`$skip`), reads the
13
+ collection size from `QueryResult.total` (`hasMore` fallback), sends user
14
+ column sorts as a server `$orderby`, and seeds the initial order from the
15
+ node's `sort` prop (new `defaultSort` prop on RelatedList). Caller-provided
16
+ `data` keeps the historical client-side slicing. Behavior change: lists that
17
+ previously rendered all rows now show 5 per page — declare a larger `limit`
18
+ on the `record:related_list` node to widen the window.
19
+
20
+ ### Patch Changes
21
+
22
+ - 7cf4051: chore(deps): align every `@objectstack/*` dependency to `^16.0.0-rc.0`
23
+
24
+ Bumps `@objectstack/spec` / `client` / `formula` / `lint` from `^15.1.1` to the
25
+ `16.0.0-rc.0` pre-release across the workspace (root + `apps/console` +
26
+ `apps/site` + all consuming packages). ObjectUI's own packages are already on
27
+ major 16, so this closes the 15↔16 skew between ObjectUI and the `@objectstack`
28
+ contract libraries (which publish in lockstep with `spec`).
29
+
30
+ This is a dependency alignment, not a behavioral migration: the full workspace
31
+ build (43/43) and the `@objectstack`-consuming package test suites
32
+ (`core` / `app-shell` / `data-objectstack` / `plugin-form` / `types`) are green
33
+ against `16.0.0-rc.0` with no source changes required.
34
+
35
+ Practical effect: `@objectstack/client@16.0.0-rc.0` now ships
36
+ `data.batchTransaction` (framework #3271), so `ObjectStackAdapter`'s feature
37
+ detect (`typeof client.data.batchTransaction === 'function'`) routes
38
+ master-detail cross-object saves through the typed SDK method instead of the
39
+ raw `fetch('/api/v1/batch')` fallback — realizing the "verify SDK path" half of
40
+ #2694. The raw-fetch branch stays as a defensive fallback (removal tracked in
41
+ #2694).
42
+
43
+ - 53513a4: fix(plugin-detail): #2688 — record surfaces without a caller title no longer floor to `Record #<id>`, and the meta footer never prints a raw audit user id
44
+
45
+ - `DetailView` header: after every declared-identity step misses and no
46
+ `schema.title` was provided, probe name-ish record keys (`name`, `title`,
47
+ `*_name`, …) before falling to the `Record #<id>` floor. Fixes records whose
48
+ name lives in a field the type-aware derivation deliberately skips (e.g. an
49
+ `autonumber` `name`) opened from surfaces like the gantt row drawer.
50
+ - `RecordMetaFooter`: `created_by` / `updated_by` are always user references on
51
+ ObjectStack — when the fetched schema omits the audit system fields, default
52
+ the reference target to `sys_user` so the footer renders a resolved user name
53
+ (or the muted placeholder) instead of the raw opaque id.
54
+
55
+ - f329ec5: chore(lint): clear the baseline lint errors in plugin-detail (objectui#2713 Wave 3)
56
+
57
+ Wave 3 of the #2713 lint-gate restoration. `@object-ui/plugin-detail` was red at
58
+ baseline on `main`; cleared every **error** (no behavior change; warnings out of
59
+ scope). All nine are `react-hooks` errors — the record renderers called hooks
60
+ after conditional early returns, which is a real fragility (React throws when the
61
+ guard toggles between renders), so each is restructured so hooks run
62
+ unconditionally while the rendered output stays identical:
63
+
64
+ - **`record-reference-rail`** — hoisted `useState` above the empty-entries early
65
+ return (no dependency on it).
66
+ - **`record-related-list`** — moved the `!objectName` placeholder return below
67
+ the four hooks (`usePermissions` / `useFieldPermissions` / `useRelatedRecordActions`
68
+ / `useMemo`); those hooks are pure context/memo reads, safe with an empty
69
+ object name. The object-level read gate ordering is unchanged (covered by
70
+ `RecordRelatedListRenderer.readgate.test`).
71
+ - **`record-quick-actions`** — moved the `requiredPermissions` gate below
72
+ `useActionEngine` (a pure `useContext`/`useMemo` hook).
73
+ - **`record-highlights`** — `useId` + `useRegisterHighlightFields` now run
74
+ unconditionally; the permission gate is enforced after them. Because
75
+ `useRegisterHighlightFields` has a register effect, it is passed `[]` when the
76
+ gate denies — equivalent to not registering, so no body field is ever hidden
77
+ for highlights that aren't rendered.
78
+ - **`RelatedList`** `SectionIcon` (`react-hooks/static-components`) —
79
+ `resolveIconComponent` is a stable registry lookup, not a component created
80
+ during render → justified scoped disable.
81
+
82
+ - 6d4fbe6: **Consolidate the `managedBy` lifecycle-bucket logic into one shared source of truth (follows framework ADR-0103).** The bucket taxonomy was hand-mirrored in several places — `crudAffordances.ts`, `ManagedByBadge.tsx` (its own `Bucket` union + `isWriteOptedIn` + the writable-system derivation), and `plugin-detail`'s `record-details.tsx` (`NON_EDITABLE_BUCKETS`, duplicated because it can't depend on app-shell) — a drift risk, and the object-schema `managedBy` type was open-ended (`(string & {})`) so unknown buckets slipped through and silently defaulted to fully-editable.
83
+
84
+ - **`@object-ui/types`** now owns the closed `ManagedByBucket` union (+ `MANAGED_BY_BUCKETS`), and `ObjectSchema.managedBy` is tightened from `'platform' | 'better-auth' | (string & {})` to that union — unknown buckets are now a type error at authoring time.
85
+ - **`@object-ui/core`** now owns the React-free runtime logic — `resolveCrudAffordances`, `isWriteOptedIn`, `isSystemWritable`, `isObjectInlineEditable` — reachable by every UI package including `plugin-detail` (which could not import app-shell).
86
+ - **`app-shell/utils/crudAffordances.ts`** is now a thin re-export of `@object-ui/core` (existing imports keep working); `ManagedByBadge` consumes the shared `isSystemWritable`; `plugin-detail` `record-details.tsx` replaces its hand-mirrored `NON_EDITABLE_BUCKETS` with `isObjectInlineEditable`.
87
+
88
+ Behavior-preserving — all existing affordance/edit-gate tests stay green; the shared module adds direct unit coverage (including the previously-untested `isSystemWritable` derivation). Translated copy (badge variants, empty-state messages) stays in app-shell.
89
+
90
+ - 0a3710b: **Finish the `managedBy` / `userActions` de-dup — one parser for the override shape (completes objectui#2712, framework#3343).** #2712 consolidated the bucket _union_ + affordance _set_ mirrors but left four surfaces still parsing the `userActions.{create,edit,delete}` override shape by hand. They now all route through the shared `@object-ui/core` policy, so no package re-implements the boolean / #2614-object-form parse locally.
91
+
92
+ - **`@object-ui/core`** promotes the internal `normalizeOverride` to the exported **`normalizeUserAction(v, base)`** (the one parser) and adds **`userActionPredicates(v)`** for per-record CEL predicate extraction.
93
+ - **`app-shell/utils/managedByEmptyState.ts`** — the writable-`system` create check and its local `EmptyStateUserActions` interface are replaced by `resolveCrudAffordances({ managedBy, userActions }).create`.
94
+ - **`plugin-grid/rowCrudAffordances.ts`** — the local `isOptedOut` / `predicatesOf` helpers (and duplicated `RowCrudUserAction` / `RowCrudPredicates` types) fold into `normalizeUserAction`; the historical type names stay re-exported for compat.
95
+ - **`plugin-detail/RelatedList.tsx`** — its inline `predicatesOf` fold into `userActionPredicates`.
96
+ - **`plugin-form/ObjectForm.tsx`** — the hand-rolled `managedBy !== 'platform'` blanket lock + `userActions` unlock is replaced by the resolved affordance for the current mode (`edit` / `create`), the **same** `resolveCrudAffordances` contract the detail (`isObjectInlineEditable`) and grid surfaces use.
97
+
98
+ Behavior-preserving for `platform` / `system` / `append-only` / `better-auth`, with one deliberate alignment: an admin-editable **`config`**-bucket object (e.g. `sys_webhook`, `sys_permission_set`) is now editable in `ObjectForm` — it was previously over-locked as "non-`platform`", while detail/grid already treated it as editable (`config` resolves `edit: true`). New unit coverage for the shared parser and the config / create-mode form gate; all existing affordance/edit-gate tests stay green.
99
+
100
+ - 3b2e4d9: fix(list): route remaining system-field groupings through the shared classifier
101
+
102
+ Follow-up to the `owner_id` default-column fix: consolidate the display-oriented
103
+ system-field exclusions onto the shared `isSystemManagedField` /
104
+ `SYSTEM_MANAGED_FIELD_NAMES` (from `@object-ui/types`) so the framework-injected
105
+ `owner_id` is treated consistently across the grid, record picker, and detail
106
+ drawer.
107
+
108
+ - `ObjectGrid` record-detail drawer: the business-fields vs. muted meta-section
109
+ split now uses the shared classifier, so `owner_id` (and other injected system
110
+ fields) land in the meta section instead of the business body.
111
+ - `deriveLookupColumns` (record picker): drops its local name set for the shared
112
+ classifier — now flag-aware (`field.system`), not just name-based.
113
+ - `RecordDetailDrawer`: its default `systemFields` set is derived from the shared
114
+ `SYSTEM_MANAGED_FIELD_NAMES`; the `systemFields` prop override is preserved.
115
+
116
+ `deriveRelatedLists`' narrow "audit FK on every object" set and plugin-detail's
117
+ inline-edit "never editable" set are intentionally left distinct — different
118
+ semantics (the latter deliberately keeps `owner_id` editable).
119
+
120
+ - Updated dependencies [0318118]
121
+ - Updated dependencies [af1b0db]
122
+ - Updated dependencies [1100a8b]
123
+ - Updated dependencies [7abe4cd]
124
+ - Updated dependencies [ebe6494]
125
+ - Updated dependencies [f80aaf2]
126
+ - Updated dependencies [29c6040]
127
+ - @object-ui/i18n@16.1.0
128
+
129
+ ## 16.0.0
130
+
131
+ ### Minor Changes
132
+
133
+ - 5534535: feat(grid): built-in row Edit/Delete honor per-record CEL predicates (#2614)
134
+
135
+ The object's `userActions.edit` / `userActions.delete` now also accept an
136
+ object form `{ enabled?, visibleWhen?, disabledWhen? }`. The predicates are
137
+ evaluated per row on the canonical CEL engine (`useRowPredicate`, the same
138
+ machinery custom row actions use): `visibleWhen` false → the built-in
139
+ Edit/Delete item is not rendered for that row (fail-closed); `disabledWhen`
140
+ true → rendered disabled (fail-soft). Wired through ObjectGrid's
141
+ RowActionMenu and the data-table's row overflow menu (the related-list
142
+ path), with the app-shell `crudAffordances` mirror kept in lockstep.
143
+ Omitting the predicates (or using plain booleans) keeps today's behavior
144
+ bit-for-bit; declared predicates evaluate only when a row's menu opens, so
145
+ grid rendering cost is unchanged.
146
+
147
+ ### Patch Changes
148
+
149
+ - 59d4fa9: fix(detail): show the "Locked for approval" band on request-tracked backends (objectui#2618)
150
+
151
+ The DetailView approval-lock band keyed only off the record's own
152
+ `approval_status` field, so it never rendered on backends that track the lock
153
+ via an open approval request and never materialize that field — even though
154
+ the lock was real (writes rejected with `RECORD_LOCKED`). The record-level
155
+ `InlineEditContext` now carries the host's `locked`/`lockedReason` signal
156
+ (the same dual-source `approvalLocked` that already gates `canEdit` in
157
+ `RecordDetailView`), and the band renders from it while keeping `DetailView`
158
+ DataSource-agnostic. Also backfills the approval-lock strings into the detail
159
+ translation defaults so a bare DetailView shows the label, not the raw i18n key.
160
+
161
+ - 9d4a429: fix(form+detail): keep single-file children as inline grids; drop non-spec `attachment` handling
162
+
163
+ Two follow-ups to the upload-in-grid work (objectui#2360):
164
+
165
+ - **#2654** — Now that `file`/`image`/`avatar` fields render a compact upload
166
+ cell in the line-item grid, a child object with a _single_ such field no
167
+ longer flips the smart `inlineEdit` default to a per-row form. `resolveInlineMode`
168
+ splits the old `FORM_ONLY_TYPES`: truly form-only types (textarea / richtext /
169
+ html / markdown / json / location / address) still tip to `form` on their own,
170
+ while file-family types only tip when several rich fields pile up
171
+ (`RICH_FIELD_FORM_THRESHOLD`, default 2). An explicit `inlineEdit` always wins.
172
+
173
+ - **#2655** — `attachment` is not a `@objectstack/spec` field type (the spec
174
+ media types are file/image/avatar/video/audio), so the renderer no longer
175
+ models it: removed from `fieldTypeToColumnType`, the inline-mode heuristic, and
176
+ `RelatedList`'s auto-column `SKIP_TYPES`. Contract-first cleanup — the renderer
177
+ stops fossilizing a phantom type (AGENTS.md #0.1).
178
+
179
+ - Updated dependencies [d3e19ed]
180
+ - Updated dependencies [59d4fa9]
181
+ - Updated dependencies [4c7c47f]
182
+ - Updated dependencies [210806a]
183
+ - Updated dependencies [b4ef588]
184
+ - Updated dependencies [ca0f5f0]
185
+ - Updated dependencies [5534535]
186
+ - Updated dependencies [9b8f978]
187
+ - Updated dependencies [195a651]
188
+ - Updated dependencies [33b4995]
189
+ - @object-ui/react@16.0.0
190
+ - @object-ui/components@16.0.0
191
+ - @object-ui/types@16.0.0
192
+ - @object-ui/i18n@16.0.0
193
+ - @object-ui/fields@16.0.0
194
+ - @object-ui/core@16.0.0
195
+ - @object-ui/permissions@16.0.0
196
+
3
197
  ## 15.0.0
4
198
 
5
199
  ### Patch Changes
package/README.md CHANGED
@@ -192,6 +192,21 @@ Tab navigation for organizing content into different views.
192
192
 
193
193
  Displays related records in list, grid, or table format.
194
194
 
195
+ Related lists are **paged by default**: the `record:related_list` renderer
196
+ applies the spec default `limit` of **5** when the node doesn't declare one
197
+ (`@objectstack/spec` `RecordRelatedListProps.limit`, "Number of records to
198
+ display initially"), so a child collection of any size renders as pages with
199
+ Previous/Next controls instead of one flat dump. On the auto-fetch path the
200
+ component asks the server for **one page at a time** (`$top`/`$skip`) and
201
+ reads the collection size from `QueryResult.total` (falling back to a
202
+ `hasMore` estimate), so large child tables never ship wholesale to the
203
+ browser. A user column sort becomes a server `$orderby` (ordering stays
204
+ global across pages), and the node's `sort` prop seeds the initial order.
205
+ Passing `data` directly keeps the historical client-side slicing, and typing
206
+ in the opt-in filter box temporarily falls back to the full-fetch client
207
+ pipeline (the contains-filter sweeps every field, which no generic server
208
+ filter can express).
209
+
195
210
  The `record:related_list` renderer is automatically gated on the current
196
211
  user's object-level `read` permission for the child object: when the
197
212
  permission system (`@object-ui/permissions`) is loaded and denies read,
@@ -1 +1 @@
1
- {"version":3,"file":"DetailView.d.ts","sourceRoot":"","sources":["../src/DetailView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAA4B,MAAM,kBAAkB,CAAC;AAsE/F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmsChD,CAAC"}
1
+ {"version":3,"file":"DetailView.d.ts","sourceRoot":"","sources":["../src/DetailView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAA4B,MAAM,kBAAkB,CAAC;AAuF/F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4sChD,CAAC"}
@@ -39,9 +39,11 @@ export interface HistoryTimelineProps {
39
39
  entries: HistoryEntry[];
40
40
  loading?: boolean;
41
41
  emptyText?: string;
42
+ /** Localized fallback for entries with no resolved actor name. Defaults to "Unknown user". */
43
+ unknownUserText?: string;
42
44
  className?: string;
43
45
  /** Locale used for relative time formatting. Defaults to browser locale. */
44
46
  locale?: string;
45
47
  }
46
- export declare function HistoryTimeline({ entries, loading, emptyText, className, locale, }: HistoryTimelineProps): React.JSX.Element;
48
+ export declare function HistoryTimeline({ entries, loading, emptyText, unknownUserText, className, locale, }: HistoryTimelineProps): React.JSX.Element;
47
49
  //# sourceMappingURL=HistoryTimeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryTimeline.d.ts","sourceRoot":"","sources":["../src/HistoryTimeline.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8ED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,GACP,EAAE,oBAAoB,qBAoHtB"}
1
+ {"version":3,"file":"HistoryTimeline.d.ts","sourceRoot":"","sources":["../src/HistoryTimeline.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8ED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,OAAO,EACP,SAAS,EACT,eAAe,EACf,SAAS,EACT,MAAM,GACP,EAAE,oBAAoB,qBAsHtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordDetailDrawer.d.ts","sourceRoot":"","sources":["../src/RecordDetailDrawer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAyBnD,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,iEAAiE;IACjE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,KAA0B,EAC1B,OAAW,EACX,YAAoC,EACpC,WAAW,EACX,QAAQ,EACR,SAAgB,EAChB,YAAY,GACb,EAAE,uBAAuB,qBAkOzB;AAED,eAAe,kBAAkB,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAQjG"}
1
+ {"version":3,"file":"RecordDetailDrawer.d.ts","sourceRoot":"","sources":["../src/RecordDetailDrawer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuBnD,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,iEAAiE;IACjE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,KAA0B,EAC1B,OAAW,EACX,YAAoC,EACpC,WAAW,EACX,QAAQ,EACR,SAAgB,EAChB,YAAY,GACb,EAAE,uBAAuB,qBAkOzB;AAED,eAAe,kBAAkB,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAQjG"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordMetaFooter.d.ts","sourceRoot":"","sources":["../src/RecordMetaFooter.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,oFAAoF;IACpF,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsHD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA4D5D,CAAC"}
1
+ {"version":3,"file":"RecordMetaFooter.d.ts","sourceRoot":"","sources":["../src/RecordMetaFooter.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,oFAAoF;IACpF,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0HD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA4D5D,CAAC"}
@@ -67,6 +67,16 @@ export interface RelatedListProps {
67
67
  maxColumns?: number;
68
68
  /** Page size for pagination (enables pagination when set) */
69
69
  pageSize?: number;
70
+ /**
71
+ * Initial sort applied while the user hasn't clicked a column sort — the
72
+ * spec `RecordRelatedListProps.sort` shape (`'field'` / `'-field'` string or
73
+ * `[{field, order}]`). On the auto-fetch path this becomes the server
74
+ * `$orderby`, keeping page windows deterministic.
75
+ */
76
+ defaultSort?: string | Array<{
77
+ field: string;
78
+ order: 'asc' | 'desc';
79
+ }>;
70
80
  /** Enable column sorting */
71
81
  sortable?: boolean;
72
82
  /** Enable text filtering */
@@ -1 +1 @@
1
- {"version":3,"file":"RelatedList.d.ts","sourceRoot":"","sources":["../src/RelatedList.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RelatedList.d.ts","sourceRoot":"","sources":["../src/RelatedList.tsx"],"names":[],"mappings":"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"}