@ds-mo/ui 9.0.0 → 9.2.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/README.md +28 -0
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +397 -0
- package/dist/agent.json +2347 -735
- package/dist/angular/ds-agent-activity.d.ts +12 -0
- package/dist/angular/ds-agent-activity.js +38 -0
- package/dist/angular/ds-agent-response.d.ts +12 -0
- package/dist/angular/ds-agent-response.js +38 -0
- package/dist/angular/ds-agent-source-list.d.ts +12 -0
- package/dist/angular/ds-agent-source-list.js +38 -0
- package/dist/angular/ds-agent-tool-call.d.ts +12 -0
- package/dist/angular/ds-agent-tool-call.js +38 -0
- package/dist/angular/ds-attachment-list.d.ts +12 -0
- package/dist/angular/ds-attachment-list.js +38 -0
- package/dist/angular/ds-avatar.d.ts +12 -0
- package/dist/angular/ds-avatar.js +38 -0
- package/dist/angular/ds-code-block.d.ts +12 -0
- package/dist/angular/ds-code-block.js +38 -0
- package/dist/angular/ds-conversation-list-item.d.ts +19 -0
- package/dist/angular/ds-conversation-list-item.js +42 -0
- package/dist/angular/ds-conversation-list-section.d.ts +12 -0
- package/dist/angular/ds-conversation-list-section.js +38 -0
- package/dist/angular/ds-conversation-list.d.ts +12 -0
- package/dist/angular/ds-conversation-list.js +37 -0
- package/dist/angular/ds-markdown.d.ts +12 -0
- package/dist/angular/ds-markdown.js +38 -0
- package/dist/angular/ds-menu.d.ts +6 -1
- package/dist/angular/ds-menu.js +7 -4
- package/dist/angular/ds-message-bubble.d.ts +12 -0
- package/dist/angular/ds-message-bubble.js +38 -0
- package/dist/angular/ds-message-composer.d.ts +23 -0
- package/dist/angular/ds-message-composer.js +49 -0
- package/dist/angular/ds-message-scroller.d.ts +15 -0
- package/dist/angular/ds-message-scroller.js +43 -0
- package/dist/angular/ds-message.d.ts +12 -0
- package/dist/angular/ds-message.js +38 -0
- package/dist/angular/ds-panel-tool-header.d.ts +25 -0
- package/dist/angular/ds-panel-tool-header.js +49 -0
- package/dist/angular/ds-panel-tool-search.d.ts +19 -0
- package/dist/angular/ds-panel-tool-search.js +49 -0
- package/dist/angular/ds-panel-tools.d.ts +30 -1
- package/dist/angular/ds-panel-tools.js +14 -5
- package/dist/angular/ds-swatch-picker.d.ts +15 -0
- package/dist/angular/ds-swatch-picker.js +42 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +18 -0
- package/dist/angular/proxies.d.ts +18 -0
- package/dist/angular/proxies.js +18 -0
- package/dist/components/ds-agent-activity.d.ts +11 -0
- package/dist/components/ds-agent-activity.js +2 -0
- package/dist/components/ds-agent-activity.js.map +1 -0
- package/dist/components/ds-agent-response.d.ts +11 -0
- package/dist/components/ds-agent-response.js +2 -0
- package/dist/components/ds-agent-response.js.map +1 -0
- package/dist/components/ds-agent-source-list.d.ts +11 -0
- package/dist/components/ds-agent-source-list.js +2 -0
- package/dist/components/ds-agent-source-list.js.map +1 -0
- package/dist/components/ds-agent-tool-call.d.ts +11 -0
- package/dist/components/ds-agent-tool-call.js +2 -0
- package/dist/components/ds-agent-tool-call.js.map +1 -0
- package/dist/components/ds-app-shell.js +1 -1
- package/dist/components/ds-app-shell.js.map +1 -1
- package/dist/components/ds-attachment-list.d.ts +11 -0
- package/dist/components/ds-attachment-list.js +2 -0
- package/dist/components/ds-attachment-list.js.map +1 -0
- package/dist/components/ds-avatar.d.ts +11 -0
- package/dist/components/ds-avatar.js +2 -0
- package/dist/components/ds-avatar.js.map +1 -0
- 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-nav.js.map +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-data-viz-donut.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-shell-data-viz.js +1 -1
- package/dist/components/ds-card.js +1 -1
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.d.ts +11 -0
- package/dist/components/ds-code-block.js +2 -0
- package/dist/components/ds-code-block.js.map +1 -0
- package/dist/components/ds-conversation-list-item.d.ts +11 -0
- package/dist/components/ds-conversation-list-item.js +2 -0
- package/dist/components/ds-conversation-list-item.js.map +1 -0
- package/dist/components/ds-conversation-list-section.d.ts +11 -0
- package/dist/components/ds-conversation-list-section.js +2 -0
- package/dist/components/ds-conversation-list-section.js.map +1 -0
- package/dist/components/ds-conversation-list.d.ts +11 -0
- package/dist/components/ds-conversation-list.js +2 -0
- package/dist/components/ds-conversation-list.js.map +1 -0
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-divider.js.map +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-icon.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.d.ts +11 -0
- package/dist/components/ds-markdown.js +2 -0
- package/dist/components/ds-markdown.js.map +1 -0
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-bubble.d.ts +11 -0
- package/dist/components/ds-message-bubble.js +2 -0
- package/dist/components/ds-message-bubble.js.map +1 -0
- package/dist/components/ds-message-composer.d.ts +11 -0
- package/dist/components/ds-message-composer.js +2 -0
- package/dist/components/ds-message-composer.js.map +1 -0
- package/dist/components/ds-message-scroller.d.ts +11 -0
- package/dist/components/ds-message-scroller.js +2 -0
- package/dist/components/ds-message-scroller.js.map +1 -0
- package/dist/components/ds-message.d.ts +11 -0
- package/dist/components/ds-message.js +2 -0
- package/dist/components/ds-message.js.map +1 -0
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.d.ts +11 -0
- package/dist/components/ds-panel-tool-header.js +2 -0
- package/dist/components/ds-panel-tool-header.js.map +1 -0
- package/dist/components/ds-panel-tool-search.d.ts +11 -0
- package/dist/components/ds-panel-tool-search.js +2 -0
- package/dist/components/ds-panel-tool-search.js.map +1 -0
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-panel-tools.js.map +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-picker.js.map +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js.map +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.d.ts +11 -0
- package/dist/components/ds-swatch-picker.js +2 -0
- package/dist/components/ds-swatch-picker.js.map +1 -0
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tab-group.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/index.d.ts +14 -0
- package/dist/components/p--KbMQblZ.js +2 -0
- package/dist/components/p--KbMQblZ.js.map +1 -0
- package/dist/components/p-2br9YDbG.js +2 -0
- package/dist/components/p-2br9YDbG.js.map +1 -0
- package/dist/components/p-41UAx2eq.js +2 -0
- package/dist/components/p-41UAx2eq.js.map +1 -0
- package/dist/components/p-B1pWGQn1.js +2 -0
- package/dist/components/p-B1pWGQn1.js.map +1 -0
- package/dist/components/p-B7NbIYjS.js +2 -0
- package/dist/components/p-B7NbIYjS.js.map +1 -0
- package/dist/components/p-BBu_Svz7.js +2 -0
- package/dist/components/p-BBu_Svz7.js.map +1 -0
- package/dist/components/p-BEQB8EnB.js +2 -0
- package/dist/components/p-BEQB8EnB.js.map +1 -0
- package/dist/components/{p-CZ9wemOA.js → p-BFWC17em.js} +2 -2
- package/dist/components/{p-KRGBGTu5.js → p-BO6C8abO.js} +2 -2
- package/dist/components/{p-CbS_WWs2.js → p-BSOZXagj.js} +2 -2
- package/dist/components/p-BSOZXagj.js.map +1 -0
- package/dist/components/{p-DT2MK8Kt.js → p-BZAEZENv.js} +2 -2
- package/dist/components/p-BhC1YyId.js +2 -0
- package/dist/components/p-BhC1YyId.js.map +1 -0
- package/dist/components/p-BjtXYFhw.js +2 -0
- package/dist/components/p-BjtXYFhw.js.map +1 -0
- package/dist/components/{p-B-zhgAvL.js → p-Bo5wikia.js} +2 -2
- package/dist/components/p-Bx1G7P6W.js +2 -0
- package/dist/components/p-Bx1G7P6W.js.map +1 -0
- package/dist/components/p-C0sq948W.js +2 -0
- package/dist/components/p-C0sq948W.js.map +1 -0
- package/dist/components/p-CC1C8s6m.js +2 -0
- package/dist/components/p-CC1C8s6m.js.map +1 -0
- package/dist/components/p-CKaJx0IX.js +2 -0
- package/dist/components/p-CKaJx0IX.js.map +1 -0
- package/dist/components/{p-DyZj3k9S.js → p-CZMEhdlA.js} +2 -2
- package/dist/components/{p-BbV68F23.js → p-CiwdnKKp.js} +2 -2
- package/dist/components/{p-BLzivrE3.js → p-CnM9SW_8.js} +2 -2
- package/dist/components/{p-C7UFYvsO.js → p-CuKn9I5f.js} +2 -2
- package/dist/components/p-D1HFMTdC.js +2 -0
- package/dist/components/p-D1HFMTdC.js.map +1 -0
- package/dist/components/p-DFMM60My.js +2 -0
- package/dist/components/p-DFMM60My.js.map +1 -0
- package/dist/components/p-DIsDiGcp.js +2 -0
- package/dist/components/p-DIsDiGcp.js.map +1 -0
- package/dist/components/p-DVsje4AY.js +2 -0
- package/dist/components/p-DVsje4AY.js.map +1 -0
- package/dist/components/p-Di-ThR90.js +2 -0
- package/dist/components/p-Di-ThR90.js.map +1 -0
- package/dist/components/{p-C7RObioO.js → p-Di4HBckb.js} +2 -2
- package/dist/components/p-a9nGf1s6.js +2 -0
- package/dist/components/p-a9nGf1s6.js.map +1 -0
- package/dist/components/p-gidVv1FX.js +2 -0
- package/dist/components/p-gidVv1FX.js.map +1 -0
- package/dist/components/p-l6PmnW_P.js +2 -0
- package/dist/components/p-l6PmnW_P.js.map +1 -0
- package/dist/components/p-rEe-3KR_.js +2 -0
- package/dist/components/p-rEe-3KR_.js.map +1 -0
- package/dist/components/p-t9Ei1kHP.js +2 -0
- package/dist/components/p-t9Ei1kHP.js.map +1 -0
- package/dist/docs/components.json +8097 -3924
- package/dist/lib/components/Menu/menu-placement.d.ts +19 -3
- package/dist/lib/shell/index.d.ts +3 -3
- package/dist/lib/shell/index.js +48 -39
- package/dist/lib/shell/index.js.map +3 -3
- package/dist/lib/shell/shell-gradient-presets.d.ts +15 -0
- package/dist/lib/utils/choice-popup-alignment.d.ts +20 -0
- package/dist/lib/utils/index.d.ts +2 -0
- package/dist/lib/utils/index.js +16 -0
- package/dist/lib/utils/index.js.map +3 -3
- package/dist/mcp/cli.js +31409 -0
- package/dist/mcp-data/registry/agent-activity.json +158 -0
- package/dist/mcp-data/registry/agent-response.json +211 -0
- package/dist/mcp-data/registry/agent-source-list.json +153 -0
- package/dist/mcp-data/registry/agent-tool-call.json +213 -0
- package/dist/mcp-data/registry/app-shell.json +210 -0
- package/dist/mcp-data/registry/attachment-list.json +137 -0
- package/dist/mcp-data/registry/avatar.json +136 -0
- package/dist/mcp-data/registry/badge.json +289 -0
- package/dist/mcp-data/registry/banner.json +206 -0
- package/dist/mcp-data/registry/bar-nav.json +341 -0
- package/dist/mcp-data/registry/button-filled.json +386 -0
- package/dist/mcp-data/registry/button-unfilled.json +537 -0
- package/dist/mcp-data/registry/card-data-viz-donut.json +143 -0
- package/dist/mcp-data/registry/card-setting.json +194 -0
- package/dist/mcp-data/registry/card-shell-data-viz.json +173 -0
- package/dist/mcp-data/registry/card.json +126 -0
- package/dist/mcp-data/registry/chart-bar.json +121 -0
- package/dist/mcp-data/registry/chart-donut.json +257 -0
- package/dist/mcp-data/registry/chart-legend.json +209 -0
- package/dist/mcp-data/registry/chart-line.json +153 -0
- package/dist/mcp-data/registry/checkbox.json +361 -0
- package/dist/mcp-data/registry/chip.json +276 -0
- package/dist/mcp-data/registry/code-block.json +150 -0
- package/dist/mcp-data/registry/conversation-list-item.json +265 -0
- package/dist/mcp-data/registry/conversation-list-section.json +139 -0
- package/dist/mcp-data/registry/conversation-list.json +101 -0
- package/dist/mcp-data/registry/divider.json +225 -0
- package/dist/mcp-data/registry/empty-state.json +197 -0
- package/dist/mcp-data/registry/field.json +222 -0
- package/dist/mcp-data/registry/icon.json +242 -0
- package/dist/mcp-data/registry/input.json +597 -0
- package/dist/mcp-data/registry/loader.json +192 -0
- package/dist/mcp-data/registry/markdown.json +141 -0
- package/dist/mcp-data/registry/menu.json +479 -0
- package/dist/mcp-data/registry/message-bubble.json +119 -0
- package/dist/mcp-data/registry/message-composer.json +265 -0
- package/dist/mcp-data/registry/message-scroller.json +217 -0
- package/dist/mcp-data/registry/message.json +255 -0
- package/dist/mcp-data/registry/modal.json +150 -0
- package/dist/mcp-data/registry/panel-nav.json +622 -0
- package/dist/mcp-data/registry/panel-sub-nav.json +249 -0
- package/dist/mcp-data/registry/panel-tool-header.json +342 -0
- package/dist/mcp-data/registry/panel-tool-search.json +387 -0
- package/dist/mcp-data/registry/panel-tools.json +514 -0
- package/dist/mcp-data/registry/radio.json +374 -0
- package/dist/mcp-data/registry/registry.json +6916 -0
- package/dist/mcp-data/registry/select-multi.json +755 -0
- package/dist/mcp-data/registry/select.json +740 -0
- package/dist/mcp-data/registry/shell-gradient-picker.json +195 -0
- package/dist/mcp-data/registry/shell-gradient-swatch.json +215 -0
- package/dist/mcp-data/registry/skeleton.json +282 -0
- package/dist/mcp-data/registry/slider.json +657 -0
- package/dist/mcp-data/registry/swatch-picker.json +231 -0
- package/dist/mcp-data/registry/switch.json +361 -0
- package/dist/mcp-data/registry/tab-group.json +255 -0
- package/dist/mcp-data/registry/tag.json +352 -0
- package/dist/mcp-data/registry/text.json +371 -0
- package/dist/mcp-data/registry/tooltip-data-viz.json +158 -0
- package/dist/mcp-data/registry/tooltip.json +311 -0
- package/dist/react/components.d.ts +18 -0
- package/dist/react/components.js +18 -0
- package/dist/react/ds-agent-activity.d.ts +9 -0
- package/dist/react/ds-agent-activity.js +12 -0
- package/dist/react/ds-agent-response.d.ts +9 -0
- package/dist/react/ds-agent-response.js +12 -0
- package/dist/react/ds-agent-source-list.d.ts +9 -0
- package/dist/react/ds-agent-source-list.js +12 -0
- package/dist/react/ds-agent-tool-call.d.ts +9 -0
- package/dist/react/ds-agent-tool-call.js +12 -0
- package/dist/react/ds-attachment-list.d.ts +9 -0
- package/dist/react/ds-attachment-list.js +12 -0
- package/dist/react/ds-avatar.d.ts +9 -0
- package/dist/react/ds-avatar.js +12 -0
- package/dist/react/ds-code-block.d.ts +9 -0
- package/dist/react/ds-code-block.js +12 -0
- package/dist/react/ds-conversation-list-item.d.ts +14 -0
- package/dist/react/ds-conversation-list-item.js +12 -0
- package/dist/react/ds-conversation-list-section.d.ts +9 -0
- package/dist/react/ds-conversation-list-section.js +12 -0
- package/dist/react/ds-conversation-list.d.ts +9 -0
- package/dist/react/ds-conversation-list.js +12 -0
- package/dist/react/ds-markdown.d.ts +9 -0
- package/dist/react/ds-markdown.js +12 -0
- package/dist/react/ds-menu.d.ts +1 -0
- package/dist/react/ds-menu.js +2 -1
- package/dist/react/ds-message-bubble.d.ts +9 -0
- package/dist/react/ds-message-bubble.js +12 -0
- package/dist/react/ds-message-composer.d.ts +16 -0
- package/dist/react/ds-message-composer.js +16 -0
- package/dist/react/ds-message-scroller.d.ts +12 -0
- package/dist/react/ds-message-scroller.js +12 -0
- package/dist/react/ds-message.d.ts +9 -0
- package/dist/react/ds-message.js +12 -0
- package/dist/react/ds-panel-tool-header.d.ts +17 -0
- package/dist/react/ds-panel-tool-header.js +16 -0
- package/dist/react/ds-panel-tool-search.d.ts +14 -0
- package/dist/react/ds-panel-tool-search.js +16 -0
- package/dist/react/ds-panel-tools.d.ts +10 -0
- package/dist/react/ds-panel-tools.js +3 -0
- package/dist/react/ds-swatch-picker.d.ts +12 -0
- package/dist/react/ds-swatch-picker.js +12 -0
- package/dist/types/components/AgentActivity/AgentActivity.d.ts +14 -0
- package/dist/types/components/AgentResponse/AgentResponse.d.ts +12 -0
- package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +9 -0
- package/dist/types/components/AgentToolCall/AgentToolCall.d.ts +13 -0
- package/dist/types/components/AppShell/AppShell.d.ts +4 -0
- package/dist/types/components/AttachmentList/AttachmentList.d.ts +8 -0
- package/dist/types/components/Avatar/Avatar.d.ts +8 -0
- package/dist/types/components/CodeBlock/CodeBlock.d.ts +11 -0
- package/dist/types/components/ConversationList/ConversationList.d.ts +4 -0
- package/dist/types/components/ConversationListItem/ConversationListItem.d.ts +22 -0
- package/dist/types/components/ConversationListSection/ConversationListSection.d.ts +9 -0
- package/dist/types/components/Markdown/Markdown.d.ts +15 -0
- package/dist/types/components/Menu/Menu.d.ts +10 -1
- package/dist/types/components/Menu/menu-placement.d.ts +19 -3
- package/dist/types/components/Menu/menu-types.d.ts +15 -2
- package/dist/types/components/Message/Message.d.ts +17 -0
- package/dist/types/components/MessageBubble/MessageBubble.d.ts +6 -0
- package/dist/types/components/MessageComposer/MessageComposer.d.ts +29 -0
- package/dist/types/components/MessageScroller/MessageScroller.d.ts +37 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +3 -0
- package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +34 -0
- package/dist/types/components/PanelToolSearch/PanelToolSearch.d.ts +35 -0
- package/dist/types/components/PanelTools/PanelTools.d.ts +40 -1
- package/dist/types/components/PanelTools/panel-tools-types.d.ts +20 -0
- package/dist/types/components/PanelTools/panel-tools-utils.d.ts +2 -0
- package/dist/types/components/ShellGradientPicker/ShellGradientPicker.d.ts +2 -5
- package/dist/types/components/ShellGradientSwatch/ShellGradientSwatch.d.ts +1 -0
- package/dist/types/components/Slider/Slider.d.ts +1 -1
- package/dist/types/components/SwatchPicker/SwatchPicker.d.ts +21 -0
- package/dist/types/components/SwatchPicker/swatch-picker-types.d.ts +26 -0
- package/dist/types/components/conversation-types.d.ts +55 -0
- package/dist/types/components.d.ts +1298 -4
- package/dist/types/shell/index.d.ts +3 -3
- package/dist/types/shell/shell-gradient-presets.d.ts +15 -0
- package/dist/types/utils/choice-list-parts.d.ts +4 -1
- package/dist/types/utils/choice-popup-alignment.d.ts +21 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/package.json +9 -2
- package/dist/components/p-Bafp65bw.js +0 -2
- package/dist/components/p-Bafp65bw.js.map +0 -1
- package/dist/components/p-BdnR3jxi.js +0 -2
- package/dist/components/p-BdnR3jxi.js.map +0 -1
- package/dist/components/p-CXF8yd-g.js +0 -2
- package/dist/components/p-CXF8yd-g.js.map +0 -1
- package/dist/components/p-C_cu-HIT.js +0 -2
- package/dist/components/p-C_cu-HIT.js.map +0 -1
- package/dist/components/p-CbS_WWs2.js.map +0 -1
- package/dist/components/p-D0B9uDTP.js +0 -2
- package/dist/components/p-D0B9uDTP.js.map +0 -1
- package/dist/components/p-DF0yLZG_.js +0 -2
- package/dist/components/p-DF0yLZG_.js.map +0 -1
- package/dist/components/p-VKIsOVza.js +0 -2
- package/dist/components/p-VKIsOVza.js.map +0 -1
- /package/dist/components/{p-CZ9wemOA.js.map → p-BFWC17em.js.map} +0 -0
- /package/dist/components/{p-KRGBGTu5.js.map → p-BO6C8abO.js.map} +0 -0
- /package/dist/components/{p-DT2MK8Kt.js.map → p-BZAEZENv.js.map} +0 -0
- /package/dist/components/{p-B-zhgAvL.js.map → p-Bo5wikia.js.map} +0 -0
- /package/dist/components/{p-DyZj3k9S.js.map → p-CZMEhdlA.js.map} +0 -0
- /package/dist/components/{p-BbV68F23.js.map → p-CiwdnKKp.js.map} +0 -0
- /package/dist/components/{p-BLzivrE3.js.map → p-CnM9SW_8.js.map} +0 -0
- /package/dist/components/{p-C7UFYvsO.js.map → p-CuKn9I5f.js.map} +0 -0
- /package/dist/components/{p-C7RObioO.js.map → p-Di4HBckb.js.map} +0 -0
package/dist/agent.json
CHANGED
|
@@ -1,9 +1,340 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "9.
|
|
4
|
+
"packageVersion": "9.2.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
|
+
{
|
|
8
|
+
"id": "component:ds-agent-activity",
|
|
9
|
+
"tag": "ds-agent-activity",
|
|
10
|
+
"name": "agent-activity",
|
|
11
|
+
"title": "AgentActivity",
|
|
12
|
+
"summary": "Collapsible, user-safe summary of agent work steps without private reasoning.",
|
|
13
|
+
"intentStatus": "complete",
|
|
14
|
+
"intent": {
|
|
15
|
+
"audience": "specialized",
|
|
16
|
+
"status": "experimental",
|
|
17
|
+
"summary": "Collapsible, user-safe summary of agent work steps without private reasoning.",
|
|
18
|
+
"useWhen": [
|
|
19
|
+
"An agent response benefits from concise progress or completion summaries."
|
|
20
|
+
],
|
|
21
|
+
"avoidWhen": [
|
|
22
|
+
"The content would reveal private chain-of-thought, hidden prompts, secrets, or raw internal traces."
|
|
23
|
+
],
|
|
24
|
+
"commonlyComposedWith": [
|
|
25
|
+
"component:ds-agent-response",
|
|
26
|
+
"component:ds-loader"
|
|
27
|
+
],
|
|
28
|
+
"patterns": [
|
|
29
|
+
"pattern:agent-chat"
|
|
30
|
+
],
|
|
31
|
+
"accessibility": [
|
|
32
|
+
"Each step has textual state and description; animation and color are supplementary.",
|
|
33
|
+
"The disclosure uses native keyboard and expanded-state semantics."
|
|
34
|
+
],
|
|
35
|
+
"states": [
|
|
36
|
+
"While collapsed, the summary follows the current user-safe activity and shimmers only while active; while expanded, the heading becomes Activity and the ordered list exposes every step.",
|
|
37
|
+
"Pending, active, complete, and error describe user-safe workflow progress."
|
|
38
|
+
],
|
|
39
|
+
"responsiveBehavior": [
|
|
40
|
+
"Steps wrap within the response width."
|
|
41
|
+
],
|
|
42
|
+
"references": [
|
|
43
|
+
{
|
|
44
|
+
"label": "Storybook examples",
|
|
45
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"api": {
|
|
50
|
+
"props": {
|
|
51
|
+
"heading": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"required": false
|
|
54
|
+
},
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "AgentActivityItem[]",
|
|
57
|
+
"required": false
|
|
58
|
+
},
|
|
59
|
+
"open": {
|
|
60
|
+
"type": "boolean",
|
|
61
|
+
"required": false
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"events": [],
|
|
65
|
+
"slots": []
|
|
66
|
+
},
|
|
67
|
+
"exports": {
|
|
68
|
+
"customElement": "ds-agent-activity",
|
|
69
|
+
"react": "DsAgentActivity",
|
|
70
|
+
"angular": "DsAgentActivity"
|
|
71
|
+
},
|
|
72
|
+
"dependencies": [
|
|
73
|
+
"@ds-mo/ui",
|
|
74
|
+
"@ds-mo/tokens",
|
|
75
|
+
"@ds-mo/icons"
|
|
76
|
+
],
|
|
77
|
+
"componentDependencies": [
|
|
78
|
+
"icon",
|
|
79
|
+
"loader",
|
|
80
|
+
"text"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "component:ds-agent-response",
|
|
85
|
+
"tag": "ds-agent-response",
|
|
86
|
+
"name": "agent-response",
|
|
87
|
+
"title": "AgentResponse",
|
|
88
|
+
"summary": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
|
|
89
|
+
"intentStatus": "complete",
|
|
90
|
+
"intent": {
|
|
91
|
+
"audience": "specialized",
|
|
92
|
+
"status": "experimental",
|
|
93
|
+
"summary": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
|
|
94
|
+
"useWhen": [
|
|
95
|
+
"An agent response combines Markdown, user-safe activity, display-only tools, attachments, and sources in authored order."
|
|
96
|
+
],
|
|
97
|
+
"avoidWhen": [
|
|
98
|
+
"The component would be expected to own a model, transport, persistence, title generation, approval policy, or private reasoning."
|
|
99
|
+
],
|
|
100
|
+
"commonlyComposedWith": [
|
|
101
|
+
"component:ds-message",
|
|
102
|
+
"component:ds-markdown",
|
|
103
|
+
"component:ds-agent-activity",
|
|
104
|
+
"component:ds-agent-tool-call",
|
|
105
|
+
"component:ds-agent-source-list"
|
|
106
|
+
],
|
|
107
|
+
"patterns": [
|
|
108
|
+
"pattern:agent-chat"
|
|
109
|
+
],
|
|
110
|
+
"accessibility": [
|
|
111
|
+
"Part order matches authored reading order and remains inside generic message semantics.",
|
|
112
|
+
"Streaming state supplements rather than replaces meaningful textual status."
|
|
113
|
+
],
|
|
114
|
+
"states": [
|
|
115
|
+
"The owner replaces immutable part arrays as scripted or live output changes."
|
|
116
|
+
],
|
|
117
|
+
"responsiveBehavior": [
|
|
118
|
+
"Rich content uses the wider ghost message treatment while respecting transcript constraints."
|
|
119
|
+
],
|
|
120
|
+
"references": [
|
|
121
|
+
{
|
|
122
|
+
"label": "Storybook examples",
|
|
123
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"api": {
|
|
128
|
+
"props": {
|
|
129
|
+
"author": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"required": false
|
|
132
|
+
},
|
|
133
|
+
"messageId": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"required": false
|
|
136
|
+
},
|
|
137
|
+
"parts": {
|
|
138
|
+
"type": "AgentResponsePart[]",
|
|
139
|
+
"required": false
|
|
140
|
+
},
|
|
141
|
+
"showAuthor": {
|
|
142
|
+
"type": "boolean",
|
|
143
|
+
"required": false
|
|
144
|
+
},
|
|
145
|
+
"streaming": {
|
|
146
|
+
"type": "boolean",
|
|
147
|
+
"required": false
|
|
148
|
+
},
|
|
149
|
+
"timestamp": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"required": false
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"events": [],
|
|
155
|
+
"slots": []
|
|
156
|
+
},
|
|
157
|
+
"exports": {
|
|
158
|
+
"customElement": "ds-agent-response",
|
|
159
|
+
"react": "DsAgentResponse",
|
|
160
|
+
"angular": "DsAgentResponse"
|
|
161
|
+
},
|
|
162
|
+
"dependencies": [
|
|
163
|
+
"@ds-mo/ui",
|
|
164
|
+
"@ds-mo/tokens"
|
|
165
|
+
],
|
|
166
|
+
"componentDependencies": [
|
|
167
|
+
"agent-activity",
|
|
168
|
+
"agent-source-list",
|
|
169
|
+
"agent-tool-call",
|
|
170
|
+
"attachment-list",
|
|
171
|
+
"markdown",
|
|
172
|
+
"message",
|
|
173
|
+
"message-bubble"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "component:ds-agent-source-list",
|
|
178
|
+
"tag": "ds-agent-source-list",
|
|
179
|
+
"name": "agent-source-list",
|
|
180
|
+
"title": "AgentSourceList",
|
|
181
|
+
"summary": "Collapsible list of agent response sources with title, description, and validated external links.",
|
|
182
|
+
"intentStatus": "complete",
|
|
183
|
+
"intent": {
|
|
184
|
+
"audience": "specialized",
|
|
185
|
+
"status": "experimental",
|
|
186
|
+
"summary": "Collapsible list of agent response sources with title, description, and validated external links.",
|
|
187
|
+
"useWhen": [
|
|
188
|
+
"An agent response cites external material readers may inspect."
|
|
189
|
+
],
|
|
190
|
+
"avoidWhen": [
|
|
191
|
+
"The links are ordinary body links or are not sources for the response."
|
|
192
|
+
],
|
|
193
|
+
"commonlyComposedWith": [
|
|
194
|
+
"component:ds-agent-response",
|
|
195
|
+
"component:ds-markdown"
|
|
196
|
+
],
|
|
197
|
+
"patterns": [
|
|
198
|
+
"pattern:agent-chat"
|
|
199
|
+
],
|
|
200
|
+
"accessibility": [
|
|
201
|
+
"Each source uses descriptive linked text and visible supporting context.",
|
|
202
|
+
"Unsafe link schemes remain non-interactive text."
|
|
203
|
+
],
|
|
204
|
+
"responsiveBehavior": [
|
|
205
|
+
"Source titles and descriptions wrap within the response width."
|
|
206
|
+
],
|
|
207
|
+
"references": [
|
|
208
|
+
{
|
|
209
|
+
"label": "Storybook examples",
|
|
210
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
"api": {
|
|
215
|
+
"props": {
|
|
216
|
+
"heading": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"required": false
|
|
219
|
+
},
|
|
220
|
+
"items": {
|
|
221
|
+
"type": "AgentSource[]",
|
|
222
|
+
"required": false
|
|
223
|
+
},
|
|
224
|
+
"open": {
|
|
225
|
+
"type": "boolean",
|
|
226
|
+
"required": false
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
"events": [],
|
|
230
|
+
"slots": []
|
|
231
|
+
},
|
|
232
|
+
"exports": {
|
|
233
|
+
"customElement": "ds-agent-source-list",
|
|
234
|
+
"react": "DsAgentSourceList",
|
|
235
|
+
"angular": "DsAgentSourceList"
|
|
236
|
+
},
|
|
237
|
+
"dependencies": [
|
|
238
|
+
"@ds-mo/ui",
|
|
239
|
+
"@ds-mo/tokens",
|
|
240
|
+
"@ds-mo/icons"
|
|
241
|
+
],
|
|
242
|
+
"componentDependencies": [
|
|
243
|
+
"icon",
|
|
244
|
+
"text"
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"id": "component:ds-agent-tool-call",
|
|
249
|
+
"tag": "ds-agent-tool-call",
|
|
250
|
+
"name": "agent-tool-call",
|
|
251
|
+
"title": "AgentToolCall",
|
|
252
|
+
"summary": "Display-only disclosure for an agent tool call, its safe input or output, and execution status.",
|
|
253
|
+
"intentStatus": "complete",
|
|
254
|
+
"intent": {
|
|
255
|
+
"audience": "specialized",
|
|
256
|
+
"status": "experimental",
|
|
257
|
+
"summary": "Display-only disclosure for an agent tool call, its safe input or output, and execution status.",
|
|
258
|
+
"useWhen": [
|
|
259
|
+
"A prototype or agent product needs to expose user-safe tool execution detail."
|
|
260
|
+
],
|
|
261
|
+
"avoidWhen": [
|
|
262
|
+
"A participant must approve, deny, edit, or retry the tool call; those are product controls outside this component."
|
|
263
|
+
],
|
|
264
|
+
"commonlyComposedWith": [
|
|
265
|
+
"component:ds-agent-response",
|
|
266
|
+
"component:ds-code-block"
|
|
267
|
+
],
|
|
268
|
+
"patterns": [
|
|
269
|
+
"pattern:agent-chat"
|
|
270
|
+
],
|
|
271
|
+
"accessibility": [
|
|
272
|
+
"Queued, running, success, error, and denied states are available as text.",
|
|
273
|
+
"The disclosure uses native keyboard and expanded-state semantics."
|
|
274
|
+
],
|
|
275
|
+
"states": [
|
|
276
|
+
"This component presents state but never executes a tool or owns approval policy."
|
|
277
|
+
],
|
|
278
|
+
"responsiveBehavior": [
|
|
279
|
+
"Structured detail wraps and scrolls without widening the transcript."
|
|
280
|
+
],
|
|
281
|
+
"references": [
|
|
282
|
+
{
|
|
283
|
+
"label": "Storybook examples",
|
|
284
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
285
|
+
}
|
|
286
|
+
]
|
|
287
|
+
},
|
|
288
|
+
"api": {
|
|
289
|
+
"props": {
|
|
290
|
+
"error": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"required": false
|
|
293
|
+
},
|
|
294
|
+
"input": {
|
|
295
|
+
"type": "unknown",
|
|
296
|
+
"required": false
|
|
297
|
+
},
|
|
298
|
+
"label": {
|
|
299
|
+
"type": "string",
|
|
300
|
+
"required": false
|
|
301
|
+
},
|
|
302
|
+
"name": {
|
|
303
|
+
"type": "string",
|
|
304
|
+
"required": false
|
|
305
|
+
},
|
|
306
|
+
"open": {
|
|
307
|
+
"type": "boolean",
|
|
308
|
+
"required": false
|
|
309
|
+
},
|
|
310
|
+
"output": {
|
|
311
|
+
"type": "unknown",
|
|
312
|
+
"required": false
|
|
313
|
+
},
|
|
314
|
+
"state": {
|
|
315
|
+
"type": "AgentToolState",
|
|
316
|
+
"required": false
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
"events": [],
|
|
320
|
+
"slots": []
|
|
321
|
+
},
|
|
322
|
+
"exports": {
|
|
323
|
+
"customElement": "ds-agent-tool-call",
|
|
324
|
+
"react": "DsAgentToolCall",
|
|
325
|
+
"angular": "DsAgentToolCall"
|
|
326
|
+
},
|
|
327
|
+
"dependencies": [
|
|
328
|
+
"@ds-mo/ui",
|
|
329
|
+
"@ds-mo/tokens",
|
|
330
|
+
"@ds-mo/icons"
|
|
331
|
+
],
|
|
332
|
+
"componentDependencies": [
|
|
333
|
+
"icon",
|
|
334
|
+
"loader",
|
|
335
|
+
"text"
|
|
336
|
+
]
|
|
337
|
+
},
|
|
7
338
|
{
|
|
8
339
|
"id": "component:ds-app-shell",
|
|
9
340
|
"tag": "ds-app-shell",
|
|
@@ -29,7 +360,7 @@
|
|
|
29
360
|
"component:ds-panel-nav",
|
|
30
361
|
"component:ds-bar-nav",
|
|
31
362
|
"component:ds-panel-tools",
|
|
32
|
-
"component:ds-
|
|
363
|
+
"component:ds-swatch-picker"
|
|
33
364
|
],
|
|
34
365
|
"patterns": [
|
|
35
366
|
"pattern:application-shell"
|
|
@@ -126,36 +457,166 @@
|
|
|
126
457
|
"componentDependencies": []
|
|
127
458
|
},
|
|
128
459
|
{
|
|
129
|
-
"id": "component:ds-
|
|
130
|
-
"tag": "ds-
|
|
131
|
-
"name": "
|
|
132
|
-
"title": "
|
|
133
|
-
"summary": "
|
|
460
|
+
"id": "component:ds-attachment-list",
|
|
461
|
+
"tag": "ds-attachment-list",
|
|
462
|
+
"name": "attachment-list",
|
|
463
|
+
"title": "AttachmentList",
|
|
464
|
+
"summary": "Channel-neutral list of message attachments with name, media type, size, and optional safe link.",
|
|
134
465
|
"intentStatus": "complete",
|
|
135
466
|
"intent": {
|
|
136
467
|
"audience": "general",
|
|
137
|
-
"status": "
|
|
138
|
-
"summary": "
|
|
468
|
+
"status": "experimental",
|
|
469
|
+
"summary": "Channel-neutral list of message attachments with name, media type, size, and optional safe link.",
|
|
139
470
|
"useWhen": [
|
|
140
|
-
"
|
|
141
|
-
"An owning element needs a small visual dot indicating that supplemental notification information exists.",
|
|
142
|
-
"When the badge overlaps an icon or content, the immediate backing surface can be identified so its separation ring matches."
|
|
471
|
+
"A conversation message needs to display already-known attachment metadata."
|
|
143
472
|
],
|
|
144
473
|
"avoidWhen": [
|
|
145
|
-
"
|
|
146
|
-
"The mark needs semantic positive, caution, negative, or neutral color; Badge intentionally uses one brand treatment.",
|
|
147
|
-
"The compact content is metadata or taxonomy; use Tag or Chip according to whether it is removable.",
|
|
148
|
-
"The badge itself would receive pointer or keyboard interaction; put interaction on the owning control."
|
|
474
|
+
"Users need to choose, upload, remove, or edit files; those controls belong to the product workflow."
|
|
149
475
|
],
|
|
150
|
-
"
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
476
|
+
"commonlyComposedWith": [
|
|
477
|
+
"component:ds-message",
|
|
478
|
+
"component:ds-message-bubble"
|
|
479
|
+
],
|
|
480
|
+
"patterns": [
|
|
481
|
+
"pattern:conversation"
|
|
482
|
+
],
|
|
483
|
+
"accessibility": [
|
|
484
|
+
"Attachment name remains visible and is the link text when a safe URL is available.",
|
|
485
|
+
"Media type and size are supporting metadata, never the only identifier."
|
|
486
|
+
],
|
|
487
|
+
"responsiveBehavior": [
|
|
488
|
+
"Long names wrap or truncate without overflowing the message surface."
|
|
489
|
+
],
|
|
490
|
+
"references": [
|
|
491
|
+
{
|
|
492
|
+
"label": "Storybook examples",
|
|
493
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
494
|
+
}
|
|
495
|
+
]
|
|
496
|
+
},
|
|
497
|
+
"api": {
|
|
498
|
+
"props": {
|
|
499
|
+
"items": {
|
|
500
|
+
"type": "ConversationAttachment[]",
|
|
501
|
+
"required": false
|
|
502
|
+
},
|
|
503
|
+
"label": {
|
|
504
|
+
"type": "string",
|
|
505
|
+
"required": false
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
"events": [],
|
|
509
|
+
"slots": []
|
|
510
|
+
},
|
|
511
|
+
"exports": {
|
|
512
|
+
"customElement": "ds-attachment-list",
|
|
513
|
+
"react": "DsAttachmentList",
|
|
514
|
+
"angular": "DsAttachmentList"
|
|
515
|
+
},
|
|
516
|
+
"dependencies": [
|
|
517
|
+
"@ds-mo/ui",
|
|
518
|
+
"@ds-mo/tokens",
|
|
519
|
+
"@ds-mo/icons"
|
|
520
|
+
],
|
|
521
|
+
"componentDependencies": [
|
|
522
|
+
"icon",
|
|
523
|
+
"text"
|
|
524
|
+
]
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
"id": "component:ds-avatar",
|
|
528
|
+
"tag": "ds-avatar",
|
|
529
|
+
"name": "avatar",
|
|
530
|
+
"title": "Avatar",
|
|
531
|
+
"summary": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
532
|
+
"intentStatus": "complete",
|
|
533
|
+
"intent": {
|
|
534
|
+
"audience": "general",
|
|
535
|
+
"status": "experimental",
|
|
536
|
+
"summary": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
537
|
+
"useWhen": [
|
|
538
|
+
"A list or message composition needs a consistent 32px circular identity marker represented by an icon."
|
|
539
|
+
],
|
|
540
|
+
"avoidWhen": [
|
|
541
|
+
"The identity has a supplied photograph, initials, presence state, or editable profile behavior; those variants are not part of this primitive."
|
|
542
|
+
],
|
|
543
|
+
"commonlyComposedWith": [
|
|
544
|
+
"component:ds-conversation-list-item",
|
|
545
|
+
"component:ds-message"
|
|
546
|
+
],
|
|
547
|
+
"accessibility": [
|
|
548
|
+
"Provide label only when the icon communicates meaning that surrounding text does not already convey.",
|
|
549
|
+
"Omit label when the owning row or message already provides an equivalent accessible name."
|
|
550
|
+
],
|
|
551
|
+
"responsiveBehavior": [
|
|
552
|
+
"The avatar keeps its fixed 32px circle and 20px icon at every viewport size."
|
|
553
|
+
],
|
|
554
|
+
"references": [
|
|
555
|
+
{
|
|
556
|
+
"label": "Storybook examples",
|
|
557
|
+
"path": "src/wc/components/Avatar/Avatar.stories.ts"
|
|
558
|
+
}
|
|
559
|
+
]
|
|
560
|
+
},
|
|
561
|
+
"api": {
|
|
562
|
+
"props": {
|
|
563
|
+
"icon": {
|
|
564
|
+
"type": "string",
|
|
565
|
+
"required": false
|
|
566
|
+
},
|
|
567
|
+
"label": {
|
|
568
|
+
"type": "string | undefined",
|
|
569
|
+
"required": false
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"events": [],
|
|
573
|
+
"slots": []
|
|
574
|
+
},
|
|
575
|
+
"exports": {
|
|
576
|
+
"customElement": "ds-avatar",
|
|
577
|
+
"react": "DsAvatar",
|
|
578
|
+
"angular": "DsAvatar"
|
|
579
|
+
},
|
|
580
|
+
"dependencies": [
|
|
581
|
+
"@ds-mo/ui",
|
|
582
|
+
"@ds-mo/tokens",
|
|
583
|
+
"@ds-mo/icons"
|
|
584
|
+
],
|
|
585
|
+
"componentDependencies": [
|
|
586
|
+
"icon"
|
|
587
|
+
]
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"id": "component:ds-badge",
|
|
591
|
+
"tag": "ds-badge",
|
|
592
|
+
"name": "badge",
|
|
593
|
+
"title": "Badge",
|
|
594
|
+
"summary": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
595
|
+
"intentStatus": "complete",
|
|
596
|
+
"intent": {
|
|
597
|
+
"audience": "general",
|
|
598
|
+
"status": "stable",
|
|
599
|
+
"summary": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
600
|
+
"useWhen": [
|
|
601
|
+
"An existing control, navigation item, or label needs a compact unread notification count.",
|
|
602
|
+
"An owning element needs a small visual dot indicating that supplemental notification information exists.",
|
|
603
|
+
"When the badge overlaps an icon or content, the immediate backing surface can be identified so its separation ring matches."
|
|
604
|
+
],
|
|
605
|
+
"avoidWhen": [
|
|
606
|
+
"The status must stand alone without an owning label or control.",
|
|
607
|
+
"The mark needs semantic positive, caution, negative, or neutral color; Badge intentionally uses one brand treatment.",
|
|
608
|
+
"The compact content is metadata or taxonomy; use Tag or Chip according to whether it is removable.",
|
|
609
|
+
"The badge itself would receive pointer or keyboard interaction; put interaction on the owning control."
|
|
610
|
+
],
|
|
611
|
+
"alternatives": [
|
|
612
|
+
{
|
|
613
|
+
"when": "A compact static label communicates taxonomy or a semantic status.",
|
|
614
|
+
"component": "component:ds-tag",
|
|
615
|
+
"reason": "Tag owns static metadata labels and semantic intent coloring."
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"when": "A metadata value must be individually removable.",
|
|
619
|
+
"component": "component:ds-chip",
|
|
159
620
|
"reason": "Chip owns dismissible metadata values."
|
|
160
621
|
},
|
|
161
622
|
{
|
|
@@ -672,6 +1133,9 @@
|
|
|
672
1133
|
"component:ds-menu",
|
|
673
1134
|
"component:ds-panel-tools"
|
|
674
1135
|
],
|
|
1136
|
+
"patterns": [
|
|
1137
|
+
"pattern:menu-trigger"
|
|
1138
|
+
],
|
|
675
1139
|
"accessibility": [
|
|
676
1140
|
"Provide an explicit accessible name for every icon-only action.",
|
|
677
1141
|
"Use active state only for a persistent toggle or mode, and synchronize pressed semantics unless an owning composite exposes the selection state.",
|
|
@@ -1562,98 +2026,52 @@
|
|
|
1562
2026
|
]
|
|
1563
2027
|
},
|
|
1564
2028
|
{
|
|
1565
|
-
"id": "component:ds-
|
|
1566
|
-
"tag": "ds-
|
|
1567
|
-
"name": "
|
|
1568
|
-
"title": "
|
|
1569
|
-
"summary": "
|
|
2029
|
+
"id": "component:ds-code-block",
|
|
2030
|
+
"tag": "ds-code-block",
|
|
2031
|
+
"name": "code-block",
|
|
2032
|
+
"title": "CodeBlock",
|
|
2033
|
+
"summary": "Scrollable monospace code surface with optional language or filename context and copy action.",
|
|
1570
2034
|
"intentStatus": "complete",
|
|
1571
2035
|
"intent": {
|
|
1572
2036
|
"audience": "general",
|
|
1573
|
-
"status": "
|
|
1574
|
-
"summary": "
|
|
2037
|
+
"status": "experimental",
|
|
2038
|
+
"summary": "Scrollable monospace code surface with optional language or filename context and copy action.",
|
|
1575
2039
|
"useWhen": [
|
|
1576
|
-
"
|
|
1577
|
-
"A list or panel needs an inset separator that does not define the outer edge of its container.",
|
|
1578
|
-
"Meaningful document or group structure requires an explicit horizontal or vertical separator."
|
|
2040
|
+
"A message or document displays fenced code that readers may copy."
|
|
1579
2041
|
],
|
|
1580
2042
|
"avoidWhen": [
|
|
1581
|
-
"
|
|
1582
|
-
"The line defines a container edge, control outline, or selected state; use the owning component's border treatment.",
|
|
1583
|
-
"The divider would compensate for weak headings or unclear information hierarchy.",
|
|
1584
|
-
"A decorative flourish does not clarify grouping."
|
|
1585
|
-
],
|
|
1586
|
-
"alternatives": [
|
|
1587
|
-
{
|
|
1588
|
-
"when": "Content needs an enclosing surface and outer boundary.",
|
|
1589
|
-
"component": "component:ds-card",
|
|
1590
|
-
"reason": "Card owns container chrome, structure, and edge treatment."
|
|
1591
|
-
},
|
|
1592
|
-
{
|
|
1593
|
-
"when": "A static compact label is being used to name a group.",
|
|
1594
|
-
"component": "component:ds-text",
|
|
1595
|
-
"reason": "Text communicates hierarchy directly instead of relying on a line."
|
|
1596
|
-
}
|
|
2043
|
+
"A live editor, terminal, diff viewer, or syntax-highlighting environment is required."
|
|
1597
2044
|
],
|
|
1598
2045
|
"commonlyComposedWith": [
|
|
1599
|
-
"component:ds-
|
|
1600
|
-
"component:ds-
|
|
1601
|
-
"component:ds-panel-sub-nav"
|
|
2046
|
+
"component:ds-markdown",
|
|
2047
|
+
"component:ds-button-unfilled"
|
|
1602
2048
|
],
|
|
1603
2049
|
"accessibility": [
|
|
1604
|
-
"
|
|
1605
|
-
"
|
|
1606
|
-
"Semantic orientation must match the divider's visual orientation.",
|
|
1607
|
-
"Do not use a semantic divider as a substitute for headings, landmarks, or explicit group labels."
|
|
1608
|
-
],
|
|
1609
|
-
"states": [
|
|
1610
|
-
"Horizontal and vertical variants separate sibling groups along the parent's layout axis.",
|
|
1611
|
-
"The omitted background context is for primary and secondary surfaces. Explicit faint documents a faint surface while using the same standard divider token.",
|
|
1612
|
-
"Other background contexts select their matching divider token, including navigation where Divider is composed inside app chrome.",
|
|
1613
|
-
"Inset is symmetric along the line axis. Explicit length is reserved for layout-specific separators; otherwise the line fills the available axis."
|
|
2050
|
+
"The copy action has explicit status wording and the code remains selectable text.",
|
|
2051
|
+
"Language and filename labels supplement rather than replace the code content."
|
|
1614
2052
|
],
|
|
1615
2053
|
"responsiveBehavior": [
|
|
1616
|
-
"
|
|
1617
|
-
"Divider does not infer layout direction or hide itself responsively."
|
|
2054
|
+
"Long lines scroll horizontally and do not widen the owning transcript."
|
|
1618
2055
|
],
|
|
1619
|
-
"frameworkCaveats": {
|
|
1620
|
-
"customElements": [
|
|
1621
|
-
"Set semantic mode only from known document structure; presentation alone should remain hidden from assistive technology."
|
|
1622
|
-
],
|
|
1623
|
-
"react": [
|
|
1624
|
-
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
1625
|
-
],
|
|
1626
|
-
"angular": [
|
|
1627
|
-
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
1628
|
-
]
|
|
1629
|
-
},
|
|
1630
2056
|
"references": [
|
|
1631
2057
|
{
|
|
1632
2058
|
"label": "Storybook examples",
|
|
1633
|
-
"path": "src/wc/components/
|
|
2059
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
1634
2060
|
}
|
|
1635
2061
|
]
|
|
1636
2062
|
},
|
|
1637
2063
|
"api": {
|
|
1638
2064
|
"props": {
|
|
1639
|
-
"
|
|
1640
|
-
"type": "
|
|
1641
|
-
"required": false
|
|
1642
|
-
},
|
|
1643
|
-
"inset": {
|
|
1644
|
-
"type": "DividerInset",
|
|
1645
|
-
"required": false
|
|
1646
|
-
},
|
|
1647
|
-
"length": {
|
|
1648
|
-
"type": "DividerLength",
|
|
2065
|
+
"code": {
|
|
2066
|
+
"type": "string",
|
|
1649
2067
|
"required": false
|
|
1650
2068
|
},
|
|
1651
|
-
"
|
|
1652
|
-
"type": "
|
|
2069
|
+
"filename": {
|
|
2070
|
+
"type": "string",
|
|
1653
2071
|
"required": false
|
|
1654
2072
|
},
|
|
1655
|
-
"
|
|
1656
|
-
"type": "
|
|
2073
|
+
"language": {
|
|
2074
|
+
"type": "string",
|
|
1657
2075
|
"required": false
|
|
1658
2076
|
}
|
|
1659
2077
|
},
|
|
@@ -1661,344 +2079,226 @@
|
|
|
1661
2079
|
"slots": []
|
|
1662
2080
|
},
|
|
1663
2081
|
"exports": {
|
|
1664
|
-
"customElement": "ds-
|
|
1665
|
-
"react": "
|
|
1666
|
-
"angular": "
|
|
2082
|
+
"customElement": "ds-code-block",
|
|
2083
|
+
"react": "DsCodeBlock",
|
|
2084
|
+
"angular": "DsCodeBlock"
|
|
1667
2085
|
},
|
|
1668
2086
|
"dependencies": [
|
|
1669
2087
|
"@ds-mo/ui",
|
|
1670
2088
|
"@ds-mo/tokens"
|
|
1671
2089
|
],
|
|
1672
|
-
"componentDependencies": [
|
|
2090
|
+
"componentDependencies": [
|
|
2091
|
+
"button-unfilled",
|
|
2092
|
+
"text"
|
|
2093
|
+
]
|
|
1673
2094
|
},
|
|
1674
2095
|
{
|
|
1675
|
-
"id": "component:ds-
|
|
1676
|
-
"tag": "ds-
|
|
1677
|
-
"name": "
|
|
1678
|
-
"title": "
|
|
1679
|
-
"summary": "
|
|
2096
|
+
"id": "component:ds-conversation-list",
|
|
2097
|
+
"tag": "ds-conversation-list",
|
|
2098
|
+
"name": "conversation-list",
|
|
2099
|
+
"title": "ConversationList",
|
|
2100
|
+
"summary": "Scrollable conversation-list region with dedicated empty and floating-action placement.",
|
|
1680
2101
|
"intentStatus": "complete",
|
|
1681
2102
|
"intent": {
|
|
1682
2103
|
"audience": "general",
|
|
1683
|
-
"status": "
|
|
1684
|
-
"summary": "
|
|
2104
|
+
"status": "experimental",
|
|
2105
|
+
"summary": "Scrollable conversation-list region with dedicated empty and floating-action placement.",
|
|
1685
2106
|
"useWhen": [
|
|
1686
|
-
"A
|
|
1687
|
-
"A prominent empty region benefits from a decorative icon, visual title, and supporting body copy.",
|
|
1688
|
-
"A compact owner such as a Select popup needs only centered body copy."
|
|
2107
|
+
"A messaging-like surface needs a reusable history list with empty and action regions."
|
|
1689
2108
|
],
|
|
1690
2109
|
"avoidWhen": [
|
|
1691
|
-
"
|
|
1692
|
-
"The state is an error, warning, or confirmation that needs semantic intent and announcement from the owning workflow.",
|
|
1693
|
-
"The state needs a recovery action, link, or other interactive content; the current EmptyState pattern is intentionally message-only.",
|
|
1694
|
-
"A decorative illustration, arbitrary rich content, or custom layout is required."
|
|
1695
|
-
],
|
|
1696
|
-
"alternatives": [
|
|
1697
|
-
{
|
|
1698
|
-
"when": "A content region is waiting for structured data.",
|
|
1699
|
-
"component": "component:ds-skeleton",
|
|
1700
|
-
"reason": "Skeleton preserves expected geometry while content is pending."
|
|
1701
|
-
},
|
|
1702
|
-
{
|
|
1703
|
-
"when": "An operation is progressing without predictable content structure.",
|
|
1704
|
-
"component": "component:ds-loader",
|
|
1705
|
-
"reason": "Loader owns indeterminate progress rather than an empty outcome."
|
|
1706
|
-
},
|
|
1707
|
-
{
|
|
1708
|
-
"when": "Only ordinary prose is needed without empty-state layout.",
|
|
1709
|
-
"component": "component:ds-text",
|
|
1710
|
-
"reason": "Text owns typography without adding centered empty-state composition."
|
|
1711
|
-
}
|
|
2110
|
+
"The content is not a collection of conversations or threads."
|
|
1712
2111
|
],
|
|
1713
2112
|
"commonlyComposedWith": [
|
|
1714
|
-
"component:ds-
|
|
1715
|
-
"component:ds-
|
|
1716
|
-
"component:ds-
|
|
2113
|
+
"component:ds-conversation-list-section",
|
|
2114
|
+
"component:ds-conversation-list-item",
|
|
2115
|
+
"component:ds-empty-state"
|
|
1717
2116
|
],
|
|
1718
|
-
"
|
|
1719
|
-
"
|
|
1720
|
-
"EmptyState does not create a live region or alert automatically. The owner decides whether a dynamic transition requires announcement.",
|
|
1721
|
-
"The visual title does not impose a document heading level because the correct hierarchy belongs to the consuming page or region.",
|
|
1722
|
-
"Keep localized body copy concise and sufficient when using the body-only variant."
|
|
2117
|
+
"patterns": [
|
|
2118
|
+
"pattern:conversation"
|
|
1723
2119
|
],
|
|
1724
|
-
"
|
|
1725
|
-
"
|
|
1726
|
-
"
|
|
1727
|
-
"The visual title uses title-small primary text; body uses body-medium secondary text with a 4px title-to-body gap.",
|
|
1728
|
-
"All content is centered. The owner supplies container size and surrounding padding; do not compose actions into or immediately alongside the current EmptyState pattern.",
|
|
1729
|
-
"First-use, no-content, no-results, and no-access states reuse this primitive with cause-specific localized messages rather than visual variants."
|
|
2120
|
+
"accessibility": [
|
|
2121
|
+
"Provide an accessible list label through the surrounding heading or region.",
|
|
2122
|
+
"Keep the empty message descriptive and the floating action explicitly named."
|
|
1730
2123
|
],
|
|
1731
2124
|
"responsiveBehavior": [
|
|
1732
|
-
"The owner
|
|
1733
|
-
"EmptyState does not infer breakpoints or change composition automatically."
|
|
2125
|
+
"The list fills its owner, scrolls independently, and keeps its action at the lower end corner."
|
|
1734
2126
|
],
|
|
1735
|
-
"frameworkCaveats": {
|
|
1736
|
-
"customElements": [
|
|
1737
|
-
"Pass canonical IcoMo icon names and localized heading/body strings through properties or attributes."
|
|
1738
|
-
],
|
|
1739
|
-
"react": [
|
|
1740
|
-
"Choose one supported composition by passing body with optional heading and icon props."
|
|
1741
|
-
],
|
|
1742
|
-
"angular": [
|
|
1743
|
-
"Choose one supported composition by binding body with optional heading and icon inputs."
|
|
1744
|
-
]
|
|
1745
|
-
},
|
|
1746
2127
|
"references": [
|
|
1747
2128
|
{
|
|
1748
2129
|
"label": "Storybook examples",
|
|
1749
|
-
"path": "src/wc/components/
|
|
2130
|
+
"path": "src/wc/components/ConversationList/ConversationList.stories.ts"
|
|
1750
2131
|
}
|
|
1751
2132
|
]
|
|
1752
2133
|
},
|
|
1753
2134
|
"api": {
|
|
1754
|
-
"props": {
|
|
1755
|
-
"body": {
|
|
1756
|
-
"type": "string",
|
|
1757
|
-
"required": false
|
|
1758
|
-
},
|
|
1759
|
-
"heading": {
|
|
1760
|
-
"type": "string | undefined",
|
|
1761
|
-
"required": false
|
|
1762
|
-
},
|
|
1763
|
-
"icon": {
|
|
1764
|
-
"type": "string | undefined",
|
|
1765
|
-
"required": false
|
|
1766
|
-
}
|
|
1767
|
-
},
|
|
2135
|
+
"props": {},
|
|
1768
2136
|
"events": [],
|
|
1769
2137
|
"slots": []
|
|
1770
2138
|
},
|
|
1771
2139
|
"exports": {
|
|
1772
|
-
"customElement": "ds-
|
|
1773
|
-
"react": "
|
|
1774
|
-
"angular": "
|
|
2140
|
+
"customElement": "ds-conversation-list",
|
|
2141
|
+
"react": "DsConversationList",
|
|
2142
|
+
"angular": "DsConversationList"
|
|
1775
2143
|
},
|
|
1776
2144
|
"dependencies": [
|
|
1777
2145
|
"@ds-mo/ui",
|
|
1778
|
-
"@ds-mo/tokens"
|
|
1779
|
-
"@ds-mo/icons"
|
|
2146
|
+
"@ds-mo/tokens"
|
|
1780
2147
|
],
|
|
1781
|
-
"componentDependencies": [
|
|
1782
|
-
"icon",
|
|
1783
|
-
"text"
|
|
1784
|
-
]
|
|
2148
|
+
"componentDependencies": []
|
|
1785
2149
|
},
|
|
1786
2150
|
{
|
|
1787
|
-
"id": "component:ds-
|
|
1788
|
-
"tag": "ds-
|
|
1789
|
-
"name": "
|
|
1790
|
-
"title": "
|
|
1791
|
-
"summary": "
|
|
2151
|
+
"id": "component:ds-conversation-list-item",
|
|
2152
|
+
"tag": "ds-conversation-list-item",
|
|
2153
|
+
"name": "conversation-list-item",
|
|
2154
|
+
"title": "ConversationListItem",
|
|
2155
|
+
"summary": "Selectable conversation row with one-line preview, recency, unread presence, generic busy or error status, and channel-owned accessory slots.",
|
|
1792
2156
|
"intentStatus": "complete",
|
|
1793
2157
|
"intent": {
|
|
1794
2158
|
"audience": "general",
|
|
1795
|
-
"status": "
|
|
1796
|
-
"summary": "
|
|
2159
|
+
"status": "experimental",
|
|
2160
|
+
"summary": "Selectable conversation row with one-line preview, recency, unread presence, generic busy or error status, and channel-owned accessory slots.",
|
|
1797
2161
|
"useWhen": [
|
|
1798
|
-
"
|
|
1799
|
-
"Help text or an error message must be programmatically associated with one control.",
|
|
1800
|
-
"A form layout needs one consistent label-control-message rhythm."
|
|
2162
|
+
"A conversation history needs a compact row that opens one thread."
|
|
1801
2163
|
],
|
|
1802
2164
|
"avoidWhen": [
|
|
1803
|
-
"The
|
|
1804
|
-
"Several controls belong to one question; use a semantic fieldset and legend instead.",
|
|
1805
|
-
"Text describes a region or group rather than one form control."
|
|
1806
|
-
],
|
|
1807
|
-
"alternatives": [
|
|
1808
|
-
{
|
|
1809
|
-
"when": "Several related controls answer one question.",
|
|
1810
|
-
"component": "component:ds-text",
|
|
1811
|
-
"reason": "Use native fieldset and legend semantics, then compose Text only for supporting content."
|
|
1812
|
-
}
|
|
2165
|
+
"The row represents a command rather than a persisted conversation."
|
|
1813
2166
|
],
|
|
1814
2167
|
"commonlyComposedWith": [
|
|
1815
|
-
"component:ds-
|
|
1816
|
-
"component:ds-
|
|
1817
|
-
"component:ds-
|
|
1818
|
-
"component:ds-
|
|
2168
|
+
"component:ds-conversation-list-section",
|
|
2169
|
+
"component:ds-avatar",
|
|
2170
|
+
"component:ds-badge",
|
|
2171
|
+
"component:ds-loader"
|
|
2172
|
+
],
|
|
2173
|
+
"patterns": [
|
|
2174
|
+
"pattern:conversation"
|
|
1819
2175
|
],
|
|
1820
2176
|
"accessibility": [
|
|
1821
|
-
"
|
|
1822
|
-
"
|
|
1823
|
-
"
|
|
1824
|
-
"Clicking the label focuses the slotted design-system control without opening a Select popup.",
|
|
1825
|
-
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
2177
|
+
"The conversation surface is one button with its title as the primary accessible name; actions are sibling controls so buttons are never nested.",
|
|
2178
|
+
"An action in the actions slot remains keyboard-focusable and appears on row focus as well as pointer hover; touch layouts keep it visible.",
|
|
2179
|
+
"Status copy must make busy or error meaning available without relying on motion or color."
|
|
1826
2180
|
],
|
|
1827
2181
|
"states": [
|
|
1828
|
-
"
|
|
1829
|
-
"
|
|
1830
|
-
"
|
|
1831
|
-
"
|
|
2182
|
+
"Rows reuse the md choice-item label/subtext recipe used by Menu, including 6px row padding, 2px text inset, and the shared content gap. The enclosing conversation-list scroll region supplies the larger 8px outer container padding.",
|
|
2183
|
+
"Busy and error are generic channel-neutral states; the owning product supplies suitable status wording.",
|
|
2184
|
+
"Any positive unreadCount renders one dot on the title row rather than a visible counter; the accessible row name may still announce the exact unread quantity.",
|
|
2185
|
+
"Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
|
|
2186
|
+
"The title uses body-medium emphasis, not title-small, and the body-small preview truncates after one line. Unread titles use primary foreground; read titles use secondary foreground.",
|
|
2187
|
+
"The actions slot overlays the row at an 8px right inset without changing title or preview measure, and paints above the row interaction wash while that wash remains active."
|
|
1832
2188
|
],
|
|
1833
2189
|
"responsiveBehavior": [
|
|
1834
|
-
"
|
|
1835
|
-
"The form layout owns column count, wrapping, and responsive placement; Field keeps the vertical label-control-message composition intact."
|
|
2190
|
+
"Long titles and previews truncate without displacing trailing status."
|
|
1836
2191
|
],
|
|
1837
|
-
"frameworkCaveats": {
|
|
1838
|
-
"customElements": [
|
|
1839
|
-
"Set fieldId only when another element must reference a predictable control ID; otherwise use the generated association.",
|
|
1840
|
-
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
1841
|
-
],
|
|
1842
|
-
"react": [
|
|
1843
|
-
"Compose one DsInput, DsSelect, or DsSelectMulti child and control validation timing in the form owner."
|
|
1844
|
-
],
|
|
1845
|
-
"angular": [
|
|
1846
|
-
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
1847
|
-
]
|
|
1848
|
-
},
|
|
1849
2192
|
"references": [
|
|
1850
2193
|
{
|
|
1851
2194
|
"label": "Storybook examples",
|
|
1852
|
-
"path": "src/wc/components/
|
|
1853
|
-
},
|
|
1854
|
-
{
|
|
1855
|
-
"label": "Cross-browser form and accessibility coverage",
|
|
1856
|
-
"path": "tests/e2e/forms.spec.ts"
|
|
2195
|
+
"path": "src/wc/components/ConversationList/ConversationList.stories.ts"
|
|
1857
2196
|
}
|
|
1858
2197
|
]
|
|
1859
2198
|
},
|
|
1860
2199
|
"api": {
|
|
1861
2200
|
"props": {
|
|
1862
|
-
"
|
|
1863
|
-
"type": "string
|
|
2201
|
+
"conversationId": {
|
|
2202
|
+
"type": "string",
|
|
1864
2203
|
"required": false
|
|
1865
2204
|
},
|
|
1866
|
-
"
|
|
2205
|
+
"conversationTitle": {
|
|
2206
|
+
"type": "string",
|
|
2207
|
+
"required": false
|
|
2208
|
+
},
|
|
2209
|
+
"preview": {
|
|
2210
|
+
"type": "string",
|
|
2211
|
+
"required": false
|
|
2212
|
+
},
|
|
2213
|
+
"selected": {
|
|
1867
2214
|
"type": "boolean",
|
|
1868
2215
|
"required": false
|
|
1869
2216
|
},
|
|
1870
|
-
"
|
|
1871
|
-
"type": "
|
|
2217
|
+
"state": {
|
|
2218
|
+
"type": "ConversationItemState",
|
|
1872
2219
|
"required": false
|
|
1873
2220
|
},
|
|
1874
|
-
"
|
|
1875
|
-
"type": "string
|
|
2221
|
+
"statusLabel": {
|
|
2222
|
+
"type": "string",
|
|
1876
2223
|
"required": false
|
|
1877
2224
|
},
|
|
1878
|
-
"
|
|
2225
|
+
"unreadCount": {
|
|
2226
|
+
"type": "number",
|
|
2227
|
+
"required": false
|
|
2228
|
+
},
|
|
2229
|
+
"updatedAt": {
|
|
1879
2230
|
"type": "string",
|
|
1880
|
-
"required":
|
|
2231
|
+
"required": false
|
|
1881
2232
|
}
|
|
1882
2233
|
},
|
|
1883
|
-
"events": [
|
|
2234
|
+
"events": [
|
|
2235
|
+
{
|
|
2236
|
+
"name": "dsSelect",
|
|
2237
|
+
"detail": "{ id: string }"
|
|
2238
|
+
}
|
|
2239
|
+
],
|
|
1884
2240
|
"slots": []
|
|
1885
2241
|
},
|
|
1886
2242
|
"exports": {
|
|
1887
|
-
"customElement": "ds-
|
|
1888
|
-
"react": "
|
|
1889
|
-
"angular": "
|
|
2243
|
+
"customElement": "ds-conversation-list-item",
|
|
2244
|
+
"react": "DsConversationListItem",
|
|
2245
|
+
"angular": "DsConversationListItem"
|
|
1890
2246
|
},
|
|
1891
2247
|
"dependencies": [
|
|
1892
2248
|
"@ds-mo/ui",
|
|
1893
2249
|
"@ds-mo/tokens"
|
|
1894
2250
|
],
|
|
1895
2251
|
"componentDependencies": [
|
|
2252
|
+
"badge",
|
|
2253
|
+
"loader",
|
|
1896
2254
|
"text"
|
|
1897
2255
|
]
|
|
1898
2256
|
},
|
|
1899
2257
|
{
|
|
1900
|
-
"id": "component:ds-
|
|
1901
|
-
"tag": "ds-
|
|
1902
|
-
"name": "
|
|
1903
|
-
"title": "
|
|
1904
|
-
"summary": "
|
|
2258
|
+
"id": "component:ds-conversation-list-section",
|
|
2259
|
+
"tag": "ds-conversation-list-section",
|
|
2260
|
+
"name": "conversation-list-section",
|
|
2261
|
+
"title": "ConversationListSection",
|
|
2262
|
+
"summary": "Semantically labelled section for grouping conversation rows by meaningful chronology or category.",
|
|
1905
2263
|
"intentStatus": "complete",
|
|
1906
2264
|
"intent": {
|
|
1907
2265
|
"audience": "general",
|
|
1908
|
-
"status": "
|
|
1909
|
-
"summary": "
|
|
2266
|
+
"status": "experimental",
|
|
2267
|
+
"summary": "Semantically labelled section for grouping conversation rows by meaningful chronology or category.",
|
|
1910
2268
|
"useWhen": [
|
|
1911
|
-
"
|
|
1912
|
-
"A canonical flag glyph communicates a country or region with adjacent text or an explicit localized label.",
|
|
1913
|
-
"A standalone non-interactive symbol conveys meaning that is unavailable from nearby text."
|
|
2269
|
+
"A conversation list needs visible groups such as Today, Yesterday, or Older."
|
|
1914
2270
|
],
|
|
1915
2271
|
"avoidWhen": [
|
|
1916
|
-
"
|
|
1917
|
-
"The visual is an illustration, logo, chart, or arbitrary SVG artwork rather than a canonical IcoMo glyph.",
|
|
1918
|
-
"An alias, guessed name, or case-insensitive lookup would be required; runtime lookup uses exact canonical export names.",
|
|
1919
|
-
"A fallback glyph would be required when loading fails; Icon intentionally preserves an empty fixed-size box."
|
|
1920
|
-
],
|
|
1921
|
-
"alternatives": [
|
|
1922
|
-
{
|
|
1923
|
-
"when": "The icon initiates an action or persistent toggle.",
|
|
1924
|
-
"component": "component:ds-button-unfilled",
|
|
1925
|
-
"reason": "ButtonUnfilled owns interaction, focus, naming, and toggle semantics."
|
|
1926
|
-
},
|
|
1927
|
-
{
|
|
1928
|
-
"when": "The visual communicates indeterminate loading progress.",
|
|
1929
|
-
"component": "component:ds-loader",
|
|
1930
|
-
"reason": "Loader owns progress status and motion behavior."
|
|
1931
|
-
},
|
|
1932
|
-
{
|
|
1933
|
-
"when": "The compact visual is an unread count or notification dot.",
|
|
1934
|
-
"component": "component:ds-badge",
|
|
1935
|
-
"reason": "Badge owns supplemental notification semantics."
|
|
1936
|
-
}
|
|
2272
|
+
"A flat list is clearer or the proposed grouping has no meaning to readers."
|
|
1937
2273
|
],
|
|
1938
2274
|
"commonlyComposedWith": [
|
|
1939
|
-
"component:ds-
|
|
1940
|
-
"component:ds-
|
|
1941
|
-
"component:ds-menu",
|
|
1942
|
-
"component:ds-panel-nav"
|
|
2275
|
+
"component:ds-conversation-list",
|
|
2276
|
+
"component:ds-conversation-list-item"
|
|
1943
2277
|
],
|
|
1944
|
-
"
|
|
1945
|
-
"
|
|
1946
|
-
"The owning button, link, or composite control provides the accessible name; do not repeat that name on its nested Icon.",
|
|
1947
|
-
"Provide an explicit label only when the non-interactive icon itself communicates otherwise unavailable meaning.",
|
|
1948
|
-
"Tertiary and quaternary foregrounds are restricted to icons inside genuinely inactive or disabled UI, or to purely decorative icons; quaternary is the fainter tier, and informative icons and meaningful status graphics retain sufficient rendered contrast even when aria-hidden.",
|
|
1949
|
-
"Informative flags require an explicit localized country or region label; never derive accessible text from the export name.",
|
|
1950
|
-
"Icon never receives focus or owns interaction."
|
|
2278
|
+
"patterns": [
|
|
2279
|
+
"pattern:conversation"
|
|
1951
2280
|
],
|
|
1952
|
-
"
|
|
1953
|
-
"
|
|
1954
|
-
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
1955
|
-
"Built-in glyph lookup accepts exact canonical IcoMo export names only. Names beginning with Flag select the flag catalog automatically.",
|
|
1956
|
-
"A cache miss lazy-loads into a fixed-size box without layout shift. Unknown names, failed loads, and rejected markup leave that box empty.",
|
|
1957
|
-
"Critical first-paint glyphs may be pre-registered before rendering; all resolved glyphs share a global cache.",
|
|
1958
|
-
"Every SVG is validated at the render boundary and injected as parsed DOM nodes so app-registered markup cannot bypass executable-content or external-reference checks."
|
|
2281
|
+
"accessibility": [
|
|
2282
|
+
"The visible heading labels the section and must describe the relationship shared by its rows."
|
|
1959
2283
|
],
|
|
1960
2284
|
"responsiveBehavior": [
|
|
1961
|
-
"
|
|
1962
|
-
"Icon does not scale from viewport width or change glyphs automatically."
|
|
2285
|
+
"Rows remain full width while the heading stays visible in document order."
|
|
1963
2286
|
],
|
|
1964
|
-
"frameworkCaveats": {
|
|
1965
|
-
"customElements": [
|
|
1966
|
-
"Import each canonical glyph as an SVG string and call registerIcons before first render when synchronous critical-icon paint is required."
|
|
1967
|
-
],
|
|
1968
|
-
"react": [
|
|
1969
|
-
"Keep nested control icons decorative and place the accessible name on the owning React control."
|
|
1970
|
-
],
|
|
1971
|
-
"angular": [
|
|
1972
|
-
"Keep nested control icons decorative and place the accessible name on the owning Angular control."
|
|
1973
|
-
]
|
|
1974
|
-
},
|
|
1975
2287
|
"references": [
|
|
1976
2288
|
{
|
|
1977
2289
|
"label": "Storybook examples",
|
|
1978
|
-
"path": "src/wc/components/
|
|
1979
|
-
},
|
|
1980
|
-
{
|
|
1981
|
-
"label": "Preload API guidance",
|
|
1982
|
-
"path": "src/wc/components/Icon/icon-cache.ts"
|
|
2290
|
+
"path": "src/wc/components/ConversationList/ConversationList.stories.ts"
|
|
1983
2291
|
}
|
|
1984
2292
|
]
|
|
1985
2293
|
},
|
|
1986
2294
|
"api": {
|
|
1987
2295
|
"props": {
|
|
1988
|
-
"
|
|
1989
|
-
"type": "IconColor",
|
|
1990
|
-
"required": false
|
|
1991
|
-
},
|
|
1992
|
-
"label": {
|
|
1993
|
-
"type": "string | undefined",
|
|
1994
|
-
"required": false
|
|
1995
|
-
},
|
|
1996
|
-
"name": {
|
|
2296
|
+
"heading": {
|
|
1997
2297
|
"type": "string",
|
|
1998
2298
|
"required": false
|
|
1999
2299
|
},
|
|
2000
|
-
"
|
|
2001
|
-
"type": "
|
|
2300
|
+
"sectionId": {
|
|
2301
|
+
"type": "string",
|
|
2002
2302
|
"required": false
|
|
2003
2303
|
}
|
|
2004
2304
|
},
|
|
@@ -2006,324 +2306,1198 @@
|
|
|
2006
2306
|
"slots": []
|
|
2007
2307
|
},
|
|
2008
2308
|
"exports": {
|
|
2009
|
-
"customElement": "ds-
|
|
2010
|
-
"react": "
|
|
2011
|
-
"angular": "
|
|
2309
|
+
"customElement": "ds-conversation-list-section",
|
|
2310
|
+
"react": "DsConversationListSection",
|
|
2311
|
+
"angular": "DsConversationListSection"
|
|
2012
2312
|
},
|
|
2013
2313
|
"dependencies": [
|
|
2014
2314
|
"@ds-mo/ui",
|
|
2015
|
-
"@ds-mo/tokens"
|
|
2016
|
-
"@ds-mo/icons"
|
|
2315
|
+
"@ds-mo/tokens"
|
|
2017
2316
|
],
|
|
2018
|
-
"componentDependencies": [
|
|
2317
|
+
"componentDependencies": [
|
|
2318
|
+
"text"
|
|
2319
|
+
]
|
|
2019
2320
|
},
|
|
2020
2321
|
{
|
|
2021
|
-
"id": "component:ds-
|
|
2022
|
-
"tag": "ds-
|
|
2023
|
-
"name": "
|
|
2024
|
-
"title": "
|
|
2025
|
-
"summary": "
|
|
2322
|
+
"id": "component:ds-divider",
|
|
2323
|
+
"tag": "ds-divider",
|
|
2324
|
+
"name": "divider",
|
|
2325
|
+
"title": "Divider",
|
|
2326
|
+
"summary": "Horizontal or vertical separator between sibling content groups, decorative by default with optional structural semantics.",
|
|
2026
2327
|
"intentStatus": "complete",
|
|
2027
2328
|
"intent": {
|
|
2028
2329
|
"audience": "general",
|
|
2029
2330
|
"status": "stable",
|
|
2030
|
-
"summary": "
|
|
2331
|
+
"summary": "Horizontal or vertical separator between sibling content groups, decorative by default with optional structural semantics.",
|
|
2031
2332
|
"useWhen": [
|
|
2032
|
-
"
|
|
2033
|
-
"
|
|
2034
|
-
"
|
|
2333
|
+
"Related sibling content groups on one surface need stronger visual separation than spacing alone provides.",
|
|
2334
|
+
"A list or panel needs an inset separator that does not define the outer edge of its container.",
|
|
2335
|
+
"Meaningful document or group structure requires an explicit horizontal or vertical separator."
|
|
2035
2336
|
],
|
|
2036
2337
|
"avoidWhen": [
|
|
2037
|
-
"
|
|
2038
|
-
"The
|
|
2039
|
-
"The
|
|
2338
|
+
"Spacing alone communicates the grouping clearly.",
|
|
2339
|
+
"The line defines a container edge, control outline, or selected state; use the owning component's border treatment.",
|
|
2340
|
+
"The divider would compensate for weak headings or unclear information hierarchy.",
|
|
2341
|
+
"A decorative flourish does not clarify grouping."
|
|
2040
2342
|
],
|
|
2041
2343
|
"alternatives": [
|
|
2042
2344
|
{
|
|
2043
|
-
"when": "
|
|
2044
|
-
"component": "component:ds-
|
|
2045
|
-
"reason": "
|
|
2046
|
-
},
|
|
2047
|
-
{
|
|
2048
|
-
"when": "The value is an immediate on/off setting.",
|
|
2049
|
-
"component": "component:ds-switch",
|
|
2050
|
-
"reason": "Switch communicates a binary setting instead of free text entry."
|
|
2345
|
+
"when": "Content needs an enclosing surface and outer boundary.",
|
|
2346
|
+
"component": "component:ds-card",
|
|
2347
|
+
"reason": "Card owns container chrome, structure, and edge treatment."
|
|
2051
2348
|
},
|
|
2052
2349
|
{
|
|
2053
|
-
"when": "
|
|
2054
|
-
"component": "component:ds-
|
|
2055
|
-
"reason": "
|
|
2350
|
+
"when": "A static compact label is being used to name a group.",
|
|
2351
|
+
"component": "component:ds-text",
|
|
2352
|
+
"reason": "Text communicates hierarchy directly instead of relying on a line."
|
|
2056
2353
|
}
|
|
2057
2354
|
],
|
|
2058
2355
|
"commonlyComposedWith": [
|
|
2059
|
-
"component:ds-
|
|
2060
|
-
"component:ds-
|
|
2061
|
-
"component:ds-
|
|
2356
|
+
"component:ds-card",
|
|
2357
|
+
"component:ds-menu",
|
|
2358
|
+
"component:ds-panel-sub-nav"
|
|
2359
|
+
],
|
|
2360
|
+
"accessibility": [
|
|
2361
|
+
"Keep purely visual dividers hidden from assistive technology.",
|
|
2362
|
+
"Expose separator semantics only when the line represents meaningful document or group structure.",
|
|
2363
|
+
"Semantic orientation must match the divider's visual orientation.",
|
|
2364
|
+
"Do not use a semantic divider as a substitute for headings, landmarks, or explicit group labels."
|
|
2365
|
+
],
|
|
2366
|
+
"states": [
|
|
2367
|
+
"Horizontal and vertical variants separate sibling groups along the parent's layout axis.",
|
|
2368
|
+
"The omitted background context is for primary and secondary surfaces. Explicit faint documents a faint surface while using the same standard divider token.",
|
|
2369
|
+
"Other background contexts select their matching divider token, including navigation where Divider is composed inside app chrome.",
|
|
2370
|
+
"Inset is symmetric along the line axis. Explicit length is reserved for layout-specific separators; otherwise the line fills the available axis."
|
|
2371
|
+
],
|
|
2372
|
+
"responsiveBehavior": [
|
|
2373
|
+
"The parent layout decides whether to change orientation, visibility, inset, or length at responsive breakpoints.",
|
|
2374
|
+
"Divider does not infer layout direction or hide itself responsively."
|
|
2375
|
+
],
|
|
2376
|
+
"frameworkCaveats": {
|
|
2377
|
+
"customElements": [
|
|
2378
|
+
"Set semantic mode only from known document structure; presentation alone should remain hidden from assistive technology."
|
|
2379
|
+
],
|
|
2380
|
+
"react": [
|
|
2381
|
+
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
2382
|
+
],
|
|
2383
|
+
"angular": [
|
|
2384
|
+
"Derive orientation and visibility from the parent layout rather than viewport logic inside Divider."
|
|
2385
|
+
]
|
|
2386
|
+
},
|
|
2387
|
+
"references": [
|
|
2388
|
+
{
|
|
2389
|
+
"label": "Storybook examples",
|
|
2390
|
+
"path": "src/wc/components/Divider/Divider.stories.ts"
|
|
2391
|
+
}
|
|
2392
|
+
]
|
|
2393
|
+
},
|
|
2394
|
+
"api": {
|
|
2395
|
+
"props": {
|
|
2396
|
+
"background": {
|
|
2397
|
+
"type": "DividerBackground | undefined",
|
|
2398
|
+
"required": false
|
|
2399
|
+
},
|
|
2400
|
+
"inset": {
|
|
2401
|
+
"type": "DividerInset",
|
|
2402
|
+
"required": false
|
|
2403
|
+
},
|
|
2404
|
+
"length": {
|
|
2405
|
+
"type": "DividerLength",
|
|
2406
|
+
"required": false
|
|
2407
|
+
},
|
|
2408
|
+
"orientation": {
|
|
2409
|
+
"type": "DividerOrientation",
|
|
2410
|
+
"required": false
|
|
2411
|
+
},
|
|
2412
|
+
"semantic": {
|
|
2413
|
+
"type": "boolean",
|
|
2414
|
+
"required": false
|
|
2415
|
+
}
|
|
2416
|
+
},
|
|
2417
|
+
"events": [],
|
|
2418
|
+
"slots": []
|
|
2419
|
+
},
|
|
2420
|
+
"exports": {
|
|
2421
|
+
"customElement": "ds-divider",
|
|
2422
|
+
"react": "DsDivider",
|
|
2423
|
+
"angular": "DsDivider"
|
|
2424
|
+
},
|
|
2425
|
+
"dependencies": [
|
|
2426
|
+
"@ds-mo/ui",
|
|
2427
|
+
"@ds-mo/tokens"
|
|
2428
|
+
],
|
|
2429
|
+
"componentDependencies": []
|
|
2430
|
+
},
|
|
2431
|
+
{
|
|
2432
|
+
"id": "component:ds-empty-state",
|
|
2433
|
+
"tag": "ds-empty-state",
|
|
2434
|
+
"name": "empty-state",
|
|
2435
|
+
"title": "EmptyState",
|
|
2436
|
+
"summary": "Centered empty-content message composed as icon plus title plus body, title plus body, or compact body-only content.",
|
|
2437
|
+
"intentStatus": "complete",
|
|
2438
|
+
"intent": {
|
|
2439
|
+
"audience": "general",
|
|
2440
|
+
"status": "stable",
|
|
2441
|
+
"summary": "Centered empty-content message composed as icon plus title plus body, title plus body, or compact body-only content.",
|
|
2442
|
+
"useWhen": [
|
|
2443
|
+
"A bounded content area is in a first-use, no-content, filtered no-results, or no-access state and needs a calm explanatory message tailored to that cause.",
|
|
2444
|
+
"A prominent empty region benefits from a decorative icon, visual title, and supporting body copy.",
|
|
2445
|
+
"A compact owner such as a Select popup needs only centered body copy."
|
|
2446
|
+
],
|
|
2447
|
+
"avoidWhen": [
|
|
2448
|
+
"Content is still loading; use Skeleton for predictable structure or Loader for an indeterminate operation.",
|
|
2449
|
+
"The state is an error, warning, or confirmation that needs semantic intent and announcement from the owning workflow.",
|
|
2450
|
+
"The state needs a recovery action, link, or other interactive content; the current EmptyState pattern is intentionally message-only.",
|
|
2451
|
+
"A decorative illustration, arbitrary rich content, or custom layout is required."
|
|
2452
|
+
],
|
|
2453
|
+
"alternatives": [
|
|
2454
|
+
{
|
|
2455
|
+
"when": "A content region is waiting for structured data.",
|
|
2456
|
+
"component": "component:ds-skeleton",
|
|
2457
|
+
"reason": "Skeleton preserves expected geometry while content is pending."
|
|
2458
|
+
},
|
|
2459
|
+
{
|
|
2460
|
+
"when": "An operation is progressing without predictable content structure.",
|
|
2461
|
+
"component": "component:ds-loader",
|
|
2462
|
+
"reason": "Loader owns indeterminate progress rather than an empty outcome."
|
|
2463
|
+
},
|
|
2464
|
+
{
|
|
2465
|
+
"when": "Only ordinary prose is needed without empty-state layout.",
|
|
2466
|
+
"component": "component:ds-text",
|
|
2467
|
+
"reason": "Text owns typography without adding centered empty-state composition."
|
|
2468
|
+
}
|
|
2469
|
+
],
|
|
2470
|
+
"commonlyComposedWith": [
|
|
2471
|
+
"component:ds-select",
|
|
2472
|
+
"component:ds-text",
|
|
2473
|
+
"component:ds-icon"
|
|
2474
|
+
],
|
|
2475
|
+
"accessibility": [
|
|
2476
|
+
"The optional icon is decorative; the title and body provide all meaning in text.",
|
|
2477
|
+
"EmptyState does not create a live region or alert automatically. The owner decides whether a dynamic transition requires announcement.",
|
|
2478
|
+
"The visual title does not impose a document heading level because the correct hierarchy belongs to the consuming page or region.",
|
|
2479
|
+
"Keep localized body copy concise and sufficient when using the body-only variant."
|
|
2480
|
+
],
|
|
2481
|
+
"states": [
|
|
2482
|
+
"Supported compositions are icon plus title plus body, title plus body, and body only; body copy is present in every supported composition.",
|
|
2483
|
+
"The decorative icon renders at xl in the primary foreground with an 8px gap before the text group and only when a title is also provided.",
|
|
2484
|
+
"The visual title uses title-small primary text; body uses body-medium secondary text with a 4px title-to-body gap.",
|
|
2485
|
+
"All content is centered. The owner supplies container size and surrounding padding; do not compose actions into or immediately alongside the current EmptyState pattern.",
|
|
2486
|
+
"First-use, no-content, no-results, and no-access states reuse this primitive with cause-specific localized messages rather than visual variants."
|
|
2487
|
+
],
|
|
2488
|
+
"responsiveBehavior": [
|
|
2489
|
+
"The owner controls available width and height; text wraps naturally while remaining centered.",
|
|
2490
|
+
"EmptyState does not infer breakpoints or change composition automatically."
|
|
2491
|
+
],
|
|
2492
|
+
"frameworkCaveats": {
|
|
2493
|
+
"customElements": [
|
|
2494
|
+
"Pass canonical IcoMo icon names and localized heading/body strings through properties or attributes."
|
|
2495
|
+
],
|
|
2496
|
+
"react": [
|
|
2497
|
+
"Choose one supported composition by passing body with optional heading and icon props."
|
|
2498
|
+
],
|
|
2499
|
+
"angular": [
|
|
2500
|
+
"Choose one supported composition by binding body with optional heading and icon inputs."
|
|
2501
|
+
]
|
|
2502
|
+
},
|
|
2503
|
+
"references": [
|
|
2504
|
+
{
|
|
2505
|
+
"label": "Storybook examples",
|
|
2506
|
+
"path": "src/wc/components/EmptyState/EmptyState.stories.ts"
|
|
2507
|
+
}
|
|
2508
|
+
]
|
|
2509
|
+
},
|
|
2510
|
+
"api": {
|
|
2511
|
+
"props": {
|
|
2512
|
+
"body": {
|
|
2513
|
+
"type": "string",
|
|
2514
|
+
"required": false
|
|
2515
|
+
},
|
|
2516
|
+
"heading": {
|
|
2517
|
+
"type": "string | undefined",
|
|
2518
|
+
"required": false
|
|
2519
|
+
},
|
|
2520
|
+
"icon": {
|
|
2521
|
+
"type": "string | undefined",
|
|
2522
|
+
"required": false
|
|
2523
|
+
}
|
|
2524
|
+
},
|
|
2525
|
+
"events": [],
|
|
2526
|
+
"slots": []
|
|
2527
|
+
},
|
|
2528
|
+
"exports": {
|
|
2529
|
+
"customElement": "ds-empty-state",
|
|
2530
|
+
"react": "DsEmptyState",
|
|
2531
|
+
"angular": "DsEmptyState"
|
|
2532
|
+
},
|
|
2533
|
+
"dependencies": [
|
|
2534
|
+
"@ds-mo/ui",
|
|
2535
|
+
"@ds-mo/tokens",
|
|
2536
|
+
"@ds-mo/icons"
|
|
2537
|
+
],
|
|
2538
|
+
"componentDependencies": [
|
|
2539
|
+
"icon",
|
|
2540
|
+
"text"
|
|
2541
|
+
]
|
|
2542
|
+
},
|
|
2543
|
+
{
|
|
2544
|
+
"id": "component:ds-field",
|
|
2545
|
+
"tag": "ds-field",
|
|
2546
|
+
"name": "field",
|
|
2547
|
+
"title": "Field",
|
|
2548
|
+
"summary": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
2549
|
+
"intentStatus": "complete",
|
|
2550
|
+
"intent": {
|
|
2551
|
+
"audience": "general",
|
|
2552
|
+
"status": "stable",
|
|
2553
|
+
"summary": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
2554
|
+
"useWhen": [
|
|
2555
|
+
"An Input, Select, or SelectMulti needs a persistent visible label in a form.",
|
|
2556
|
+
"Help text or an error message must be programmatically associated with one control.",
|
|
2557
|
+
"A form layout needs one consistent label-control-message rhythm."
|
|
2558
|
+
],
|
|
2559
|
+
"avoidWhen": [
|
|
2560
|
+
"The component already owns its visible label and complete selection semantics, such as Checkbox, Radio, or Switch.",
|
|
2561
|
+
"Several controls belong to one question; use a semantic fieldset and legend instead.",
|
|
2562
|
+
"Text describes a region or group rather than one form control."
|
|
2563
|
+
],
|
|
2564
|
+
"alternatives": [
|
|
2565
|
+
{
|
|
2566
|
+
"when": "Several related controls answer one question.",
|
|
2567
|
+
"component": "component:ds-text",
|
|
2568
|
+
"reason": "Use native fieldset and legend semantics, then compose Text only for supporting content."
|
|
2569
|
+
}
|
|
2570
|
+
],
|
|
2571
|
+
"commonlyComposedWith": [
|
|
2572
|
+
"component:ds-input",
|
|
2573
|
+
"component:ds-select",
|
|
2574
|
+
"component:ds-select-multi",
|
|
2575
|
+
"component:ds-text"
|
|
2576
|
+
],
|
|
2577
|
+
"accessibility": [
|
|
2578
|
+
"Slot exactly one form control. Field assigns its stable control ID and connects the visible label automatically.",
|
|
2579
|
+
"The visible description or error ID is merged with any authored aria-describedby references; a rendered error replaces the description.",
|
|
2580
|
+
"The error prop forwards aria-invalid and supported design-system control error styling; put visible error text on Field, not again on the child control.",
|
|
2581
|
+
"Clicking the label focuses the slotted design-system control without opening a Select popup.",
|
|
2582
|
+
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
2583
|
+
],
|
|
2584
|
+
"states": [
|
|
2585
|
+
"Field exposes data-focused, data-filled, data-dirty, data-touched, data-invalid, data-disabled, and data-required hooks while the slotted control remains the source of value and interaction behavior.",
|
|
2586
|
+
"A rendered error replaces the description; preserve essential guidance in the error message so users retain what they need to correct the field.",
|
|
2587
|
+
"Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
|
|
2588
|
+
"The label uses primary body-small emphasis, description uses secondary body-small text, and error uses negative body-small text."
|
|
2589
|
+
],
|
|
2590
|
+
"responsiveBehavior": [
|
|
2591
|
+
"Field fills the width supplied by its parent and makes the slotted control fill that field width.",
|
|
2592
|
+
"The form layout owns column count, wrapping, and responsive placement; Field keeps the vertical label-control-message composition intact."
|
|
2593
|
+
],
|
|
2594
|
+
"frameworkCaveats": {
|
|
2595
|
+
"customElements": [
|
|
2596
|
+
"Set fieldId only when another element must reference a predictable control ID; otherwise use the generated association.",
|
|
2597
|
+
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
2598
|
+
],
|
|
2599
|
+
"react": [
|
|
2600
|
+
"Compose one DsInput, DsSelect, or DsSelectMulti child and control validation timing in the form owner."
|
|
2601
|
+
],
|
|
2602
|
+
"angular": [
|
|
2603
|
+
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
2604
|
+
]
|
|
2605
|
+
},
|
|
2606
|
+
"references": [
|
|
2607
|
+
{
|
|
2608
|
+
"label": "Storybook examples",
|
|
2609
|
+
"path": "src/wc/components/Field/Field.stories.ts"
|
|
2610
|
+
},
|
|
2611
|
+
{
|
|
2612
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
2613
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
2614
|
+
}
|
|
2615
|
+
]
|
|
2616
|
+
},
|
|
2617
|
+
"api": {
|
|
2618
|
+
"props": {
|
|
2619
|
+
"description": {
|
|
2620
|
+
"type": "string | undefined",
|
|
2621
|
+
"required": false
|
|
2622
|
+
},
|
|
2623
|
+
"error": {
|
|
2624
|
+
"type": "boolean",
|
|
2625
|
+
"required": false
|
|
2626
|
+
},
|
|
2627
|
+
"errorMessage": {
|
|
2628
|
+
"type": "string | undefined",
|
|
2629
|
+
"required": false
|
|
2630
|
+
},
|
|
2631
|
+
"fieldId": {
|
|
2632
|
+
"type": "string | undefined",
|
|
2633
|
+
"required": false
|
|
2634
|
+
},
|
|
2635
|
+
"label": {
|
|
2636
|
+
"type": "string",
|
|
2637
|
+
"required": true
|
|
2638
|
+
}
|
|
2639
|
+
},
|
|
2640
|
+
"events": [],
|
|
2641
|
+
"slots": []
|
|
2642
|
+
},
|
|
2643
|
+
"exports": {
|
|
2644
|
+
"customElement": "ds-field",
|
|
2645
|
+
"react": "DsField",
|
|
2646
|
+
"angular": "DsField"
|
|
2647
|
+
},
|
|
2648
|
+
"dependencies": [
|
|
2649
|
+
"@ds-mo/ui",
|
|
2650
|
+
"@ds-mo/tokens"
|
|
2651
|
+
],
|
|
2652
|
+
"componentDependencies": [
|
|
2653
|
+
"text"
|
|
2654
|
+
]
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
"id": "component:ds-icon",
|
|
2658
|
+
"tag": "ds-icon",
|
|
2659
|
+
"name": "icon",
|
|
2660
|
+
"title": "Icon",
|
|
2661
|
+
"summary": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
2662
|
+
"intentStatus": "complete",
|
|
2663
|
+
"intent": {
|
|
2664
|
+
"audience": "general",
|
|
2665
|
+
"status": "stable",
|
|
2666
|
+
"summary": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
2667
|
+
"useWhen": [
|
|
2668
|
+
"An approved IcoMo system glyph supplements visible text or control chrome.",
|
|
2669
|
+
"A canonical flag glyph communicates a country or region with adjacent text or an explicit localized label.",
|
|
2670
|
+
"A standalone non-interactive symbol conveys meaning that is unavailable from nearby text."
|
|
2671
|
+
],
|
|
2672
|
+
"avoidWhen": [
|
|
2673
|
+
"The glyph itself must be clickable or keyboard interactive; use an appropriate button or link and compose Icon inside it.",
|
|
2674
|
+
"The visual is an illustration, logo, chart, or arbitrary SVG artwork rather than a canonical IcoMo glyph.",
|
|
2675
|
+
"An alias, guessed name, or case-insensitive lookup would be required; runtime lookup uses exact canonical export names.",
|
|
2676
|
+
"A fallback glyph would be required when loading fails; Icon intentionally preserves an empty fixed-size box."
|
|
2677
|
+
],
|
|
2678
|
+
"alternatives": [
|
|
2679
|
+
{
|
|
2680
|
+
"when": "The icon initiates an action or persistent toggle.",
|
|
2681
|
+
"component": "component:ds-button-unfilled",
|
|
2682
|
+
"reason": "ButtonUnfilled owns interaction, focus, naming, and toggle semantics."
|
|
2683
|
+
},
|
|
2684
|
+
{
|
|
2685
|
+
"when": "The visual communicates indeterminate loading progress.",
|
|
2686
|
+
"component": "component:ds-loader",
|
|
2687
|
+
"reason": "Loader owns progress status and motion behavior."
|
|
2688
|
+
},
|
|
2689
|
+
{
|
|
2690
|
+
"when": "The compact visual is an unread count or notification dot.",
|
|
2691
|
+
"component": "component:ds-badge",
|
|
2692
|
+
"reason": "Badge owns supplemental notification semantics."
|
|
2693
|
+
}
|
|
2694
|
+
],
|
|
2695
|
+
"commonlyComposedWith": [
|
|
2696
|
+
"component:ds-button-filled",
|
|
2697
|
+
"component:ds-button-unfilled",
|
|
2698
|
+
"component:ds-menu",
|
|
2699
|
+
"component:ds-panel-nav"
|
|
2700
|
+
],
|
|
2701
|
+
"accessibility": [
|
|
2702
|
+
"Icons are decorative by default and remain hidden from assistive technology when visible text or an owning control already communicates the meaning.",
|
|
2703
|
+
"The owning button, link, or composite control provides the accessible name; do not repeat that name on its nested Icon.",
|
|
2704
|
+
"Provide an explicit label only when the non-interactive icon itself communicates otherwise unavailable meaning.",
|
|
2705
|
+
"Tertiary and quaternary foregrounds are restricted to icons inside genuinely inactive or disabled UI, or to purely decorative icons; quaternary is the fainter tier, and informative icons and meaningful status graphics retain sufficient rendered contrast even when aria-hidden.",
|
|
2706
|
+
"Informative flags require an explicit localized country or region label; never derive accessible text from the export name.",
|
|
2707
|
+
"Icon never receives focus or owns interaction."
|
|
2708
|
+
],
|
|
2709
|
+
"states": [
|
|
2710
|
+
"Omitted color inherits currentColor from the owning context. Explicit semantic aliases and CSS-variable references are available when the icon has an independent color role.",
|
|
2711
|
+
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
2712
|
+
"Built-in glyph lookup accepts exact canonical IcoMo export names only. Names beginning with Flag select the flag catalog automatically.",
|
|
2713
|
+
"A cache miss lazy-loads into a fixed-size box without layout shift. Unknown names, failed loads, and rejected markup leave that box empty.",
|
|
2714
|
+
"Critical first-paint glyphs may be pre-registered before rendering; all resolved glyphs share a global cache.",
|
|
2715
|
+
"Every SVG is validated at the render boundary and injected as parsed DOM nodes so app-registered markup cannot bypass executable-content or external-reference checks."
|
|
2716
|
+
],
|
|
2717
|
+
"responsiveBehavior": [
|
|
2718
|
+
"The owning component or layout chooses icon size and any responsive changes.",
|
|
2719
|
+
"Icon does not scale from viewport width or change glyphs automatically."
|
|
2720
|
+
],
|
|
2721
|
+
"frameworkCaveats": {
|
|
2722
|
+
"customElements": [
|
|
2723
|
+
"Import each canonical glyph as an SVG string and call registerIcons before first render when synchronous critical-icon paint is required."
|
|
2724
|
+
],
|
|
2725
|
+
"react": [
|
|
2726
|
+
"Keep nested control icons decorative and place the accessible name on the owning React control."
|
|
2727
|
+
],
|
|
2728
|
+
"angular": [
|
|
2729
|
+
"Keep nested control icons decorative and place the accessible name on the owning Angular control."
|
|
2730
|
+
]
|
|
2731
|
+
},
|
|
2732
|
+
"references": [
|
|
2733
|
+
{
|
|
2734
|
+
"label": "Storybook examples",
|
|
2735
|
+
"path": "src/wc/components/Icon/Icon.stories.ts"
|
|
2736
|
+
},
|
|
2737
|
+
{
|
|
2738
|
+
"label": "Preload API guidance",
|
|
2739
|
+
"path": "src/wc/components/Icon/icon-cache.ts"
|
|
2740
|
+
}
|
|
2741
|
+
]
|
|
2742
|
+
},
|
|
2743
|
+
"api": {
|
|
2744
|
+
"props": {
|
|
2745
|
+
"color": {
|
|
2746
|
+
"type": "IconColor",
|
|
2747
|
+
"required": false
|
|
2748
|
+
},
|
|
2749
|
+
"label": {
|
|
2750
|
+
"type": "string | undefined",
|
|
2751
|
+
"required": false
|
|
2752
|
+
},
|
|
2753
|
+
"name": {
|
|
2754
|
+
"type": "string",
|
|
2755
|
+
"required": false
|
|
2756
|
+
},
|
|
2757
|
+
"size": {
|
|
2758
|
+
"type": "IconSize",
|
|
2759
|
+
"required": false
|
|
2760
|
+
}
|
|
2761
|
+
},
|
|
2762
|
+
"events": [],
|
|
2763
|
+
"slots": []
|
|
2764
|
+
},
|
|
2765
|
+
"exports": {
|
|
2766
|
+
"customElement": "ds-icon",
|
|
2767
|
+
"react": "DsIcon",
|
|
2768
|
+
"angular": "DsIcon"
|
|
2769
|
+
},
|
|
2770
|
+
"dependencies": [
|
|
2771
|
+
"@ds-mo/ui",
|
|
2772
|
+
"@ds-mo/tokens",
|
|
2773
|
+
"@ds-mo/icons"
|
|
2774
|
+
],
|
|
2775
|
+
"componentDependencies": []
|
|
2776
|
+
},
|
|
2777
|
+
{
|
|
2778
|
+
"id": "component:ds-input",
|
|
2779
|
+
"tag": "ds-input",
|
|
2780
|
+
"name": "input",
|
|
2781
|
+
"title": "Input",
|
|
2782
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, three control densities, optional leading and trailing content, search clearing, and validation.",
|
|
2783
|
+
"intentStatus": "complete",
|
|
2784
|
+
"intent": {
|
|
2785
|
+
"audience": "general",
|
|
2786
|
+
"status": "stable",
|
|
2787
|
+
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native text input behavior, three control densities, optional leading and trailing content, search clearing, and validation.",
|
|
2788
|
+
"useWhen": [
|
|
2789
|
+
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, or password.",
|
|
2790
|
+
"The value must participate in native, Angular, or React form state.",
|
|
2791
|
+
"A compact filter or toolbar needs a single-line search field that follows the shared control-density recipe."
|
|
2792
|
+
],
|
|
2793
|
+
"avoidWhen": [
|
|
2794
|
+
"The user chooses from a finite set of known values.",
|
|
2795
|
+
"The user must enter multiple paragraphs or formatted content.",
|
|
2796
|
+
"The value is adjusted primarily by dragging within a numeric range."
|
|
2797
|
+
],
|
|
2798
|
+
"alternatives": [
|
|
2799
|
+
{
|
|
2800
|
+
"when": "The value comes from a finite set of known choices.",
|
|
2801
|
+
"component": "component:ds-select",
|
|
2802
|
+
"reason": "Select exposes the available values and owns listbox selection behavior."
|
|
2803
|
+
},
|
|
2804
|
+
{
|
|
2805
|
+
"when": "The value is an immediate on/off setting.",
|
|
2806
|
+
"component": "component:ds-switch",
|
|
2807
|
+
"reason": "Switch communicates a binary setting instead of free text entry."
|
|
2808
|
+
},
|
|
2809
|
+
{
|
|
2810
|
+
"when": "The value is chosen from a bounded numeric range.",
|
|
2811
|
+
"component": "component:ds-slider",
|
|
2812
|
+
"reason": "Slider supports direct range adjustment and communicates the current position."
|
|
2813
|
+
}
|
|
2814
|
+
],
|
|
2815
|
+
"commonlyComposedWith": [
|
|
2816
|
+
"component:ds-field",
|
|
2817
|
+
"component:ds-icon",
|
|
2818
|
+
"component:ds-text"
|
|
2819
|
+
],
|
|
2820
|
+
"accessibility": [
|
|
2821
|
+
"Provide a persistent visible label through the owning field or an external native label; placeholder text is guidance and must not be the field's only label.",
|
|
2822
|
+
"Choose the native input type that matches the value so browsers and assistive technology can provide appropriate semantics and keyboards.",
|
|
2823
|
+
"Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
|
|
2824
|
+
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
|
|
2825
|
+
"Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
|
|
2826
|
+
],
|
|
2827
|
+
"states": [
|
|
2828
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry.",
|
|
2829
|
+
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
|
|
2830
|
+
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
2831
|
+
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
2832
|
+
"The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
|
|
2833
|
+
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
2834
|
+
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
2835
|
+
"Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
|
|
2836
|
+
],
|
|
2837
|
+
"responsiveBehavior": [
|
|
2838
|
+
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
2839
|
+
"Choose density from the containing layout: md for ordinary forms, sm or xs only where the surrounding controls use the same compact recipe.",
|
|
2840
|
+
"The owner supplies layout constraints and decides when a compact field moves to its own row."
|
|
2841
|
+
],
|
|
2842
|
+
"frameworkCaveats": {
|
|
2843
|
+
"customElements": [
|
|
2844
|
+
"Listen for dsChange for user edits and dsClear for the search clear action.",
|
|
2845
|
+
"Use the form attribute on the host when associating an input rendered outside its owning form."
|
|
2846
|
+
],
|
|
2847
|
+
"react": [
|
|
2848
|
+
"Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear."
|
|
2849
|
+
],
|
|
2850
|
+
"angular": [
|
|
2851
|
+
"Import DsInput with TextValueAccessor when integrating with Angular Forms."
|
|
2852
|
+
]
|
|
2853
|
+
},
|
|
2854
|
+
"references": [
|
|
2855
|
+
{
|
|
2856
|
+
"label": "Storybook examples",
|
|
2857
|
+
"path": "src/wc/components/Input/Input.stories.ts"
|
|
2858
|
+
},
|
|
2859
|
+
{
|
|
2860
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
2861
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
2862
|
+
}
|
|
2863
|
+
]
|
|
2864
|
+
},
|
|
2865
|
+
"api": {
|
|
2866
|
+
"props": {
|
|
2867
|
+
"ariaDescribedby": {
|
|
2868
|
+
"type": "string | undefined",
|
|
2869
|
+
"required": false
|
|
2870
|
+
},
|
|
2871
|
+
"ariaLabel": {
|
|
2872
|
+
"type": "string | null",
|
|
2873
|
+
"required": false
|
|
2874
|
+
},
|
|
2875
|
+
"ariaLabelledby": {
|
|
2876
|
+
"type": "string | undefined",
|
|
2877
|
+
"required": false
|
|
2878
|
+
},
|
|
2879
|
+
"autoComplete": {
|
|
2880
|
+
"type": "string | undefined",
|
|
2881
|
+
"required": false
|
|
2882
|
+
},
|
|
2883
|
+
"autoFocus": {
|
|
2884
|
+
"type": "boolean",
|
|
2885
|
+
"required": false
|
|
2886
|
+
},
|
|
2887
|
+
"clearLabel": {
|
|
2888
|
+
"type": "string",
|
|
2889
|
+
"required": false
|
|
2890
|
+
},
|
|
2891
|
+
"disabled": {
|
|
2892
|
+
"type": "boolean",
|
|
2893
|
+
"required": false
|
|
2894
|
+
},
|
|
2895
|
+
"enterKeyHint": {
|
|
2896
|
+
"type": "string",
|
|
2897
|
+
"required": false
|
|
2898
|
+
},
|
|
2899
|
+
"error": {
|
|
2900
|
+
"type": "boolean",
|
|
2901
|
+
"required": false
|
|
2902
|
+
},
|
|
2903
|
+
"errorMessage": {
|
|
2904
|
+
"type": "string | undefined",
|
|
2905
|
+
"required": false
|
|
2906
|
+
},
|
|
2907
|
+
"form": {
|
|
2908
|
+
"type": "string | undefined",
|
|
2909
|
+
"required": false
|
|
2910
|
+
},
|
|
2911
|
+
"hasBorder": {
|
|
2912
|
+
"type": "boolean",
|
|
2913
|
+
"required": false
|
|
2914
|
+
},
|
|
2915
|
+
"icon": {
|
|
2916
|
+
"type": "string | undefined",
|
|
2917
|
+
"required": false
|
|
2918
|
+
},
|
|
2919
|
+
"inputId": {
|
|
2920
|
+
"type": "string | undefined",
|
|
2921
|
+
"required": false
|
|
2922
|
+
},
|
|
2923
|
+
"inputMode": {
|
|
2924
|
+
"type": "string",
|
|
2925
|
+
"required": false
|
|
2926
|
+
},
|
|
2927
|
+
"isInactive": {
|
|
2928
|
+
"type": "boolean",
|
|
2929
|
+
"required": false
|
|
2930
|
+
},
|
|
2931
|
+
"name": {
|
|
2932
|
+
"type": "string | undefined",
|
|
2933
|
+
"required": false
|
|
2934
|
+
},
|
|
2935
|
+
"placeholder": {
|
|
2936
|
+
"type": "string | undefined",
|
|
2937
|
+
"required": false
|
|
2938
|
+
},
|
|
2939
|
+
"readOnly": {
|
|
2940
|
+
"type": "boolean",
|
|
2941
|
+
"required": false
|
|
2942
|
+
},
|
|
2943
|
+
"required": {
|
|
2944
|
+
"type": "boolean",
|
|
2945
|
+
"required": false
|
|
2946
|
+
},
|
|
2947
|
+
"requiredMessage": {
|
|
2948
|
+
"type": "string",
|
|
2949
|
+
"required": false
|
|
2950
|
+
},
|
|
2951
|
+
"size": {
|
|
2952
|
+
"type": "InputSize",
|
|
2953
|
+
"required": false
|
|
2954
|
+
},
|
|
2955
|
+
"type": {
|
|
2956
|
+
"type": "InputType",
|
|
2957
|
+
"required": false
|
|
2958
|
+
},
|
|
2959
|
+
"value": {
|
|
2960
|
+
"type": "string",
|
|
2961
|
+
"required": false
|
|
2962
|
+
},
|
|
2963
|
+
"width": {
|
|
2964
|
+
"type": "InputWidth",
|
|
2965
|
+
"required": false
|
|
2966
|
+
}
|
|
2967
|
+
},
|
|
2968
|
+
"events": [
|
|
2969
|
+
{
|
|
2970
|
+
"name": "dsChange",
|
|
2971
|
+
"detail": "string"
|
|
2972
|
+
},
|
|
2973
|
+
{
|
|
2974
|
+
"name": "dsClear",
|
|
2975
|
+
"detail": "void"
|
|
2976
|
+
}
|
|
2977
|
+
],
|
|
2978
|
+
"slots": []
|
|
2979
|
+
},
|
|
2980
|
+
"exports": {
|
|
2981
|
+
"customElement": "ds-input",
|
|
2982
|
+
"react": "DsInput",
|
|
2983
|
+
"angular": "DsInput"
|
|
2984
|
+
},
|
|
2985
|
+
"dependencies": [
|
|
2986
|
+
"@ds-mo/ui",
|
|
2987
|
+
"@ds-mo/tokens",
|
|
2988
|
+
"@ds-mo/icons"
|
|
2989
|
+
],
|
|
2990
|
+
"componentDependencies": [
|
|
2991
|
+
"button-unfilled",
|
|
2992
|
+
"icon",
|
|
2993
|
+
"text"
|
|
2994
|
+
]
|
|
2995
|
+
},
|
|
2996
|
+
{
|
|
2997
|
+
"id": "component:ds-loader",
|
|
2998
|
+
"tag": "ds-loader",
|
|
2999
|
+
"name": "loader",
|
|
3000
|
+
"title": "Loader",
|
|
3001
|
+
"summary": "Indeterminate progress glyph for ongoing operations, inheriting owner color and optionally exposing standalone polite status text.",
|
|
3002
|
+
"intentStatus": "complete",
|
|
3003
|
+
"intent": {
|
|
3004
|
+
"audience": "general",
|
|
3005
|
+
"status": "stable",
|
|
3006
|
+
"summary": "Indeterminate progress glyph for ongoing operations, inheriting owner color and optionally exposing standalone polite status text.",
|
|
3007
|
+
"useWhen": [
|
|
3008
|
+
"An action or operation is in progress and its remaining duration cannot be quantified.",
|
|
3009
|
+
"A button, field, or bounded workflow needs a compact visual busy indicator owned by that control or region.",
|
|
3010
|
+
"A standalone operation needs a visible spinner with contextual polite status text."
|
|
3011
|
+
],
|
|
3012
|
+
"avoidWhen": [
|
|
3013
|
+
"Pending content has a predictable structure; use Skeleton to preserve that layout.",
|
|
3014
|
+
"Progress is measurable; use an appropriate determinate progress pattern.",
|
|
3015
|
+
"The UI needs a blocking overlay or automatic centering; the owning layout must provide that structure.",
|
|
3016
|
+
"Success, failure, retry, or completion must be communicated; the owning workflow handles outcomes."
|
|
3017
|
+
],
|
|
3018
|
+
"alternatives": [
|
|
3019
|
+
{
|
|
3020
|
+
"when": "A content region is waiting for structured data.",
|
|
3021
|
+
"component": "component:ds-skeleton",
|
|
3022
|
+
"reason": "Skeleton preserves the expected content geometry while data loads."
|
|
3023
|
+
},
|
|
3024
|
+
{
|
|
3025
|
+
"when": "A static visual symbol is needed without progress semantics.",
|
|
3026
|
+
"component": "component:ds-icon",
|
|
3027
|
+
"reason": "Icon owns non-progress system and flag glyphs."
|
|
3028
|
+
}
|
|
3029
|
+
],
|
|
3030
|
+
"commonlyComposedWith": [
|
|
3031
|
+
"component:ds-button-filled",
|
|
3032
|
+
"component:ds-button-unfilled",
|
|
3033
|
+
"component:ds-input",
|
|
3034
|
+
"component:ds-select"
|
|
3035
|
+
],
|
|
3036
|
+
"accessibility": [
|
|
3037
|
+
"When Loader is nested in a busy button, field, or region, keep it unnamed and expose busy state from the owner.",
|
|
3038
|
+
"Standalone Loader requires contextual status text that explains what is loading; do not rely on a generic visual spinner alone.",
|
|
3039
|
+
"Loader is an informative progress graphic and must retain sufficient rendered contrast; tertiary and quaternary are not supported standalone or informative Loader treatments.",
|
|
3040
|
+
"Avoid duplicate announcements from both Loader and its owning busy region.",
|
|
3041
|
+
"Reduced motion stops rotation while keeping the glyph and status semantics visible."
|
|
3042
|
+
],
|
|
3043
|
+
"states": [
|
|
3044
|
+
"Loader communicates indeterminate progress only and does not emit completion or failure events.",
|
|
3045
|
+
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
3046
|
+
"Nested Loader inherits a readable color from its owning busy control or region rather than selecting tertiary or quaternary directly.",
|
|
3047
|
+
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
3048
|
+
"The owner reserves space and supplies centering or overlay layout so Loader never causes unexpected layout movement."
|
|
3049
|
+
],
|
|
3050
|
+
"responsiveBehavior": [
|
|
3051
|
+
"The owning component or layout chooses Loader size, placement, and any responsive changes.",
|
|
3052
|
+
"Loader does not infer container size or viewport breakpoints."
|
|
3053
|
+
],
|
|
3054
|
+
"frameworkCaveats": {
|
|
3055
|
+
"customElements": [
|
|
3056
|
+
"Use the label only for standalone status; nested usage should synchronize aria-busy on the owning element."
|
|
3057
|
+
],
|
|
3058
|
+
"react": [
|
|
3059
|
+
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
3060
|
+
],
|
|
3061
|
+
"angular": [
|
|
3062
|
+
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
3063
|
+
]
|
|
3064
|
+
},
|
|
3065
|
+
"references": [
|
|
3066
|
+
{
|
|
3067
|
+
"label": "Storybook examples",
|
|
3068
|
+
"path": "src/wc/components/Loader/Loader.stories.ts"
|
|
3069
|
+
}
|
|
3070
|
+
]
|
|
3071
|
+
},
|
|
3072
|
+
"api": {
|
|
3073
|
+
"props": {
|
|
3074
|
+
"color": {
|
|
3075
|
+
"type": "LoaderColor",
|
|
3076
|
+
"required": false
|
|
3077
|
+
},
|
|
3078
|
+
"label": {
|
|
3079
|
+
"type": "string | undefined",
|
|
3080
|
+
"required": false
|
|
3081
|
+
},
|
|
3082
|
+
"size": {
|
|
3083
|
+
"type": "LoaderSize",
|
|
3084
|
+
"required": false
|
|
3085
|
+
}
|
|
3086
|
+
},
|
|
3087
|
+
"events": [],
|
|
3088
|
+
"slots": []
|
|
3089
|
+
},
|
|
3090
|
+
"exports": {
|
|
3091
|
+
"customElement": "ds-loader",
|
|
3092
|
+
"react": "DsLoader",
|
|
3093
|
+
"angular": "DsLoader"
|
|
3094
|
+
},
|
|
3095
|
+
"dependencies": [
|
|
3096
|
+
"@ds-mo/ui",
|
|
3097
|
+
"@ds-mo/tokens"
|
|
3098
|
+
],
|
|
3099
|
+
"componentDependencies": []
|
|
3100
|
+
},
|
|
3101
|
+
{
|
|
3102
|
+
"id": "component:ds-markdown",
|
|
3103
|
+
"tag": "ds-markdown",
|
|
3104
|
+
"name": "markdown",
|
|
3105
|
+
"title": "Markdown",
|
|
3106
|
+
"summary": "Safe CommonMark and GFM renderer built from parsed nodes without raw HTML injection.",
|
|
3107
|
+
"intentStatus": "complete",
|
|
3108
|
+
"intent": {
|
|
3109
|
+
"audience": "specialized",
|
|
3110
|
+
"status": "experimental",
|
|
3111
|
+
"summary": "Safe CommonMark and GFM renderer built from parsed nodes without raw HTML injection.",
|
|
3112
|
+
"useWhen": [
|
|
3113
|
+
"Trusted or untrusted message text needs headings, lists, links, tables, tasks, quotes, and code."
|
|
3114
|
+
],
|
|
3115
|
+
"avoidWhen": [
|
|
3116
|
+
"The application needs arbitrary HTML, custom plugins, or a full document CMS renderer."
|
|
3117
|
+
],
|
|
3118
|
+
"commonlyComposedWith": [
|
|
3119
|
+
"component:ds-code-block",
|
|
3120
|
+
"component:ds-message-bubble"
|
|
3121
|
+
],
|
|
3122
|
+
"patterns": [
|
|
3123
|
+
"pattern:conversation",
|
|
3124
|
+
"pattern:agent-chat"
|
|
2062
3125
|
],
|
|
2063
3126
|
"accessibility": [
|
|
2064
|
-
"
|
|
2065
|
-
"
|
|
2066
|
-
"
|
|
2067
|
-
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
|
|
2068
|
-
"Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
|
|
3127
|
+
"Semantic parsed elements preserve heading, list, table, quote, and code relationships.",
|
|
3128
|
+
"Raw HTML is ignored and unsafe link schemes are not made interactive.",
|
|
3129
|
+
"Link text must remain descriptive in authored content."
|
|
2069
3130
|
],
|
|
2070
3131
|
"states": [
|
|
2071
|
-
"
|
|
2072
|
-
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
|
|
2073
|
-
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
2074
|
-
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
2075
|
-
"The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
|
|
2076
|
-
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
2077
|
-
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
2078
|
-
"Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
|
|
3132
|
+
"Streaming updates are coalesced to one parse and render per animation frame."
|
|
2079
3133
|
],
|
|
2080
3134
|
"responsiveBehavior": [
|
|
2081
|
-
"
|
|
2082
|
-
|
|
2083
|
-
|
|
3135
|
+
"Tables and code scroll horizontally instead of forcing the transcript wider."
|
|
3136
|
+
],
|
|
3137
|
+
"references": [
|
|
3138
|
+
{
|
|
3139
|
+
"label": "Storybook examples",
|
|
3140
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
3141
|
+
}
|
|
3142
|
+
]
|
|
3143
|
+
},
|
|
3144
|
+
"api": {
|
|
3145
|
+
"props": {
|
|
3146
|
+
"content": {
|
|
3147
|
+
"type": "string",
|
|
3148
|
+
"required": false
|
|
3149
|
+
},
|
|
3150
|
+
"streaming": {
|
|
3151
|
+
"type": "boolean",
|
|
3152
|
+
"required": false
|
|
3153
|
+
}
|
|
3154
|
+
},
|
|
3155
|
+
"events": [],
|
|
3156
|
+
"slots": []
|
|
3157
|
+
},
|
|
3158
|
+
"exports": {
|
|
3159
|
+
"customElement": "ds-markdown",
|
|
3160
|
+
"react": "DsMarkdown",
|
|
3161
|
+
"angular": "DsMarkdown"
|
|
3162
|
+
},
|
|
3163
|
+
"dependencies": [
|
|
3164
|
+
"@ds-mo/ui",
|
|
3165
|
+
"@ds-mo/tokens"
|
|
3166
|
+
],
|
|
3167
|
+
"componentDependencies": [
|
|
3168
|
+
"code-block"
|
|
3169
|
+
]
|
|
3170
|
+
},
|
|
3171
|
+
{
|
|
3172
|
+
"id": "component:ds-menu",
|
|
3173
|
+
"tag": "ds-menu",
|
|
3174
|
+
"name": "menu",
|
|
3175
|
+
"title": "Menu",
|
|
3176
|
+
"summary": "Anchored action menu with flat commands, grouped sections, single-selection radio choices, supplemental notification dots, switches, and destructive actions.",
|
|
3177
|
+
"intentStatus": "complete",
|
|
3178
|
+
"intent": {
|
|
3179
|
+
"audience": "general",
|
|
3180
|
+
"status": "stable",
|
|
3181
|
+
"summary": "Anchored action menu with flat commands, grouped sections, single-selection radio choices, supplemental notification dots, switches, and destructive actions.",
|
|
3182
|
+
"useWhen": [
|
|
3183
|
+
"A trigger reveals a short contextual list of commands or state-changing actions.",
|
|
3184
|
+
"Actions need grouping, mutually exclusive selected state, supplemental notification dots, switch rows, or destructive treatment."
|
|
3185
|
+
],
|
|
3186
|
+
"avoidWhen": [
|
|
3187
|
+
"The user is selecting a value for a form field.",
|
|
3188
|
+
"The content requires rich dialog interaction or a multi-step workflow.",
|
|
3189
|
+
"The actions should remain persistently visible."
|
|
3190
|
+
],
|
|
3191
|
+
"alternatives": [
|
|
3192
|
+
{
|
|
3193
|
+
"when": "The choice is a form value with a label, validation, and submitted value.",
|
|
3194
|
+
"component": "component:ds-select",
|
|
3195
|
+
"reason": "Select provides form-control semantics and value ownership."
|
|
3196
|
+
},
|
|
3197
|
+
{
|
|
3198
|
+
"when": "Several form values may be selected.",
|
|
3199
|
+
"component": "component:ds-select-multi",
|
|
3200
|
+
"reason": "SelectMulti provides multi-select listbox semantics, array value ownership, and count presentation."
|
|
3201
|
+
},
|
|
3202
|
+
{
|
|
3203
|
+
"when": "The interaction needs substantial content, confirmation, or a form.",
|
|
3204
|
+
"component": "component:ds-modal",
|
|
3205
|
+
"reason": "Modal owns focus containment and dialog-level interaction."
|
|
3206
|
+
}
|
|
3207
|
+
],
|
|
3208
|
+
"commonlyComposedWith": [
|
|
3209
|
+
"component:ds-button-unfilled",
|
|
3210
|
+
"component:ds-panel-nav",
|
|
3211
|
+
"component:ds-switch",
|
|
3212
|
+
"component:ds-swatch-picker"
|
|
3213
|
+
],
|
|
3214
|
+
"patterns": [
|
|
3215
|
+
"pattern:menu-trigger"
|
|
3216
|
+
],
|
|
3217
|
+
"accessibility": [
|
|
3218
|
+
"Anchor the menu to the control that opens it and return focus to that control when the menu closes.",
|
|
3219
|
+
"Open with visible initial focus only when the trigger was activated from the keyboard.",
|
|
3220
|
+
"Keep disabled items discoverable only when their unavailable state is meaningful.",
|
|
3221
|
+
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden md presentation indicator.",
|
|
3222
|
+
"Single-selection menus use menuitemradio semantics and aria-checked on each row; the leading radio mark is presentation-only.",
|
|
3223
|
+
"A swatch-picker section changes the popup to a non-modal dialog so its radio group and ordinary preference buttons keep valid nested semantics; Tab moves between its controls, then leaves and closes at the popup boundary.",
|
|
3224
|
+
"Use notification dots only as supplemental status and not as the sole indication of important information."
|
|
3225
|
+
],
|
|
3226
|
+
"states": [
|
|
3227
|
+
"The host owns open state and responds to selection and close events.",
|
|
3228
|
+
"Use either flat items or sections, not both.",
|
|
3229
|
+
"After dsSelect from a switch row, update switchValue in the items property so the controlled indicator reflects the new state.",
|
|
3230
|
+
"For selectionMode single, keep exactly one item isSelected and update the items property after dsSelect.",
|
|
3231
|
+
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
3232
|
+
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup; the legacy gradient-picker section and dsGradientSelect remain compatibility-only."
|
|
3233
|
+
],
|
|
3234
|
+
"responsiveBehavior": [
|
|
3235
|
+
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
3236
|
+
"Choose placement relative to the trigger and allow the component to clamp the popup to the viewport.",
|
|
3237
|
+
"Avoid fixed widths that exceed narrow viewports."
|
|
2084
3238
|
],
|
|
2085
3239
|
"frameworkCaveats": {
|
|
2086
3240
|
"customElements": [
|
|
2087
|
-
"
|
|
2088
|
-
"Use the form attribute on the host when associating an input rendered outside its owning form."
|
|
3241
|
+
"Assign items, sections, and HTMLElement anchors as properties after the element is defined."
|
|
2089
3242
|
],
|
|
2090
3243
|
"react": [
|
|
2091
|
-
"
|
|
3244
|
+
"Pass arrays and objects as wrapper props and handle generated onDsSelect and onDsClose event props."
|
|
2092
3245
|
],
|
|
2093
3246
|
"angular": [
|
|
2094
|
-
"
|
|
3247
|
+
"Use property bindings for arrays, objects, and anchors and event bindings for dsSelect and dsClose."
|
|
2095
3248
|
]
|
|
2096
3249
|
},
|
|
2097
3250
|
"references": [
|
|
2098
3251
|
{
|
|
2099
3252
|
"label": "Storybook examples",
|
|
2100
|
-
"path": "src/wc/components/
|
|
3253
|
+
"path": "src/wc/components/Menu/Menu.stories.ts"
|
|
2101
3254
|
},
|
|
2102
3255
|
{
|
|
2103
|
-
"label": "
|
|
2104
|
-
"path": "
|
|
3256
|
+
"label": "Framework integration",
|
|
3257
|
+
"path": "docs/framework-integration.md"
|
|
2105
3258
|
}
|
|
2106
3259
|
]
|
|
2107
3260
|
},
|
|
2108
3261
|
"api": {
|
|
2109
3262
|
"props": {
|
|
2110
|
-
"
|
|
2111
|
-
"type": "
|
|
3263
|
+
"align": {
|
|
3264
|
+
"type": "MenuAlign",
|
|
2112
3265
|
"required": false
|
|
2113
3266
|
},
|
|
2114
|
-
"
|
|
2115
|
-
"type": "
|
|
3267
|
+
"alignOffset": {
|
|
3268
|
+
"type": "number | string",
|
|
2116
3269
|
"required": false
|
|
2117
3270
|
},
|
|
2118
|
-
"
|
|
2119
|
-
"type": "
|
|
3271
|
+
"anchor": {
|
|
3272
|
+
"type": "HTMLElement | undefined",
|
|
2120
3273
|
"required": false
|
|
2121
3274
|
},
|
|
2122
|
-
"
|
|
3275
|
+
"anchorAlignment": {
|
|
3276
|
+
"type": "ChoicePopupAnchorAlignment",
|
|
3277
|
+
"required": false
|
|
3278
|
+
},
|
|
3279
|
+
"anchorId": {
|
|
2123
3280
|
"type": "string | undefined",
|
|
2124
3281
|
"required": false
|
|
2125
3282
|
},
|
|
2126
|
-
"
|
|
3283
|
+
"initialFocusVisible": {
|
|
2127
3284
|
"type": "boolean",
|
|
2128
3285
|
"required": false
|
|
2129
3286
|
},
|
|
2130
|
-
"
|
|
3287
|
+
"items": {
|
|
3288
|
+
"type": "MenuItemData[]",
|
|
3289
|
+
"required": false
|
|
3290
|
+
},
|
|
3291
|
+
"menuLabel": {
|
|
2131
3292
|
"type": "string",
|
|
2132
3293
|
"required": false
|
|
2133
3294
|
},
|
|
2134
|
-
"
|
|
2135
|
-
"type": "
|
|
3295
|
+
"menuWidth": {
|
|
3296
|
+
"type": "string | undefined",
|
|
2136
3297
|
"required": false
|
|
2137
3298
|
},
|
|
2138
|
-
"
|
|
2139
|
-
"type": "string",
|
|
3299
|
+
"minWidth": {
|
|
3300
|
+
"type": "string | undefined",
|
|
2140
3301
|
"required": false
|
|
2141
3302
|
},
|
|
2142
|
-
"
|
|
3303
|
+
"open": {
|
|
2143
3304
|
"type": "boolean",
|
|
2144
3305
|
"required": false
|
|
2145
3306
|
},
|
|
2146
|
-
"
|
|
2147
|
-
"type": "
|
|
3307
|
+
"sections": {
|
|
3308
|
+
"type": "MenuSection[]",
|
|
2148
3309
|
"required": false
|
|
2149
3310
|
},
|
|
2150
|
-
"
|
|
2151
|
-
"type": "
|
|
3311
|
+
"selectionMode": {
|
|
3312
|
+
"type": "MenuSelectionMode",
|
|
2152
3313
|
"required": false
|
|
2153
3314
|
},
|
|
2154
|
-
"
|
|
2155
|
-
"type": "
|
|
3315
|
+
"side": {
|
|
3316
|
+
"type": "MenuSide",
|
|
2156
3317
|
"required": false
|
|
2157
3318
|
},
|
|
2158
|
-
"
|
|
2159
|
-
"type": "
|
|
3319
|
+
"sideOffset": {
|
|
3320
|
+
"type": "number | string",
|
|
2160
3321
|
"required": false
|
|
3322
|
+
}
|
|
3323
|
+
},
|
|
3324
|
+
"events": [
|
|
3325
|
+
{
|
|
3326
|
+
"name": "dsClose",
|
|
3327
|
+
"detail": "void"
|
|
2161
3328
|
},
|
|
2162
|
-
|
|
2163
|
-
"
|
|
2164
|
-
"
|
|
3329
|
+
{
|
|
3330
|
+
"name": "dsGradientSelect",
|
|
3331
|
+
"detail": "ShellGradientPreset"
|
|
2165
3332
|
},
|
|
2166
|
-
|
|
3333
|
+
{
|
|
3334
|
+
"name": "dsSelect",
|
|
3335
|
+
"detail": "MenuItemData"
|
|
3336
|
+
},
|
|
3337
|
+
{
|
|
3338
|
+
"name": "dsSwatchSelect",
|
|
3339
|
+
"detail": "string"
|
|
3340
|
+
}
|
|
3341
|
+
],
|
|
3342
|
+
"slots": []
|
|
3343
|
+
},
|
|
3344
|
+
"exports": {
|
|
3345
|
+
"customElement": "ds-menu",
|
|
3346
|
+
"react": "DsMenu",
|
|
3347
|
+
"angular": "DsMenu"
|
|
3348
|
+
},
|
|
3349
|
+
"dependencies": [
|
|
3350
|
+
"@ds-mo/ui",
|
|
3351
|
+
"@ds-mo/tokens"
|
|
3352
|
+
],
|
|
3353
|
+
"componentDependencies": [
|
|
3354
|
+
"badge",
|
|
3355
|
+
"swatch-picker",
|
|
3356
|
+
"switch",
|
|
3357
|
+
"text"
|
|
3358
|
+
]
|
|
3359
|
+
},
|
|
3360
|
+
{
|
|
3361
|
+
"id": "component:ds-message",
|
|
3362
|
+
"tag": "ds-message",
|
|
3363
|
+
"name": "message",
|
|
3364
|
+
"title": "Message",
|
|
3365
|
+
"summary": "Channel-neutral message row owning direction, grouping, author, time, delivery metadata, and accessory regions.",
|
|
3366
|
+
"intentStatus": "complete",
|
|
3367
|
+
"intent": {
|
|
3368
|
+
"audience": "general",
|
|
3369
|
+
"status": "experimental",
|
|
3370
|
+
"summary": "Channel-neutral message row owning direction, grouping, author, time, delivery metadata, and accessory regions.",
|
|
3371
|
+
"useWhen": [
|
|
3372
|
+
"A transcript contains messages that need consistent incoming, outgoing, or system layout."
|
|
3373
|
+
],
|
|
3374
|
+
"avoidWhen": [
|
|
3375
|
+
"Content is not an authored message in a conversation."
|
|
3376
|
+
],
|
|
3377
|
+
"commonlyComposedWith": [
|
|
3378
|
+
"component:ds-message-bubble",
|
|
3379
|
+
"component:ds-message-scroller"
|
|
3380
|
+
],
|
|
3381
|
+
"patterns": [
|
|
3382
|
+
"pattern:conversation"
|
|
3383
|
+
],
|
|
3384
|
+
"accessibility": [
|
|
3385
|
+
"Author and time metadata remain textual when they are necessary to interpret the transcript.",
|
|
3386
|
+
"Delivery failure must be expressed in text rather than color alone."
|
|
3387
|
+
],
|
|
3388
|
+
"states": [
|
|
3389
|
+
"Pass an ISO timestamp. Message keeps the full value in dateTime and formats the visible value as a localized time; applications must not render a raw ISO string as visible transcript metadata.",
|
|
3390
|
+
"Grouping joins adjacent bubble corners, shows the incoming author only at the start, and shows delivery/time metadata only at the end. Outgoing author remains in the accessible message label without repeating a visible You label.",
|
|
3391
|
+
"Set showAuthor false only when the product makes participant and assistant roles visually self-evident; continue passing author so the accessible message label remains specific."
|
|
3392
|
+
],
|
|
3393
|
+
"responsiveBehavior": [
|
|
3394
|
+
"Outgoing and incoming rows adapt to available width while preserving their directional alignment."
|
|
3395
|
+
],
|
|
3396
|
+
"references": [
|
|
3397
|
+
{
|
|
3398
|
+
"label": "Storybook examples",
|
|
3399
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
3400
|
+
}
|
|
3401
|
+
]
|
|
3402
|
+
},
|
|
3403
|
+
"api": {
|
|
3404
|
+
"props": {
|
|
3405
|
+
"author": {
|
|
2167
3406
|
"type": "string",
|
|
2168
3407
|
"required": false
|
|
2169
3408
|
},
|
|
2170
|
-
"
|
|
2171
|
-
"type": "
|
|
3409
|
+
"deliveryState": {
|
|
3410
|
+
"type": "MessageDeliveryState | undefined",
|
|
2172
3411
|
"required": false
|
|
2173
3412
|
},
|
|
2174
|
-
"
|
|
2175
|
-
"type": "
|
|
3413
|
+
"direction": {
|
|
3414
|
+
"type": "MessageDirection",
|
|
2176
3415
|
"required": false
|
|
2177
3416
|
},
|
|
2178
|
-
"
|
|
2179
|
-
"type": "
|
|
3417
|
+
"groupPosition": {
|
|
3418
|
+
"type": "MessageGroupPosition",
|
|
2180
3419
|
"required": false
|
|
2181
3420
|
},
|
|
2182
|
-
"
|
|
2183
|
-
"type": "
|
|
3421
|
+
"messageId": {
|
|
3422
|
+
"type": "string",
|
|
2184
3423
|
"required": false
|
|
2185
3424
|
},
|
|
2186
|
-
"
|
|
3425
|
+
"scrollAnchor": {
|
|
2187
3426
|
"type": "boolean",
|
|
2188
3427
|
"required": false
|
|
2189
3428
|
},
|
|
2190
|
-
"
|
|
2191
|
-
"type": "
|
|
2192
|
-
"required": false
|
|
2193
|
-
},
|
|
2194
|
-
"size": {
|
|
2195
|
-
"type": "InputSize",
|
|
3429
|
+
"showAuthor": {
|
|
3430
|
+
"type": "boolean",
|
|
2196
3431
|
"required": false
|
|
2197
3432
|
},
|
|
2198
|
-
"
|
|
2199
|
-
"type": "
|
|
3433
|
+
"streaming": {
|
|
3434
|
+
"type": "boolean",
|
|
2200
3435
|
"required": false
|
|
2201
3436
|
},
|
|
2202
|
-
"
|
|
3437
|
+
"timestamp": {
|
|
2203
3438
|
"type": "string",
|
|
2204
3439
|
"required": false
|
|
2205
|
-
},
|
|
2206
|
-
"width": {
|
|
2207
|
-
"type": "InputWidth",
|
|
2208
|
-
"required": false
|
|
2209
3440
|
}
|
|
2210
3441
|
},
|
|
2211
|
-
"events": [
|
|
2212
|
-
{
|
|
2213
|
-
"name": "dsChange",
|
|
2214
|
-
"detail": "string"
|
|
2215
|
-
},
|
|
2216
|
-
{
|
|
2217
|
-
"name": "dsClear",
|
|
2218
|
-
"detail": "void"
|
|
2219
|
-
}
|
|
2220
|
-
],
|
|
3442
|
+
"events": [],
|
|
2221
3443
|
"slots": []
|
|
2222
3444
|
},
|
|
2223
3445
|
"exports": {
|
|
2224
|
-
"customElement": "ds-
|
|
2225
|
-
"react": "
|
|
2226
|
-
"angular": "
|
|
3446
|
+
"customElement": "ds-message",
|
|
3447
|
+
"react": "DsMessage",
|
|
3448
|
+
"angular": "DsMessage"
|
|
2227
3449
|
},
|
|
2228
3450
|
"dependencies": [
|
|
2229
3451
|
"@ds-mo/ui",
|
|
2230
|
-
"@ds-mo/tokens"
|
|
2231
|
-
"@ds-mo/icons"
|
|
3452
|
+
"@ds-mo/tokens"
|
|
2232
3453
|
],
|
|
2233
3454
|
"componentDependencies": [
|
|
2234
|
-
"button-unfilled",
|
|
2235
|
-
"icon",
|
|
2236
3455
|
"text"
|
|
2237
3456
|
]
|
|
2238
3457
|
},
|
|
2239
3458
|
{
|
|
2240
|
-
"id": "component:ds-
|
|
2241
|
-
"tag": "ds-
|
|
2242
|
-
"name": "
|
|
2243
|
-
"title": "
|
|
2244
|
-
"summary": "
|
|
3459
|
+
"id": "component:ds-message-bubble",
|
|
3460
|
+
"tag": "ds-message-bubble",
|
|
3461
|
+
"name": "message-bubble",
|
|
3462
|
+
"title": "MessageBubble",
|
|
3463
|
+
"summary": "Visible message content surface with a body-medium default, separated from message-row direction and metadata.",
|
|
2245
3464
|
"intentStatus": "complete",
|
|
2246
3465
|
"intent": {
|
|
2247
3466
|
"audience": "general",
|
|
2248
|
-
"status": "
|
|
2249
|
-
"summary": "
|
|
3467
|
+
"status": "experimental",
|
|
3468
|
+
"summary": "Visible message content surface with a body-medium default, separated from message-row direction and metadata.",
|
|
2250
3469
|
"useWhen": [
|
|
2251
|
-
"
|
|
2252
|
-
"
|
|
2253
|
-
"A standalone operation needs a visible spinner with contextual polite status text."
|
|
3470
|
+
"Message content needs a primary, secondary, ghost, or error surface within a Message row.",
|
|
3471
|
+
"Plain incoming or outgoing message copy should use the shared body-medium regular typography recipe without application styling."
|
|
2254
3472
|
],
|
|
2255
3473
|
"avoidWhen": [
|
|
2256
|
-
"
|
|
2257
|
-
"
|
|
2258
|
-
"The UI needs a blocking overlay or automatic centering; the owning layout must provide that structure.",
|
|
2259
|
-
"Success, failure, retry, or completion must be communicated; the owning workflow handles outcomes."
|
|
2260
|
-
],
|
|
2261
|
-
"alternatives": [
|
|
2262
|
-
{
|
|
2263
|
-
"when": "A content region is waiting for structured data.",
|
|
2264
|
-
"component": "component:ds-skeleton",
|
|
2265
|
-
"reason": "Skeleton preserves the expected content geometry while data loads."
|
|
2266
|
-
},
|
|
2267
|
-
{
|
|
2268
|
-
"when": "A static visual symbol is needed without progress semantics.",
|
|
2269
|
-
"component": "component:ds-icon",
|
|
2270
|
-
"reason": "Icon owns non-progress system and flag glyphs."
|
|
2271
|
-
}
|
|
3474
|
+
"The surface is a general card, callout, or form container.",
|
|
3475
|
+
"The application wants to promote ordinary conversation copy to body-large; message typography stays body-medium unless a distinct authored rich-content element owns its own complete type recipe."
|
|
2272
3476
|
],
|
|
2273
3477
|
"commonlyComposedWith": [
|
|
2274
|
-
"component:ds-
|
|
2275
|
-
"component:ds-
|
|
2276
|
-
"component:ds-input",
|
|
2277
|
-
"component:ds-select"
|
|
3478
|
+
"component:ds-message",
|
|
3479
|
+
"component:ds-markdown"
|
|
2278
3480
|
],
|
|
2279
|
-
"
|
|
2280
|
-
"
|
|
2281
|
-
"Standalone Loader requires contextual status text that explains what is loading; do not rely on a generic visual spinner alone.",
|
|
2282
|
-
"Loader is an informative progress graphic and must retain sufficient rendered contrast; tertiary and quaternary are not supported standalone or informative Loader treatments.",
|
|
2283
|
-
"Avoid duplicate announcements from both Loader and its owning busy region.",
|
|
2284
|
-
"Reduced motion stops rotation while keeping the glyph and status semantics visible."
|
|
3481
|
+
"patterns": [
|
|
3482
|
+
"pattern:conversation"
|
|
2285
3483
|
],
|
|
2286
|
-
"
|
|
2287
|
-
"
|
|
2288
|
-
"Omitted color inherits currentColor. Explicit semantic aliases and CSS-variable references match Icon when an independent progress color is required.",
|
|
2289
|
-
"Nested Loader inherits a readable color from its owning busy control or region rather than selecting tertiary or quaternary directly.",
|
|
2290
|
-
"The owner decides whether to delay Loader visibility for short operations and removes it when the operation settles.",
|
|
2291
|
-
"The owner reserves space and supplies centering or overlay layout so Loader never causes unexpected layout movement."
|
|
3484
|
+
"accessibility": [
|
|
3485
|
+
"Surface styling does not add semantics; meaningful error or status copy belongs in message content or metadata."
|
|
2292
3486
|
],
|
|
2293
3487
|
"responsiveBehavior": [
|
|
2294
|
-
"The
|
|
2295
|
-
"Loader does not infer container size or viewport breakpoints."
|
|
3488
|
+
"The bubble wraps content and allows wide ghost responses to use more transcript width."
|
|
2296
3489
|
],
|
|
2297
|
-
"frameworkCaveats": {
|
|
2298
|
-
"customElements": [
|
|
2299
|
-
"Use the label only for standalone status; nested usage should synchronize aria-busy on the owning element."
|
|
2300
|
-
],
|
|
2301
|
-
"react": [
|
|
2302
|
-
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
2303
|
-
],
|
|
2304
|
-
"angular": [
|
|
2305
|
-
"Derive Loader visibility and the owner's busy state from the same operation state."
|
|
2306
|
-
]
|
|
2307
|
-
},
|
|
2308
3490
|
"references": [
|
|
2309
3491
|
{
|
|
2310
3492
|
"label": "Storybook examples",
|
|
2311
|
-
"path": "src/wc/components/
|
|
3493
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
2312
3494
|
}
|
|
2313
3495
|
]
|
|
2314
3496
|
},
|
|
2315
3497
|
"api": {
|
|
2316
3498
|
"props": {
|
|
2317
|
-
"
|
|
2318
|
-
"type": "
|
|
2319
|
-
"required": false
|
|
2320
|
-
},
|
|
2321
|
-
"label": {
|
|
2322
|
-
"type": "string | undefined",
|
|
2323
|
-
"required": false
|
|
2324
|
-
},
|
|
2325
|
-
"size": {
|
|
2326
|
-
"type": "LoaderSize",
|
|
3499
|
+
"variant": {
|
|
3500
|
+
"type": "MessageBubbleVariant",
|
|
2327
3501
|
"required": false
|
|
2328
3502
|
}
|
|
2329
3503
|
},
|
|
@@ -2331,9 +3505,9 @@
|
|
|
2331
3505
|
"slots": []
|
|
2332
3506
|
},
|
|
2333
3507
|
"exports": {
|
|
2334
|
-
"customElement": "ds-
|
|
2335
|
-
"react": "
|
|
2336
|
-
"angular": "
|
|
3508
|
+
"customElement": "ds-message-bubble",
|
|
3509
|
+
"react": "DsMessageBubble",
|
|
3510
|
+
"angular": "DsMessageBubble"
|
|
2337
3511
|
},
|
|
2338
3512
|
"dependencies": [
|
|
2339
3513
|
"@ds-mo/ui",
|
|
@@ -2342,174 +3516,193 @@
|
|
|
2342
3516
|
"componentDependencies": []
|
|
2343
3517
|
},
|
|
2344
3518
|
{
|
|
2345
|
-
"id": "component:ds-
|
|
2346
|
-
"tag": "ds-
|
|
2347
|
-
"name": "
|
|
2348
|
-
"title": "
|
|
2349
|
-
"summary": "
|
|
3519
|
+
"id": "component:ds-message-composer",
|
|
3520
|
+
"tag": "ds-message-composer",
|
|
3521
|
+
"name": "message-composer",
|
|
3522
|
+
"title": "MessageComposer",
|
|
3523
|
+
"summary": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible leading-tool or trailing-action regions.",
|
|
2350
3524
|
"intentStatus": "complete",
|
|
2351
3525
|
"intent": {
|
|
2352
3526
|
"audience": "general",
|
|
2353
|
-
"status": "
|
|
2354
|
-
"summary": "
|
|
3527
|
+
"status": "experimental",
|
|
3528
|
+
"summary": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible leading-tool or trailing-action regions.",
|
|
2355
3529
|
"useWhen": [
|
|
2356
|
-
"A
|
|
2357
|
-
"Actions need grouping, selected state, supplemental notification dots, switch rows, or destructive treatment."
|
|
3530
|
+
"A conversation accepts multi-line text and needs Enter-to-submit with a streaming stop action."
|
|
2358
3531
|
],
|
|
2359
3532
|
"avoidWhen": [
|
|
2360
|
-
"The
|
|
2361
|
-
"The content requires rich dialog interaction or a multi-step workflow.",
|
|
2362
|
-
"The actions should remain persistently visible."
|
|
2363
|
-
],
|
|
2364
|
-
"alternatives": [
|
|
2365
|
-
{
|
|
2366
|
-
"when": "The choice is a form value with a label, validation, and submitted value.",
|
|
2367
|
-
"component": "component:ds-select",
|
|
2368
|
-
"reason": "Select provides form-control semantics and value ownership."
|
|
2369
|
-
},
|
|
2370
|
-
{
|
|
2371
|
-
"when": "Several form values may be selected.",
|
|
2372
|
-
"component": "component:ds-select-multi",
|
|
2373
|
-
"reason": "SelectMulti provides multi-select listbox semantics, array value ownership, and count presentation."
|
|
2374
|
-
},
|
|
2375
|
-
{
|
|
2376
|
-
"when": "The interaction needs substantial content, confirmation, or a form.",
|
|
2377
|
-
"component": "component:ds-modal",
|
|
2378
|
-
"reason": "Modal owns focus containment and dialog-level interaction."
|
|
2379
|
-
}
|
|
3533
|
+
"The text is a conventional form field submitted with unrelated fields."
|
|
2380
3534
|
],
|
|
2381
3535
|
"commonlyComposedWith": [
|
|
2382
|
-
"component:ds-
|
|
2383
|
-
"component:ds-
|
|
2384
|
-
"component:ds-
|
|
2385
|
-
|
|
3536
|
+
"component:ds-message-scroller",
|
|
3537
|
+
"component:ds-button-filled",
|
|
3538
|
+
"component:ds-button-unfilled"
|
|
3539
|
+
],
|
|
3540
|
+
"patterns": [
|
|
3541
|
+
"pattern:conversation"
|
|
2386
3542
|
],
|
|
2387
3543
|
"accessibility": [
|
|
2388
|
-
"
|
|
2389
|
-
"
|
|
2390
|
-
"
|
|
2391
|
-
"Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden md presentation indicator.",
|
|
2392
|
-
"A gradient-picker section changes the popup to a non-modal dialog so its radio group and ordinary preference buttons keep valid nested semantics; Tab moves between its controls, then leaves and closes at the popup boundary.",
|
|
2393
|
-
"Use notification dots only as supplemental status and not as the sole indication of important information."
|
|
3544
|
+
"Always provide a localized textarea label and submit or stop action names.",
|
|
3545
|
+
"Shift plus Enter inserts a newline while Enter submits non-empty content.",
|
|
3546
|
+
"Streaming and error states remain perceivable without relying on icon shape alone."
|
|
2394
3547
|
],
|
|
2395
3548
|
"states": [
|
|
2396
|
-
"The
|
|
2397
|
-
"Use
|
|
2398
|
-
"
|
|
2399
|
-
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
2400
|
-
"Use one gradient-picker section in the user or account Appearance or Theme popup for the global AppShell wash preference; apply dsGradientSelect immediately without closing the popup."
|
|
3549
|
+
"The owner controls draft value and transport state; the composer emits intent without performing transport.",
|
|
3550
|
+
"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.",
|
|
3551
|
+
"The submit action defaults to brand for both agent and person-to-person conversations; change submitIntent only when the action consequence has a different semantic intent."
|
|
2401
3552
|
],
|
|
2402
3553
|
"responsiveBehavior": [
|
|
2403
|
-
"
|
|
2404
|
-
"Avoid fixed widths that exceed narrow viewports."
|
|
3554
|
+
"The textarea begins at two body-medium lines, grows one line at a time through six lines, and then scrolls internally."
|
|
2405
3555
|
],
|
|
2406
|
-
"frameworkCaveats": {
|
|
2407
|
-
"customElements": [
|
|
2408
|
-
"Assign items, sections, and HTMLElement anchors as properties after the element is defined."
|
|
2409
|
-
],
|
|
2410
|
-
"react": [
|
|
2411
|
-
"Pass arrays and objects as wrapper props and handle generated onDsSelect and onDsClose event props."
|
|
2412
|
-
],
|
|
2413
|
-
"angular": [
|
|
2414
|
-
"Use property bindings for arrays, objects, and anchors and event bindings for dsSelect and dsClose."
|
|
2415
|
-
]
|
|
2416
|
-
},
|
|
2417
3556
|
"references": [
|
|
2418
3557
|
{
|
|
2419
3558
|
"label": "Storybook examples",
|
|
2420
|
-
"path": "src/wc/components/
|
|
3559
|
+
"path": "src/wc/components/MessageComposer/MessageComposer.stories.ts"
|
|
2421
3560
|
},
|
|
2422
3561
|
{
|
|
2423
|
-
"label": "
|
|
2424
|
-
"path": "
|
|
3562
|
+
"label": "Scroller overlay composition",
|
|
3563
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
2425
3564
|
}
|
|
2426
3565
|
]
|
|
2427
3566
|
},
|
|
2428
3567
|
"api": {
|
|
2429
3568
|
"props": {
|
|
2430
|
-
"
|
|
2431
|
-
"type": "
|
|
2432
|
-
"required": false
|
|
2433
|
-
},
|
|
2434
|
-
"alignOffset": {
|
|
2435
|
-
"type": "number | string",
|
|
3569
|
+
"isInactive": {
|
|
3570
|
+
"type": "boolean",
|
|
2436
3571
|
"required": false
|
|
2437
3572
|
},
|
|
2438
|
-
"
|
|
2439
|
-
"type": "
|
|
3573
|
+
"label": {
|
|
3574
|
+
"type": "string",
|
|
2440
3575
|
"required": false
|
|
2441
3576
|
},
|
|
2442
|
-
"
|
|
2443
|
-
"type": "string
|
|
3577
|
+
"placeholder": {
|
|
3578
|
+
"type": "string",
|
|
2444
3579
|
"required": false
|
|
2445
3580
|
},
|
|
2446
|
-
"
|
|
2447
|
-
"type": "
|
|
3581
|
+
"status": {
|
|
3582
|
+
"type": "MessageComposerStatus",
|
|
2448
3583
|
"required": false
|
|
2449
3584
|
},
|
|
2450
|
-
"
|
|
2451
|
-
"type": "
|
|
3585
|
+
"submitIntent": {
|
|
3586
|
+
"type": "ButtonFilledIntent",
|
|
2452
3587
|
"required": false
|
|
2453
3588
|
},
|
|
2454
|
-
"
|
|
3589
|
+
"value": {
|
|
2455
3590
|
"type": "string",
|
|
2456
3591
|
"required": false
|
|
3592
|
+
}
|
|
3593
|
+
},
|
|
3594
|
+
"events": [
|
|
3595
|
+
{
|
|
3596
|
+
"name": "dsInput",
|
|
3597
|
+
"detail": "string"
|
|
2457
3598
|
},
|
|
2458
|
-
|
|
2459
|
-
"
|
|
2460
|
-
"
|
|
2461
|
-
},
|
|
2462
|
-
"minWidth": {
|
|
2463
|
-
"type": "string | undefined",
|
|
2464
|
-
"required": false
|
|
3599
|
+
{
|
|
3600
|
+
"name": "dsStop",
|
|
3601
|
+
"detail": "void"
|
|
2465
3602
|
},
|
|
2466
|
-
|
|
3603
|
+
{
|
|
3604
|
+
"name": "dsSubmit",
|
|
3605
|
+
"detail": "{ text: string }"
|
|
3606
|
+
}
|
|
3607
|
+
],
|
|
3608
|
+
"slots": []
|
|
3609
|
+
},
|
|
3610
|
+
"exports": {
|
|
3611
|
+
"customElement": "ds-message-composer",
|
|
3612
|
+
"react": "DsMessageComposer",
|
|
3613
|
+
"angular": "DsMessageComposer"
|
|
3614
|
+
},
|
|
3615
|
+
"dependencies": [
|
|
3616
|
+
"@ds-mo/ui",
|
|
3617
|
+
"@ds-mo/tokens"
|
|
3618
|
+
],
|
|
3619
|
+
"componentDependencies": [
|
|
3620
|
+
"button-filled"
|
|
3621
|
+
]
|
|
3622
|
+
},
|
|
3623
|
+
{
|
|
3624
|
+
"id": "component:ds-message-scroller",
|
|
3625
|
+
"tag": "ds-message-scroller",
|
|
3626
|
+
"name": "message-scroller",
|
|
3627
|
+
"title": "MessageScroller",
|
|
3628
|
+
"summary": "Focusable transcript scroller that follows the live edge only while the reader remains there.",
|
|
3629
|
+
"intentStatus": "complete",
|
|
3630
|
+
"intent": {
|
|
3631
|
+
"audience": "general",
|
|
3632
|
+
"status": "experimental",
|
|
3633
|
+
"summary": "Focusable transcript scroller that follows the live edge only while the reader remains there.",
|
|
3634
|
+
"useWhen": [
|
|
3635
|
+
"Messages can append or stream and transcript position must remain respectful of reader intent."
|
|
3636
|
+
],
|
|
3637
|
+
"avoidWhen": [
|
|
3638
|
+
"Content is static prose without message navigation or live updates."
|
|
3639
|
+
],
|
|
3640
|
+
"commonlyComposedWith": [
|
|
3641
|
+
"component:ds-message",
|
|
3642
|
+
"component:ds-message-composer"
|
|
3643
|
+
],
|
|
3644
|
+
"patterns": [
|
|
3645
|
+
"pattern:conversation"
|
|
3646
|
+
],
|
|
3647
|
+
"accessibility": [
|
|
3648
|
+
"Give each transcript a concise localized label.",
|
|
3649
|
+
"New content is exposed through log semantics without stealing focus.",
|
|
3650
|
+
"The scroll-to-latest control remains keyboard accessible when follow behavior is released."
|
|
3651
|
+
],
|
|
3652
|
+
"states": [
|
|
3653
|
+
"Selection and transcript interaction release automatic following.",
|
|
3654
|
+
"Opening saved history, message jumps, and prepended history preserve deliberate position.",
|
|
3655
|
+
"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.",
|
|
3656
|
+
"Place a composer container in the overlay slot so messages scroll behind it; the scroller measures its live height, reserves matching transcript clearance, and keeps scroll-to-latest above it."
|
|
3657
|
+
],
|
|
3658
|
+
"responsiveBehavior": [
|
|
3659
|
+
"Transcript width is readable while the scroll region fills available height."
|
|
3660
|
+
],
|
|
3661
|
+
"references": [
|
|
3662
|
+
{
|
|
3663
|
+
"label": "Storybook examples",
|
|
3664
|
+
"path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
|
|
3665
|
+
}
|
|
3666
|
+
]
|
|
3667
|
+
},
|
|
3668
|
+
"api": {
|
|
3669
|
+
"props": {
|
|
3670
|
+
"autoFollow": {
|
|
2467
3671
|
"type": "boolean",
|
|
2468
3672
|
"required": false
|
|
2469
3673
|
},
|
|
2470
|
-
"
|
|
2471
|
-
"type": "
|
|
3674
|
+
"busy": {
|
|
3675
|
+
"type": "boolean",
|
|
2472
3676
|
"required": false
|
|
2473
3677
|
},
|
|
2474
|
-
"
|
|
2475
|
-
"type": "
|
|
3678
|
+
"defaultPosition": {
|
|
3679
|
+
"type": "MessageScrollerPosition",
|
|
2476
3680
|
"required": false
|
|
2477
3681
|
},
|
|
2478
|
-
"
|
|
2479
|
-
"type": "
|
|
3682
|
+
"messagesLabel": {
|
|
3683
|
+
"type": "string",
|
|
2480
3684
|
"required": false
|
|
2481
3685
|
}
|
|
2482
3686
|
},
|
|
2483
3687
|
"events": [
|
|
2484
3688
|
{
|
|
2485
|
-
"name": "
|
|
3689
|
+
"name": "dsReachStart",
|
|
2486
3690
|
"detail": "void"
|
|
2487
|
-
},
|
|
2488
|
-
{
|
|
2489
|
-
"name": "dsGradientSelect",
|
|
2490
|
-
"detail": "ShellGradientPreset"
|
|
2491
|
-
},
|
|
2492
|
-
{
|
|
2493
|
-
"name": "dsSelect",
|
|
2494
|
-
"detail": "MenuItemData"
|
|
2495
3691
|
}
|
|
2496
3692
|
],
|
|
2497
3693
|
"slots": []
|
|
2498
3694
|
},
|
|
2499
3695
|
"exports": {
|
|
2500
|
-
"customElement": "ds-
|
|
2501
|
-
"react": "
|
|
2502
|
-
"angular": "
|
|
3696
|
+
"customElement": "ds-message-scroller",
|
|
3697
|
+
"react": "DsMessageScroller",
|
|
3698
|
+
"angular": "DsMessageScroller"
|
|
2503
3699
|
},
|
|
2504
3700
|
"dependencies": [
|
|
2505
3701
|
"@ds-mo/ui",
|
|
2506
3702
|
"@ds-mo/tokens"
|
|
2507
3703
|
],
|
|
2508
3704
|
"componentDependencies": [
|
|
2509
|
-
"
|
|
2510
|
-
"shell-gradient-picker",
|
|
2511
|
-
"switch",
|
|
2512
|
-
"text"
|
|
3705
|
+
"button-unfilled"
|
|
2513
3706
|
]
|
|
2514
3707
|
},
|
|
2515
3708
|
{
|
|
@@ -2723,170 +3916,416 @@
|
|
|
2723
3916
|
"type": "PanelNavRouterMode",
|
|
2724
3917
|
"required": false
|
|
2725
3918
|
},
|
|
2726
|
-
"settingsLabel": {
|
|
3919
|
+
"settingsLabel": {
|
|
3920
|
+
"type": "string",
|
|
3921
|
+
"required": false
|
|
3922
|
+
},
|
|
3923
|
+
"settingsNavigationLabel": {
|
|
3924
|
+
"type": "string",
|
|
3925
|
+
"required": false
|
|
3926
|
+
},
|
|
3927
|
+
"storageKey": {
|
|
3928
|
+
"type": "string",
|
|
3929
|
+
"required": false
|
|
3930
|
+
},
|
|
3931
|
+
"userInitial": {
|
|
3932
|
+
"type": "string",
|
|
3933
|
+
"required": false
|
|
3934
|
+
},
|
|
3935
|
+
"userName": {
|
|
3936
|
+
"type": "string",
|
|
3937
|
+
"required": false
|
|
3938
|
+
}
|
|
3939
|
+
},
|
|
3940
|
+
"events": [
|
|
3941
|
+
{
|
|
3942
|
+
"name": "dsChromeTransitionEnd",
|
|
3943
|
+
"detail": "ChromeTransitionDetail"
|
|
3944
|
+
},
|
|
3945
|
+
{
|
|
3946
|
+
"name": "dsChromeTransitionStart",
|
|
3947
|
+
"detail": "ChromeTransitionDetail"
|
|
3948
|
+
},
|
|
3949
|
+
{
|
|
3950
|
+
"name": "dsNavFooterAction",
|
|
3951
|
+
"detail": "void"
|
|
3952
|
+
},
|
|
3953
|
+
{
|
|
3954
|
+
"name": "dsNavSelect",
|
|
3955
|
+
"detail": "string"
|
|
3956
|
+
},
|
|
3957
|
+
{
|
|
3958
|
+
"name": "dsNavToggle",
|
|
3959
|
+
"detail": "boolean"
|
|
3960
|
+
},
|
|
3961
|
+
{
|
|
3962
|
+
"name": "dsNavUserAction",
|
|
3963
|
+
"detail": "PanelNavUserActionDetail"
|
|
3964
|
+
}
|
|
3965
|
+
],
|
|
3966
|
+
"slots": []
|
|
3967
|
+
},
|
|
3968
|
+
"exports": {
|
|
3969
|
+
"customElement": "ds-panel-nav",
|
|
3970
|
+
"react": "DsPanelNav",
|
|
3971
|
+
"angular": "DsPanelNav"
|
|
3972
|
+
},
|
|
3973
|
+
"dependencies": [
|
|
3974
|
+
"@ds-mo/ui",
|
|
3975
|
+
"@ds-mo/tokens",
|
|
3976
|
+
"@ds-mo/icons"
|
|
3977
|
+
],
|
|
3978
|
+
"componentDependencies": [
|
|
3979
|
+
"badge",
|
|
3980
|
+
"button-unfilled",
|
|
3981
|
+
"icon",
|
|
3982
|
+
"text",
|
|
3983
|
+
"tooltip"
|
|
3984
|
+
]
|
|
3985
|
+
},
|
|
3986
|
+
{
|
|
3987
|
+
"id": "component:ds-panel-sub-nav",
|
|
3988
|
+
"tag": "ds-panel-sub-nav",
|
|
3989
|
+
"name": "panel-sub-nav",
|
|
3990
|
+
"title": "PanelSubNav",
|
|
3991
|
+
"summary": "Persistent vertical tab navigation for a panel or card side rail, switching adjacent local content with menu-like selected fill and stable text weight.",
|
|
3992
|
+
"intentStatus": "complete",
|
|
3993
|
+
"intent": {
|
|
3994
|
+
"audience": "general",
|
|
3995
|
+
"status": "stable",
|
|
3996
|
+
"summary": "Persistent vertical tab navigation for a panel or card side rail, switching adjacent local content with menu-like selected fill and stable text weight.",
|
|
3997
|
+
"useWhen": [
|
|
3998
|
+
"A panel or card side rail needs a persistent vertical list that switches adjacent local content.",
|
|
3999
|
+
"Each concise text label controls an immediately available tabpanel without changing application routes."
|
|
4000
|
+
],
|
|
4001
|
+
"avoidWhen": [
|
|
4002
|
+
"The navigation is not contained in a panel or card side rail.",
|
|
4003
|
+
"Local views should be arranged horizontally; use TabGroup instead.",
|
|
4004
|
+
"The choices navigate routes in application shell chrome; use PanelNav or BarNav instead.",
|
|
4005
|
+
"The choices are temporary commands or contextual options; use Menu instead.",
|
|
4006
|
+
"Rows need icons, subtext, notification dots, nested levels, or section headers."
|
|
4007
|
+
],
|
|
4008
|
+
"alternatives": [
|
|
4009
|
+
{
|
|
4010
|
+
"when": "Local panel choices fit a horizontal tab row.",
|
|
4011
|
+
"component": "component:ds-tab-group",
|
|
4012
|
+
"reason": "TabGroup is the horizontal local-view counterpart."
|
|
4013
|
+
},
|
|
4014
|
+
{
|
|
4015
|
+
"when": "The choices are primary application destinations.",
|
|
4016
|
+
"component": "component:ds-panel-nav",
|
|
4017
|
+
"reason": "PanelNav owns primary application navigation."
|
|
4018
|
+
},
|
|
4019
|
+
{
|
|
4020
|
+
"when": "The choices are secondary application routes.",
|
|
4021
|
+
"component": "component:ds-bar-nav",
|
|
4022
|
+
"reason": "BarNav owns route sections inside AppShell."
|
|
4023
|
+
},
|
|
4024
|
+
{
|
|
4025
|
+
"when": "The choices are transient actions or options.",
|
|
4026
|
+
"component": "component:ds-menu",
|
|
4027
|
+
"reason": "Menu owns temporary popup collections."
|
|
4028
|
+
}
|
|
4029
|
+
],
|
|
4030
|
+
"commonlyComposedWith": [
|
|
4031
|
+
"component:ds-card",
|
|
4032
|
+
"component:ds-text"
|
|
4033
|
+
],
|
|
4034
|
+
"accessibility": [
|
|
4035
|
+
"Provide an accessible name with aria-label or aria-labelledby.",
|
|
4036
|
+
"Give every item a unique id and the id of its controlled tabpanel.",
|
|
4037
|
+
"Keep each controlled tabpanel labelled by its matching item id.",
|
|
4038
|
+
"Always provide a valid selected item when enabled items exist so exactly one tab and panel are active.",
|
|
4039
|
+
"ArrowUp and ArrowDown move and activate selection; Home and End select the first and last available items.",
|
|
4040
|
+
"Do not use selected text weight as the selection cue; active fill and primary foreground communicate selection."
|
|
4041
|
+
],
|
|
4042
|
+
"states": [
|
|
4043
|
+
"The parent owns the canonical selected value and panel visibility, and should update both from dsChange.",
|
|
4044
|
+
"A missing, empty, or unknown selected value is invalid when enabled items exist; the component does not choose a fallback selection.",
|
|
4045
|
+
"Inactive items remain visible but cannot be focused or selected.",
|
|
4046
|
+
"Selection is singular and follows keyboard focus.",
|
|
4047
|
+
"The omitted default surface treatment is for primary and secondary parent surfaces and uses the brand-active selected fill; pass faint explicitly on faint surfaces to use the neutral active fill.",
|
|
4048
|
+
"Rows contain one text label only and do not express nested navigation or grouped hierarchy."
|
|
4049
|
+
],
|
|
4050
|
+
"responsiveBehavior": [
|
|
4051
|
+
"The component remains vertical at every width.",
|
|
4052
|
+
"The consuming panel owns responsive adaptation and decides whether to reposition or replace the side rail."
|
|
4053
|
+
],
|
|
4054
|
+
"frameworkCaveats": {
|
|
4055
|
+
"customElements": [
|
|
4056
|
+
"Assign items as a JavaScript property because structured arrays are not represented by HTML attributes.",
|
|
4057
|
+
"Keep value synchronized to a valid enabled item and update the controlled panel from dsChange."
|
|
4058
|
+
],
|
|
4059
|
+
"react": [
|
|
4060
|
+
"Pass items as an array through the generated wrapper, keep value controlled, and use onDsChange to synchronize the visible panel."
|
|
4061
|
+
],
|
|
4062
|
+
"angular": [
|
|
4063
|
+
"Bind items and a valid value as properties, and handle dsChange to synchronize the visible panel."
|
|
4064
|
+
]
|
|
4065
|
+
}
|
|
4066
|
+
},
|
|
4067
|
+
"api": {
|
|
4068
|
+
"props": {
|
|
4069
|
+
"ariaLabel": {
|
|
4070
|
+
"type": "string | null",
|
|
4071
|
+
"required": false
|
|
4072
|
+
},
|
|
4073
|
+
"ariaLabelledby": {
|
|
4074
|
+
"type": "string | undefined",
|
|
4075
|
+
"required": false
|
|
4076
|
+
},
|
|
4077
|
+
"background": {
|
|
4078
|
+
"type": "PanelSubNavBackground | undefined",
|
|
4079
|
+
"required": false
|
|
4080
|
+
},
|
|
4081
|
+
"items": {
|
|
4082
|
+
"type": "PanelSubNavItem[]",
|
|
4083
|
+
"required": false
|
|
4084
|
+
},
|
|
4085
|
+
"value": {
|
|
4086
|
+
"type": "string",
|
|
4087
|
+
"required": false
|
|
4088
|
+
}
|
|
4089
|
+
},
|
|
4090
|
+
"events": [
|
|
4091
|
+
{
|
|
4092
|
+
"name": "dsChange",
|
|
4093
|
+
"detail": "string"
|
|
4094
|
+
}
|
|
4095
|
+
],
|
|
4096
|
+
"slots": []
|
|
4097
|
+
},
|
|
4098
|
+
"exports": {
|
|
4099
|
+
"customElement": "ds-panel-sub-nav",
|
|
4100
|
+
"react": "DsPanelSubNav",
|
|
4101
|
+
"angular": "DsPanelSubNav"
|
|
4102
|
+
},
|
|
4103
|
+
"dependencies": [
|
|
4104
|
+
"@ds-mo/ui",
|
|
4105
|
+
"@ds-mo/tokens"
|
|
4106
|
+
],
|
|
4107
|
+
"componentDependencies": [
|
|
4108
|
+
"text"
|
|
4109
|
+
]
|
|
4110
|
+
},
|
|
4111
|
+
{
|
|
4112
|
+
"id": "component:ds-panel-tool-header",
|
|
4113
|
+
"tag": "ds-panel-tool-header",
|
|
4114
|
+
"name": "panel-tool-header",
|
|
4115
|
+
"title": "PanelToolHeader",
|
|
4116
|
+
"summary": "Canonical left-aligned PanelTools header with an optional leading navigation or dismiss action and application-owned trailing icon actions.",
|
|
4117
|
+
"intentStatus": "complete",
|
|
4118
|
+
"intent": {
|
|
4119
|
+
"audience": "general",
|
|
4120
|
+
"status": "experimental",
|
|
4121
|
+
"summary": "Canonical left-aligned PanelTools header with an optional leading navigation or dismiss action and application-owned trailing icon actions.",
|
|
4122
|
+
"useWhen": [
|
|
4123
|
+
"PanelTools needs its one shared root or detail header.",
|
|
4124
|
+
"A tool header needs a title with optional Back or Close navigation, menu, fullscreen, or other compact icon actions."
|
|
4125
|
+
],
|
|
4126
|
+
"avoidWhen": [
|
|
4127
|
+
"Rendering inside a PanelTools tool body; PanelTools already composes this canonical header above the body.",
|
|
4128
|
+
"The header belongs to page content."
|
|
4129
|
+
],
|
|
4130
|
+
"commonlyComposedWith": [
|
|
4131
|
+
"component:ds-button-unfilled"
|
|
4132
|
+
],
|
|
4133
|
+
"accessibility": [
|
|
4134
|
+
"Leading navigation or dismiss actions and trailing icon actions require concise localized names.",
|
|
4135
|
+
"The visible heading names the active panel or subview."
|
|
4136
|
+
],
|
|
4137
|
+
"states": [
|
|
4138
|
+
"The title remains left aligned whether the header has no actions, Back, one trailing action, or several trailing actions.",
|
|
4139
|
+
"Leading and trailing control zones never shrink; only the title consumes and truncates within the remaining width, with a fixed 4px gap between zones.",
|
|
4140
|
+
"Header chrome text is not selectable; actions remain keyboard focusable and interactive.",
|
|
4141
|
+
"Adjacent trailing actions keep the shared 4px control gap in drawer and fullscreen presentations.",
|
|
4142
|
+
"When fullscreen and overflow actions appear together, author fullscreen before overflow so Ellipses remains the rightmost action.",
|
|
4143
|
+
"PanelTools supplies application-owned actions and relays their ids through its shared dsHeaderAction event."
|
|
4144
|
+
],
|
|
4145
|
+
"responsiveBehavior": [
|
|
4146
|
+
"The title truncates between optional leading navigation and trailing action zones."
|
|
4147
|
+
],
|
|
4148
|
+
"references": [
|
|
4149
|
+
{
|
|
4150
|
+
"label": "Standalone examples",
|
|
4151
|
+
"path": "src/wc/components/PanelToolHeader/PanelToolHeader.stories.ts"
|
|
4152
|
+
}
|
|
4153
|
+
]
|
|
4154
|
+
},
|
|
4155
|
+
"api": {
|
|
4156
|
+
"props": {
|
|
4157
|
+
"actions": {
|
|
4158
|
+
"type": "PanelToolsHeaderAction[]",
|
|
4159
|
+
"required": false
|
|
4160
|
+
},
|
|
4161
|
+
"backAriaLabel": {
|
|
4162
|
+
"type": "string",
|
|
4163
|
+
"required": false
|
|
4164
|
+
},
|
|
4165
|
+
"backIcon": {
|
|
4166
|
+
"type": "string",
|
|
4167
|
+
"required": false
|
|
4168
|
+
},
|
|
4169
|
+
"heading": {
|
|
4170
|
+
"type": "string",
|
|
4171
|
+
"required": false
|
|
4172
|
+
},
|
|
4173
|
+
"menuAriaLabel": {
|
|
2727
4174
|
"type": "string",
|
|
2728
4175
|
"required": false
|
|
2729
4176
|
},
|
|
2730
|
-
"
|
|
2731
|
-
"type": "string",
|
|
4177
|
+
"menuControls": {
|
|
4178
|
+
"type": "string | undefined",
|
|
2732
4179
|
"required": false
|
|
2733
4180
|
},
|
|
2734
|
-
"
|
|
2735
|
-
"type": "
|
|
4181
|
+
"menuExpanded": {
|
|
4182
|
+
"type": "boolean",
|
|
2736
4183
|
"required": false
|
|
2737
4184
|
},
|
|
2738
|
-
"
|
|
4185
|
+
"menuTriggerId": {
|
|
2739
4186
|
"type": "string",
|
|
2740
4187
|
"required": false
|
|
2741
4188
|
},
|
|
2742
|
-
"
|
|
2743
|
-
"type": "
|
|
4189
|
+
"showBack": {
|
|
4190
|
+
"type": "boolean",
|
|
4191
|
+
"required": false
|
|
4192
|
+
},
|
|
4193
|
+
"showMenu": {
|
|
4194
|
+
"type": "boolean",
|
|
2744
4195
|
"required": false
|
|
2745
4196
|
}
|
|
2746
4197
|
},
|
|
2747
4198
|
"events": [
|
|
2748
4199
|
{
|
|
2749
|
-
"name": "
|
|
2750
|
-
"detail": "
|
|
2751
|
-
},
|
|
2752
|
-
{
|
|
2753
|
-
"name": "dsChromeTransitionStart",
|
|
2754
|
-
"detail": "ChromeTransitionDetail"
|
|
2755
|
-
},
|
|
2756
|
-
{
|
|
2757
|
-
"name": "dsNavFooterAction",
|
|
2758
|
-
"detail": "void"
|
|
2759
|
-
},
|
|
2760
|
-
{
|
|
2761
|
-
"name": "dsNavSelect",
|
|
2762
|
-
"detail": "string"
|
|
4200
|
+
"name": "dsAction",
|
|
4201
|
+
"detail": "{ id: string; originalEvent: MouseEvent }"
|
|
2763
4202
|
},
|
|
2764
4203
|
{
|
|
2765
|
-
"name": "
|
|
2766
|
-
"detail": "
|
|
4204
|
+
"name": "dsBack",
|
|
4205
|
+
"detail": "MouseEvent"
|
|
2767
4206
|
},
|
|
2768
4207
|
{
|
|
2769
|
-
"name": "
|
|
2770
|
-
"detail": "
|
|
4208
|
+
"name": "dsMenuToggle",
|
|
4209
|
+
"detail": "MouseEvent"
|
|
2771
4210
|
}
|
|
2772
4211
|
],
|
|
2773
4212
|
"slots": []
|
|
2774
4213
|
},
|
|
2775
4214
|
"exports": {
|
|
2776
|
-
"customElement": "ds-panel-
|
|
2777
|
-
"react": "
|
|
2778
|
-
"angular": "
|
|
4215
|
+
"customElement": "ds-panel-tool-header",
|
|
4216
|
+
"react": "DsPanelToolHeader",
|
|
4217
|
+
"angular": "DsPanelToolHeader"
|
|
2779
4218
|
},
|
|
2780
4219
|
"dependencies": [
|
|
2781
4220
|
"@ds-mo/ui",
|
|
2782
|
-
"@ds-mo/tokens"
|
|
2783
|
-
"@ds-mo/icons"
|
|
4221
|
+
"@ds-mo/tokens"
|
|
2784
4222
|
],
|
|
2785
4223
|
"componentDependencies": [
|
|
2786
|
-
"badge",
|
|
2787
4224
|
"button-unfilled",
|
|
2788
|
-
"
|
|
2789
|
-
"text",
|
|
2790
|
-
"tooltip"
|
|
4225
|
+
"text"
|
|
2791
4226
|
]
|
|
2792
4227
|
},
|
|
2793
4228
|
{
|
|
2794
|
-
"id": "component:ds-panel-
|
|
2795
|
-
"tag": "ds-panel-
|
|
2796
|
-
"name": "panel-
|
|
2797
|
-
"title": "
|
|
2798
|
-
"summary": "
|
|
4229
|
+
"id": "component:ds-panel-tool-search",
|
|
4230
|
+
"tag": "ds-panel-tool-search",
|
|
4231
|
+
"name": "panel-tool-search",
|
|
4232
|
+
"title": "PanelToolSearch",
|
|
4233
|
+
"summary": "Transparent search row for the top of a PanelTools product view, with a fixed 48px allocation around the standard md search control and an optional filter-menu trigger.",
|
|
2799
4234
|
"intentStatus": "complete",
|
|
2800
4235
|
"intent": {
|
|
2801
4236
|
"audience": "general",
|
|
2802
|
-
"status": "
|
|
2803
|
-
"summary": "
|
|
4237
|
+
"status": "experimental",
|
|
4238
|
+
"summary": "Transparent search row for the top of a PanelTools product view, with a fixed 48px allocation around the standard md search control and an optional filter-menu trigger.",
|
|
2804
4239
|
"useWhen": [
|
|
2805
|
-
"A
|
|
2806
|
-
"
|
|
4240
|
+
"A PanelTools base view filters or searches the tool's own content.",
|
|
4241
|
+
"Several tool products need the same search-row geometry directly below the shared PanelTools header.",
|
|
4242
|
+
"The product needs a compact filter menu next to search while keeping its filter choices and matching policy application-owned."
|
|
2807
4243
|
],
|
|
2808
4244
|
"avoidWhen": [
|
|
2809
|
-
"The
|
|
2810
|
-
"
|
|
2811
|
-
"The choices navigate routes in application shell chrome; use PanelNav or BarNav instead.",
|
|
2812
|
-
"The choices are temporary commands or contextual options; use Menu instead.",
|
|
2813
|
-
"Rows need icons, subtext, notification dots, nested levels, or section headers."
|
|
2814
|
-
],
|
|
2815
|
-
"alternatives": [
|
|
2816
|
-
{
|
|
2817
|
-
"when": "Local panel choices fit a horizontal tab row.",
|
|
2818
|
-
"component": "component:ds-tab-group",
|
|
2819
|
-
"reason": "TabGroup is the horizontal local-view counterpart."
|
|
2820
|
-
},
|
|
2821
|
-
{
|
|
2822
|
-
"when": "The choices are primary application destinations.",
|
|
2823
|
-
"component": "component:ds-panel-nav",
|
|
2824
|
-
"reason": "PanelNav owns primary application navigation."
|
|
2825
|
-
},
|
|
2826
|
-
{
|
|
2827
|
-
"when": "The choices are secondary application routes.",
|
|
2828
|
-
"component": "component:ds-bar-nav",
|
|
2829
|
-
"reason": "BarNav owns route sections inside AppShell."
|
|
2830
|
-
},
|
|
2831
|
-
{
|
|
2832
|
-
"when": "The choices are transient actions or options.",
|
|
2833
|
-
"component": "component:ds-menu",
|
|
2834
|
-
"reason": "Menu owns temporary popup collections."
|
|
2835
|
-
}
|
|
4245
|
+
"The search belongs inside a Select or SelectMulti popup; use that component's searchable behavior.",
|
|
4246
|
+
"A form needs a labelled standalone field; compose ds-input inside ds-field instead."
|
|
2836
4247
|
],
|
|
2837
4248
|
"commonlyComposedWith": [
|
|
2838
|
-
"component:ds-
|
|
2839
|
-
"component:ds-
|
|
4249
|
+
"component:ds-panel-tools",
|
|
4250
|
+
"component:ds-conversation-list",
|
|
4251
|
+
"component:ds-input"
|
|
2840
4252
|
],
|
|
2841
4253
|
"accessibility": [
|
|
2842
|
-
"Provide an
|
|
2843
|
-
"
|
|
2844
|
-
"
|
|
2845
|
-
"Always provide a valid selected item when enabled items exist so exactly one tab and panel are active.",
|
|
2846
|
-
"ArrowUp and ArrowDown move and activate selection; Home and End select the first and last available items.",
|
|
2847
|
-
"Do not use selected text weight as the selection cue; active fill and primary foreground communicate selection."
|
|
4254
|
+
"Provide an aria-label that names the searched domain, such as Search agent chats or Search messages.",
|
|
4255
|
+
"The standard search clear action restores focus and emits both the empty query and dsClear.",
|
|
4256
|
+
"When showFilter is enabled, provide stable filterTriggerId and filterControls values, synchronize filterExpanded with the controlled menu, and restore focus after selection."
|
|
2848
4257
|
],
|
|
2849
4258
|
"states": [
|
|
2850
|
-
"The
|
|
2851
|
-
"
|
|
2852
|
-
"
|
|
2853
|
-
"
|
|
2854
|
-
"
|
|
2855
|
-
"Rows contain one text label only and do not express nested navigation or grouped hierarchy."
|
|
4259
|
+
"The row is always 48px high with 8px outer padding and a complete md search recipe: 32px control, text-body-medium at 14px/20px, and a 20px md search icon.",
|
|
4260
|
+
"The search icon stays foreground-secondary at rest, hover, focus, active, and while the query is filled.",
|
|
4261
|
+
"The row and control surface remain transparent so the AppShell chrome wash is visible behind them.",
|
|
4262
|
+
"The row divider remains the same tertiary 1px boundary while the input is focused because it belongs to the 48px container rather than the input control.",
|
|
4263
|
+
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill."
|
|
2856
4264
|
],
|
|
2857
4265
|
"responsiveBehavior": [
|
|
2858
|
-
"The
|
|
2859
|
-
"The consuming panel owns responsive adaptation and decides whether to reposition or replace the side rail."
|
|
4266
|
+
"The row fills the available drawer or fullscreen width, allows its search region to shrink inside a 300px drawer without pushing the filter trigger under the tool rail, and does not reduce its control below md density."
|
|
2860
4267
|
],
|
|
2861
4268
|
"frameworkCaveats": {
|
|
2862
4269
|
"customElements": [
|
|
2863
|
-
"
|
|
2864
|
-
"
|
|
4270
|
+
"Listen for dsChange to receive the current string query and dsClear when the clear action is used.",
|
|
4271
|
+
"Listen for dsFilterToggle and pair the trigger with an externally controlled ds-menu; product-specific filter labels and filtering remain outside this component."
|
|
2865
4272
|
],
|
|
2866
4273
|
"react": [
|
|
2867
|
-
"
|
|
4274
|
+
"Use DsPanelToolSearch, bind value for controlled state, and handle onDsChange.",
|
|
4275
|
+
"Bind the optional filter trigger state and connect onDsFilterToggle to a controlled DsMenu."
|
|
2868
4276
|
],
|
|
2869
4277
|
"angular": [
|
|
2870
|
-
"
|
|
4278
|
+
"Import DsPanelToolSearch and bind value as a property; this search composition is not a form value accessor.",
|
|
4279
|
+
"Bind showFilter, filterExpanded, and filterActive, then connect dsFilterToggle to a product-owned ds-menu."
|
|
2871
4280
|
]
|
|
2872
|
-
}
|
|
4281
|
+
},
|
|
4282
|
+
"references": [
|
|
4283
|
+
{
|
|
4284
|
+
"label": "Storybook examples",
|
|
4285
|
+
"path": "src/wc/components/PanelToolSearch/PanelToolSearch.stories.ts"
|
|
4286
|
+
}
|
|
4287
|
+
]
|
|
2873
4288
|
},
|
|
2874
4289
|
"api": {
|
|
2875
4290
|
"props": {
|
|
2876
4291
|
"ariaLabel": {
|
|
2877
|
-
"type": "string
|
|
4292
|
+
"type": "string",
|
|
2878
4293
|
"required": false
|
|
2879
4294
|
},
|
|
2880
|
-
"
|
|
4295
|
+
"controls": {
|
|
2881
4296
|
"type": "string | undefined",
|
|
2882
4297
|
"required": false
|
|
2883
4298
|
},
|
|
2884
|
-
"
|
|
2885
|
-
"type": "
|
|
4299
|
+
"filterActive": {
|
|
4300
|
+
"type": "boolean",
|
|
2886
4301
|
"required": false
|
|
2887
4302
|
},
|
|
2888
|
-
"
|
|
2889
|
-
"type": "
|
|
4303
|
+
"filterAriaLabel": {
|
|
4304
|
+
"type": "string",
|
|
4305
|
+
"required": false
|
|
4306
|
+
},
|
|
4307
|
+
"filterControls": {
|
|
4308
|
+
"type": "string | undefined",
|
|
4309
|
+
"required": false
|
|
4310
|
+
},
|
|
4311
|
+
"filterExpanded": {
|
|
4312
|
+
"type": "boolean",
|
|
4313
|
+
"required": false
|
|
4314
|
+
},
|
|
4315
|
+
"filterTriggerId": {
|
|
4316
|
+
"type": "string",
|
|
4317
|
+
"required": false
|
|
4318
|
+
},
|
|
4319
|
+
"isInactive": {
|
|
4320
|
+
"type": "boolean",
|
|
4321
|
+
"required": false
|
|
4322
|
+
},
|
|
4323
|
+
"placeholder": {
|
|
4324
|
+
"type": "string",
|
|
4325
|
+
"required": false
|
|
4326
|
+
},
|
|
4327
|
+
"showFilter": {
|
|
4328
|
+
"type": "boolean",
|
|
2890
4329
|
"required": false
|
|
2891
4330
|
},
|
|
2892
4331
|
"value": {
|
|
@@ -2898,20 +4337,32 @@
|
|
|
2898
4337
|
{
|
|
2899
4338
|
"name": "dsChange",
|
|
2900
4339
|
"detail": "string"
|
|
4340
|
+
},
|
|
4341
|
+
{
|
|
4342
|
+
"name": "dsClear",
|
|
4343
|
+
"detail": "void"
|
|
4344
|
+
},
|
|
4345
|
+
{
|
|
4346
|
+
"name": "dsFilterToggle",
|
|
4347
|
+
"detail": "MouseEvent"
|
|
2901
4348
|
}
|
|
2902
4349
|
],
|
|
2903
4350
|
"slots": []
|
|
2904
4351
|
},
|
|
2905
4352
|
"exports": {
|
|
2906
|
-
"customElement": "ds-panel-
|
|
2907
|
-
"react": "
|
|
2908
|
-
"angular": "
|
|
4353
|
+
"customElement": "ds-panel-tool-search",
|
|
4354
|
+
"react": "DsPanelToolSearch",
|
|
4355
|
+
"angular": "DsPanelToolSearch"
|
|
2909
4356
|
},
|
|
2910
4357
|
"dependencies": [
|
|
2911
4358
|
"@ds-mo/ui",
|
|
2912
|
-
"@ds-mo/tokens"
|
|
4359
|
+
"@ds-mo/tokens",
|
|
4360
|
+
"@ds-mo/icons"
|
|
2913
4361
|
],
|
|
2914
4362
|
"componentDependencies": [
|
|
4363
|
+
"button-unfilled",
|
|
4364
|
+
"divider",
|
|
4365
|
+
"icon",
|
|
2915
4366
|
"text"
|
|
2916
4367
|
]
|
|
2917
4368
|
},
|
|
@@ -2979,21 +4430,32 @@
|
|
|
2979
4430
|
"The drawer starts closed, remains open across ordinary route changes, and retains every mounted tool's independent conversation, query, scroll, and work state.",
|
|
2980
4431
|
"When storageKey is set, persist only the last active tool in this browser and still restore the drawer closed after reload.",
|
|
2981
4432
|
"The application owns unread state; opening Messages, Agents, Stacks, or Activity does not automatically clear its notification dot.",
|
|
4433
|
+
"PanelTools owns the one visible header above every drawer tool view and above fullscreen views using the default shared header mode. Slotted tool content must not render a second header unless the conversation product explicitly opts into split fullscreen headers.",
|
|
4434
|
+
"PanelTools composes ds-panel-tool-header as its canonical left-aligned header implementation so standalone header stories and shell rendering cannot diverge.",
|
|
4435
|
+
"Each tool supplies its current header title, base-versus-detail Back state, and right-side actions through the headers property. Base views omit Back; deeper views expose Back and update the same header in place.",
|
|
4436
|
+
"Header Back and action events express intent only; the owning tool changes product navigation, menus, and data state. PanelTools keeps the final header action exactly 8px from the drawer edge.",
|
|
4437
|
+
"Menus opened from a right-side header action use PANEL_TOOLS_HEADER_MENU_PLACEMENT: bottom/end choice-cell alignment and a 12px side offset, placing the popup 4px below the 48px header while aligning the final menu item edge with the trigger.",
|
|
4438
|
+
"Tool view roots stay transparent so AppShell's chrome wash remains visible; only explicitly designed child surfaces introduce a fill.",
|
|
4439
|
+
"Tools with search compose ds-panel-tool-search immediately below the shared header. Its 48px row always contains the md search control and must not be reduced to sm or xs.",
|
|
2982
4440
|
"If an active optional tool becomes unavailable, PanelTools closes the drawer, clears activeTool, and emits its deselection.",
|
|
2983
4441
|
"Use isInactive only for a temporarily unavailable visible tool; omit tools the user is not authorized to access.",
|
|
2984
|
-
"The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events."
|
|
4442
|
+
"The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events.",
|
|
4443
|
+
"Opening and closing clip an already-rendered fixed-width surface. Header and tool content remain fully opaque and retained during width motion; transition completion is accepted only at the measured terminal clip width, after which the closed surface becomes inert and paint-skipped.",
|
|
4444
|
+
"Entering and exiting fullscreen snaps without borrowing the drawer open or close animation.",
|
|
4445
|
+
"When fullscreenHeaderMode is split, PanelTools suppresses only its fullscreen shared header. The application renders exactly two canonical ds-panel-tool-header instances: a tool-title/list-actions header over the 300px history pane and a chat-title/Exit-fullscreen/chat-actions header over the detail pane. The detail header omits Back because the list remains visible."
|
|
2985
4446
|
],
|
|
2986
4447
|
"responsiveBehavior": [
|
|
2987
|
-
"
|
|
2988
|
-
"
|
|
2989
|
-
"AppShell owns the responsive drawer-width variable and fixed breakpoint policy; consumers must not hardcode alternate drawer widths.",
|
|
4448
|
+
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
4449
|
+
"AppShell owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
2990
4450
|
"Below 768px, do not reuse desktop PanelTools: future AppShell mobile composition uses a bottom bar for Search, Agents, Notifications, and Stacks, while Help moves into mobile primary navigation.",
|
|
2991
4451
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
4452
|
+
"Conversation products may use fullscreenHeaderMode split for a 300px history rail beside a flexible detail pane, each with its own canonical header; the application owns that internal split layout.",
|
|
2992
4453
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
2993
4454
|
],
|
|
2994
4455
|
"frameworkCaveats": {
|
|
2995
4456
|
"customElements": [
|
|
2996
4457
|
"Assign items as a JavaScript property for structured data; items-json is the string fallback.",
|
|
4458
|
+
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
2997
4459
|
"Keep PanelTools mounted at AppShell scope across route changes and provide each product through its matching named slot."
|
|
2998
4460
|
],
|
|
2999
4461
|
"react": [
|
|
@@ -3002,6 +4464,7 @@
|
|
|
3002
4464
|
],
|
|
3003
4465
|
"angular": [
|
|
3004
4466
|
"Import DsPanelTools from @ds-mo/ui/angular/ds-panel-tools and bind items as a property.",
|
|
4467
|
+
"Bind headers as a replaced object and route dsHeaderBack and dsHeaderAction to the active tool owner.",
|
|
3005
4468
|
"Keep the component in the persistent shell layout rather than recreating it in routed page components."
|
|
3006
4469
|
]
|
|
3007
4470
|
},
|
|
@@ -3026,6 +4489,18 @@
|
|
|
3026
4489
|
"type": "PanelToolsToolId | ''",
|
|
3027
4490
|
"required": false
|
|
3028
4491
|
},
|
|
4492
|
+
"fullscreenHeaderMode": {
|
|
4493
|
+
"type": "'shared' | 'split'",
|
|
4494
|
+
"required": false
|
|
4495
|
+
},
|
|
4496
|
+
"headers": {
|
|
4497
|
+
"type": "PanelToolsHeaders",
|
|
4498
|
+
"required": false
|
|
4499
|
+
},
|
|
4500
|
+
"headersJson": {
|
|
4501
|
+
"type": "string",
|
|
4502
|
+
"required": false
|
|
4503
|
+
},
|
|
3029
4504
|
"items": {
|
|
3030
4505
|
"type": "PanelToolsItem[]",
|
|
3031
4506
|
"required": false
|
|
@@ -3038,6 +4513,10 @@
|
|
|
3038
4513
|
"type": "boolean",
|
|
3039
4514
|
"required": false
|
|
3040
4515
|
},
|
|
4516
|
+
"presentation": {
|
|
4517
|
+
"type": "'drawer' | 'fullscreen'",
|
|
4518
|
+
"required": false
|
|
4519
|
+
},
|
|
3041
4520
|
"storageKey": {
|
|
3042
4521
|
"type": "string",
|
|
3043
4522
|
"required": false
|
|
@@ -3060,6 +4539,18 @@
|
|
|
3060
4539
|
"name": "dsChromeTransitionStart",
|
|
3061
4540
|
"detail": "ChromeTransitionDetail"
|
|
3062
4541
|
},
|
|
4542
|
+
{
|
|
4543
|
+
"name": "dsHeaderAction",
|
|
4544
|
+
"detail": "{\n tool: PanelToolsToolId;\n id: string;\n }"
|
|
4545
|
+
},
|
|
4546
|
+
{
|
|
4547
|
+
"name": "dsHeaderBack",
|
|
4548
|
+
"detail": "{\n tool: PanelToolsToolId;\n }"
|
|
4549
|
+
},
|
|
4550
|
+
{
|
|
4551
|
+
"name": "dsPresentationChange",
|
|
4552
|
+
"detail": "{\n presentation: 'drawer' | 'fullscreen';\n }"
|
|
4553
|
+
},
|
|
3063
4554
|
{
|
|
3064
4555
|
"name": "dsToolChange",
|
|
3065
4556
|
"detail": "{\n id: PanelToolsToolId;\n selected: boolean;\n }"
|
|
@@ -3078,7 +4569,7 @@
|
|
|
3078
4569
|
],
|
|
3079
4570
|
"componentDependencies": [
|
|
3080
4571
|
"button-unfilled",
|
|
3081
|
-
"
|
|
4572
|
+
"panel-tool-header",
|
|
3082
4573
|
"tooltip"
|
|
3083
4574
|
]
|
|
3084
4575
|
},
|
|
@@ -3757,12 +5248,14 @@
|
|
|
3757
5248
|
"tag": "ds-shell-gradient-picker",
|
|
3758
5249
|
"name": "shell-gradient-picker",
|
|
3759
5250
|
"title": "ShellGradientPicker",
|
|
3760
|
-
"summary": "
|
|
5251
|
+
"summary": "Deprecated compatibility wrapper that maps the fixed AppShell wash presets into SwatchPicker.",
|
|
3761
5252
|
"intentStatus": "complete",
|
|
3762
5253
|
"intent": {
|
|
3763
5254
|
"audience": "specialized",
|
|
3764
|
-
"status": "
|
|
3765
|
-
"
|
|
5255
|
+
"status": "deprecated",
|
|
5256
|
+
"replacedBy": "component:ds-swatch-picker",
|
|
5257
|
+
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
5258
|
+
"summary": "Deprecated compatibility wrapper that maps the fixed AppShell wash presets into SwatchPicker.",
|
|
3766
5259
|
"useWhen": [
|
|
3767
5260
|
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
3768
5261
|
"Users must choose the global AppShell chrome treatment from none, cool, neutral, warm, or fresh."
|
|
@@ -3816,8 +5309,8 @@
|
|
|
3816
5309
|
},
|
|
3817
5310
|
"references": [
|
|
3818
5311
|
{
|
|
3819
|
-
"label": "
|
|
3820
|
-
"path": "src/wc/components/
|
|
5312
|
+
"label": "Replacement stories",
|
|
5313
|
+
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
3821
5314
|
},
|
|
3822
5315
|
{
|
|
3823
5316
|
"label": "AppShell gradient contract",
|
|
@@ -3858,7 +5351,7 @@
|
|
|
3858
5351
|
"@ds-mo/tokens"
|
|
3859
5352
|
],
|
|
3860
5353
|
"componentDependencies": [
|
|
3861
|
-
"
|
|
5354
|
+
"swatch-picker"
|
|
3862
5355
|
]
|
|
3863
5356
|
},
|
|
3864
5357
|
{
|
|
@@ -3866,12 +5359,14 @@
|
|
|
3866
5359
|
"tag": "ds-shell-gradient-swatch",
|
|
3867
5360
|
"name": "shell-gradient-swatch",
|
|
3868
5361
|
"title": "ShellGradientSwatch",
|
|
3869
|
-
"summary": "
|
|
5362
|
+
"summary": "Deprecated internal compatibility component for one legacy AppShell gradient swatch.",
|
|
3870
5363
|
"intentStatus": "complete",
|
|
3871
5364
|
"intent": {
|
|
3872
5365
|
"audience": "internal",
|
|
3873
|
-
"status": "
|
|
3874
|
-
"
|
|
5366
|
+
"status": "deprecated",
|
|
5367
|
+
"replacedBy": "component:ds-swatch-picker",
|
|
5368
|
+
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
5369
|
+
"summary": "Deprecated internal compatibility component for one legacy AppShell gradient swatch.",
|
|
3875
5370
|
"useWhen": [
|
|
3876
5371
|
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
3877
5372
|
],
|
|
@@ -3883,12 +5378,12 @@
|
|
|
3883
5378
|
"alternatives": [
|
|
3884
5379
|
{
|
|
3885
5380
|
"when": "An application needs the supported global shell appearance control.",
|
|
3886
|
-
"component": "component:ds-
|
|
3887
|
-
"reason": "
|
|
5381
|
+
"component": "component:ds-swatch-picker",
|
|
5382
|
+
"reason": "SwatchPicker provides the complete radio-group semantics, keyboard behavior, generic previews, and selection event."
|
|
3888
5383
|
}
|
|
3889
5384
|
],
|
|
3890
5385
|
"commonlyComposedWith": [
|
|
3891
|
-
"component:ds-
|
|
5386
|
+
"component:ds-swatch-picker"
|
|
3892
5387
|
],
|
|
3893
5388
|
"accessibility": [
|
|
3894
5389
|
"Keep radio semantics, aria-checked state, and a preset-specific accessible name on the internal button.",
|
|
@@ -4146,6 +5641,7 @@
|
|
|
4146
5641
|
"Focused, filled, dirty, touched, dragging, valid, disabled, read-only, and orientation data hooks expose interaction state without changing the value contract."
|
|
4147
5642
|
],
|
|
4148
5643
|
"responsiveBehavior": [
|
|
5644
|
+
"The visible label uses the same primary emphasized text-body-small recipe as Field at every density; the value uses the same primary metric without emphasis.",
|
|
4149
5645
|
"Horizontal Slider fills the width supplied by its parent; the parent chooses an appropriate readable track length.",
|
|
4150
5646
|
"Vertical Slider owns a token-based default length that may be overridden with --ds-slider-vertical-length in layout-specific compositions.",
|
|
4151
5647
|
"Use md in ordinary forms and sm or xs only when the surrounding control density uses the same recipe.",
|
|
@@ -4315,6 +5811,121 @@
|
|
|
4315
5811
|
"text"
|
|
4316
5812
|
]
|
|
4317
5813
|
},
|
|
5814
|
+
{
|
|
5815
|
+
"id": "component:ds-swatch-picker",
|
|
5816
|
+
"tag": "ds-swatch-picker",
|
|
5817
|
+
"name": "swatch-picker",
|
|
5818
|
+
"title": "SwatchPicker",
|
|
5819
|
+
"summary": "Compact one-of-many picker for curated flat-color, gradient, or visually absent presets with optional section separators and roving radio-group interaction.",
|
|
5820
|
+
"intentStatus": "complete",
|
|
5821
|
+
"intent": {
|
|
5822
|
+
"audience": "general",
|
|
5823
|
+
"status": "stable",
|
|
5824
|
+
"summary": "Compact one-of-many picker for curated flat-color, gradient, or visually absent presets with optional section separators and roving radio-group interaction.",
|
|
5825
|
+
"useWhen": [
|
|
5826
|
+
"Users choose exactly one visual preset from a small curated set.",
|
|
5827
|
+
"Options are best compared through compact flat-color or gradient previews.",
|
|
5828
|
+
"A settings surface or richer menu needs an immediately applied visual preference."
|
|
5829
|
+
],
|
|
5830
|
+
"avoidWhen": [
|
|
5831
|
+
"Users need an unrestricted spectrum, numeric channels, opacity editing, or custom CSS gradient construction.",
|
|
5832
|
+
"Text labels are the primary distinction between choices; use Radio instead.",
|
|
5833
|
+
"The choice is a submitted form value with validation or a long compact list; use Radio or Select.",
|
|
5834
|
+
"Color or gradient is the only indication of status, meaning, or required action."
|
|
5835
|
+
],
|
|
5836
|
+
"alternatives": [
|
|
5837
|
+
{
|
|
5838
|
+
"when": "The user needs an arbitrary color rather than a curated preset.",
|
|
5839
|
+
"component": "component:ds-input",
|
|
5840
|
+
"reason": "SwatchPicker intentionally does not provide spectrum, channel, or free-form value editing."
|
|
5841
|
+
},
|
|
5842
|
+
{
|
|
5843
|
+
"when": "Visible text labels are more important than visual previews.",
|
|
5844
|
+
"component": "component:ds-radio",
|
|
5845
|
+
"reason": "Radio presents explicit one-of-many option labels and native form behavior."
|
|
5846
|
+
},
|
|
5847
|
+
{
|
|
5848
|
+
"when": "The option set is long or must remain compact.",
|
|
5849
|
+
"component": "component:ds-select",
|
|
5850
|
+
"reason": "Select scales a larger named choice set into an anchored listbox."
|
|
5851
|
+
}
|
|
5852
|
+
],
|
|
5853
|
+
"commonlyComposedWith": [
|
|
5854
|
+
"component:ds-menu",
|
|
5855
|
+
"component:ds-app-shell"
|
|
5856
|
+
],
|
|
5857
|
+
"accessibility": [
|
|
5858
|
+
"Provide a localized groupLabel describing the complete choice.",
|
|
5859
|
+
"Give every option a meaningful label because its visual preview is never its accessible name.",
|
|
5860
|
+
"The options form one radio group with one Tab stop; Arrow keys wrap across active options while Home and End select the boundaries.",
|
|
5861
|
+
"Inactive options remain named and disabled, and keyboard movement skips them."
|
|
5862
|
+
],
|
|
5863
|
+
"states": [
|
|
5864
|
+
"value is the selected option value and updates when the user chooses an active option.",
|
|
5865
|
+
"options provides one flat list; sections takes precedence and adds visual separators while preserving one radio group.",
|
|
5866
|
+
"A preview may use a token-based backgroundColor, a CSS gradient backgroundImage, and an optional opacity from zero through one.",
|
|
5867
|
+
"The parent owns persistence and application of the selected value; SwatchPicker owns only choice interaction and dsChange."
|
|
5868
|
+
],
|
|
5869
|
+
"responsiveBehavior": [
|
|
5870
|
+
"Options wrap within the width supplied by the parent while retaining compact fixed swatch geometry.",
|
|
5871
|
+
"Keep the set small enough for direct visual comparison; switch to a named list when wrapping harms comprehension."
|
|
5872
|
+
],
|
|
5873
|
+
"frameworkCaveats": {
|
|
5874
|
+
"customElements": [
|
|
5875
|
+
"Assign options or sections as JavaScript properties, bind value, and listen for dsChange."
|
|
5876
|
+
],
|
|
5877
|
+
"react": [
|
|
5878
|
+
"Use DsSwatchPicker, pass option arrays as props, and handle onDsChange."
|
|
5879
|
+
],
|
|
5880
|
+
"angular": [
|
|
5881
|
+
"Use property bindings for options or sections and handle dsChange to update application state."
|
|
5882
|
+
]
|
|
5883
|
+
},
|
|
5884
|
+
"references": [
|
|
5885
|
+
{
|
|
5886
|
+
"label": "Executable stories",
|
|
5887
|
+
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
5888
|
+
}
|
|
5889
|
+
]
|
|
5890
|
+
},
|
|
5891
|
+
"api": {
|
|
5892
|
+
"props": {
|
|
5893
|
+
"groupLabel": {
|
|
5894
|
+
"type": "string",
|
|
5895
|
+
"required": false
|
|
5896
|
+
},
|
|
5897
|
+
"options": {
|
|
5898
|
+
"type": "SwatchPickerOption[]",
|
|
5899
|
+
"required": false
|
|
5900
|
+
},
|
|
5901
|
+
"sections": {
|
|
5902
|
+
"type": "SwatchPickerSection[]",
|
|
5903
|
+
"required": false
|
|
5904
|
+
},
|
|
5905
|
+
"value": {
|
|
5906
|
+
"type": "string",
|
|
5907
|
+
"required": false
|
|
5908
|
+
}
|
|
5909
|
+
},
|
|
5910
|
+
"events": [
|
|
5911
|
+
{
|
|
5912
|
+
"name": "dsChange",
|
|
5913
|
+
"detail": "string"
|
|
5914
|
+
}
|
|
5915
|
+
],
|
|
5916
|
+
"slots": []
|
|
5917
|
+
},
|
|
5918
|
+
"exports": {
|
|
5919
|
+
"customElement": "ds-swatch-picker",
|
|
5920
|
+
"react": "DsSwatchPicker",
|
|
5921
|
+
"angular": "DsSwatchPicker"
|
|
5922
|
+
},
|
|
5923
|
+
"dependencies": [
|
|
5924
|
+
"@ds-mo/ui",
|
|
5925
|
+
"@ds-mo/tokens"
|
|
5926
|
+
],
|
|
5927
|
+
"componentDependencies": []
|
|
5928
|
+
},
|
|
4318
5929
|
{
|
|
4319
5930
|
"id": "component:ds-switch",
|
|
4320
5931
|
"tag": "ds-switch",
|
|
@@ -4651,7 +6262,8 @@
|
|
|
4651
6262
|
"commonlyComposedWith": [
|
|
4652
6263
|
"component:ds-card",
|
|
4653
6264
|
"component:ds-text",
|
|
4654
|
-
"component:ds-icon"
|
|
6265
|
+
"component:ds-icon",
|
|
6266
|
+
"component:ds-menu"
|
|
4655
6267
|
],
|
|
4656
6268
|
"accessibility": [
|
|
4657
6269
|
"The visible label provides Tag's accessible name; a separate aria-label is normally unnecessary.",
|