@ds-mo/ui 15.2.0 → 15.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +3 -3
- package/dist/agent.json +936 -80
- package/dist/angular/ds-card-setting.d.ts +1 -1
- package/dist/angular/ds-card-setting.js +3 -3
- package/dist/angular/ds-checkbox-group.d.ts +12 -0
- package/dist/angular/ds-checkbox-group.js +38 -0
- package/dist/angular/ds-checkbox.d.ts +1 -1
- package/dist/angular/ds-checkbox.js +3 -3
- package/dist/angular/ds-inline-banner-settings.d.ts +12 -0
- package/dist/angular/ds-inline-banner-settings.js +38 -0
- package/dist/angular/ds-input-time.d.ts +1 -1
- package/dist/angular/ds-input-time.js +3 -3
- package/dist/angular/ds-input.d.ts +5 -1
- package/dist/angular/ds-input.js +10 -4
- package/dist/angular/ds-map-entity-marker.d.ts +1 -1
- package/dist/angular/ds-map-entity-marker.js +3 -3
- package/dist/angular/ds-radio-tile.d.ts +15 -0
- package/dist/angular/ds-radio-tile.js +43 -0
- package/dist/angular/ds-radio.d.ts +1 -1
- package/dist/angular/ds-radio.js +3 -3
- package/dist/angular/ds-setting-row-checkbox.d.ts +12 -0
- package/dist/angular/ds-setting-row-checkbox.js +38 -0
- package/dist/angular/ds-setting-row-radio.d.ts +12 -0
- package/dist/angular/ds-setting-row-radio.js +38 -0
- package/dist/angular/ds-setting-row-toggle.d.ts +18 -0
- package/dist/angular/ds-setting-row-toggle.js +42 -0
- package/dist/angular/ds-slider.d.ts +1 -1
- package/dist/angular/ds-slider.js +3 -3
- package/dist/angular/ds-textarea.d.ts +1 -1
- package/dist/angular/ds-textarea.js +3 -3
- package/dist/angular/ds-time-picker.d.ts +1 -1
- package/dist/angular/ds-time-picker.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +6 -0
- package/dist/angular/number-value-accessor.d.ts +9 -0
- package/dist/angular/number-value-accessor.js +39 -0
- package/dist/angular/proxies.d.ts +6 -0
- package/dist/angular/proxies.js +6 -0
- package/dist/angular/radio-value-accessor.d.ts +1 -1
- package/dist/angular/radio-value-accessor.js +2 -2
- package/dist/angular/select-value-accessor.d.ts +1 -1
- package/dist/angular/select-value-accessor.js +2 -2
- package/dist/angular/text-value-accessor.d.ts +1 -1
- package/dist/angular/text-value-accessor.js +2 -2
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-response.js.map +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-inverted.js +1 -1
- package/dist/components/ds-button-inverted.js.map +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-action-center.js +1 -1
- package/dist/components/ds-card-action-center.js.map +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +1 -1
- package/dist/components/ds-card-navigation.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-card-settings-scope.js +1 -1
- package/dist/components/ds-card-settings-scope.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-checkbox-group.d.ts +11 -0
- package/dist/components/ds-checkbox-group.js +2 -0
- package/dist/components/ds-checkbox-group.js.map +1 -0
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-customize.js.map +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-filter.js.map +1 -1
- package/dist/components/ds-data-group.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-preferences.js.map +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-saved-views.js.map +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-search.js.map +1 -1
- package/dist/components/ds-data-sort.js +1 -1
- package/dist/components/ds-data-toolbar.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-inline-banner-settings.d.ts +11 -0
- package/dist/components/ds-inline-banner-settings.js +2 -0
- package/dist/components/ds-inline-banner-settings.js.map +1 -0
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-date.js.map +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input-time.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-map-cluster-marker.js +1 -1
- package/dist/components/ds-map-entity-marker.js +1 -1
- package/dist/components/ds-map-entity-marker.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio-tile.d.ts +11 -0
- package/dist/components/ds-radio-tile.js +2 -0
- package/dist/components/ds-radio-tile.js.map +1 -0
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-setting-row-checkbox.d.ts +11 -0
- package/dist/components/ds-setting-row-checkbox.js +2 -0
- package/dist/components/ds-setting-row-checkbox.js.map +1 -0
- package/dist/components/ds-setting-row-radio.d.ts +11 -0
- package/dist/components/ds-setting-row-radio.js +2 -0
- package/dist/components/ds-setting-row-radio.js.map +1 -0
- package/dist/components/ds-setting-row-toggle.d.ts +11 -0
- package/dist/components/ds-setting-row-toggle.js +2 -0
- package/dist/components/ds-setting-row-toggle.js.map +1 -0
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-time-picker.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/p-7TVdPhGR.js +2 -0
- package/dist/components/{p-YrnU2fM7.js.map → p-7TVdPhGR.js.map} +1 -1
- package/dist/components/{p-7V1AhetH.js → p-B0BQCVkq.js} +2 -2
- package/dist/components/p-B0EpvBDs.js +2 -0
- package/dist/components/{p-lamoJZE4.js.map → p-B0EpvBDs.js.map} +1 -1
- package/dist/components/{p-Cu8o2rOz.js → p-B39iJO8F.js} +2 -2
- package/dist/components/p-B9TM6FqC.js +2 -0
- package/dist/components/{p-BJJh-Bf7.js.map → p-B9TM6FqC.js.map} +1 -1
- package/dist/components/{p-B6qQaYkB.js → p-B9y6azEw.js} +2 -2
- package/dist/components/p-BDdlJZyL.js +2 -0
- package/dist/components/{p-CZ7hxDy_.js.map → p-BDdlJZyL.js.map} +1 -1
- package/dist/components/{p-5SVmAjXY.js → p-BERXvOCf.js} +2 -2
- package/dist/components/{p-xhn1cZgU.js → p-BFHpU-uU.js} +2 -2
- package/dist/components/{p-CuWPWC3t.js → p-BQspV5U7.js} +2 -2
- package/dist/components/p-BWSIw8AQ.js +2 -0
- package/dist/components/p-BWSIw8AQ.js.map +1 -0
- package/dist/components/p-BhjqYTiY.js +2 -0
- package/dist/components/p-BhjqYTiY.js.map +1 -0
- package/dist/components/{p-BOhefRMt.js → p-Bk3poU91.js} +2 -2
- package/dist/components/{p-QWukusRL.js → p-BnuNaXR2.js} +2 -2
- package/dist/components/p-BwdnVqAY.js +2 -0
- package/dist/components/p-BwdnVqAY.js.map +1 -0
- package/dist/components/p-C4huuwed.js +2 -0
- package/dist/components/{p-CRk0TjQv.js.map → p-C4huuwed.js.map} +1 -1
- package/dist/components/{p-BtnTQp4K.js → p-C8V4lkVy.js} +2 -2
- package/dist/components/p-CJ1NnOEW.js +2 -0
- package/dist/components/p-CJ1NnOEW.js.map +1 -0
- package/dist/components/p-CPamUzaj.js +2 -0
- package/dist/components/{p-CNZ6-kWd.js.map → p-CPamUzaj.js.map} +1 -1
- package/dist/components/{p-Dqfc6Nvd.js → p-CUDocY23.js} +2 -2
- package/dist/components/{p-Dqfc6Nvd.js.map → p-CUDocY23.js.map} +1 -1
- package/dist/components/p-CX6ZxUQT.js +2 -0
- package/dist/components/p-CX6ZxUQT.js.map +1 -0
- package/dist/components/p-CZNZTcYS.js +2 -0
- package/dist/components/p-CZNZTcYS.js.map +1 -0
- package/dist/components/p-CbCN9ew9.js +2 -0
- package/dist/components/p-CbCN9ew9.js.map +1 -0
- package/dist/components/p-CeXf9-X3.js.map +1 -1
- package/dist/components/p-Cgn-BORA.js +2 -0
- package/dist/components/p-Cgn-BORA.js.map +1 -0
- package/dist/components/{p-mux14tWZ.js → p-Co1rUdOR.js} +2 -2
- package/dist/components/p-Co1rUdOR.js.map +1 -0
- package/dist/components/{p-CGidq1iC.js → p-CuwopElg.js} +2 -2
- package/dist/components/p-CwUXroLs.js +2 -0
- package/dist/components/{p-etg-Uk1u.js.map → p-CwUXroLs.js.map} +1 -1
- package/dist/components/{p-Cn6AfzeF.js → p-CwdRaJER.js} +2 -2
- package/dist/components/p-D6FRqNhN.js +2 -0
- package/dist/components/p-D6FRqNhN.js.map +1 -0
- package/dist/components/{p-ZwRLjD5M.js → p-D8OWhnID.js} +2 -2
- package/dist/components/p-DCyJ3_PL.js +2 -0
- package/dist/components/{p-BZ_e69zx.js.map → p-DCyJ3_PL.js.map} +1 -1
- package/dist/components/{p-C_Ma6Xa-.js → p-DIQiHX0q.js} +2 -2
- package/dist/components/{p-B3CZvMXs.js → p-DJDbskZf.js} +2 -2
- package/dist/components/p-DRdoGSGX.js +2 -0
- package/dist/components/{p-CTGgXIXM.js.map → p-DRdoGSGX.js.map} +1 -1
- package/dist/components/{p-C1gaWjOm.js → p-DSZPO06T.js} +2 -2
- package/dist/components/{p-uADksYMl.js → p-DSmDyI2o.js} +2 -2
- package/dist/components/{p-UY63jmrO.js → p-DVEx-Xg9.js} +2 -2
- package/dist/components/p-DXk1eml1.js +2 -0
- package/dist/components/{p-Dlp1HqgS.js.map → p-DXk1eml1.js.map} +1 -1
- package/dist/components/{p-p0FVyEFa.js → p-DYQa1DVF.js} +2 -2
- package/dist/components/p-DYQa1DVF.js.map +1 -0
- package/dist/components/p-DYsE6HLk.js +2 -0
- package/dist/components/p-DYsE6HLk.js.map +1 -0
- package/dist/components/{p-vfCu7XSc.js → p-DZ58Sg5a.js} +2 -2
- package/dist/components/p-DebLYW7A.js +2 -0
- package/dist/components/p-DebLYW7A.js.map +1 -0
- package/dist/components/p-DhKvqh5G.js +2 -0
- package/dist/components/p-DhKvqh5G.js.map +1 -0
- package/dist/components/{p-DFO5lV_A.js → p-DmSnHVW6.js} +2 -2
- package/dist/components/p-Dnt5xUBD.js +2 -0
- package/dist/components/{p-BR5OC2PX.js.map → p-Dnt5xUBD.js.map} +1 -1
- package/dist/components/p-Doa2blZT.js +2 -0
- package/dist/components/{p-BLuqpHvp.js.map → p-Doa2blZT.js.map} +1 -1
- package/dist/components/{p-DsLXlxt3.js → p-Dyqd-cub.js} +2 -2
- package/dist/components/p-Dyqd-cub.js.map +1 -0
- package/dist/components/p-DzvTC27M.js +2 -0
- package/dist/components/p-DzvTC27M.js.map +1 -0
- package/dist/components/p-JBki_jyY.js +2 -0
- package/dist/components/{p-C0JkLR83.js.map → p-JBki_jyY.js.map} +1 -1
- package/dist/components/p-MOJmB6vX.js +2 -0
- package/dist/components/{p-BzYW1IqO.js.map → p-MOJmB6vX.js.map} +1 -1
- package/dist/components/p-TVkFIMXz.js +2 -0
- package/dist/components/p-TVkFIMXz.js.map +1 -0
- package/dist/components/{p-ER5M085B.js → p-UJMEz8_O.js} +2 -2
- package/dist/components/{p-CR-Jjdcn.js → p-_IqSPt5V.js} +2 -2
- package/dist/components/p-g0jsfEXz.js +2 -0
- package/dist/components/{p-BfF4RZdp.js.map → p-g0jsfEXz.js.map} +1 -1
- package/dist/components/{p-BLSSaVWm.js → p-pp1IQN4Z.js} +2 -2
- package/dist/docs/components.json +2901 -835
- package/dist/framework/angular.d.ts +1 -0
- package/dist/framework/angular.js +1 -0
- package/dist/lib/shell/index.js +1 -1
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lint/index.js +1 -1
- package/dist/mcp-data/registry/agent-activity.json +2 -2
- package/dist/mcp-data/registry/agent-questionnaire.json +2 -2
- package/dist/mcp-data/registry/agent-response.json +3 -3
- package/dist/mcp-data/registry/agent-source-list.json +2 -2
- package/dist/mcp-data/registry/agent-tool-call.json +2 -2
- package/dist/mcp-data/registry/attachment-list.json +2 -2
- package/dist/mcp-data/registry/avatar.json +2 -2
- package/dist/mcp-data/registry/badge.json +2 -2
- package/dist/mcp-data/registry/banner.json +2 -2
- package/dist/mcp-data/registry/bar-action.json +2 -2
- package/dist/mcp-data/registry/bar-nav.json +5 -5
- package/dist/mcp-data/registry/bar-page-title.json +4 -4
- package/dist/mcp-data/registry/bar-title.json +4 -4
- package/dist/mcp-data/registry/bar-workflow.json +2 -2
- package/dist/mcp-data/registry/breadcrumb.json +2 -2
- package/dist/mcp-data/registry/button-filled.json +2 -2
- package/dist/mcp-data/registry/button-inverted.json +2 -2
- package/dist/mcp-data/registry/button-unfilled.json +9 -9
- package/dist/mcp-data/registry/calendar.json +2 -2
- package/dist/mcp-data/registry/card-action-center.json +2 -2
- package/dist/mcp-data/registry/card-chart.json +2 -2
- package/dist/mcp-data/registry/card-navigation.json +2 -2
- package/dist/mcp-data/registry/card-overview.json +2 -2
- package/dist/mcp-data/registry/card-setting.json +50 -15
- package/dist/mcp-data/registry/card-settings-scope.json +2 -2
- package/dist/mcp-data/registry/chart-legend.json +2 -2
- package/dist/mcp-data/registry/chart.json +2 -2
- package/dist/mcp-data/registry/checkbox-group.json +246 -0
- package/dist/mcp-data/registry/checkbox.json +26 -6
- package/dist/mcp-data/registry/chip.json +2 -2
- package/dist/mcp-data/registry/code-block.json +2 -2
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/conversation-list-section.json +2 -2
- package/dist/mcp-data/registry/conversation-list.json +2 -2
- package/dist/mcp-data/registry/data-customize.json +3 -3
- package/dist/mcp-data/registry/data-filter.json +2 -2
- package/dist/mcp-data/registry/data-group.json +2 -2
- package/dist/mcp-data/registry/data-preferences.json +2 -2
- package/dist/mcp-data/registry/data-saved-views.json +2 -2
- package/dist/mcp-data/registry/data-search.json +2 -2
- package/dist/mcp-data/registry/data-sort.json +2 -2
- package/dist/mcp-data/registry/data-toolbar.json +2 -2
- package/dist/mcp-data/registry/divider.json +2 -2
- package/dist/mcp-data/registry/empty-state.json +27 -14
- package/dist/mcp-data/registry/field.json +6 -5
- package/dist/mcp-data/registry/filter-menu.json +2 -2
- package/dist/mcp-data/registry/icon.json +2 -2
- package/dist/mcp-data/registry/inline-banner-settings.json +175 -0
- package/dist/mcp-data/registry/input-date.json +2 -2
- package/dist/mcp-data/registry/input-time.json +26 -7
- package/dist/mcp-data/registry/input.json +265 -15
- package/dist/mcp-data/registry/loader.json +2 -2
- package/dist/mcp-data/registry/map-cluster-marker.json +3 -3
- package/dist/mcp-data/registry/map-entity-marker.json +56 -56
- package/dist/mcp-data/registry/markdown.json +2 -2
- package/dist/mcp-data/registry/menu.json +2 -2
- package/dist/mcp-data/registry/message-actions.json +2 -2
- package/dist/mcp-data/registry/message-bubble.json +5 -5
- package/dist/mcp-data/registry/message-composer.json +7 -7
- package/dist/mcp-data/registry/message-scroller.json +2 -2
- package/dist/mcp-data/registry/message.json +3 -3
- package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
- package/dist/mcp-data/registry/mobile-header.json +2 -2
- package/dist/mcp-data/registry/mobile-section-switcher.json +2 -2
- package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
- package/dist/mcp-data/registry/modal.json +2 -2
- package/dist/mcp-data/registry/pagination.json +2 -2
- package/dist/mcp-data/registry/panel-nav.json +4 -4
- package/dist/mcp-data/registry/panel-sub-nav.json +2 -2
- package/dist/mcp-data/registry/panel-tool-header.json +4 -4
- package/dist/mcp-data/registry/panel-tool-search.json +3 -3
- package/dist/mcp-data/registry/panel-tools.json +4 -4
- package/dist/mcp-data/registry/paper-texture.json +2 -2
- package/dist/mcp-data/registry/radio-tile.json +399 -0
- package/dist/mcp-data/registry/radio.json +51 -9
- package/dist/mcp-data/registry/registry.json +954 -80
- package/dist/mcp-data/registry/score.json +2 -2
- package/dist/mcp-data/registry/scroll-overlay.json +2 -2
- package/dist/mcp-data/registry/select.json +2 -2
- package/dist/mcp-data/registry/setting-row-checkbox.json +197 -0
- package/dist/mcp-data/registry/setting-row-radio.json +196 -0
- package/dist/mcp-data/registry/setting-row-toggle.json +233 -0
- package/dist/mcp-data/registry/shell-app.json +4 -4
- package/dist/mcp-data/registry/shell-page.json +2 -2
- package/dist/mcp-data/registry/shell-tools.json +2 -2
- package/dist/mcp-data/registry/skeleton.json +2 -2
- package/dist/mcp-data/registry/slider.json +32 -12
- package/dist/mcp-data/registry/swatch-picker.json +2 -2
- package/dist/mcp-data/registry/switch.json +4 -4
- package/dist/mcp-data/registry/tab-group.json +2 -2
- package/dist/mcp-data/registry/table.json +5 -5
- package/dist/mcp-data/registry/tag.json +2 -2
- package/dist/mcp-data/registry/text.json +2 -2
- package/dist/mcp-data/registry/textarea.json +72 -5
- package/dist/mcp-data/registry/time-picker.json +28 -9
- package/dist/mcp-data/registry/toast.json +2 -2
- package/dist/mcp-data/registry/tooltip-chart.json +2 -2
- package/dist/mcp-data/registry/tooltip.json +2 -2
- package/dist/mcp-data/registry/typing-indicator.json +2 -2
- package/dist/react/components.d.ts +6 -0
- package/dist/react/components.js +6 -0
- package/dist/react/ds-checkbox-group.d.ts +9 -0
- package/dist/react/ds-checkbox-group.js +12 -0
- package/dist/react/ds-inline-banner-settings.d.ts +9 -0
- package/dist/react/ds-inline-banner-settings.js +12 -0
- package/dist/react/ds-input.d.ts +2 -0
- package/dist/react/ds-input.js +2 -0
- package/dist/react/ds-radio-tile.d.ts +12 -0
- package/dist/react/ds-radio-tile.js +12 -0
- package/dist/react/ds-setting-row-checkbox.d.ts +9 -0
- package/dist/react/ds-setting-row-checkbox.js +12 -0
- package/dist/react/ds-setting-row-radio.d.ts +9 -0
- package/dist/react/ds-setting-row-radio.js +12 -0
- package/dist/react/ds-setting-row-toggle.d.ts +12 -0
- package/dist/react/ds-setting-row-toggle.js +12 -0
- package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +2 -0
- package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +4 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +5 -2
- package/dist/types/components/CardSetting/CardSetting.d.ts +15 -3
- package/dist/types/components/CardSetting/index.d.ts +1 -1
- package/dist/types/components/Checkbox/Checkbox.d.ts +2 -0
- package/dist/types/components/CheckboxGroup/CheckboxGroup.d.ts +20 -0
- package/dist/types/components/EmptyState/EmptyState.d.ts +3 -0
- package/dist/types/components/Field/Field.d.ts +4 -0
- package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +6 -0
- package/dist/types/components/Input/Input.d.ts +50 -1
- package/dist/types/components/InputTime/InputTime.d.ts +3 -0
- package/dist/types/components/MapEntityMarker/MapEntityMarker.d.ts +5 -5
- package/dist/types/components/Radio/Radio.d.ts +8 -0
- package/dist/types/components/RadioTile/RadioTile.d.ts +40 -0
- package/dist/types/components/RadioTile/index.d.ts +2 -0
- package/dist/types/components/SettingRowCheckbox/SettingRowCheckbox.d.ts +19 -0
- package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +19 -0
- package/dist/types/components/SettingRowToggle/SettingRowToggle.d.ts +21 -0
- package/dist/types/components/Slider/Slider.d.ts +8 -1
- package/dist/types/components/Slider/index.d.ts +1 -1
- package/dist/types/components/Switch/Switch.d.ts +7 -0
- package/dist/types/components/Textarea/Textarea.d.ts +12 -0
- package/dist/types/components/TimePicker/TimePicker.d.ts +4 -0
- package/dist/types/components.d.ts +728 -37
- package/dist/types/utils/text-constraints.d.ts +20 -0
- package/dist/vue/components.d.ts +6 -0
- package/dist/vue/components.js +6 -0
- package/dist/vue/ds-card-setting.js +1 -0
- package/dist/vue/ds-checkbox-group.d.ts +3 -0
- package/dist/vue/ds-checkbox-group.js +12 -0
- package/dist/vue/ds-checkbox.js +1 -0
- package/dist/vue/ds-inline-banner-settings.d.ts +3 -0
- package/dist/vue/ds-inline-banner-settings.js +8 -0
- package/dist/vue/ds-input-time.js +1 -0
- package/dist/vue/ds-input.js +17 -0
- package/dist/vue/ds-map-entity-marker.js +2 -2
- package/dist/vue/ds-radio-tile.d.ts +3 -0
- package/dist/vue/ds-radio-tile.js +24 -0
- package/dist/vue/ds-radio.js +2 -0
- package/dist/vue/ds-setting-row-checkbox.d.ts +3 -0
- package/dist/vue/ds-setting-row-checkbox.js +11 -0
- package/dist/vue/ds-setting-row-radio.d.ts +3 -0
- package/dist/vue/ds-setting-row-radio.js +11 -0
- package/dist/vue/ds-setting-row-toggle.d.ts +3 -0
- package/dist/vue/ds-setting-row-toggle.js +15 -0
- package/dist/vue/ds-slider.d.ts +1 -1
- package/dist/vue/ds-slider.js +2 -1
- package/dist/vue/ds-textarea.js +4 -0
- package/dist/vue/ds-time-picker.js +1 -0
- package/package.json +5 -5
- package/dist/components/p-BCnzbfma.js +0 -2
- package/dist/components/p-BCnzbfma.js.map +0 -1
- package/dist/components/p-BJJh-Bf7.js +0 -2
- package/dist/components/p-BLuqpHvp.js +0 -2
- package/dist/components/p-BR5OC2PX.js +0 -2
- package/dist/components/p-BX506yEW.js +0 -2
- package/dist/components/p-BX506yEW.js.map +0 -1
- package/dist/components/p-BZ_e69zx.js +0 -2
- package/dist/components/p-BfF4RZdp.js +0 -2
- package/dist/components/p-Br5e83Fr.js +0 -2
- package/dist/components/p-Br5e83Fr.js.map +0 -1
- package/dist/components/p-Bv9rSkp0.js +0 -2
- package/dist/components/p-Bv9rSkp0.js.map +0 -1
- package/dist/components/p-BzYW1IqO.js +0 -2
- package/dist/components/p-C0JkLR83.js +0 -2
- package/dist/components/p-C6Aavz9h.js +0 -2
- package/dist/components/p-C6Aavz9h.js.map +0 -1
- package/dist/components/p-C6zycbhC.js +0 -2
- package/dist/components/p-C6zycbhC.js.map +0 -1
- package/dist/components/p-CNZ6-kWd.js +0 -2
- package/dist/components/p-CRk0TjQv.js +0 -2
- package/dist/components/p-CTGgXIXM.js +0 -2
- package/dist/components/p-CZ7hxDy_.js +0 -2
- package/dist/components/p-Cc3ZUQlJ.js +0 -2
- package/dist/components/p-Cc3ZUQlJ.js.map +0 -1
- package/dist/components/p-D5HxZrMA.js +0 -2
- package/dist/components/p-D5HxZrMA.js.map +0 -1
- package/dist/components/p-D7K1ZHML.js +0 -2
- package/dist/components/p-D7K1ZHML.js.map +0 -1
- package/dist/components/p-Dlp1HqgS.js +0 -2
- package/dist/components/p-DsLXlxt3.js.map +0 -1
- package/dist/components/p-YrnU2fM7.js +0 -2
- package/dist/components/p-ZYWnJaye.js +0 -2
- package/dist/components/p-ZYWnJaye.js.map +0 -1
- package/dist/components/p-etg-Uk1u.js +0 -2
- package/dist/components/p-lamoJZE4.js +0 -2
- package/dist/components/p-mV4vSjSK.js +0 -2
- package/dist/components/p-mV4vSjSK.js.map +0 -1
- package/dist/components/p-mux14tWZ.js.map +0 -1
- package/dist/components/p-mxZoWfnS.js +0 -2
- package/dist/components/p-mxZoWfnS.js.map +0 -1
- package/dist/components/p-p0FVyEFa.js.map +0 -1
- package/dist/components/p-xtGGIZmU.js +0 -2
- package/dist/components/p-xtGGIZmU.js.map +0 -1
- /package/dist/components/{p-7V1AhetH.js.map → p-B0BQCVkq.js.map} +0 -0
- /package/dist/components/{p-Cu8o2rOz.js.map → p-B39iJO8F.js.map} +0 -0
- /package/dist/components/{p-B6qQaYkB.js.map → p-B9y6azEw.js.map} +0 -0
- /package/dist/components/{p-5SVmAjXY.js.map → p-BERXvOCf.js.map} +0 -0
- /package/dist/components/{p-xhn1cZgU.js.map → p-BFHpU-uU.js.map} +0 -0
- /package/dist/components/{p-CuWPWC3t.js.map → p-BQspV5U7.js.map} +0 -0
- /package/dist/components/{p-BOhefRMt.js.map → p-Bk3poU91.js.map} +0 -0
- /package/dist/components/{p-QWukusRL.js.map → p-BnuNaXR2.js.map} +0 -0
- /package/dist/components/{p-BtnTQp4K.js.map → p-C8V4lkVy.js.map} +0 -0
- /package/dist/components/{p-CGidq1iC.js.map → p-CuwopElg.js.map} +0 -0
- /package/dist/components/{p-Cn6AfzeF.js.map → p-CwdRaJER.js.map} +0 -0
- /package/dist/components/{p-ZwRLjD5M.js.map → p-D8OWhnID.js.map} +0 -0
- /package/dist/components/{p-C_Ma6Xa-.js.map → p-DIQiHX0q.js.map} +0 -0
- /package/dist/components/{p-B3CZvMXs.js.map → p-DJDbskZf.js.map} +0 -0
- /package/dist/components/{p-C1gaWjOm.js.map → p-DSZPO06T.js.map} +0 -0
- /package/dist/components/{p-uADksYMl.js.map → p-DSmDyI2o.js.map} +0 -0
- /package/dist/components/{p-UY63jmrO.js.map → p-DVEx-Xg9.js.map} +0 -0
- /package/dist/components/{p-vfCu7XSc.js.map → p-DZ58Sg5a.js.map} +0 -0
- /package/dist/components/{p-DFO5lV_A.js.map → p-DmSnHVW6.js.map} +0 -0
- /package/dist/components/{p-ER5M085B.js.map → p-UJMEz8_O.js.map} +0 -0
- /package/dist/components/{p-CR-Jjdcn.js.map → p-_IqSPt5V.js.map} +0 -0
- /package/dist/components/{p-BLSSaVWm.js.map → p-pp1IQN4Z.js.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "card-setting",
|
|
4
4
|
"title": "CardSetting",
|
|
5
|
-
"description": "Persistent settings-section surface with a heading, controlled
|
|
5
|
+
"description": "Persistent settings-section surface with a heading, optional controlled edit chrome, and application-owned body content.",
|
|
6
6
|
"type": "registry:ui",
|
|
7
7
|
"meta": {
|
|
8
8
|
"library": "@ds-mo/ui",
|
|
@@ -13,17 +13,17 @@
|
|
|
13
13
|
"intent": {
|
|
14
14
|
"audience": "general",
|
|
15
15
|
"status": "stable",
|
|
16
|
-
"summary": "Persistent settings-section surface with a heading, controlled
|
|
16
|
+
"summary": "Persistent settings-section surface with a heading, optional controlled edit chrome, and application-owned body content.",
|
|
17
17
|
"useWhen": [
|
|
18
18
|
"A settings page needs a persistent section that switches between read-only and editable content.",
|
|
19
19
|
"The parent can control one active editing section and owns validation, persistence, cancellation, and body content.",
|
|
20
|
-
"The section uses the standard Pencil, Save, and Cancel header workflow."
|
|
20
|
+
"The section uses the standard Pencil, Save, and Cancel header workflow.",
|
|
21
|
+
"Settings apply immediately through their own controls and share the standard section surface without edit, save, or cancel actions."
|
|
21
22
|
],
|
|
22
23
|
"avoidWhen": [
|
|
23
24
|
"The surface contains a chart, legend, metric visualization, or other data-visualization composition.",
|
|
24
25
|
"The content is a general-purpose read-only card with no settings edit workflow.",
|
|
25
26
|
"The task must block the rest of the interface or requires confirmation in a modal.",
|
|
26
|
-
"Several sections must remain editable at the same time.",
|
|
27
27
|
"The header requires custom actions beyond the fixed edit-save-cancel workflow."
|
|
28
28
|
],
|
|
29
29
|
"alternatives": [
|
|
@@ -48,7 +48,11 @@
|
|
|
48
48
|
"component:ds-input",
|
|
49
49
|
"component:ds-select",
|
|
50
50
|
"component:ds-switch",
|
|
51
|
-
"component:ds-text"
|
|
51
|
+
"component:ds-text",
|
|
52
|
+
"component:ds-setting-row-toggle",
|
|
53
|
+
"component:ds-setting-row-radio",
|
|
54
|
+
"component:ds-setting-row-checkbox",
|
|
55
|
+
"component:ds-inline-banner-settings"
|
|
52
56
|
],
|
|
53
57
|
"accessibility": [
|
|
54
58
|
"Provide a concise heading that identifies the settings section; CardSetting renders it as an h2.",
|
|
@@ -63,25 +67,30 @@
|
|
|
63
67
|
"The editing property is controlled; CardSetting never changes it internally.",
|
|
64
68
|
"dsAction emits edit, save, or cancel with the original pointer event. The parent decides whether and when editing changes.",
|
|
65
69
|
"When another section requests edit, the parent keeps one active section and resolves any dirty current section before switching.",
|
|
70
|
+
"Project persistent informational copy into the banner slot so it sits above the padded content body and does not receive content-area padding.",
|
|
66
71
|
"The parent owns read-only versus editable body composition, dirty state, validation, persistence, loading, success, and error consequences.",
|
|
67
72
|
"A save request keeps the section editing while validation or persistence is pending; the parent exits only after success.",
|
|
68
|
-
"A cancel request does not persist changes; the parent restores its chosen value snapshot and exits editing."
|
|
73
|
+
"A cancel request does not persist changes; the parent restores its chosen value snapshot and exits editing.",
|
|
74
|
+
"The immediate variant keeps the resting card surface and omits header actions even if editing is supplied. The application applies and persists each control change independently."
|
|
69
75
|
],
|
|
70
76
|
"responsiveBehavior": [
|
|
71
|
-
"Choose sm, md, or lg from the parent layout
|
|
77
|
+
"Choose sm, md, or lg from the parent layout. Empty editable cards use the matching minimum height. Cards with body content, and immediate cards, fit that content.",
|
|
72
78
|
"The surface never exceeds its parent width, while the parent owns wrapping, columns, stacking, and breakpoint changes.",
|
|
73
79
|
"At narrow widths, keep the fixed header actions visible and let application-owned body layouts collapse before allowing horizontal overflow."
|
|
74
80
|
],
|
|
75
81
|
"frameworkCaveats": {
|
|
76
82
|
"customElements": [
|
|
83
|
+
"Project ds-inline-banner-settings with slot=\"banner\". Leave setting rows and other controls in the default slot.",
|
|
77
84
|
"Set editing as a JavaScript property and inspect dsAction.detail.action before updating the controlled state.",
|
|
78
85
|
"When one section emits edit, update every sibling CardSetting so only the requested section remains editing."
|
|
79
86
|
],
|
|
80
87
|
"react": [
|
|
88
|
+
"Pass slot=\"banner\" on ds-inline-banner-settings. Leave setting rows and other controls in the default slot.",
|
|
81
89
|
"Pass editing from parent state and inspect onDsAction event detail; do not treat Save as successful until validation and persistence complete.",
|
|
82
90
|
"Store one active section id and derive each CardSetting editing prop from that id."
|
|
83
91
|
],
|
|
84
92
|
"angular": [
|
|
93
|
+
"Set slot=\"banner\" on ds-inline-banner-settings. Leave setting rows and other controls in the default slot.",
|
|
85
94
|
"Bind [editing] and inspect $event.detail.action from (dsAction); do not treat Save as successful until validation and persistence complete.",
|
|
86
95
|
"Store one active section id and derive each CardSetting editing binding from that id."
|
|
87
96
|
]
|
|
@@ -116,14 +125,22 @@
|
|
|
116
125
|
"reason": "The component owns its surface radius; retain the shared recipe and customize an outer wrapper when needed.",
|
|
117
126
|
"props": []
|
|
118
127
|
},
|
|
128
|
+
{
|
|
129
|
+
"properties": [
|
|
130
|
+
"padding"
|
|
131
|
+
],
|
|
132
|
+
"reason": "Content-area padding-block belongs on the body. The banner slot sits above that padding and does not receive it.",
|
|
133
|
+
"props": []
|
|
134
|
+
},
|
|
119
135
|
{
|
|
120
136
|
"properties": [
|
|
121
137
|
"width",
|
|
122
138
|
"min-height"
|
|
123
139
|
],
|
|
124
|
-
"reason": "Card width selects the component geometry;
|
|
140
|
+
"reason": "Card width selects the component geometry. Empty editable cards keep the matching minimum height; cards with body content and immediate cards fit that content. Let the parent constrain available space.",
|
|
125
141
|
"props": [
|
|
126
|
-
"cardWidth"
|
|
142
|
+
"cardWidth",
|
|
143
|
+
"variant"
|
|
127
144
|
]
|
|
128
145
|
}
|
|
129
146
|
],
|
|
@@ -147,7 +164,7 @@
|
|
|
147
164
|
"default": "'md'",
|
|
148
165
|
"required": false,
|
|
149
166
|
"mutable": false,
|
|
150
|
-
"description": "Card width token (`sm` / `md` / `lg`).
|
|
167
|
+
"description": "Card width token (`sm` / `md` / `lg`). Empty editable cards use the matching\nminimum-height token. Cards with body content, and immediate cards, fit\nthat content."
|
|
151
168
|
},
|
|
152
169
|
"editLabel": {
|
|
153
170
|
"type": "string",
|
|
@@ -181,6 +198,15 @@
|
|
|
181
198
|
"default": "'Save'",
|
|
182
199
|
"required": false,
|
|
183
200
|
"mutable": false
|
|
201
|
+
},
|
|
202
|
+
"variant": {
|
|
203
|
+
"type": "CardSettingVariant",
|
|
204
|
+
"resolvedType": "\"editable\" | \"immediate\"",
|
|
205
|
+
"attribute": "variant",
|
|
206
|
+
"default": "'editable'",
|
|
207
|
+
"required": false,
|
|
208
|
+
"mutable": false,
|
|
209
|
+
"description": "Immediate settings omit edit actions and apply changes through their own controls."
|
|
184
210
|
}
|
|
185
211
|
},
|
|
186
212
|
"events": [
|
|
@@ -212,7 +238,7 @@
|
|
|
212
238
|
"default": "'md'",
|
|
213
239
|
"required": false,
|
|
214
240
|
"mutable": false,
|
|
215
|
-
"description": "Card width token (`sm` / `md` / `lg`).
|
|
241
|
+
"description": "Card width token (`sm` / `md` / `lg`). Empty editable cards use the matching\nminimum-height token. Cards with body content, and immediate cards, fit\nthat content."
|
|
216
242
|
},
|
|
217
243
|
"editLabel": {
|
|
218
244
|
"type": "string",
|
|
@@ -246,6 +272,15 @@
|
|
|
246
272
|
"default": "'Save'",
|
|
247
273
|
"required": false,
|
|
248
274
|
"mutable": false
|
|
275
|
+
},
|
|
276
|
+
"variant": {
|
|
277
|
+
"type": "CardSettingVariant",
|
|
278
|
+
"resolvedType": "\"editable\" | \"immediate\"",
|
|
279
|
+
"attribute": "variant",
|
|
280
|
+
"default": "'editable'",
|
|
281
|
+
"required": false,
|
|
282
|
+
"mutable": false,
|
|
283
|
+
"description": "Immediate settings omit edit actions and apply changes through their own controls."
|
|
249
284
|
}
|
|
250
285
|
},
|
|
251
286
|
"events": [
|
|
@@ -287,8 +322,8 @@
|
|
|
287
322
|
},
|
|
288
323
|
"peerDependencies": {
|
|
289
324
|
"required": [
|
|
290
|
-
"@ds-mo/tokens ^6.
|
|
291
|
-
"@ds-mo/icons ^8.1.
|
|
325
|
+
"@ds-mo/tokens ^6.6.1",
|
|
326
|
+
"@ds-mo/icons ^8.1.1"
|
|
292
327
|
],
|
|
293
328
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
294
329
|
}
|
|
@@ -306,12 +341,12 @@
|
|
|
306
341
|
"files": [
|
|
307
342
|
{
|
|
308
343
|
"path": "src/wc/components/CardSetting/CardSetting.css",
|
|
309
|
-
"content": "@import '../../utils/radius.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n position: relative;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: var(--_card-setting-width);\n min-height: var(--_card-setting-min-height);\n max-width: 100%;\n overflow: hidden;\n border: none;\n border-radius: var(--ds-radius-card);\n background-color: var(--color-background-primary);\n box-shadow: var(--effect-shadow-elevated-sm);\n}\n\n:host::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 4;\n border-radius: inherit;\n box-shadow: var(--effect-highlight-elevated-sm);\n pointer-events: none;\n}\n\n:host(.card-setting--editing) {\n background-color: var(--color-background-bold-brand);\n box-shadow: 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand);\n}\n\n:host(.card-setting--editing)::after {\n box-shadow: none;\n}\n\n.card-setting__header {\n flex: 0 0 auto;\n border-bottom: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n:host(.card-setting--editing) .card-setting__header {\n border-bottom-color: transparent;\n}\n\n.card-setting__copy {\n align-items: center;\n}\n\nds-text.card-setting__title {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.card-setting__actions {\n flex-shrink: 0;\n}\n\n.card-
|
|
344
|
+
"content": "@import '../../utils/radius.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n position: relative;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: var(--_card-setting-width);\n min-height: var(--_card-setting-min-height);\n max-width: 100%;\n overflow: hidden;\n border: none;\n border-radius: var(--ds-radius-card);\n background-color: var(--color-background-primary);\n box-shadow: var(--effect-shadow-elevated-sm);\n}\n\n:host::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 4;\n border-radius: inherit;\n box-shadow: var(--effect-highlight-elevated-sm);\n pointer-events: none;\n}\n\n:host(.card-setting--editing) {\n background-color: var(--color-background-bold-brand);\n box-shadow: 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand);\n}\n\n:host(.card-setting--editing)::after {\n box-shadow: none;\n}\n\n.card-setting__header {\n flex: 0 0 auto;\n border-bottom: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n:host(.card-setting--editing) .card-setting__header {\n border-bottom-color: transparent;\n}\n\n.card-setting__copy {\n align-items: center;\n}\n\nds-text.card-setting__title {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.card-setting__actions {\n flex-shrink: 0;\n}\n\n.card-setting__panel {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-height: 0;\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: 0 0 var(--ds-radius-card) var(--ds-radius-card);\n}\n\n:host(.card-setting--editing) .card-setting__panel {\n border-radius: var(--ds-radius-card);\n}\n\n.card-setting__banner {\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.card-setting__banner--empty {\n display: none;\n}\n\n.card-setting__body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-height: 0;\n box-sizing: border-box;\n padding-block: var(--dimension-space-100);\n}\n\n@media (forced-colors: active) {\n :host {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n\n :host::after {\n box-shadow: none;\n }\n}\n",
|
|
310
345
|
"type": "registry:ui"
|
|
311
346
|
},
|
|
312
347
|
{
|
|
313
348
|
"path": "src/wc/components/CardSetting/CardSetting.tsx",
|
|
314
|
-
"content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nexport type CardSettingWidth = 'sm' | 'md' | 'lg';\nexport type CardSettingAction = 'edit' | 'save' | 'cancel';\n\nexport interface CardSettingActionDetail {\n action: CardSettingAction;\n originalEvent: MouseEvent;\n}\n\nconst CARD_WIDTH_VARS: Record<CardSettingWidth, string> = {\n sm: 'var(--dimension-card-width-sm)',\n md: 'var(--dimension-card-width-md)',\n lg: 'var(--dimension-card-width-lg)',\n};\n\nconst CARD_HEIGHT_VARS: Record<CardSettingWidth, string> = {\n sm: 'var(--dimension-card-height-sm)',\n md: 'var(--dimension-card-height-md)',\n lg: 'var(--dimension-card-height-lg)',\n};\n\nconst FAINT_BRAND_TITLE_COLOR = 'var(--color-foreground-faint-brand)';\n\n@Component({\n tag: 'ds-card-setting',\n styleUrl: 'CardSetting.css',\n scoped: true,\n})\nexport class CardSetting {\n /** Section heading shown in the card header. */\n @Prop() heading!: string;\n\n /**\n * Card width token (`sm` / `md` / `lg`).
|
|
349
|
+
"content": "import { Component, Element, Event, EventEmitter, h, Host, Prop, State } from '@stencil/core';\n\nexport type CardSettingVariant = 'editable' | 'immediate';\nexport type CardSettingWidth = 'sm' | 'md' | 'lg';\nexport type CardSettingAction = 'edit' | 'save' | 'cancel';\n\nexport interface CardSettingActionDetail {\n action: CardSettingAction;\n originalEvent: MouseEvent;\n}\n\nconst CARD_WIDTH_VARS: Record<CardSettingWidth, string> = {\n sm: 'var(--dimension-card-width-sm)',\n md: 'var(--dimension-card-width-md)',\n lg: 'var(--dimension-card-width-lg)',\n};\n\nconst CARD_HEIGHT_VARS: Record<CardSettingWidth, string> = {\n sm: 'var(--dimension-card-height-sm)',\n md: 'var(--dimension-card-height-md)',\n lg: 'var(--dimension-card-height-lg)',\n};\n\nconst FAINT_BRAND_TITLE_COLOR = 'var(--color-foreground-faint-brand)';\n\nconst isRenderableNode = (node: Node): boolean => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return (node as Element).tagName !== 'SLOT';\n }\n return node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim());\n};\n\nconst slotName = (node: Node): string | null =>\n node.nodeType === Node.ELEMENT_NODE ? (node as Element).getAttribute('slot') : null;\n\nconst isDefaultSlottedNode = (node: Node): boolean => isRenderableNode(node) && !slotName(node);\n\nconst isBannerSlottedNode = (node: Node): boolean =>\n isRenderableNode(node) && slotName(node) === 'banner';\n\nconst slotHasRenderableContent = (slot: HTMLSlotElement | null): boolean =>\n Boolean(slot?.assignedNodes({ flatten: true }).some(isRenderableNode));\n\n@Component({\n tag: 'ds-card-setting',\n styleUrl: 'CardSetting.css',\n scoped: true,\n})\nexport class CardSetting {\n @Element() el!: HTMLElement;\n\n /** Section heading shown in the card header. */\n @Prop() heading!: string;\n\n /**\n * Card width token (`sm` / `md` / `lg`). Empty editable cards use the matching\n * minimum-height token. Cards with body content, and immediate cards, fit\n * that content.\n */\n @Prop() cardWidth: CardSettingWidth = 'md';\n\n /** Immediate settings omit edit actions and apply changes through their own controls. */\n @Prop() variant: CardSettingVariant = 'editable';\n\n /** Controlled edit state — parent owns single-edit orchestration. */\n @Prop() editing = false;\n @Prop() editLabel: string = 'Edit';\n @Prop() cancelLabel: string = 'Cancel';\n @Prop() saveLabel: string = 'Save';\n\n /** Emits a controlled edit, save, or cancel request. */\n @Event() dsAction!: EventEmitter<CardSettingActionDetail>;\n\n @State() private hasBannerContent = false;\n @State() private hasBodyContent = false;\n\n componentWillLoad() {\n const nodes = Array.from(this.el.childNodes);\n this.hasBannerContent = nodes.some(isBannerSlottedNode);\n this.hasBodyContent = nodes.some(isDefaultSlottedNode);\n }\n\n componentDidLoad() {\n this.syncBannerContent();\n this.syncBodyContent();\n }\n\n private emitAction(action: CardSettingAction, originalEvent: MouseEvent) {\n this.dsAction.emit({ action, originalEvent });\n }\n\n private readSlotContent(\n event: Event | undefined,\n slotSelector: string,\n containerSelector: string\n ): boolean {\n const slot =\n event?.target instanceof HTMLSlotElement\n ? event.target\n : this.el.querySelector<HTMLSlotElement>(slotSelector);\n if (slotHasRenderableContent(slot)) return true;\n const container = this.el.querySelector(containerSelector);\n return Array.from(container?.childNodes ?? []).some(isRenderableNode);\n }\n\n private syncBannerContent = (event?: Event) => {\n const hasContent = this.readSlotContent(\n event,\n ':scope > .card-setting__panel > .card-setting__banner > slot',\n ':scope > .card-setting__panel > .card-setting__banner'\n );\n if (hasContent !== this.hasBannerContent) this.hasBannerContent = hasContent;\n };\n\n private syncBodyContent = (event?: Event) => {\n const hasContent = this.readSlotContent(\n event,\n ':scope > .card-setting__panel > .card-setting__body > slot',\n ':scope > .card-setting__panel > .card-setting__body'\n );\n if (hasContent !== this.hasBodyContent) this.hasBodyContent = hasContent;\n };\n\n private get hugContent(): boolean {\n return this.variant === 'immediate' || this.hasBannerContent || this.hasBodyContent;\n }\n\n render() {\n const editing = this.variant === 'editable' && this.editing;\n\n return (\n <Host\n class={{\n 'card-setting': true,\n 'card-setting--editing': editing,\n 'card-setting--immediate': this.variant === 'immediate',\n 'card-setting--empty': !this.hugContent,\n }}\n style={{\n '--_card-setting-width': CARD_WIDTH_VARS[this.cardWidth],\n '--_card-setting-min-height': this.hugContent ? '0' : CARD_HEIGHT_VARS[this.cardWidth],\n }}\n >\n <header class=\"card-setting__header ds-chrome-header\">\n {/* eslint-disable-next-line compomo/prefer-direct-ds-text -- Shared header copy owns the control-density geometry around the semantic heading. */}\n <div class=\"card-setting__copy ds-chrome-header__copy ds-control--md\">\n <ds-text\n class=\"card-setting__title ds-chrome-header__heading\"\n variant=\"text-title-small\"\n emphasis\n color={editing ? FAINT_BRAND_TITLE_COLOR : 'primary'}\n as=\"h2\"\n >\n {this.heading}\n </ds-text>\n </div>\n {this.variant === 'editable' && (\n <div class=\"card-setting__actions ds-chrome-header__trailing\">\n {!editing ? (\n <ds-button-unfilled\n variant=\"icon\"\n type=\"button\"\n icon=\"Pencil\"\n aria-label={this.editLabel}\n onDsClick={(event: CustomEvent<MouseEvent>) =>\n this.emitAction('edit', event.detail)\n }\n />\n ) : (\n [\n <ds-button-unfilled\n key=\"cancel\"\n variant=\"icon\"\n type=\"button\"\n icon=\"Cross\"\n background=\"bold\"\n aria-label={this.cancelLabel}\n onDsClick={(event: CustomEvent<MouseEvent>) =>\n this.emitAction('cancel', event.detail)\n }\n />,\n <ds-button-filled\n key=\"save\"\n variant=\"icon\"\n type=\"button\"\n icon=\"Check\"\n intent=\"brand\"\n contrast=\"faint\"\n aria-label={this.saveLabel}\n onDsClick={(event: CustomEvent<MouseEvent>) =>\n this.emitAction('save', event.detail)\n }\n />,\n ]\n )}\n </div>\n )}\n </header>\n <div class=\"card-setting__panel\">\n <div\n class={{\n 'card-setting__banner': true,\n 'card-setting__banner--empty': !this.hasBannerContent,\n }}\n >\n <slot name=\"banner\" onSlotchange={this.syncBannerContent} />\n </div>\n <div class=\"card-setting__body\">\n <slot onSlotchange={this.syncBodyContent} />\n </div>\n </div>\n </Host>\n );\n }\n}\n",
|
|
315
350
|
"type": "registry:ui"
|
|
316
351
|
}
|
|
317
352
|
]
|
|
@@ -326,8 +326,8 @@
|
|
|
326
326
|
},
|
|
327
327
|
"peerDependencies": {
|
|
328
328
|
"required": [
|
|
329
|
-
"@ds-mo/tokens ^6.
|
|
330
|
-
"@ds-mo/icons ^8.1.
|
|
329
|
+
"@ds-mo/tokens ^6.6.1",
|
|
330
|
+
"@ds-mo/icons ^8.1.1"
|
|
331
331
|
],
|
|
332
332
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
333
333
|
}
|
|
@@ -277,8 +277,8 @@
|
|
|
277
277
|
"complexPropertyNote": "Assign these non-primitive values as JavaScript properties: items.",
|
|
278
278
|
"peerDependencies": {
|
|
279
279
|
"required": [
|
|
280
|
-
"@ds-mo/tokens ^6.
|
|
281
|
-
"@ds-mo/icons ^8.1.
|
|
280
|
+
"@ds-mo/tokens ^6.6.1",
|
|
281
|
+
"@ds-mo/icons ^8.1.1"
|
|
282
282
|
],
|
|
283
283
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
284
284
|
}
|
|
@@ -239,8 +239,8 @@
|
|
|
239
239
|
"complexPropertyNote": "Assign these non-primitive values as JavaScript properties: definition.",
|
|
240
240
|
"peerDependencies": {
|
|
241
241
|
"required": [
|
|
242
|
-
"@ds-mo/tokens ^6.
|
|
243
|
-
"@ds-mo/icons ^8.1.
|
|
242
|
+
"@ds-mo/tokens ^6.6.1",
|
|
243
|
+
"@ds-mo/icons ^8.1.1"
|
|
244
244
|
],
|
|
245
245
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
246
246
|
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "checkbox-group",
|
|
4
|
+
"title": "CheckboxGroup",
|
|
5
|
+
"description": "A visible, accessible label and shared vertical rhythm for a list of independent Checkbox controls.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/checkbox-group",
|
|
11
|
+
"source": "src/wc/components/CheckboxGroup/CheckboxGroup.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "experimental",
|
|
16
|
+
"summary": "A visible, accessible label and shared vertical rhythm for a list of independent Checkbox controls.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"Two or more related checkboxes need one visible group label in a form.",
|
|
19
|
+
"A checkbox list should use the same density-aligned heading geometry as other compact option lists."
|
|
20
|
+
],
|
|
21
|
+
"avoidWhen": [
|
|
22
|
+
"Only one standalone checkbox is needed.",
|
|
23
|
+
"Exactly one option may be selected; use Radio instead.",
|
|
24
|
+
"The list is a settings-card row; use component:ds-setting-row-checkbox, which owns the heading and view/edit presentation."
|
|
25
|
+
],
|
|
26
|
+
"alternatives": [
|
|
27
|
+
{
|
|
28
|
+
"when": "Exactly one option may be selected.",
|
|
29
|
+
"component": "component:ds-radio",
|
|
30
|
+
"reason": "Radio owns mutually exclusive selection and keyboard traversal."
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"commonlyComposedWith": [
|
|
34
|
+
"component:ds-checkbox",
|
|
35
|
+
"component:ds-text",
|
|
36
|
+
"component:ds-setting-row-checkbox"
|
|
37
|
+
],
|
|
38
|
+
"accessibility": [
|
|
39
|
+
"The visible label names the role=group container; each slotted Checkbox keeps its own visible label, state, focus, and form value.",
|
|
40
|
+
"Inside ds-setting-row-checkbox the visible form label is omitted on first paint; the row heading is the accessible name via aria-labelledby.",
|
|
41
|
+
"Use aria-describedby to associate group-level guidance or validation copy.",
|
|
42
|
+
"Use the same size on CheckboxGroup and every slotted Checkbox so their text origins and density remain aligned."
|
|
43
|
+
],
|
|
44
|
+
"states": [
|
|
45
|
+
"The label uses the shared density section-heading row and body-small emphasis.",
|
|
46
|
+
"Vertical checkbox options use a 4px gap; at medium density the group label and each single-line checkbox row are 32px high.",
|
|
47
|
+
"Selection, mixed, inactive, validation, and form behavior remain owned by each slotted Checkbox."
|
|
48
|
+
],
|
|
49
|
+
"responsiveBehavior": [
|
|
50
|
+
"The group fills the width supplied by its parent while each Checkbox keeps its intrinsic row width and allows copy to wrap."
|
|
51
|
+
],
|
|
52
|
+
"frameworkCaveats": {
|
|
53
|
+
"customElements": [
|
|
54
|
+
"Slot two or more ds-checkbox children and keep their name, value, and checked state application-owned."
|
|
55
|
+
],
|
|
56
|
+
"react": [
|
|
57
|
+
"Compose DsCheckbox children inside DsCheckboxGroup."
|
|
58
|
+
],
|
|
59
|
+
"vue": [
|
|
60
|
+
"Compose DsCheckbox children inside DsCheckboxGroup."
|
|
61
|
+
],
|
|
62
|
+
"angular": [
|
|
63
|
+
"Compose generated DsCheckbox adapters inside DsCheckboxGroup."
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"references": [
|
|
67
|
+
{
|
|
68
|
+
"label": "Storybook examples",
|
|
69
|
+
"path": "src/wc/components/CheckboxGroup/CheckboxGroup.stories.ts"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"label": "Rendered form geometry coverage",
|
|
73
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"styling": {
|
|
77
|
+
"rationale": "The group owns only its label and option-list rhythm; each Checkbox owns its own selection anatomy.",
|
|
78
|
+
"protected": [
|
|
79
|
+
{
|
|
80
|
+
"properties": [
|
|
81
|
+
"gap",
|
|
82
|
+
"padding",
|
|
83
|
+
"font",
|
|
84
|
+
"font-size",
|
|
85
|
+
"font-weight",
|
|
86
|
+
"line-height"
|
|
87
|
+
],
|
|
88
|
+
"reason": "Use size to keep the heading and slotted controls on the shared density recipe.",
|
|
89
|
+
"props": [
|
|
90
|
+
"size"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"customProperties": []
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"api": {
|
|
98
|
+
"props": {
|
|
99
|
+
"ariaDescribedby": {
|
|
100
|
+
"type": "string | undefined",
|
|
101
|
+
"resolvedType": "string | undefined",
|
|
102
|
+
"attribute": "aria-describedby",
|
|
103
|
+
"required": false,
|
|
104
|
+
"mutable": false,
|
|
105
|
+
"description": "Id reference for supporting guidance or an error message."
|
|
106
|
+
},
|
|
107
|
+
"ariaLabel": {
|
|
108
|
+
"type": "string | null",
|
|
109
|
+
"resolvedType": "null | string",
|
|
110
|
+
"attribute": "aria-label",
|
|
111
|
+
"default": "null",
|
|
112
|
+
"required": false,
|
|
113
|
+
"mutable": false,
|
|
114
|
+
"description": "Accessible name when visible group labeling is unavailable."
|
|
115
|
+
},
|
|
116
|
+
"ariaLabelledby": {
|
|
117
|
+
"type": "string | undefined",
|
|
118
|
+
"resolvedType": "string | undefined",
|
|
119
|
+
"attribute": "aria-labelledby",
|
|
120
|
+
"required": false,
|
|
121
|
+
"mutable": false,
|
|
122
|
+
"description": "Id reference for a visible group label."
|
|
123
|
+
},
|
|
124
|
+
"label": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"resolvedType": "string | undefined",
|
|
127
|
+
"attribute": "label",
|
|
128
|
+
"required": false,
|
|
129
|
+
"mutable": false,
|
|
130
|
+
"description": "Visible label and accessible name for the checkbox list."
|
|
131
|
+
},
|
|
132
|
+
"size": {
|
|
133
|
+
"type": "CheckboxGroupSize",
|
|
134
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
|
|
135
|
+
"attribute": "size",
|
|
136
|
+
"default": "'md'",
|
|
137
|
+
"required": false,
|
|
138
|
+
"mutable": false,
|
|
139
|
+
"description": "Density of the label row; use the same size on every slotted Checkbox."
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"events": [],
|
|
143
|
+
"methods": [],
|
|
144
|
+
"slots": []
|
|
145
|
+
},
|
|
146
|
+
"props": {
|
|
147
|
+
"ariaDescribedby": {
|
|
148
|
+
"type": "string | undefined",
|
|
149
|
+
"resolvedType": "string | undefined",
|
|
150
|
+
"attribute": "aria-describedby",
|
|
151
|
+
"required": false,
|
|
152
|
+
"mutable": false,
|
|
153
|
+
"description": "Id reference for supporting guidance or an error message."
|
|
154
|
+
},
|
|
155
|
+
"ariaLabel": {
|
|
156
|
+
"type": "string | null",
|
|
157
|
+
"resolvedType": "null | string",
|
|
158
|
+
"attribute": "aria-label",
|
|
159
|
+
"default": "null",
|
|
160
|
+
"required": false,
|
|
161
|
+
"mutable": false,
|
|
162
|
+
"description": "Accessible name when visible group labeling is unavailable."
|
|
163
|
+
},
|
|
164
|
+
"ariaLabelledby": {
|
|
165
|
+
"type": "string | undefined",
|
|
166
|
+
"resolvedType": "string | undefined",
|
|
167
|
+
"attribute": "aria-labelledby",
|
|
168
|
+
"required": false,
|
|
169
|
+
"mutable": false,
|
|
170
|
+
"description": "Id reference for a visible group label."
|
|
171
|
+
},
|
|
172
|
+
"label": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"resolvedType": "string | undefined",
|
|
175
|
+
"attribute": "label",
|
|
176
|
+
"required": false,
|
|
177
|
+
"mutable": false,
|
|
178
|
+
"description": "Visible label and accessible name for the checkbox list."
|
|
179
|
+
},
|
|
180
|
+
"size": {
|
|
181
|
+
"type": "CheckboxGroupSize",
|
|
182
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
|
|
183
|
+
"attribute": "size",
|
|
184
|
+
"default": "'md'",
|
|
185
|
+
"required": false,
|
|
186
|
+
"mutable": false,
|
|
187
|
+
"description": "Density of the label row; use the same size on every slotted Checkbox."
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"events": [],
|
|
191
|
+
"methods": [],
|
|
192
|
+
"slots": [],
|
|
193
|
+
"exports": {
|
|
194
|
+
"customElement": "ds-checkbox-group",
|
|
195
|
+
"react": "DsCheckboxGroup",
|
|
196
|
+
"vue": "DsCheckboxGroup",
|
|
197
|
+
"angular": "DsCheckboxGroup"
|
|
198
|
+
},
|
|
199
|
+
"consumption": {
|
|
200
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
201
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
202
|
+
"customElements": {
|
|
203
|
+
"import": "import '@ds-mo/ui/dist/components/ds-checkbox-group.js';",
|
|
204
|
+
"example": "<ds-checkbox-group></ds-checkbox-group>"
|
|
205
|
+
},
|
|
206
|
+
"react": {
|
|
207
|
+
"import": "import { DsCheckboxGroup } from '@ds-mo/ui/react';",
|
|
208
|
+
"example": "<DsCheckboxGroup />"
|
|
209
|
+
},
|
|
210
|
+
"vue": {
|
|
211
|
+
"import": "import { DsCheckboxGroup } from '@ds-mo/ui/vue';",
|
|
212
|
+
"example": "<DsCheckboxGroup />"
|
|
213
|
+
},
|
|
214
|
+
"angular": {
|
|
215
|
+
"import": "import { DsCheckboxGroup } from '@ds-mo/ui/angular/ds-checkbox-group';",
|
|
216
|
+
"example": "<ds-checkbox-group></ds-checkbox-group>"
|
|
217
|
+
},
|
|
218
|
+
"peerDependencies": {
|
|
219
|
+
"required": [
|
|
220
|
+
"@ds-mo/tokens ^6.6.1",
|
|
221
|
+
"@ds-mo/icons ^8.1.1"
|
|
222
|
+
],
|
|
223
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
"dependencies": [
|
|
228
|
+
"@ds-mo/ui",
|
|
229
|
+
"@ds-mo/tokens"
|
|
230
|
+
],
|
|
231
|
+
"registryDependencies": [
|
|
232
|
+
"text"
|
|
233
|
+
],
|
|
234
|
+
"files": [
|
|
235
|
+
{
|
|
236
|
+
"path": "src/wc/components/CheckboxGroup/CheckboxGroup.css",
|
|
237
|
+
"content": "@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n\n:host {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.checkbox-group__options {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n::slotted(ds-checkbox) {\n align-self: flex-start;\n max-width: 100%;\n min-width: 0;\n}\n",
|
|
238
|
+
"type": "registry:ui"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"path": "src/wc/components/CheckboxGroup/CheckboxGroup.tsx",
|
|
242
|
+
"content": "import { Component, Element, h, Host, Prop } from '@stencil/core';\n\nexport type CheckboxGroupSize = 'lg' | 'md' | 'sm' | 'xs';\n\nlet checkboxGroupId = 0;\n\n@Component({\n tag: 'ds-checkbox-group',\n styleUrl: 'CheckboxGroup.css',\n scoped: true,\n})\nexport class CheckboxGroup {\n @Element() el!: HTMLElement;\n private readonly labelId = `ds-checkbox-group-label-${++checkboxGroupId}`;\n\n /** Visible label and accessible name for the checkbox list. */\n @Prop() label?: string;\n /** Density of the label row; use the same size on every slotted Checkbox. */\n @Prop() size: CheckboxGroupSize = 'md';\n /** Accessible name when visible group labeling is unavailable. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Id reference for a visible group label. */\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n /** Id reference for supporting guidance or an error message. */\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n private get hasGroupLabel(): boolean {\n return Boolean(this.label?.trim());\n }\n\n /** Settings rows own a separate heading; never mount the form group label there. */\n private get showGroupLabel(): boolean {\n return this.hasGroupLabel && !this.el.closest('ds-setting-row-checkbox');\n }\n\n render() {\n return (\n <Host\n role=\"group\"\n aria-label={this.showGroupLabel ? undefined : this.ariaLabel}\n aria-labelledby={this.showGroupLabel ? this.labelId : this.ariaLabelledby}\n aria-describedby={this.ariaDescribedby}\n class={{\n 'checkbox-group': true,\n [`checkbox-group--${this.size}`]: true,\n 'checkbox-group--labeled': this.showGroupLabel,\n }}\n >\n {this.showGroupLabel ? (\n <ds-text\n key=\"checkbox-group-label\"\n class={`checkbox-group__label ds-control-section-heading ds-control--${this.size}`}\n as=\"span\"\n variant=\"text-body-small\"\n emphasis\n textId={this.labelId}\n >\n {this.label}\n </ds-text>\n ) : null}\n <div key=\"checkbox-group-options\" class=\"checkbox-group__options\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n",
|
|
243
|
+
"type": "registry:ui"
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
}
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
"The initial checked and indeterminate values are restored by native form reset; checked values submit under name and unchecked values submit nothing.",
|
|
59
59
|
"Sizes are lg with a 20px box in a 24px placement, md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
|
|
60
60
|
"Presentation mode removes checkbox semantics, focus, interaction, label rendering, description rendering, and form submission while preserving the visual state.",
|
|
61
|
-
"Description-rich checkboxes grow beyond the fixed density height while retaining its minimum target size and
|
|
61
|
+
"Description-rich checkboxes grow beyond the fixed density height while retaining its minimum target size and align the checkbox placement with the primary label line.",
|
|
62
|
+
"Form and settings usage omits a row hover or pressed wash by default; set hasInteractionFill only when the checkbox itself is presented as a choice-list row."
|
|
62
63
|
],
|
|
63
64
|
"responsiveBehavior": [
|
|
64
65
|
"Choose size from the density of the containing row; labels and descriptions may wrap while the placement box stays fixed.",
|
|
@@ -119,7 +120,8 @@
|
|
|
119
120
|
"reason": "The component owns its surface and interaction treatment; use its semantic presentation props or compose an application-owned surrounding surface.",
|
|
120
121
|
"props": [
|
|
121
122
|
"size",
|
|
122
|
-
"presentation"
|
|
123
|
+
"presentation",
|
|
124
|
+
"hasInteractionFill"
|
|
123
125
|
]
|
|
124
126
|
}
|
|
125
127
|
],
|
|
@@ -154,6 +156,15 @@
|
|
|
154
156
|
"mutable": false,
|
|
155
157
|
"description": "Native disabled state."
|
|
156
158
|
},
|
|
159
|
+
"hasInteractionFill": {
|
|
160
|
+
"type": "boolean",
|
|
161
|
+
"resolvedType": "boolean",
|
|
162
|
+
"attribute": "has-interaction-fill",
|
|
163
|
+
"default": "false",
|
|
164
|
+
"required": false,
|
|
165
|
+
"mutable": false,
|
|
166
|
+
"description": "Show full-row hover and pressed feedback for choice-list presentations."
|
|
167
|
+
},
|
|
157
168
|
"indeterminate": {
|
|
158
169
|
"type": "boolean",
|
|
159
170
|
"resolvedType": "boolean",
|
|
@@ -274,6 +285,15 @@
|
|
|
274
285
|
"mutable": false,
|
|
275
286
|
"description": "Native disabled state."
|
|
276
287
|
},
|
|
288
|
+
"hasInteractionFill": {
|
|
289
|
+
"type": "boolean",
|
|
290
|
+
"resolvedType": "boolean",
|
|
291
|
+
"attribute": "has-interaction-fill",
|
|
292
|
+
"default": "false",
|
|
293
|
+
"required": false,
|
|
294
|
+
"mutable": false,
|
|
295
|
+
"description": "Show full-row hover and pressed feedback for choice-list presentations."
|
|
296
|
+
},
|
|
277
297
|
"indeterminate": {
|
|
278
298
|
"type": "boolean",
|
|
279
299
|
"resolvedType": "boolean",
|
|
@@ -393,8 +413,8 @@
|
|
|
393
413
|
},
|
|
394
414
|
"peerDependencies": {
|
|
395
415
|
"required": [
|
|
396
|
-
"@ds-mo/tokens ^6.
|
|
397
|
-
"@ds-mo/icons ^8.1.
|
|
416
|
+
"@ds-mo/tokens ^6.6.1",
|
|
417
|
+
"@ds-mo/icons ^8.1.1"
|
|
398
418
|
],
|
|
399
419
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
400
420
|
}
|
|
@@ -410,12 +430,12 @@
|
|
|
410
430
|
"files": [
|
|
411
431
|
{
|
|
412
432
|
"path": "src/wc/components/Checkbox/Checkbox.css",
|
|
413
|
-
"content": "@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n padding: 0 var(--ds-control-padding-inline);\n border-radius: var(--ds-control-radius);\n cursor: default;\n user-select: none;\n}\n\n:host(.checkbox--described) {\n height: auto;\n min-height: var(--ds-control-height);\n padding-block: var(--dimension-space-075);\n}\n\n:host(.checkbox--presentation) {\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n padding: 0;\n gap: 0;\n pointer-events: none;\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n:host(.checkbox--lg) {\n --_checkbox-box: var(--dimension-iconography-md);\n --_checkbox-stroke: var(--dimension-stroke-width-018);\n}\n\n:host(.checkbox--md) {\n --_checkbox-box: var(--dimension-iconography-sm);\n --_checkbox-stroke: var(--dimension-stroke-width-015);\n}\n\n:host(.checkbox--sm) {\n --_checkbox-box: var(--dimension-iconography-xs);\n --_checkbox-stroke: var(--dimension-stroke-width-012);\n}\n\n:host(.checkbox--xs) {\n --_checkbox-box: var(--dimension-size-100);\n --_checkbox-stroke: calc(var(--dimension-stroke-width-base) * 3 / 32);\n}\n\n.checkbox__placement {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n\n.box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--_checkbox-box);\n height: var(--_checkbox-box);\n border: 0;\n border-radius: var(--dimension-radius-025);\n box-shadow: inset 0 0 0 var(--_checkbox-stroke) var(--color-foreground-tertiary);\n transition:\n background-color var(--effect-motion-short-2),\n box-shadow var(--effect-motion-short-2);\n}\n\n.box--marked {\n color: var(--color-foreground-on-bold-background-primary);\n background-color: var(--color-background-bold-brand);\n box-shadow: none;\n}\n\n.checkbox__mark {\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n fill: currentColor;\n}\n\n.checkbox__copy {\n display: grid;\n flex: 1;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding: 0 var(--ds-control-label-inset);\n}\n\n@media (forced-colors: active) {\n .box {\n border: var(--_checkbox-stroke) solid var(--ds-forced-color-content);\n box-shadow: none;\n }\n\n .box--marked {\n color: var(--ds-forced-color-on-selected);\n background-color: var(--ds-forced-color-selected);\n border-color: var(--ds-forced-color-selected);\n }\n}\n",
|
|
433
|
+
"content": "@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n padding: 0 var(--ds-settings-row-control-padding-inline, var(--ds-control-padding-inline));\n border-radius: var(--ds-control-radius);\n cursor: default;\n user-select: none;\n}\n\n:host(.checkbox--described) {\n align-items: flex-start;\n height: auto;\n min-height: var(--ds-control-height);\n padding-block: var(--dimension-space-075);\n}\n\n:host(.checkbox--presentation) {\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n padding: 0;\n gap: 0;\n pointer-events: none;\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n:host(.checkbox--lg) {\n --_checkbox-box: var(--dimension-iconography-md);\n --_checkbox-stroke: var(--dimension-stroke-width-018);\n}\n\n:host(.checkbox--md) {\n --_checkbox-box: var(--dimension-iconography-sm);\n --_checkbox-stroke: var(--dimension-stroke-width-015);\n}\n\n:host(.checkbox--sm) {\n --_checkbox-box: var(--dimension-iconography-xs);\n --_checkbox-stroke: var(--dimension-stroke-width-012);\n}\n\n:host(.checkbox--xs) {\n --_checkbox-box: var(--dimension-size-100);\n --_checkbox-stroke: calc(var(--dimension-stroke-width-base) * 3 / 32);\n}\n\n.checkbox__placement {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n\n.box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--_checkbox-box);\n height: var(--_checkbox-box);\n border: 0;\n border-radius: var(--dimension-radius-025);\n box-shadow: inset 0 0 0 var(--_checkbox-stroke) var(--color-foreground-tertiary);\n transition:\n background-color var(--effect-motion-short-2),\n box-shadow var(--effect-motion-short-2);\n}\n\n.box--marked {\n color: var(--color-foreground-on-bold-background-primary);\n background-color: var(--color-background-bold-brand);\n box-shadow: none;\n}\n\n.checkbox__mark {\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n fill: currentColor;\n}\n\n.checkbox__copy {\n display: grid;\n flex: 1;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding: 0 var(--ds-control-label-inset);\n}\n\n@media (forced-colors: active) {\n .box {\n border: var(--_checkbox-stroke) solid var(--ds-forced-color-content);\n box-shadow: none;\n }\n\n .box--marked {\n color: var(--ds-forced-color-on-selected);\n background-color: var(--ds-forced-color-selected);\n border-color: var(--ds-forced-color-selected);\n }\n}\n",
|
|
414
434
|
"type": "registry:ui"
|
|
415
435
|
},
|
|
416
436
|
{
|
|
417
437
|
"path": "src/wc/components/Checkbox/Checkbox.tsx",
|
|
418
|
-
"content": "import {\n AttachInternals,\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n setFormControlValue,\n setRequiredValidity,\n} from '../../utils';\n\nexport type CheckboxSize = 'lg' | 'md' | 'sm' | 'xs';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-checkbox',\n styleUrl: 'Checkbox.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Checkbox {\n @AttachInternals() internals!: ElementInternals;\n private labelId = `ds-checkbox-label-${++idCounter}`;\n private descriptionId = `${this.labelId}-description`;\n\n /** Visible label and accessible name. Omitted only in presentation mode. */\n @Prop() label!: string;\n /** Optional supporting description associated with the checkbox. */\n @Prop() description?: string;\n /** Current checked state. */\n @Prop({ mutable: true }) checked: boolean = false;\n /** Visual and placement density. */\n @Prop() size: CheckboxSize = 'md';\n /** Native form field name. */\n @Prop({ reflect: true }) name: string | undefined;\n /** Submitted value when checked. */\n @Prop() value: string = 'on';\n /** Native disabled state. */\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Require the checkbox to be checked for form validity. */\n @Prop({ reflect: true }) required: boolean = false;\n /** Validation message used when a required checkbox is unchecked. */\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Mixed visual state. Activation clears it before toggling checked. */\n @Prop({ mutable: true }) indeterminate: boolean = false;\n /** Design-system inactive state. */\n @Prop() isInactive: boolean = false;\n /** Visual-only indicator for a composite control that owns selection semantics. */\n @Prop() presentation: boolean = false;\n\n /** Emitted after user activation with the new checked state. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private initialChecked = false;\n private initialIndeterminate = false;\n @State() private formDisabled = false;\n\n componentWillLoad() {\n this.initialChecked = this.checked;\n this.initialIndeterminate = this.indeterminate;\n this.syncFormValue();\n }\n\n @Watch('checked')\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('presentation')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled || this.presentation;\n setFormControlValue(this.internals, this.checked ? this.value : null, { inactive });\n const missing = this.required && !inactive && !this.checked;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.checked = this.initialChecked;\n this.indeterminate = this.initialIndeterminate;\n }\n\n private handleActivate = () => {\n if (this.isInactive || this.disabled || this.formDisabled || this.presentation) return;\n if (this.indeterminate) this.indeterminate = false;\n this.checked = !this.checked;\n this.dsChange.emit(this.checked);\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleActivate();\n }\n };\n\n render() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const isMarked = this.checked || this.indeterminate;\n const invalid = this.required && !inactive && !this.checked;\n\n return (\n <Host\n role={this.presentation ? undefined : 'checkbox'}\n aria-checked={\n this.presentation ? undefined : this.indeterminate ? 'mixed' : String(this.checked)\n }\n aria-disabled={!this.presentation && inactive ? 'true' : undefined}\n aria-required={!this.presentation && this.required ? 'true' : undefined}\n aria-invalid={!this.presentation && invalid ? 'true' : undefined}\n aria-labelledby={this.presentation ? undefined : this.labelId}\n aria-describedby={!this.presentation && this.description ? this.descriptionId : undefined}\n aria-hidden={this.presentation ? 'true' : undefined}\n tabIndex={this.presentation || inactive ? -1 : 0}\n class={{\n checkbox: true,\n 'checkbox--presentation': this.presentation,\n 'checkbox--described': Boolean(this.description),\n [`checkbox--${this.size}`]: true,\n [`ds-control--${this.size}`]: true,\n 'ds-control-inactive': inactive && !this.presentation,\n 'ds-focus-ring-inset': !this.presentation,\n 'ds-interaction-fill': !inactive && !this.presentation,\n }}\n onClick={this.presentation ? undefined : this.handleActivate}\n onKeyDown={this.presentation ? undefined : this.handleKeyDown}\n >\n <span class=\"checkbox__placement ds-interaction-fill__content\" aria-hidden=\"true\">\n <span class={{ box: true, 'box--marked': isMarked }}>\n {isMarked && (\n // eslint-disable-next-line compomo/prefer-ds-icon -- Checkbox owns this fixed state-mark geometry.\n <svg class=\"checkbox__mark\" viewBox=\"0 0 16 16\" fill=\"currentColor\" focusable=\"false\">\n <path\n d={\n this.indeterminate\n ? 'M12 7.375V8.625H4V7.375H12Z'\n : 'M12.9756 4.65527L7.22559 11.4053C7.11258 11.5379 6.94946 11.6169 6.77539 11.624C6.60111 11.631 6.43095 11.5657 6.30762 11.4424L3.05762 8.19238L3.94238 7.30762L6.71289 10.0781L12.0244 3.84473L12.9756 4.65527Z'\n }\n />\n </svg>\n )}\n </span>\n </span>\n {!this.presentation && (\n <span class=\"checkbox__copy ds-interaction-fill__content\">\n <ds-text\n class=\"checkbox__label\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[this.size]}\n textId={this.labelId}\n >\n {this.label}\n </ds-text>\n {this.description ? (\n <ds-text\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"secondary\"\n textId={this.descriptionId}\n >\n {this.description}\n </ds-text>\n ) : null}\n </span>\n )}\n </Host>\n );\n }\n}\n",
|
|
438
|
+
"content": "import {\n AttachInternals,\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n setFormControlValue,\n setRequiredValidity,\n} from '../../utils';\n\nexport type CheckboxSize = 'lg' | 'md' | 'sm' | 'xs';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-checkbox',\n styleUrl: 'Checkbox.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Checkbox {\n @AttachInternals() internals!: ElementInternals;\n private labelId = `ds-checkbox-label-${++idCounter}`;\n private descriptionId = `${this.labelId}-description`;\n\n /** Visible label and accessible name. Omitted only in presentation mode. */\n @Prop() label!: string;\n /** Optional supporting description associated with the checkbox. */\n @Prop() description?: string;\n /** Current checked state. */\n @Prop({ mutable: true }) checked: boolean = false;\n /** Visual and placement density. */\n @Prop() size: CheckboxSize = 'md';\n /** Native form field name. */\n @Prop({ reflect: true }) name: string | undefined;\n /** Submitted value when checked. */\n @Prop() value: string = 'on';\n /** Native disabled state. */\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Require the checkbox to be checked for form validity. */\n @Prop({ reflect: true }) required: boolean = false;\n /** Validation message used when a required checkbox is unchecked. */\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Mixed visual state. Activation clears it before toggling checked. */\n @Prop({ mutable: true }) indeterminate: boolean = false;\n /** Design-system inactive state. */\n @Prop() isInactive: boolean = false;\n /** Show full-row hover and pressed feedback for choice-list presentations. */\n @Prop() hasInteractionFill: boolean = false;\n /** Visual-only indicator for a composite control that owns selection semantics. */\n @Prop() presentation: boolean = false;\n\n /** Emitted after user activation with the new checked state. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private initialChecked = false;\n private initialIndeterminate = false;\n @State() private formDisabled = false;\n\n componentWillLoad() {\n this.initialChecked = this.checked;\n this.initialIndeterminate = this.indeterminate;\n this.syncFormValue();\n }\n\n @Watch('checked')\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('presentation')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled || this.presentation;\n setFormControlValue(this.internals, this.checked ? this.value : null, { inactive });\n const missing = this.required && !inactive && !this.checked;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.checked = this.initialChecked;\n this.indeterminate = this.initialIndeterminate;\n }\n\n private handleActivate = () => {\n if (this.isInactive || this.disabled || this.formDisabled || this.presentation) return;\n if (this.indeterminate) this.indeterminate = false;\n this.checked = !this.checked;\n this.dsChange.emit(this.checked);\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleActivate();\n }\n };\n\n render() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const isMarked = this.checked || this.indeterminate;\n const invalid = this.required && !inactive && !this.checked;\n\n return (\n <Host\n role={this.presentation ? undefined : 'checkbox'}\n aria-checked={\n this.presentation ? undefined : this.indeterminate ? 'mixed' : String(this.checked)\n }\n aria-disabled={!this.presentation && inactive ? 'true' : undefined}\n aria-required={!this.presentation && this.required ? 'true' : undefined}\n aria-invalid={!this.presentation && invalid ? 'true' : undefined}\n aria-labelledby={this.presentation ? undefined : this.labelId}\n aria-describedby={!this.presentation && this.description ? this.descriptionId : undefined}\n aria-hidden={this.presentation ? 'true' : undefined}\n tabIndex={this.presentation || inactive ? -1 : 0}\n class={{\n checkbox: true,\n 'checkbox--presentation': this.presentation,\n 'checkbox--described': Boolean(this.description),\n [`checkbox--${this.size}`]: true,\n [`ds-control--${this.size}`]: true,\n 'ds-control-inactive': inactive && !this.presentation,\n 'ds-focus-ring-inset': !this.presentation,\n 'ds-interaction-fill': !inactive && !this.presentation && this.hasInteractionFill,\n }}\n onClick={this.presentation ? undefined : this.handleActivate}\n onKeyDown={this.presentation ? undefined : this.handleKeyDown}\n >\n <span class=\"checkbox__placement ds-interaction-fill__content\" aria-hidden=\"true\">\n <span class={{ box: true, 'box--marked': isMarked }}>\n {isMarked && (\n // eslint-disable-next-line compomo/prefer-ds-icon -- Checkbox owns this fixed state-mark geometry.\n <svg class=\"checkbox__mark\" viewBox=\"0 0 16 16\" fill=\"currentColor\" focusable=\"false\">\n <path\n d={\n this.indeterminate\n ? 'M12 7.375V8.625H4V7.375H12Z'\n : 'M12.9756 4.65527L7.22559 11.4053C7.11258 11.5379 6.94946 11.6169 6.77539 11.624C6.60111 11.631 6.43095 11.5657 6.30762 11.4424L3.05762 8.19238L3.94238 7.30762L6.71289 10.0781L12.0244 3.84473L12.9756 4.65527Z'\n }\n />\n </svg>\n )}\n </span>\n </span>\n {!this.presentation && (\n <span class=\"checkbox__copy ds-interaction-fill__content\">\n <ds-text\n class=\"checkbox__label\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[this.size]}\n textId={this.labelId}\n >\n {this.label}\n </ds-text>\n {this.description ? (\n <ds-text\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"secondary\"\n textId={this.descriptionId}\n >\n {this.description}\n </ds-text>\n ) : null}\n </span>\n )}\n </Host>\n );\n }\n}\n",
|
|
419
439
|
"type": "registry:ui"
|
|
420
440
|
}
|
|
421
441
|
]
|
|
@@ -337,8 +337,8 @@
|
|
|
337
337
|
},
|
|
338
338
|
"peerDependencies": {
|
|
339
339
|
"required": [
|
|
340
|
-
"@ds-mo/tokens ^6.
|
|
341
|
-
"@ds-mo/icons ^8.1.
|
|
340
|
+
"@ds-mo/tokens ^6.6.1",
|
|
341
|
+
"@ds-mo/icons ^8.1.1"
|
|
342
342
|
],
|
|
343
343
|
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
344
344
|
}
|