@adia-ai/a2ui-corpus 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/catalog-a2ui_0_9.json +240 -0
  3. package/catalog-a2ui_0_9_rules.txt +5 -0
  4. package/chunk-embeddings.json +1 -1
  5. package/chunks/_index.json +1 -1
  6. package/chunks/accordion-settings.json +32 -11
  7. package/chunks/agent-activity-feed.json +1 -1
  8. package/chunks/agent-canvas-shell.json +1 -1
  9. package/chunks/agent-command-palette-search.json +38 -9
  10. package/chunks/agent-reasoning-collapsed.json +1 -1
  11. package/chunks/agent-tool-call-result.json +12 -3
  12. package/chunks/agent-trace-timeline.json +22 -5
  13. package/chunks/ai-streaming-response.json +16 -5
  14. package/chunks/alert-banner.json +15 -4
  15. package/chunks/auth-account-deleted-actions.json +1 -1
  16. package/chunks/auth-account-deleted.json +1 -1
  17. package/chunks/auth-card-content.json +1 -1
  18. package/chunks/auth-card-header.json +1 -1
  19. package/chunks/auth-email-entry.json +11 -3
  20. package/chunks/auth-email-verify-confirm.json +1 -1
  21. package/chunks/auth-email-verify.json +1 -1
  22. package/chunks/auth-forbidden-actions.json +1 -1
  23. package/chunks/auth-forbidden.json +1 -1
  24. package/chunks/auth-invite-actions.json +1 -1
  25. package/chunks/auth-invite-team-card.json +1 -1
  26. package/chunks/auth-link-expired-form.json +1 -1
  27. package/chunks/auth-link-expired.json +1 -1
  28. package/chunks/auth-locked-account.json +1 -1
  29. package/chunks/auth-locked-recovery-options.json +1 -1
  30. package/chunks/auth-mfa-enrollment-submit.json +1 -1
  31. package/chunks/auth-mfa-enrollment.json +19 -6
  32. package/chunks/auth-mfa-fallback-actions.json +1 -1
  33. package/chunks/auth-mfa-recovery.json +1 -1
  34. package/chunks/auth-new-password-form.json +1 -1
  35. package/chunks/auth-new-password.json +24 -6
  36. package/chunks/auth-oauth-fallback-actions.json +1 -1
  37. package/chunks/auth-oauth-interstitial.json +1 -1
  38. package/chunks/auth-password-challenge.json +1 -1
  39. package/chunks/auth-password-reset-form.json +1 -1
  40. package/chunks/auth-password-reset.json +15 -5
  41. package/chunks/auth-profile-form.json +1 -1
  42. package/chunks/auth-profile-setup.json +1 -1
  43. package/chunks/auth-reset-sent.json +1 -1
  44. package/chunks/auth-session-expired-actions.json +1 -1
  45. package/chunks/auth-session-expired.json +1 -1
  46. package/chunks/auth-signin-card-email.json +29 -9
  47. package/chunks/auth-signin-card-magic-link.json +11 -4
  48. package/chunks/auth-signin-card-mfa.json +26 -8
  49. package/chunks/auth-signin-card-otp.json +16 -5
  50. package/chunks/auth-signin-card-password.json +29 -9
  51. package/chunks/auth-signin-card-recovery.json +1 -1
  52. package/chunks/auth-signout-actions.json +1 -1
  53. package/chunks/auth-signout.json +1 -1
  54. package/chunks/auth-signup-email-entry.json +1 -1
  55. package/chunks/auth-signup-entry.json +25 -8
  56. package/chunks/auth-signup-social-auths.json +1 -1
  57. package/chunks/auth-signup-verify.json +1 -1
  58. package/chunks/auth-social-auths.json +1 -1
  59. package/chunks/auth-sso-providers.json +1 -1
  60. package/chunks/auth-sso-required.json +1 -1
  61. package/chunks/auth-team-invite.json +1 -1
  62. package/chunks/avatar-group-overflow.json +18 -9
  63. package/chunks/breadcrumb-nav.json +17 -7
  64. package/chunks/calendar-month-view.json +12 -3
  65. package/chunks/card-header-with-description.json +1 -1
  66. package/chunks/chart-with-filter-pills.json +5 -1
  67. package/chunks/chat-page-shell.json +41 -8
  68. package/chunks/chat-streaming-surface.json +7 -2
  69. package/chunks/color-picker-swatches.json +5 -2
  70. package/chunks/command-palette.json +3 -2
  71. package/chunks/commerce-pricing-tiers.json +31 -5
  72. package/chunks/comparison-table.json +6 -1
  73. package/chunks/conversion-funnel-6step.json +5 -1
  74. package/chunks/dashboard-acquisition-panel.json +22 -6
  75. package/chunks/dashboard-admin-page.json +325 -52
  76. package/chunks/dashboard-audience-kpis.json +1 -1
  77. package/chunks/dashboard-audience-panel.json +56 -7
  78. package/chunks/dashboard-behavior-panel.json +6 -2
  79. package/chunks/dashboard-chart-recent.json +57 -10
  80. package/chunks/dashboard-cohort-retention.json +1 -1
  81. package/chunks/dashboard-conversion-panel.json +8 -2
  82. package/chunks/dashboard-country-list.json +1 -1
  83. package/chunks/dashboard-filter-bar.json +15 -3
  84. package/chunks/dashboard-funnel.json +5 -1
  85. package/chunks/dashboard-kpi-grid.json +30 -5
  86. package/chunks/dashboard-notifications-feed.json +1 -1
  87. package/chunks/dashboard-notifications-panel.json +46 -9
  88. package/chunks/dashboard-overview-panel.json +178 -28
  89. package/chunks/dashboard-page-header.json +10 -3
  90. package/chunks/dashboard-pages-table.json +1 -1
  91. package/chunks/dashboard-quick-actions.json +1 -1
  92. package/chunks/dashboard-reports-panel.json +6 -2
  93. package/chunks/dashboard-reports-table.json +1 -1
  94. package/chunks/dashboard-spark-cards.json +29 -5
  95. package/chunks/dashboard-storage-card.json +1 -1
  96. package/chunks/dashboard-tabs.json +2 -1
  97. package/chunks/dashboard-team-actions-storage.json +55 -10
  98. package/chunks/dashboard-team-list.json +1 -1
  99. package/chunks/dashboard-traffic-channels.json +1 -1
  100. package/chunks/dashboard-transactions-table.json +7 -2
  101. package/chunks/date-time-picker-form.json +21 -6
  102. package/chunks/destructive-confirm-modal.json +11 -4
  103. package/chunks/divider-text-label.json +6 -2
  104. package/chunks/doc-editor-shell.json +1 -1
  105. package/chunks/drawer-2fa-key.json +1 -1
  106. package/chunks/drawer-2fa-sms.json +1 -1
  107. package/chunks/drawer-2fa-totp.json +1 -1
  108. package/chunks/drawer-cancel-sub.json +1 -1
  109. package/chunks/drawer-change-plan.json +1 -1
  110. package/chunks/drawer-custom-roles.json +1 -1
  111. package/chunks/drawer-data-start.json +1 -1
  112. package/chunks/drawer-delete-account.json +1 -1
  113. package/chunks/drawer-delete-workspace.json +1 -1
  114. package/chunks/drawer-discord.json +1 -1
  115. package/chunks/drawer-figma.json +1 -1
  116. package/chunks/drawer-first-dashboard.json +1 -1
  117. package/chunks/drawer-gcal.json +1 -1
  118. package/chunks/drawer-github.json +1 -1
  119. package/chunks/drawer-invite.json +1 -1
  120. package/chunks/drawer-payment-method.json +56 -16
  121. package/chunks/drawer-report.json +1 -1
  122. package/chunks/drawer-revoke-session.json +1 -1
  123. package/chunks/drawer-role.json +1 -1
  124. package/chunks/drawer-slack.json +1 -1
  125. package/chunks/drawer-smtp.json +1 -1
  126. package/chunks/drawer-source.json +1 -1
  127. package/chunks/drawer-transaction.json +1 -1
  128. package/chunks/editor-code-pane.json +12 -3
  129. package/chunks/editor-page-shell.json +1 -1
  130. package/chunks/editor-preview-pane.json +2 -1
  131. package/chunks/empty-state.json +9 -3
  132. package/chunks/error-404-actions.json +1 -1
  133. package/chunks/error-404.json +15 -5
  134. package/chunks/error-500-actions.json +1 -1
  135. package/chunks/error-500.json +19 -6
  136. package/chunks/error-maintenance-actions.json +1 -1
  137. package/chunks/error-maintenance.json +15 -5
  138. package/chunks/error-page-shell.json +12 -3
  139. package/chunks/faq-accordion.json +5 -1
  140. package/chunks/file-upload-dnd.json +6 -2
  141. package/chunks/footer-multi-column.json +45 -17
  142. package/chunks/footer-primary-only.json +1 -1
  143. package/chunks/form-page-shell.json +16 -5
  144. package/chunks/gallery-page-shell.json +26 -6
  145. package/chunks/hero-section-split.json +12 -3
  146. package/chunks/icon-text-row.json +1 -1
  147. package/chunks/image-carousel.json +12 -3
  148. package/chunks/image-tile.json +1 -1
  149. package/chunks/image-upload-preview.json +18 -4
  150. package/chunks/inventory-list-stock.json +27 -9
  151. package/chunks/kanban-board-3col.json +28 -4
  152. package/chunks/kanban-page-shell.json +95 -19
  153. package/chunks/kbd-shortcuts.json +7 -1
  154. package/chunks/labeled-textarea.json +2 -1
  155. package/chunks/leaderboard-table.json +48 -11
  156. package/chunks/linked-record-row.json +7 -3
  157. package/chunks/marketing-hero-cta.json +12 -3
  158. package/chunks/marketing-page-shell.json +17 -4
  159. package/chunks/masonry-gallery.json +10 -1
  160. package/chunks/member-edit-drawer.json +1 -1
  161. package/chunks/metadata-description-list.json +1 -1
  162. package/chunks/multi-step-wizard.json +13 -4
  163. package/chunks/notification-toast-row.json +27 -7
  164. package/chunks/onb-completion.json +1 -1
  165. package/chunks/onb-extension-install.json +1 -1
  166. package/chunks/onb-hero-welcome.json +1 -1
  167. package/chunks/onb-import-picker.json +1 -1
  168. package/chunks/onb-mobile-handoff.json +1 -1
  169. package/chunks/onb-notification-prefs.json +1 -1
  170. package/chunks/onb-persona-picker.json +1 -1
  171. package/chunks/onb-provider-tiles.json +1 -1
  172. package/chunks/onb-settings-review.json +1 -1
  173. package/chunks/onb-step-footer.json +1 -1
  174. package/chunks/onb-step-header.json +1 -1
  175. package/chunks/onb-step-progress.json +1 -1
  176. package/chunks/onb-step-shell.json +5 -3
  177. package/chunks/onb-story-pane.json +1 -1
  178. package/chunks/onb-tutorial-steps.json +1 -1
  179. package/chunks/pagination-controls.json +6 -2
  180. package/chunks/playground-a2ui.json +1 -1
  181. package/chunks/playground-app-shell.json +1 -1
  182. package/chunks/playground-chat.json +1 -1
  183. package/chunks/playground-construct-canvas.json +1 -1
  184. package/chunks/playground-gen-ui.json +1 -1
  185. package/chunks/playground-render-preview.json +1 -1
  186. package/chunks/playground-streams-bridge.json +1 -1
  187. package/chunks/playground-table-toolbar.json +1 -1
  188. package/chunks/popover-with-content.json +6 -2
  189. package/chunks/progress-tracker-milestones.json +24 -7
  190. package/chunks/real-time-metrics-dashboard.json +15 -4
  191. package/chunks/reg-address-form.json +184 -26
  192. package/chunks/reg-billing-card.json +50 -8
  193. package/chunks/reg-brand-scrape.json +1 -1
  194. package/chunks/reg-departments-toggle.json +1 -1
  195. package/chunks/reg-extended-profile.json +1 -1
  196. package/chunks/reg-final-done.json +1 -1
  197. package/chunks/reg-helpdesk-grid.json +1 -1
  198. package/chunks/reg-import-picker.json +1 -1
  199. package/chunks/reg-integrations-grid.json +1 -1
  200. package/chunks/reg-invite-form.json +35 -5
  201. package/chunks/reg-legal-entity.json +1 -1
  202. package/chunks/reg-org-chart-review.json +1 -1
  203. package/chunks/reg-profile-identity.json +1 -1
  204. package/chunks/reg-step-footer.json +1 -1
  205. package/chunks/reg-step-header.json +1 -1
  206. package/chunks/reg-step-progress.json +1 -1
  207. package/chunks/reg-step-shell.json +62 -12
  208. package/chunks/reg-story-pane.json +1 -1
  209. package/chunks/reg-success-summary.json +1 -1
  210. package/chunks/reg-team-size.json +1 -1
  211. package/chunks/reg-usecase-picker.json +1 -1
  212. package/chunks/reg-workspace-name.json +21 -4
  213. package/chunks/search-with-filters.json +19 -8
  214. package/chunks/section-with-stack.json +1 -1
  215. package/chunks/settings-admin-page.json +117 -32
  216. package/chunks/settings-appearance.json +1 -1
  217. package/chunks/settings-billing-plan.json +1 -1
  218. package/chunks/settings-general-form.json +10 -3
  219. package/chunks/settings-integrations.json +4 -1
  220. package/chunks/settings-members-invite.json +1 -1
  221. package/chunks/settings-notifications.json +11 -1
  222. package/chunks/settings-page-shell.json +10 -3
  223. package/chunks/settings-profile-security.json +20 -6
  224. package/chunks/sidebar-collapsible-nav.json +36 -9
  225. package/chunks/slider-range-controls.json +14 -4
  226. package/chunks/tabs-with-panels.json +5 -1
  227. package/chunks/testimonial-grid.json +17 -4
  228. package/chunks/text-card.json +1 -1
  229. package/chunks/timeline-events.json +7 -1
  230. package/chunks/toolbar-icons.json +38 -10
  231. package/chunks/toolbar-tooltips.json +34 -9
  232. package/chunks/user-identity-row.json +1 -1
  233. package/chunks/user-profile-card.json +24 -5
  234. package/chunks/users-table-badge.json +38 -10
  235. package/chunks/video-player-controls.json +21 -5
  236. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -19,6 +19,66 @@ gap registry. Consumed by `@adia-ai/a2ui-retrieval` and
19
19
 
20
20
  _No pending changes._
21
21
 
22
+ ## [0.5.4] - 2026-05-14
23
+
24
+ ### Changed — §164 re-harvest 230 chunks against §163-fixed transpiler; +2,920 LOC restored prop fidelity (v0.5.4)
25
+
26
+ `packages/a2ui/corpus/chunks/*.json` — 230 chunks regenerated by running
27
+ `npm run harvest:chunks` against the §163-fixed transpiler (sibling
28
+ package `@adia-ai/a2ui-compose@0.5.4`). Closes the corpus side of the
29
+ harvester drop class diagnosed 2026-05-14: the chunks shipped at v0.5.3
30
+ were authored pre-§163 and carried prop-stripped templates (Input/
31
+ CheckBox/Button/Divider primitives with empty props), causing
32
+ composition-match retrievals to render blank rectangles even though
33
+ type-registration + schema validation both passed green.
34
+
35
+ **Empirical scope of the gap (defensible at the engineering-board level):**
36
+
37
+ 231 files modified (230 chunks + `_index.json`)
38
+ +2,920 lines added (restored props)
39
+ -765 lines removed (stale or redundant content displaced)
40
+ Net: +2,155 LOC of restored prop fidelity
41
+
42
+ **Verified spot-check** on `auth-signin-card-password` chunk (the diagnosis baseline):
43
+
44
+ password Input {} → {label, type, autocomplete, name, placeholder, required}
45
+ remember CheckBox {name} → {name, label}
46
+ Sign in Button {type} → {type, text, variant}
47
+ Divider {} → {label}
48
+ magic-link Button {} → {icon, text, variant}
49
+ 6-digit Button {} → {icon, text, variant}
50
+
51
+ Retrieval-layer surfacing confirmed: post-§164 smoke probe text now
52
+ includes `"enter your password signing in as kim@acme.com password ••••…"`
53
+ — proof the fix landed not just at the file system but at the retrieval
54
+ surface where compositions are matched.
55
+
56
+ ### Changed — `chunk-embeddings.json` rebuilt (6,632 KB; 230 × 1536-dim vectors)
57
+
58
+ `npm run build:embeddings:chunks` regenerated `chunk-embeddings.json`
59
+ since chunk content changed materially (the +2,920 LOC of restored
60
+ props are semantically meaningful for retrieval). Existing embeddings
61
+ would have under-retrieved compositions whose prop content now adds
62
+ discriminating tokens.
63
+
64
+ ### Added — `scripts/audit/check-chunk-prop-fidelity.mjs` companion script (+194 LOC, NEW; sibling to scripts/release/ family)
65
+
66
+ Audit script that re-runs the harvester in-place against a temp
67
+ snapshot, diffs against committed chunks, restores via temp, reports
68
+ added/removed/changed props per chunk. Sibling-positioned in
69
+ `scripts/audit/` (rather than `scripts/release/`) because it has
70
+ side-effecting probe-and-restore semantics (briefly mutates the working
71
+ tree to compare).
72
+
73
+ default — exit 0; informational report
74
+ --strict — exit 1 if any chunk would diverge
75
+
76
+ Catches future regressions of the §163/§164 class: a new chunk page
77
+ authored without v0.9-aware harvester contract, OR a new prop added
78
+ to the v0.9 catalog that doesn't flow through to existing chunks.
79
+
80
+ ### Changed — `version`: `0.5.3` → `0.5.4`.
81
+
22
82
  ## [0.5.3] - 2026-05-14
23
83
 
24
84
  ### Changed — `catalog-a2ui_0_9.json` regen for `<table-ui>` `row-collapse` event declaration (§162 ride-along, v0.5.3)
@@ -4118,6 +4118,162 @@
4118
4118
  "version": 1
4119
4119
  }
4120
4120
  },
4121
+ "ChatInput": {
4122
+ "title": "ChatInput",
4123
+ "description": "Composable chat input bar — a self-contained chat-message composer\nthat stamps its OWN inner structure (textarea + model picker + send\nbutton) when authored as a bare `<chat-input-ui>` tag.\n\nIMPORTANT (closes the 2026-05-14 redundant-send-button class): the\ncomponent stamps a built-in send button (paper-plane-right icon,\nprimary variant). DO NOT add a separate Button sibling for \"send\" —\nthe user gets two send buttons. The submit event fires on Enter or\nsend-button click; `detail` is `{ text, model }`.\n\nInner stamped structure (default):\n <chat-input-ui>\n <textarea-ui placeholder=\"Type a message...\" rows=\"1\"></textarea-ui>\n <div slot=\"toolbar\">\n <select-ui slot=\"model\" placeholder=\"Model\">...</select-ui>\n <button-ui icon=\"paper-plane-right\" variant=\"primary\" slot=\"send\"></button-ui>\n </div>\n </chat-input-ui>\n\nLayout:\n ┌──────────────────────────────────┐\n │ textarea (grows vertically) │\n ├──────────────────────────────────┤\n │ [model ▾] [⏎ send] │ ← toolbar (model picker + built-in send)\n └──────────────────────────────────┘\n\nComposite wrapper, not a form field itself. The inner textarea-ui\nis form-associated via UIFormElement and submits through the parent\nform. `chat-input-ui`'s `disabled` / `placeholder` props propagate\nto the inner textarea.\n\nFor module-tier composer surfaces (slot vocabulary for file attach,\nautocomplete, trailing/leading controls), wrap inside\n`<chat-composer>` — see ChatComposer for the module-tier shape.\n",
4124
+ "type": "object",
4125
+ "allOf": [
4126
+ {
4127
+ "$ref": "#/$defs/ComponentCommon"
4128
+ },
4129
+ {
4130
+ "$ref": "#/$defs/CatalogComponentCommon"
4131
+ }
4132
+ ],
4133
+ "properties": {
4134
+ "component": {
4135
+ "const": "ChatInput"
4136
+ },
4137
+ "disabled": {
4138
+ "description": "Disable the entire input. Textarea becomes contenteditable=false;\nsend button disabled.\n",
4139
+ "type": "boolean",
4140
+ "default": false
4141
+ },
4142
+ "loading": {
4143
+ "description": "In-flight / streaming state. Send button disabled, submit events\nsuppressed, but textarea stays editable so the user can draft a\nfollow-up while the model is still responding.\n",
4144
+ "type": "boolean",
4145
+ "default": false
4146
+ },
4147
+ "model": {
4148
+ "description": "Currently selected model value (reflected, two-way with inner\n`<select-ui slot=\"model\">`). Empty when no model picker is shown.\n",
4149
+ "type": "string",
4150
+ "default": ""
4151
+ },
4152
+ "models": {
4153
+ "description": "JSON array of model options for the inner model picker —\n[{value, label}] or [{label, options: [...]}] groups. Empty array\nhides the model picker.\n",
4154
+ "type": "array",
4155
+ "default": []
4156
+ },
4157
+ "placeholder": {
4158
+ "description": "Textarea placeholder. Defaults to \"Type a message...\".",
4159
+ "type": "string",
4160
+ "default": "Type a message..."
4161
+ }
4162
+ },
4163
+ "required": [
4164
+ "component"
4165
+ ],
4166
+ "unevaluatedProperties": false,
4167
+ "x-adiaui": {
4168
+ "anti_patterns": [
4169
+ {
4170
+ "description": "Adding a separate Button(primary) sibling next to ChatInput for \"send\". The component stamps its own send button (paper-plane-right icon). Two send buttons render side-by-side, confusing users."
4171
+ },
4172
+ {
4173
+ "description": "Stamping a Select next to ChatInput for model picker. The component has a built-in model picker driven by the `models` prop. Set `models=[{value, label}, ...]` instead of stamping a separate Select."
4174
+ },
4175
+ {
4176
+ "description": "Wrapping ChatInput inside <field-ui label=\"...\"> for label association. ChatInput is a composite container, not a form field. For a labeled composer surface, use <chat-composer> + slot label markup."
4177
+ }
4178
+ ],
4179
+ "category": "agent",
4180
+ "composes": [],
4181
+ "events": {
4182
+ "submit": {
4183
+ "description": "Fires when the user presses Enter (without Shift) in the textarea OR clicks the built-in send button. The composer suppresses submission while `[loading]` is set.",
4184
+ "detail": {
4185
+ "model": {
4186
+ "description": "Currently selected model value (empty if no model picker).",
4187
+ "type": "string"
4188
+ },
4189
+ "text": {
4190
+ "description": "Submitted message text from the inner textarea.",
4191
+ "type": "string"
4192
+ }
4193
+ }
4194
+ }
4195
+ },
4196
+ "examples": [
4197
+ {
4198
+ "description": "Minimal chat input — placeholder, no model picker. Sits inside a chat shell footer.",
4199
+ "a2ui": "[\n {\"id\": \"root\", \"component\": \"ChatInput\", \"placeholder\": \"Ask me anything...\"}\n]",
4200
+ "name": "basic-chat-input"
4201
+ },
4202
+ {
4203
+ "description": "Chat input with model selection. The `models` prop drives the built-in model picker — DO NOT add a separate Select sibling.",
4204
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"ChatInput\",\n \"placeholder\": \"Type a message...\",\n \"model\": \"claude-opus-4-7\",\n \"models\": [\n {\"value\": \"claude-opus-4-7\", \"label\": \"Claude Opus 4.7\"},\n {\"value\": \"claude-haiku-4-5\", \"label\": \"Claude Haiku 4.5\"},\n {\"value\": \"claude-sonnet-4-5\", \"label\": \"Claude Sonnet 4.5\"}\n ]\n }\n]",
4205
+ "name": "chat-input-with-models"
4206
+ },
4207
+ {
4208
+ "description": "Streaming response state. `[loading]` reflects on the host; send button disables; textarea stays editable so the user can draft a follow-up while the LLM is responding.",
4209
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"ChatInput\",\n \"placeholder\": \"Drafting follow-up while streaming...\",\n \"loading\": true\n }\n]",
4210
+ "name": "chat-input-loading-state"
4211
+ },
4212
+ {
4213
+ "description": "Full chat shell — header + thread + ChatInput in the footer. Note: ChatInput is the sole footer child; no separate send button.",
4214
+ "a2ui": "[\n {\"id\": \"root\", \"component\": \"ChatShell\", \"children\": [\"header\", \"thread\", \"input\"]},\n {\"id\": \"header\", \"component\": \"ChatHeader\", \"title\": \"Chat\"},\n {\"id\": \"thread\", \"component\": \"ChatThread\"},\n {\"id\": \"input\", \"component\": \"ChatInput\", \"placeholder\": \"Send a message...\"}\n]",
4215
+ "name": "chat-shell-with-chat-input"
4216
+ }
4217
+ ],
4218
+ "keywords": [
4219
+ "chat-input",
4220
+ "chat",
4221
+ "message-input",
4222
+ "composer",
4223
+ "send-message",
4224
+ "conversation",
4225
+ "prompt",
4226
+ "submit"
4227
+ ],
4228
+ "name": "UIChatInput",
4229
+ "related": [
4230
+ "ChatShell",
4231
+ "ChatThread",
4232
+ "ChatComposer",
4233
+ "ChatHeader",
4234
+ "TextArea",
4235
+ "Input"
4236
+ ],
4237
+ "slots": {
4238
+ "model": {
4239
+ "description": "Override slot for the model picker. Most authors should NOT override this — set the `models` prop instead."
4240
+ },
4241
+ "send": {
4242
+ "description": "Override slot for the send button only. The default stamped send button has `[icon=\"paper-plane-right\"] [variant=\"primary\"]`. Most authors should NOT override this — the built-in send button IS the send control. Adding a separate Button sibling for \"send\" duplicates this functionality."
4243
+ },
4244
+ "toolbar": {
4245
+ "description": "Override slot for the entire toolbar row (model picker + send button). Most authors should NOT override this — the built-in toolbar handles model selection + send. Use this only when custom toolbar layout is required."
4246
+ }
4247
+ },
4248
+ "states": [
4249
+ {
4250
+ "description": "Default, accepting input. Send button enabled when textarea has content.",
4251
+ "name": "idle"
4252
+ },
4253
+ {
4254
+ "description": "Input fully disabled (typically during initial form setup).",
4255
+ "attribute": "disabled",
4256
+ "name": "disabled"
4257
+ },
4258
+ {
4259
+ "description": "LLM is responding. Send button disabled + submit events suppressed, but textarea stays editable for follow-up drafts.",
4260
+ "attribute": "loading",
4261
+ "name": "loading"
4262
+ }
4263
+ ],
4264
+ "synonyms": {
4265
+ "message-input": [
4266
+ "conversation-input",
4267
+ "prompt-input",
4268
+ "send-bar"
4269
+ ]
4270
+ },
4271
+ "tag": "chat-input-ui",
4272
+ "tokens": {},
4273
+ "traits": [],
4274
+ "version": 1
4275
+ }
4276
+ },
4121
4277
  "ChatShell": {
4122
4278
  "title": "ChatShell",
4123
4279
  "description": "Behavior-only chat orchestrator (LLM-streaming module). Author supplies the\nDOM structure via [data-chat-messages], [data-chat-input], [data-chat-empty],\n[data-chat-status] elements; chat-shell wires message streaming, markdown\nrendering, code-block upgrades, and an LLM integration path via proxy-url\n(or via external submit).\n",
@@ -6785,6 +6941,90 @@
6785
6941
  "version": 1
6786
6942
  }
6787
6943
  },
6944
+ "FeedItem": {
6945
+ "title": "FeedItem",
6946
+ "description": "Atomic feed entry inside a `<feed-ui>` lane. Three dismiss policies are inferred from the prop shape — auto-fade (duration > 0 + no action), sticky-dismissible (duration null/0), action-required (duration null/0 + action; future phase). Posted via `UIFeed.post()` rather than authored directly.",
6947
+ "type": "object",
6948
+ "allOf": [
6949
+ {
6950
+ "$ref": "#/$defs/ComponentCommon"
6951
+ },
6952
+ {
6953
+ "$ref": "#/$defs/CatalogComponentCommon"
6954
+ }
6955
+ ],
6956
+ "properties": {
6957
+ "component": {
6958
+ "const": "FeedItem"
6959
+ },
6960
+ "dismissible": {
6961
+ "description": "Render an x close button (default true for sticky, false for auto-fade)",
6962
+ "type": "boolean",
6963
+ "default": false
6964
+ },
6965
+ "duration": {
6966
+ "description": "Auto-fade timer in ms; null/0 = sticky (requires user input)",
6967
+ "type": "number",
6968
+ "default": 4000
6969
+ },
6970
+ "heading": {
6971
+ "description": "Optional emphasis line above text",
6972
+ "type": "string",
6973
+ "default": ""
6974
+ },
6975
+ "icon": {
6976
+ "description": "Optional leading icon name",
6977
+ "type": "string",
6978
+ "default": ""
6979
+ },
6980
+ "text": {
6981
+ "description": "Body copy",
6982
+ "type": "string",
6983
+ "default": ""
6984
+ },
6985
+ "variant": {
6986
+ "description": "Semantic variant",
6987
+ "type": "string",
6988
+ "enum": [
6989
+ "default",
6990
+ "info",
6991
+ "success",
6992
+ "warning",
6993
+ "danger"
6994
+ ],
6995
+ "default": "default"
6996
+ }
6997
+ },
6998
+ "required": [
6999
+ "component"
7000
+ ],
7001
+ "unevaluatedProperties": false,
7002
+ "x-adiaui": {
7003
+ "anti_patterns": [],
7004
+ "category": "feedback",
7005
+ "composes": [],
7006
+ "events": {
7007
+ "close": {
7008
+ "description": "Fired after the item finishes its exit animation"
7009
+ }
7010
+ },
7011
+ "examples": [],
7012
+ "keywords": [],
7013
+ "name": "UIFeedItem",
7014
+ "related": [],
7015
+ "slots": {
7016
+ "body": {
7017
+ "description": "Default content slot (also accepts the `text` / `heading` props)"
7018
+ }
7019
+ },
7020
+ "states": {},
7021
+ "synonyms": {},
7022
+ "tag": "feed-item-ui",
7023
+ "tokens": {},
7024
+ "traits": [],
7025
+ "version": 1
7026
+ }
7027
+ },
6788
7028
  "Field": {
6789
7029
  "title": "Field",
6790
7030
  "description": "Labeled field wrapper. Composes a <label for=\"…\"> with a form control (input-ui, select-ui, textarea-ui, etc.) placed in the default slot, plus optional [slot=\"trailing\"] and [slot=\"action\"] regions. Auto-mints an id on the slotted control when missing so clicking the label focuses the control — an accessibility upgrade over setting label=\"…\" on the control directly, which has no [for] binding. Two layouts — stacked (default) and inline (the `inline` mode attribute collapses everything to a single row).",
@@ -11,6 +11,11 @@
11
11
  - Multiple <section> siblings are allowed and stack vertically. [bleed] on a section removes its margin for edge-to-edge content (tables, charts); [padding] adds a canvas-scrim background for hero regions.
12
12
  - Footer with a [slot="description"] + [slot="action"] pair triggers justify-content: space-between — useful for a "Last saved …" note on the left and a Save/Cancel button group on the right.
13
13
 
14
+ ## ChatInput
15
+ - ChatInput is a self-contained composer — it stamps its own textarea + model picker + send button. DO NOT add a separate Button sibling for "send" inside the same parent. The user gets two send buttons (one built-in, one redundant).
16
+ - For chat interfaces emit ChatInput as the sole input component inside the chat shell. The submit event fires on Enter or send-button click; `detail` is `{ text, model }`.
17
+ - To customize models, set the `models` prop with an array of {value, label} option objects. Do not stamp a separate Select next to ChatInput for model selection — the built-in model picker handles it.
18
+
14
19
  ## Check
15
20
  - Self-labeling widget — use the [label] attribute directly; do NOT wrap in <field-ui>. The widget renders its own label inline via CSS attr() pattern. Wrapping breaks the consent-row layout (see field-ui anti_patterns).
16
21