You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(spec): regenerate the ui component reference; keep the issue id out of customer text
`check:doc-authoring` refuses an internal issue id in `.describe()` prose — it
projects into `content/docs/references/**` and the generated skill artifacts,
where `#NNNN` resolves to nothing. Both `sort` describes now cite the migration
id instead, which a reader can act on.
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
Co-authored-by: Claude <noreply@anthropic.com>
|**filter**|`{ field: string; operator: Enum<'equals' \| 'not_equals' \| 'contains' \| 'not_contains' \| 'icontains' \| …>; value?: string \| number \| boolean \| null \| (string \| number)[] }[]`| optional | Base query filter — the ViewFilterRule array form `[{ field, operator, value }, ...]`, the one filter orthography every `filter` door in this map shares. The MongoDB-style record form is refused — see migration `element-data-source-and-object-block-filter-rule-array`|
315
-
|**sort**|`any`| optional |Sort for the fetched events |
315
+
|**sort**|`{ field: string; order: Enum<'asc' \| 'desc'> }[]`| optional |Row order for the fetched events — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`|
316
316
|**data**|`any[]`| optional | Pre-fetched records — skips the internal fetch |
317
317
|**staticData**|`any[]`| optional | Static inline records |
318
318
|**locale**|`string`| optional | Locale override for the calendar chrome |
|**value**|`string \| number \| boolean \| null \| (string \| number)[]`| optional | Filter value. The accepted SHAPE depends on the operator: `in` / `not_in` take an array (any length, including []), `between` takes exactly [min, max], every other operator takes a scalar. The unary operators (is_empty / is_not_empty / is_null / is_not_null) take their direction from the operator name and ignore this key. |
|**order**|`Enum<'asc' \| 'desc'>`| ✅ | Sort direction |
339
+
331
340
332
341
---
333
342
@@ -393,7 +402,7 @@ View filter rule
393
402
|**fields**|`any[]`| optional | Field list fallback used when `columns` is absent |
394
403
|**filter**|`{ field: string; operator: Enum<'equals' \| 'not_equals' \| 'contains' \| 'not_contains' \| 'icontains' \| …>; value?: string \| number \| boolean \| null \| (string \| number)[] }[]`| optional | Base query filter — the ViewFilterRule array form `[{ field, operator, value }, ...]`, the one filter orthography every `filter` door in this map shares; lowered to the wire `$filter`. THE key, singular — not the plural misspelling. The MongoDB-style record form is refused — see migration `element-data-source-and-object-block-filter-rule-array`|
395
404
|**defaultFilters**|`any`| optional | Legacy base-filter fallback, read only when `filter` is absent. Prefer `filter`|
396
-
|**sort**|`any`| optional | Initial sort (array of `{ field, order }`)|
405
+
|**sort**|`{ field: string; order: Enum<'asc' \| 'desc'> }[]`| optional | Initial row order — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`|
397
406
|**defaultSort**|`never`| optional |[REMOVED]`object-grid` property `defaultSort` was removed in @objectstack/spec 17 (ADR-0049) — it was the legacy second spelling of `sort`: a single `{ field, order }` pair read only when `sort` was absent, so one intent had two spellings and a grid authoring both silently ignored this one. Rename the key to `sort` and wrap the value in an array (`defaultSort: { field, order }` becomes `sort: [{ field, order }]`); the pair itself is unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
|**value**|`string \| number \| boolean \| null \| (string \| number)[]`| optional | Filter value. The accepted SHAPE depends on the operator: `in` / `not_in` take an array (any length, including []), `between` takes exactly [min, max], every other operator takes a scalar. The unary operators (is_empty / is_not_empty / is_null / is_not_null) take their direction from the operator name and ignore this key. |
436
445
446
+
### Nested Shape: `ObjectGridProps.sort[number]`
447
+
448
+
Sort field and direction pair
449
+
450
+
| Property | Type | Required | Description |
451
+
| :--- | :--- | :--- | :--- |
452
+
|**field**|`string`| ✅ | Field name to sort by |
453
+
|**order**|`Enum<'asc' \| 'desc'>`| ✅ | Sort direction |
.describe('Initial row order — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — objectui#8221 decision batch #77, option B, retired it'),
2526
+
.describe('Initial row order — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`'),
* no `sort` input at all, so nothing on the registry side moves.
2893
2893
*/
2894
2894
sort: z.array(SortItemSchema).optional()
2895
-
.describe('Row order for the fetched events — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — objectui#8221 decision batch #77, option B, retired it'),
2895
+
.describe('Row order for the fetched events — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`'),
2896
2896
data: z.array(z.unknown()).optional().describe('Pre-fetched records — skips the internal fetch'),
0 commit comments