@ds-mo/ui 13.14.0 → 13.16.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/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +73 -22
- package/dist/agent.json +300 -69
- package/dist/angular/ds-agent-questionnaire.d.ts +19 -0
- package/dist/angular/ds-agent-questionnaire.js +46 -0
- package/dist/angular/ds-agent-response.d.ts +1 -1
- package/dist/angular/ds-agent-response.js +3 -3
- package/dist/angular/ds-agent-source-list.d.ts +9 -2
- package/dist/angular/ds-agent-source-list.js +7 -3
- package/dist/angular/ds-agent-tool-call.d.ts +9 -2
- package/dist/angular/ds-agent-tool-call.js +9 -5
- package/dist/angular/ds-bar-title.d.ts +1 -1
- package/dist/angular/ds-bar-title.js +3 -3
- package/dist/angular/ds-checkbox.d.ts +1 -1
- package/dist/angular/ds-checkbox.js +3 -3
- package/dist/angular/ds-message-composer.d.ts +1 -1
- package/dist/angular/ds-message-composer.js +3 -3
- package/dist/angular/ds-radio.js +2 -1
- package/dist/angular/ds-shell-page.d.ts +1 -1
- package/dist/angular/ds-shell-page.js +3 -3
- package/dist/angular/ds-table.d.ts +1 -1
- package/dist/angular/ds-table.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.d.ts +24 -0
- package/dist/components/ds-agent-questionnaire.js +2 -0
- package/dist/components/ds-agent-questionnaire.js.map +1 -0
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-response.js.map +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-input.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-radio.js.map +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/index.d.ts +10 -0
- package/dist/components/{p-PQgDzzn9.js → p-00or0yGw.js} +2 -2
- package/dist/components/p-B2SoinWf.js +2 -0
- package/dist/components/p-B2SoinWf.js.map +1 -0
- package/dist/components/{p-C5ecLNZA.js → p-B53Vpuqq.js} +2 -2
- package/dist/components/{p-BULWzaBs.js → p-B69Re7HW.js} +2 -2
- package/dist/components/{p-CeyoHpPn.js → p-B94M62Tx.js} +2 -2
- package/dist/components/p-BAAjiAIF.js +2 -0
- package/dist/components/p-BAAjiAIF.js.map +1 -0
- package/dist/components/p-BMAZWEDa.js +2 -0
- package/dist/components/p-BMAZWEDa.js.map +1 -0
- package/dist/components/p-BMc0DE59.js +2 -0
- package/dist/components/p-BMc0DE59.js.map +1 -0
- package/dist/components/{p-B6z51yBf.js → p-BNkU9dcc.js} +2 -2
- package/dist/components/p-BPbE-Kbl.js +2 -0
- package/dist/components/p-BPbE-Kbl.js.map +1 -0
- package/dist/components/{p-B6linhwY.js → p-BRze4tRe.js} +2 -2
- package/dist/components/p-BtUgncSJ.js +2 -0
- package/dist/components/p-BtUgncSJ.js.map +1 -0
- package/dist/components/p-BxR8omPQ.js +2 -0
- package/dist/components/p-BxR8omPQ.js.map +1 -0
- package/dist/components/p-C891ueIx.js +2 -0
- package/dist/components/p-C891ueIx.js.map +1 -0
- package/dist/components/{p-CY19gMiz.js → p-CJq3n5kA.js} +2 -2
- package/dist/components/p-CKo3OFG1.js +2 -0
- package/dist/components/p-CKo3OFG1.js.map +1 -0
- package/dist/components/p-CMbcRN92.js +2 -0
- package/dist/components/{p-cPh32CFB.js.map → p-CMbcRN92.js.map} +1 -1
- package/dist/components/p-CXduurfd.js.map +1 -1
- package/dist/components/{p-DLwM1RNL.js → p-CdKz-QT2.js} +2 -2
- package/dist/components/p-CdKz-QT2.js.map +1 -0
- package/dist/components/p-CnIvWEVm.js +2 -0
- package/dist/components/{p-BPS17WvI.js.map → p-CnIvWEVm.js.map} +1 -1
- package/dist/components/p-CnUq7E8S.js +2 -0
- package/dist/components/{p-DyDkQ8H9.js.map → p-CnUq7E8S.js.map} +1 -1
- package/dist/components/{p-C9StMCWg.js → p-Cohb8T7G.js} +2 -2
- package/dist/components/p-CqDJRVT8.js +2 -0
- package/dist/components/p-CqDJRVT8.js.map +1 -0
- package/dist/components/p-CsXC1cHI.js +2 -0
- package/dist/components/{p-DYAQVvOu.js.map → p-CsXC1cHI.js.map} +1 -1
- package/dist/components/p-D4j0deyd.js +2 -0
- package/dist/components/{p-DAM4CDXT.js.map → p-D4j0deyd.js.map} +1 -1
- package/dist/components/p-D5sIwLjA.js +2 -0
- package/dist/components/p-D5sIwLjA.js.map +1 -0
- package/dist/components/p-D9CDoQBx.js +2 -0
- package/dist/components/{p-C-aCs6ID.js.map → p-D9CDoQBx.js.map} +1 -1
- package/dist/components/p-D9FdOR_m.js +2 -0
- package/dist/components/{p-BSdAFIcG.js.map → p-D9FdOR_m.js.map} +1 -1
- package/dist/components/p-DStd98dM.js +2 -0
- package/dist/components/{p-Azjx2SsL.js.map → p-DStd98dM.js.map} +1 -1
- package/dist/components/p-Dbobj7DI.js +2 -0
- package/dist/components/p-Dbobj7DI.js.map +1 -0
- package/dist/components/{p-BNiIyZCn.js → p-Dhx_3_tf.js} +2 -2
- package/dist/components/p-Dhx_3_tf.js.map +1 -0
- package/dist/components/p-DrvEhJhO.js +2 -0
- package/dist/components/p-DrvEhJhO.js.map +1 -0
- package/dist/components/p-DyqLVdJp.js +2 -0
- package/dist/components/{p-CCYgBUUS.js.map → p-DyqLVdJp.js.map} +1 -1
- package/dist/components/p-GWUTrIlk.js +2 -0
- package/dist/components/p-GWUTrIlk.js.map +1 -0
- package/dist/components/p-NQOI5gN1.js +2 -0
- package/dist/components/p-NQOI5gN1.js.map +1 -0
- package/dist/components/p-Qf-os3lG.js +2 -0
- package/dist/components/{p-B8HG9OFh.js.map → p-Qf-os3lG.js.map} +1 -1
- package/dist/components/{p-DMJEOAwP.js → p-chA2WA5x.js} +2 -2
- package/dist/components/{p-DwKC_9u2.js → p-dEouiXJ8.js} +2 -2
- package/dist/components/p-m5CSrx_s.js +2 -0
- package/dist/components/{p-B1JB0Zn-.js.map → p-m5CSrx_s.js.map} +1 -1
- package/dist/docs/components.json +964 -11
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +12 -0
- package/dist/lib/utils/index.js +41 -4
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/lib/utils/resolve-css-length-px.d.ts +1 -1
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +273 -0
- package/dist/mcp-data/registry/agent-response.json +32 -11
- package/dist/mcp-data/registry/agent-source-list.json +33 -13
- package/dist/mcp-data/registry/agent-tool-call.json +59 -18
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +2 -2
- package/dist/mcp-data/registry/bar-title.json +39 -4
- package/dist/mcp-data/registry/bar-workflow.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +2 -2
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/card-chart.json +1 -1
- package/dist/mcp-data/registry/card-overview.json +1 -1
- package/dist/mcp-data/registry/card-setting.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +2 -2
- package/dist/mcp-data/registry/chart.json +2 -2
- package/dist/mcp-data/registry/checkbox.json +26 -9
- package/dist/mcp-data/registry/chip.json +2 -2
- package/dist/mcp-data/registry/code-block.json +14 -6
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +1 -1
- package/dist/mcp-data/registry/divider.json +1 -1
- package/dist/mcp-data/registry/empty-state.json +1 -1
- package/dist/mcp-data/registry/field.json +1 -1
- package/dist/mcp-data/registry/icon.json +1 -1
- package/dist/mcp-data/registry/input.json +1 -1
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +2 -2
- package/dist/mcp-data/registry/message-actions.json +1 -1
- package/dist/mcp-data/registry/message-bubble.json +2 -2
- package/dist/mcp-data/registry/message-composer.json +30 -8
- package/dist/mcp-data/registry/message-scroller.json +17 -9
- package/dist/mcp-data/registry/message.json +1 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +1 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +1 -1
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/panel-tools.json +2 -2
- package/dist/mcp-data/registry/radio.json +24 -11
- package/dist/mcp-data/registry/registry.json +303 -69
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select.json +2 -2
- package/dist/mcp-data/registry/shell-app.json +5 -5
- package/dist/mcp-data/registry/shell-page.json +78 -5
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +2 -2
- package/dist/mcp-data/registry/swatch-picker.json +2 -2
- package/dist/mcp-data/registry/switch.json +2 -2
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/table.json +89 -13
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +2 -2
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-chart.json +5 -3
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-agent-questionnaire.d.ts +13 -0
- package/dist/react/ds-agent-questionnaire.js +15 -0
- package/dist/react/ds-agent-source-list.d.ts +7 -2
- package/dist/react/ds-agent-source-list.js +1 -1
- package/dist/react/ds-agent-tool-call.d.ts +7 -2
- package/dist/react/ds-agent-tool-call.js +1 -1
- package/dist/styles/prose.css +21 -4
- package/dist/styles/table.css +161 -10
- package/dist/types/components/AgentQuestionnaire/AgentQuestionnaire.d.ts +49 -0
- package/dist/types/components/AgentQuestionnaire/agent-questionnaire-model.d.ts +13 -0
- package/dist/types/components/AgentResponse/AgentResponse.d.ts +3 -1
- package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +5 -0
- package/dist/types/components/AgentToolCall/AgentToolCall.d.ts +21 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +5 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts +3 -0
- package/dist/types/components/MessageComposer/MessageComposer.d.ts +3 -0
- package/dist/types/components/MessageScroller/MessageScroller.d.ts +21 -1
- package/dist/types/components/Radio/Radio.d.ts +4 -0
- package/dist/types/components/ShellApp/shell-app-types.d.ts +12 -0
- package/dist/types/components/ShellPage/ShellPage.d.ts +9 -0
- package/dist/types/components/Table/Table.d.ts +30 -0
- package/dist/types/components/Table/table-cell-model.d.ts +2 -0
- package/dist/types/components/Table/table-layout-controller.d.ts +6 -0
- package/dist/types/components/Table/table-types.d.ts +3 -0
- package/dist/types/components/Table/table-viewport-fit-controller.d.ts +53 -0
- package/dist/types/components/conversation-types.d.ts +51 -2
- package/dist/types/components.d.ts +249 -2
- package/dist/types/utils/resolve-css-length-px.d.ts +1 -1
- package/package.json +5 -3
- package/dist/components/p-Azjx2SsL.js +0 -2
- package/dist/components/p-B1JB0Zn-.js +0 -2
- package/dist/components/p-B2t8alvH.js +0 -2
- package/dist/components/p-B2t8alvH.js.map +0 -1
- package/dist/components/p-B8HG9OFh.js +0 -2
- package/dist/components/p-BJMRBHKW.js +0 -2
- package/dist/components/p-BJMRBHKW.js.map +0 -1
- package/dist/components/p-BJVzrR_P.js +0 -2
- package/dist/components/p-BJVzrR_P.js.map +0 -1
- package/dist/components/p-BL0JHLJp.js +0 -2
- package/dist/components/p-BL0JHLJp.js.map +0 -1
- package/dist/components/p-BNiIyZCn.js.map +0 -1
- package/dist/components/p-BPS17WvI.js +0 -2
- package/dist/components/p-BSdAFIcG.js +0 -2
- package/dist/components/p-C-aCs6ID.js +0 -2
- package/dist/components/p-CCYgBUUS.js +0 -2
- package/dist/components/p-CE82aQZr.js +0 -2
- package/dist/components/p-CE82aQZr.js.map +0 -1
- package/dist/components/p-COmqMfQo.js +0 -2
- package/dist/components/p-COmqMfQo.js.map +0 -1
- package/dist/components/p-Ch5yT3UA.js +0 -2
- package/dist/components/p-Ch5yT3UA.js.map +0 -1
- package/dist/components/p-CiUciD5Z.js +0 -2
- package/dist/components/p-CiUciD5Z.js.map +0 -1
- package/dist/components/p-D6g070eY.js +0 -2
- package/dist/components/p-D6g070eY.js.map +0 -1
- package/dist/components/p-DAM4CDXT.js +0 -2
- package/dist/components/p-DLwM1RNL.js.map +0 -1
- package/dist/components/p-DYAQVvOu.js +0 -2
- package/dist/components/p-DmblUQ4D.js +0 -2
- package/dist/components/p-DmblUQ4D.js.map +0 -1
- package/dist/components/p-DyDkQ8H9.js +0 -2
- package/dist/components/p-Dz3Ufmr4.js +0 -2
- package/dist/components/p-Dz3Ufmr4.js.map +0 -1
- package/dist/components/p-cPh32CFB.js +0 -2
- package/dist/components/p-fkQhr5s9.js +0 -2
- package/dist/components/p-fkQhr5s9.js.map +0 -1
- package/dist/components/p-oOKTL-yx.js +0 -2
- package/dist/components/p-oOKTL-yx.js.map +0 -1
- /package/dist/components/{p-PQgDzzn9.js.map → p-00or0yGw.js.map} +0 -0
- /package/dist/components/{p-C5ecLNZA.js.map → p-B53Vpuqq.js.map} +0 -0
- /package/dist/components/{p-BULWzaBs.js.map → p-B69Re7HW.js.map} +0 -0
- /package/dist/components/{p-CeyoHpPn.js.map → p-B94M62Tx.js.map} +0 -0
- /package/dist/components/{p-B6z51yBf.js.map → p-BNkU9dcc.js.map} +0 -0
- /package/dist/components/{p-B6linhwY.js.map → p-BRze4tRe.js.map} +0 -0
- /package/dist/components/{p-CY19gMiz.js.map → p-CJq3n5kA.js.map} +0 -0
- /package/dist/components/{p-C9StMCWg.js.map → p-Cohb8T7G.js.map} +0 -0
- /package/dist/components/{p-DMJEOAwP.js.map → p-chA2WA5x.js.map} +0 -0
- /package/dist/components/{p-DwKC_9u2.js.map → p-dEouiXJ8.js.map} +0 -0
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"themeSetup": "Set data-theme=\"dark\" on <html> for dark mode. Light is default.",
|
|
13
13
|
"peerDependencies": {
|
|
14
14
|
"required": [
|
|
15
|
-
"@ds-mo/tokens ^6.
|
|
15
|
+
"@ds-mo/tokens ^6.2.1",
|
|
16
16
|
"@ds-mo/icons ^6.6.0"
|
|
17
17
|
],
|
|
18
18
|
"optional": [],
|
|
@@ -99,10 +99,132 @@
|
|
|
99
99
|
"text"
|
|
100
100
|
]
|
|
101
101
|
},
|
|
102
|
+
{
|
|
103
|
+
"name": "agent-questionnaire",
|
|
104
|
+
"title": "AgentQuestionnaire",
|
|
105
|
+
"description": "Temporary multi-step work surface for provider-neutral agent clarification questions and durable read-only answer records.",
|
|
106
|
+
"type": "registry:ui",
|
|
107
|
+
"meta": {
|
|
108
|
+
"library": "@ds-mo/ui",
|
|
109
|
+
"distribution": "npm",
|
|
110
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/agent-questionnaire",
|
|
111
|
+
"source": "src/wc/components/AgentQuestionnaire/AgentQuestionnaire.tsx",
|
|
112
|
+
"intentStatus": "complete",
|
|
113
|
+
"intent": {
|
|
114
|
+
"audience": "specialized",
|
|
115
|
+
"status": "experimental",
|
|
116
|
+
"summary": "Temporary multi-step work surface for provider-neutral agent clarification questions and durable read-only answer records.",
|
|
117
|
+
"useWhen": [
|
|
118
|
+
"An agent turn pauses for one or more structured single-choice, multiple-choice, or free-text answers."
|
|
119
|
+
],
|
|
120
|
+
"avoidWhen": [
|
|
121
|
+
"The interaction is a conventional application form, a tool authorization policy, or an application-owned approval with consequences beyond collecting answers."
|
|
122
|
+
],
|
|
123
|
+
"commonlyComposedWith": [
|
|
124
|
+
"component:ds-message-scroller",
|
|
125
|
+
"component:ds-message-composer",
|
|
126
|
+
"component:ds-agent-response",
|
|
127
|
+
"component:ds-radio",
|
|
128
|
+
"component:ds-checkbox",
|
|
129
|
+
"component:ds-button-filled",
|
|
130
|
+
"component:ds-button-unfilled"
|
|
131
|
+
],
|
|
132
|
+
"patterns": [
|
|
133
|
+
"pattern:agent-chat"
|
|
134
|
+
],
|
|
135
|
+
"accessibility": [
|
|
136
|
+
"Radio and checkbox primitives own choice semantics, target density, keyboard interaction, and selected or disabled presentation; progress, validation relationships, static answered summaries, and every action remain available without relying on color or visual position.",
|
|
137
|
+
"The component never takes focus when it mounts; the application calls setFocus only when shifting focus is appropriate.",
|
|
138
|
+
"Choice rows use large Radio and Checkbox targets, while every navigation action uses a small Button primitive and Cancel is an icon-only Cross with localized tooltip and accessible name.",
|
|
139
|
+
"Selection primitives preserve focus, selected, invalid, and disabled distinctions in forced colors."
|
|
140
|
+
],
|
|
141
|
+
"states": [
|
|
142
|
+
"The component owns only the current step, validation, and unsaved in-progress draft; the application owns the request, submission, transport, resume operation, persistence, and transcript replacement.",
|
|
143
|
+
"Preparing communicates that questions are being assembled, submitting locks editing without clearing the draft, error retains it with application feedback, and answered is a quiet noninteractive record.",
|
|
144
|
+
"A changed request identifier resets to the first question and seeds a fresh local draft from the supplied answers.",
|
|
145
|
+
"Questionnaire selection primitives are isolated from ancestor forms; only dsAnswer emits the normalized ordered answer collection."
|
|
146
|
+
],
|
|
147
|
+
"responsiveBehavior": [
|
|
148
|
+
"Descriptive choices remain full-row targets, while actions collapse into a single-column layout at narrow widths."
|
|
149
|
+
],
|
|
150
|
+
"references": [
|
|
151
|
+
{
|
|
152
|
+
"label": "Questionnaire state stories",
|
|
153
|
+
"path": "src/wc/components/AgentQuestionnaire/AgentQuestionnaire.stories.ts"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"label": "Agent chat composition",
|
|
157
|
+
"path": "agent/patterns/agent-chat/pattern.agent.json"
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"props": {
|
|
162
|
+
"allowCancel": {
|
|
163
|
+
"type": "boolean",
|
|
164
|
+
"required": false
|
|
165
|
+
},
|
|
166
|
+
"answers": {
|
|
167
|
+
"type": "AgentQuestionAnswer[]",
|
|
168
|
+
"required": false
|
|
169
|
+
},
|
|
170
|
+
"errorMessage": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"required": false
|
|
173
|
+
},
|
|
174
|
+
"labels": {
|
|
175
|
+
"type": "Partial<AgentQuestionnaireLabels>",
|
|
176
|
+
"required": false
|
|
177
|
+
},
|
|
178
|
+
"questions": {
|
|
179
|
+
"type": "AgentQuestion[]",
|
|
180
|
+
"required": true
|
|
181
|
+
},
|
|
182
|
+
"requestId": {
|
|
183
|
+
"type": "string",
|
|
184
|
+
"required": true
|
|
185
|
+
},
|
|
186
|
+
"status": {
|
|
187
|
+
"type": "AgentQuestionnaireStatus",
|
|
188
|
+
"required": false
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"events": [
|
|
192
|
+
{
|
|
193
|
+
"name": "dsAnswer",
|
|
194
|
+
"detail": "AgentQuestionnaireAnswerEventDetail"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"name": "dsCancel",
|
|
198
|
+
"detail": "AgentQuestionnaireCancelEventDetail"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
"slots": [],
|
|
202
|
+
"exports": {
|
|
203
|
+
"customElement": "ds-agent-questionnaire",
|
|
204
|
+
"react": "DsAgentQuestionnaire",
|
|
205
|
+
"angular": "DsAgentQuestionnaire"
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"dependencies": [
|
|
209
|
+
"@ds-mo/ui",
|
|
210
|
+
"@ds-mo/tokens",
|
|
211
|
+
"@ds-mo/icons"
|
|
212
|
+
],
|
|
213
|
+
"registryDependencies": [
|
|
214
|
+
"button-filled",
|
|
215
|
+
"button-unfilled",
|
|
216
|
+
"checkbox",
|
|
217
|
+
"icon",
|
|
218
|
+
"loader",
|
|
219
|
+
"radio",
|
|
220
|
+
"text",
|
|
221
|
+
"tooltip"
|
|
222
|
+
]
|
|
223
|
+
},
|
|
102
224
|
{
|
|
103
225
|
"name": "agent-response",
|
|
104
226
|
"title": "AgentResponse",
|
|
105
|
-
"description": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
|
|
227
|
+
"description": "Ordered renderer for normalized immutable agent response parts or an application-composed response body inside a generic incoming message.",
|
|
106
228
|
"type": "registry:ui",
|
|
107
229
|
"meta": {
|
|
108
230
|
"library": "@ds-mo/ui",
|
|
@@ -113,9 +235,9 @@
|
|
|
113
235
|
"intent": {
|
|
114
236
|
"audience": "specialized",
|
|
115
237
|
"status": "experimental",
|
|
116
|
-
"summary": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
|
|
238
|
+
"summary": "Ordered renderer for normalized immutable agent response parts or an application-composed response body inside a generic incoming message.",
|
|
117
239
|
"useWhen": [
|
|
118
|
-
"An agent response combines Markdown, user-safe activity, display-only tools, attachments,
|
|
240
|
+
"An agent response combines Markdown, user-safe activity, display-only tools, attachments, answered questionnaires, sources, or application-specific content in authored order."
|
|
119
241
|
],
|
|
120
242
|
"avoidWhen": [
|
|
121
243
|
"The component would be expected to own a model, transport, persistence, title generation, approval policy, or private reasoning."
|
|
@@ -126,28 +248,30 @@
|
|
|
126
248
|
"component:ds-markdown",
|
|
127
249
|
"component:ds-agent-activity",
|
|
128
250
|
"component:ds-agent-tool-call",
|
|
129
|
-
"component:ds-agent-source-list"
|
|
251
|
+
"component:ds-agent-source-list",
|
|
252
|
+
"component:ds-agent-questionnaire"
|
|
130
253
|
],
|
|
131
254
|
"patterns": [
|
|
132
255
|
"pattern:agent-chat"
|
|
133
256
|
],
|
|
134
257
|
"accessibility": [
|
|
135
|
-
"Part order matches authored reading order and remains inside generic message semantics.",
|
|
258
|
+
"Part or composed-slot order matches authored reading order and remains inside generic message semantics.",
|
|
136
259
|
"Streaming state supplements rather than replaces meaningful textual status.",
|
|
137
260
|
"Forwarded metadata actions retain Message ordering, keyboard reveal, and touch visibility."
|
|
138
261
|
],
|
|
139
262
|
"states": [
|
|
140
263
|
"The owner replaces immutable part arrays as scripted or live output changes.",
|
|
264
|
+
"Parts mode remains the compatibility default for serializable content; composed mode ignores parts and gives the default slot ownership of the complete ordered response body.",
|
|
141
265
|
"AgentResponse renders directly in Message without borrowing a plain MessageBubble surface.",
|
|
142
|
-
"Markdown parts use the optional safe renderer; prose
|
|
266
|
+
"Markdown parts use the optional safe renderer; the response sets the public prose text measure while code, tables, tools, sources, attachments, and other structured parts retain the full lane.",
|
|
143
267
|
"The application may compose MessageActions for completed-response Copy and controlled feedback while retaining persistent retry or recovery controls in the separate actions slot."
|
|
144
268
|
],
|
|
145
269
|
"responsiveBehavior": [
|
|
146
|
-
"
|
|
270
|
+
"Direct prose blocks use a readable text measure within the available transcript width, while narrow lanes and structured content retain their available width and local overflow constraints."
|
|
147
271
|
],
|
|
148
272
|
"references": [
|
|
149
273
|
{
|
|
150
|
-
"label": "
|
|
274
|
+
"label": "Response modes and representative flow",
|
|
151
275
|
"path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
|
|
152
276
|
},
|
|
153
277
|
{
|
|
@@ -173,6 +297,10 @@
|
|
|
173
297
|
"type": "AgentResponsePart[]",
|
|
174
298
|
"required": false
|
|
175
299
|
},
|
|
300
|
+
"renderMode": {
|
|
301
|
+
"type": "AgentResponseRenderMode",
|
|
302
|
+
"required": false
|
|
303
|
+
},
|
|
176
304
|
"showAuthor": {
|
|
177
305
|
"type": "boolean",
|
|
178
306
|
"required": false
|
|
@@ -200,6 +328,7 @@
|
|
|
200
328
|
],
|
|
201
329
|
"registryDependencies": [
|
|
202
330
|
"agent-activity",
|
|
331
|
+
"agent-questionnaire",
|
|
203
332
|
"agent-source-list",
|
|
204
333
|
"agent-tool-call",
|
|
205
334
|
"attachment-list",
|
|
@@ -210,7 +339,7 @@
|
|
|
210
339
|
{
|
|
211
340
|
"name": "agent-source-list",
|
|
212
341
|
"title": "AgentSourceList",
|
|
213
|
-
"description": "
|
|
342
|
+
"description": "Inline collapsible agent-source list with safe external links, derived hostnames, optional descriptions, and observable disclosure state.",
|
|
214
343
|
"type": "registry:ui",
|
|
215
344
|
"meta": {
|
|
216
345
|
"library": "@ds-mo/ui",
|
|
@@ -221,12 +350,12 @@
|
|
|
221
350
|
"intent": {
|
|
222
351
|
"audience": "specialized",
|
|
223
352
|
"status": "experimental",
|
|
224
|
-
"summary": "
|
|
353
|
+
"summary": "Inline collapsible agent-source list with safe external links, derived hostnames, optional descriptions, and observable disclosure state.",
|
|
225
354
|
"useWhen": [
|
|
226
|
-
"
|
|
355
|
+
"A stable agent response cites external material readers may inspect inline."
|
|
227
356
|
],
|
|
228
357
|
"avoidWhen": [
|
|
229
|
-
"The links are ordinary body links
|
|
358
|
+
"The links are ordinary body links, source discovery is still active, or the application expects a source drawer or deduplication behavior."
|
|
230
359
|
],
|
|
231
360
|
"commonlyComposedWith": [
|
|
232
361
|
"component:ds-agent-response",
|
|
@@ -236,16 +365,20 @@
|
|
|
236
365
|
"pattern:agent-chat"
|
|
237
366
|
],
|
|
238
367
|
"accessibility": [
|
|
239
|
-
"Each source uses descriptive linked text
|
|
240
|
-
"
|
|
368
|
+
"Each interactive source uses descriptive linked text, a visible hostname, supporting context, and an external-link indication.",
|
|
369
|
+
"Malformed and unsafe schemes remain non-interactive text rather than producing executable links.",
|
|
370
|
+
"The native disclosure exposes keyboard and expanded-state semantics, while open-change events let applications observe participant intent."
|
|
371
|
+
],
|
|
372
|
+
"states": [
|
|
373
|
+
"Applications collect and deduplicate sources, then append the stable list once; active discovery remains an activity or tool state."
|
|
241
374
|
],
|
|
242
375
|
"responsiveBehavior": [
|
|
243
|
-
"Source titles and descriptions wrap within the response width."
|
|
376
|
+
"Source titles, hostnames, and descriptions wrap within the response width."
|
|
244
377
|
],
|
|
245
378
|
"references": [
|
|
246
379
|
{
|
|
247
|
-
"label": "
|
|
248
|
-
"path": "src/wc/components/
|
|
380
|
+
"label": "Source safety and disclosure stories",
|
|
381
|
+
"path": "src/wc/components/AgentSourceList/AgentSourceList.stories.ts"
|
|
249
382
|
}
|
|
250
383
|
]
|
|
251
384
|
},
|
|
@@ -263,7 +396,12 @@
|
|
|
263
396
|
"required": false
|
|
264
397
|
}
|
|
265
398
|
},
|
|
266
|
-
"events": [
|
|
399
|
+
"events": [
|
|
400
|
+
{
|
|
401
|
+
"name": "dsOpenChange",
|
|
402
|
+
"detail": "{ open: boolean }"
|
|
403
|
+
}
|
|
404
|
+
],
|
|
267
405
|
"slots": [],
|
|
268
406
|
"exports": {
|
|
269
407
|
"customElement": "ds-agent-source-list",
|
|
@@ -284,7 +422,7 @@
|
|
|
284
422
|
{
|
|
285
423
|
"name": "agent-tool-call",
|
|
286
424
|
"title": "AgentToolCall",
|
|
287
|
-
"description": "
|
|
425
|
+
"description": "Compact display-only status row for a provider-neutral agent tool lifecycle with optional custom result and diagnostic disclosure surfaces.",
|
|
288
426
|
"type": "registry:ui",
|
|
289
427
|
"meta": {
|
|
290
428
|
"library": "@ds-mo/ui",
|
|
@@ -295,34 +433,45 @@
|
|
|
295
433
|
"intent": {
|
|
296
434
|
"audience": "specialized",
|
|
297
435
|
"status": "experimental",
|
|
298
|
-
"summary": "
|
|
436
|
+
"summary": "Compact display-only status row for a provider-neutral agent tool lifecycle with optional custom result and diagnostic disclosure surfaces.",
|
|
299
437
|
"useWhen": [
|
|
300
|
-
"
|
|
438
|
+
"An agent product needs to expose user-safe tool preparation, queueing, execution, participant wait, completion, failure, denial, or cancellation state."
|
|
301
439
|
],
|
|
302
440
|
"avoidWhen": [
|
|
303
|
-
"A participant must approve, deny, edit, or
|
|
441
|
+
"A participant must approve, deny, edit, retry, or execute the tool call; those product controls and consequences remain outside this component."
|
|
304
442
|
],
|
|
305
443
|
"commonlyComposedWith": [
|
|
306
444
|
"component:ds-agent-response",
|
|
307
|
-
"component:ds-code-block"
|
|
445
|
+
"component:ds-code-block",
|
|
446
|
+
"component:ds-text"
|
|
308
447
|
],
|
|
309
448
|
"patterns": [
|
|
310
449
|
"pattern:agent-chat"
|
|
311
450
|
],
|
|
312
451
|
"accessibility": [
|
|
313
|
-
"
|
|
314
|
-
"
|
|
452
|
+
"Every lifecycle state remains visible as text and error or denied meaning does not depend on color.",
|
|
453
|
+
"A disclosure is rendered only when details exist and uses native keyboard and expanded-state semantics.",
|
|
454
|
+
"Structured input, output, and error details use the semantic code-family fallback and optional ligature override."
|
|
315
455
|
],
|
|
316
456
|
"states": [
|
|
317
|
-
"
|
|
457
|
+
"Applications normalize provider-specific tool states and may localize the visible status label before rendering.",
|
|
458
|
+
"A custom summary replaces the generated name, a custom result owns the primary result surface, and custom details replace generic input, output, and error diagnostics.",
|
|
459
|
+
"An ordinary text-only custom result inherits the body-medium interface-text baseline; structured result components retain ownership of their own layout and typography.",
|
|
460
|
+
"Compose semantic links around ds-text when a custom result is navigational so anchor semantics and design-system typography each have one owner.",
|
|
461
|
+
"Applications load font assets once at their root; tool details and results never fetch or package a font.",
|
|
462
|
+
"This component presents state but never executes a tool or owns approval, retry, authorization, transport, or consequence policy."
|
|
318
463
|
],
|
|
319
464
|
"responsiveBehavior": [
|
|
320
|
-
"
|
|
465
|
+
"Long names and state labels wrap inside the compact row while custom results and structured diagnostics remain within the transcript lane without widening it."
|
|
321
466
|
],
|
|
322
467
|
"references": [
|
|
323
468
|
{
|
|
324
|
-
"label": "
|
|
325
|
-
"path": "src/wc/components/
|
|
469
|
+
"label": "Lifecycle and slot stories",
|
|
470
|
+
"path": "src/wc/components/AgentToolCall/AgentToolCall.stories.ts"
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"label": "Font ownership and loading",
|
|
474
|
+
"path": "docs/font-ownership.md"
|
|
326
475
|
}
|
|
327
476
|
]
|
|
328
477
|
},
|
|
@@ -354,9 +503,18 @@
|
|
|
354
503
|
"state": {
|
|
355
504
|
"type": "AgentToolState",
|
|
356
505
|
"required": false
|
|
506
|
+
},
|
|
507
|
+
"statusLabel": {
|
|
508
|
+
"type": "string",
|
|
509
|
+
"required": false
|
|
357
510
|
}
|
|
358
511
|
},
|
|
359
|
-
"events": [
|
|
512
|
+
"events": [
|
|
513
|
+
{
|
|
514
|
+
"name": "dsOpenChange",
|
|
515
|
+
"detail": "{ open: boolean }"
|
|
516
|
+
}
|
|
517
|
+
],
|
|
360
518
|
"slots": [],
|
|
361
519
|
"exports": {
|
|
362
520
|
"customElement": "ds-agent-tool-call",
|
|
@@ -1039,7 +1197,8 @@
|
|
|
1039
1197
|
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
1040
1198
|
"The overflow trigger uses its bordered treatment whenever the primary action is visible beside it; overflow-only and auto-collapsed-primary presentations keep the trigger borderless.",
|
|
1041
1199
|
"expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
1042
|
-
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts."
|
|
1200
|
+
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts.",
|
|
1201
|
+
"showDivider=false removes the bottom divider when the surrounding page composition supplies the boundary; showCompactDivider can independently restore or remove that boundary in compact and constrained variants."
|
|
1043
1202
|
],
|
|
1044
1203
|
"responsiveBehavior": [
|
|
1045
1204
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
@@ -1126,6 +1285,14 @@
|
|
|
1126
1285
|
"type": "boolean",
|
|
1127
1286
|
"required": false
|
|
1128
1287
|
},
|
|
1288
|
+
"showCompactDivider": {
|
|
1289
|
+
"type": "boolean",
|
|
1290
|
+
"required": false
|
|
1291
|
+
},
|
|
1292
|
+
"showDivider": {
|
|
1293
|
+
"type": "boolean",
|
|
1294
|
+
"required": false
|
|
1295
|
+
},
|
|
1129
1296
|
"value": {
|
|
1130
1297
|
"type": "string",
|
|
1131
1298
|
"required": false
|
|
@@ -2589,7 +2756,7 @@
|
|
|
2589
2756
|
{
|
|
2590
2757
|
"name": "checkbox",
|
|
2591
2758
|
"title": "Checkbox",
|
|
2592
|
-
"description": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
|
|
2759
|
+
"description": "Form-associated checkbox for independent choices, acknowledgment, or consent, with optional supporting description, checked, unchecked, mixed, and four density states.",
|
|
2593
2760
|
"type": "registry:ui",
|
|
2594
2761
|
"meta": {
|
|
2595
2762
|
"library": "@ds-mo/ui",
|
|
@@ -2600,7 +2767,7 @@
|
|
|
2600
2767
|
"intent": {
|
|
2601
2768
|
"audience": "general",
|
|
2602
2769
|
"status": "stable",
|
|
2603
|
-
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
|
|
2770
|
+
"summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with optional supporting description, checked, unchecked, mixed, and four density states.",
|
|
2604
2771
|
"useWhen": [
|
|
2605
2772
|
"A user may independently select zero or more choices.",
|
|
2606
2773
|
"A form requires acknowledgment, consent, or an opt-in value before submission.",
|
|
@@ -2634,7 +2801,7 @@
|
|
|
2634
2801
|
"component:ds-text"
|
|
2635
2802
|
],
|
|
2636
2803
|
"accessibility": [
|
|
2637
|
-
"Every interactive checkbox requires a visible label that provides its accessible name.",
|
|
2804
|
+
"Every interactive checkbox requires a visible label that provides its accessible name; an optional visible description is associated as supporting context.",
|
|
2638
2805
|
"Enter and Space activate the checkbox; checked and mixed state are exposed through aria-checked.",
|
|
2639
2806
|
"Disabled and inactive checkboxes leave the tab order and are omitted from form submission.",
|
|
2640
2807
|
"Use presentation mode only inside a composite option that owns selection semantics, focus, and interaction."
|
|
@@ -2644,16 +2811,17 @@
|
|
|
2644
2811
|
"Activating an indeterminate checkbox clears the mixed state, toggles checked, and emits dsChange with the resulting boolean.",
|
|
2645
2812
|
"The initial checked and indeterminate values are restored by native form reset; checked values submit under name and unchecked values submit nothing.",
|
|
2646
2813
|
"Sizes are lg with a 20px box in a 24px placement, md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
|
|
2647
|
-
"Presentation mode removes checkbox semantics, focus, interaction, label rendering, and form submission while preserving the visual state."
|
|
2814
|
+
"Presentation mode removes checkbox semantics, focus, interaction, label rendering, description rendering, and form submission while preserving the visual state.",
|
|
2815
|
+
"Description-rich checkboxes grow beyond the fixed density height while retaining its minimum target size and primitive-owned selection anatomy."
|
|
2648
2816
|
],
|
|
2649
2817
|
"responsiveBehavior": [
|
|
2650
|
-
"Choose size from the density of the containing row; labels may wrap while the placement box stays fixed.",
|
|
2818
|
+
"Choose size from the density of the containing row; labels and descriptions may wrap while the placement box stays fixed.",
|
|
2651
2819
|
"Use the same density as the shared option icon zone in multi-select rows."
|
|
2652
2820
|
],
|
|
2653
2821
|
"frameworkCaveats": {
|
|
2654
2822
|
"customElements": [
|
|
2655
2823
|
"Bind checked and indeterminate as properties for application state updates and listen for dsChange.",
|
|
2656
|
-
"Use the form attribute on the host when associating a checkbox rendered outside its owning form."
|
|
2824
|
+
"Use the form attribute on the host when associating a checkbox rendered outside its owning form or isolating it from an ancestor form."
|
|
2657
2825
|
],
|
|
2658
2826
|
"react": [
|
|
2659
2827
|
"Use DsCheckbox and handle onDsChange; checked and indeterminate are mutable and update after user activation."
|
|
@@ -2678,6 +2846,10 @@
|
|
|
2678
2846
|
"type": "boolean",
|
|
2679
2847
|
"required": false
|
|
2680
2848
|
},
|
|
2849
|
+
"description": {
|
|
2850
|
+
"type": "string",
|
|
2851
|
+
"required": false
|
|
2852
|
+
},
|
|
2681
2853
|
"disabled": {
|
|
2682
2854
|
"type": "boolean",
|
|
2683
2855
|
"required": false
|
|
@@ -2878,7 +3050,7 @@
|
|
|
2878
3050
|
{
|
|
2879
3051
|
"name": "code-block",
|
|
2880
3052
|
"title": "CodeBlock",
|
|
2881
|
-
"description": "Scrollable
|
|
3053
|
+
"description": "Scrollable code surface with optional language or filename context and copy action.",
|
|
2882
3054
|
"type": "registry:ui",
|
|
2883
3055
|
"meta": {
|
|
2884
3056
|
"library": "@ds-mo/ui",
|
|
@@ -2889,7 +3061,7 @@
|
|
|
2889
3061
|
"intent": {
|
|
2890
3062
|
"audience": "general",
|
|
2891
3063
|
"status": "experimental",
|
|
2892
|
-
"summary": "Scrollable
|
|
3064
|
+
"summary": "Scrollable code surface with optional language or filename context and copy action.",
|
|
2893
3065
|
"useWhen": [
|
|
2894
3066
|
"A message or document displays fenced code that readers may copy."
|
|
2895
3067
|
],
|
|
@@ -2902,7 +3074,11 @@
|
|
|
2902
3074
|
],
|
|
2903
3075
|
"accessibility": [
|
|
2904
3076
|
"The copy action has matching accessible-name and visible-tooltip status wording, and the code remains selectable text.",
|
|
2905
|
-
"Language and filename labels supplement rather than replace the code content."
|
|
3077
|
+
"Language and filename labels supplement rather than replace the code content.",
|
|
3078
|
+
"The semantic code-family token retains a system-monospace fallback when an application does not load Fira Code; applications may disable programming ligatures through the shared code-surface custom property."
|
|
3079
|
+
],
|
|
3080
|
+
"states": [
|
|
3081
|
+
"Applications load font assets once at their root. The component consumes --typography-font-family-code and never fetches or packages a font."
|
|
2906
3082
|
],
|
|
2907
3083
|
"responsiveBehavior": [
|
|
2908
3084
|
"Long lines scroll horizontally and do not widen the owning transcript."
|
|
@@ -2910,7 +3086,11 @@
|
|
|
2910
3086
|
"references": [
|
|
2911
3087
|
{
|
|
2912
3088
|
"label": "Storybook examples",
|
|
2913
|
-
"path": "src/wc/components/
|
|
3089
|
+
"path": "src/wc/components/CodeBlock/CodeBlock.stories.ts"
|
|
3090
|
+
},
|
|
3091
|
+
{
|
|
3092
|
+
"label": "Font ownership and loading",
|
|
3093
|
+
"path": "docs/font-ownership.md"
|
|
2914
3094
|
}
|
|
2915
3095
|
]
|
|
2916
3096
|
},
|
|
@@ -4548,7 +4728,7 @@
|
|
|
4548
4728
|
{
|
|
4549
4729
|
"name": "message-composer",
|
|
4550
4730
|
"title": "MessageComposer",
|
|
4551
|
-
"description": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible
|
|
4731
|
+
"description": "Two-line auto-growing conversation textarea with submit, stop, an attached submission-error support surface, and extensible tool, action, and error-recovery regions.",
|
|
4552
4732
|
"type": "registry:ui",
|
|
4553
4733
|
"meta": {
|
|
4554
4734
|
"library": "@ds-mo/ui",
|
|
@@ -4559,7 +4739,7 @@
|
|
|
4559
4739
|
"intent": {
|
|
4560
4740
|
"audience": "general",
|
|
4561
4741
|
"status": "experimental",
|
|
4562
|
-
"summary": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible
|
|
4742
|
+
"summary": "Two-line auto-growing conversation textarea with submit, stop, an attached submission-error support surface, and extensible tool, action, and error-recovery regions.",
|
|
4563
4743
|
"useWhen": [
|
|
4564
4744
|
"A conversation accepts multi-line text and needs Enter-to-submit with a streaming stop action."
|
|
4565
4745
|
],
|
|
@@ -4577,14 +4757,17 @@
|
|
|
4577
4757
|
"accessibility": [
|
|
4578
4758
|
"Always provide a localized textarea label and submit or stop action names; the built-in icon action exposes the same name in its tooltip.",
|
|
4579
4759
|
"Shift plus Enter inserts a newline while Enter submits non-empty content.",
|
|
4580
|
-
"
|
|
4760
|
+
"Submission errors remain visible and announced above the editable box as part of one attached composer unit, and the editable control references their text while the error state is active.",
|
|
4761
|
+
"Streaming and error states remain perceivable without relying on icon shape or color alone."
|
|
4581
4762
|
],
|
|
4582
4763
|
"states": [
|
|
4583
4764
|
"The owner controls draft value and transport state; the composer emits intent without performing transport.",
|
|
4765
|
+
"Error status never clears or disables the draft; the application supplies recovery actions through error-actions and owns retry semantics. The negative support surface appears above and attached to the composer box, within the component's measured ownership.",
|
|
4584
4766
|
"Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius, and the application supplies tooltips for slotted icon actions.",
|
|
4585
4767
|
"The composer surface uses the 10px --dimension-radius-125 token.",
|
|
4586
4768
|
"Mouse or keyboard focus on the textarea gives the complete composer surface the same bold-brand inset stroke width and color as an active Input; the native textarea never draws a separate outline.",
|
|
4587
|
-
"The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled."
|
|
4769
|
+
"The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled.",
|
|
4770
|
+
"The attached error unit keeps a real boundary in forced colors and lets message text and application-owned recovery actions wrap at narrow widths."
|
|
4588
4771
|
],
|
|
4589
4772
|
"responsiveBehavior": [
|
|
4590
4773
|
"The textarea begins at two body-medium lines, grows one line at a time through six lines, and then scrolls internally."
|
|
@@ -4601,6 +4784,10 @@
|
|
|
4601
4784
|
]
|
|
4602
4785
|
},
|
|
4603
4786
|
"props": {
|
|
4787
|
+
"errorMessage": {
|
|
4788
|
+
"type": "string",
|
|
4789
|
+
"required": false
|
|
4790
|
+
},
|
|
4604
4791
|
"isInactive": {
|
|
4605
4792
|
"type": "boolean",
|
|
4606
4793
|
"required": false
|
|
@@ -4649,18 +4836,21 @@
|
|
|
4649
4836
|
},
|
|
4650
4837
|
"dependencies": [
|
|
4651
4838
|
"@ds-mo/ui",
|
|
4652
|
-
"@ds-mo/tokens"
|
|
4839
|
+
"@ds-mo/tokens",
|
|
4840
|
+
"@ds-mo/icons"
|
|
4653
4841
|
],
|
|
4654
4842
|
"registryDependencies": [
|
|
4655
4843
|
"button-filled",
|
|
4656
4844
|
"button-unfilled",
|
|
4845
|
+
"icon",
|
|
4846
|
+
"text",
|
|
4657
4847
|
"tooltip"
|
|
4658
4848
|
]
|
|
4659
4849
|
},
|
|
4660
4850
|
{
|
|
4661
4851
|
"name": "message-scroller",
|
|
4662
4852
|
"title": "MessageScroller",
|
|
4663
|
-
"description": "Focusable transcript scroller
|
|
4853
|
+
"description": "Focusable transcript scroller with turn anchoring, reader-controlled live-edge following, and a measured interaction-plus-composer overlay stack.",
|
|
4664
4854
|
"type": "registry:ui",
|
|
4665
4855
|
"meta": {
|
|
4666
4856
|
"library": "@ds-mo/ui",
|
|
@@ -4671,7 +4861,7 @@
|
|
|
4671
4861
|
"intent": {
|
|
4672
4862
|
"audience": "general",
|
|
4673
4863
|
"status": "experimental",
|
|
4674
|
-
"summary": "Focusable transcript scroller
|
|
4864
|
+
"summary": "Focusable transcript scroller with turn anchoring, reader-controlled live-edge following, and a measured interaction-plus-composer overlay stack.",
|
|
4675
4865
|
"useWhen": [
|
|
4676
4866
|
"Messages can append or stream and transcript position must remain respectful of reader intent."
|
|
4677
4867
|
],
|
|
@@ -4680,10 +4870,12 @@
|
|
|
4680
4870
|
],
|
|
4681
4871
|
"commonlyComposedWith": [
|
|
4682
4872
|
"component:ds-message",
|
|
4683
|
-
"component:ds-message-composer"
|
|
4873
|
+
"component:ds-message-composer",
|
|
4874
|
+
"component:ds-agent-questionnaire"
|
|
4684
4875
|
],
|
|
4685
4876
|
"patterns": [
|
|
4686
|
-
"pattern:conversation"
|
|
4877
|
+
"pattern:conversation",
|
|
4878
|
+
"pattern:agent-chat"
|
|
4687
4879
|
],
|
|
4688
4880
|
"accessibility": [
|
|
4689
4881
|
"Give each transcript a concise localized label.",
|
|
@@ -4691,11 +4883,12 @@
|
|
|
4691
4883
|
"The scroll-to-latest control remains keyboard accessible when follow behavior is released and exposes its action name in a tooltip."
|
|
4692
4884
|
],
|
|
4693
4885
|
"states": [
|
|
4694
|
-
"
|
|
4886
|
+
"Wheel, touch, keyboard navigation, selection, and transcript interaction release automatic following; Scroll to latest explicitly restores it.",
|
|
4887
|
+
"A newly appended outgoing Message marked scroll-anchor starts a turn near the top with the configurable previous-turn peek; mutations inside existing messages and prepended history do not re-anchor.",
|
|
4695
4888
|
"Opening saved history, message jumps, and prepended history preserve deliberate position.",
|
|
4696
4889
|
"The scroll-to-latest action is absent at the live edge, appears only after the reader moves away, and disappears again after returning to the newest message.",
|
|
4697
4890
|
"Scroll to latest uses the shared md control-elevation wrapper with a pointer-transparent top highlight, preserving its transparent backdrop blur and borderless unfilled action while the press-scale modifier moves the complete elevated surface.",
|
|
4698
|
-
"Place a composer container with 8px padding on every side in
|
|
4891
|
+
"Place a pending human-input surface in interaction and a composer container with 8px padding on every side in overlay; the shared scroll-overlay controller measures them as one stack, tracks every growth step, reserves matching transcript clearance, begins the fade before the stack, and keeps scroll-to-latest above it."
|
|
4699
4892
|
],
|
|
4700
4893
|
"responsiveBehavior": [
|
|
4701
4894
|
"Transcript width is readable while the scroll region fills available height.",
|
|
@@ -6220,7 +6413,7 @@
|
|
|
6220
6413
|
{
|
|
6221
6414
|
"name": "radio",
|
|
6222
6415
|
"title": "Radio",
|
|
6223
|
-
"description": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6416
|
+
"description": "Form-associated one-of-many radio selection set with vertical or horizontal layout, optional per-option descriptions, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6224
6417
|
"type": "registry:ui",
|
|
6225
6418
|
"meta": {
|
|
6226
6419
|
"library": "@ds-mo/ui",
|
|
@@ -6231,7 +6424,7 @@
|
|
|
6231
6424
|
"intent": {
|
|
6232
6425
|
"audience": "general",
|
|
6233
6426
|
"status": "stable",
|
|
6234
|
-
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6427
|
+
"summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, optional per-option descriptions, four densities, per-option inactive state, and roving keyboard focus.",
|
|
6235
6428
|
"useWhen": [
|
|
6236
6429
|
"A user must select exactly one visible option from a small set.",
|
|
6237
6430
|
"All available choices should remain visible for comparison.",
|
|
@@ -6265,19 +6458,20 @@
|
|
|
6265
6458
|
],
|
|
6266
6459
|
"accessibility": [
|
|
6267
6460
|
"The host exposes radiogroup semantics and requires an accessible group name from aria-label or aria-labelledby.",
|
|
6268
|
-
"Each visible option exposes radio semantics, its checked state, its label text, and any inactive state.",
|
|
6461
|
+
"Each visible option exposes radio semantics, its checked state, its label text, optional supporting description, and any inactive state.",
|
|
6269
6462
|
"Arrow keys move and select through active options; Home and End select the first and last active options; Space and Enter select the focused option.",
|
|
6270
|
-
"Roving tabindex keeps one active option in the tab order, preferring the selected option."
|
|
6463
|
+
"Roving tabindex keeps one active option in the tab order, preferring the selected option; setFocus uses that same public focus target."
|
|
6271
6464
|
],
|
|
6272
6465
|
"states": [
|
|
6273
6466
|
"Unchecked circles use a tertiary-foreground inset stroke: 1.5px at lg, 1.25px at md, 1px at sm, and 0.75px at xs.",
|
|
6274
6467
|
"Selected circles remove the border, use a brand fill, and draw a centered on-bold foreground dot sized 10px at lg, 8px at md, 6px at sm, and 4px at xs.",
|
|
6275
6468
|
"Sizes are lg with a 20px circle in a 24px placement, md with a 16px circle in a 20px placement, sm with a 12px circle in a 16px placement, and xs with an 8px circle in a 12px placement.",
|
|
6276
|
-
"The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected."
|
|
6469
|
+
"The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected.",
|
|
6470
|
+
"Description-rich options grow beyond the fixed density height while retaining its minimum target size and primitive-owned selection anatomy."
|
|
6277
6471
|
],
|
|
6278
6472
|
"responsiveBehavior": [
|
|
6279
6473
|
"Choose size from the density of the containing form or settings row.",
|
|
6280
|
-
"Prefer vertical layout when labels may wrap or horizontal space is constrained; horizontal layout is appropriate for short labels in a small set."
|
|
6474
|
+
"Prefer vertical layout when labels or descriptions may wrap or horizontal space is constrained; horizontal layout is appropriate for short labels in a small set."
|
|
6281
6475
|
],
|
|
6282
6476
|
"frameworkCaveats": {
|
|
6283
6477
|
"customElements": [
|
|
@@ -6789,7 +6983,7 @@
|
|
|
6789
6983
|
"Replace navigation and pageChrome together from one completed route state.",
|
|
6790
6984
|
"When pageChrome.showBack marks a detail depth, mobile chrome keeps the page heading as its identity and presents only local subsections; peer route tabs remain in desktop BarNav rather than replacing the detail heading.",
|
|
6791
6985
|
"Managed ShellApp keeps BarNav and ShellPage presentations present and owns page header stickiness and the content scroller.",
|
|
6792
|
-
"Route-owned pageChrome selects ShellPage contentInset and contentSurface
|
|
6986
|
+
"Route-owned pageChrome independently selects ShellPage contentInset, roomy and compact top seams, scroll compaction, expanded and compact header-divider visibility, and contentSurface; ShellApp forwards them without making page-specific layout or surface decisions.",
|
|
6793
6987
|
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
6794
6988
|
],
|
|
6795
6989
|
"responsiveBehavior": [
|
|
@@ -6962,7 +7156,7 @@
|
|
|
6962
7156
|
{
|
|
6963
7157
|
"name": "shell-page",
|
|
6964
7158
|
"title": "ShellPage",
|
|
6965
|
-
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity,
|
|
7159
|
+
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, optional scroll compaction, and independent page-content inset and canvas surface without creating a nested scroll container.",
|
|
6966
7160
|
"type": "registry:ui",
|
|
6967
7161
|
"meta": {
|
|
6968
7162
|
"library": "@ds-mo/ui",
|
|
@@ -6973,7 +7167,7 @@
|
|
|
6973
7167
|
"intent": {
|
|
6974
7168
|
"audience": "general",
|
|
6975
7169
|
"status": "stable",
|
|
6976
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity,
|
|
7170
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, optional scroll compaction, and independent page-content inset and canvas surface without creating a nested scroll container.",
|
|
6977
7171
|
"useWhen": [
|
|
6978
7172
|
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6979
7173
|
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the application shell reports reduced capacity.",
|
|
@@ -7018,6 +7212,9 @@
|
|
|
7018
7212
|
"headerPresentation=auto selects the matching header variant from headerCapacity and scroll position.",
|
|
7019
7213
|
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
7020
7214
|
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
7215
|
+
"contentInsetBlockStart=none removes only the gutter adjacent to the page header while retaining the responsive inline and bottom gutters.",
|
|
7216
|
+
"contentInsetBlockStartSize can provide an exact roomy top seam, while compactContentInsetBlockStartSize independently defines the compact and constrained seam. ShellPage exposes their resolved sticky-header offset through --ds-shell-page-content-block-start-offset for viewport-fitted descendants.",
|
|
7217
|
+
"scrollCompaction=false keeps a roomy header expanded and pinned during page scrolling; capacity changes still select compact or constrained variants.",
|
|
7021
7218
|
"contentSurface=primary keeps the standard page canvas; secondary paints both the inset gutter and the canvas beneath routed content. Desktop and tablet BarTitle chrome matches that canvas in expanded, compact, and constrained presentations; MobileHeader remains primary.",
|
|
7022
7219
|
"contentInset and contentSurface are independent: either surface supports standard responsive gutters or a full-bleed page-owned layout.",
|
|
7023
7220
|
"The header slot accepts one desktop BarTitle or BarWorkflow; mobile-header accepts the corresponding MobileHeader presentation. The default slot owns router output and all page product content."
|
|
@@ -7025,10 +7222,12 @@
|
|
|
7025
7222
|
"responsiveBehavior": [
|
|
7026
7223
|
"The owning application shell resolves viewport and persistent-chrome state into the explicit headerCapacity prop; ShellPage never guesses the cause of reduced width from its own rendered size.",
|
|
7027
7224
|
"Roomy capacity expands at the top and compacts after scroll; compact capacity stays compact; constrained capacity uses the constrained action layout.",
|
|
7225
|
+
"Pages with scrollCompaction=false keep roomy headers expanded while still responding to compact or constrained capacity from tools and breakpoints.",
|
|
7028
7226
|
"A ShellPage-managed BarTitle remains concealed until headerCapacity is available and its rendered variant matches the resolved presentation, preventing a default-variant flash during route activation.",
|
|
7029
7227
|
"responsiveMode=mobile hides and inerts the desktop header, exposes mobile-header, and disables desktop scroll-compaction geometry.",
|
|
7030
7228
|
"Update headerCapacity synchronously with shell layout state so opening tools or crossing application breakpoints cannot briefly render the wrong presentation.",
|
|
7031
7229
|
"The default content inset is balanced on every side: 32px in desktop mode and 16px in tablet and mobile modes.",
|
|
7230
|
+
"contentInsetBlockStart can independently remove the top gutter for table and canvas pages that should meet the sticky header; exact roomy and compact block-start sizes support pages whose seam changes with header capacity.",
|
|
7032
7231
|
"The selected content surface persists unchanged across desktop, tablet, and mobile modes.",
|
|
7033
7232
|
"On a secondary desktop or tablet page, BarTitle matches the page canvas across capacity and scroll-driven variant changes; the separate mobile-header presentation remains primary.",
|
|
7034
7233
|
"The flow-preservation spacer follows contentSurface so compacting a secondary page cannot expose a primary strip before its content.",
|
|
@@ -7067,10 +7266,22 @@
|
|
|
7067
7266
|
]
|
|
7068
7267
|
},
|
|
7069
7268
|
"props": {
|
|
7269
|
+
"compactContentInsetBlockStartSize": {
|
|
7270
|
+
"type": "string",
|
|
7271
|
+
"required": false
|
|
7272
|
+
},
|
|
7070
7273
|
"contentInset": {
|
|
7071
7274
|
"type": "ShellPageContentInset",
|
|
7072
7275
|
"required": false
|
|
7073
7276
|
},
|
|
7277
|
+
"contentInsetBlockStart": {
|
|
7278
|
+
"type": "ShellPageContentInset",
|
|
7279
|
+
"required": false
|
|
7280
|
+
},
|
|
7281
|
+
"contentInsetBlockStartSize": {
|
|
7282
|
+
"type": "string",
|
|
7283
|
+
"required": false
|
|
7284
|
+
},
|
|
7074
7285
|
"contentSurface": {
|
|
7075
7286
|
"type": "ShellPageContentSurface",
|
|
7076
7287
|
"required": false
|
|
@@ -7086,6 +7297,10 @@
|
|
|
7086
7297
|
"responsiveMode": {
|
|
7087
7298
|
"type": "ShellResponsiveMode",
|
|
7088
7299
|
"required": false
|
|
7300
|
+
},
|
|
7301
|
+
"scrollCompaction": {
|
|
7302
|
+
"type": "boolean",
|
|
7303
|
+
"required": false
|
|
7089
7304
|
}
|
|
7090
7305
|
},
|
|
7091
7306
|
"events": [],
|
|
@@ -8085,29 +8300,30 @@
|
|
|
8085
8300
|
"component:ds-icon"
|
|
8086
8301
|
],
|
|
8087
8302
|
"accessibility": [
|
|
8088
|
-
"The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a
|
|
8303
|
+
"The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the horizontal scrollport. It defaults to a presentational caption title that does not duplicate the accessible name; application-owned labeled controls supplied through the named header slot replace that fallback. header-leading and header-trailing place actions in the matching compact-bar zones without transferring ownership of the bar's outer or copy padding to the application. Their slot outlets remain mounted so dynamically shown selection and filtering summaries cannot briefly enter the table's outer flow or move its frame.",
|
|
8089
8304
|
"Sorting controls remain buttons inside column headers. Member-row sort uses aria-sort, while independent group order is described by the grouped header control.",
|
|
8090
8305
|
"Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. When grouping is active with multi-selection, each group section header also exposes a checkbox that selects or clears that group's selectable loaded rows.",
|
|
8091
8306
|
"Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection or action controls.",
|
|
8092
8307
|
"Scrollable table regions become keyboard focusable and named only when overflow exists.",
|
|
8093
8308
|
"Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state.",
|
|
8094
|
-
"An optional result summary footer appears below the table frame when both displayedCount and totalCount are finite, formatting Displaying {displayed} of {total} in text-body-medium secondary."
|
|
8309
|
+
"An optional result summary footer appears below the table frame when both displayedCount and totalCount are finite, formatting Displaying {displayed} of {total} in text-body-medium secondary. The footer slot can replace that copy, while footer-leading and footer-trailing compose actions into the same compact-bar anatomy. Authored footer content can also opt into the 48px footer without controlled counts."
|
|
8095
8310
|
],
|
|
8096
8311
|
"states": [
|
|
8097
|
-
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, displayedCount, totalCount, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs.",
|
|
8098
|
-
"Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls. Group section headers show an emphasized text-body-medium label followed by a rounded sm Tag containing only the numeric count. The Tag uses the group's faint intent surface (neutral when intent is absent) and a small-elevation, button-hugging wrapper; a localized countLabel remains available to assistive technology. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background; the final collapsed section does not duplicate the terminal table edge. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group remains expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it.
|
|
8312
|
+
"Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, displayedCount, totalCount, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header and footer slots are composable table-local bars: the component owns their 48px chrome, 8px outer inset, md copy-container padding, balanced text inset, action zones, and sticky placement while the application owns its controls, labels, filtering behavior, and action handling. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
|
|
8313
|
+
"Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls. Group section headers show an emphasized text-body-medium label followed by a rounded sm Tag containing only the numeric count. The Tag uses the group's faint intent surface (neutral when intent is absent) and a small-elevation, button-hugging wrapper; a localized countLabel remains available to assistive technology. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background; the final collapsed section does not duplicate the terminal table edge. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group remains expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it. With stickyHeader enabled, each section header scrolls with its group, pins directly below the column header when reached, and yields when the next section arrives. It also stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width.",
|
|
8099
8314
|
"An active member sort toggles only between ascending and descending; activating a different sortable label moves sorting to that key. Applications may still clear the controlled sort state explicitly. The grouped column toggles ascending and descending group order without clearing member sort.",
|
|
8100
8315
|
"Compound headers can expose multiple related labels with independent sort keys. Each label owns only its content-width interaction target while the active direction remains in the column's alignment-aware sort lane.",
|
|
8101
|
-
"Initial loading uses row-shaped skeletons that preserve the standard single-line cell padding, row dividers, column dividers, selection lane, and sticky-lane boundaries. Empty
|
|
8316
|
+
"Initial loading uses row-shaped skeletons that preserve the standard single-line cell padding, row dividers, column dividers, selection lane, and sticky-lane boundaries. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states.",
|
|
8102
8317
|
"Lazy loading replaces pagination. The application owns requests, cancellation, cursors, deduplication, appended records, and query identity; loadIdentity resets the component request guard.",
|
|
8103
8318
|
"Rows opt into complete-row activation with interactive and emit dsRowActivate without owning navigation. Selection paints through the shared selected ::before layer; interactive hover and press paint through the shared ::after layer.",
|
|
8104
8319
|
"Row selection owns the single sticky start lane. One explicitly sized application column can own the sticky end lane, or the start lane when selection is absent. Each sticky boundary owns one fixed divider and a row-clipped directional shadow that paints into the adjacent scrolling columns only while more inline content remains beyond that edge.",
|
|
8105
|
-
"Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, icon-only, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Single-track text, selection, tag-only, icon-only, Action, Empty, and Blank cells resolve a 40px base contract while multi-track cells grow downward. Tag cells use the double-inset Tag recipe; the md tag-only recipe is 24px inside 8px padding, while compound tag tracks preserve their peer text alignment. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled inside 8px padding, default to unbordered, and emit row, column, and action identities through dsCellAction. Image cells render a 48px-high 16:9 bordered preview inside 8px outer padding, establishing a 64px row and a 102px column recipe, and fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type and variant hooks keep every cell family independently styleable.",
|
|
8320
|
+
"Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, icon-only, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Standard secondary copy defaults to the secondary foreground and may declare a semantic Text color when the application data carries intent; dual-primary copy keeps both tracks primary unless explicitly colored. Single-track text, selection, tag-only, icon-only, Action, Empty, and Blank cells resolve a 40px base contract while multi-track cells grow downward. Tag cells use the double-inset Tag recipe; the md tag-only recipe is 24px inside 8px padding, while compound tag tracks preserve their peer text alignment. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled inside 8px padding, default to unbordered, and emit row, column, and action identities through dsCellAction. Image cells render a 48px-high 16:9 bordered preview inside 8px outer padding, establishing a 64px row and a 102px column recipe, and fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type and variant hooks keep every cell family independently styleable.",
|
|
8106
8321
|
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling."
|
|
8107
8322
|
],
|
|
8108
8323
|
"responsiveBehavior": [
|
|
8109
8324
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
8110
|
-
"stickyHeader follows the active vertical scroll owner: a maxHeight table keeps its native header inside
|
|
8325
|
+
"stickyHeader follows the active vertical scroll owner: a maxHeight, height, or fitViewport table keeps its native header and group sections inside one bounded table scrollport, while a document-flow table retains a semantic native header and renders a sticky control header whose columns follow the body's native inline scroll timeline. Consumers set --ds-table-sticky-header-offset when page chrome occupies an unbounded document scrollport edge. When the 48px table header bar is visible, it sticks at that external offset and the column header stacks immediately below it.",
|
|
8326
|
+
"fitViewport uses viewportInsetBlockStart and viewportInsetBlockEnd to describe compact surrounding chrome and page gutters relative to the nearest vertical scroll owner. Before the table reaches that compact position, its host reserves the eventual height while the visible composition grows and vertical input remains owned by the outer page. Once settled, the internal table viewport becomes the vertical scroll owner. In both bounded and document-flow modes, native row-group headers remain the semantic source while one table-owned visual sticky lane is clamped to the active row group's ending boundary, so each incoming section pushes the previous section away without duplicate overlap.",
|
|
8111
8327
|
"Without maxHeight the table grows the document and automatic lazy loading observes the browser viewport. Horizontal scrolling chains vertical wheel and trackpad movement to the page instead of trapping it.",
|
|
8112
8328
|
"Explicit column sizes establish the horizontal overflow width; unsized columns share remaining space.",
|
|
8113
8329
|
"Prefer the named xs through xl column sizes, which resolve through TokoMo's table-column width tokens; numeric pixel sizes remain an escape hatch for exceptional application-owned widths.",
|
|
@@ -8188,6 +8404,10 @@
|
|
|
8188
8404
|
"type": "string",
|
|
8189
8405
|
"required": false
|
|
8190
8406
|
},
|
|
8407
|
+
"fitViewport": {
|
|
8408
|
+
"type": "boolean",
|
|
8409
|
+
"required": false
|
|
8410
|
+
},
|
|
8191
8411
|
"grouping": {
|
|
8192
8412
|
"type": "TableGroupingState | null",
|
|
8193
8413
|
"required": false
|
|
@@ -8200,6 +8420,10 @@
|
|
|
8200
8420
|
"type": "boolean",
|
|
8201
8421
|
"required": false
|
|
8202
8422
|
},
|
|
8423
|
+
"height": {
|
|
8424
|
+
"type": "string | number | undefined",
|
|
8425
|
+
"required": false
|
|
8426
|
+
},
|
|
8203
8427
|
"lazyLoading": {
|
|
8204
8428
|
"type": "boolean",
|
|
8205
8429
|
"required": false
|
|
@@ -8283,6 +8507,14 @@
|
|
|
8283
8507
|
"totalCount": {
|
|
8284
8508
|
"type": "number | undefined",
|
|
8285
8509
|
"required": false
|
|
8510
|
+
},
|
|
8511
|
+
"viewportInsetBlockEnd": {
|
|
8512
|
+
"type": "string | number",
|
|
8513
|
+
"required": false
|
|
8514
|
+
},
|
|
8515
|
+
"viewportInsetBlockStart": {
|
|
8516
|
+
"type": "string | number",
|
|
8517
|
+
"required": false
|
|
8286
8518
|
}
|
|
8287
8519
|
},
|
|
8288
8520
|
"events": [
|
|
@@ -9030,6 +9262,8 @@
|
|
|
9030
9262
|
"The owning chart mounts the callout when a local interaction starts and unmounts it when that interaction ends.",
|
|
9031
9263
|
"Coordinate updates track within one mounted interaction session without restarting the show delay.",
|
|
9032
9264
|
"Placement flips horizontally or vertically when the rendered callout approaches a viewport edge.",
|
|
9265
|
+
"The heading and rows use the same medium-density section-heading and control-frame anatomy as menu-style choice content.",
|
|
9266
|
+
"When any grouped row supplies a swatch, every row reserves the shared leading icon zone so mixed-swatch labels and trailing values stay aligned.",
|
|
9033
9267
|
"Placement is chosen as a quadrant rather than computed as coordinates: the component measures its own rendered rect and flips its side and align props, which CSS consumes. It therefore does not use the shared anchored-position utilities, which resolve an anchor element into x and y.",
|
|
9034
9268
|
"This separation is deliberate. The callout follows the pointer instead of an element, so it has no anchor rect to resolve; adopting the shared geometry would mean rewriting its CSS to consume coordinates for no behavioral gain.",
|
|
9035
9269
|
"Reduced motion preserves the final visible state without an opacity transition."
|