@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,222 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "field",
|
|
4
|
+
"title": "Field",
|
|
5
|
+
"description": "Accessible form-field composition that gives one Input or Select a persistent label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/field",
|
|
11
|
+
"source": "src/wc/components/Field/Field.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "stable",
|
|
16
|
+
"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.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"An Input, Select, or SelectMulti needs a persistent visible label in a form.",
|
|
19
|
+
"Help text or an error message must be programmatically associated with one control.",
|
|
20
|
+
"A form layout needs one consistent label-control-message rhythm."
|
|
21
|
+
],
|
|
22
|
+
"avoidWhen": [
|
|
23
|
+
"The component already owns its visible label and complete selection semantics, such as Checkbox, Radio, or Switch.",
|
|
24
|
+
"Several controls belong to one question; use a semantic fieldset and legend instead.",
|
|
25
|
+
"Text describes a region or group rather than one form control."
|
|
26
|
+
],
|
|
27
|
+
"alternatives": [
|
|
28
|
+
{
|
|
29
|
+
"when": "Several related controls answer one question.",
|
|
30
|
+
"component": "component:ds-text",
|
|
31
|
+
"reason": "Use native fieldset and legend semantics, then compose Text only for supporting content."
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"commonlyComposedWith": [
|
|
35
|
+
"component:ds-input",
|
|
36
|
+
"component:ds-select",
|
|
37
|
+
"component:ds-select-multi",
|
|
38
|
+
"component:ds-text"
|
|
39
|
+
],
|
|
40
|
+
"accessibility": [
|
|
41
|
+
"Slot exactly one form control. Field assigns its stable control ID and connects the visible label automatically.",
|
|
42
|
+
"The visible description or error ID is merged with any authored aria-describedby references; a rendered error replaces the description.",
|
|
43
|
+
"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.",
|
|
44
|
+
"Clicking the label focuses the slotted design-system control without opening a Select popup.",
|
|
45
|
+
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
46
|
+
],
|
|
47
|
+
"states": [
|
|
48
|
+
"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.",
|
|
49
|
+
"A rendered error replaces the description; preserve essential guidance in the error message so users retain what they need to correct the field.",
|
|
50
|
+
"Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
|
|
51
|
+
"The label uses primary body-small emphasis, description uses secondary body-small text, and error uses negative body-small text."
|
|
52
|
+
],
|
|
53
|
+
"responsiveBehavior": [
|
|
54
|
+
"Field fills the width supplied by its parent and makes the slotted control fill that field width.",
|
|
55
|
+
"The form layout owns column count, wrapping, and responsive placement; Field keeps the vertical label-control-message composition intact."
|
|
56
|
+
],
|
|
57
|
+
"frameworkCaveats": {
|
|
58
|
+
"customElements": [
|
|
59
|
+
"Set fieldId only when another element must reference a predictable control ID; otherwise use the generated association.",
|
|
60
|
+
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
61
|
+
],
|
|
62
|
+
"react": [
|
|
63
|
+
"Compose one DsInput, DsSelect, or DsSelectMulti child and control validation timing in the form owner."
|
|
64
|
+
],
|
|
65
|
+
"angular": [
|
|
66
|
+
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"references": [
|
|
70
|
+
{
|
|
71
|
+
"label": "Storybook examples",
|
|
72
|
+
"path": "src/wc/components/Field/Field.stories.ts"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
76
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"api": {
|
|
81
|
+
"props": {
|
|
82
|
+
"description": {
|
|
83
|
+
"type": "string | undefined",
|
|
84
|
+
"resolvedType": "string | undefined",
|
|
85
|
+
"attribute": "description",
|
|
86
|
+
"required": false,
|
|
87
|
+
"mutable": false,
|
|
88
|
+
"description": "Optional guidance associated with the slotted control while no visible error is shown."
|
|
89
|
+
},
|
|
90
|
+
"error": {
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"resolvedType": "boolean",
|
|
93
|
+
"attribute": "error",
|
|
94
|
+
"default": "false",
|
|
95
|
+
"required": false,
|
|
96
|
+
"mutable": false,
|
|
97
|
+
"description": "Invalid visual and accessible state forwarded to supported ds controls."
|
|
98
|
+
},
|
|
99
|
+
"errorMessage": {
|
|
100
|
+
"type": "string | undefined",
|
|
101
|
+
"resolvedType": "string | undefined",
|
|
102
|
+
"attribute": "error-message",
|
|
103
|
+
"required": false,
|
|
104
|
+
"mutable": false,
|
|
105
|
+
"description": "Visible error associated with the slotted control while error is true."
|
|
106
|
+
},
|
|
107
|
+
"fieldId": {
|
|
108
|
+
"type": "string | undefined",
|
|
109
|
+
"resolvedType": "string | undefined",
|
|
110
|
+
"attribute": "field-id",
|
|
111
|
+
"required": false,
|
|
112
|
+
"mutable": false,
|
|
113
|
+
"description": "Explicit ID for the slotted control; generated when omitted."
|
|
114
|
+
},
|
|
115
|
+
"label": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"resolvedType": "string",
|
|
118
|
+
"attribute": "label",
|
|
119
|
+
"required": true,
|
|
120
|
+
"mutable": false,
|
|
121
|
+
"description": "Persistent visible label for the single slotted control."
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"events": [],
|
|
125
|
+
"methods": [],
|
|
126
|
+
"slots": []
|
|
127
|
+
},
|
|
128
|
+
"props": {
|
|
129
|
+
"description": {
|
|
130
|
+
"type": "string | undefined",
|
|
131
|
+
"resolvedType": "string | undefined",
|
|
132
|
+
"attribute": "description",
|
|
133
|
+
"required": false,
|
|
134
|
+
"mutable": false,
|
|
135
|
+
"description": "Optional guidance associated with the slotted control while no visible error is shown."
|
|
136
|
+
},
|
|
137
|
+
"error": {
|
|
138
|
+
"type": "boolean",
|
|
139
|
+
"resolvedType": "boolean",
|
|
140
|
+
"attribute": "error",
|
|
141
|
+
"default": "false",
|
|
142
|
+
"required": false,
|
|
143
|
+
"mutable": false,
|
|
144
|
+
"description": "Invalid visual and accessible state forwarded to supported ds controls."
|
|
145
|
+
},
|
|
146
|
+
"errorMessage": {
|
|
147
|
+
"type": "string | undefined",
|
|
148
|
+
"resolvedType": "string | undefined",
|
|
149
|
+
"attribute": "error-message",
|
|
150
|
+
"required": false,
|
|
151
|
+
"mutable": false,
|
|
152
|
+
"description": "Visible error associated with the slotted control while error is true."
|
|
153
|
+
},
|
|
154
|
+
"fieldId": {
|
|
155
|
+
"type": "string | undefined",
|
|
156
|
+
"resolvedType": "string | undefined",
|
|
157
|
+
"attribute": "field-id",
|
|
158
|
+
"required": false,
|
|
159
|
+
"mutable": false,
|
|
160
|
+
"description": "Explicit ID for the slotted control; generated when omitted."
|
|
161
|
+
},
|
|
162
|
+
"label": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"resolvedType": "string",
|
|
165
|
+
"attribute": "label",
|
|
166
|
+
"required": true,
|
|
167
|
+
"mutable": false,
|
|
168
|
+
"description": "Persistent visible label for the single slotted control."
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"events": [],
|
|
172
|
+
"methods": [],
|
|
173
|
+
"slots": [],
|
|
174
|
+
"exports": {
|
|
175
|
+
"customElement": "ds-field",
|
|
176
|
+
"react": "DsField",
|
|
177
|
+
"angular": "DsField"
|
|
178
|
+
},
|
|
179
|
+
"consumption": {
|
|
180
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
181
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
182
|
+
"customElements": {
|
|
183
|
+
"import": "import '@ds-mo/ui/dist/components/ds-field.js';",
|
|
184
|
+
"example": "<ds-field></ds-field>"
|
|
185
|
+
},
|
|
186
|
+
"react": {
|
|
187
|
+
"import": "import { DsField } from '@ds-mo/ui/react';",
|
|
188
|
+
"example": "<DsField />"
|
|
189
|
+
},
|
|
190
|
+
"angular": {
|
|
191
|
+
"import": "import { DsField } from '@ds-mo/ui/angular/ds-field';",
|
|
192
|
+
"example": "<ds-field></ds-field>"
|
|
193
|
+
},
|
|
194
|
+
"peerDependencies": {
|
|
195
|
+
"required": [
|
|
196
|
+
"@ds-mo/tokens ^3.1.1",
|
|
197
|
+
"@ds-mo/icons ^6.2.0"
|
|
198
|
+
],
|
|
199
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"dependencies": [
|
|
204
|
+
"@ds-mo/ui",
|
|
205
|
+
"@ds-mo/tokens"
|
|
206
|
+
],
|
|
207
|
+
"registryDependencies": [
|
|
208
|
+
"text"
|
|
209
|
+
],
|
|
210
|
+
"files": [
|
|
211
|
+
{
|
|
212
|
+
"path": "src/wc/components/Field/Field.css",
|
|
213
|
+
"content": ":host {\n display: block;\n}\n\n.field {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n}\n\n.field__control {\n display: flex;\n min-width: 0;\n}\n\n.field__control > * {\n width: 100%;\n}\n",
|
|
214
|
+
"type": "registry:ui"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"path": "src/wc/components/Field/Field.tsx",
|
|
218
|
+
"content": "import { Component, Element, Prop, State, Watch, h, Host } from '@stencil/core';\n\ninterface FieldControl extends HTMLElement {\n value?: string | string[];\n inputId?: string;\n error?: boolean;\n disabled?: boolean;\n isInactive?: boolean;\n required?: boolean;\n setFocus?: () => Promise<void> | void;\n}\n\ninterface AuthoredAria {\n labelledby: string[];\n describedby: string[];\n}\n\nlet fieldCounter = 0;\n\nconst tokens = (value: string | null | undefined): string[] =>\n value?.split(/\\s+/).filter(Boolean) ?? [];\n\nconst uniqueTokens = (...groups: string[][]): string[] => [...new Set(groups.flat())];\n\n@Component({\n tag: 'ds-field',\n styleUrl: 'Field.css',\n scoped: true,\n})\nexport class Field {\n @Element() el!: HTMLElement;\n\n /** Persistent visible label for the single slotted control. */\n @Prop() label!: string;\n /** Explicit ID for the slotted control; generated when omitted. */\n @Prop() fieldId: string | undefined;\n /** Optional guidance associated with the slotted control while no visible error is shown. */\n @Prop() description: string | undefined;\n /** Invalid visual and accessible state forwarded to supported ds controls. */\n @Prop() error: boolean = false;\n /** Visible error associated with the slotted control while error is true. */\n @Prop() errorMessage: string | undefined;\n\n @State() private focused = false;\n @State() private filled = false;\n @State() private dirty = false;\n @State() private touched = false;\n @State() private controlDisabled = false;\n @State() private controlRequired = false;\n\n private readonly generatedId = `ds-field-${++fieldCounter}`;\n private controlContainer?: HTMLDivElement;\n private control?: FieldControl;\n private initialValue = '';\n private authoredAria = new WeakMap<FieldControl, AuthoredAria>();\n\n componentDidLoad() {\n this.syncControl();\n requestAnimationFrame(() => this.syncControl());\n }\n\n componentDidRender() {\n this.syncControl();\n }\n\n @Watch('fieldId')\n @Watch('description')\n @Watch('error')\n @Watch('errorMessage')\n onFieldContractChange() {\n this.syncControl();\n }\n\n private get controlId(): string {\n return this.fieldId || this.generatedId;\n }\n\n private get labelId(): string {\n return `${this.controlId}-label`;\n }\n\n private get descriptionId(): string {\n return `${this.controlId}-description`;\n }\n\n private get errorId(): string {\n return `${this.controlId}-error`;\n }\n\n private get renderedDescription(): boolean {\n return Boolean(this.description) && !this.renderedError;\n }\n\n private get renderedError(): boolean {\n return this.error && Boolean(this.errorMessage);\n }\n\n private readValue(control: FieldControl): string {\n const value = control.value;\n return Array.isArray(value) ? value.join('\\u001f') : String(value ?? '');\n }\n\n private updateControlAttribute(control: FieldControl, name: string, value: string | undefined) {\n if (value === undefined) {\n if (control.hasAttribute(name)) control.removeAttribute(name);\n return;\n }\n if (control.getAttribute(name) !== value) control.setAttribute(name, value);\n }\n\n private findControl(): FieldControl | undefined {\n return this.controlContainer?.querySelector<FieldControl>(':scope > :not(slot)') ?? undefined;\n }\n\n private syncControl = () => {\n const control = this.findControl();\n if (!control) return;\n\n if (control !== this.control) {\n this.control = control;\n this.initialValue = this.readValue(control);\n this.authoredAria.set(control, {\n labelledby: tokens(control.getAttribute('aria-labelledby')),\n describedby: tokens(control.getAttribute('aria-describedby')),\n });\n }\n\n const isDsControl = control.tagName.startsWith('DS-');\n if (isDsControl && 'inputId' in control) control.inputId = this.controlId;\n else this.updateControlAttribute(control, 'id', this.controlId);\n\n const authored = this.authoredAria.get(control) ?? { labelledby: [], describedby: [] };\n const labelledby = uniqueTokens(authored.labelledby, [this.labelId]).join(' ');\n const describedby = uniqueTokens(\n authored.describedby,\n this.renderedDescription ? [this.descriptionId] : [],\n this.renderedError ? [this.errorId] : [],\n ).join(' ');\n\n this.updateControlAttribute(control, 'aria-labelledby', labelledby);\n this.updateControlAttribute(control, 'aria-describedby', describedby || undefined);\n this.updateControlAttribute(control, 'aria-invalid', this.error ? 'true' : undefined);\n\n if (isDsControl && 'error' in control && control.error !== this.error) control.error = this.error;\n\n const value = this.readValue(control);\n this.filled = value.length > 0;\n this.dirty = value !== this.initialValue;\n this.controlDisabled = Boolean(control.disabled || control.isInactive || control.hasAttribute('disabled'));\n this.controlRequired = Boolean(control.required || control.hasAttribute('required'));\n };\n\n private handleLabelClick = (event: MouseEvent) => {\n if (!this.control?.tagName.startsWith('DS-')) return;\n event.preventDefault();\n this.control.setFocus?.();\n };\n\n private handleFocusIn = () => {\n this.focused = true;\n };\n\n private handleFocusOut = (event: FocusEvent) => {\n if (event.relatedTarget instanceof Node && this.el.contains(event.relatedTarget)) return;\n this.focused = false;\n this.touched = true;\n };\n\n private handleValueChange = () => {\n this.syncControl();\n };\n\n render() {\n return (\n <Host\n data-focused={this.focused ? '' : undefined}\n data-filled={this.filled ? '' : undefined}\n data-dirty={this.dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-disabled={this.controlDisabled ? '' : undefined}\n data-required={this.controlRequired ? '' : undefined}\n onFocusin={this.handleFocusIn}\n onFocusout={this.handleFocusOut}\n onInput={this.handleValueChange}\n onChange={this.handleValueChange}\n onDsChange={this.handleValueChange}\n >\n <div class=\"field\">\n <ds-text\n class=\"field__label\"\n as=\"label\"\n variant=\"text-body-small\"\n color=\"primary\"\n emphasis\n for={this.controlId}\n textId={this.labelId}\n onClick={this.handleLabelClick}\n >\n {this.label}\n </ds-text>\n <div class=\"field__control\" ref={el => (this.controlContainer = el)}>\n <slot onSlotchange={this.syncControl} />\n </div>\n {this.renderedDescription && (\n <ds-text\n class=\"field__description\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"secondary\"\n textId={this.descriptionId}\n >\n {this.description}\n </ds-text>\n )}\n {this.renderedError && (\n <ds-text\n class=\"field__error\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </div>\n </Host>\n );\n }\n}\n",
|
|
219
|
+
"type": "registry:ui"
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "icon",
|
|
4
|
+
"title": "Icon",
|
|
5
|
+
"description": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/icon",
|
|
11
|
+
"source": "src/wc/components/Icon/Icon.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "stable",
|
|
16
|
+
"summary": "Secure, lazily loaded renderer for canonical IcoMo system and flag glyphs, decorative by default with optional graphic semantics.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"An approved IcoMo system glyph supplements visible text or control chrome.",
|
|
19
|
+
"A canonical flag glyph communicates a country or region with adjacent text or an explicit localized label.",
|
|
20
|
+
"A standalone non-interactive symbol conveys meaning that is unavailable from nearby text."
|
|
21
|
+
],
|
|
22
|
+
"avoidWhen": [
|
|
23
|
+
"The glyph itself must be clickable or keyboard interactive; use an appropriate button or link and compose Icon inside it.",
|
|
24
|
+
"The visual is an illustration, logo, chart, or arbitrary SVG artwork rather than a canonical IcoMo glyph.",
|
|
25
|
+
"An alias, guessed name, or case-insensitive lookup would be required; runtime lookup uses exact canonical export names.",
|
|
26
|
+
"A fallback glyph would be required when loading fails; Icon intentionally preserves an empty fixed-size box."
|
|
27
|
+
],
|
|
28
|
+
"alternatives": [
|
|
29
|
+
{
|
|
30
|
+
"when": "The icon initiates an action or persistent toggle.",
|
|
31
|
+
"component": "component:ds-button-unfilled",
|
|
32
|
+
"reason": "ButtonUnfilled owns interaction, focus, naming, and toggle semantics."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"when": "The visual communicates indeterminate loading progress.",
|
|
36
|
+
"component": "component:ds-loader",
|
|
37
|
+
"reason": "Loader owns progress status and motion behavior."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"when": "The compact visual is an unread count or notification dot.",
|
|
41
|
+
"component": "component:ds-badge",
|
|
42
|
+
"reason": "Badge owns supplemental notification semantics."
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"commonlyComposedWith": [
|
|
46
|
+
"component:ds-button-filled",
|
|
47
|
+
"component:ds-button-unfilled",
|
|
48
|
+
"component:ds-menu",
|
|
49
|
+
"component:ds-panel-nav"
|
|
50
|
+
],
|
|
51
|
+
"accessibility": [
|
|
52
|
+
"Icons are decorative by default and remain hidden from assistive technology when visible text or an owning control already communicates the meaning.",
|
|
53
|
+
"The owning button, link, or composite control provides the accessible name; do not repeat that name on its nested Icon.",
|
|
54
|
+
"Provide an explicit label only when the non-interactive icon itself communicates otherwise unavailable meaning.",
|
|
55
|
+
"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.",
|
|
56
|
+
"Informative flags require an explicit localized country or region label; never derive accessible text from the export name.",
|
|
57
|
+
"Icon never receives focus or owns interaction."
|
|
58
|
+
],
|
|
59
|
+
"states": [
|
|
60
|
+
"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.",
|
|
61
|
+
"Prefer the owning control's isInactive or native disabled state over manually selecting tertiary or quaternary so visual treatment and inactive semantics remain synchronized.",
|
|
62
|
+
"Built-in glyph lookup accepts exact canonical IcoMo export names only. Names beginning with Flag select the flag catalog automatically.",
|
|
63
|
+
"A cache miss lazy-loads into a fixed-size box without layout shift. Unknown names, failed loads, and rejected markup leave that box empty.",
|
|
64
|
+
"Critical first-paint glyphs may be pre-registered before rendering; all resolved glyphs share a global cache.",
|
|
65
|
+
"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."
|
|
66
|
+
],
|
|
67
|
+
"responsiveBehavior": [
|
|
68
|
+
"The owning component or layout chooses icon size and any responsive changes.",
|
|
69
|
+
"Icon does not scale from viewport width or change glyphs automatically."
|
|
70
|
+
],
|
|
71
|
+
"frameworkCaveats": {
|
|
72
|
+
"customElements": [
|
|
73
|
+
"Import each canonical glyph as an SVG string and call registerIcons before first render when synchronous critical-icon paint is required."
|
|
74
|
+
],
|
|
75
|
+
"react": [
|
|
76
|
+
"Keep nested control icons decorative and place the accessible name on the owning React control."
|
|
77
|
+
],
|
|
78
|
+
"angular": [
|
|
79
|
+
"Keep nested control icons decorative and place the accessible name on the owning Angular control."
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"references": [
|
|
83
|
+
{
|
|
84
|
+
"label": "Storybook examples",
|
|
85
|
+
"path": "src/wc/components/Icon/Icon.stories.ts"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"label": "Preload API guidance",
|
|
89
|
+
"path": "src/wc/components/Icon/icon-cache.ts"
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
"api": {
|
|
94
|
+
"props": {
|
|
95
|
+
"color": {
|
|
96
|
+
"type": "IconColor",
|
|
97
|
+
"resolvedType": "\"ai\" | \"bold-ai\" | \"bold-brand\" | \"bold-caution\" | \"bold-negative\" | \"bold-neutral\" | \"bold-positive\" | \"bold-warning\" | \"brand\" | \"caution\" | \"faint-ai\" | \"faint-brand\" | \"faint-caution\" | \"faint-negative\" | \"faint-neutral\" | \"faint-positive\" | \"faint-warning\" | \"guide\" | \"inherit\" | \"medium-ai\" | \"medium-brand\" | \"medium-caution\" | \"medium-negative\" | \"medium-neutral\" | \"medium-positive\" | \"medium-warning\" | \"negative\" | \"neutral\" | \"on-bold\" | \"on-strong\" | \"positive\" | \"primary\" | \"quaternary\" | \"secondary\" | \"strong-ai\" | \"strong-brand\" | \"strong-caution\" | \"strong-negative\" | \"strong-neutral\" | \"strong-positive\" | \"strong-warning\" | \"tertiary\" | \"warning\" | `var(--${string})`",
|
|
98
|
+
"attribute": "color",
|
|
99
|
+
"default": "'inherit'",
|
|
100
|
+
"required": false,
|
|
101
|
+
"mutable": false,
|
|
102
|
+
"description": "Semantic foreground color token, or a raw CSS var reference. `tertiary`\nand the still-fainter `quaternary` are restricted to icons inside genuinely\ninactive/disabled UI or to purely decorative icons; informative icons must\nretain sufficient contrast."
|
|
103
|
+
},
|
|
104
|
+
"label": {
|
|
105
|
+
"type": "string | undefined",
|
|
106
|
+
"resolvedType": "string | undefined",
|
|
107
|
+
"attribute": "label",
|
|
108
|
+
"required": false,
|
|
109
|
+
"mutable": false,
|
|
110
|
+
"description": "Accessible label. Sets `role=\"img\"` and `aria-label`. Omit for decorative icons."
|
|
111
|
+
},
|
|
112
|
+
"name": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"resolvedType": "string",
|
|
115
|
+
"attribute": "name",
|
|
116
|
+
"default": "''",
|
|
117
|
+
"required": false,
|
|
118
|
+
"mutable": false,
|
|
119
|
+
"description": "Exact canonical IcoMo export name, including the `Flag` prefix for flags."
|
|
120
|
+
},
|
|
121
|
+
"size": {
|
|
122
|
+
"type": "IconSize",
|
|
123
|
+
"resolvedType": "\"2xl\" | \"3xl\" | \"lg\" | \"md\" | \"sm\" | \"xl\" | \"xs\"",
|
|
124
|
+
"attribute": "size",
|
|
125
|
+
"default": "'md'",
|
|
126
|
+
"required": false,
|
|
127
|
+
"mutable": false,
|
|
128
|
+
"description": "Iconography size token. Maps to `--dimension-iconography-{size}`. Default `md` = 20 px."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"events": [],
|
|
132
|
+
"methods": [],
|
|
133
|
+
"slots": []
|
|
134
|
+
},
|
|
135
|
+
"props": {
|
|
136
|
+
"color": {
|
|
137
|
+
"type": "IconColor",
|
|
138
|
+
"resolvedType": "\"ai\" | \"bold-ai\" | \"bold-brand\" | \"bold-caution\" | \"bold-negative\" | \"bold-neutral\" | \"bold-positive\" | \"bold-warning\" | \"brand\" | \"caution\" | \"faint-ai\" | \"faint-brand\" | \"faint-caution\" | \"faint-negative\" | \"faint-neutral\" | \"faint-positive\" | \"faint-warning\" | \"guide\" | \"inherit\" | \"medium-ai\" | \"medium-brand\" | \"medium-caution\" | \"medium-negative\" | \"medium-neutral\" | \"medium-positive\" | \"medium-warning\" | \"negative\" | \"neutral\" | \"on-bold\" | \"on-strong\" | \"positive\" | \"primary\" | \"quaternary\" | \"secondary\" | \"strong-ai\" | \"strong-brand\" | \"strong-caution\" | \"strong-negative\" | \"strong-neutral\" | \"strong-positive\" | \"strong-warning\" | \"tertiary\" | \"warning\" | `var(--${string})`",
|
|
139
|
+
"attribute": "color",
|
|
140
|
+
"default": "'inherit'",
|
|
141
|
+
"required": false,
|
|
142
|
+
"mutable": false,
|
|
143
|
+
"description": "Semantic foreground color token, or a raw CSS var reference. `tertiary`\nand the still-fainter `quaternary` are restricted to icons inside genuinely\ninactive/disabled UI or to purely decorative icons; informative icons must\nretain sufficient contrast."
|
|
144
|
+
},
|
|
145
|
+
"label": {
|
|
146
|
+
"type": "string | undefined",
|
|
147
|
+
"resolvedType": "string | undefined",
|
|
148
|
+
"attribute": "label",
|
|
149
|
+
"required": false,
|
|
150
|
+
"mutable": false,
|
|
151
|
+
"description": "Accessible label. Sets `role=\"img\"` and `aria-label`. Omit for decorative icons."
|
|
152
|
+
},
|
|
153
|
+
"name": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"resolvedType": "string",
|
|
156
|
+
"attribute": "name",
|
|
157
|
+
"default": "''",
|
|
158
|
+
"required": false,
|
|
159
|
+
"mutable": false,
|
|
160
|
+
"description": "Exact canonical IcoMo export name, including the `Flag` prefix for flags."
|
|
161
|
+
},
|
|
162
|
+
"size": {
|
|
163
|
+
"type": "IconSize",
|
|
164
|
+
"resolvedType": "\"2xl\" | \"3xl\" | \"lg\" | \"md\" | \"sm\" | \"xl\" | \"xs\"",
|
|
165
|
+
"attribute": "size",
|
|
166
|
+
"default": "'md'",
|
|
167
|
+
"required": false,
|
|
168
|
+
"mutable": false,
|
|
169
|
+
"description": "Iconography size token. Maps to `--dimension-iconography-{size}`. Default `md` = 20 px."
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"events": [],
|
|
173
|
+
"methods": [],
|
|
174
|
+
"slots": [],
|
|
175
|
+
"exports": {
|
|
176
|
+
"customElement": "ds-icon",
|
|
177
|
+
"react": "DsIcon",
|
|
178
|
+
"angular": "DsIcon"
|
|
179
|
+
},
|
|
180
|
+
"consumption": {
|
|
181
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
182
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
183
|
+
"customElements": {
|
|
184
|
+
"import": "import '@ds-mo/ui/dist/components/ds-icon.js';",
|
|
185
|
+
"example": "<ds-icon></ds-icon>"
|
|
186
|
+
},
|
|
187
|
+
"react": {
|
|
188
|
+
"import": "import { DsIcon } from '@ds-mo/ui/react';",
|
|
189
|
+
"example": "<DsIcon />"
|
|
190
|
+
},
|
|
191
|
+
"angular": {
|
|
192
|
+
"import": "import { DsIcon } from '@ds-mo/ui/angular/ds-icon';",
|
|
193
|
+
"example": "<ds-icon></ds-icon>"
|
|
194
|
+
},
|
|
195
|
+
"peerDependencies": {
|
|
196
|
+
"required": [
|
|
197
|
+
"@ds-mo/tokens ^3.1.1",
|
|
198
|
+
"@ds-mo/icons ^6.2.0"
|
|
199
|
+
],
|
|
200
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"dependencies": [
|
|
205
|
+
"@ds-mo/ui",
|
|
206
|
+
"@ds-mo/tokens",
|
|
207
|
+
"@ds-mo/icons"
|
|
208
|
+
],
|
|
209
|
+
"registryDependencies": [],
|
|
210
|
+
"files": [
|
|
211
|
+
{
|
|
212
|
+
"path": "src/wc/components/Icon/Icon.css",
|
|
213
|
+
"content": "/* ── Base icon ───────────────────────────────────────────────────────────── */\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n color: inherit;\n /* Explicit size so the SVG (width/height: 100% via JS) has a defined container */\n width: var(--_icon-sz, var(--dimension-iconography-md));\n height: var(--_icon-sz, var(--dimension-iconography-md));\n}\n\n.icon__svg {\n display: contents;\n line-height: 0;\n}\n\n/* SVG width/height are set via inline style in updateSvg() because Stencil's\n scoped CSS cannot reach innerHTML-injected elements (they lack the sc-* class). */\n\n/* ── Sizes ───────────────────────────────────────────────────────────────── */\n\n.icon--size-xs { --_icon-sz: var(--dimension-iconography-xs); }\n.icon--size-sm { --_icon-sz: var(--dimension-iconography-sm); }\n.icon--size-md { --_icon-sz: var(--dimension-iconography-md); }\n.icon--size-lg { --_icon-sz: var(--dimension-iconography-lg); }\n.icon--size-xl { --_icon-sz: var(--dimension-iconography-xl); }\n.icon--size-2xl { --_icon-sz: var(--dimension-iconography-2xl); }\n.icon--size-3xl { --_icon-sz: var(--dimension-iconography-3xl); }\n\n/* ── Colors — hierarchy ──────────────────────────────────────────────────── */\n\n.icon--color-primary { color: var(--color-foreground-primary); }\n.icon--color-secondary { color: var(--color-foreground-secondary); }\n.icon--color-tertiary { color: var(--color-foreground-tertiary); }\n.icon--color-quaternary { color: var(--color-foreground-quaternary); }\n.icon--color-inherit { color: inherit; }\n\n/* ── Colors — intent (bold contrast default) ─────────────────────────────── */\n\n.icon--color-brand { color: var(--color-foreground-bold-brand); }\n.icon--color-negative { color: var(--color-foreground-bold-negative); }\n.icon--color-positive { color: var(--color-foreground-bold-positive); }\n.icon--color-warning { color: var(--color-foreground-bold-warning); }\n.icon--color-caution { color: var(--color-foreground-bold-caution); }\n.icon--color-ai { color: var(--color-foreground-bold-ai); }\n.icon--color-guide { color: var(--color-foreground-bold-guide); }\n.icon--color-neutral { color: var(--color-foreground-bold-neutral); }\n\n/* ── Colors — intent faint ───────────────────────────────────────────────── */\n\n.icon--color-faint-brand { color: var(--color-foreground-faint-brand); }\n.icon--color-faint-negative { color: var(--color-foreground-faint-negative); }\n.icon--color-faint-positive { color: var(--color-foreground-faint-positive); }\n.icon--color-faint-warning { color: var(--color-foreground-faint-warning); }\n.icon--color-faint-caution { color: var(--color-foreground-faint-caution); }\n.icon--color-faint-ai { color: var(--color-foreground-faint-ai); }\n.icon--color-faint-neutral { color: var(--color-foreground-faint-neutral); }\n\n/* ── Colors — intent medium ─────────────────────────────────────────────── */\n\n.icon--color-medium-brand { color: var(--color-foreground-medium-brand); }\n.icon--color-medium-negative { color: var(--color-foreground-medium-negative); }\n.icon--color-medium-positive { color: var(--color-foreground-medium-positive); }\n.icon--color-medium-warning { color: var(--color-foreground-medium-warning); }\n.icon--color-medium-caution { color: var(--color-foreground-medium-caution); }\n.icon--color-medium-ai { color: var(--color-foreground-medium-ai); }\n.icon--color-medium-neutral { color: var(--color-foreground-medium-neutral); }\n\n/* ── Colors — intent bold (explicit) ────────────────────────────────────── */\n\n.icon--color-bold-brand { color: var(--color-foreground-bold-brand); }\n.icon--color-bold-negative { color: var(--color-foreground-bold-negative); }\n.icon--color-bold-positive { color: var(--color-foreground-bold-positive); }\n.icon--color-bold-warning { color: var(--color-foreground-bold-warning); }\n.icon--color-bold-caution { color: var(--color-foreground-bold-caution); }\n.icon--color-bold-ai { color: var(--color-foreground-bold-ai); }\n.icon--color-bold-neutral { color: var(--color-foreground-bold-neutral); }\n\n/* ── Colors — intent strong ──────────────────────────────────────────────── */\n\n.icon--color-strong-brand { color: var(--color-foreground-strong-brand); }\n.icon--color-strong-negative { color: var(--color-foreground-strong-negative); }\n.icon--color-strong-positive { color: var(--color-foreground-strong-positive); }\n.icon--color-strong-warning { color: var(--color-foreground-strong-warning); }\n.icon--color-strong-caution { color: var(--color-foreground-strong-caution); }\n.icon--color-strong-ai { color: var(--color-foreground-strong-ai); }\n.icon--color-strong-neutral { color: var(--color-foreground-strong-neutral); }\n\n/* ── Colors — contextual ────────────────────────────────────────────────── */\n\n.icon--color-on-strong { color: var(--color-foreground-on-strong-background-primary); }\n.icon--color-on-bold { color: var(--color-foreground-on-bold-background-primary); }\n",
|
|
214
|
+
"type": "registry:ui"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"path": "src/wc/components/Icon/Icon.tsx",
|
|
218
|
+
"content": "import { Component, Prop, Element, State, Watch, h, Host } from '@stencil/core';\nimport { flagIconLoaders } from './flag-icon-catalog';\nimport { systemIconLoaders } from './system-icon-catalog';\nimport { iconCache, iconCacheKey } from './icon-cache';\nimport { parseIconSvg } from './icon-svg';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\n\nexport type IconColorToken =\n // Hierarchy\n | 'primary' | 'secondary' | 'tertiary' | 'quaternary'\n // Intent — bold contrast (default)\n | 'brand' | 'negative' | 'positive' | 'warning' | 'caution' | 'ai' | 'guide' | 'neutral'\n // Intent — faint\n | 'faint-brand' | 'faint-negative' | 'faint-positive' | 'faint-warning'\n | 'faint-caution' | 'faint-ai' | 'faint-neutral'\n // Intent — medium\n | 'medium-brand' | 'medium-negative' | 'medium-positive' | 'medium-warning'\n | 'medium-caution' | 'medium-ai' | 'medium-neutral'\n // Intent — bold (explicit)\n | 'bold-brand' | 'bold-negative' | 'bold-positive' | 'bold-warning'\n | 'bold-caution' | 'bold-ai' | 'bold-neutral'\n // Intent — strong\n | 'strong-brand' | 'strong-negative' | 'strong-positive' | 'strong-warning'\n | 'strong-caution' | 'strong-ai' | 'strong-neutral'\n // Contextual\n | 'on-strong' | 'on-bold'\n // Pass-through\n | 'inherit';\n\nexport type IconColor = IconColorToken | `var(--${string})`;\n\n@Component({\n tag: 'ds-icon',\n styleUrl: 'Icon.css',\n scoped: true,\n})\nexport class Icon {\n @Element() el!: HTMLElement;\n\n /** Exact canonical IcoMo export name, including the `Flag` prefix for flags. */\n @Prop() name: string = '';\n /** Iconography size token. Maps to `--dimension-iconography-{size}`. Default `md` = 20 px. */\n @Prop() size: IconSize = 'md';\n /**\n * Semantic foreground color token, or a raw CSS var reference. `tertiary`\n * and the still-fainter `quaternary` are restricted to icons inside genuinely\n * inactive/disabled UI or to purely decorative icons; informative icons must\n * retain sufficient contrast.\n */\n @Prop() color: IconColor = 'inherit';\n /** Accessible label. Sets `role=\"img\"` and `aria-label`. Omit for decorative icons. */\n @Prop() label: string | undefined;\n\n /** Resolved SVG markup — set synchronously on cache hit, async after a lazy load. */\n @State() private svg: string = '';\n\n /** Guards against out-of-order async resolutions when `name`/`flag` change quickly. */\n private loadToken = 0;\n\n /**\n * Cache hit → render synchronously (pre-registered via `registerIcons` or\n * previously loaded). Miss → fire the per-icon lazy loader; the glyph pops in\n * when the (tiny, per-icon) chunk resolves and stays cached for every other\n * ds-icon instance.\n */\n private resolveSvg() {\n const flag = this.name.startsWith('Flag');\n const key = iconCacheKey(this.name, flag);\n const token = ++this.loadToken;\n\n const cached = iconCache().get(key);\n if (cached !== undefined) {\n this.svg = cached;\n return;\n }\n\n // Own-key lookup only: names resolve by exact canonical IcoMo export key —\n // never meta.json aliases (not in the maps) and never inherited prototype\n // keys ('constructor', 'toString', …) that a bare index access would hit.\n const loaders = flag ? flagIconLoaders : systemIconLoaders;\n const loader = Object.prototype.hasOwnProperty.call(loaders, this.name)\n ? loaders[this.name]\n : undefined;\n if (!loader) {\n this.svg = '';\n return;\n }\n\n loader()\n .then(svg => {\n iconCache().set(key, svg);\n if (token === this.loadToken) this.svg = svg;\n })\n .catch(() => {\n if (token === this.loadToken) this.svg = '';\n });\n }\n\n componentWillLoad() {\n // Fire-and-forget: do not return the promise — a cache miss must not block\n // the parent render tree on a network fetch.\n this.resolveSvg();\n }\n\n /** Last markup injected into the DOM — skips redundant re-parse on unrelated re-renders. */\n private renderedSvg: string | null = null;\n\n private updateSvg() {\n const container = this.el.querySelector<HTMLElement>('.icon__svg');\n if (!container) return;\n if (this.svg === this.renderedSvg) return;\n this.renderedSvg = this.svg;\n\n // Validate + inject as parsed DOM nodes — never innerHTML. Keeps ds-icon\n // Trusted-Types compatible and rejects executable/foreign content in\n // glyph strings (registerIcons accepts app-provided markup).\n const svg = this.svg ? parseIconSvg(this.svg) : null;\n if (!svg) {\n container.replaceChildren();\n return;\n }\n\n // Stencil's scoped CSS cannot reach injected elements (no sc-* class).\n // Apply width/height as inline styles so sizing works regardless of scope class.\n svg.removeAttribute('width');\n svg.removeAttribute('height');\n // Prevent SVG from being natively focusable (Firefox/IE default) while\n // sitting inside an aria-hidden parent — fixes aria-hidden-focus violation.\n svg.setAttribute('focusable', 'false');\n svg.setAttribute('aria-hidden', 'true');\n svg.style.display = 'block';\n svg.style.flexShrink = '0';\n svg.style.width = '100%';\n svg.style.height = '100%';\n container.replaceChildren(svg);\n }\n\n @Watch('name')\n onIconChange() {\n this.resolveSvg();\n }\n\n componentDidRender() {\n this.updateSvg();\n }\n\n render() {\n const isCustomColor = typeof this.color === 'string' && this.color.startsWith('var(--');\n\n const cls: Record<string, boolean> = {\n icon: true,\n [`icon--size-${this.size}`]: true,\n [`icon--color-${this.color}`]: !!this.color && !isCustomColor && this.color !== 'inherit',\n 'icon--color-inherit': this.color === 'inherit',\n };\n\n const style = isCustomColor ? { color: this.color as string } : undefined;\n\n return (\n <Host style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}>\n <span\n class={cls}\n style={style}\n role={this.label ? 'img' : 'presentation'}\n aria-label={this.label}\n aria-hidden={!this.label ? 'true' : undefined}\n >\n <span class=\"icon__svg\" />\n </span>\n </Host>\n );\n }\n}\n",
|
|
219
|
+
"type": "registry:ui"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"path": "src/wc/components/Icon/flag-icon-catalog.ts",
|
|
223
|
+
"content": "/** Auto-generated by scripts/generate-icon-catalog.mjs — do not edit. */\n\nexport const flagIconLoaders: Record<string, () => Promise<string>> = {\n FlagAustria: () => import('@ds-mo/icons/svg/flags/FlagAustria').then(m => m.FlagAustria),\n FlagBelgium: () => import('@ds-mo/icons/svg/flags/FlagBelgium').then(m => m.FlagBelgium),\n FlagBulgaria: () => import('@ds-mo/icons/svg/flags/FlagBulgaria').then(m => m.FlagBulgaria),\n FlagCanada: () => import('@ds-mo/icons/svg/flags/FlagCanada').then(m => m.FlagCanada),\n FlagCroatia: () => import('@ds-mo/icons/svg/flags/FlagCroatia').then(m => m.FlagCroatia),\n FlagCyprus: () => import('@ds-mo/icons/svg/flags/FlagCyprus').then(m => m.FlagCyprus),\n FlagCzechRepublic: () => import('@ds-mo/icons/svg/flags/FlagCzechRepublic').then(m => m.FlagCzechRepublic),\n FlagDenmark: () => import('@ds-mo/icons/svg/flags/FlagDenmark').then(m => m.FlagDenmark),\n FlagEU: () => import('@ds-mo/icons/svg/flags/FlagEU').then(m => m.FlagEU),\n FlagEstonia: () => import('@ds-mo/icons/svg/flags/FlagEstonia').then(m => m.FlagEstonia),\n FlagFinland: () => import('@ds-mo/icons/svg/flags/FlagFinland').then(m => m.FlagFinland),\n FlagFrance: () => import('@ds-mo/icons/svg/flags/FlagFrance').then(m => m.FlagFrance),\n FlagGermany: () => import('@ds-mo/icons/svg/flags/FlagGermany').then(m => m.FlagGermany),\n FlagGreece: () => import('@ds-mo/icons/svg/flags/FlagGreece').then(m => m.FlagGreece),\n FlagHungary: () => import('@ds-mo/icons/svg/flags/FlagHungary').then(m => m.FlagHungary),\n FlagIreland: () => import('@ds-mo/icons/svg/flags/FlagIreland').then(m => m.FlagIreland),\n FlagItaly: () => import('@ds-mo/icons/svg/flags/FlagItaly').then(m => m.FlagItaly),\n FlagLatvia: () => import('@ds-mo/icons/svg/flags/FlagLatvia').then(m => m.FlagLatvia),\n FlagLithuania: () => import('@ds-mo/icons/svg/flags/FlagLithuania').then(m => m.FlagLithuania),\n FlagLuxembourg: () => import('@ds-mo/icons/svg/flags/FlagLuxembourg').then(m => m.FlagLuxembourg),\n FlagMalta: () => import('@ds-mo/icons/svg/flags/FlagMalta').then(m => m.FlagMalta),\n FlagMexico: () => import('@ds-mo/icons/svg/flags/FlagMexico').then(m => m.FlagMexico),\n FlagNetherlands: () => import('@ds-mo/icons/svg/flags/FlagNetherlands').then(m => m.FlagNetherlands),\n FlagPoland: () => import('@ds-mo/icons/svg/flags/FlagPoland').then(m => m.FlagPoland),\n FlagPortugal: () => import('@ds-mo/icons/svg/flags/FlagPortugal').then(m => m.FlagPortugal),\n FlagRomania: () => import('@ds-mo/icons/svg/flags/FlagRomania').then(m => m.FlagRomania),\n FlagSlovakia: () => import('@ds-mo/icons/svg/flags/FlagSlovakia').then(m => m.FlagSlovakia),\n FlagSlovenia: () => import('@ds-mo/icons/svg/flags/FlagSlovenia').then(m => m.FlagSlovenia),\n FlagSpain: () => import('@ds-mo/icons/svg/flags/FlagSpain').then(m => m.FlagSpain),\n FlagSweden: () => import('@ds-mo/icons/svg/flags/FlagSweden').then(m => m.FlagSweden),\n FlagUnitedKingdom: () => import('@ds-mo/icons/svg/flags/FlagUnitedKingdom').then(m => m.FlagUnitedKingdom),\n FlagUnitedStates: () => import('@ds-mo/icons/svg/flags/FlagUnitedStates').then(m => m.FlagUnitedStates),\n};\n",
|
|
224
|
+
"type": "registry:ui"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"path": "src/wc/components/Icon/icon-cache.ts",
|
|
228
|
+
"content": "/**\n * Shared SVG glyph cache for ds-icon.\n *\n * Keyed on a global symbol so every module instance (the compiled Stencil chunk\n * inside dist/components and any direct source import, e.g. via `@ds-mo/ui/utils`)\n * reads and writes the same cache. Without this, `registerIcons` called from an\n * app would fill a different Map than the one ds-icon resolves from.\n */\nconst CACHE_KEY = Symbol.for('ds-mo.icon-svg-cache');\n\ntype IconCacheMap = Map<string, string>;\n\ntype GlobalWithIconCache = { [CACHE_KEY]?: IconCacheMap };\n\nexport function iconCacheKey(name: string, flag: boolean): string {\n return flag ? `flag:${name}` : `system:${name}`;\n}\n\nexport function iconCache(): IconCacheMap {\n const g = globalThis as GlobalWithIconCache;\n return (g[CACHE_KEY] ??= new Map());\n}\n\n/**\n * Pre-register glyphs so ds-icon renders them synchronously — no lazy-chunk\n * fetch, no first-paint pop-in. Import the SVG strings from `@ds-mo/icons`\n * in the app (statically, so they ship in the app's own bundle):\n *\n * ```ts\n * import { Bell } from '@ds-mo/icons/svg/Bell';\n * import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';\n * import { registerIcons } from '@ds-mo/ui/utils';\n *\n * registerIcons({ Bell });\n * registerIcons({ FlagUnitedStates });\n * ```\n *\n * Icons that are not registered still work — they lazy-load on first render\n * and stay cached afterwards.\n */\nexport function registerIcons(icons: Record<string, string>, options?: { flag?: boolean }): void {\n const cache = iconCache();\n for (const [name, svg] of Object.entries(icons)) {\n const flag = options?.flag ?? name.startsWith('Flag');\n cache.set(iconCacheKey(name, flag), svg);\n }\n}\n",
|
|
229
|
+
"type": "registry:ui"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"path": "src/wc/components/Icon/icon-svg.ts",
|
|
233
|
+
"content": "/**\n * Glyph markup validation + Trusted-Types-safe parsing for ds-icon.\n *\n * Glyphs normally come from the trusted @ds-mo/icons build pipeline, but\n * `registerIcons` accepts arbitrary app-provided strings and injection is a\n * sink — so every glyph is validated at the render boundary. Injection uses\n * parsed DOM nodes (never innerHTML), which keeps ds-icon working under a\n * strict CSP with `require-trusted-types-for 'script'`.\n */\n\n/** Structural view of an element so the walk is unit-testable without a DOM. */\nexport interface IconSvgElementLike {\n localName: string;\n getAttributeNames(): string[];\n getAttribute(name: string): string | null;\n children: ArrayLike<IconSvgElementLike>;\n}\n\n/** Elements that can execute or embed foreign content — never valid in a glyph. */\nconst FORBIDDEN_ELEMENTS = new Set([\n 'script',\n 'foreignobject',\n 'iframe',\n 'object',\n 'embed',\n 'animation', // SVG 1.2 external-content element (distinct from animate/animateTransform)\n]);\n\nfunction isValidIconSvgElement(el: IconSvgElementLike): boolean {\n if (FORBIDDEN_ELEMENTS.has(el.localName.toLowerCase())) return false;\n\n for (const attr of el.getAttributeNames()) {\n const lower = attr.toLowerCase();\n // Event handler attributes (onclick, onload, …) — any casing.\n if (lower.startsWith('on')) return false;\n // References must stay internal (#gradient-id); rejects javascript:, data:,\n // and external URLs on <use>, <a>, <image>, …\n if (lower === 'href' || lower === 'xlink:href') {\n const value = el.getAttribute(attr) ?? '';\n if (!value.startsWith('#')) return false;\n }\n }\n\n for (let i = 0; i < el.children.length; i++) {\n if (!isValidIconSvgElement(el.children[i])) return false;\n }\n\n return true;\n}\n\n/** True when `root` is an `<svg>` whose whole tree passes validation. */\nexport function isValidIconSvgRoot(root: IconSvgElementLike | null): boolean {\n return root != null && root.localName === 'svg' && isValidIconSvgElement(root);\n}\n\n/**\n * Parse + validate glyph markup. Returns a detached `<svg>` element ready to\n * append (appending adopts it into the document), or `null` when the markup\n * is not well-formed XML, not rooted at `<svg>`, or fails validation —\n * ds-icon renders an empty fixed-size box in that case.\n */\nexport function parseIconSvg(svg: string): SVGElement | null {\n if (typeof DOMParser === 'undefined') return null;\n\n const doc = new DOMParser().parseFromString(svg, 'image/svg+xml');\n // Malformed XML yields a parsererror document (root or nested, per browser).\n if (doc.querySelector('parsererror')) return null;\n\n const root = doc.documentElement as unknown as IconSvgElementLike;\n if (!isValidIconSvgRoot(root)) return null;\n\n return doc.documentElement as unknown as SVGElement;\n}\n",
|
|
234
|
+
"type": "registry:ui"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"path": "src/wc/components/Icon/system-icon-catalog.ts",
|
|
238
|
+
"content": "/** Auto-generated by scripts/generate-icon-catalog.mjs — do not edit. */\n\nexport const systemIconLoaders: Record<string, () => Promise<string>> = {\n AI: () => import('@ds-mo/icons/svg/AI').then(m => m.AI),\n AIChip: () => import('@ds-mo/icons/svg/AIChip').then(m => m.AIChip),\n AINew: () => import('@ds-mo/icons/svg/AINew').then(m => m.AINew),\n AISparkle: () => import('@ds-mo/icons/svg/AISparkle').then(m => m.AISparkle),\n AUX: () => import('@ds-mo/icons/svg/AUX').then(m => m.AUX),\n AUXFilled: () => import('@ds-mo/icons/svg/AUXFilled').then(m => m.AUXFilled),\n AndroidFilled: () => import('@ds-mo/icons/svg/AndroidFilled').then(m => m.AndroidFilled),\n ArrowDown: () => import('@ds-mo/icons/svg/ArrowDown').then(m => m.ArrowDown),\n ArrowLeft: () => import('@ds-mo/icons/svg/ArrowLeft').then(m => m.ArrowLeft),\n ArrowPath: () => import('@ds-mo/icons/svg/ArrowPath').then(m => m.ArrowPath),\n ArrowRight: () => import('@ds-mo/icons/svg/ArrowRight').then(m => m.ArrowRight),\n ArrowUp: () => import('@ds-mo/icons/svg/ArrowUp').then(m => m.ArrowUp),\n ArrowsDiagonal: () => import('@ds-mo/icons/svg/ArrowsDiagonal').then(m => m.ArrowsDiagonal),\n ArrowsDiff: () => import('@ds-mo/icons/svg/ArrowsDiff').then(m => m.ArrowsDiff),\n ArrowsDiffDisabled: () => import('@ds-mo/icons/svg/ArrowsDiffDisabled').then(m => m.ArrowsDiffDisabled),\n ArrowsVertical: () => import('@ds-mo/icons/svg/ArrowsVertical').then(m => m.ArrowsVertical),\n AtSign: () => import('@ds-mo/icons/svg/AtSign').then(m => m.AtSign),\n Avatar: () => import('@ds-mo/icons/svg/Avatar').then(m => m.Avatar),\n BackslashBrackets: () => import('@ds-mo/icons/svg/BackslashBrackets').then(m => m.BackslashBrackets),\n BatteryCharging: () => import('@ds-mo/icons/svg/BatteryCharging').then(m => m.BatteryCharging),\n BatteryEmpty: () => import('@ds-mo/icons/svg/BatteryEmpty').then(m => m.BatteryEmpty),\n BatteryFull: () => import('@ds-mo/icons/svg/BatteryFull').then(m => m.BatteryFull),\n BatteryHalf: () => import('@ds-mo/icons/svg/BatteryHalf').then(m => m.BatteryHalf),\n BatteryLow: () => import('@ds-mo/icons/svg/BatteryLow').then(m => m.BatteryLow),\n Beaker: () => import('@ds-mo/icons/svg/Beaker').then(m => m.Beaker),\n Bell: () => import('@ds-mo/icons/svg/Bell').then(m => m.Bell),\n BellCircle: () => import('@ds-mo/icons/svg/BellCircle').then(m => m.BellCircle),\n BellExclamation: () => import('@ds-mo/icons/svg/BellExclamation').then(m => m.BellExclamation),\n BellFilled: () => import('@ds-mo/icons/svg/BellFilled').then(m => m.BellFilled),\n BellRinging: () => import('@ds-mo/icons/svg/BellRinging').then(m => m.BellRinging),\n BellWifi: () => import('@ds-mo/icons/svg/BellWifi').then(m => m.BellWifi),\n BlackWhite: () => import('@ds-mo/icons/svg/BlackWhite').then(m => m.BlackWhite),\n BlankUI: () => import('@ds-mo/icons/svg/BlankUI').then(m => m.BlankUI),\n Bluetooth: () => import('@ds-mo/icons/svg/Bluetooth').then(m => m.Bluetooth),\n Bolt: () => import('@ds-mo/icons/svg/Bolt').then(m => m.Bolt),\n BoltFilled: () => import('@ds-mo/icons/svg/BoltFilled').then(m => m.BoltFilled),\n Bookmark: () => import('@ds-mo/icons/svg/Bookmark').then(m => m.Bookmark),\n Box: () => import('@ds-mo/icons/svg/Box').then(m => m.Box),\n Braces: () => import('@ds-mo/icons/svg/Braces').then(m => m.Braces),\n Bug: () => import('@ds-mo/icons/svg/Bug').then(m => m.Bug),\n BuildingFacility: () => import('@ds-mo/icons/svg/BuildingFacility').then(m => m.BuildingFacility),\n BuildingHome: () => import('@ds-mo/icons/svg/BuildingHome').then(m => m.BuildingHome),\n BuildingOffice: () => import('@ds-mo/icons/svg/BuildingOffice').then(m => m.BuildingOffice),\n BuildingPublic: () => import('@ds-mo/icons/svg/BuildingPublic').then(m => m.BuildingPublic),\n BuildingShop: () => import('@ds-mo/icons/svg/BuildingShop').then(m => m.BuildingShop),\n Bulb: () => import('@ds-mo/icons/svg/Bulb').then(m => m.Bulb),\n Calculator: () => import('@ds-mo/icons/svg/Calculator').then(m => m.Calculator),\n Calendar: () => import('@ds-mo/icons/svg/Calendar').then(m => m.Calendar),\n CalendarClock: () => import('@ds-mo/icons/svg/CalendarClock').then(m => m.CalendarClock),\n CameraA: () => import('@ds-mo/icons/svg/CameraA').then(m => m.CameraA),\n CameraB: () => import('@ds-mo/icons/svg/CameraB').then(m => m.CameraB),\n Card: () => import('@ds-mo/icons/svg/Card').then(m => m.Card),\n CardPerson: () => import('@ds-mo/icons/svg/CardPerson').then(m => m.CardPerson),\n Cart: () => import('@ds-mo/icons/svg/Cart').then(m => m.Cart),\n Chart: () => import('@ds-mo/icons/svg/Chart').then(m => m.Chart),\n Check: () => import('@ds-mo/icons/svg/Check').then(m => m.Check),\n CheckCircle: () => import('@ds-mo/icons/svg/CheckCircle').then(m => m.CheckCircle),\n CheckCircleFilled: () => import('@ds-mo/icons/svg/CheckCircleFilled').then(m => m.CheckCircleFilled),\n CheckDouble: () => import('@ds-mo/icons/svg/CheckDouble').then(m => m.CheckDouble),\n ChevronDown: () => import('@ds-mo/icons/svg/ChevronDown').then(m => m.ChevronDown),\n ChevronLeft: () => import('@ds-mo/icons/svg/ChevronLeft').then(m => m.ChevronLeft),\n ChevronLeftDouble: () => import('@ds-mo/icons/svg/ChevronLeftDouble').then(m => m.ChevronLeftDouble),\n ChevronRight: () => import('@ds-mo/icons/svg/ChevronRight').then(m => m.ChevronRight),\n ChevronRightDouble: () => import('@ds-mo/icons/svg/ChevronRightDouble').then(m => m.ChevronRightDouble),\n ChevronUp: () => import('@ds-mo/icons/svg/ChevronUp').then(m => m.ChevronUp),\n ChevronUpDown: () => import('@ds-mo/icons/svg/ChevronUpDown').then(m => m.ChevronUpDown),\n Circle: () => import('@ds-mo/icons/svg/Circle').then(m => m.Circle),\n CircleArrow: () => import('@ds-mo/icons/svg/CircleArrow').then(m => m.CircleArrow),\n CircleArrowsDiff: () => import('@ds-mo/icons/svg/CircleArrowsDiff').then(m => m.CircleArrowsDiff),\n CircleArrowsDiffDisabled: () => import('@ds-mo/icons/svg/CircleArrowsDiffDisabled').then(m => m.CircleArrowsDiffDisabled),\n CircleConcentricFilled: () => import('@ds-mo/icons/svg/CircleConcentricFilled').then(m => m.CircleConcentricFilled),\n CircleConcentricThree: () => import('@ds-mo/icons/svg/CircleConcentricThree').then(m => m.CircleConcentricThree),\n CircleConcentricTwo: () => import('@ds-mo/icons/svg/CircleConcentricTwo').then(m => m.CircleConcentricTwo),\n CircleExclamation: () => import('@ds-mo/icons/svg/CircleExclamation').then(m => m.CircleExclamation),\n CircleExclamationFilled: () => import('@ds-mo/icons/svg/CircleExclamationFilled').then(m => m.CircleExclamationFilled),\n CircleFastForward: () => import('@ds-mo/icons/svg/CircleFastForward').then(m => m.CircleFastForward),\n CircleFilled: () => import('@ds-mo/icons/svg/CircleFilled').then(m => m.CircleFilled),\n CircleGrid: () => import('@ds-mo/icons/svg/CircleGrid').then(m => m.CircleGrid),\n CirclePlay: () => import('@ds-mo/icons/svg/CirclePlay').then(m => m.CirclePlay),\n CircleQuestion: () => import('@ds-mo/icons/svg/CircleQuestion').then(m => m.CircleQuestion),\n CircleSlash: () => import('@ds-mo/icons/svg/CircleSlash').then(m => m.CircleSlash),\n Clipboard: () => import('@ds-mo/icons/svg/Clipboard').then(m => m.Clipboard),\n ClipboardCheck: () => import('@ds-mo/icons/svg/ClipboardCheck').then(m => m.ClipboardCheck),\n Clock: () => import('@ds-mo/icons/svg/Clock').then(m => m.Clock),\n ClockDefer: () => import('@ds-mo/icons/svg/ClockDefer').then(m => m.ClockDefer),\n ClockFilled: () => import('@ds-mo/icons/svg/ClockFilled').then(m => m.ClockFilled),\n ClockSixteenHour: () => import('@ds-mo/icons/svg/ClockSixteenHour').then(m => m.ClockSixteenHour),\n Cloud: () => import('@ds-mo/icons/svg/Cloud').then(m => m.Cloud),\n CloudEllipses: () => import('@ds-mo/icons/svg/CloudEllipses').then(m => m.CloudEllipses),\n CloudLightning: () => import('@ds-mo/icons/svg/CloudLightning').then(m => m.CloudLightning),\n CloudRain: () => import('@ds-mo/icons/svg/CloudRain').then(m => m.CloudRain),\n CloudRainSun: () => import('@ds-mo/icons/svg/CloudRainSun').then(m => m.CloudRainSun),\n CloudSun: () => import('@ds-mo/icons/svg/CloudSun').then(m => m.CloudSun),\n CloudWind: () => import('@ds-mo/icons/svg/CloudWind').then(m => m.CloudWind),\n Cluster: () => import('@ds-mo/icons/svg/Cluster').then(m => m.Cluster),\n Coin: () => import('@ds-mo/icons/svg/Coin').then(m => m.Coin),\n CoinStack: () => import('@ds-mo/icons/svg/CoinStack').then(m => m.CoinStack),\n CoinStackGeneral: () => import('@ds-mo/icons/svg/CoinStackGeneral').then(m => m.CoinStackGeneral),\n Compass: () => import('@ds-mo/icons/svg/Compass').then(m => m.Compass),\n Copy: () => import('@ds-mo/icons/svg/Copy').then(m => m.Copy),\n Crop: () => import('@ds-mo/icons/svg/Crop').then(m => m.Crop),\n Cross: () => import('@ds-mo/icons/svg/Cross').then(m => m.Cross),\n CrossCircle: () => import('@ds-mo/icons/svg/CrossCircle').then(m => m.CrossCircle),\n CrossCircleFilled: () => import('@ds-mo/icons/svg/CrossCircleFilled').then(m => m.CrossCircleFilled),\n Cube: () => import('@ds-mo/icons/svg/Cube').then(m => m.Cube),\n Cup: () => import('@ds-mo/icons/svg/Cup').then(m => m.Cup),\n CursorPointer: () => import('@ds-mo/icons/svg/CursorPointer').then(m => m.CursorPointer),\n CursorPointerMinus: () => import('@ds-mo/icons/svg/CursorPointerMinus').then(m => m.CursorPointerMinus),\n CursorPointerPlus: () => import('@ds-mo/icons/svg/CursorPointerPlus').then(m => m.CursorPointerPlus),\n Dashboard: () => import('@ds-mo/icons/svg/Dashboard').then(m => m.Dashboard),\n DeviceAIDashcamPlus: () => import('@ds-mo/icons/svg/DeviceAIDashcamPlus').then(m => m.DeviceAIDashcamPlus),\n DeviceAssetTracker: () => import('@ds-mo/icons/svg/DeviceAssetTracker').then(m => m.DeviceAssetTracker),\n DeviceDVR: () => import('@ds-mo/icons/svg/DeviceDVR').then(m => m.DeviceDVR),\n DeviceDashcam: () => import('@ds-mo/icons/svg/DeviceDashcam').then(m => m.DeviceDashcam),\n DeviceDashcamLiveStream: () => import('@ds-mo/icons/svg/DeviceDashcamLiveStream').then(m => m.DeviceDashcamLiveStream),\n DeviceDoorSensor: () => import('@ds-mo/icons/svg/DeviceDoorSensor').then(m => m.DeviceDoorSensor),\n DeviceMobile: () => import('@ds-mo/icons/svg/DeviceMobile').then(m => m.DeviceMobile),\n DeviceMobileTwo: () => import('@ds-mo/icons/svg/DeviceMobileTwo').then(m => m.DeviceMobileTwo),\n DeviceOmnicam: () => import('@ds-mo/icons/svg/DeviceOmnicam').then(m => m.DeviceOmnicam),\n DeviceSensor: () => import('@ds-mo/icons/svg/DeviceSensor').then(m => m.DeviceSensor),\n DeviceTablet: () => import('@ds-mo/icons/svg/DeviceTablet').then(m => m.DeviceTablet),\n DeviceVehicleGateway: () => import('@ds-mo/icons/svg/DeviceVehicleGateway').then(m => m.DeviceVehicleGateway),\n Devices: () => import('@ds-mo/icons/svg/Devices').then(m => m.Devices),\n Document: () => import('@ds-mo/icons/svg/Document').then(m => m.Document),\n DocumentArrow: () => import('@ds-mo/icons/svg/DocumentArrow').then(m => m.DocumentArrow),\n DocumentChart: () => import('@ds-mo/icons/svg/DocumentChart').then(m => m.DocumentChart),\n DocumentDollar: () => import('@ds-mo/icons/svg/DocumentDollar').then(m => m.DocumentDollar),\n DocumentGear: () => import('@ds-mo/icons/svg/DocumentGear').then(m => m.DocumentGear),\n DocumentInverted: () => import('@ds-mo/icons/svg/DocumentInverted').then(m => m.DocumentInverted),\n DocumentPencil: () => import('@ds-mo/icons/svg/DocumentPencil').then(m => m.DocumentPencil),\n DocumentPlus: () => import('@ds-mo/icons/svg/DocumentPlus').then(m => m.DocumentPlus),\n DocumentQuestion: () => import('@ds-mo/icons/svg/DocumentQuestion').then(m => m.DocumentQuestion),\n DocumentReceipt: () => import('@ds-mo/icons/svg/DocumentReceipt').then(m => m.DocumentReceipt),\n DocumentStacked: () => import('@ds-mo/icons/svg/DocumentStacked').then(m => m.DocumentStacked),\n Dot: () => import('@ds-mo/icons/svg/Dot').then(m => m.Dot),\n DotFilled: () => import('@ds-mo/icons/svg/DotFilled').then(m => m.DotFilled),\n DotPath: () => import('@ds-mo/icons/svg/DotPath').then(m => m.DotPath),\n Download: () => import('@ds-mo/icons/svg/Download').then(m => m.Download),\n Drag: () => import('@ds-mo/icons/svg/Drag').then(m => m.Drag),\n Ellipses: () => import('@ds-mo/icons/svg/Ellipses').then(m => m.Ellipses),\n Email: () => import('@ds-mo/icons/svg/Email').then(m => m.Email),\n Engine: () => import('@ds-mo/icons/svg/Engine').then(m => m.Engine),\n Enter: () => import('@ds-mo/icons/svg/Enter').then(m => m.Enter),\n EntityAsset: () => import('@ds-mo/icons/svg/EntityAsset').then(m => m.EntityAsset),\n EntityAssetFilled: () => import('@ds-mo/icons/svg/EntityAssetFilled').then(m => m.EntityAssetFilled),\n EntityDriver: () => import('@ds-mo/icons/svg/EntityDriver').then(m => m.EntityDriver),\n EntityDriverFilled: () => import('@ds-mo/icons/svg/EntityDriverFilled').then(m => m.EntityDriverFilled),\n EntityTravelGroup: () => import('@ds-mo/icons/svg/EntityTravelGroup').then(m => m.EntityTravelGroup),\n EntityTravelGroupFilled: () => import('@ds-mo/icons/svg/EntityTravelGroupFilled').then(m => m.EntityTravelGroupFilled),\n EntityVehicle: () => import('@ds-mo/icons/svg/EntityVehicle').then(m => m.EntityVehicle),\n EntityVehicleCharging: () => import('@ds-mo/icons/svg/EntityVehicleCharging').then(m => m.EntityVehicleCharging),\n EntityVehicleChargingFilled: () => import('@ds-mo/icons/svg/EntityVehicleChargingFilled').then(m => m.EntityVehicleChargingFilled),\n EntityVehicleFilled: () => import('@ds-mo/icons/svg/EntityVehicleFilled').then(m => m.EntityVehicleFilled),\n EntityVehicleImmobilized: () => import('@ds-mo/icons/svg/EntityVehicleImmobilized').then(m => m.EntityVehicleImmobilized),\n EntityVehicleImmobilizedFilled: () => import('@ds-mo/icons/svg/EntityVehicleImmobilizedFilled').then(m => m.EntityVehicleImmobilizedFilled),\n ErrorTriangle: () => import('@ds-mo/icons/svg/ErrorTriangle').then(m => m.ErrorTriangle),\n ErrorTriangleFilled: () => import('@ds-mo/icons/svg/ErrorTriangleFilled').then(m => m.ErrorTriangleFilled),\n ErrorTriangleSimpleFilled: () => import('@ds-mo/icons/svg/ErrorTriangleSimpleFilled').then(m => m.ErrorTriangleSimpleFilled),\n Export: () => import('@ds-mo/icons/svg/Export').then(m => m.Export),\n ExternalLink: () => import('@ds-mo/icons/svg/ExternalLink').then(m => m.ExternalLink),\n Eye: () => import('@ds-mo/icons/svg/Eye').then(m => m.Eye),\n EyeDisabled: () => import('@ds-mo/icons/svg/EyeDisabled').then(m => m.EyeDisabled),\n EyeLock: () => import('@ds-mo/icons/svg/EyeLock').then(m => m.EyeLock),\n FastForward: () => import('@ds-mo/icons/svg/FastForward').then(m => m.FastForward),\n FastForwardSkip: () => import('@ds-mo/icons/svg/FastForwardSkip').then(m => m.FastForwardSkip),\n Filters: () => import('@ds-mo/icons/svg/Filters').then(m => m.Filters),\n FitToScreen: () => import('@ds-mo/icons/svg/FitToScreen').then(m => m.FitToScreen),\n Flag: () => import('@ds-mo/icons/svg/Flag').then(m => m.Flag),\n FlagFilled: () => import('@ds-mo/icons/svg/FlagFilled').then(m => m.FlagFilled),\n FloppyDisk: () => import('@ds-mo/icons/svg/FloppyDisk').then(m => m.FloppyDisk),\n Folder: () => import('@ds-mo/icons/svg/Folder').then(m => m.Folder),\n FolderFilled: () => import('@ds-mo/icons/svg/FolderFilled').then(m => m.FolderFilled),\n FuelPump: () => import('@ds-mo/icons/svg/FuelPump').then(m => m.FuelPump),\n FullScreen: () => import('@ds-mo/icons/svg/FullScreen').then(m => m.FullScreen),\n FullScreenExit: () => import('@ds-mo/icons/svg/FullScreenExit').then(m => m.FullScreenExit),\n Gauge: () => import('@ds-mo/icons/svg/Gauge').then(m => m.Gauge),\n GaugeTemperature: () => import('@ds-mo/icons/svg/GaugeTemperature').then(m => m.GaugeTemperature),\n Gear: () => import('@ds-mo/icons/svg/Gear').then(m => m.Gear),\n GearCheck: () => import('@ds-mo/icons/svg/GearCheck').then(m => m.GearCheck),\n Geofence: () => import('@ds-mo/icons/svg/Geofence').then(m => m.Geofence),\n GeofenceCircle: () => import('@ds-mo/icons/svg/GeofenceCircle').then(m => m.GeofenceCircle),\n GeofenceDiamond: () => import('@ds-mo/icons/svg/GeofenceDiamond').then(m => m.GeofenceDiamond),\n GeofenceSquare: () => import('@ds-mo/icons/svg/GeofenceSquare').then(m => m.GeofenceSquare),\n GlobeNetwork: () => import('@ds-mo/icons/svg/GlobeNetwork').then(m => m.GlobeNetwork),\n GlobeWorldMap: () => import('@ds-mo/icons/svg/GlobeWorldMap').then(m => m.GlobeWorldMap),\n Graph: () => import('@ds-mo/icons/svg/Graph').then(m => m.Graph),\n GraphArrow: () => import('@ds-mo/icons/svg/GraphArrow').then(m => m.GraphArrow),\n GraphBars: () => import('@ds-mo/icons/svg/GraphBars').then(m => m.GraphBars),\n GraphDecreasing: () => import('@ds-mo/icons/svg/GraphDecreasing').then(m => m.GraphDecreasing),\n GraphIncreasing: () => import('@ds-mo/icons/svg/GraphIncreasing').then(m => m.GraphIncreasing),\n GroupBy: () => import('@ds-mo/icons/svg/GroupBy').then(m => m.GroupBy),\n Hamburger: () => import('@ds-mo/icons/svg/Hamburger').then(m => m.Hamburger),\n HandOpen: () => import('@ds-mo/icons/svg/HandOpen').then(m => m.HandOpen),\n Headset: () => import('@ds-mo/icons/svg/Headset').then(m => m.Headset),\n History: () => import('@ds-mo/icons/svg/History').then(m => m.History),\n HourGlass: () => import('@ds-mo/icons/svg/HourGlass').then(m => m.HourGlass),\n Image: () => import('@ds-mo/icons/svg/Image').then(m => m.Image),\n Import: () => import('@ds-mo/icons/svg/Import').then(m => m.Import),\n ImportClock: () => import('@ds-mo/icons/svg/ImportClock').then(m => m.ImportClock),\n Inbox: () => import('@ds-mo/icons/svg/Inbox').then(m => m.Inbox),\n IosFilled: () => import('@ds-mo/icons/svg/IosFilled').then(m => m.IosFilled),\n Jerrycan: () => import('@ds-mo/icons/svg/Jerrycan').then(m => m.Jerrycan),\n KeyA: () => import('@ds-mo/icons/svg/KeyA').then(m => m.KeyA),\n KeyB: () => import('@ds-mo/icons/svg/KeyB').then(m => m.KeyB),\n KeyCmd: () => import('@ds-mo/icons/svg/KeyCmd').then(m => m.KeyCmd),\n KeyShift: () => import('@ds-mo/icons/svg/KeyShift').then(m => m.KeyShift),\n LED: () => import('@ds-mo/icons/svg/LED').then(m => m.LED),\n Layers: () => import('@ds-mo/icons/svg/Layers').then(m => m.Layers),\n Leaf: () => import('@ds-mo/icons/svg/Leaf').then(m => m.Leaf),\n LeftCollapse: () => import('@ds-mo/icons/svg/LeftCollapse').then(m => m.LeftCollapse),\n LeftCollapseB: () => import('@ds-mo/icons/svg/LeftCollapseB').then(m => m.LeftCollapseB),\n LeftExpand: () => import('@ds-mo/icons/svg/LeftExpand').then(m => m.LeftExpand),\n LeftExpandB: () => import('@ds-mo/icons/svg/LeftExpandB').then(m => m.LeftExpandB),\n LeftTurnSignal: () => import('@ds-mo/icons/svg/LeftTurnSignal').then(m => m.LeftTurnSignal),\n LetterB: () => import('@ds-mo/icons/svg/LetterB').then(m => m.LetterB),\n LetterC: () => import('@ds-mo/icons/svg/LetterC').then(m => m.LetterC),\n LetterI: () => import('@ds-mo/icons/svg/LetterI').then(m => m.LetterI),\n License: () => import('@ds-mo/icons/svg/License').then(m => m.License),\n LicensePlate: () => import('@ds-mo/icons/svg/LicensePlate').then(m => m.LicensePlate),\n Lifebuoy: () => import('@ds-mo/icons/svg/Lifebuoy').then(m => m.Lifebuoy),\n Link: () => import('@ds-mo/icons/svg/Link').then(m => m.Link),\n List: () => import('@ds-mo/icons/svg/List').then(m => m.List),\n Loads: () => import('@ds-mo/icons/svg/Loads').then(m => m.Loads),\n LocationPin: () => import('@ds-mo/icons/svg/LocationPin').then(m => m.LocationPin),\n LocationPinArrows: () => import('@ds-mo/icons/svg/LocationPinArrows').then(m => m.LocationPinArrows),\n LocationPinDisabled: () => import('@ds-mo/icons/svg/LocationPinDisabled').then(m => m.LocationPinDisabled),\n LocationPinDollar: () => import('@ds-mo/icons/svg/LocationPinDollar').then(m => m.LocationPinDollar),\n LockClosed: () => import('@ds-mo/icons/svg/LockClosed').then(m => m.LockClosed),\n LockClosedFilled: () => import('@ds-mo/icons/svg/LockClosedFilled').then(m => m.LockClosedFilled),\n LockOpen: () => import('@ds-mo/icons/svg/LockOpen').then(m => m.LockOpen),\n Logout: () => import('@ds-mo/icons/svg/Logout').then(m => m.Logout),\n Logs: () => import('@ds-mo/icons/svg/Logs').then(m => m.Logs),\n LogsMagnifyingGlass: () => import('@ds-mo/icons/svg/LogsMagnifyingGlass').then(m => m.LogsMagnifyingGlass),\n MagnifyingGlass: () => import('@ds-mo/icons/svg/MagnifyingGlass').then(m => m.MagnifyingGlass),\n MagnifyingGlassGraph: () => import('@ds-mo/icons/svg/MagnifyingGlassGraph').then(m => m.MagnifyingGlassGraph),\n MagnifyingGlassZoomIn: () => import('@ds-mo/icons/svg/MagnifyingGlassZoomIn').then(m => m.MagnifyingGlassZoomIn),\n MagnifyingGlassZoomOut: () => import('@ds-mo/icons/svg/MagnifyingGlassZoomOut').then(m => m.MagnifyingGlassZoomOut),\n MapNavigation: () => import('@ds-mo/icons/svg/MapNavigation').then(m => m.MapNavigation),\n MapPage: () => import('@ds-mo/icons/svg/MapPage').then(m => m.MapPage),\n MapPin: () => import('@ds-mo/icons/svg/MapPin').then(m => m.MapPin),\n MarkRead: () => import('@ds-mo/icons/svg/MarkRead').then(m => m.MarkRead),\n Match: () => import('@ds-mo/icons/svg/Match').then(m => m.Match),\n MessageBubble: () => import('@ds-mo/icons/svg/MessageBubble').then(m => m.MessageBubble),\n MessageBubbleStack: () => import('@ds-mo/icons/svg/MessageBubbleStack').then(m => m.MessageBubbleStack),\n Messaging: () => import('@ds-mo/icons/svg/Messaging').then(m => m.Messaging),\n Mic: () => import('@ds-mo/icons/svg/Mic').then(m => m.Mic),\n MicMute: () => import('@ds-mo/icons/svg/MicMute').then(m => m.MicMute),\n Minimize: () => import('@ds-mo/icons/svg/Minimize').then(m => m.Minimize),\n Monitor: () => import('@ds-mo/icons/svg/Monitor').then(m => m.Monitor),\n Notification: () => import('@ds-mo/icons/svg/Notification').then(m => m.Notification),\n NumberTen: () => import('@ds-mo/icons/svg/NumberTen').then(m => m.NumberTen),\n OctagonSubtract: () => import('@ds-mo/icons/svg/OctagonSubtract').then(m => m.OctagonSubtract),\n Odometer: () => import('@ds-mo/icons/svg/Odometer').then(m => m.Odometer),\n OverviewAI: () => import('@ds-mo/icons/svg/OverviewAI').then(m => m.OverviewAI),\n PanelCollapse: () => import('@ds-mo/icons/svg/PanelCollapse').then(m => m.PanelCollapse),\n PanelExpand: () => import('@ds-mo/icons/svg/PanelExpand').then(m => m.PanelExpand),\n Paperclip: () => import('@ds-mo/icons/svg/Paperclip').then(m => m.Paperclip),\n PaperplaneSend: () => import('@ds-mo/icons/svg/PaperplaneSend').then(m => m.PaperplaneSend),\n Paragraph: () => import('@ds-mo/icons/svg/Paragraph').then(m => m.Paragraph),\n ParagraphCheck: () => import('@ds-mo/icons/svg/ParagraphCheck').then(m => m.ParagraphCheck),\n ParagraphPencil: () => import('@ds-mo/icons/svg/ParagraphPencil').then(m => m.ParagraphPencil),\n Pause: () => import('@ds-mo/icons/svg/Pause').then(m => m.Pause),\n PauseFilled: () => import('@ds-mo/icons/svg/PauseFilled').then(m => m.PauseFilled),\n Pencil: () => import('@ds-mo/icons/svg/Pencil').then(m => m.Pencil),\n PencilSquiggle: () => import('@ds-mo/icons/svg/PencilSquiggle').then(m => m.PencilSquiggle),\n Person: () => import('@ds-mo/icons/svg/Person').then(m => m.Person),\n PersonAt: () => import('@ds-mo/icons/svg/PersonAt').then(m => m.PersonAt),\n PersonConnect: () => import('@ds-mo/icons/svg/PersonConnect').then(m => m.PersonConnect),\n PersonFrame: () => import('@ds-mo/icons/svg/PersonFrame').then(m => m.PersonFrame),\n PersonGear: () => import('@ds-mo/icons/svg/PersonGear').then(m => m.PersonGear),\n PersonGroup: () => import('@ds-mo/icons/svg/PersonGroup').then(m => m.PersonGroup),\n PersonGroupArrows: () => import('@ds-mo/icons/svg/PersonGroupArrows').then(m => m.PersonGroupArrows),\n PersonManager: () => import('@ds-mo/icons/svg/PersonManager').then(m => m.PersonManager),\n PersonShield: () => import('@ds-mo/icons/svg/PersonShield').then(m => m.PersonShield),\n PersonStar: () => import('@ds-mo/icons/svg/PersonStar').then(m => m.PersonStar),\n Phone: () => import('@ds-mo/icons/svg/Phone').then(m => m.Phone),\n PhoneDisconnect: () => import('@ds-mo/icons/svg/PhoneDisconnect').then(m => m.PhoneDisconnect),\n PicmanFilled: () => import('@ds-mo/icons/svg/PicmanFilled').then(m => m.PicmanFilled),\n Pin: () => import('@ds-mo/icons/svg/Pin').then(m => m.Pin),\n PipBottomLeft: () => import('@ds-mo/icons/svg/PipBottomLeft').then(m => m.PipBottomLeft),\n PipBottomRight: () => import('@ds-mo/icons/svg/PipBottomRight').then(m => m.PipBottomRight),\n PipTopLeft: () => import('@ds-mo/icons/svg/PipTopLeft').then(m => m.PipTopLeft),\n PipTopRight: () => import('@ds-mo/icons/svg/PipTopRight').then(m => m.PipTopRight),\n Play: () => import('@ds-mo/icons/svg/Play').then(m => m.Play),\n PlayFilled: () => import('@ds-mo/icons/svg/PlayFilled').then(m => m.PlayFilled),\n Plug: () => import('@ds-mo/icons/svg/Plug').then(m => m.Plug),\n Plus: () => import('@ds-mo/icons/svg/Plus').then(m => m.Plus),\n PlusCircle: () => import('@ds-mo/icons/svg/PlusCircle').then(m => m.PlusCircle),\n Preferences: () => import('@ds-mo/icons/svg/Preferences').then(m => m.Preferences),\n Printer: () => import('@ds-mo/icons/svg/Printer').then(m => m.Printer),\n PunchCard: () => import('@ds-mo/icons/svg/PunchCard').then(m => m.PunchCard),\n Puzzle: () => import('@ds-mo/icons/svg/Puzzle').then(m => m.Puzzle),\n PuzzleJoined: () => import('@ds-mo/icons/svg/PuzzleJoined').then(m => m.PuzzleJoined),\n Redo: () => import('@ds-mo/icons/svg/Redo').then(m => m.Redo),\n Refresh: () => import('@ds-mo/icons/svg/Refresh').then(m => m.Refresh),\n Restore: () => import('@ds-mo/icons/svg/Restore').then(m => m.Restore),\n RewardRibbon: () => import('@ds-mo/icons/svg/RewardRibbon').then(m => m.RewardRibbon),\n Rewind: () => import('@ds-mo/icons/svg/Rewind').then(m => m.Rewind),\n RewindSkip: () => import('@ds-mo/icons/svg/RewindSkip').then(m => m.RewindSkip),\n RewindSkipFilled: () => import('@ds-mo/icons/svg/RewindSkipFilled').then(m => m.RewindSkipFilled),\n RightCollapse: () => import('@ds-mo/icons/svg/RightCollapse').then(m => m.RightCollapse),\n RightCollapseB: () => import('@ds-mo/icons/svg/RightCollapseB').then(m => m.RightCollapseB),\n RightExpand: () => import('@ds-mo/icons/svg/RightExpand').then(m => m.RightExpand),\n RightExpandB: () => import('@ds-mo/icons/svg/RightExpandB').then(m => m.RightExpandB),\n RightTurnSignal: () => import('@ds-mo/icons/svg/RightTurnSignal').then(m => m.RightTurnSignal),\n Rotate: () => import('@ds-mo/icons/svg/Rotate').then(m => m.Rotate),\n Satellite: () => import('@ds-mo/icons/svg/Satellite').then(m => m.Satellite),\n Scan: () => import('@ds-mo/icons/svg/Scan').then(m => m.Scan),\n Scissor: () => import('@ds-mo/icons/svg/Scissor').then(m => m.Scissor),\n Scope: () => import('@ds-mo/icons/svg/Scope').then(m => m.Scope),\n Seatbelt: () => import('@ds-mo/icons/svg/Seatbelt').then(m => m.Seatbelt),\n SeatbeltBuckle: () => import('@ds-mo/icons/svg/SeatbeltBuckle').then(m => m.SeatbeltBuckle),\n Shapes: () => import('@ds-mo/icons/svg/Shapes').then(m => m.Shapes),\n ShareCircles: () => import('@ds-mo/icons/svg/ShareCircles').then(m => m.ShareCircles),\n ShareCirclesFilled: () => import('@ds-mo/icons/svg/ShareCirclesFilled').then(m => m.ShareCirclesFilled),\n SharePaperplane: () => import('@ds-mo/icons/svg/SharePaperplane').then(m => m.SharePaperplane),\n Shield: () => import('@ds-mo/icons/svg/Shield').then(m => m.Shield),\n ShieldCheck: () => import('@ds-mo/icons/svg/ShieldCheck').then(m => m.ShieldCheck),\n ShieldCheckmarkFilled: () => import('@ds-mo/icons/svg/ShieldCheckmarkFilled').then(m => m.ShieldCheckmarkFilled),\n ShieldCircle: () => import('@ds-mo/icons/svg/ShieldCircle').then(m => m.ShieldCircle),\n ShieldCircleFilled: () => import('@ds-mo/icons/svg/ShieldCircleFilled').then(m => m.ShieldCircleFilled),\n ShieldCross: () => import('@ds-mo/icons/svg/ShieldCross').then(m => m.ShieldCross),\n ShieldCrossFilled: () => import('@ds-mo/icons/svg/ShieldCrossFilled').then(m => m.ShieldCrossFilled),\n ShieldFilled: () => import('@ds-mo/icons/svg/ShieldFilled').then(m => m.ShieldFilled),\n ShieldLock: () => import('@ds-mo/icons/svg/ShieldLock').then(m => m.ShieldLock),\n ShieldLockFilled: () => import('@ds-mo/icons/svg/ShieldLockFilled').then(m => m.ShieldLockFilled),\n ShoppingBag: () => import('@ds-mo/icons/svg/ShoppingBag').then(m => m.ShoppingBag),\n Snowflake: () => import('@ds-mo/icons/svg/Snowflake').then(m => m.Snowflake),\n SpeakerPhone: () => import('@ds-mo/icons/svg/SpeakerPhone').then(m => m.SpeakerPhone),\n SpeedometerArrow: () => import('@ds-mo/icons/svg/SpeedometerArrow').then(m => m.SpeedometerArrow),\n SpeedometerLeft: () => import('@ds-mo/icons/svg/SpeedometerLeft').then(m => m.SpeedometerLeft),\n SpeedometerRight: () => import('@ds-mo/icons/svg/SpeedometerRight').then(m => m.SpeedometerRight),\n SpikeCirclePercentage: () => import('@ds-mo/icons/svg/SpikeCirclePercentage').then(m => m.SpikeCirclePercentage),\n SpikeCirclePercentageFilled: () => import('@ds-mo/icons/svg/SpikeCirclePercentageFilled').then(m => m.SpikeCirclePercentageFilled),\n Square: () => import('@ds-mo/icons/svg/Square').then(m => m.Square),\n SquareArrowTopRight: () => import('@ds-mo/icons/svg/SquareArrowTopRight').then(m => m.SquareArrowTopRight),\n SquareCheck: () => import('@ds-mo/icons/svg/SquareCheck').then(m => m.SquareCheck),\n SquareCheckFilled: () => import('@ds-mo/icons/svg/SquareCheckFilled').then(m => m.SquareCheckFilled),\n SquareDollar: () => import('@ds-mo/icons/svg/SquareDollar').then(m => m.SquareDollar),\n SquareDollarFilled: () => import('@ds-mo/icons/svg/SquareDollarFilled').then(m => m.SquareDollarFilled),\n SquareDottedMinus: () => import('@ds-mo/icons/svg/SquareDottedMinus').then(m => m.SquareDottedMinus),\n SquareFilled: () => import('@ds-mo/icons/svg/SquareFilled').then(m => m.SquareFilled),\n SquareGrid: () => import('@ds-mo/icons/svg/SquareGrid').then(m => m.SquareGrid),\n SquarePencil: () => import('@ds-mo/icons/svg/SquarePencil').then(m => m.SquarePencil),\n SquarePlus: () => import('@ds-mo/icons/svg/SquarePlus').then(m => m.SquarePlus),\n SquareSubtract: () => import('@ds-mo/icons/svg/SquareSubtract').then(m => m.SquareSubtract),\n SquareSubtractFilled: () => import('@ds-mo/icons/svg/SquareSubtractFilled').then(m => m.SquareSubtractFilled),\n Star: () => import('@ds-mo/icons/svg/Star').then(m => m.Star),\n StarFilled: () => import('@ds-mo/icons/svg/StarFilled').then(m => m.StarFilled),\n Stopwatch: () => import('@ds-mo/icons/svg/Stopwatch').then(m => m.Stopwatch),\n Street: () => import('@ds-mo/icons/svg/Street').then(m => m.Street),\n Subtract: () => import('@ds-mo/icons/svg/Subtract').then(m => m.Subtract),\n SubtractCircle: () => import('@ds-mo/icons/svg/SubtractCircle').then(m => m.SubtractCircle),\n SubtractCircleFilled: () => import('@ds-mo/icons/svg/SubtractCircleFilled').then(m => m.SubtractCircleFilled),\n Table: () => import('@ds-mo/icons/svg/Table').then(m => m.Table),\n Tag: () => import('@ds-mo/icons/svg/Tag').then(m => m.Tag),\n Target: () => import('@ds-mo/icons/svg/Target').then(m => m.Target),\n TargetDollar: () => import('@ds-mo/icons/svg/TargetDollar').then(m => m.TargetDollar),\n Text: () => import('@ds-mo/icons/svg/Text').then(m => m.Text),\n ThemeDark: () => import('@ds-mo/icons/svg/ThemeDark').then(m => m.ThemeDark),\n ThemeLight: () => import('@ds-mo/icons/svg/ThemeLight').then(m => m.ThemeLight),\n ThumbsDown: () => import('@ds-mo/icons/svg/ThumbsDown').then(m => m.ThumbsDown),\n ThumbsDownFilled: () => import('@ds-mo/icons/svg/ThumbsDownFilled').then(m => m.ThumbsDownFilled),\n ThumbsUp: () => import('@ds-mo/icons/svg/ThumbsUp').then(m => m.ThumbsUp),\n ThumbsUpFilled: () => import('@ds-mo/icons/svg/ThumbsUpFilled').then(m => m.ThumbsUpFilled),\n TirePressure: () => import('@ds-mo/icons/svg/TirePressure').then(m => m.TirePressure),\n Toggle: () => import('@ds-mo/icons/svg/Toggle').then(m => m.Toggle),\n TrafficLight: () => import('@ds-mo/icons/svg/TrafficLight').then(m => m.TrafficLight),\n Trash: () => import('@ds-mo/icons/svg/Trash').then(m => m.Trash),\n Trophy: () => import('@ds-mo/icons/svg/Trophy').then(m => m.Trophy),\n TurnSignal: () => import('@ds-mo/icons/svg/TurnSignal').then(m => m.TurnSignal),\n TurnSignalFilled: () => import('@ds-mo/icons/svg/TurnSignalFilled').then(m => m.TurnSignalFilled),\n Undo: () => import('@ds-mo/icons/svg/Undo').then(m => m.Undo),\n Upgrade: () => import('@ds-mo/icons/svg/Upgrade').then(m => m.Upgrade),\n Upload: () => import('@ds-mo/icons/svg/Upload').then(m => m.Upload),\n VehicleTrailer: () => import('@ds-mo/icons/svg/VehicleTrailer').then(m => m.VehicleTrailer),\n VehicleTruck: () => import('@ds-mo/icons/svg/VehicleTruck').then(m => m.VehicleTruck),\n VehicleTruckMagnifyingGlass: () => import('@ds-mo/icons/svg/VehicleTruckMagnifyingGlass').then(m => m.VehicleTruckMagnifyingGlass),\n Video: () => import('@ds-mo/icons/svg/Video').then(m => m.Video),\n ViewMenu: () => import('@ds-mo/icons/svg/ViewMenu').then(m => m.ViewMenu),\n Volume: () => import('@ds-mo/icons/svg/Volume').then(m => m.Volume),\n VolumeFilled: () => import('@ds-mo/icons/svg/VolumeFilled').then(m => m.VolumeFilled),\n VolumeMute: () => import('@ds-mo/icons/svg/VolumeMute').then(m => m.VolumeMute),\n VolumeMuteFilled: () => import('@ds-mo/icons/svg/VolumeMuteFilled').then(m => m.VolumeMuteFilled),\n WandSparkle: () => import('@ds-mo/icons/svg/WandSparkle').then(m => m.WandSparkle),\n Waveform: () => import('@ds-mo/icons/svg/Waveform').then(m => m.Waveform),\n Webhooks: () => import('@ds-mo/icons/svg/Webhooks').then(m => m.Webhooks),\n Whistle: () => import('@ds-mo/icons/svg/Whistle').then(m => m.Whistle),\n WifiHorizontal: () => import('@ds-mo/icons/svg/WifiHorizontal').then(m => m.WifiHorizontal),\n WifiTower: () => import('@ds-mo/icons/svg/WifiTower').then(m => m.WifiTower),\n WifiVertical: () => import('@ds-mo/icons/svg/WifiVertical').then(m => m.WifiVertical),\n WifiVerticalFilled: () => import('@ds-mo/icons/svg/WifiVerticalFilled').then(m => m.WifiVerticalFilled),\n WifiVerticalFilledDisabled: () => import('@ds-mo/icons/svg/WifiVerticalFilledDisabled').then(m => m.WifiVerticalFilledDisabled),\n WorkflowA: () => import('@ds-mo/icons/svg/WorkflowA').then(m => m.WorkflowA),\n WorkflowB: () => import('@ds-mo/icons/svg/WorkflowB').then(m => m.WorkflowB),\n Wrench: () => import('@ds-mo/icons/svg/Wrench').then(m => m.Wrench),\n ZoomBackOut: () => import('@ds-mo/icons/svg/ZoomBackOut').then(m => m.ZoomBackOut),\n};\n",
|
|
239
|
+
"type": "registry:ui"
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
}
|