@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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "avatar",
|
|
4
|
+
"title": "Avatar",
|
|
5
|
+
"description": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/avatar",
|
|
11
|
+
"source": "src/wc/components/Avatar/Avatar.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "experimental",
|
|
16
|
+
"summary": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"A list or message composition needs a consistent 32px circular identity marker represented by an icon."
|
|
19
|
+
],
|
|
20
|
+
"avoidWhen": [
|
|
21
|
+
"The identity has a supplied photograph, initials, presence state, or editable profile behavior; those variants are not part of this primitive."
|
|
22
|
+
],
|
|
23
|
+
"commonlyComposedWith": [
|
|
24
|
+
"component:ds-conversation-list-item",
|
|
25
|
+
"component:ds-message"
|
|
26
|
+
],
|
|
27
|
+
"accessibility": [
|
|
28
|
+
"Provide label only when the icon communicates meaning that surrounding text does not already convey.",
|
|
29
|
+
"Omit label when the owning row or message already provides an equivalent accessible name."
|
|
30
|
+
],
|
|
31
|
+
"responsiveBehavior": [
|
|
32
|
+
"The avatar keeps its fixed 32px circle and 20px icon at every viewport size."
|
|
33
|
+
],
|
|
34
|
+
"references": [
|
|
35
|
+
{
|
|
36
|
+
"label": "Storybook examples",
|
|
37
|
+
"path": "src/wc/components/Avatar/Avatar.stories.ts"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"api": {
|
|
42
|
+
"props": {
|
|
43
|
+
"icon": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"resolvedType": "string",
|
|
46
|
+
"attribute": "icon",
|
|
47
|
+
"default": "''",
|
|
48
|
+
"required": false,
|
|
49
|
+
"mutable": false,
|
|
50
|
+
"description": "Canonical IcoMo icon name displayed inside the avatar."
|
|
51
|
+
},
|
|
52
|
+
"label": {
|
|
53
|
+
"type": "string | undefined",
|
|
54
|
+
"resolvedType": "string | undefined",
|
|
55
|
+
"attribute": "label",
|
|
56
|
+
"required": false,
|
|
57
|
+
"mutable": false,
|
|
58
|
+
"description": "Optional accessible label. Omit when the surrounding content already conveys the meaning."
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"events": [],
|
|
62
|
+
"methods": [],
|
|
63
|
+
"slots": []
|
|
64
|
+
},
|
|
65
|
+
"props": {
|
|
66
|
+
"icon": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"resolvedType": "string",
|
|
69
|
+
"attribute": "icon",
|
|
70
|
+
"default": "''",
|
|
71
|
+
"required": false,
|
|
72
|
+
"mutable": false,
|
|
73
|
+
"description": "Canonical IcoMo icon name displayed inside the avatar."
|
|
74
|
+
},
|
|
75
|
+
"label": {
|
|
76
|
+
"type": "string | undefined",
|
|
77
|
+
"resolvedType": "string | undefined",
|
|
78
|
+
"attribute": "label",
|
|
79
|
+
"required": false,
|
|
80
|
+
"mutable": false,
|
|
81
|
+
"description": "Optional accessible label. Omit when the surrounding content already conveys the meaning."
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"events": [],
|
|
85
|
+
"methods": [],
|
|
86
|
+
"slots": [],
|
|
87
|
+
"exports": {
|
|
88
|
+
"customElement": "ds-avatar",
|
|
89
|
+
"react": "DsAvatar",
|
|
90
|
+
"angular": "DsAvatar"
|
|
91
|
+
},
|
|
92
|
+
"consumption": {
|
|
93
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
94
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
95
|
+
"customElements": {
|
|
96
|
+
"import": "import '@ds-mo/ui/dist/components/ds-avatar.js';",
|
|
97
|
+
"example": "<ds-avatar></ds-avatar>"
|
|
98
|
+
},
|
|
99
|
+
"react": {
|
|
100
|
+
"import": "import { DsAvatar } from '@ds-mo/ui/react';",
|
|
101
|
+
"example": "<DsAvatar />"
|
|
102
|
+
},
|
|
103
|
+
"angular": {
|
|
104
|
+
"import": "import { DsAvatar } from '@ds-mo/ui/angular/ds-avatar';",
|
|
105
|
+
"example": "<ds-avatar></ds-avatar>"
|
|
106
|
+
},
|
|
107
|
+
"peerDependencies": {
|
|
108
|
+
"required": [
|
|
109
|
+
"@ds-mo/tokens ^3.1.1",
|
|
110
|
+
"@ds-mo/icons ^6.2.0"
|
|
111
|
+
],
|
|
112
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"dependencies": [
|
|
117
|
+
"@ds-mo/ui",
|
|
118
|
+
"@ds-mo/tokens",
|
|
119
|
+
"@ds-mo/icons"
|
|
120
|
+
],
|
|
121
|
+
"registryDependencies": [
|
|
122
|
+
"icon"
|
|
123
|
+
],
|
|
124
|
+
"files": [
|
|
125
|
+
{
|
|
126
|
+
"path": "src/wc/components/Avatar/Avatar.css",
|
|
127
|
+
"content": ":host {\n display: inline-flex;\n flex-shrink: 0;\n width: var(--dimension-size-400);\n height: var(--dimension-size-400);\n}\n\n.avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: var(--dimension-radius-half);\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-tertiary);\n}\n",
|
|
128
|
+
"type": "registry:ui"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"path": "src/wc/components/Avatar/Avatar.tsx",
|
|
132
|
+
"content": "import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'ds-avatar',\n styleUrl: 'Avatar.css',\n scoped: true,\n})\nexport class Avatar {\n /** Canonical IcoMo icon name displayed inside the avatar. */\n @Prop() icon: string = '';\n\n /** Optional accessible label. Omit when the surrounding content already conveys the meaning. */\n @Prop() label: string | undefined;\n\n render() {\n return (\n <Host>\n <span\n class=\"avatar\"\n role={this.label ? 'img' : 'presentation'}\n aria-label={this.label}\n aria-hidden={!this.label ? 'true' : undefined}\n >\n <ds-icon name={this.icon} size=\"md\" color=\"secondary\" />\n </span>\n </Host>\n );\n }\n}\n",
|
|
133
|
+
"type": "registry:ui"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "badge",
|
|
4
|
+
"title": "Badge",
|
|
5
|
+
"description": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/badge",
|
|
11
|
+
"source": "src/wc/components/Badge/Badge.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "stable",
|
|
16
|
+
"summary": "Non-interactive brand counter or dot that supplements an owning control or label with unread notification information.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"An existing control, navigation item, or label needs a compact unread notification count.",
|
|
19
|
+
"An owning element needs a small visual dot indicating that supplemental notification information exists.",
|
|
20
|
+
"When the badge overlaps an icon or content, the immediate backing surface can be identified so its separation ring matches."
|
|
21
|
+
],
|
|
22
|
+
"avoidWhen": [
|
|
23
|
+
"The status must stand alone without an owning label or control.",
|
|
24
|
+
"The mark needs semantic positive, caution, negative, or neutral color; Badge intentionally uses one brand treatment.",
|
|
25
|
+
"The compact content is metadata or taxonomy; use Tag or Chip according to whether it is removable.",
|
|
26
|
+
"The badge itself would receive pointer or keyboard interaction; put interaction on the owning control."
|
|
27
|
+
],
|
|
28
|
+
"alternatives": [
|
|
29
|
+
{
|
|
30
|
+
"when": "A compact static label communicates taxonomy or a semantic status.",
|
|
31
|
+
"component": "component:ds-tag",
|
|
32
|
+
"reason": "Tag owns static metadata labels and semantic intent coloring."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"when": "A metadata value must be individually removable.",
|
|
36
|
+
"component": "component:ds-chip",
|
|
37
|
+
"reason": "Chip owns dismissible metadata values."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"when": "The count is primary content rather than supplemental notification chrome.",
|
|
41
|
+
"component": "component:ds-text",
|
|
42
|
+
"reason": "Text preserves the quantity as normal readable content."
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"commonlyComposedWith": [
|
|
46
|
+
"component:ds-button-unfilled",
|
|
47
|
+
"component:ds-bar-nav",
|
|
48
|
+
"component:ds-panel-nav",
|
|
49
|
+
"component:ds-menu"
|
|
50
|
+
],
|
|
51
|
+
"accessibility": [
|
|
52
|
+
"The owning control or content provides the primary accessible name; Badge contributes only supplemental unread or notification meaning.",
|
|
53
|
+
"When a dot is announced, provide contextual text that explains its meaning. Otherwise mark it aria-hidden from the owning composition.",
|
|
54
|
+
"When a counter is announced, provide contextual text such as “5 unread notifications”; a bare number is insufficient.",
|
|
55
|
+
"Avoid duplicating information already included in the owning control's accessible name.",
|
|
56
|
+
"Badge never receives focus and never owns an interaction."
|
|
57
|
+
],
|
|
58
|
+
"states": [
|
|
59
|
+
"Counter represents an unread or notification count, while dot communicates presence without quantity.",
|
|
60
|
+
"Non-positive counter values hide the badge.",
|
|
61
|
+
"Counts above the configured compact limit display the limit with a plus suffix while accessible text retains meaningful context.",
|
|
62
|
+
"Badge keeps one brand treatment; semantic severity belongs to another component or adjacent content.",
|
|
63
|
+
"Use the ring only when Badge overlaps an icon or other content. Disable it in a reserved safe-area slot.",
|
|
64
|
+
"When enabled, the ring matches the immediate backing surface for both variants. Use a direct ring override only for a component-local fill that no surface preset represents.",
|
|
65
|
+
"Enabled shell gradient rings align automatically inside active AppShell gradient chrome and may be explicitly enabled or disabled when composition requires it."
|
|
66
|
+
],
|
|
67
|
+
"responsiveBehavior": [
|
|
68
|
+
"The owning control or layout positions Badge and decides whether notification indicators remain visible, condense, or move at responsive breakpoints.",
|
|
69
|
+
"Badge does not anchor itself or automatically switch between counter and dot variants."
|
|
70
|
+
],
|
|
71
|
+
"frameworkCaveats": {
|
|
72
|
+
"customElements": [
|
|
73
|
+
"Position Badge from the owning element's layout and synchronize its contextual accessibility text with the owner."
|
|
74
|
+
],
|
|
75
|
+
"react": [
|
|
76
|
+
"Keep count, visibility, and contextual accessibility text derived from the same unread-notification state as the owning control."
|
|
77
|
+
],
|
|
78
|
+
"angular": [
|
|
79
|
+
"Keep count, visibility, and contextual accessibility text derived from the same unread-notification state as the owning control."
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"references": [
|
|
83
|
+
{
|
|
84
|
+
"label": "Storybook examples",
|
|
85
|
+
"path": "src/wc/components/Badge/Badge.stories.ts"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"api": {
|
|
90
|
+
"props": {
|
|
91
|
+
"background": {
|
|
92
|
+
"type": "string | undefined",
|
|
93
|
+
"resolvedType": "string | undefined",
|
|
94
|
+
"attribute": "background",
|
|
95
|
+
"required": false,
|
|
96
|
+
"mutable": false,
|
|
97
|
+
"description": "Direct ring background override for component-local surfaces."
|
|
98
|
+
},
|
|
99
|
+
"count": {
|
|
100
|
+
"type": "number",
|
|
101
|
+
"resolvedType": "number",
|
|
102
|
+
"attribute": "count",
|
|
103
|
+
"default": "0",
|
|
104
|
+
"required": false,
|
|
105
|
+
"mutable": false,
|
|
106
|
+
"description": "Count shown for counter badges. Count 0 hides the badge."
|
|
107
|
+
},
|
|
108
|
+
"gradientBackground": {
|
|
109
|
+
"type": "boolean",
|
|
110
|
+
"resolvedType": "boolean",
|
|
111
|
+
"attribute": "gradient-background",
|
|
112
|
+
"default": "false",
|
|
113
|
+
"required": false,
|
|
114
|
+
"mutable": false,
|
|
115
|
+
"description": "Ring samples the shell gradient stack (base fill + wash) instead of a flat\n`box-shadow`. Auto-enabled under an AppShell with an active gradient preset;\nset `gradient-background` to opt in/out explicitly.\n\nThe attribute must NOT start with `on` — Stencil's setAccessor routes any\nunknown `on*` member down the event-listener path during attribute\nreflection, calling addEventListener with a non-listener and throwing."
|
|
116
|
+
},
|
|
117
|
+
"hasRing": {
|
|
118
|
+
"type": "boolean",
|
|
119
|
+
"resolvedType": "boolean",
|
|
120
|
+
"attribute": "has-ring",
|
|
121
|
+
"default": "true",
|
|
122
|
+
"required": false,
|
|
123
|
+
"mutable": false,
|
|
124
|
+
"description": "Show the separation ring when the badge overlaps an icon or other content."
|
|
125
|
+
},
|
|
126
|
+
"label": {
|
|
127
|
+
"type": "string | undefined",
|
|
128
|
+
"resolvedType": "string | undefined",
|
|
129
|
+
"attribute": "label",
|
|
130
|
+
"required": false,
|
|
131
|
+
"mutable": false,
|
|
132
|
+
"description": "Contextual supplemental text. Omit when the owner hides the badge from assistive technology."
|
|
133
|
+
},
|
|
134
|
+
"max": {
|
|
135
|
+
"type": "number",
|
|
136
|
+
"resolvedType": "number",
|
|
137
|
+
"attribute": "max",
|
|
138
|
+
"default": "9",
|
|
139
|
+
"required": false,
|
|
140
|
+
"mutable": false,
|
|
141
|
+
"description": "Highest count shown before compacting to \"{max}+\"."
|
|
142
|
+
},
|
|
143
|
+
"surface": {
|
|
144
|
+
"type": "BadgeSurface",
|
|
145
|
+
"resolvedType": "\"always-dark\" | \"bold\" | \"faint\" | \"inverted\" | \"media\" | \"medium\" | \"navigation\" | \"primary\" | \"secondary\" | \"strong\" | \"translucent\"",
|
|
146
|
+
"attribute": "surface",
|
|
147
|
+
"default": "'primary'",
|
|
148
|
+
"required": false,
|
|
149
|
+
"mutable": false,
|
|
150
|
+
"description": "Immediate backing surface matched by the ring around either variant."
|
|
151
|
+
},
|
|
152
|
+
"variant": {
|
|
153
|
+
"type": "BadgeVariant",
|
|
154
|
+
"resolvedType": "\"counter\" | \"dot\"",
|
|
155
|
+
"attribute": "variant",
|
|
156
|
+
"default": "'counter'",
|
|
157
|
+
"required": false,
|
|
158
|
+
"mutable": false,
|
|
159
|
+
"description": "Render as a compact counter or notification dot."
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"events": [],
|
|
163
|
+
"methods": [],
|
|
164
|
+
"slots": []
|
|
165
|
+
},
|
|
166
|
+
"props": {
|
|
167
|
+
"background": {
|
|
168
|
+
"type": "string | undefined",
|
|
169
|
+
"resolvedType": "string | undefined",
|
|
170
|
+
"attribute": "background",
|
|
171
|
+
"required": false,
|
|
172
|
+
"mutable": false,
|
|
173
|
+
"description": "Direct ring background override for component-local surfaces."
|
|
174
|
+
},
|
|
175
|
+
"count": {
|
|
176
|
+
"type": "number",
|
|
177
|
+
"resolvedType": "number",
|
|
178
|
+
"attribute": "count",
|
|
179
|
+
"default": "0",
|
|
180
|
+
"required": false,
|
|
181
|
+
"mutable": false,
|
|
182
|
+
"description": "Count shown for counter badges. Count 0 hides the badge."
|
|
183
|
+
},
|
|
184
|
+
"gradientBackground": {
|
|
185
|
+
"type": "boolean",
|
|
186
|
+
"resolvedType": "boolean",
|
|
187
|
+
"attribute": "gradient-background",
|
|
188
|
+
"default": "false",
|
|
189
|
+
"required": false,
|
|
190
|
+
"mutable": false,
|
|
191
|
+
"description": "Ring samples the shell gradient stack (base fill + wash) instead of a flat\n`box-shadow`. Auto-enabled under an AppShell with an active gradient preset;\nset `gradient-background` to opt in/out explicitly.\n\nThe attribute must NOT start with `on` — Stencil's setAccessor routes any\nunknown `on*` member down the event-listener path during attribute\nreflection, calling addEventListener with a non-listener and throwing."
|
|
192
|
+
},
|
|
193
|
+
"hasRing": {
|
|
194
|
+
"type": "boolean",
|
|
195
|
+
"resolvedType": "boolean",
|
|
196
|
+
"attribute": "has-ring",
|
|
197
|
+
"default": "true",
|
|
198
|
+
"required": false,
|
|
199
|
+
"mutable": false,
|
|
200
|
+
"description": "Show the separation ring when the badge overlaps an icon or other content."
|
|
201
|
+
},
|
|
202
|
+
"label": {
|
|
203
|
+
"type": "string | undefined",
|
|
204
|
+
"resolvedType": "string | undefined",
|
|
205
|
+
"attribute": "label",
|
|
206
|
+
"required": false,
|
|
207
|
+
"mutable": false,
|
|
208
|
+
"description": "Contextual supplemental text. Omit when the owner hides the badge from assistive technology."
|
|
209
|
+
},
|
|
210
|
+
"max": {
|
|
211
|
+
"type": "number",
|
|
212
|
+
"resolvedType": "number",
|
|
213
|
+
"attribute": "max",
|
|
214
|
+
"default": "9",
|
|
215
|
+
"required": false,
|
|
216
|
+
"mutable": false,
|
|
217
|
+
"description": "Highest count shown before compacting to \"{max}+\"."
|
|
218
|
+
},
|
|
219
|
+
"surface": {
|
|
220
|
+
"type": "BadgeSurface",
|
|
221
|
+
"resolvedType": "\"always-dark\" | \"bold\" | \"faint\" | \"inverted\" | \"media\" | \"medium\" | \"navigation\" | \"primary\" | \"secondary\" | \"strong\" | \"translucent\"",
|
|
222
|
+
"attribute": "surface",
|
|
223
|
+
"default": "'primary'",
|
|
224
|
+
"required": false,
|
|
225
|
+
"mutable": false,
|
|
226
|
+
"description": "Immediate backing surface matched by the ring around either variant."
|
|
227
|
+
},
|
|
228
|
+
"variant": {
|
|
229
|
+
"type": "BadgeVariant",
|
|
230
|
+
"resolvedType": "\"counter\" | \"dot\"",
|
|
231
|
+
"attribute": "variant",
|
|
232
|
+
"default": "'counter'",
|
|
233
|
+
"required": false,
|
|
234
|
+
"mutable": false,
|
|
235
|
+
"description": "Render as a compact counter or notification dot."
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"events": [],
|
|
239
|
+
"methods": [],
|
|
240
|
+
"slots": [],
|
|
241
|
+
"exports": {
|
|
242
|
+
"customElement": "ds-badge",
|
|
243
|
+
"react": "DsBadge",
|
|
244
|
+
"angular": "DsBadge"
|
|
245
|
+
},
|
|
246
|
+
"consumption": {
|
|
247
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
248
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
249
|
+
"customElements": {
|
|
250
|
+
"import": "import '@ds-mo/ui/dist/components/ds-badge.js';",
|
|
251
|
+
"example": "<ds-badge></ds-badge>"
|
|
252
|
+
},
|
|
253
|
+
"react": {
|
|
254
|
+
"import": "import { DsBadge } from '@ds-mo/ui/react';",
|
|
255
|
+
"example": "<DsBadge />"
|
|
256
|
+
},
|
|
257
|
+
"angular": {
|
|
258
|
+
"import": "import { DsBadge } from '@ds-mo/ui/angular/ds-badge';",
|
|
259
|
+
"example": "<ds-badge></ds-badge>"
|
|
260
|
+
},
|
|
261
|
+
"peerDependencies": {
|
|
262
|
+
"required": [
|
|
263
|
+
"@ds-mo/tokens ^3.1.1",
|
|
264
|
+
"@ds-mo/icons ^6.2.0"
|
|
265
|
+
],
|
|
266
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
"dependencies": [
|
|
271
|
+
"@ds-mo/ui",
|
|
272
|
+
"@ds-mo/tokens"
|
|
273
|
+
],
|
|
274
|
+
"registryDependencies": [
|
|
275
|
+
"text"
|
|
276
|
+
],
|
|
277
|
+
"files": [
|
|
278
|
+
{
|
|
279
|
+
"path": "src/wc/components/Badge/Badge.css",
|
|
280
|
+
"content": ":host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n vertical-align: middle;\n\n --_badge-bg: var(--color-background-bold-brand);\n --_badge-fg: var(--color-foreground-on-bold-background-primary);\n --_badge-ring: var(--color-background-secondary);\n --_badge-ring-width: var(--dimension-stroke-width-018);\n}\n\n.badge__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-sizing: border-box;\n color: var(--_badge-fg);\n background: var(--_badge-bg);\n box-shadow: 0 0 0 var(--_badge-ring-width) var(--_badge-ring);\n white-space: nowrap;\n}\n\n:host(.badge--no-ring) {\n --_badge-ring-width: 0;\n}\n\n.badge__a11y {\n position: absolute;\n /* stylelint-disable declaration-property-value-disallowed-list -- classic visually-hidden clip pattern */\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n /* stylelint-enable declaration-property-value-disallowed-list */\n}\n\n:host(.badge--dot) .badge__mark {\n width: var(--dimension-size-075);\n height: var(--dimension-size-075);\n border-radius: var(--dimension-radius-half);\n}\n\n:host(.badge--counter) .badge__mark {\n width: auto;\n min-width: var(--dimension-size-150);\n height: var(--dimension-size-150);\n padding: 0 var(--dimension-space-025);\n border-radius: var(--dimension-radius-half);\n}\n\n/* Shell gradient ring — base fill + wash donut (option 3). */\n:host(.badge--on-gradient-background) .badge__mark {\n position: relative;\n z-index: 0;\n box-shadow: none;\n isolation: isolate;\n}\n\n:host(.badge--on-gradient-background) .badge__mark::before,\n:host(.badge--on-gradient-background) .badge__mark::after {\n content: '';\n position: absolute;\n inset: calc(-1 * var(--_badge-ring-width));\n border-radius: inherit;\n box-sizing: border-box;\n padding: var(--_badge-ring-width);\n pointer-events: none;\n /* stylelint-disable color-no-hex -- mask luminance stops for ring cutout, not theme colors */\n -webkit-mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n -webkit-mask-composite: xor;\n mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n /* stylelint-enable color-no-hex */\n mask-composite: exclude;\n}\n\n:host(.badge--on-gradient-background) .badge__mark::before {\n z-index: -2;\n background-color: var(--_badge-ring);\n}\n\n:host(.badge--on-gradient-background) .badge__mark::after {\n z-index: -1;\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-attachment: fixed;\n opacity: var(--ds-shell-gradient-opacity, 1);\n}\n",
|
|
281
|
+
"type": "registry:ui"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"path": "src/wc/components/Badge/Badge.tsx",
|
|
285
|
+
"content": "import { Component, Prop, Element, State, Watch, h, Host } from '@stencil/core';\nimport {\n BADGE_GRADIENT_POSITION_VAR,\n isShellGradientActive,\n} from '../../shell/badge-gradient-ring';\n\nexport type BadgeVariant = 'counter' | 'dot';\nexport type BadgeSurface =\n | 'primary'\n | 'secondary'\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'navigation'\n | 'always-dark';\n\nconst SURFACE_RING: Record<BadgeSurface, string> = {\n primary: 'var(--color-background-primary)',\n secondary: 'var(--color-background-secondary)',\n faint: 'var(--color-background-faint-neutral)',\n medium: 'var(--color-background-medium-neutral)',\n bold: 'var(--color-background-bold-neutral)',\n strong: 'var(--color-background-strong-neutral)',\n translucent: 'var(--color-translucent-translucent)',\n inverted: 'var(--color-inverted-background)',\n media: 'var(--color-media-background)',\n navigation: 'var(--color-navigation-background)',\n 'always-dark': 'var(--color-always-dark-background)',\n};\n\n@Component({\n tag: 'ds-badge',\n styleUrl: 'Badge.css',\n scoped: true,\n})\nexport class Badge {\n @Element() el!: HTMLElement;\n\n /** Render as a compact counter or notification dot. */\n @Prop() variant: BadgeVariant = 'counter';\n\n /** Count shown for counter badges. Count 0 hides the badge. */\n @Prop() count: number = 0;\n\n /** Highest count shown before compacting to \"{max}+\". */\n @Prop() max: number = 9;\n\n /** Immediate backing surface matched by the ring around either variant. */\n @Prop() surface: BadgeSurface = 'primary';\n\n /** Direct ring background override for component-local surfaces. */\n @Prop() background: string | undefined;\n\n /** Show the separation ring when the badge overlaps an icon or other content. */\n @Prop() hasRing: boolean = true;\n\n /**\n * Ring samples the shell gradient stack (base fill + wash) instead of a flat\n * `box-shadow`. Auto-enabled under an AppShell with an active gradient preset;\n * set `gradient-background` to opt in/out explicitly.\n *\n * The attribute must NOT start with `on` — Stencil's setAccessor routes any\n * unknown `on*` member down the event-listener path during attribute\n * reflection, calling addEventListener with a non-listener and throwing.\n */\n @Prop({ attribute: 'gradient-background', reflect: true }) gradientBackground: boolean = false;\n\n /** Contextual supplemental text. Omit when the owner hides the badge from assistive technology. */\n @Prop() label: string | undefined;\n\n /** Bumps on resize/layout so render recomputes gradient ring position. */\n @State() private gradientLayoutVersion = 0;\n\n private gradientObserver: ResizeObserver | null = null;\n private gradientWindowListener: (() => void) | null = null;\n\n componentDidLoad() {\n this.enableShellGradientRingIfNeeded();\n }\n\n disconnectedCallback() {\n this.unbindGradientRingSync();\n }\n\n @Watch('gradientBackground')\n @Watch('hasRing')\n gradientBackgroundChanged() {\n if (!this.hasRing) {\n this.unbindGradientRingSync();\n return;\n }\n if (!this.gradientBackground && isShellGradientActive(this.el)) {\n this.gradientBackground = true;\n return;\n }\n this.bindGradientRingSync();\n }\n\n /** Imperative opt-in avoids Stencil aborting parent render for nested badges. */\n private enableShellGradientRingIfNeeded() {\n if (!this.hasRing) return;\n\n if (!this.gradientBackground && isShellGradientActive(this.el)) {\n this.gradientBackground = true;\n }\n\n if (this.gradientBackground) {\n this.bindGradientRingSync();\n }\n }\n\n private bindGradientRingSync() {\n this.unbindGradientRingSync();\n\n if (!this.gradientBackground) return;\n\n const update = () => {\n this.gradientLayoutVersion += 1;\n };\n update();\n\n this.gradientWindowListener = update;\n window.addEventListener('resize', update);\n\n if (typeof ResizeObserver !== 'undefined') {\n this.gradientObserver = new ResizeObserver(update);\n this.gradientObserver.observe(this.el);\n\n const shell = this.el.closest('ds-app-shell');\n if (shell) this.gradientObserver.observe(shell);\n\n const bar = this.el.closest('ds-bar-nav');\n if (bar) this.gradientObserver.observe(bar);\n\n const panel = this.el.closest('ds-panel-nav');\n if (panel) this.gradientObserver.observe(panel);\n }\n }\n\n private unbindGradientRingSync() {\n if (this.gradientWindowListener) {\n window.removeEventListener('resize', this.gradientWindowListener);\n this.gradientWindowListener = null;\n }\n\n this.gradientObserver?.disconnect();\n this.gradientObserver = null;\n }\n\n private ringHostStyle(ring: string): Record<string, string> {\n void this.gradientLayoutVersion;\n\n const style: Record<string, string> = { '--_badge-ring': ring };\n if (!this.gradientBackground || !isShellGradientActive(this.el)) return style;\n\n /* Shell chrome wash uses background-attachment: fixed at viewport origin. */\n style[BADGE_GRADIENT_POSITION_VAR] = '0 0';\n return style;\n }\n\n render() {\n const isDot = this.variant === 'dot';\n\n if (!isDot && this.count <= 0) return <Host style={{ display: 'none' }} />;\n\n const display = this.count > this.max ? `${this.max}+` : String(this.count);\n const ring = this.background ?? SURFACE_RING[this.surface];\n\n return (\n <Host\n class={{\n badge: true,\n 'badge--counter': !isDot,\n 'badge--dot': isDot,\n 'badge--no-ring': !this.hasRing,\n 'badge--on-gradient-background': this.hasRing && this.gradientBackground,\n }}\n style={this.ringHostStyle(ring)}\n >\n <span class=\"badge__mark\" aria-hidden=\"true\">\n {!isDot && (\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"inherit\">\n {display}\n </ds-text>\n )}\n </span>\n {this.label && <span class=\"badge__a11y\">{this.label}</span>}\n </Host>\n );\n }\n}\n",
|
|
286
|
+
"type": "registry:ui"
|
|
287
|
+
}
|
|
288
|
+
]
|
|
289
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "banner",
|
|
4
|
+
"title": "Banner",
|
|
5
|
+
"description": "Intent-colored message bar. Supports floating toast mode with auto-dismiss and fade-out animation.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/banner",
|
|
11
|
+
"source": "src/wc/components/Banner/Banner.tsx",
|
|
12
|
+
"intentStatus": "migration-pending",
|
|
13
|
+
"intent": null,
|
|
14
|
+
"api": {
|
|
15
|
+
"props": {
|
|
16
|
+
"contrast": {
|
|
17
|
+
"type": "BannerContrast",
|
|
18
|
+
"resolvedType": "\"bold\" | \"faint\" | \"medium\" | \"strong\"",
|
|
19
|
+
"attribute": "contrast",
|
|
20
|
+
"default": "'medium'",
|
|
21
|
+
"required": false,
|
|
22
|
+
"mutable": false
|
|
23
|
+
},
|
|
24
|
+
"dismissLabel": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"resolvedType": "string",
|
|
27
|
+
"attribute": "dismiss-label",
|
|
28
|
+
"default": "'Dismiss'",
|
|
29
|
+
"required": false,
|
|
30
|
+
"mutable": false
|
|
31
|
+
},
|
|
32
|
+
"floating": {
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"resolvedType": "boolean",
|
|
35
|
+
"attribute": "floating",
|
|
36
|
+
"default": "false",
|
|
37
|
+
"required": false,
|
|
38
|
+
"mutable": false,
|
|
39
|
+
"description": "Renders at a fixed position (centered top) and auto-dismisses after 4 s."
|
|
40
|
+
},
|
|
41
|
+
"header": {
|
|
42
|
+
"type": "boolean",
|
|
43
|
+
"resolvedType": "boolean",
|
|
44
|
+
"attribute": "header",
|
|
45
|
+
"default": "false",
|
|
46
|
+
"required": false,
|
|
47
|
+
"mutable": false,
|
|
48
|
+
"description": "Renders the diagonal-stripe accent bar above the body."
|
|
49
|
+
},
|
|
50
|
+
"intent": {
|
|
51
|
+
"type": "BannerIntent",
|
|
52
|
+
"resolvedType": "\"ai\" | \"brand\" | \"caution\" | \"guide\" | \"negative\" | \"neutral\" | \"positive\" | \"walkthrough\" | \"warning\"",
|
|
53
|
+
"attribute": "intent",
|
|
54
|
+
"default": "'neutral'",
|
|
55
|
+
"required": false,
|
|
56
|
+
"mutable": false
|
|
57
|
+
},
|
|
58
|
+
"message": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"resolvedType": "string",
|
|
61
|
+
"attribute": "message",
|
|
62
|
+
"default": "''",
|
|
63
|
+
"required": false,
|
|
64
|
+
"mutable": false
|
|
65
|
+
},
|
|
66
|
+
"showDismiss": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"resolvedType": "boolean",
|
|
69
|
+
"attribute": "show-dismiss",
|
|
70
|
+
"default": "false",
|
|
71
|
+
"required": false,
|
|
72
|
+
"mutable": false
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"events": [
|
|
76
|
+
{
|
|
77
|
+
"name": "dsDismiss",
|
|
78
|
+
"detail": "void",
|
|
79
|
+
"bubbles": true,
|
|
80
|
+
"cancelable": true,
|
|
81
|
+
"composed": true
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"methods": [],
|
|
85
|
+
"slots": []
|
|
86
|
+
},
|
|
87
|
+
"props": {
|
|
88
|
+
"contrast": {
|
|
89
|
+
"type": "BannerContrast",
|
|
90
|
+
"resolvedType": "\"bold\" | \"faint\" | \"medium\" | \"strong\"",
|
|
91
|
+
"attribute": "contrast",
|
|
92
|
+
"default": "'medium'",
|
|
93
|
+
"required": false,
|
|
94
|
+
"mutable": false
|
|
95
|
+
},
|
|
96
|
+
"dismissLabel": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"resolvedType": "string",
|
|
99
|
+
"attribute": "dismiss-label",
|
|
100
|
+
"default": "'Dismiss'",
|
|
101
|
+
"required": false,
|
|
102
|
+
"mutable": false
|
|
103
|
+
},
|
|
104
|
+
"floating": {
|
|
105
|
+
"type": "boolean",
|
|
106
|
+
"resolvedType": "boolean",
|
|
107
|
+
"attribute": "floating",
|
|
108
|
+
"default": "false",
|
|
109
|
+
"required": false,
|
|
110
|
+
"mutable": false,
|
|
111
|
+
"description": "Renders at a fixed position (centered top) and auto-dismisses after 4 s."
|
|
112
|
+
},
|
|
113
|
+
"header": {
|
|
114
|
+
"type": "boolean",
|
|
115
|
+
"resolvedType": "boolean",
|
|
116
|
+
"attribute": "header",
|
|
117
|
+
"default": "false",
|
|
118
|
+
"required": false,
|
|
119
|
+
"mutable": false,
|
|
120
|
+
"description": "Renders the diagonal-stripe accent bar above the body."
|
|
121
|
+
},
|
|
122
|
+
"intent": {
|
|
123
|
+
"type": "BannerIntent",
|
|
124
|
+
"resolvedType": "\"ai\" | \"brand\" | \"caution\" | \"guide\" | \"negative\" | \"neutral\" | \"positive\" | \"walkthrough\" | \"warning\"",
|
|
125
|
+
"attribute": "intent",
|
|
126
|
+
"default": "'neutral'",
|
|
127
|
+
"required": false,
|
|
128
|
+
"mutable": false
|
|
129
|
+
},
|
|
130
|
+
"message": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"resolvedType": "string",
|
|
133
|
+
"attribute": "message",
|
|
134
|
+
"default": "''",
|
|
135
|
+
"required": false,
|
|
136
|
+
"mutable": false
|
|
137
|
+
},
|
|
138
|
+
"showDismiss": {
|
|
139
|
+
"type": "boolean",
|
|
140
|
+
"resolvedType": "boolean",
|
|
141
|
+
"attribute": "show-dismiss",
|
|
142
|
+
"default": "false",
|
|
143
|
+
"required": false,
|
|
144
|
+
"mutable": false
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"events": [
|
|
148
|
+
{
|
|
149
|
+
"name": "dsDismiss",
|
|
150
|
+
"detail": "void",
|
|
151
|
+
"bubbles": true,
|
|
152
|
+
"cancelable": true,
|
|
153
|
+
"composed": true
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"methods": [],
|
|
157
|
+
"slots": [],
|
|
158
|
+
"exports": {
|
|
159
|
+
"customElement": "ds-banner",
|
|
160
|
+
"react": "DsBanner",
|
|
161
|
+
"angular": "DsBanner"
|
|
162
|
+
},
|
|
163
|
+
"consumption": {
|
|
164
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
165
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
166
|
+
"customElements": {
|
|
167
|
+
"import": "import '@ds-mo/ui/dist/components/ds-banner.js';",
|
|
168
|
+
"example": "<ds-banner></ds-banner>"
|
|
169
|
+
},
|
|
170
|
+
"react": {
|
|
171
|
+
"import": "import { DsBanner } from '@ds-mo/ui/react';",
|
|
172
|
+
"example": "<DsBanner />"
|
|
173
|
+
},
|
|
174
|
+
"angular": {
|
|
175
|
+
"import": "import { DsBanner } from '@ds-mo/ui/angular/ds-banner';",
|
|
176
|
+
"example": "<ds-banner></ds-banner>"
|
|
177
|
+
},
|
|
178
|
+
"peerDependencies": {
|
|
179
|
+
"required": [
|
|
180
|
+
"@ds-mo/tokens ^3.1.1",
|
|
181
|
+
"@ds-mo/icons ^6.2.0"
|
|
182
|
+
],
|
|
183
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"dependencies": [
|
|
188
|
+
"@ds-mo/ui",
|
|
189
|
+
"@ds-mo/tokens"
|
|
190
|
+
],
|
|
191
|
+
"registryDependencies": [
|
|
192
|
+
"text"
|
|
193
|
+
],
|
|
194
|
+
"files": [
|
|
195
|
+
{
|
|
196
|
+
"path": "src/wc/components/Banner/Banner.css",
|
|
197
|
+
"content": ".banner-surface {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-radius: var(--dimension-radius-075);\n}\n\n.banner-header-surface {\n width: 100%;\n height: var(--dimension-space-100);\n flex-shrink: 0;\n overflow: hidden;\n border-bottom: var(--dimension-stroke-width-015) solid var(--color-border-primary);\n}\n\n.banner-header {\n width: 100%;\n height: 100%;\n background: repeating-linear-gradient(\n -45deg,\n var(--banner-content),\n var(--banner-content) var(--dimension-size-100),\n transparent var(--dimension-size-100),\n transparent var(--dimension-size-200)\n );\n}\n\n.banner-body {\n padding: var(--dimension-space-075);\n min-height: var(--dimension-size-400);\n display: flex;\n align-items: flex-start;\n gap: var(--dimension-space-075);\n}\n\n.banner-message {\n color: var(--banner-content);\n flex: 1;\n min-width: 0;\n}\n\n.banner-dismiss {\n background: none;\n border: none;\n margin: 0;\n padding: var(--dimension-space-025);\n color: var(--banner-content);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border-radius: var(--dimension-radius-050);\n position: relative;\n font-size: var(--typography-fontsize-md);\n line-height: var(--typography-lineheight-md);\n}\n\n.banner-dismiss::before {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background-color: transparent;\n transition: var(--effect-transition-interaction-background-short-2, background-color var(--effect-motion-short-2));\n pointer-events: none;\n}\n\n.banner-dismiss:hover::before { background-color: var(--color-interaction-hover); }\n.banner-dismiss:active::before { background-color: var(--color-interaction-pressed); }\n\n.banner-dismiss:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-interaction-focus);\n outline-offset: var(--dimension-stroke-width-015);\n}\n\n/* ─── Floating ──────────────────────────────────────────────────────────────── */\n\n.floating-position {\n position: fixed;\n top: var(--dimension-space-200);\n left: 50%;\n transform: translateX(-50%);\n pointer-events: none;\n}\n\n.floating-toast {\n pointer-events: auto;\n animation: bannerFadeIn var(--effect-motion-short-2, 150ms) forwards;\n}\n\n.floating-toast--closing {\n animation: bannerFadeOut var(--effect-motion-short-3, 200ms) forwards;\n}\n\n@keyframes bannerFadeIn {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes bannerFadeOut {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-4px); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .floating-toast {\n animation: none;\n opacity: 1;\n transform: none;\n }\n\n .floating-toast--closing {\n opacity: 0;\n }\n}\n",
|
|
198
|
+
"type": "registry:ui"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"path": "src/wc/components/Banner/Banner.tsx",
|
|
202
|
+
"content": "import { Component, Prop, State, Event, EventEmitter, Watch, h, Host } from '@stencil/core';\nimport { resolveCssTimeMs, resolveMotionTimeMs, TOKEN_DEFAULTS } from '../../utils';\n\nexport type BannerIntent =\n | 'brand' | 'positive' | 'negative' | 'warning' | 'caution'\n | 'ai' | 'neutral' | 'walkthrough' | 'guide';\n\nexport type BannerContrast = 'faint' | 'medium' | 'bold' | 'strong';\n\n@Component({\n tag: 'ds-banner',\n styleUrl: 'Banner.css',\n scoped: true,\n})\nexport class Banner {\n @Prop() intent: BannerIntent = 'neutral';\n @Prop() contrast: BannerContrast = 'medium';\n @Prop() message: string = '';\n /** Renders the diagonal-stripe accent bar above the body. */\n @Prop() header: boolean = false;\n /** Renders at a fixed position (centered top) and auto-dismisses after 4 s. */\n @Prop() floating: boolean = false;\n @Prop() showDismiss: boolean = false;\n @Prop() dismissLabel: string = 'Dismiss';\n\n @State() private closing: boolean = false;\n\n @Event() dsDismiss!: EventEmitter<void>;\n\n private dismissTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n\n private get fadeOutMs(): number {\n return resolveMotionTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private get autoDismissMs(): number {\n return resolveCssTimeMs(TOKEN_DEFAULTS.animationDelayLong2, TOKEN_DEFAULTS.animationDelayLong2);\n }\n\n componentDidLoad() {\n if (this.floating && this.message) this.scheduleDismiss();\n }\n\n @Watch('message')\n onMessageChange(newVal: string) {\n if (this.floating && newVal) {\n this.closing = false;\n this.scheduleDismiss();\n }\n }\n\n disconnectedCallback() {\n this.clearTimers();\n }\n\n private clearTimers() {\n if (this.dismissTimer) { clearTimeout(this.dismissTimer); this.dismissTimer = null; }\n if (this.closeTimer) { clearTimeout(this.closeTimer); this.closeTimer = null; }\n }\n\n private scheduleDismiss() {\n this.clearTimers();\n this.dismissTimer = setTimeout(() => {\n this.dismissTimer = null;\n this.beginClose();\n }, this.autoDismissMs);\n }\n\n private beginClose() {\n this.clearTimers();\n if (this.floating) {\n const fadeOutMs = this.fadeOutMs;\n if (fadeOutMs <= 0) {\n this.closing = false;\n this.dsDismiss.emit();\n return;\n }\n this.closing = true;\n this.closeTimer = setTimeout(() => {\n this.closing = false;\n this.closeTimer = null;\n this.dsDismiss.emit();\n }, fadeOutMs);\n } else {\n this.dsDismiss.emit();\n }\n }\n\n private getContentColor(): string {\n if (this.contrast === 'bold') return 'var(--color-foreground-on-bold-background-primary)';\n const c = this.contrast === 'faint' ? 'bold' : this.contrast === 'medium' ? 'strong' : 'medium';\n return `var(--color-foreground-${c}-${this.intent})`;\n }\n\n private getBg(): string {\n return `var(--color-background-${this.contrast}-${this.intent})`;\n }\n\n private getElevation(): string {\n return this.floating\n ? 'var(--effect-elevation-elevated-floating)'\n : 'var(--effect-elevation-elevated-sm)';\n }\n\n render() {\n const contentColor = this.getContentColor();\n const isAssertive = this.intent === 'negative';\n\n const bannerEl = (\n <div\n class={{ 'banner-wrapper': true }}\n style={{ '--banner-content': contentColor } as { [key: string]: string }}\n role={isAssertive ? 'alert' : 'status'}\n aria-live={isAssertive ? undefined : 'polite'}\n >\n <div\n class=\"banner-surface\"\n style={{\n backgroundColor: this.getBg(),\n boxShadow: this.getElevation(),\n }}\n >\n {this.header && (\n <div class=\"banner-header-surface\">\n <div class=\"banner-header\" />\n </div>\n )}\n <div class=\"banner-body\">\n <ds-text class=\"banner-message\" as=\"div\" variant=\"text-body-medium\" color=\"inherit\">\n {this.message}\n </ds-text>\n {this.showDismiss && (\n <button\n type=\"button\"\n class=\"banner-dismiss\"\n onClick={() => this.beginClose()}\n aria-label={this.dismissLabel}\n >\n ×\n </button>\n )}\n </div>\n </div>\n </div>\n );\n\n if (this.floating) {\n return (\n <Host style={{ display: 'contents' }}>\n <div class=\"floating-position\" style={{ zIndex: '9998' }}>\n <div class={{ 'floating-toast': true, 'floating-toast--closing': this.closing }}>\n {bannerEl}\n </div>\n </div>\n </Host>\n );\n }\n\n return <Host style={{ display: 'contents' }}>{bannerEl}</Host>;\n }\n}\n",
|
|
203
|
+
"type": "registry:ui"
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
}
|