Skip to content

Commit 48eb9c1

Browse files
feat(spec)!: ai:chat_window is retired — refused by name at the schema door, the floating chat overlay is the AI chat entry point (#21504) (#21531)
Fixes #21504 Clause-②: yes (narrowing) Retires the `ai:chat_window` page component type under ADR-0049 enforce-or-remove, refused by name through `RETIRED_PAGE_COMPONENT_TYPES`, per triage ruling `5963897014` and the `user:profile` precedent (#14159, landed in PR #15112). No renderer for it ever shipped: objectui leaves it unregistered on purpose, because the floating chat overlay is the supported AI chat entry point. So an authored node validated clean and then drew "Unknown component type". `ai:suggestion` is not touched; triage ruled it a different class. ## What changed | surface | change | | --- | --- | | `ui/page.zod.ts` | `'ai:chat_window'` leaves `PageComponentType` and joins `RETIRED_PAGE_COMPONENT_TYPES`. Its message names the floating chat overlay as the supported entry point and carries no tracker number. `PageComponentSchema.type` already consults the map, so the open string arm cannot re-admit the name. The type's `.describe()` and the enum docblock name the new member. | | `ui/component.zod.ts` | `AIChatWindowProps` (`mode`, `agentId`, `context`, `aria`) is deleted. The `ComponentPropsMap['ai:chat_window']` row stays as `retiredComponentProps('ai:chat_window')`: a `z.never` that refuses every bag, `{}` included, with the same prescription. | | ADR-0087 | D3 semantic entry `ui-ai-chat-window-retired`, one `STEP18_RATIONALE` fragment, and the `RETIRED_DEFS_BY_MAJOR[18]` entry `ui/AIChatWindowProps`, generated by `gen:migration-registry`. No D2 conversion, see below. | | pins | `component.test.ts` gets a new describe with `code`, `path`, `params` and the first sentence at each door: the map, the row (empty and populated bags), `PageComponentSchema`, `PageSchema` at the element path, and the enum error map. `ai:suggestion` is the control and parses at every door, and the open arm stays open. `component-type-vocabulary.test.ts`: the type stays known, leaves the typo candidates, and `ai:` stays reserved. The old `should parse ai:chat_window with default` accept pin is flipped into the new describe. | | enumeration pin | `component-props-unknown-members.pin.test.ts` (PR #21502) loses its `ai:chat_window` `context{}` "no-reader" line, because the member left with the def. | | generated | `api-surface/`, `export-origins/`, `declaration-map/`, `authorable-surface/` (4 lines, proof: "def no longer emitted by this build"), `authorable-defaults/`, `json-schema.manifest/` (1 key), `docs-import-surface.baseline.json`, the strictness-ledger counts, and the reference docs. Each was regenerated by its generator. The manifest and authorable-surface lines were deleted as the build gate prescribes, and its proof check accepted them. `authorable-surface.base.json` is untouched. | | docs | `content/docs/ui/pages.mdx` component list says the truth. | | lint (comment only) | `validate-page-field-bindings.ts` used `AIChatWindowProps.agentId` as its example of a non-field string prop. The example now names a live one, `ElementImagePropsSchema.alt`. | | changeset | `@objectstack/spec` `minor`, BREAKING banner, `Clause-②: yes (narrowing)`, FROM → TO table, ADR-0087 marker `registered ui-ai-chat-window-retired`. | ## How this follows the precedent, and the one place the claim's wording differs The PR #15112 shape is matched element by element: the enum value removed, a map entry, the enum error map and the node-level check sharing one string, the row kept as `retiredComponentProps`, pins at the three doors with a control, a vocabulary pin, regenerated artifacts, the docs list and a `minor` changeset. The claim and the dispatch said that "the `ComponentPropsMap` row ... go[es]". The precedent does not delete the row. It replaces the row's props schema with a whole-bag refusal, and its docblock says why: deleting the row would turn a loud retirement into a silent skip on every reader that dispatches on it. Two tests on this tree depend on that. `component-type-vocabulary.test.ts` requires every member of `RETIRED_PAGE_COMPONENT_TYPES` to stay `isKnownComponentType`. objectui's `registry-inputs-spec-parity.test.ts` at the pin classifies a retired type through its kept row. So the row stays and `AIChatWindowProps` goes. That is how "the type leaves ... its `ComponentPropsMap` row" lands here. Two kit items go beyond PR #15112, because the ruling asked for them. #15112 had no D3 entry: its row had zero keys, and its disposition was `not-required (no-migration-prescription)`. This one has a D3 entry because triage named one. It is in the element-node shape of `element-filter-and-form-node-refused`. It also has a `RETIRED_DEFS_BY_MAJOR` entry, because a published def leaves the build. No D2 conversion is registered. The precedent registered none, and the only edit is deleting an authored page node, which is a layout decision that conversions must not make. ## Census (A1), at `529d9711fb` - `ai:chat_window`: `examples/**` 0, `packages/apps/**` 0, `apps/**` 0, `skills/**` 0. `content/docs/**` had 3 hits: 2 in the auto-generated references and 1 in the `pages.mdx` list. The other `packages/**` hits were the spec's own list and row, its tests, and a frozen formatter fixture in `scripts/format-type.test.ts`, which is left as is, as #15112 left `user:profile` in it. Control in the same query shape: `element:divider` appears in 3 example files and `record:details` in 12. - `AIChatWindowProps`: the def, the generated artifacts, and one illustrative comment in `packages/lint`. That comment is updated, and it is not a consumer. - objectui at the pin `89cad75d55`: there is no renderer, and the palette excludes the type. No non-test source imports `AIChatWindowProps` or indexes the row. The `'ai:chat_window'` key sits only in `Record` objects keyed by string, and in comments and tests. So the Console Pin Gate's build does not reference the removed names. - `skills/**` names nothing, so it is untouched (no Tier H). ## Ablation (both legs committed first, mutated through `scripts/ablation-replace.mjs` with an anchor that must hit, restored by blob) The subject resolves by relative import (`./page.zod`, `./component.zod`) to `src`, so no `dist` rebuild was involved. - **Leg A, the dispatch's ablation:** delete the `ai:chat_window` entry from `RETIRED_PAGE_COMPONENT_TYPES` (anchor 1 → 0, blob `7d2faf0b1f79` → `501c4251ee90`). The observed direction is louder than the pin. `component.test.ts` fails to load, with 1 file failed and no tests run. The error reads: retiredComponentProps: `ai:chat_window` has no RETIRED_PAGE_COMPONENT_TYPES entry (page.zod.ts). The kept row's factory refuses a row that has lost its prescription. - **Leg B, so the by-name pins themselves judge:** the same deletion, plus the row turned into a non-throwing `emptyProps('ai:chat_window')`. Result: 5 failed and 360 passed. The failures are the map pin, the row pin, `PageComponentSchema` by name, `PageSchema` at the element path, and the enum error map. - **Restore:** both files' blobs equal `HEAD` (`7d2faf0b1f79`, `891d947a3232`), `git diff HEAD` is empty, and `git status` is clean. Re-run after the restore: `component.test.ts` has 365 of 365 passing. ## Gates, at `3f17d5229e` (merged `origin/main` `88fb5e85a0`, which touched no spec, lint or docs file this PR edits) - `@objectstack/spec` `build` exit 0. `check:generated`: `✓ All 15 generated artifacts are up to date`. - `@objectstack/spec` `test` (`--project local`): 603 files, 17845 passed and 1 todo. `typecheck` exit 0, with `check:test-typecheck: OK`. - `@objectstack/lint` build closure, then `test`: 119 files, 5615 passed and 5 skipped. `flags ai:chat_window` runs off the map. `typecheck` exit 0. - `check:liveness` exit 0, `check:migration-registry` `✓ ... is current (354 semantic, 246 retired-key, 218 retired-def)`, `check:doc-authoring` exit 0, `check:nul-bytes` `OK (... no raw ASCII control bytes)`. - Changeset gates, with this body as the `--event` payload: `check-adr-0087-registration` `✓ 1 declared-breaking changeset(s) ... registered ui-ai-chat-window-retired (new here: ui-ai-chat-window-retired)`. `check-changeset-no-major` `✓ LEVEL AXIS: this PR declares clause-② yes (narrowing)`. `check-empty-changeset` exit 0. - `dispatch-gates --ran`: `✓ 114 derived famil(ies) accounted for — 112 run, 2 NOT-MEASURED`. - NOT MEASURED: `check:dual-build-cjs-loads`, reason: it needs a whole-repo `pnpm build`, and it exited 3 with PREREQUISITE NOT MET. - NOT MEASURED: `check:type-check-debt`, reason: repo-wide tsc, killed by a 420s per-gate timeout on the shared box. The two packages this PR touches typecheck green. - Both are declared to CI. - NOT MEASURED: `@objectstack/spec` `test:repo` (`--project repo`), reason: one idle worker under 2% CPU for 10 minutes with no output, stopped. It is CI's. ## Acceptance notes - **objectui will need a reconciliation when it next bumps `@objectstack/spec`.** It is the same step objectui#7122 took for `user:profile` and `element:form`. At the pin, `block-config.test.ts` ("every exclusion names a real spec type") and the `UNJUDGED_SPEC_BLOCKS` entry in `registry-inputs-spec-parity.test.ts` ("NOT REGISTERED, DELIBERATELY", whose class is exclusive with "RETIRED UPSTREAM") both still treat `ai:chat_window` as a live enum member. They are objectui's tests against its installed spec, so they do not affect this repo's CI. Who picks it up: the next objectui spec-bump PR. - The enumeration pin's `no-reader` reason kind no longer has a user. It is left as ledger vocabulary. - The prescription names `defaultAgent` for what `agentId` was used for. objectui at the pin forwards `app.defaultAgent`, limited to `ask` / `build`, to the chat dock's one agent resolver (`app-shell/src/layout/ChatDock.tsx:242`, `hooks/surfaceAgent.ts:127-128`). --- _Generated by [Claude Code](https://claude.ai/code/session_01YDt3PzwfrkuFzUBF89WPmM)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 31d2255 commit 48eb9c1

22 files changed

Lines changed: 393 additions & 74 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
'@objectstack/spec': minor
3+
---
4+
5+
feat(spec)!: `ai:chat_window` is retired — refused by name at the schema door, the floating chat overlay is the AI chat entry point (#21504, ADR-0049)
6+
7+
Clause-②: yes (narrowing)
8+
9+
<!-- adr-0087: registered ui-ai-chat-window-retired -->
10+
11+
**BREAKING** — an accept-set narrowing on a published authoring surface, shipped as `minor` under the repo's launch-window convention for accept-set narrowings (the `user:profile`, `element:filter` and `element:form` retirements shipped the same way).
12+
13+
`ai:chat_window` was declared in `PageComponentType` and mapped to `AIChatWindowProps` (`mode`, `agentId`, `context`, `aria`) in `ComponentPropsMap`, and no renderer for it ever shipped — not in objectui, framework or cloud. The console leaves it unregistered on purpose: the floating chat overlay it mounts on every page is the supported AI chat entry point, and an inline page-level chat window is not part of the supported surface. So an authored `ai:chat_window` node validated clean and then drew "Unknown component type" in front of an end user, and none of its four props configured anything. The triage ruling retired it under ADR-0049 enforce-or-remove, refused by name, following the `user:profile` precedent.
14+
15+
**What is refused:** an authored `ai:chat_window` component node, at `PageComponentSchema.type`. That covers `definePage()`, `PageSchema`, and every door that parses pages: `os validate`, `os build`, `os lint` and the metadata save door. The issue is located at the node's own path, with `code: 'custom'` and `params.retiredComponentType`, and its message is the retirement prescription. `PageComponentType`'s own error map refuses the name with the same text when the enum is parsed alone. `ComponentPropsMap['ai:chat_window']` stays as a row, so every reader that dispatches on it keeps recognising the name: the component-props gate, `check-yaml-examples` and the type vocabulary's known set. The row now refuses every props bag, `{}` included, with the same prescription. One prescription string, `RETIRED_PAGE_COMPONENT_TYPES` in `@objectstack/spec/ui`, answers at all three doors.
16+
17+
**What is removed from the exports:** `AIChatWindowProps` (`@objectstack/spec/ui`), the props schema the element no longer has. Its JSON Schema (`ui/AIChatWindowProps`) is no longer published.
18+
19+
**What stays accepted:** every other member of `PageComponentType` and `ComponentPropsMap`, byte-identically. That includes `ai:suggestion`, which keeps its row and its place in the enum, so `ai:` stays a namespace the `component-type-unknown` authoring rule claims. The open string arm also stays open: custom and plugin-registered types keep parsing. The only string refused is the retired name itself.
20+
21+
## FROM → TO
22+
23+
| you wrote | write instead |
24+
|:--|:--|
25+
| a `{ type: 'ai:chat_window' }` component node in a page region, slot or container | nothing: delete the node. The floating chat overlay is on every page already |
26+
| `properties: { agentId: '…' }` on that node | the app's `defaultAgent` (a platform agent: `ask`, the default, or `build` on an authoring surface) |
27+
| `properties: { mode, context, aria }` on that node | nothing: none of them was ever read, and the overlay is not configured per page |
28+
29+
The one-line fix: delete the `ai:chat_window` component node. No ADR-0087 conversion is registered, because the only edit is deleting an authored page node, and a mechanical conversion does not delete page nodes: which region closes up is a layout decision. The D3 entry `ui-ai-chat-window-retired` carries that delegation, so `os migrate meta --from 17` lists it as a manual change for every stack that still names the type.
30+
31+
## Who is affected, measured
32+
33+
- **objectstack** at `529d9711fb`: zero authored `ai:chat_window` nodes in `examples/**`, `packages/apps/**`, `apps/**`, `skills/**` and `content/docs/**` code samples. The only hits were the spec's own type list, its row, its tests and the generated reference docs. The control in the same query shape: `element:divider` is authored in 3 example files and `record:details` in 12.
34+
- **objectui** at the `.objectui-sha` pin `89cad75d55`: no renderer is registered. `components/src/renderers/placeholders.tsx` omits the type on purpose, and Studio's page palette excludes it. The remaining hits are tests asserting its absence, the palette exclusion, a parity-ledger entry and comments. No non-test source imports `AIChatWindowProps` or indexes the row.
35+
- **cloud** and **hotcrm** (triage's census): zero producers. hotcrm names it once, in a comment, as dropped.
36+
- **Deployed metadata** was not measured.
37+
38+
The retirement kit:
39+
40+
- the retired-type map entry, the enum value removed (`packages/spec/src/ui/page.zod.ts`), and the row turned into a whole-bag refusal, with `AIChatWindowProps` removed (`packages/spec/src/ui/component.zod.ts`)
41+
- the D3 semantic entry `ui-ai-chat-window-retired`, its step-18 rationale fragment, and the `RETIRED_DEFS_BY_MAJOR` entry `ui/AIChatWindowProps`
42+
- pin tests: in `component.test.ts`, `code`, `path`, `params` and the first sentence at each of the three doors, with `ai:suggestion` as the control and the open arm left open. In `component-type-vocabulary.test.ts`, the type stays known, leaves the typo candidates, and `ai:` stays reserved. The `ComponentPropsMap` `z.unknown()` enumeration loses its `ai:chat_window` `context` line with the row's keys.
43+
- generated baselines and docs follow the schema: `api-surface/`, `export-origins/`, `declaration-map/`, `authorable-surface/`, `authorable-defaults/`, `json-schema.manifest/`, `spec-changes.json`, the upgrade guide and the reference docs. The hand-written `content/docs/ui/pages.mdx` component list now says the truth.

‎content/docs/references/index.mdx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Protocol reference — every schema by module
33
navTitle: Protocol Reference
4-
description: Every schema published by @objectstack/spec — 1517 schemas across 14 protocol modules
4+
description: Every schema published by @objectstack/spec — 1516 schemas across 14 protocol modules
55
---
66

77
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -33,8 +33,8 @@ counts are sums of the rows they head. Regenerate with
3333
| [Shared Protocol](/docs/references/shared) | 10 | 31 | Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums. |
3434
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
3535
| [System Protocol](/docs/references/system) | 34 | 275 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
36-
| [UI Protocol](/docs/references/ui) | 16 | 166 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
37-
| **Total** | **196** | **1517** | 14 protocol modules |
36+
| [UI Protocol](/docs/references/ui) | 16 | 165 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
37+
| **Total** | **196** | **1516** | 14 protocol modules |
3838

3939
---
4040

@@ -363,7 +363,7 @@ The runtime environment — logging, jobs, cache, metrics, notifications, i18n a
363363

364364
## UI Protocol
365365

366-
**Source:** `packages/spec/src/ui/` · **Import:** `@objectstack/spec/ui` · **16 pages, 166 schemas**
366+
**Source:** `packages/spec/src/ui/` · **Import:** `@objectstack/spec/ui` · **16 pages, 165 schemas**
367367

368368
Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer.
369369

@@ -374,7 +374,7 @@ Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI lay
374374
| [`app.zod.ts`](/docs/references/ui/app) | `ActionNavItem`, `App`, `AppBranding`, `AppContextSelector`, `ComponentNavItem`, `DashboardNavItem`, `DocNavItem`, `GroupNavItem`, `NavigationArea`, `NavigationContribution`, `NavigationItem`, `ObjectNavItem`, `PageNavItem`, `ReportNavItem`, `UrlNavItem` |
375375
| [`bulk-action.zod.ts`](/docs/references/ui/bulk-action) | `BulkActionDef`, `BulkActionExecution`, `BulkActionOperation`, `BulkActionParam` |
376376
| [`chart.zod.ts`](/docs/references/ui/chart) | `ChartAggregate`, `ChartAggregateFunction`, `ChartAnnotation`, `ChartAxis`, `ChartConfig`, `ChartDrillDown`, `ChartGroupBy`, `ChartInteraction`, `ChartSeries`, `ChartType` |
377-
| [`component.zod.ts`](/docs/references/ui/component) | `AIChatWindowProps`, `ActionButtonProps`, `ActionGroupProps`, `ActionIconProps`, `ActionMenuProps`, `ElementButtonProps`, `ElementDefinitionListProps`, `ElementFilterProps`, `ElementFormProps`, `ElementImageProps`, `ElementMetadataViewerProps`, `ElementNumberProps`, `ElementRecordPickerProps`, `ElementRepeaterProps`, `ElementTextInputProps`, `ElementTextProps`, `ObjectCalendarProps`, `ObjectFormProps`, `ObjectGanttProps`, `ObjectGridProps`, `ObjectKanbanProps`, `ObjectMapProps`, `ObjectMasterDetailFormProps`, `ObjectMetricProps`, `ObjectTimelineProps`, `ObjectTreeProps`, `PageAccordionProps`, `PageCardProps`, `PageContainerProps`, `PageHeaderProps`, `PageTabsProps`, `RecordActivityProps`, `RecordAlertAction`, `RecordAlertProps`, `RecordChatterProps`, `RecordDetailsProps`, `RecordHighlightsField`, `RecordHighlightsProps`, `RecordHistoryProps`, `RecordLineItemsProps`, `RecordPathProps`, `RecordQuickActionsProps`, `RecordReferenceRailProps`, `RecordRelatedListProps`, `ReferenceRailEntry` |
377+
| [`component.zod.ts`](/docs/references/ui/component) | `ActionButtonProps`, `ActionGroupProps`, `ActionIconProps`, `ActionMenuProps`, `ElementButtonProps`, `ElementDefinitionListProps`, `ElementFilterProps`, `ElementFormProps`, `ElementImageProps`, `ElementMetadataViewerProps`, `ElementNumberProps`, `ElementRecordPickerProps`, `ElementRepeaterProps`, `ElementTextInputProps`, `ElementTextProps`, `ObjectCalendarProps`, `ObjectFormProps`, `ObjectGanttProps`, `ObjectGridProps`, `ObjectKanbanProps`, `ObjectMapProps`, `ObjectMasterDetailFormProps`, `ObjectMetricProps`, `ObjectTimelineProps`, `ObjectTreeProps`, `PageAccordionProps`, `PageCardProps`, `PageContainerProps`, `PageHeaderProps`, `PageTabsProps`, `RecordActivityProps`, `RecordAlertAction`, `RecordAlertProps`, `RecordChatterProps`, `RecordDetailsProps`, `RecordHighlightsField`, `RecordHighlightsProps`, `RecordHistoryProps`, `RecordLineItemsProps`, `RecordPathProps`, `RecordQuickActionsProps`, `RecordReferenceRailProps`, `RecordRelatedListProps`, `ReferenceRailEntry` |
378378
| [`dashboard.zod.ts`](/docs/references/ui/dashboard) | `Dashboard`, `DashboardHeader`, `DashboardHeaderAction`, `DashboardWidget`, `DashboardWidgetChartConfig`, `DashboardWidgetOptions`, `GlobalFilter`, `GlobalFilterOptionsFrom`, `WidgetActionType`, `WidgetColorVariant` |
379379
| [`dataset.zod.ts`](/docs/references/ui/dataset) | `Dataset`, `DatasetDimension`, `DatasetMeasure`, `DerivedMeasureOp` |
380380
| [`expression-bindable-text-keys.zod.ts`](/docs/references/ui/expression-bindable-text-keys) | `ExpressionBindableTextKey` |

‎content/docs/references/ui/component.mdx‎

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Component schema — UI Protocol reference
33
navTitle: Component
4-
description: "Component schemas of the ObjectStack UI Protocol: AIChatWindowProps and 44 more — each property with its type, default and a TypeScript example."
4+
description: "Component schemas of the ObjectStack UI Protocol: ActionButtonProps and 43 more — each property with its type, default and a TypeScript example."
55
---
66

77
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -13,35 +13,13 @@ description: "Component schemas of the ObjectStack UI Protocol: AIChatWindowProp
1313
## TypeScript Usage
1414

1515
```typescript
16-
import { AIChatWindowProps, ActionButtonPropsSchema, ActionGroupPropsSchema, ActionIconPropsSchema, ActionMenuPropsSchema, ElementButtonPropsSchema, ElementDefinitionListPropsSchema, ElementFilterPropsSchema, ElementFormPropsSchema, ElementImagePropsSchema, ElementMetadataViewerPropsSchema, ElementNumberPropsSchema, ElementRecordPickerPropsSchema, ElementRepeaterPropsSchema, ElementTextInputPropsSchema, ElementTextPropsSchema, ObjectCalendarPropsSchema, ObjectFormPropsSchema, ObjectGanttPropsSchema, ObjectGridPropsSchema, ObjectKanbanPropsSchema, ObjectMapPropsSchema, ObjectMasterDetailFormPropsSchema, ObjectMetricPropsSchema, ObjectTimelinePropsSchema, ObjectTreePropsSchema, PageAccordionProps, PageCardProps, PageContainerProps, PageHeaderProps, PageTabsProps, RecordActivityProps, RecordAlertActionSchema, RecordAlertProps, RecordChatterProps, RecordDetailsProps, RecordHighlightsField, RecordHighlightsProps, RecordHistoryProps, RecordLineItemsProps, RecordPathProps, RecordQuickActionsProps, RecordReferenceRailProps, RecordRelatedListProps, ReferenceRailEntrySchema } from '@objectstack/spec/ui';
16+
import { ActionButtonPropsSchema, ActionGroupPropsSchema, ActionIconPropsSchema, ActionMenuPropsSchema, ElementButtonPropsSchema, ElementDefinitionListPropsSchema, ElementFilterPropsSchema, ElementFormPropsSchema, ElementImagePropsSchema, ElementMetadataViewerPropsSchema, ElementNumberPropsSchema, ElementRecordPickerPropsSchema, ElementRepeaterPropsSchema, ElementTextInputPropsSchema, ElementTextPropsSchema, ObjectCalendarPropsSchema, ObjectFormPropsSchema, ObjectGanttPropsSchema, ObjectGridPropsSchema, ObjectKanbanPropsSchema, ObjectMapPropsSchema, ObjectMasterDetailFormPropsSchema, ObjectMetricPropsSchema, ObjectTimelinePropsSchema, ObjectTreePropsSchema, PageAccordionProps, PageCardProps, PageContainerProps, PageHeaderProps, PageTabsProps, RecordActivityProps, RecordAlertActionSchema, RecordAlertProps, RecordChatterProps, RecordDetailsProps, RecordHighlightsField, RecordHighlightsProps, RecordHistoryProps, RecordLineItemsProps, RecordPathProps, RecordQuickActionsProps, RecordReferenceRailProps, RecordRelatedListProps, ReferenceRailEntrySchema } from '@objectstack/spec/ui';
1717
import type { ActionButtonProps, ActionGroupProps, ActionIconProps, ActionMenuProps, ElementDefinitionListProps, ElementNumberProps, ElementRecordPickerProps, ElementRepeaterProps, ObjectCalendarProps, ObjectFormProps, ObjectGanttProps, ObjectGridProps, ObjectKanbanProps, ObjectMapProps, ObjectMasterDetailFormProps, ObjectMetricProps, ObjectTimelineProps, ObjectTreeProps, PageContainerProps, RecordAlertAction, RecordAlertProps, RecordHighlightsField, RecordHistoryProps, RecordLineItemsProps, RecordPathProps, RecordQuickActionsProps, RecordReferenceRailProps, ReferenceRailEntry } from '@objectstack/spec/ui';
1818

1919
// Validate data
20-
const result = AIChatWindowProps.parse(data);
20+
const result = ActionButtonPropsSchema.parse(data);
2121
```
2222

23-
---
24-
25-
## AIChatWindowProps
26-
27-
### Properties
28-
29-
| Property | Type | Required | Description |
30-
| :--- | :--- | :--- | :--- |
31-
| **mode** | `Enum<'float' \| 'sidebar' \| 'inline'>` | optional (default: `"float"`) | Display mode for the chat window |
32-
| **agentId** | `string` | optional | Specific AI agent to use |
33-
| **context** | `Record<string, any>` | optional | Contextual data to pass to the AI |
34-
| **aria** | `{ ariaLabel?: string \| Record<string, string>; ariaDescribedBy?: string; role?: string }` | optional | ARIA accessibility attributes |
35-
36-
### Nested Shape: `AIChatWindowProps.aria`
37-
38-
| Property | Type | Required | Description |
39-
| :--- | :--- | :--- | :--- |
40-
| **ariaLabel** | `string \| Record<string, string>` | optional | Accessible label for screen readers (WAI-ARIA aria-label). Plain string, or an inline locale map — no translation-bundle slot addresses this key, so a plain string is announced in the source language. |
41-
| **ariaDescribedBy** | `string` | optional | ID of element providing additional description (WAI-ARIA aria-describedby) |
42-
| **role** | `string` | optional | WAI-ARIA role attribute (e.g., "dialog", "navigation", "alert") |
43-
44-
4523
---
4624

4725
## ActionButtonProps

0 commit comments

Comments
 (0)