@ds-mo/ui 14.34.0 → 14.36.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 +1 -1
- package/dist/agent.json +1423 -218
- package/dist/angular/ds-button-inverted.d.ts +17 -0
- package/dist/angular/ds-button-inverted.js +46 -0
- package/dist/angular/ds-calendar.d.ts +15 -0
- package/dist/angular/ds-calendar.js +43 -0
- package/dist/angular/ds-field.d.ts +1 -1
- package/dist/angular/ds-field.js +1 -1
- package/dist/angular/ds-filter-menu.d.ts +1 -1
- package/dist/angular/ds-filter-menu.js +3 -3
- package/dist/angular/ds-input-date.d.ts +15 -0
- package/dist/angular/ds-input-date.js +43 -0
- package/dist/angular/ds-input-time.d.ts +15 -0
- package/dist/angular/ds-input-time.js +43 -0
- package/dist/angular/ds-input.d.ts +1 -1
- package/dist/angular/ds-input.js +3 -3
- package/dist/angular/ds-menu.d.ts +1 -1
- package/dist/angular/ds-menu.js +3 -3
- package/dist/angular/ds-select.d.ts +1 -1
- package/dist/angular/ds-select.js +3 -3
- package/dist/angular/ds-tab-group.d.ts +1 -1
- package/dist/angular/ds-tab-group.js +3 -3
- package/dist/angular/ds-table-filter.d.ts +1 -1
- package/dist/angular/ds-table-filter.js +3 -3
- package/dist/angular/ds-table-group.d.ts +1 -1
- package/dist/angular/ds-table-group.js +3 -3
- package/dist/angular/ds-table-preferences.d.ts +39 -0
- package/dist/angular/ds-table-preferences.js +69 -0
- package/dist/angular/ds-table-saved-views.d.ts +1 -1
- package/dist/angular/ds-table-saved-views.js +3 -3
- package/dist/angular/ds-table-search.d.ts +1 -1
- package/dist/angular/ds-table-search.js +3 -3
- package/dist/angular/ds-table-sort.d.ts +1 -1
- package/dist/angular/ds-table-sort.js +3 -3
- package/dist/angular/ds-table-toolbar.d.ts +1 -1
- package/dist/angular/ds-table-toolbar.js +3 -3
- package/dist/angular/ds-table.d.ts +3 -1
- package/dist/angular/ds-table.js +8 -5
- package/dist/angular/ds-time-picker.d.ts +15 -0
- package/dist/angular/ds-time-picker.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +6 -0
- package/dist/angular/proxies.d.ts +6 -0
- package/dist/angular/proxies.js +6 -0
- 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-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.d.ts +11 -0
- package/dist/components/ds-button-inverted.js +2 -0
- package/dist/components/ds-button-inverted.js.map +1 -0
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.d.ts +11 -0
- package/dist/components/ds-calendar.js +2 -0
- package/dist/components/ds-calendar.js.map +1 -0
- package/dist/components/ds-card-action-center.js +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-setting.js +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.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.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-input-date.d.ts +11 -0
- package/dist/components/ds-input-date.js +2 -0
- package/dist/components/ds-input-date.js.map +1 -0
- package/dist/components/ds-input-time.d.ts +11 -0
- package/dist/components/ds-input-time.js +2 -0
- package/dist/components/ds-input-time.js.map +1 -0
- package/dist/components/ds-input.js +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-composer.js +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-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- 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-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-filter.js +1 -1
- package/dist/components/ds-table-filter.js.map +1 -1
- package/dist/components/ds-table-group.js +1 -1
- package/dist/components/ds-table-group.js.map +1 -1
- package/dist/components/ds-table-preferences.d.ts +11 -0
- package/dist/components/ds-table-preferences.js +2 -0
- package/dist/components/ds-table-preferences.js.map +1 -0
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-saved-views.js.map +1 -1
- package/dist/components/ds-table-search.js +1 -1
- package/dist/components/ds-table-search.js.map +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table-toolbar.js.map +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.d.ts +11 -0
- package/dist/components/ds-time-picker.js +2 -0
- package/dist/components/ds-time-picker.js.map +1 -0
- 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-B5QVra1K.js → p-2GVGhrh0.js} +2 -2
- package/dist/components/p-7O-2D29W.js +2 -0
- package/dist/components/p-7O-2D29W.js.map +1 -0
- package/dist/components/{p-BqGdNrVl.js → p-8oRkhvjy.js} +2 -2
- package/dist/components/p-B27_chI7.js +2 -0
- package/dist/components/p-B27_chI7.js.map +1 -0
- package/dist/components/{p-ya8A_SMw.js → p-BOhpMUwO.js} +2 -2
- package/dist/components/{p-ya8A_SMw.js.map → p-BOhpMUwO.js.map} +1 -1
- package/dist/components/{p-CqeMumqy.js → p-BV5T1hzN.js} +2 -2
- package/dist/components/{p-CIoeHcCk.js → p-BWfzaSc3.js} +2 -2
- package/dist/components/{p-AkSwrAKR.js → p-BgLI9JoT.js} +2 -2
- package/dist/components/{p-BwsS_Hyr.js → p-C-dHtQMi.js} +2 -2
- package/dist/components/p-C0CE2v5D.js +2 -0
- package/dist/components/{p-CHBuzAYH.js.map → p-C0CE2v5D.js.map} +1 -1
- package/dist/components/{p-CoE7yza3.js → p-C2JnoaWI.js} +2 -2
- package/dist/components/{p-lv4YQEsa.js → p-C4m8y9ki.js} +2 -2
- package/dist/components/{p-BEttT0UB.js → p-CDJ2Ntcq.js} +2 -2
- package/dist/components/p-CKarsuR2.js +2 -0
- package/dist/components/p-CKarsuR2.js.map +1 -0
- package/dist/components/{p-Dj296RmE.js → p-CMQUuGvl.js} +2 -2
- package/dist/components/{p-DyyfWSLB.js → p-CQ5RwY2C.js} +2 -2
- package/dist/components/p-CQIh2yRP.js +2 -0
- package/dist/components/p-CQIh2yRP.js.map +1 -0
- package/dist/components/{p-CQqZgTYk.js → p-CWPT3aOB.js} +2 -2
- package/dist/components/p-CWog26I_.js +2 -0
- package/dist/components/p-CWog26I_.js.map +1 -0
- package/dist/components/{p-LZ8F08Fj.js → p-CaNCGKEJ.js} +2 -2
- package/dist/components/p-CaNCGKEJ.js.map +1 -0
- package/dist/components/p-CbSUyv5B.js +2 -0
- package/dist/components/{p-CnK36Be0.js.map → p-CbSUyv5B.js.map} +1 -1
- package/dist/components/{p-Dhw_W8nk.js → p-Cc3ZUQlJ.js} +2 -2
- package/dist/components/p-Cc3ZUQlJ.js.map +1 -0
- package/dist/components/{p-OxdAzO4v.js → p-Ce4zy8q1.js} +2 -2
- package/dist/components/p-CeXf9-X3.js +2 -0
- package/dist/components/p-CeXf9-X3.js.map +1 -0
- package/dist/components/{p-CNDTHTf6.js → p-Cga6Ex0E.js} +2 -2
- package/dist/components/{p-CBQzTgvI.js → p-Cl9phSf0.js} +2 -2
- package/dist/components/{p-DzbEJN1A.js → p-ClJhuG5Y.js} +2 -2
- package/dist/components/{p-D_QtZZR8.js → p-CqW2eyiF.js} +2 -2
- package/dist/components/{p-CHUdAW1Q.js → p-Cus1Sigh.js} +2 -2
- package/dist/components/{p-CzbsTZt7.js → p-Cxr0IQjC.js} +2 -2
- package/dist/components/p-D7yBIPB6.js +2 -0
- package/dist/components/{p-DEyvEIYL.js.map → p-D7yBIPB6.js.map} +1 -1
- package/dist/components/p-D8rpKod8.js +2 -0
- package/dist/components/p-D8rpKod8.js.map +1 -0
- package/dist/components/{p-Da9VpZX2.js → p-DBwa1OXP.js} +2 -2
- package/dist/components/{p-Br0dx2uP.js → p-DK9Ex3aY.js} +2 -2
- package/dist/components/{p-CweS0FfJ.js → p-DLXXGgmf.js} +2 -2
- package/dist/components/{p-CvplapTD.js → p-DVd1TIxi.js} +2 -2
- package/dist/components/p-DZ58Sg5a.js.map +1 -1
- package/dist/components/{p-Dx7WcWW1.js → p-DgG9W9N4.js} +2 -2
- package/dist/components/{p-4DNyCYKM.js → p-DkfM55x8.js} +2 -2
- package/dist/components/p-DkikNSSO.js +2 -0
- package/dist/components/p-DkikNSSO.js.map +1 -0
- package/dist/components/{p-DjCnGxSd.js → p-Dryt3COt.js} +2 -2
- package/dist/components/{p-eo_pmPqp.js → p-Ds51RgCi.js} +2 -2
- package/dist/components/p-DtkLtKY0.js +2 -0
- package/dist/components/p-DtkLtKY0.js.map +1 -0
- package/dist/components/{p-DBZwI7HY.js → p-DvzI2A_M.js} +2 -2
- package/dist/components/p-J5x-QtlD.js +2 -0
- package/dist/components/{p-CIYJhyKt.js.map → p-J5x-QtlD.js.map} +1 -1
- package/dist/components/{p-C51ytXM6.js → p-Jaqdfw4E.js} +2 -2
- package/dist/components/{p-BMERUCe1.js → p-KBrC9IG4.js} +2 -2
- package/dist/components/p-MQ36mEgn.js +2 -0
- package/dist/components/p-MQ36mEgn.js.map +1 -0
- package/dist/components/{p-CXAa9TUM.js → p-PmcUwTQ_.js} +2 -2
- package/dist/components/p-TjXGRPik.js +2 -0
- package/dist/components/{p-ByoywoBH.js.map → p-TjXGRPik.js.map} +1 -1
- package/dist/components/{p-zZuAAiiI.js → p-bM3LH3kc.js} +2 -2
- package/dist/components/{p-CK2S28gU.js → p-ji09W9el.js} +2 -2
- package/dist/components/{p-DrjY8Mpy.js → p-neWTRxmf.js} +2 -2
- package/dist/components/{p-CMq-jKEI.js → p-rYePOPbJ.js} +2 -2
- package/dist/components/{p-C1QHxVvP.js → p-su6y4hLK.js} +2 -2
- package/dist/components/p-su6y4hLK.js.map +1 -0
- package/dist/components/{p-CKo2nySr.js → p-tNQ0YulU.js} +2 -2
- package/dist/components/{p-C8XJgV1n.js → p-x1wf38q3.js} +2 -2
- package/dist/docs/components.json +17368 -12812
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +3 -1
- package/dist/lib/utils/button-render.d.ts +1 -1
- package/dist/lib/utils/clock-time.d.ts +22 -0
- package/dist/lib/utils/date-filter-value.d.ts +4 -0
- package/dist/lib/utils/index.d.ts +3 -1
- package/dist/lib/utils/index.js +133 -0
- package/dist/lib/utils/index.js.map +4 -4
- package/dist/mcp-data/registry/bar-title.json +2 -2
- package/dist/mcp-data/registry/button-inverted.json +580 -0
- package/dist/mcp-data/registry/calendar.json +273 -0
- package/dist/mcp-data/registry/card-navigation.json +4 -2
- package/dist/mcp-data/registry/field.json +19 -14
- package/dist/mcp-data/registry/filter-menu.json +106 -23
- package/dist/mcp-data/registry/input-date.json +516 -0
- package/dist/mcp-data/registry/input-time.json +535 -0
- package/dist/mcp-data/registry/input.json +56 -8
- package/dist/mcp-data/registry/menu.json +22 -3
- package/dist/mcp-data/registry/registry.json +1434 -211
- package/dist/mcp-data/registry/select.json +105 -14
- package/dist/mcp-data/registry/shell-app.json +4 -3
- package/dist/mcp-data/registry/tab-group.json +20 -3
- package/dist/mcp-data/registry/table-filter.json +26 -6
- package/dist/mcp-data/registry/table-group.json +59 -7
- package/dist/mcp-data/registry/table-preferences.json +511 -0
- package/dist/mcp-data/registry/table-saved-views.json +50 -10
- package/dist/mcp-data/registry/table-search.json +24 -6
- package/dist/mcp-data/registry/table-sort.json +22 -4
- package/dist/mcp-data/registry/table-toolbar.json +26 -6
- package/dist/mcp-data/registry/table.json +70 -4
- package/dist/mcp-data/registry/textarea.json +2 -2
- package/dist/mcp-data/registry/time-picker.json +259 -0
- package/dist/react/components.d.ts +6 -0
- package/dist/react/components.js +6 -0
- package/dist/react/ds-button-inverted.d.ts +13 -0
- package/dist/react/ds-button-inverted.js +15 -0
- package/dist/react/ds-calendar.d.ts +12 -0
- package/dist/react/ds-calendar.js +12 -0
- package/dist/react/ds-field.d.ts +1 -1
- package/dist/react/ds-input-date.d.ts +12 -0
- package/dist/react/ds-input-date.js +12 -0
- package/dist/react/ds-input-time.d.ts +12 -0
- package/dist/react/ds-input-time.js +12 -0
- package/dist/react/ds-table-preferences.d.ts +21 -0
- package/dist/react/ds-table-preferences.js +23 -0
- package/dist/react/ds-table.d.ts +1 -0
- package/dist/react/ds-table.js +1 -0
- package/dist/react/ds-time-picker.d.ts +12 -0
- package/dist/react/ds-time-picker.js +12 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +1 -0
- package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +2 -0
- package/dist/types/components/ButtonInverted/ButtonInverted.d.ts +83 -0
- package/dist/types/components/ButtonInverted/index.d.ts +2 -0
- package/dist/types/components/Calendar/Calendar.d.ts +32 -0
- package/dist/types/components/Calendar/calendar-grid.d.ts +19 -0
- package/dist/types/components/Field/Field.d.ts +7 -2
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +16 -10
- package/dist/types/components/Input/Input.d.ts +10 -0
- package/dist/types/components/InputDate/InputDate.d.ts +78 -0
- package/dist/types/components/InputTime/InputTime.d.ts +80 -0
- package/dist/types/components/Menu/Menu.d.ts +2 -0
- package/dist/types/components/Select/Select.d.ts +13 -2
- package/dist/types/components/ShellApp/shell-app-types.d.ts +3 -1
- package/dist/types/components/TabGroup/TabGroup.d.ts +1 -0
- package/dist/types/components/Table/Table.d.ts +8 -0
- package/dist/types/components/TableFilter/TableFilter.d.ts +2 -0
- package/dist/types/components/TableGroup/TableGroup.d.ts +5 -0
- package/dist/types/components/TablePreferences/TablePreferences.d.ts +56 -0
- package/dist/types/components/TableSavedViews/TableSavedViews.d.ts +4 -0
- package/dist/types/components/TableSearch/TableSearch.d.ts +2 -0
- package/dist/types/components/TableSort/TableSort.d.ts +2 -0
- package/dist/types/components/TableToolbar/TableToolbar.d.ts +2 -0
- package/dist/types/components/TimePicker/TimePicker.d.ts +33 -0
- package/dist/types/components.d.ts +1299 -66
- package/dist/types/utils/button-render.d.ts +1 -1
- package/dist/types/utils/clock-time.d.ts +23 -0
- package/dist/types/utils/date-filter-value.d.ts +4 -0
- package/dist/types/utils/index.d.ts +3 -1
- package/dist/vue/components.d.ts +6 -0
- package/dist/vue/components.js +6 -0
- package/dist/vue/ds-button-inverted.d.ts +3 -0
- package/dist/vue/ds-button-inverted.js +33 -0
- package/dist/vue/ds-calendar.d.ts +3 -0
- package/dist/vue/ds-calendar.js +16 -0
- package/dist/vue/ds-filter-menu.js +5 -0
- package/dist/vue/ds-input-date.d.ts +3 -0
- package/dist/vue/ds-input-date.js +31 -0
- package/dist/vue/ds-input-time.d.ts +3 -0
- package/dist/vue/ds-input-time.js +32 -0
- package/dist/vue/ds-input.js +2 -0
- package/dist/vue/ds-menu.js +1 -0
- package/dist/vue/ds-select.js +5 -0
- package/dist/vue/ds-tab-group.js +1 -0
- package/dist/vue/ds-table-filter.js +1 -0
- package/dist/vue/ds-table-group.js +3 -0
- package/dist/vue/ds-table-preferences.d.ts +3 -0
- package/dist/vue/ds-table-preferences.js +45 -0
- package/dist/vue/ds-table-saved-views.js +2 -0
- package/dist/vue/ds-table-search.js +1 -0
- package/dist/vue/ds-table-sort.js +1 -0
- package/dist/vue/ds-table-toolbar.js +2 -1
- package/dist/vue/ds-table.js +5 -0
- package/dist/vue/ds-time-picker.d.ts +3 -0
- package/dist/vue/ds-time-picker.js +16 -0
- package/package.json +1 -1
- package/dist/components/p-B_nPct4G.js +0 -2
- package/dist/components/p-B_nPct4G.js.map +0 -1
- package/dist/components/p-BlWNMytv.js +0 -2
- package/dist/components/p-BlWNMytv.js.map +0 -1
- package/dist/components/p-ByoywoBH.js +0 -2
- package/dist/components/p-C1QHxVvP.js.map +0 -1
- package/dist/components/p-CHBuzAYH.js +0 -2
- package/dist/components/p-CIYJhyKt.js +0 -2
- package/dist/components/p-CUL5_8JM.js +0 -2
- package/dist/components/p-CUL5_8JM.js.map +0 -1
- package/dist/components/p-CnK36Be0.js +0 -2
- package/dist/components/p-Cw_npFwN.js +0 -2
- package/dist/components/p-Cw_npFwN.js.map +0 -1
- package/dist/components/p-DEyvEIYL.js +0 -2
- package/dist/components/p-DVWOUQfT.js +0 -2
- package/dist/components/p-DVWOUQfT.js.map +0 -1
- package/dist/components/p-Dhw_W8nk.js.map +0 -1
- package/dist/components/p-LZ8F08Fj.js.map +0 -1
- package/dist/components/p-xxuHxP3u.js +0 -2
- package/dist/components/p-xxuHxP3u.js.map +0 -1
- package/dist/types/components/FilterMenu/filter-menu-calendar.d.ts +0 -13
- /package/dist/components/{p-B5QVra1K.js.map → p-2GVGhrh0.js.map} +0 -0
- /package/dist/components/{p-BqGdNrVl.js.map → p-8oRkhvjy.js.map} +0 -0
- /package/dist/components/{p-CqeMumqy.js.map → p-BV5T1hzN.js.map} +0 -0
- /package/dist/components/{p-CIoeHcCk.js.map → p-BWfzaSc3.js.map} +0 -0
- /package/dist/components/{p-AkSwrAKR.js.map → p-BgLI9JoT.js.map} +0 -0
- /package/dist/components/{p-BwsS_Hyr.js.map → p-C-dHtQMi.js.map} +0 -0
- /package/dist/components/{p-CoE7yza3.js.map → p-C2JnoaWI.js.map} +0 -0
- /package/dist/components/{p-lv4YQEsa.js.map → p-C4m8y9ki.js.map} +0 -0
- /package/dist/components/{p-BEttT0UB.js.map → p-CDJ2Ntcq.js.map} +0 -0
- /package/dist/components/{p-Dj296RmE.js.map → p-CMQUuGvl.js.map} +0 -0
- /package/dist/components/{p-DyyfWSLB.js.map → p-CQ5RwY2C.js.map} +0 -0
- /package/dist/components/{p-CQqZgTYk.js.map → p-CWPT3aOB.js.map} +0 -0
- /package/dist/components/{p-OxdAzO4v.js.map → p-Ce4zy8q1.js.map} +0 -0
- /package/dist/components/{p-CNDTHTf6.js.map → p-Cga6Ex0E.js.map} +0 -0
- /package/dist/components/{p-CBQzTgvI.js.map → p-Cl9phSf0.js.map} +0 -0
- /package/dist/components/{p-DzbEJN1A.js.map → p-ClJhuG5Y.js.map} +0 -0
- /package/dist/components/{p-D_QtZZR8.js.map → p-CqW2eyiF.js.map} +0 -0
- /package/dist/components/{p-CHUdAW1Q.js.map → p-Cus1Sigh.js.map} +0 -0
- /package/dist/components/{p-CzbsTZt7.js.map → p-Cxr0IQjC.js.map} +0 -0
- /package/dist/components/{p-Da9VpZX2.js.map → p-DBwa1OXP.js.map} +0 -0
- /package/dist/components/{p-Br0dx2uP.js.map → p-DK9Ex3aY.js.map} +0 -0
- /package/dist/components/{p-CweS0FfJ.js.map → p-DLXXGgmf.js.map} +0 -0
- /package/dist/components/{p-CvplapTD.js.map → p-DVd1TIxi.js.map} +0 -0
- /package/dist/components/{p-Dx7WcWW1.js.map → p-DgG9W9N4.js.map} +0 -0
- /package/dist/components/{p-4DNyCYKM.js.map → p-DkfM55x8.js.map} +0 -0
- /package/dist/components/{p-DjCnGxSd.js.map → p-Dryt3COt.js.map} +0 -0
- /package/dist/components/{p-eo_pmPqp.js.map → p-Ds51RgCi.js.map} +0 -0
- /package/dist/components/{p-DBZwI7HY.js.map → p-DvzI2A_M.js.map} +0 -0
- /package/dist/components/{p-C51ytXM6.js.map → p-Jaqdfw4E.js.map} +0 -0
- /package/dist/components/{p-BMERUCe1.js.map → p-KBrC9IG4.js.map} +0 -0
- /package/dist/components/{p-CXAa9TUM.js.map → p-PmcUwTQ_.js.map} +0 -0
- /package/dist/components/{p-zZuAAiiI.js.map → p-bM3LH3kc.js.map} +0 -0
- /package/dist/components/{p-CK2S28gU.js.map → p-ji09W9el.js.map} +0 -0
- /package/dist/components/{p-DrjY8Mpy.js.map → p-neWTRxmf.js.map} +0 -0
- /package/dist/components/{p-CMq-jKEI.js.map → p-rYePOPbJ.js.map} +0 -0
- /package/dist/components/{p-CKo2nySr.js.map → p-tNQ0YulU.js.map} +0 -0
- /package/dist/components/{p-C8XJgV1n.js.map → p-x1wf38q3.js.map} +0 -0
|
@@ -2230,6 +2230,221 @@
|
|
|
2230
2230
|
"text"
|
|
2231
2231
|
]
|
|
2232
2232
|
},
|
|
2233
|
+
{
|
|
2234
|
+
"name": "button-inverted",
|
|
2235
|
+
"title": "ButtonInverted",
|
|
2236
|
+
"description": "Single-recipe filled command button with an inverted background and primary foreground for actions that must remain legible across ordinary surfaces.",
|
|
2237
|
+
"type": "registry:ui",
|
|
2238
|
+
"meta": {
|
|
2239
|
+
"library": "@ds-mo/ui",
|
|
2240
|
+
"distribution": "npm",
|
|
2241
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/button-inverted",
|
|
2242
|
+
"source": "src/wc/components/ButtonInverted/ButtonInverted.tsx",
|
|
2243
|
+
"intentStatus": "complete",
|
|
2244
|
+
"intent": {
|
|
2245
|
+
"audience": "general",
|
|
2246
|
+
"status": "stable",
|
|
2247
|
+
"summary": "Single-recipe filled command button with an inverted background and primary foreground for actions that must remain legible across ordinary surfaces.",
|
|
2248
|
+
"useWhen": [
|
|
2249
|
+
"A command needs the filled button structure with the fixed inverted background treatment.",
|
|
2250
|
+
"The action should use primary foreground content on the inverted surface without exposing intent or contrast choices.",
|
|
2251
|
+
"A compact, icon-only inverted action needs an explicit accessible name.",
|
|
2252
|
+
"The command has closely related alternatives and needs split mode while keeping the same inverted recipe."
|
|
2253
|
+
],
|
|
2254
|
+
"avoidWhen": [
|
|
2255
|
+
"The action needs semantic intent or contrast-specific filled treatments; use ButtonFilled.",
|
|
2256
|
+
"The action is unfilled icon-only shell, navigation, overflow, or tool-rail chrome; use ButtonUnfilled.",
|
|
2257
|
+
"The element represents navigation rather than a command.",
|
|
2258
|
+
"The content is a persistent selected state rather than an action."
|
|
2259
|
+
],
|
|
2260
|
+
"alternatives": [
|
|
2261
|
+
{
|
|
2262
|
+
"when": "The action's consequence needs a semantic intent or the fill must adapt through contrast.",
|
|
2263
|
+
"component": "component:ds-button-filled",
|
|
2264
|
+
"reason": "ButtonFilled owns intent and contrast-aware filled command treatments."
|
|
2265
|
+
},
|
|
2266
|
+
{
|
|
2267
|
+
"when": "The action is shell, navigation, overflow, or tool-rail chrome.",
|
|
2268
|
+
"component": "component:ds-button-unfilled",
|
|
2269
|
+
"reason": "ButtonUnfilled owns unfilled chrome, active state, borders, and surface-aware interaction states."
|
|
2270
|
+
},
|
|
2271
|
+
{
|
|
2272
|
+
"when": "The user is choosing a destination in application navigation.",
|
|
2273
|
+
"component": "component:ds-panel-nav",
|
|
2274
|
+
"reason": "PanelNav owns destination selection and navigation semantics."
|
|
2275
|
+
}
|
|
2276
|
+
],
|
|
2277
|
+
"commonlyComposedWith": [
|
|
2278
|
+
"component:ds-modal",
|
|
2279
|
+
"component:ds-field",
|
|
2280
|
+
"component:ds-menu"
|
|
2281
|
+
],
|
|
2282
|
+
"patterns": [
|
|
2283
|
+
"pattern:menu-trigger"
|
|
2284
|
+
],
|
|
2285
|
+
"accessibility": [
|
|
2286
|
+
"Provide an explicit accessible name for icon-only buttons.",
|
|
2287
|
+
"In split mode, provide menuAriaLabel for the appended ChevronDown segment, pass controls with the Menu id, and synchronize expanded with the Menu open state.",
|
|
2288
|
+
"Set hasMenu when the action opens a Menu; it implies aria-haspopup of menu and renders the trailing chevron. Pass controls with the Menu id and expanded from the same open state given to Menu.",
|
|
2289
|
+
"Use haspopup directly for a non-menu popup such as a dialog; that case gets no chevron.",
|
|
2290
|
+
"Loading keeps the action focused and named, exposes busy and disabled state, and blocks activation.",
|
|
2291
|
+
"Use native submit behavior for form submission and handle the form submit event rather than submitting from the button click event."
|
|
2292
|
+
],
|
|
2293
|
+
"states": [
|
|
2294
|
+
"Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
|
|
2295
|
+
"The inverted background and primary foreground are fixed; ButtonInverted has no intent, contrast, parent-surface, or optional-border props.",
|
|
2296
|
+
"Every button has a minimum inline size equal to its resolved height. Short labels therefore form a square control while longer labels continue to hug their content.",
|
|
2297
|
+
"Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs.",
|
|
2298
|
+
"Rounded changes only the control radius to the half-radius treatment; it does not change the inverted recipe, size, variant, or interaction semantics.",
|
|
2299
|
+
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
2300
|
+
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
2301
|
+
"Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
|
|
2302
|
+
"ButtonInverted has no active, pressed, or selected state; a filled action is a command, not a toggle or persistent selection.",
|
|
2303
|
+
"An open popup is a transient pressed state. While surfaceOpen is true the pressed wash is held for the popup's complete rendered lifecycle without introducing selected styling.",
|
|
2304
|
+
"Split mode supports label, icon, and icon-label primary segments. The primary segment emits dsClick and the appended menu segment emits dsMenuClick."
|
|
2305
|
+
],
|
|
2306
|
+
"responsiveBehavior": [
|
|
2307
|
+
"Use fill width only when the parent layout calls for a full-width action, commonly on narrow form layouts.",
|
|
2308
|
+
"Choose density from the containing layout so the inverted action matches neighboring controls."
|
|
2309
|
+
],
|
|
2310
|
+
"frameworkCaveats": {
|
|
2311
|
+
"customElements": [
|
|
2312
|
+
"For form submission, use the native submit type and listen to the form submit event; use dsClick for non-submit commands."
|
|
2313
|
+
],
|
|
2314
|
+
"react": [
|
|
2315
|
+
"Keep async state in the owner and pass it to the loading state until the command settles."
|
|
2316
|
+
],
|
|
2317
|
+
"angular": [
|
|
2318
|
+
"Keep async state in the owner and pass it to the loading state until the command settles."
|
|
2319
|
+
]
|
|
2320
|
+
},
|
|
2321
|
+
"references": [
|
|
2322
|
+
{
|
|
2323
|
+
"label": "Storybook examples",
|
|
2324
|
+
"path": "src/wc/components/ButtonInverted/ButtonInverted.stories.ts"
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
"label": "Surface ownership and trigger state",
|
|
2328
|
+
"path": "src/docs/SurfaceOwnership.mdx"
|
|
2329
|
+
}
|
|
2330
|
+
]
|
|
2331
|
+
},
|
|
2332
|
+
"props": {
|
|
2333
|
+
"ariaLabel": {
|
|
2334
|
+
"type": "string | null",
|
|
2335
|
+
"required": false
|
|
2336
|
+
},
|
|
2337
|
+
"controls": {
|
|
2338
|
+
"type": "string | undefined",
|
|
2339
|
+
"required": false
|
|
2340
|
+
},
|
|
2341
|
+
"expanded": {
|
|
2342
|
+
"type": "boolean | undefined",
|
|
2343
|
+
"required": false
|
|
2344
|
+
},
|
|
2345
|
+
"hasMenu": {
|
|
2346
|
+
"type": "boolean",
|
|
2347
|
+
"required": false
|
|
2348
|
+
},
|
|
2349
|
+
"haspopup": {
|
|
2350
|
+
"type": "ButtonInvertedPopup | undefined",
|
|
2351
|
+
"required": false
|
|
2352
|
+
},
|
|
2353
|
+
"icon": {
|
|
2354
|
+
"type": "string",
|
|
2355
|
+
"required": false
|
|
2356
|
+
},
|
|
2357
|
+
"insetDepth": {
|
|
2358
|
+
"type": "ControlInsetDepth",
|
|
2359
|
+
"required": false
|
|
2360
|
+
},
|
|
2361
|
+
"isInactive": {
|
|
2362
|
+
"type": "boolean",
|
|
2363
|
+
"required": false
|
|
2364
|
+
},
|
|
2365
|
+
"isInset": {
|
|
2366
|
+
"type": "boolean",
|
|
2367
|
+
"required": false
|
|
2368
|
+
},
|
|
2369
|
+
"isLoading": {
|
|
2370
|
+
"type": "boolean",
|
|
2371
|
+
"required": false
|
|
2372
|
+
},
|
|
2373
|
+
"label": {
|
|
2374
|
+
"type": "string",
|
|
2375
|
+
"required": false
|
|
2376
|
+
},
|
|
2377
|
+
"labelEmphasis": {
|
|
2378
|
+
"type": "boolean",
|
|
2379
|
+
"required": false
|
|
2380
|
+
},
|
|
2381
|
+
"menuAriaLabel": {
|
|
2382
|
+
"type": "string",
|
|
2383
|
+
"required": false
|
|
2384
|
+
},
|
|
2385
|
+
"pressScale": {
|
|
2386
|
+
"type": "boolean",
|
|
2387
|
+
"required": false
|
|
2388
|
+
},
|
|
2389
|
+
"rounded": {
|
|
2390
|
+
"type": "boolean",
|
|
2391
|
+
"required": false
|
|
2392
|
+
},
|
|
2393
|
+
"size": {
|
|
2394
|
+
"type": "ButtonInvertedSize",
|
|
2395
|
+
"required": false
|
|
2396
|
+
},
|
|
2397
|
+
"split": {
|
|
2398
|
+
"type": "boolean",
|
|
2399
|
+
"required": false
|
|
2400
|
+
},
|
|
2401
|
+
"surfaceOpen": {
|
|
2402
|
+
"type": "boolean | undefined",
|
|
2403
|
+
"required": false
|
|
2404
|
+
},
|
|
2405
|
+
"type": {
|
|
2406
|
+
"type": "'button' | 'submit' | 'reset'",
|
|
2407
|
+
"required": false
|
|
2408
|
+
},
|
|
2409
|
+
"variant": {
|
|
2410
|
+
"type": "ButtonInvertedVariant",
|
|
2411
|
+
"required": false
|
|
2412
|
+
},
|
|
2413
|
+
"width": {
|
|
2414
|
+
"type": "ButtonInvertedWidth",
|
|
2415
|
+
"required": false
|
|
2416
|
+
}
|
|
2417
|
+
},
|
|
2418
|
+
"events": [
|
|
2419
|
+
{
|
|
2420
|
+
"name": "dsClick",
|
|
2421
|
+
"detail": "MouseEvent"
|
|
2422
|
+
},
|
|
2423
|
+
{
|
|
2424
|
+
"name": "dsMenuClick",
|
|
2425
|
+
"detail": "MouseEvent"
|
|
2426
|
+
}
|
|
2427
|
+
],
|
|
2428
|
+
"slots": [],
|
|
2429
|
+
"exports": {
|
|
2430
|
+
"customElement": "ds-button-inverted",
|
|
2431
|
+
"react": "DsButtonInverted",
|
|
2432
|
+
"vue": "DsButtonInverted",
|
|
2433
|
+
"angular": "DsButtonInverted"
|
|
2434
|
+
}
|
|
2435
|
+
},
|
|
2436
|
+
"dependencies": [
|
|
2437
|
+
"@ds-mo/ui",
|
|
2438
|
+
"@ds-mo/tokens",
|
|
2439
|
+
"@ds-mo/icons"
|
|
2440
|
+
],
|
|
2441
|
+
"registryDependencies": [
|
|
2442
|
+
"badge",
|
|
2443
|
+
"icon",
|
|
2444
|
+
"loader",
|
|
2445
|
+
"text"
|
|
2446
|
+
]
|
|
2447
|
+
},
|
|
2233
2448
|
{
|
|
2234
2449
|
"name": "button-unfilled",
|
|
2235
2450
|
"title": "ButtonUnfilled",
|
|
@@ -2498,103 +2713,230 @@
|
|
|
2498
2713
|
]
|
|
2499
2714
|
},
|
|
2500
2715
|
{
|
|
2501
|
-
"name": "
|
|
2502
|
-
"title": "
|
|
2503
|
-
"description": "
|
|
2716
|
+
"name": "calendar",
|
|
2717
|
+
"title": "Calendar",
|
|
2718
|
+
"description": "Month calendar grid for choosing one calendar date or an inclusive date range, reused by form date fields and filter range selection.",
|
|
2504
2719
|
"type": "registry:ui",
|
|
2505
2720
|
"meta": {
|
|
2506
2721
|
"library": "@ds-mo/ui",
|
|
2507
2722
|
"distribution": "npm",
|
|
2508
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/
|
|
2509
|
-
"source": "src/wc/components/
|
|
2723
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/calendar",
|
|
2724
|
+
"source": "src/wc/components/Calendar/Calendar.tsx",
|
|
2510
2725
|
"intentStatus": "complete",
|
|
2511
2726
|
"intent": {
|
|
2512
2727
|
"audience": "general",
|
|
2513
2728
|
"status": "experimental",
|
|
2514
|
-
"summary": "
|
|
2729
|
+
"summary": "Month calendar grid for choosing one calendar date or an inclusive date range, reused by form date fields and filter range selection.",
|
|
2515
2730
|
"useWhen": [
|
|
2516
|
-
"
|
|
2517
|
-
"
|
|
2518
|
-
"
|
|
2731
|
+
"A user picks one calendar day from a month grid.",
|
|
2732
|
+
"A user builds an inclusive start and end date by choosing two days.",
|
|
2733
|
+
"A date field or filter needs the shared month navigation, weekday headings, and selected-day treatment."
|
|
2519
2734
|
],
|
|
2520
2735
|
"avoidWhen": [
|
|
2521
|
-
"The
|
|
2522
|
-
"The
|
|
2523
|
-
"The
|
|
2524
|
-
"Rows require descriptions, nested controls, menus, or selection state instead of one direct action."
|
|
2736
|
+
"The user types a date without opening a calendar; the owning field keeps that editable value.",
|
|
2737
|
+
"The user chooses a relative preset such as last 7 days rather than fixed calendar days.",
|
|
2738
|
+
"The popup also has to host filter categories, search, or apply actions; that surface stays with FilterMenu."
|
|
2525
2739
|
],
|
|
2526
2740
|
"alternatives": [
|
|
2527
2741
|
{
|
|
2528
|
-
"when": "The
|
|
2529
|
-
"component": "component:ds-
|
|
2530
|
-
"reason": "
|
|
2742
|
+
"when": "The date is a form field that can be typed or picked.",
|
|
2743
|
+
"component": "component:ds-input-date",
|
|
2744
|
+
"reason": "InputDate owns the editable field, form association, and the calendar popup."
|
|
2531
2745
|
},
|
|
2532
2746
|
{
|
|
2533
|
-
"when": "The
|
|
2534
|
-
"component": "component:ds-
|
|
2535
|
-
"reason": "
|
|
2747
|
+
"when": "The value is a clock time rather than a calendar date.",
|
|
2748
|
+
"component": "component:ds-time-picker",
|
|
2749
|
+
"reason": "TimePicker owns bounded hour, minute, and AM/PM lists with the same 32px tile geometry."
|
|
2750
|
+
},
|
|
2751
|
+
{
|
|
2752
|
+
"when": "The user chooses relative presets or mixed filter families from one trigger.",
|
|
2753
|
+
"component": "component:ds-filter-menu",
|
|
2754
|
+
"reason": "FilterMenu owns relative date presets and hosts this calendar only for fixed ranges."
|
|
2536
2755
|
}
|
|
2537
2756
|
],
|
|
2538
2757
|
"commonlyComposedWith": [
|
|
2539
|
-
"component:ds-
|
|
2758
|
+
"component:ds-input-date",
|
|
2759
|
+
"component:ds-filter-menu",
|
|
2760
|
+
"component:ds-button-unfilled",
|
|
2540
2761
|
"component:ds-text"
|
|
2541
2762
|
],
|
|
2542
2763
|
"accessibility": [
|
|
2543
|
-
"
|
|
2544
|
-
"
|
|
2545
|
-
"
|
|
2546
|
-
"
|
|
2547
|
-
"Keep item labels concise; a visible trailing value participates in the action's accessible name."
|
|
2764
|
+
"The month grid is labelled with the visible month and year. Days are grid cells with an accessible date name.",
|
|
2765
|
+
"The grid keeps one tab stop. Arrow keys move by day or week, Home and End move within the week, and Page Up or Page Down change month.",
|
|
2766
|
+
"In range mode, the first chosen day applies immediately as a one-day range. Hovering or focusing another day previews the inclusive span without changing the value until the second activation.",
|
|
2767
|
+
"Month navigation buttons are named Previous month and Next month. Inactive calendars disable day and month controls."
|
|
2548
2768
|
],
|
|
2549
2769
|
"states": [
|
|
2550
|
-
"
|
|
2551
|
-
"
|
|
2552
|
-
"
|
|
2770
|
+
"Single selection paints the current value with the shared interaction-fill selected wash and primary text. A committed range paints inclusive days with the faint brand fill and both edges boldly.",
|
|
2771
|
+
"Today uses emphasized primary text without becoming selected on its own.",
|
|
2772
|
+
"Days outside the visible month remain in the six-week grid and use tertiary text. Optional min and max dates disable days outside that inclusive bound.",
|
|
2773
|
+
"After the first range day is chosen, that day keeps the shared pressed overlay. Hovering or focusing toward another day paints the inclusive span with the shared hover overlay on top of the previous committed range, which stays visible until the replacement is completed. Completing the end day orders the two dates inclusively and replaces those overlays with brand fill."
|
|
2553
2774
|
],
|
|
2554
2775
|
"responsiveBehavior": [
|
|
2555
|
-
"The
|
|
2556
|
-
"Long labels wrap while trailing values remain visible; the page owns rail width and movement below primary content.",
|
|
2557
|
-
"Groups retain their order when the parent layout moves the complete card between desktop and mobile regions."
|
|
2776
|
+
"The grid fills the width supplied by its owner. Seven equal day columns and the shared 4px gaps are owned here; the owner supplies the popup or pane width."
|
|
2558
2777
|
],
|
|
2559
2778
|
"frameworkCaveats": {
|
|
2560
2779
|
"customElements": [
|
|
2561
|
-
"
|
|
2562
|
-
"Listen for dsAction and inspect sectionId, itemId, item, and the original pointer event."
|
|
2780
|
+
"Listen for dsChange. Single mode emits YYYY-MM-DD. Range mode emits range:start/end using the shared date-filter string."
|
|
2563
2781
|
],
|
|
2564
2782
|
"react": [
|
|
2565
|
-
"
|
|
2566
|
-
"Prevent the event only when replacing native navigation for an item with href."
|
|
2567
|
-
],
|
|
2568
|
-
"angular": [
|
|
2569
|
-
"Bind [sections] through the generated standalone adapter and inspect $event.detail from (dsAction).",
|
|
2570
|
-
"Keep product data and activation consequences in the Angular owner rather than embedding them in the component contract."
|
|
2783
|
+
"Use DsCalendar, bind value, and handle onDsChange."
|
|
2571
2784
|
]
|
|
2572
2785
|
},
|
|
2573
2786
|
"references": [
|
|
2574
2787
|
{
|
|
2575
|
-
"label": "Storybook
|
|
2576
|
-
"path": "src/wc/components/
|
|
2577
|
-
},
|
|
2578
|
-
{
|
|
2579
|
-
"label": "Rendered semantics, interaction, and geometry coverage",
|
|
2580
|
-
"path": "tests/e2e/card-action-center.spec.ts"
|
|
2788
|
+
"label": "Storybook examples",
|
|
2789
|
+
"path": "src/wc/components/Calendar/Calendar.stories.ts"
|
|
2581
2790
|
}
|
|
2582
2791
|
]
|
|
2583
2792
|
},
|
|
2584
2793
|
"props": {
|
|
2585
|
-
"
|
|
2586
|
-
"type": "
|
|
2794
|
+
"autoFocus": {
|
|
2795
|
+
"type": "boolean",
|
|
2587
2796
|
"required": false
|
|
2588
2797
|
},
|
|
2589
|
-
"
|
|
2590
|
-
"type": "
|
|
2798
|
+
"isInactive": {
|
|
2799
|
+
"type": "boolean",
|
|
2800
|
+
"required": false
|
|
2801
|
+
},
|
|
2802
|
+
"max": {
|
|
2803
|
+
"type": "string | undefined",
|
|
2804
|
+
"required": false
|
|
2805
|
+
},
|
|
2806
|
+
"min": {
|
|
2807
|
+
"type": "string | undefined",
|
|
2808
|
+
"required": false
|
|
2809
|
+
},
|
|
2810
|
+
"selectionMode": {
|
|
2811
|
+
"type": "CalendarSelectionMode",
|
|
2812
|
+
"required": false
|
|
2813
|
+
},
|
|
2814
|
+
"value": {
|
|
2815
|
+
"type": "string",
|
|
2591
2816
|
"required": false
|
|
2592
2817
|
}
|
|
2593
2818
|
},
|
|
2594
2819
|
"events": [
|
|
2595
2820
|
{
|
|
2596
|
-
"name": "
|
|
2597
|
-
"detail": "
|
|
2821
|
+
"name": "dsChange",
|
|
2822
|
+
"detail": "string"
|
|
2823
|
+
}
|
|
2824
|
+
],
|
|
2825
|
+
"slots": [],
|
|
2826
|
+
"exports": {
|
|
2827
|
+
"customElement": "ds-calendar",
|
|
2828
|
+
"react": "DsCalendar",
|
|
2829
|
+
"vue": "DsCalendar",
|
|
2830
|
+
"angular": "DsCalendar"
|
|
2831
|
+
}
|
|
2832
|
+
},
|
|
2833
|
+
"dependencies": [
|
|
2834
|
+
"@ds-mo/ui",
|
|
2835
|
+
"@ds-mo/tokens"
|
|
2836
|
+
],
|
|
2837
|
+
"registryDependencies": [
|
|
2838
|
+
"button-unfilled",
|
|
2839
|
+
"text"
|
|
2840
|
+
]
|
|
2841
|
+
},
|
|
2842
|
+
{
|
|
2843
|
+
"name": "card-action-center",
|
|
2844
|
+
"title": "CardActionCenter",
|
|
2845
|
+
"description": "Compact bordered card that groups overview-page actions, optional values or status tags, and native destinations into named sections.",
|
|
2846
|
+
"type": "registry:ui",
|
|
2847
|
+
"meta": {
|
|
2848
|
+
"library": "@ds-mo/ui",
|
|
2849
|
+
"distribution": "npm",
|
|
2850
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-action-center",
|
|
2851
|
+
"source": "src/wc/components/CardActionCenter/CardActionCenter.tsx",
|
|
2852
|
+
"intentStatus": "complete",
|
|
2853
|
+
"intent": {
|
|
2854
|
+
"audience": "general",
|
|
2855
|
+
"status": "experimental",
|
|
2856
|
+
"summary": "Compact bordered card that groups overview-page actions, optional values or status tags, and native destinations into named sections.",
|
|
2857
|
+
"useWhen": [
|
|
2858
|
+
"An overview rail needs a compact action center with multiple named groups.",
|
|
2859
|
+
"Action rows need optional counts or short values aligned at the trailing edge.",
|
|
2860
|
+
"Related reports or resource destinations belong beside attention items in one bounded surface."
|
|
2861
|
+
],
|
|
2862
|
+
"avoidWhen": [
|
|
2863
|
+
"The complete card leads to one destination; use CardNavigation.",
|
|
2864
|
+
"The surface edits settings in place; use CardSetting.",
|
|
2865
|
+
"The content is a chart, legend, metric visualization, or other data-visualization composition; use CardChart or CardOverview.",
|
|
2866
|
+
"Rows require descriptions, nested controls, menus, or selection state instead of one direct action."
|
|
2867
|
+
],
|
|
2868
|
+
"alternatives": [
|
|
2869
|
+
{
|
|
2870
|
+
"when": "The entire surface represents one destination.",
|
|
2871
|
+
"component": "component:ds-card-navigation",
|
|
2872
|
+
"reason": "CardNavigation provides the single native-link card contract."
|
|
2873
|
+
},
|
|
2874
|
+
{
|
|
2875
|
+
"when": "The card presents page-level score and metric summaries.",
|
|
2876
|
+
"component": "component:ds-card-overview",
|
|
2877
|
+
"reason": "CardOverview owns summary metrics, comparison periods, and selectable metric cells."
|
|
2878
|
+
}
|
|
2879
|
+
],
|
|
2880
|
+
"commonlyComposedWith": [
|
|
2881
|
+
"component:ds-tag",
|
|
2882
|
+
"component:ds-text"
|
|
2883
|
+
],
|
|
2884
|
+
"accessibility": [
|
|
2885
|
+
"Each non-empty group is a section labelled by an h2 heading, and each row is a native button or link.",
|
|
2886
|
+
"Use href for real destinations so link context menus, modified clicks, and native browser semantics remain available.",
|
|
2887
|
+
"Prevent the cancelable dsAction event only when an application router takes ownership of the same link activation.",
|
|
2888
|
+
"Inactive items become disabled buttons and are removed from keyboard navigation rather than exposing a false destination.",
|
|
2889
|
+
"Keep item labels concise; a visible trailing value participates in the action's accessible name."
|
|
2890
|
+
],
|
|
2891
|
+
"states": [
|
|
2892
|
+
"Rows expose distinct rest, hover, pressed, keyboard-focus, and inactive states.",
|
|
2893
|
+
"An empty sections array or groups with no items render the configured empty message.",
|
|
2894
|
+
"The application owns loading, error, permission, routing, and post-activation consequences and reflects availability through the supplied item data."
|
|
2895
|
+
],
|
|
2896
|
+
"responsiveBehavior": [
|
|
2897
|
+
"The card fills its parent width and never establishes a product breakpoint.",
|
|
2898
|
+
"Long labels wrap while trailing values remain visible; the page owns rail width and movement below primary content.",
|
|
2899
|
+
"Groups retain their order when the parent layout moves the complete card between desktop and mobile regions."
|
|
2900
|
+
],
|
|
2901
|
+
"frameworkCaveats": {
|
|
2902
|
+
"customElements": [
|
|
2903
|
+
"Assign sections as a JavaScript property; complex arrays are not supported as string attributes.",
|
|
2904
|
+
"Listen for dsAction and inspect sectionId, itemId, item, and the original pointer event."
|
|
2905
|
+
],
|
|
2906
|
+
"react": [
|
|
2907
|
+
"Pass sections as an array and handle onDsAction for product actions or client-side routing.",
|
|
2908
|
+
"Prevent the event only when replacing native navigation for an item with href."
|
|
2909
|
+
],
|
|
2910
|
+
"angular": [
|
|
2911
|
+
"Bind [sections] through the generated standalone adapter and inspect $event.detail from (dsAction).",
|
|
2912
|
+
"Keep product data and activation consequences in the Angular owner rather than embedding them in the component contract."
|
|
2913
|
+
]
|
|
2914
|
+
},
|
|
2915
|
+
"references": [
|
|
2916
|
+
{
|
|
2917
|
+
"label": "Storybook grouped, value, and empty examples",
|
|
2918
|
+
"path": "src/wc/components/CardActionCenter/CardActionCenter.stories.ts"
|
|
2919
|
+
},
|
|
2920
|
+
{
|
|
2921
|
+
"label": "Rendered semantics, interaction, and geometry coverage",
|
|
2922
|
+
"path": "tests/e2e/card-action-center.spec.ts"
|
|
2923
|
+
}
|
|
2924
|
+
]
|
|
2925
|
+
},
|
|
2926
|
+
"props": {
|
|
2927
|
+
"emptyMessage": {
|
|
2928
|
+
"type": "string",
|
|
2929
|
+
"required": false
|
|
2930
|
+
},
|
|
2931
|
+
"sections": {
|
|
2932
|
+
"type": "ReadonlyArray<CardActionCenterSection>",
|
|
2933
|
+
"required": false
|
|
2934
|
+
}
|
|
2935
|
+
},
|
|
2936
|
+
"events": [
|
|
2937
|
+
{
|
|
2938
|
+
"name": "dsAction",
|
|
2939
|
+
"detail": "CardActionCenterActionDetail"
|
|
2598
2940
|
}
|
|
2599
2941
|
],
|
|
2600
2942
|
"slots": [],
|
|
@@ -2783,10 +3125,12 @@
|
|
|
2783
3125
|
"The native link owns hover, pressed, and focus-visible states across the complete card in navigation-only mode.",
|
|
2784
3126
|
"In content mode, the native link owns those interaction states only across the header while the body remains application-owned.",
|
|
2785
3127
|
"An empty or unsafe href renders non-interactive card chrome without a false keyboard target.",
|
|
3128
|
+
"Copy is always stacked, so a missing description keeps the heading at the start of the column instead of centering it in the header.",
|
|
2786
3129
|
"The application owns destination loading, authorization, not-found, and recovery states after navigation."
|
|
2787
3130
|
],
|
|
2788
3131
|
"responsiveBehavior": [
|
|
2789
3132
|
"Choose sm, md, or lg from the parent layout; the surface never exceeds its parent width.",
|
|
3133
|
+
"The heading stays at the start of the stacked copy column whether or not supporting copy is present, so mixed destination lists keep titles aligned. The chevron stays vertically centered in the header.",
|
|
2790
3134
|
"Supporting copy wraps while the chevron remains visible at the trailing edge.",
|
|
2791
3135
|
"The parent owns wrapping, columns, stacking, and breakpoint changes between cards."
|
|
2792
3136
|
],
|
|
@@ -4444,7 +4788,7 @@
|
|
|
4444
4788
|
{
|
|
4445
4789
|
"name": "field",
|
|
4446
4790
|
"title": "Field",
|
|
4447
|
-
"description": "Accessible form-field composition that gives one Input, Textarea, or Select
|
|
4791
|
+
"description": "Accessible form-field composition that gives one Input, InputDate, InputTime, Textarea, or Select an optional visible label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
4448
4792
|
"type": "registry:ui",
|
|
4449
4793
|
"meta": {
|
|
4450
4794
|
"library": "@ds-mo/ui",
|
|
@@ -4455,9 +4799,10 @@
|
|
|
4455
4799
|
"intent": {
|
|
4456
4800
|
"audience": "general",
|
|
4457
4801
|
"status": "stable",
|
|
4458
|
-
"summary": "Accessible form-field composition that gives one Input, Textarea, or Select
|
|
4802
|
+
"summary": "Accessible form-field composition that gives one Input, InputDate, InputTime, Textarea, or Select an optional visible label, optional guidance, shared error presentation, stable IDs, and observable interaction state.",
|
|
4459
4803
|
"useWhen": [
|
|
4460
|
-
"An Input, Textarea, or Select needs a persistent visible label in a form.",
|
|
4804
|
+
"An Input, InputDate, InputTime, Textarea, or Select needs a persistent visible label in a form.",
|
|
4805
|
+
"A nearby heading already names the field, and the control still needs Field's error association and message rhythm.",
|
|
4461
4806
|
"Help text or an error message must be programmatically associated with one control.",
|
|
4462
4807
|
"A form layout needs one consistent label-control-message rhythm."
|
|
4463
4808
|
],
|
|
@@ -4475,19 +4820,23 @@
|
|
|
4475
4820
|
],
|
|
4476
4821
|
"commonlyComposedWith": [
|
|
4477
4822
|
"component:ds-input",
|
|
4823
|
+
"component:ds-input-date",
|
|
4824
|
+
"component:ds-input-time",
|
|
4478
4825
|
"component:ds-textarea",
|
|
4479
4826
|
"component:ds-select",
|
|
4480
4827
|
"component:ds-text"
|
|
4481
4828
|
],
|
|
4482
4829
|
"accessibility": [
|
|
4483
|
-
"Slot exactly one form control. Field assigns its stable control ID and connects
|
|
4830
|
+
"Slot exactly one form control. When a visible label is provided, Field assigns its stable control ID and connects that label automatically.",
|
|
4831
|
+
"Omit the visible label when a nearby heading already names the field. Keep a programmatic name on the slotted control, such as aria-label, and do not set aria-labelledby to an empty value.",
|
|
4484
4832
|
"The visible description or error ID is merged with any authored aria-describedby references; a rendered error replaces the description.",
|
|
4485
4833
|
"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.",
|
|
4486
4834
|
"Clicking the label focuses the slotted design-system control without opening a Select popup.",
|
|
4487
4835
|
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
4488
4836
|
],
|
|
4489
4837
|
"states": [
|
|
4490
|
-
"
|
|
4838
|
+
"The visible label is optional. Omit it when a nearby heading already names the field; Field still associates description and error text with the slotted control.",
|
|
4839
|
+
"Label, control, description, and error content follow the shared 4px vertical field flow without changing the slotted control's width or semantics. When the slotted control is borderless, description and error copy inset to that control's text origin instead of the resting bordered edge.",
|
|
4491
4840
|
"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.",
|
|
4492
4841
|
"A rendered error replaces the description; preserve essential guidance in the error message so users retain what they need to correct the field.",
|
|
4493
4842
|
"Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
|
|
@@ -4503,7 +4852,7 @@
|
|
|
4503
4852
|
"Assign child component values and option arrays through their normal JavaScript properties."
|
|
4504
4853
|
],
|
|
4505
4854
|
"react": [
|
|
4506
|
-
"Compose one DsInput, DsTextarea, or DsSelect child and control validation timing in the form owner."
|
|
4855
|
+
"Compose one DsInput, DsInputDate, DsInputTime, DsTextarea, or DsSelect child and control validation timing in the form owner."
|
|
4507
4856
|
],
|
|
4508
4857
|
"angular": [
|
|
4509
4858
|
"Compose the generated Field adapter around the control adapter and its matching Angular value accessor."
|
|
@@ -4539,7 +4888,7 @@
|
|
|
4539
4888
|
},
|
|
4540
4889
|
"label": {
|
|
4541
4890
|
"type": "string",
|
|
4542
|
-
"required":
|
|
4891
|
+
"required": false
|
|
4543
4892
|
}
|
|
4544
4893
|
},
|
|
4545
4894
|
"events": [],
|
|
@@ -4598,14 +4947,15 @@
|
|
|
4598
4947
|
"commonlyComposedWith": [
|
|
4599
4948
|
"component:ds-select",
|
|
4600
4949
|
"component:ds-table",
|
|
4601
|
-
"component:ds-checkbox"
|
|
4950
|
+
"component:ds-checkbox",
|
|
4951
|
+
"component:ds-calendar"
|
|
4602
4952
|
],
|
|
4603
4953
|
"accessibility": [
|
|
4604
4954
|
"The built-in select trigger exposes combobox semantics with a dialog popup, synchronizes expanded state, holds the pressed interaction wash without changing resting foreground while open, and restores focus after dismissal.",
|
|
4605
4955
|
"The category pane is a vertical tab list. Arrow Up and Arrow Down wrap, Home and End jump, Arrow Right enters the option pane, and Arrow Left returns to the active category.",
|
|
4606
4956
|
"Every non-date category begins with a labelled search field. Arrow Down and Arrow Up enter the first or last visible option, while Left and Right retain native text-caret behavior. Search matches option labels and descriptions without changing selected values.",
|
|
4607
4957
|
"Escape and outside activation close the popup and restore trigger focus. Tab moves through option controls and closes only when it leaves the popup boundary.",
|
|
4608
|
-
"Date filters expose containerless Range and Relative tabs in a secondary-background header with 4px padding around the 32px medium control. Relative presets use listbox semantics
|
|
4958
|
+
"Date filters expose containerless Range and Relative tabs in a secondary-background header with 4px padding around the 32px medium control. Relative presets use listbox semantics. Range selection hosts Calendar, which owns the labelled month grid, one tab stop, arrow-key day navigation, Home and End week navigation, and Page Up or Page Down month navigation. After a range start is chosen, pointer hover and keyboard focus preview the possible inclusive range without changing selection semantics.",
|
|
4609
4959
|
"When an external trigger is inside an open shadow tree, pass its HTMLElement through anchor so outside activation, focus return, and Tab continuation use the composed tree.",
|
|
4610
4960
|
"The trigger count reports active filter categories. Multiple-choice category tags report individual selected criteria, while an applied Date category uses a visual dot because its value is singular. The default summary footer announces the total; the categories-clear footer recipe reserves a visually empty category-pane action row and exposes its divider and only Clear when criteria are active."
|
|
4611
4961
|
],
|
|
@@ -4620,7 +4970,10 @@
|
|
|
4620
4970
|
"Selection applies immediately and does not close the popup.",
|
|
4621
4971
|
"Changing category replaces the option-pane subtree so checkbox and other option visuals mount in their new state instead of transitioning from the previous category's row state.",
|
|
4622
4972
|
"The trigger reports how many filter categories have selections. footerLayout=summary adds a full-width selected-count footer only while values are selected; footerLayout=categories-clear always reserves the category-pane footer height while keeping its inactive divider hidden, then reveals the divider and only its left-aligned Clear action while values are selected.",
|
|
4623
|
-
"The built-in trigger derives the shared surface-open wash from the rendered popup lifecycle, including closing. For an external trigger, the application owns that relationship and retains the wash until dsAfterClose; selected filter values remain independent."
|
|
4973
|
+
"The built-in trigger derives the shared surface-open wash from the rendered popup lifecycle, including closing. For an external trigger, the application owns that relationship and retains the wash until dsAfterClose; selected filter values remain independent.",
|
|
4974
|
+
"Embedded mode renders the same controlled content inside a parent-owned surface; the parent owns positioning, initial focus, Escape, Tab exit, and dismissal.",
|
|
4975
|
+
"Apply-required filtering stages edits locally, including match mode. Clear immediately emits dsClear and discards pending edits. The footer appears when filters are selected or applied; Apply stays in place and inactive without pending changes; applying emits controlled changes. Closing discards unapplied edits.",
|
|
4976
|
+
"Vertical presentation renders initially expanded, independently collapsible filter categories and emits edits immediately to its controlled owner. The owning panel supplies the draft and action footer."
|
|
4624
4977
|
],
|
|
4625
4978
|
"responsiveBehavior": [
|
|
4626
4979
|
"The popup defaults to the large menu-width token and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback.",
|
|
@@ -4675,6 +5028,10 @@
|
|
|
4675
5028
|
"type": "string | undefined",
|
|
4676
5029
|
"required": false
|
|
4677
5030
|
},
|
|
5031
|
+
"applyRequired": {
|
|
5032
|
+
"type": "boolean",
|
|
5033
|
+
"required": false
|
|
5034
|
+
},
|
|
4678
5035
|
"ariaLabel": {
|
|
4679
5036
|
"type": "string | null",
|
|
4680
5037
|
"required": false
|
|
@@ -4695,6 +5052,10 @@
|
|
|
4695
5052
|
"type": "boolean",
|
|
4696
5053
|
"required": false
|
|
4697
5054
|
},
|
|
5055
|
+
"embedded": {
|
|
5056
|
+
"type": "boolean",
|
|
5057
|
+
"required": false
|
|
5058
|
+
},
|
|
4698
5059
|
"filters": {
|
|
4699
5060
|
"type": "FilterMenuFilter[]",
|
|
4700
5061
|
"required": false
|
|
@@ -4731,6 +5092,10 @@
|
|
|
4731
5092
|
"type": "string",
|
|
4732
5093
|
"required": false
|
|
4733
5094
|
},
|
|
5095
|
+
"neutralTrigger": {
|
|
5096
|
+
"type": "boolean",
|
|
5097
|
+
"required": false
|
|
5098
|
+
},
|
|
4734
5099
|
"noResultsText": {
|
|
4735
5100
|
"type": "string",
|
|
4736
5101
|
"required": false
|
|
@@ -4743,6 +5108,10 @@
|
|
|
4743
5108
|
"type": "string",
|
|
4744
5109
|
"required": false
|
|
4745
5110
|
},
|
|
5111
|
+
"showIndicator": {
|
|
5112
|
+
"type": "boolean",
|
|
5113
|
+
"required": false
|
|
5114
|
+
},
|
|
4746
5115
|
"showSelectedCount": {
|
|
4747
5116
|
"type": "boolean",
|
|
4748
5117
|
"required": false
|
|
@@ -4767,6 +5136,10 @@
|
|
|
4767
5136
|
"type": "FilterMenuValues",
|
|
4768
5137
|
"required": false
|
|
4769
5138
|
},
|
|
5139
|
+
"vertical": {
|
|
5140
|
+
"type": "boolean",
|
|
5141
|
+
"required": false
|
|
5142
|
+
},
|
|
4770
5143
|
"width": {
|
|
4771
5144
|
"type": "FilterMenuWidth",
|
|
4772
5145
|
"required": false
|
|
@@ -4817,7 +5190,7 @@
|
|
|
4817
5190
|
],
|
|
4818
5191
|
"registryDependencies": [
|
|
4819
5192
|
"badge",
|
|
4820
|
-
"
|
|
5193
|
+
"calendar",
|
|
4821
5194
|
"checkbox",
|
|
4822
5195
|
"empty-state",
|
|
4823
5196
|
"icon",
|
|
@@ -4911,142 +5284,638 @@
|
|
|
4911
5284
|
"references": [
|
|
4912
5285
|
{
|
|
4913
5286
|
"label": "Storybook examples",
|
|
4914
|
-
"path": "src/wc/components/Icon/Icon.stories.ts"
|
|
5287
|
+
"path": "src/wc/components/Icon/Icon.stories.ts"
|
|
5288
|
+
},
|
|
5289
|
+
{
|
|
5290
|
+
"label": "Preload API guidance",
|
|
5291
|
+
"path": "src/wc/components/Icon/icon-cache.ts"
|
|
5292
|
+
}
|
|
5293
|
+
]
|
|
5294
|
+
},
|
|
5295
|
+
"props": {
|
|
5296
|
+
"color": {
|
|
5297
|
+
"type": "IconColor",
|
|
5298
|
+
"required": false
|
|
5299
|
+
},
|
|
5300
|
+
"label": {
|
|
5301
|
+
"type": "string | undefined",
|
|
5302
|
+
"required": false
|
|
5303
|
+
},
|
|
5304
|
+
"name": {
|
|
5305
|
+
"type": "string",
|
|
5306
|
+
"required": false
|
|
5307
|
+
},
|
|
5308
|
+
"size": {
|
|
5309
|
+
"type": "IconSize",
|
|
5310
|
+
"required": false
|
|
5311
|
+
}
|
|
5312
|
+
},
|
|
5313
|
+
"events": [],
|
|
5314
|
+
"slots": [],
|
|
5315
|
+
"exports": {
|
|
5316
|
+
"customElement": "ds-icon",
|
|
5317
|
+
"react": "DsIcon",
|
|
5318
|
+
"vue": "DsIcon",
|
|
5319
|
+
"angular": "DsIcon"
|
|
5320
|
+
}
|
|
5321
|
+
},
|
|
5322
|
+
"dependencies": [
|
|
5323
|
+
"@ds-mo/ui",
|
|
5324
|
+
"@ds-mo/tokens",
|
|
5325
|
+
"@ds-mo/icons"
|
|
5326
|
+
],
|
|
5327
|
+
"registryDependencies": []
|
|
5328
|
+
},
|
|
5329
|
+
{
|
|
5330
|
+
"name": "input",
|
|
5331
|
+
"title": "Input",
|
|
5332
|
+
"description": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
5333
|
+
"type": "registry:ui",
|
|
5334
|
+
"meta": {
|
|
5335
|
+
"library": "@ds-mo/ui",
|
|
5336
|
+
"distribution": "npm",
|
|
5337
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/input",
|
|
5338
|
+
"source": "src/wc/components/Input/Input.tsx",
|
|
5339
|
+
"intentStatus": "complete",
|
|
5340
|
+
"intent": {
|
|
5341
|
+
"audience": "general",
|
|
5342
|
+
"status": "stable",
|
|
5343
|
+
"summary": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
5344
|
+
"useWhen": [
|
|
5345
|
+
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, password, or exact number.",
|
|
5346
|
+
"The value must participate in native, Angular, React, or Vue form state.",
|
|
5347
|
+
"A compact filter or toolbar needs a single-line search field that follows the shared control-density recipe."
|
|
5348
|
+
],
|
|
5349
|
+
"avoidWhen": [
|
|
5350
|
+
"The user chooses from a finite set of known values.",
|
|
5351
|
+
"The user must enter multiple paragraphs or formatted content.",
|
|
5352
|
+
"The value is adjusted primarily by dragging within a numeric range.",
|
|
5353
|
+
"The value is a calendar date or a clock time."
|
|
5354
|
+
],
|
|
5355
|
+
"alternatives": [
|
|
5356
|
+
{
|
|
5357
|
+
"when": "The value comes from a finite set of known choices.",
|
|
5358
|
+
"component": "component:ds-select",
|
|
5359
|
+
"reason": "Select exposes the available values and owns listbox selection behavior."
|
|
5360
|
+
},
|
|
5361
|
+
{
|
|
5362
|
+
"when": "The value is a calendar date.",
|
|
5363
|
+
"component": "component:ds-input-date",
|
|
5364
|
+
"reason": "InputDate owns calendar date form values, shared Input density, and the Calendar picker."
|
|
5365
|
+
},
|
|
5366
|
+
{
|
|
5367
|
+
"when": "The value is a clock time.",
|
|
5368
|
+
"component": "component:ds-input-time",
|
|
5369
|
+
"reason": "InputTime owns clock time form values, shared Input density, and the TimePicker."
|
|
5370
|
+
},
|
|
5371
|
+
{
|
|
5372
|
+
"when": "The value is an immediate on/off setting.",
|
|
5373
|
+
"component": "component:ds-switch",
|
|
5374
|
+
"reason": "Switch communicates a binary setting instead of free text entry."
|
|
5375
|
+
},
|
|
5376
|
+
{
|
|
5377
|
+
"when": "The value is chosen from a bounded numeric range.",
|
|
5378
|
+
"component": "component:ds-slider",
|
|
5379
|
+
"reason": "Slider supports direct range adjustment and communicates the current position."
|
|
5380
|
+
}
|
|
5381
|
+
],
|
|
5382
|
+
"commonlyComposedWith": [
|
|
5383
|
+
"component:ds-field",
|
|
5384
|
+
"component:ds-icon",
|
|
5385
|
+
"component:ds-text",
|
|
5386
|
+
"component:ds-select"
|
|
5387
|
+
],
|
|
5388
|
+
"accessibility": [
|
|
5389
|
+
"Provide a persistent visible label through the owning field or an external native label; placeholder text is guidance and must not be the field's only label.",
|
|
5390
|
+
"Choose the native input type that matches the value so browsers and assistive technology can provide appropriate semantics and keyboards.",
|
|
5391
|
+
"Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
|
|
5392
|
+
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
|
|
5393
|
+
"Password fields keep a named show-or-hide action beside the value. Revealing the value changes only the native input type; the submitted string does not change. The action restores focus to the field after activation.",
|
|
5394
|
+
"Number stepper actions are pointer affordances hidden from the accessibility tree; the native spinbutton remains the single keyboard and assistive-technology control.",
|
|
5395
|
+
"Prefix and suffix content must not carry information that is otherwise absent from the field's visible label, value, or description.",
|
|
5396
|
+
"A nested prefix or suffix Select is a separate control from the editable value and must have its own accessible name."
|
|
5397
|
+
],
|
|
5398
|
+
"states": [
|
|
5399
|
+
"Every size applies one complete control-density recipe across frame height, inline padding, icon zones, text-container inset, gap, and radius; supporting error content follows the shared 4px field flow.",
|
|
5400
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. Set hasBorder to false only in chrome that supplies enough surrounding structure; supporting error copy then insets to the field's text origin rather than the resting border box. Set hasInteractionFill to false when that containing chrome also owns hover and pressed feedback.",
|
|
5401
|
+
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins. Single-line placeholder and entered value text truncate with an ellipsis when the field is narrower than its content.",
|
|
5402
|
+
"Entered values use the parent surface's primary foreground; prefix icons, prefix text, suffix content, and resting placeholder text use its secondary foreground.",
|
|
5403
|
+
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
5404
|
+
"Password fields show a standard inset Eye action at the field's density. EyeDisabled replaces it while the value is visible. The action stays available on read-only fields and is inactive with the field.",
|
|
5405
|
+
"Search fields disable browser autocomplete history, automatic capitalization, autocorrection, and spellchecking by default so browser-owned suggestions do not compete with product-owned results. Consumers can explicitly provide autoComplete when a different native history behavior is required.",
|
|
5406
|
+
"Search fields used with owned result sets forward aria-controls and aria-activedescendant to the native field so keyboard focus can remain in the query while assistive technology tracks the active result.",
|
|
5407
|
+
"The prefix and suffix slots host compact leading or trailing units such as a currency code, or a nested same-size inset Select. Text adornments use the control's balanced text inset. Nested Selects match the field density, set isInset, hasBorder false, width hug, and indicator up-down, keep a selected value, set allowClear false so the menu has no clear footer, set neutralTrigger so the selected unit stays on the secondary adornment foreground, and do not carry the field's error message. Configurable prefix and suffix controls are separated from the editable value by a vertical divider at the density icon height. The nested inset keeps its 2px remainder toward the line; the editable value keeps the same inline padding from the line as a non-prefixed field keeps from its border. The optional leading icon is decorative and does not replace the field label. Password, search-clear, and date or time actions stay type-owned trailing buttons rather than suffix-slot content.",
|
|
5408
|
+
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
5409
|
+
"Number fields preserve native spinbutton semantics, keyboard stepping, and min/max constraint behavior while dsChange continues to report the native string value. Two borderless inset chevron actions split the available inner height, disable independently at their numeric bound, and restore focus to the spinbutton after pointer activation.",
|
|
5410
|
+
"textAlign positions the editable value while the numeric stepper stays on the opposite inline edge, keeping the actions clear of the number: start-aligned values use an inline-end stepper and end-aligned values use an inline-start stepper.",
|
|
5411
|
+
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
5412
|
+
"Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
|
|
5413
|
+
],
|
|
5414
|
+
"responsiveBehavior": [
|
|
5415
|
+
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
5416
|
+
"Choose density from the containing layout: md for ordinary forms, lg for a touch-primary layout, and sm or xs only where surrounding controls use the same compact recipe.",
|
|
5417
|
+
"The owner supplies layout constraints and decides when a compact field moves to its own row."
|
|
5418
|
+
],
|
|
5419
|
+
"frameworkCaveats": {
|
|
5420
|
+
"customElements": [
|
|
5421
|
+
"Listen for dsChange for user edits and dsClear for the search clear action.",
|
|
5422
|
+
"Use the form attribute on the host when associating an input rendered outside its owning form."
|
|
5423
|
+
],
|
|
5424
|
+
"react": [
|
|
5425
|
+
"Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear."
|
|
5426
|
+
],
|
|
5427
|
+
"vue": [
|
|
5428
|
+
"Use DsInput with v-model for the value, and listen for dsChange and dsClear."
|
|
5429
|
+
],
|
|
5430
|
+
"angular": [
|
|
5431
|
+
"Import DsInput with TextValueAccessor when integrating with Angular Forms."
|
|
5432
|
+
]
|
|
5433
|
+
},
|
|
5434
|
+
"references": [
|
|
5435
|
+
{
|
|
5436
|
+
"label": "Storybook examples",
|
|
5437
|
+
"path": "src/wc/components/Input/Input.stories.ts"
|
|
5438
|
+
},
|
|
5439
|
+
{
|
|
5440
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
5441
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
5442
|
+
}
|
|
5443
|
+
]
|
|
5444
|
+
},
|
|
5445
|
+
"props": {
|
|
5446
|
+
"ariaActiveDescendant": {
|
|
5447
|
+
"type": "string | undefined",
|
|
5448
|
+
"required": false
|
|
5449
|
+
},
|
|
5450
|
+
"ariaControls": {
|
|
5451
|
+
"type": "string | undefined",
|
|
5452
|
+
"required": false
|
|
5453
|
+
},
|
|
5454
|
+
"ariaDescribedby": {
|
|
5455
|
+
"type": "string | undefined",
|
|
5456
|
+
"required": false
|
|
5457
|
+
},
|
|
5458
|
+
"ariaLabel": {
|
|
5459
|
+
"type": "string | null",
|
|
5460
|
+
"required": false
|
|
5461
|
+
},
|
|
5462
|
+
"ariaLabelledby": {
|
|
5463
|
+
"type": "string | undefined",
|
|
5464
|
+
"required": false
|
|
5465
|
+
},
|
|
5466
|
+
"autoComplete": {
|
|
5467
|
+
"type": "string | undefined",
|
|
5468
|
+
"required": false
|
|
5469
|
+
},
|
|
5470
|
+
"autoFocus": {
|
|
5471
|
+
"type": "boolean",
|
|
5472
|
+
"required": false
|
|
5473
|
+
},
|
|
5474
|
+
"clearLabel": {
|
|
5475
|
+
"type": "string",
|
|
5476
|
+
"required": false
|
|
5477
|
+
},
|
|
5478
|
+
"disabled": {
|
|
5479
|
+
"type": "boolean",
|
|
5480
|
+
"required": false
|
|
5481
|
+
},
|
|
5482
|
+
"enterKeyHint": {
|
|
5483
|
+
"type": "string",
|
|
5484
|
+
"required": false
|
|
5485
|
+
},
|
|
5486
|
+
"error": {
|
|
5487
|
+
"type": "boolean",
|
|
5488
|
+
"required": false
|
|
5489
|
+
},
|
|
5490
|
+
"errorMessage": {
|
|
5491
|
+
"type": "string | undefined",
|
|
5492
|
+
"required": false
|
|
5493
|
+
},
|
|
5494
|
+
"form": {
|
|
5495
|
+
"type": "string | undefined",
|
|
5496
|
+
"required": false
|
|
5497
|
+
},
|
|
5498
|
+
"hasBorder": {
|
|
5499
|
+
"type": "boolean",
|
|
5500
|
+
"required": false
|
|
5501
|
+
},
|
|
5502
|
+
"hasInteractionFill": {
|
|
5503
|
+
"type": "boolean",
|
|
5504
|
+
"required": false
|
|
5505
|
+
},
|
|
5506
|
+
"hidePasswordLabel": {
|
|
5507
|
+
"type": "string",
|
|
5508
|
+
"required": false
|
|
5509
|
+
},
|
|
5510
|
+
"icon": {
|
|
5511
|
+
"type": "string | undefined",
|
|
5512
|
+
"required": false
|
|
5513
|
+
},
|
|
5514
|
+
"inputId": {
|
|
5515
|
+
"type": "string | undefined",
|
|
5516
|
+
"required": false
|
|
5517
|
+
},
|
|
5518
|
+
"inputMode": {
|
|
5519
|
+
"type": "string",
|
|
5520
|
+
"required": false
|
|
5521
|
+
},
|
|
5522
|
+
"isInactive": {
|
|
5523
|
+
"type": "boolean",
|
|
5524
|
+
"required": false
|
|
5525
|
+
},
|
|
5526
|
+
"max": {
|
|
5527
|
+
"type": "number | undefined",
|
|
5528
|
+
"required": false
|
|
5529
|
+
},
|
|
5530
|
+
"min": {
|
|
5531
|
+
"type": "number | undefined",
|
|
5532
|
+
"required": false
|
|
5533
|
+
},
|
|
5534
|
+
"name": {
|
|
5535
|
+
"type": "string | undefined",
|
|
5536
|
+
"required": false
|
|
5537
|
+
},
|
|
5538
|
+
"placeholder": {
|
|
5539
|
+
"type": "string | undefined",
|
|
5540
|
+
"required": false
|
|
5541
|
+
},
|
|
5542
|
+
"readOnly": {
|
|
5543
|
+
"type": "boolean",
|
|
5544
|
+
"required": false
|
|
5545
|
+
},
|
|
5546
|
+
"required": {
|
|
5547
|
+
"type": "boolean",
|
|
5548
|
+
"required": false
|
|
5549
|
+
},
|
|
5550
|
+
"requiredMessage": {
|
|
5551
|
+
"type": "string",
|
|
5552
|
+
"required": false
|
|
5553
|
+
},
|
|
5554
|
+
"showPasswordLabel": {
|
|
5555
|
+
"type": "string",
|
|
5556
|
+
"required": false
|
|
5557
|
+
},
|
|
5558
|
+
"size": {
|
|
5559
|
+
"type": "InputSize",
|
|
5560
|
+
"required": false
|
|
5561
|
+
},
|
|
5562
|
+
"step": {
|
|
5563
|
+
"type": "number | undefined",
|
|
5564
|
+
"required": false
|
|
5565
|
+
},
|
|
5566
|
+
"textAlign": {
|
|
5567
|
+
"type": "InputTextAlign",
|
|
5568
|
+
"required": false
|
|
5569
|
+
},
|
|
5570
|
+
"type": {
|
|
5571
|
+
"type": "InputType",
|
|
5572
|
+
"required": false
|
|
5573
|
+
},
|
|
5574
|
+
"value": {
|
|
5575
|
+
"type": "string",
|
|
5576
|
+
"required": false
|
|
5577
|
+
},
|
|
5578
|
+
"width": {
|
|
5579
|
+
"type": "InputWidth",
|
|
5580
|
+
"required": false
|
|
5581
|
+
}
|
|
5582
|
+
},
|
|
5583
|
+
"events": [
|
|
5584
|
+
{
|
|
5585
|
+
"name": "dsChange",
|
|
5586
|
+
"detail": "string"
|
|
5587
|
+
},
|
|
5588
|
+
{
|
|
5589
|
+
"name": "dsClear",
|
|
5590
|
+
"detail": "void"
|
|
5591
|
+
}
|
|
5592
|
+
],
|
|
5593
|
+
"slots": [],
|
|
5594
|
+
"exports": {
|
|
5595
|
+
"customElement": "ds-input",
|
|
5596
|
+
"react": "DsInput",
|
|
5597
|
+
"vue": "DsInput",
|
|
5598
|
+
"angular": "DsInput"
|
|
5599
|
+
}
|
|
5600
|
+
},
|
|
5601
|
+
"dependencies": [
|
|
5602
|
+
"@ds-mo/ui",
|
|
5603
|
+
"@ds-mo/tokens",
|
|
5604
|
+
"@ds-mo/icons"
|
|
5605
|
+
],
|
|
5606
|
+
"registryDependencies": [
|
|
5607
|
+
"button-unfilled",
|
|
5608
|
+
"divider",
|
|
5609
|
+
"icon",
|
|
5610
|
+
"text"
|
|
5611
|
+
]
|
|
5612
|
+
},
|
|
5613
|
+
{
|
|
5614
|
+
"name": "input-date",
|
|
5615
|
+
"title": "InputDate",
|
|
5616
|
+
"description": "Form-associated calendar date field that reuses Input density, focus, validation, and field composition, with a typeable value and a Calendar picker.",
|
|
5617
|
+
"type": "registry:ui",
|
|
5618
|
+
"meta": {
|
|
5619
|
+
"library": "@ds-mo/ui",
|
|
5620
|
+
"distribution": "npm",
|
|
5621
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/input-date",
|
|
5622
|
+
"source": "src/wc/components/InputDate/InputDate.tsx",
|
|
5623
|
+
"intentStatus": "complete",
|
|
5624
|
+
"intent": {
|
|
5625
|
+
"audience": "general",
|
|
5626
|
+
"status": "experimental",
|
|
5627
|
+
"summary": "Form-associated calendar date field that reuses Input density, focus, validation, and field composition, with a typeable value and a Calendar picker.",
|
|
5628
|
+
"useWhen": [
|
|
5629
|
+
"A user must enter or edit a calendar date as an ISO date string.",
|
|
5630
|
+
"The date must participate in native, Angular, React, or Vue form state.",
|
|
5631
|
+
"The control should match Input geometry, typography, and field composition rather than a one-off native date input."
|
|
5632
|
+
],
|
|
5633
|
+
"avoidWhen": [
|
|
5634
|
+
"The value is freeform text, a number, or a search query.",
|
|
5635
|
+
"The value is a clock time without a calendar date.",
|
|
5636
|
+
"The user chooses a predefined relative range such as last 7 days."
|
|
5637
|
+
],
|
|
5638
|
+
"alternatives": [
|
|
5639
|
+
{
|
|
5640
|
+
"when": "The value is one line of text, email, search, or an exact number.",
|
|
5641
|
+
"component": "component:ds-input",
|
|
5642
|
+
"reason": "Input owns those native types, adornments, search clearing, and numeric stepping."
|
|
5643
|
+
},
|
|
5644
|
+
{
|
|
5645
|
+
"when": "The value is a clock time.",
|
|
5646
|
+
"component": "component:ds-input-time",
|
|
5647
|
+
"reason": "InputTime owns clock time form values and the TimePicker."
|
|
5648
|
+
},
|
|
5649
|
+
{
|
|
5650
|
+
"when": "The user chooses a relative or bounded date range from presets.",
|
|
5651
|
+
"component": "component:ds-filter-menu",
|
|
5652
|
+
"reason": "FilterMenu owns relative date presets and range selection rather than a single calendar date."
|
|
5653
|
+
},
|
|
5654
|
+
{
|
|
5655
|
+
"when": "The month grid is needed without a form field.",
|
|
5656
|
+
"component": "component:ds-calendar",
|
|
5657
|
+
"reason": "Calendar owns the shared month grid and can select a single date or a range."
|
|
5658
|
+
}
|
|
5659
|
+
],
|
|
5660
|
+
"commonlyComposedWith": [
|
|
5661
|
+
"component:ds-field",
|
|
5662
|
+
"component:ds-calendar",
|
|
5663
|
+
"component:ds-button-unfilled",
|
|
5664
|
+
"component:ds-icon",
|
|
5665
|
+
"component:ds-text",
|
|
5666
|
+
"component:ds-input-time"
|
|
5667
|
+
],
|
|
5668
|
+
"accessibility": [
|
|
5669
|
+
"Provide a persistent visible label through the owning field or an external native label.",
|
|
5670
|
+
"The text field remains the keyboard and assistive-technology value control. Users can type an ISO date, a numeric M/D/YYYY date, or a short-month label such as Sep 10, 2026.",
|
|
5671
|
+
"The trailing calendar button is a named disclosure that opens a non-modal calendar dialog. It shares the field's density, uses the single inset recipe, and reports expanded state while the picker is open.",
|
|
5672
|
+
"Filled values keep YYYY-MM-DD as the form value. Visible text uses a short-month calendar label such as Sep 10, 2026 so the field does not show ISO chrome. That label reuses Input's value typography and text-container inset.",
|
|
5673
|
+
"Error text is associated with the text field and announced as an alert when the invalid state is rendered.",
|
|
5674
|
+
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission."
|
|
5675
|
+
],
|
|
5676
|
+
"states": [
|
|
5677
|
+
"Every size applies the shared control-density recipe, including md body-medium text, across frame height, inline padding, icon zones, and radius.",
|
|
5678
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. When hasBorder is false, supporting error copy insets to the field's text origin rather than the resting border box.",
|
|
5679
|
+
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
5680
|
+
"The trailing calendar action is an unfilled icon button of the same density as the field, borderless and square, with the single inset recipe so the 4px height reduction insets it equally from the field's top, end, and bottom edges. It does not replace the field label or the submitted date value. Inactive or disabled fields apply that treatment on the host only, so the nested button is not faded a second time.",
|
|
5681
|
+
"Activating the calendar button opens the shared Calendar grid in a choice-popup dialog anchored to the field's end edge, beside the trailing calendar action. Choosing a day commits that date and closes the dialog. Typing in the field commits a parsed date without requiring the picker. Invalid typed text reverts to the last committed value on blur."
|
|
5682
|
+
],
|
|
5683
|
+
"responsiveBehavior": [
|
|
5684
|
+
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
5685
|
+
"Choose density from the containing layout: md for ordinary forms, lg for a touch-primary layout, and sm or xs only where surrounding controls use the same compact recipe.",
|
|
5686
|
+
"The calendar dialog uses the shared choice-popup recipe with the same 4px sm chrome inset as choice lists, aligns to the field's end edge, flips when the field collides with the overlay boundary, and stays in the top layer."
|
|
5687
|
+
],
|
|
5688
|
+
"frameworkCaveats": {
|
|
5689
|
+
"customElements": [
|
|
5690
|
+
"Listen for dsChange for user edits. The detail is the ISO calendar date string YYYY-MM-DD.",
|
|
5691
|
+
"Use the form attribute on the host when associating a date field rendered outside its owning form."
|
|
5692
|
+
],
|
|
5693
|
+
"react": [
|
|
5694
|
+
"Use DsInputDate, bind value for controlled application state, and handle onDsChange."
|
|
5695
|
+
],
|
|
5696
|
+
"vue": [
|
|
5697
|
+
"Use DsInputDate with v-model for the value, and listen for dsChange."
|
|
5698
|
+
],
|
|
5699
|
+
"angular": [
|
|
5700
|
+
"Import DsInputDate with TextValueAccessor when integrating with Angular Forms."
|
|
5701
|
+
]
|
|
5702
|
+
},
|
|
5703
|
+
"references": [
|
|
5704
|
+
{
|
|
5705
|
+
"label": "Storybook examples",
|
|
5706
|
+
"path": "src/wc/components/InputDate/InputDate.stories.ts"
|
|
4915
5707
|
},
|
|
4916
5708
|
{
|
|
4917
|
-
"label": "
|
|
4918
|
-
"path": "
|
|
5709
|
+
"label": "Cross-browser form and accessibility coverage",
|
|
5710
|
+
"path": "tests/e2e/forms.spec.ts"
|
|
4919
5711
|
}
|
|
4920
5712
|
]
|
|
4921
5713
|
},
|
|
4922
5714
|
"props": {
|
|
4923
|
-
"
|
|
4924
|
-
"type": "
|
|
5715
|
+
"ariaDescribedby": {
|
|
5716
|
+
"type": "string | undefined",
|
|
4925
5717
|
"required": false
|
|
4926
5718
|
},
|
|
4927
|
-
"
|
|
5719
|
+
"ariaLabel": {
|
|
5720
|
+
"type": "string | null",
|
|
5721
|
+
"required": false
|
|
5722
|
+
},
|
|
5723
|
+
"ariaLabelledby": {
|
|
5724
|
+
"type": "string | undefined",
|
|
5725
|
+
"required": false
|
|
5726
|
+
},
|
|
5727
|
+
"autoFocus": {
|
|
5728
|
+
"type": "boolean",
|
|
5729
|
+
"required": false
|
|
5730
|
+
},
|
|
5731
|
+
"disabled": {
|
|
5732
|
+
"type": "boolean",
|
|
5733
|
+
"required": false
|
|
5734
|
+
},
|
|
5735
|
+
"error": {
|
|
5736
|
+
"type": "boolean",
|
|
5737
|
+
"required": false
|
|
5738
|
+
},
|
|
5739
|
+
"errorMessage": {
|
|
5740
|
+
"type": "string | undefined",
|
|
5741
|
+
"required": false
|
|
5742
|
+
},
|
|
5743
|
+
"form": {
|
|
5744
|
+
"type": "string | undefined",
|
|
5745
|
+
"required": false
|
|
5746
|
+
},
|
|
5747
|
+
"hasBorder": {
|
|
5748
|
+
"type": "boolean",
|
|
5749
|
+
"required": false
|
|
5750
|
+
},
|
|
5751
|
+
"hasInteractionFill": {
|
|
5752
|
+
"type": "boolean",
|
|
5753
|
+
"required": false
|
|
5754
|
+
},
|
|
5755
|
+
"inputId": {
|
|
5756
|
+
"type": "string | undefined",
|
|
5757
|
+
"required": false
|
|
5758
|
+
},
|
|
5759
|
+
"isInactive": {
|
|
5760
|
+
"type": "boolean",
|
|
5761
|
+
"required": false
|
|
5762
|
+
},
|
|
5763
|
+
"max": {
|
|
5764
|
+
"type": "string | undefined",
|
|
5765
|
+
"required": false
|
|
5766
|
+
},
|
|
5767
|
+
"min": {
|
|
4928
5768
|
"type": "string | undefined",
|
|
4929
5769
|
"required": false
|
|
4930
5770
|
},
|
|
4931
5771
|
"name": {
|
|
5772
|
+
"type": "string | undefined",
|
|
5773
|
+
"required": false
|
|
5774
|
+
},
|
|
5775
|
+
"readOnly": {
|
|
5776
|
+
"type": "boolean",
|
|
5777
|
+
"required": false
|
|
5778
|
+
},
|
|
5779
|
+
"required": {
|
|
5780
|
+
"type": "boolean",
|
|
5781
|
+
"required": false
|
|
5782
|
+
},
|
|
5783
|
+
"requiredMessage": {
|
|
4932
5784
|
"type": "string",
|
|
4933
5785
|
"required": false
|
|
4934
5786
|
},
|
|
4935
5787
|
"size": {
|
|
4936
|
-
"type": "
|
|
5788
|
+
"type": "InputDateSize",
|
|
5789
|
+
"required": false
|
|
5790
|
+
},
|
|
5791
|
+
"value": {
|
|
5792
|
+
"type": "string",
|
|
5793
|
+
"required": false
|
|
5794
|
+
},
|
|
5795
|
+
"width": {
|
|
5796
|
+
"type": "InputDateWidth",
|
|
4937
5797
|
"required": false
|
|
4938
5798
|
}
|
|
4939
5799
|
},
|
|
4940
|
-
"events": [
|
|
5800
|
+
"events": [
|
|
5801
|
+
{
|
|
5802
|
+
"name": "dsChange",
|
|
5803
|
+
"detail": "string"
|
|
5804
|
+
}
|
|
5805
|
+
],
|
|
4941
5806
|
"slots": [],
|
|
4942
5807
|
"exports": {
|
|
4943
|
-
"customElement": "ds-
|
|
4944
|
-
"react": "
|
|
4945
|
-
"vue": "
|
|
4946
|
-
"angular": "
|
|
5808
|
+
"customElement": "ds-input-date",
|
|
5809
|
+
"react": "DsInputDate",
|
|
5810
|
+
"vue": "DsInputDate",
|
|
5811
|
+
"angular": "DsInputDate"
|
|
4947
5812
|
}
|
|
4948
5813
|
},
|
|
4949
5814
|
"dependencies": [
|
|
4950
5815
|
"@ds-mo/ui",
|
|
4951
|
-
"@ds-mo/tokens"
|
|
4952
|
-
"@ds-mo/icons"
|
|
5816
|
+
"@ds-mo/tokens"
|
|
4953
5817
|
],
|
|
4954
|
-
"registryDependencies": [
|
|
5818
|
+
"registryDependencies": [
|
|
5819
|
+
"button-unfilled",
|
|
5820
|
+
"calendar",
|
|
5821
|
+
"text"
|
|
5822
|
+
]
|
|
4955
5823
|
},
|
|
4956
5824
|
{
|
|
4957
|
-
"name": "input",
|
|
4958
|
-
"title": "
|
|
4959
|
-
"description": "Form-associated
|
|
5825
|
+
"name": "input-time",
|
|
5826
|
+
"title": "InputTime",
|
|
5827
|
+
"description": "Form-associated clock time field that reuses Input density, focus, validation, and field composition, with a typeable value and a TimePicker.",
|
|
4960
5828
|
"type": "registry:ui",
|
|
4961
5829
|
"meta": {
|
|
4962
5830
|
"library": "@ds-mo/ui",
|
|
4963
5831
|
"distribution": "npm",
|
|
4964
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/input",
|
|
4965
|
-
"source": "src/wc/components/
|
|
5832
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/input-time",
|
|
5833
|
+
"source": "src/wc/components/InputTime/InputTime.tsx",
|
|
4966
5834
|
"intentStatus": "complete",
|
|
4967
5835
|
"intent": {
|
|
4968
5836
|
"audience": "general",
|
|
4969
|
-
"status": "
|
|
4970
|
-
"summary": "Form-associated
|
|
5837
|
+
"status": "experimental",
|
|
5838
|
+
"summary": "Form-associated clock time field that reuses Input density, focus, validation, and field composition, with a typeable value and a TimePicker.",
|
|
4971
5839
|
"useWhen": [
|
|
4972
|
-
"A user must enter or edit
|
|
4973
|
-
"The
|
|
4974
|
-
"
|
|
5840
|
+
"A user must enter or edit a clock time as a native time string.",
|
|
5841
|
+
"The time must participate in native, Angular, React, or Vue form state.",
|
|
5842
|
+
"The control should match Input geometry, typography, and field composition rather than a one-off native time input."
|
|
4975
5843
|
],
|
|
4976
5844
|
"avoidWhen": [
|
|
4977
|
-
"The
|
|
4978
|
-
"The
|
|
4979
|
-
"The
|
|
5845
|
+
"The value is freeform text, a number, or a search query.",
|
|
5846
|
+
"The value is a calendar date without a clock time.",
|
|
5847
|
+
"The user chooses from a finite set of named schedule options rather than an exact time."
|
|
4980
5848
|
],
|
|
4981
5849
|
"alternatives": [
|
|
4982
5850
|
{
|
|
4983
|
-
"when": "The value
|
|
4984
|
-
"component": "component:ds-
|
|
4985
|
-
"reason": "
|
|
5851
|
+
"when": "The value is one line of text, email, search, or an exact number.",
|
|
5852
|
+
"component": "component:ds-input",
|
|
5853
|
+
"reason": "Input owns those native types, adornments, search clearing, and numeric stepping."
|
|
4986
5854
|
},
|
|
4987
5855
|
{
|
|
4988
|
-
"when": "The value is
|
|
4989
|
-
"component": "component:ds-
|
|
4990
|
-
"reason": "
|
|
5856
|
+
"when": "The value is a calendar date.",
|
|
5857
|
+
"component": "component:ds-input-date",
|
|
5858
|
+
"reason": "InputDate owns calendar date form values and the Calendar picker."
|
|
4991
5859
|
},
|
|
4992
5860
|
{
|
|
4993
|
-
"when": "The
|
|
4994
|
-
"component": "component:ds-
|
|
4995
|
-
"reason": "
|
|
5861
|
+
"when": "The hour, minute, and AM/PM lists are needed without a form field.",
|
|
5862
|
+
"component": "component:ds-time-picker",
|
|
5863
|
+
"reason": "TimePicker owns the bounded 12-hour lists and selected-tile treatment."
|
|
5864
|
+
},
|
|
5865
|
+
{
|
|
5866
|
+
"when": "The user chooses from a finite set of named times or cadences.",
|
|
5867
|
+
"component": "component:ds-select",
|
|
5868
|
+
"reason": "Select exposes the available values and owns listbox selection behavior."
|
|
4996
5869
|
}
|
|
4997
5870
|
],
|
|
4998
5871
|
"commonlyComposedWith": [
|
|
4999
5872
|
"component:ds-field",
|
|
5873
|
+
"component:ds-time-picker",
|
|
5874
|
+
"component:ds-button-unfilled",
|
|
5000
5875
|
"component:ds-icon",
|
|
5001
|
-
"component:ds-text"
|
|
5876
|
+
"component:ds-text",
|
|
5877
|
+
"component:ds-input-date"
|
|
5002
5878
|
],
|
|
5003
5879
|
"accessibility": [
|
|
5004
|
-
"Provide a persistent visible label through the owning field or an external native label
|
|
5005
|
-
"
|
|
5006
|
-
"
|
|
5007
|
-
"
|
|
5008
|
-
"
|
|
5009
|
-
"
|
|
5880
|
+
"Provide a persistent visible label through the owning field or an external native label.",
|
|
5881
|
+
"The text field remains the keyboard and assistive-technology value control. Users can type HH:MM, H:MM, or a 12-hour label such as 9:00 AM.",
|
|
5882
|
+
"The trailing clock button is a named disclosure that opens a non-modal time dialog. It shares the field's density, uses the single inset recipe, and reports expanded state while the picker is open.",
|
|
5883
|
+
"Filled values keep HH:MM as the form value. Visible text uses a 12-hour label such as 9:00 AM so the field does not show 24-hour chrome. That label reuses Input's value typography and text-container inset.",
|
|
5884
|
+
"Error text is associated with the text field and announced as an alert when the invalid state is rendered.",
|
|
5885
|
+
"Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission."
|
|
5010
5886
|
],
|
|
5011
5887
|
"states": [
|
|
5012
|
-
"Every size applies
|
|
5013
|
-
"The
|
|
5014
|
-
"
|
|
5015
|
-
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
5016
|
-
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
5017
|
-
"Search fields disable browser autocomplete history, automatic capitalization, autocorrection, and spellchecking by default so browser-owned suggestions do not compete with product-owned results. Consumers can explicitly provide autoComplete when a different native history behavior is required.",
|
|
5018
|
-
"Search fields used with owned result sets forward aria-controls and aria-activedescendant to the native field so keyboard focus can remain in the query while assistive technology tracks the active result.",
|
|
5019
|
-
"The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
|
|
5020
|
-
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
5021
|
-
"Number fields preserve native spinbutton semantics, keyboard stepping, and min/max constraint behavior while dsChange continues to report the native string value. Two borderless inset chevron actions split the available inner height, disable independently at their numeric bound, and restore focus to the spinbutton after pointer activation.",
|
|
5022
|
-
"textAlign positions the editable value while the numeric stepper stays on the opposite inline edge, keeping the actions clear of the number: start-aligned values use an inline-end stepper and end-aligned values use an inline-start stepper.",
|
|
5888
|
+
"Every size applies the shared control-density recipe, including md body-medium text, across frame height, inline padding, icon zones, and radius.",
|
|
5889
|
+
"The default step is one minute so the field matches ordinary schedule entry; override step only when a coarser minute increment is required.",
|
|
5890
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. When hasBorder is false, supporting error copy insets to the field's text origin rather than the resting border box.",
|
|
5023
5891
|
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
5024
|
-
"
|
|
5892
|
+
"The trailing clock action is an unfilled icon button of the same density as the field, borderless and square, with the single inset recipe so the 4px height reduction insets it equally from the field's top, end, and bottom edges. It does not replace the field label or the submitted time value. Inactive or disabled fields apply that treatment on the host only, so the nested button is not faded a second time.",
|
|
5893
|
+
"Activating the clock button opens the shared TimePicker in a choice-popup dialog anchored to the field's end edge, beside the trailing clock action. Choosing hour, minute, or AM/PM commits that part of the time and leaves the dialog open so the other columns can be adjusted. Typing in the field commits a parsed time without requiring the picker. Invalid typed text reverts to the last committed value on blur."
|
|
5025
5894
|
],
|
|
5026
5895
|
"responsiveBehavior": [
|
|
5027
5896
|
"Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
|
|
5028
5897
|
"Choose density from the containing layout: md for ordinary forms, lg for a touch-primary layout, and sm or xs only where surrounding controls use the same compact recipe.",
|
|
5029
|
-
"The
|
|
5898
|
+
"The time dialog uses the shared choice-popup recipe with the same 4px sm chrome inset as choice lists, aligns to the field's end edge, flips when the field collides with the overlay boundary, and stays in the top layer."
|
|
5030
5899
|
],
|
|
5031
5900
|
"frameworkCaveats": {
|
|
5032
5901
|
"customElements": [
|
|
5033
|
-
"Listen for dsChange for user edits
|
|
5034
|
-
"Use the form attribute on the host when associating
|
|
5902
|
+
"Listen for dsChange for user edits. The detail is the clock time string HH:MM.",
|
|
5903
|
+
"Use the form attribute on the host when associating a time field rendered outside its owning form."
|
|
5035
5904
|
],
|
|
5036
5905
|
"react": [
|
|
5037
|
-
"Use
|
|
5906
|
+
"Use DsInputTime, bind value for controlled application state, and handle onDsChange."
|
|
5038
5907
|
],
|
|
5039
5908
|
"vue": [
|
|
5040
|
-
"Use
|
|
5909
|
+
"Use DsInputTime with v-model for the value, and listen for dsChange."
|
|
5041
5910
|
],
|
|
5042
5911
|
"angular": [
|
|
5043
|
-
"Import
|
|
5912
|
+
"Import DsInputTime with TextValueAccessor when integrating with Angular Forms."
|
|
5044
5913
|
]
|
|
5045
5914
|
},
|
|
5046
5915
|
"references": [
|
|
5047
5916
|
{
|
|
5048
5917
|
"label": "Storybook examples",
|
|
5049
|
-
"path": "src/wc/components/
|
|
5918
|
+
"path": "src/wc/components/InputTime/InputTime.stories.ts"
|
|
5050
5919
|
},
|
|
5051
5920
|
{
|
|
5052
5921
|
"label": "Cross-browser form and accessibility coverage",
|
|
@@ -5055,14 +5924,6 @@
|
|
|
5055
5924
|
]
|
|
5056
5925
|
},
|
|
5057
5926
|
"props": {
|
|
5058
|
-
"ariaActiveDescendant": {
|
|
5059
|
-
"type": "string | undefined",
|
|
5060
|
-
"required": false
|
|
5061
|
-
},
|
|
5062
|
-
"ariaControls": {
|
|
5063
|
-
"type": "string | undefined",
|
|
5064
|
-
"required": false
|
|
5065
|
-
},
|
|
5066
5927
|
"ariaDescribedby": {
|
|
5067
5928
|
"type": "string | undefined",
|
|
5068
5929
|
"required": false
|
|
@@ -5075,26 +5936,14 @@
|
|
|
5075
5936
|
"type": "string | undefined",
|
|
5076
5937
|
"required": false
|
|
5077
5938
|
},
|
|
5078
|
-
"autoComplete": {
|
|
5079
|
-
"type": "string | undefined",
|
|
5080
|
-
"required": false
|
|
5081
|
-
},
|
|
5082
5939
|
"autoFocus": {
|
|
5083
5940
|
"type": "boolean",
|
|
5084
5941
|
"required": false
|
|
5085
5942
|
},
|
|
5086
|
-
"clearLabel": {
|
|
5087
|
-
"type": "string",
|
|
5088
|
-
"required": false
|
|
5089
|
-
},
|
|
5090
5943
|
"disabled": {
|
|
5091
5944
|
"type": "boolean",
|
|
5092
5945
|
"required": false
|
|
5093
5946
|
},
|
|
5094
|
-
"enterKeyHint": {
|
|
5095
|
-
"type": "string",
|
|
5096
|
-
"required": false
|
|
5097
|
-
},
|
|
5098
5947
|
"error": {
|
|
5099
5948
|
"type": "boolean",
|
|
5100
5949
|
"required": false
|
|
@@ -5115,35 +5964,23 @@
|
|
|
5115
5964
|
"type": "boolean",
|
|
5116
5965
|
"required": false
|
|
5117
5966
|
},
|
|
5118
|
-
"icon": {
|
|
5119
|
-
"type": "string | undefined",
|
|
5120
|
-
"required": false
|
|
5121
|
-
},
|
|
5122
5967
|
"inputId": {
|
|
5123
5968
|
"type": "string | undefined",
|
|
5124
5969
|
"required": false
|
|
5125
5970
|
},
|
|
5126
|
-
"inputMode": {
|
|
5127
|
-
"type": "string",
|
|
5128
|
-
"required": false
|
|
5129
|
-
},
|
|
5130
5971
|
"isInactive": {
|
|
5131
5972
|
"type": "boolean",
|
|
5132
5973
|
"required": false
|
|
5133
5974
|
},
|
|
5134
5975
|
"max": {
|
|
5135
|
-
"type": "
|
|
5976
|
+
"type": "string | undefined",
|
|
5136
5977
|
"required": false
|
|
5137
5978
|
},
|
|
5138
5979
|
"min": {
|
|
5139
|
-
"type": "number | undefined",
|
|
5140
|
-
"required": false
|
|
5141
|
-
},
|
|
5142
|
-
"name": {
|
|
5143
5980
|
"type": "string | undefined",
|
|
5144
5981
|
"required": false
|
|
5145
5982
|
},
|
|
5146
|
-
"
|
|
5983
|
+
"name": {
|
|
5147
5984
|
"type": "string | undefined",
|
|
5148
5985
|
"required": false
|
|
5149
5986
|
},
|
|
@@ -5160,19 +5997,11 @@
|
|
|
5160
5997
|
"required": false
|
|
5161
5998
|
},
|
|
5162
5999
|
"size": {
|
|
5163
|
-
"type": "
|
|
6000
|
+
"type": "InputTimeSize",
|
|
5164
6001
|
"required": false
|
|
5165
6002
|
},
|
|
5166
6003
|
"step": {
|
|
5167
|
-
"type": "
|
|
5168
|
-
"required": false
|
|
5169
|
-
},
|
|
5170
|
-
"textAlign": {
|
|
5171
|
-
"type": "InputTextAlign",
|
|
5172
|
-
"required": false
|
|
5173
|
-
},
|
|
5174
|
-
"type": {
|
|
5175
|
-
"type": "InputType",
|
|
6004
|
+
"type": "string | number",
|
|
5176
6005
|
"required": false
|
|
5177
6006
|
},
|
|
5178
6007
|
"value": {
|
|
@@ -5180,7 +6009,7 @@
|
|
|
5180
6009
|
"required": false
|
|
5181
6010
|
},
|
|
5182
6011
|
"width": {
|
|
5183
|
-
"type": "
|
|
6012
|
+
"type": "InputTimeWidth",
|
|
5184
6013
|
"required": false
|
|
5185
6014
|
}
|
|
5186
6015
|
},
|
|
@@ -5188,29 +6017,24 @@
|
|
|
5188
6017
|
{
|
|
5189
6018
|
"name": "dsChange",
|
|
5190
6019
|
"detail": "string"
|
|
5191
|
-
},
|
|
5192
|
-
{
|
|
5193
|
-
"name": "dsClear",
|
|
5194
|
-
"detail": "void"
|
|
5195
6020
|
}
|
|
5196
6021
|
],
|
|
5197
6022
|
"slots": [],
|
|
5198
6023
|
"exports": {
|
|
5199
|
-
"customElement": "ds-input",
|
|
5200
|
-
"react": "
|
|
5201
|
-
"vue": "
|
|
5202
|
-
"angular": "
|
|
6024
|
+
"customElement": "ds-input-time",
|
|
6025
|
+
"react": "DsInputTime",
|
|
6026
|
+
"vue": "DsInputTime",
|
|
6027
|
+
"angular": "DsInputTime"
|
|
5203
6028
|
}
|
|
5204
6029
|
},
|
|
5205
6030
|
"dependencies": [
|
|
5206
6031
|
"@ds-mo/ui",
|
|
5207
|
-
"@ds-mo/tokens"
|
|
5208
|
-
"@ds-mo/icons"
|
|
6032
|
+
"@ds-mo/tokens"
|
|
5209
6033
|
],
|
|
5210
6034
|
"registryDependencies": [
|
|
5211
6035
|
"button-unfilled",
|
|
5212
|
-
"
|
|
5213
|
-
"
|
|
6036
|
+
"text",
|
|
6037
|
+
"time-picker"
|
|
5214
6038
|
]
|
|
5215
6039
|
},
|
|
5216
6040
|
{
|
|
@@ -5477,7 +6301,8 @@
|
|
|
5477
6301
|
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
|
|
5478
6302
|
"Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
|
|
5479
6303
|
"A trailing tag resolves one density smaller than its menu row and uses the inset recipe so it nests without changing row height. Do not combine tag, dot, and switch suffixes on one item.",
|
|
5480
|
-
"Reorderable rows use the Drag prefix and ignore icon. Prefix and drag-handle icons inherit the choice-popup secondary foreground, matching Select. When any row in a section has an icon or is reorderable, the remaining rows get a spacer so labels align."
|
|
6304
|
+
"Reorderable rows use the Drag prefix and ignore icon. Prefix and drag-handle icons inherit the choice-popup secondary foreground, matching Select. When any row in a section has an icon or is reorderable, the remaining rows get a spacer so labels align.",
|
|
6305
|
+
"Embedded mode renders the same controlled content inside a parent-owned surface; the parent owns positioning, initial focus, Escape, Tab exit, and dismissal."
|
|
5481
6306
|
],
|
|
5482
6307
|
"responsiveBehavior": [
|
|
5483
6308
|
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
@@ -5535,6 +6360,10 @@
|
|
|
5535
6360
|
"type": "HTMLElement | undefined",
|
|
5536
6361
|
"required": false
|
|
5537
6362
|
},
|
|
6363
|
+
"embedded": {
|
|
6364
|
+
"type": "boolean",
|
|
6365
|
+
"required": false
|
|
6366
|
+
},
|
|
5538
6367
|
"emptyMessage": {
|
|
5539
6368
|
"type": "string",
|
|
5540
6369
|
"required": false
|
|
@@ -8386,7 +9215,8 @@
|
|
|
8386
9215
|
"component:ds-text",
|
|
8387
9216
|
"component:ds-icon",
|
|
8388
9217
|
"component:ds-empty-state",
|
|
8389
|
-
"component:ds-loader"
|
|
9218
|
+
"component:ds-loader",
|
|
9219
|
+
"component:ds-input"
|
|
8390
9220
|
],
|
|
8391
9221
|
"accessibility": [
|
|
8392
9222
|
"In forms, provide a persistent visible external field label; placeholder text is guidance and must not be the field's only label. In a compact filter bar, the trigger's visible text may supply the accessible name.",
|
|
@@ -8400,9 +9230,10 @@
|
|
|
8400
9230
|
"Use errorMessage with error so the trigger is described by the rendered alert."
|
|
8401
9231
|
],
|
|
8402
9232
|
"states": [
|
|
8403
|
-
"Selected trigger foreground communicates the current value independently of fill. Opt into activeFill when the trigger needs additional selected emphasis; popup option selection keeps its own treatment.",
|
|
9233
|
+
"Selected trigger foreground communicates the current value independently of fill. Opt into activeFill when the trigger needs additional selected emphasis; popup option selection keeps its own treatment. Set neutralTrigger to keep the selected label on the resting secondary foreground, including Input prefix and suffix units.",
|
|
8404
9234
|
"The multiple property changes cardinality without changing the component family: scalar mode selects and closes, while multiple mode toggles array values and keeps the popup open.",
|
|
8405
|
-
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow.",
|
|
9235
|
+
"Every size applies one complete control-density recipe across trigger height, inline padding, icon zones, text-container inset, gap, and radius; error content follows the shared 4px field flow. Set rounded to use the same half-radius pill as buttons on the trigger only; the popup keeps the menu radius.",
|
|
9236
|
+
"Set isInset only when the trigger is nested inside a same-size control, including an Input prefix or suffix. Match the host field's size, set hasBorder to false, use width hug, and set indicator to up-down. Prefix and suffix Selects keep a selected value, set allowClear false so the menu has no clear footer, and set neutralTrigger so the selected unit stays secondary like prefix text. The owning Input draws a vertical divider between the nested control and the editable value at the density icon height. The nested inset keeps its 2px remainder toward the line; the editable value keeps the same inline padding from the line as a non-prefixed field keeps from its border. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry. Inset and rounded change only the trigger's outer box. Popup option rows, search, and footer always use the selected size recipe and do not change for single or double inset or for rounded. Do not put error copy on the nested Select; the owning Input keeps validation.",
|
|
8406
9237
|
"Value is controlled through the mutable value property as a string in scalar mode or a string array in multiple mode; dsChange reports the matching shape.",
|
|
8407
9238
|
"Multiple mode keeps the persistent placeholder label visible, appends the selected count, and submits one repeated form entry per selected value.",
|
|
8408
9239
|
"Required Selects begin without an automatic selection and require the user to make an explicit choice; do not preselect the first option merely to satisfy validity.",
|
|
@@ -8417,7 +9248,7 @@
|
|
|
8417
9248
|
"Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
|
|
8418
9249
|
"Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch; surfaceOpen keeps it visible while its controlled menu is rendered. Activating it emits dsOptionAction without selecting the option or closing the Select popup.",
|
|
8419
9250
|
"Use option subtextActions for a compact set of immediate actions that belong to one option. They render beneath only that option's label using the standard supporting-text inset and rhythm, use action or negative semantic color, and emit dsOptionSubtextAction without selecting the option or closing the popup. Unlike descriptive subtext, they do not reserve a blank supporting line on neighboring options.",
|
|
8420
|
-
"The optional prefix icon and trailing indicator always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary. When collapseLabel compact icon-only chrome is active, a selected value promotes the prefix icon to primary instead. The default down indicator communicates disclosure; up-down is
|
|
9251
|
+
"The optional prefix icon and trailing indicator always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary. When collapseLabel compact icon-only chrome is active, a selected value promotes the prefix icon to primary instead. The default down indicator communicates disclosure; up-down is for compact always-selected value pickers such as pagination page size and Input prefix or suffix units.",
|
|
8421
9252
|
"While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
|
|
8422
9253
|
"The shared popup search control follows the Select density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
|
|
8423
9254
|
"When search contains text, the shared control shows a rounded icon-only ButtonUnfilled with the CrossCircle icon and no border, sized to remain inset within the current row density. It clears the local term, stays hidden for an empty term, and returns focus to search.",
|
|
@@ -8426,7 +9257,7 @@
|
|
|
8426
9257
|
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
8427
9258
|
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
8428
9259
|
"Validation timing belongs to the form owner and may be immediate or deferred until blur or submit; the Select exposes validity and error presentation without imposing that policy.",
|
|
8429
|
-
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry. Set hasBorder to false for chrome where the trigger must remain borderless at rest, when selected or focused, and when invalid; error semantics and supporting copy
|
|
9260
|
+
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry. Set hasBorder to false for chrome where the trigger must remain borderless at rest, when selected or focused, and when invalid; error semantics remain available, and supporting error copy insets to the trigger text origin rather than the resting border box.",
|
|
8430
9261
|
"An initially empty option set is not an expected Select use case. The no-results state describes a search with no matches, not a source with no choices.",
|
|
8431
9262
|
"Use options for a flat list or sections for grouped choices; when sections are present they take precedence.",
|
|
8432
9263
|
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled.",
|
|
@@ -8437,7 +9268,8 @@
|
|
|
8437
9268
|
"When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron, becomes icon-only, and exposes its label through a hover and keyboard-focus tooltip. A selected value promotes the prefix icon to primary.",
|
|
8438
9269
|
"The popup matches the trigger minimum width, may grow for content, and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback. Assign boundary as an HTMLElement only for an explicit override.",
|
|
8439
9270
|
"Keep popupAlign at start for ordinary fields and filters. Use end when a control sits against a right layout edge and the popup should grow inward.",
|
|
8440
|
-
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
|
|
9271
|
+
"Long option collections scroll inside the popup; virtualization and remote search are not part of this component.",
|
|
9272
|
+
"An explicitly compact composition can keep only the prefix icon while preserving the accessible name and tooltip."
|
|
8441
9273
|
],
|
|
8442
9274
|
"frameworkCaveats": {
|
|
8443
9275
|
"customElements": [
|
|
@@ -8533,6 +9365,10 @@
|
|
|
8533
9365
|
"type": "string | undefined",
|
|
8534
9366
|
"required": false
|
|
8535
9367
|
},
|
|
9368
|
+
"iconOnly": {
|
|
9369
|
+
"type": "boolean",
|
|
9370
|
+
"required": false
|
|
9371
|
+
},
|
|
8536
9372
|
"indicator": {
|
|
8537
9373
|
"type": "SelectIndicator",
|
|
8538
9374
|
"required": false
|
|
@@ -8541,10 +9377,18 @@
|
|
|
8541
9377
|
"type": "string | undefined",
|
|
8542
9378
|
"required": false
|
|
8543
9379
|
},
|
|
9380
|
+
"insetDepth": {
|
|
9381
|
+
"type": "ControlInsetDepth",
|
|
9382
|
+
"required": false
|
|
9383
|
+
},
|
|
8544
9384
|
"isInactive": {
|
|
8545
9385
|
"type": "boolean",
|
|
8546
9386
|
"required": false
|
|
8547
9387
|
},
|
|
9388
|
+
"isInset": {
|
|
9389
|
+
"type": "boolean",
|
|
9390
|
+
"required": false
|
|
9391
|
+
},
|
|
8548
9392
|
"isLoading": {
|
|
8549
9393
|
"type": "boolean",
|
|
8550
9394
|
"required": false
|
|
@@ -8561,6 +9405,10 @@
|
|
|
8561
9405
|
"type": "string | undefined",
|
|
8562
9406
|
"required": false
|
|
8563
9407
|
},
|
|
9408
|
+
"neutralTrigger": {
|
|
9409
|
+
"type": "boolean",
|
|
9410
|
+
"required": false
|
|
9411
|
+
},
|
|
8564
9412
|
"noResultsText": {
|
|
8565
9413
|
"type": "string",
|
|
8566
9414
|
"required": false
|
|
@@ -8589,6 +9437,10 @@
|
|
|
8589
9437
|
"type": "string",
|
|
8590
9438
|
"required": false
|
|
8591
9439
|
},
|
|
9440
|
+
"rounded": {
|
|
9441
|
+
"type": "boolean",
|
|
9442
|
+
"required": false
|
|
9443
|
+
},
|
|
8592
9444
|
"searchPlaceholder": {
|
|
8593
9445
|
"type": "string",
|
|
8594
9446
|
"required": false
|
|
@@ -8757,7 +9609,8 @@
|
|
|
8757
9609
|
"Managed ShellApp keeps the selected desktop section-navigation presentation and ShellPage present and owns page header stickiness and the content scroller.",
|
|
8758
9610
|
"Route-owned pageChrome independently selects ShellPage contentInset, page-header seams, scroll compaction, expanded and compact header-divider visibility, and contentSurface. ShellApp forwards them while resolving whether desktop title geometry is page-local or shell-bar-owned.",
|
|
8759
9611
|
"The application filters unauthorized destinations, sections, and tools before passing them into shell components.",
|
|
8760
|
-
"Application-owned header actions and the account trigger retain surface ownership across shell presentations. Supply surfaceOpen on header actions and accountMenuSurfaceOpen on navigation for rendered surface lifetimes; keep disclosure and selected-route state separate."
|
|
9612
|
+
"Application-owned header actions and the account trigger retain surface ownership across shell presentations. Supply surfaceOpen on header actions and accountMenuSurfaceOpen on navigation for rendered surface lifetimes; keep disclosure and selected-route state separate.",
|
|
9613
|
+
"Managed page chrome can explicitly choose page-local title presentation for pages that must remain compact rather than following capacity and scrolling."
|
|
8761
9614
|
],
|
|
8762
9615
|
"responsiveBehavior": [
|
|
8763
9616
|
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
@@ -10035,7 +10888,8 @@
|
|
|
10035
10888
|
"Use one consistent content variant across every selectable tab in a group.",
|
|
10036
10889
|
"Omitted background is for primary and secondary surfaces; pass the faint context explicitly on faint surfaces.",
|
|
10037
10890
|
"Only the omitted default context emphasizes visible selected label text and keeps the filled track; every explicit surface context uses a transparent track, stable text weight, surface border, and its context-matched neutral active fill rather than a brand active fill.",
|
|
10038
|
-
"Dividers visually separate related subsets inside one tab list but do not create nested navigation or independent selection groups."
|
|
10891
|
+
"Dividers visually separate related subsets inside one tab list but do not create nested navigation or independent selection groups.",
|
|
10892
|
+
"Simple navigation-style tabs use regular control geometry and selected text emphasis, without a selected pill fill or border."
|
|
10039
10893
|
],
|
|
10040
10894
|
"responsiveBehavior": [
|
|
10041
10895
|
"The component remains a single horizontal row and does not become vertical or wrap.",
|
|
@@ -10078,6 +10932,10 @@
|
|
|
10078
10932
|
"type": "boolean",
|
|
10079
10933
|
"required": false
|
|
10080
10934
|
},
|
|
10935
|
+
"presentation": {
|
|
10936
|
+
"type": "'segmented' | 'tabs'",
|
|
10937
|
+
"required": false
|
|
10938
|
+
},
|
|
10081
10939
|
"size": {
|
|
10082
10940
|
"type": "TabGroupSize",
|
|
10083
10941
|
"required": false
|
|
@@ -10193,7 +11051,9 @@
|
|
|
10193
11051
|
"Score-and-text cells (`kind: score-text`) place the small 24px safety score at the top-right of the cell while the same one-, two-, or three-track copy stack as a standard text cell fills from the start edge. The score is top-aligned with the first text track, adds no inner padding, and defaults its accessible name prefix to Safety score. Score-and-text loading geometry uses the matching small score skeleton and declared copy tracks.",
|
|
10194
11052
|
"The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling.",
|
|
10195
11053
|
"While any checkbox selection is active, row activation toggles selection instead of opening details. Clearing the selection restores ordinary row activation. Nested controls retain their own intent, and disabled or non-selectable rows cannot be selected by activating their row.",
|
|
10196
|
-
"Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure."
|
|
11054
|
+
"Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure.",
|
|
11055
|
+
"An external ds-table-preferences may own column controls. Hide only the built-in Customize trigger, keep column customization enabled, and share hidden-column and ordering state with the external surface.",
|
|
11056
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback."
|
|
10197
11057
|
],
|
|
10198
11058
|
"responsiveBehavior": [
|
|
10199
11059
|
"The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
|
|
@@ -10248,6 +11108,10 @@
|
|
|
10248
11108
|
"type": "string",
|
|
10249
11109
|
"required": true
|
|
10250
11110
|
},
|
|
11111
|
+
"captionControlsBorderless": {
|
|
11112
|
+
"type": "boolean",
|
|
11113
|
+
"required": false
|
|
11114
|
+
},
|
|
10251
11115
|
"captionVisibility": {
|
|
10252
11116
|
"type": "TableCaptionVisibility",
|
|
10253
11117
|
"required": false
|
|
@@ -10272,6 +11136,10 @@
|
|
|
10272
11136
|
"type": "TableColumn[]",
|
|
10273
11137
|
"required": false
|
|
10274
11138
|
},
|
|
11139
|
+
"customizeOptions": {
|
|
11140
|
+
"type": "MenuItemData[]",
|
|
11141
|
+
"required": false
|
|
11142
|
+
},
|
|
10275
11143
|
"dataMode": {
|
|
10276
11144
|
"type": "TableDataMode",
|
|
10277
11145
|
"required": false
|
|
@@ -10368,6 +11236,10 @@
|
|
|
10368
11236
|
"type": "string[]",
|
|
10369
11237
|
"required": false
|
|
10370
11238
|
},
|
|
11239
|
+
"hideColumnCustomizerTrigger": {
|
|
11240
|
+
"type": "boolean",
|
|
11241
|
+
"required": false
|
|
11242
|
+
},
|
|
10371
11243
|
"highlightFieldIds": {
|
|
10372
11244
|
"type": "string[]",
|
|
10373
11245
|
"required": false
|
|
@@ -10498,6 +11370,10 @@
|
|
|
10498
11370
|
"name": "dsColumnsConfigChange",
|
|
10499
11371
|
"detail": "TableColumnsConfigChangeDetail"
|
|
10500
11372
|
},
|
|
11373
|
+
{
|
|
11374
|
+
"name": "dsCustomizeOptionChange",
|
|
11375
|
+
"detail": "string"
|
|
11376
|
+
},
|
|
10501
11377
|
{
|
|
10502
11378
|
"name": "dsDataModeChange",
|
|
10503
11379
|
"detail": "TableDataModeChangeDetail"
|
|
@@ -10608,16 +11484,20 @@
|
|
|
10608
11484
|
],
|
|
10609
11485
|
"states": [
|
|
10610
11486
|
"filters, values, matchModes, and activeFilterId are controlled. dsChange, dsMatchModeChange, dsClear, and dsActiveFilterChange report intent without changing those inputs; the application applies query consequences and returns replacement values.",
|
|
10611
|
-
"The visible trigger label stays singular Filter without appending an active-count suffix. Active criteria
|
|
11487
|
+
"The visible trigger label stays singular Filter without appending an active-count suffix. Active criteria retain the same neutral label and icon colors.",
|
|
10612
11488
|
"The popup reserves a visually empty footer row inside the category pane for every state. Active criteria reveal its divider and only a left-aligned Clear action, without adding popup height or showing redundant selected-count copy; the option pane retains its full column.",
|
|
10613
11489
|
"Every multiple-choice category exposes a right-pane footer where the blue any or all word toggles its controlled match mode. any is the default OR mode; the application applies the requested mode to its query.",
|
|
10614
11490
|
"Every non-date category exposes a 40px secondary-background search header that filters its displayed option labels and descriptions without changing controlled filter values. Date retains only its Relative and Range header.",
|
|
10615
11491
|
"Date categories use the shared compact-header Range and Relative experience. Persist relative values semantically and resolve them from the product's current date whenever rows or saved views are applied.",
|
|
10616
|
-
"Popup visibility follows the same mutable open and dsOpenChange contract as ds-filter-menu."
|
|
11492
|
+
"Popup visibility follows the same mutable open and dsOpenChange contract as ds-filter-menu.",
|
|
11493
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
11494
|
+
"Expanded toolbar triggers use an icon and regular-weight text without a trailing chevron.",
|
|
11495
|
+
"Selected views and applied filters do not promote trigger icon or label colors. Trigger colors remain neutral across value changes.",
|
|
11496
|
+
"Apply-required filtering stages edits locally, including match mode. Clear immediately clears all filters and discards pending edits. The footer appears when filters are selected or applied; Apply stays in place and inactive without pending changes; applying emits controlled changes. Closing discards unapplied edits."
|
|
10617
11497
|
],
|
|
10618
11498
|
"responsiveBehavior": [
|
|
10619
11499
|
"Place the control in the trailing region of ds-table-toolbar.",
|
|
10620
|
-
"Inside a named ds-table container narrower than 900px, the trigger becomes icon-only, exposes its visible label through a hover and keyboard-focus tooltip, and
|
|
11500
|
+
"Inside a named ds-table container narrower than 900px, the trigger becomes icon-only, exposes its visible label through a hover and keyboard-focus tooltip, and the Filters icon remains neutral with active criteria."
|
|
10621
11501
|
],
|
|
10622
11502
|
"frameworkCaveats": {
|
|
10623
11503
|
"customElements": [
|
|
@@ -10662,6 +11542,10 @@
|
|
|
10662
11542
|
"type": "FilterMenuFilter[]",
|
|
10663
11543
|
"required": false
|
|
10664
11544
|
},
|
|
11545
|
+
"hasBorder": {
|
|
11546
|
+
"type": "boolean",
|
|
11547
|
+
"required": false
|
|
11548
|
+
},
|
|
10665
11549
|
"label": {
|
|
10666
11550
|
"type": "string",
|
|
10667
11551
|
"required": false
|
|
@@ -10785,7 +11669,11 @@
|
|
|
10785
11669
|
"options and grouping are controlled. A data option may supply product-owned orderOptions; otherwise Order defaults to Ascending and Descending. dsGroupChange reports a complete TableGroupingState and dsClear requests null grouping without mutating either input.",
|
|
10786
11670
|
"Selecting a new data point starts at its first custom order option, or ascending when it has no custom order options. Re-selecting the active data point preserves its complete order state.",
|
|
10787
11671
|
"Selecting a data point or direction applies immediately and leaves the dialog open so the other pane can be changed.",
|
|
10788
|
-
"The grouping picker automatically holds the shared surface-open wash through exit. Opening this picker is separate from expanding an inline table group."
|
|
11672
|
+
"The grouping picker automatically holds the shared surface-open wash through exit. Opening this picker is separate from expanding an inline table group.",
|
|
11673
|
+
"Embedded mode renders the same controlled content inside a parent-owned surface; the parent owns positioning, initial focus, Escape, Tab exit, and dismissal.",
|
|
11674
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
11675
|
+
"Expanded toolbar triggers use an icon and regular-weight text without a trailing chevron.",
|
|
11676
|
+
"Vertical presentation stacks grouping data and ordering, with an explicit No grouping choice and no Clear footer."
|
|
10789
11677
|
],
|
|
10790
11678
|
"responsiveBehavior": [
|
|
10791
11679
|
"Use in the trailing region of ds-table-toolbar.",
|
|
@@ -10827,6 +11715,10 @@
|
|
|
10827
11715
|
"type": "string",
|
|
10828
11716
|
"required": false
|
|
10829
11717
|
},
|
|
11718
|
+
"embedded": {
|
|
11719
|
+
"type": "boolean",
|
|
11720
|
+
"required": false
|
|
11721
|
+
},
|
|
10830
11722
|
"emptyMessage": {
|
|
10831
11723
|
"type": "string",
|
|
10832
11724
|
"required": false
|
|
@@ -10835,6 +11727,10 @@
|
|
|
10835
11727
|
"type": "TableGroupingState | null",
|
|
10836
11728
|
"required": false
|
|
10837
11729
|
},
|
|
11730
|
+
"hasBorder": {
|
|
11731
|
+
"type": "boolean",
|
|
11732
|
+
"required": false
|
|
11733
|
+
},
|
|
10838
11734
|
"open": {
|
|
10839
11735
|
"type": "boolean",
|
|
10840
11736
|
"required": false
|
|
@@ -10842,6 +11738,10 @@
|
|
|
10842
11738
|
"options": {
|
|
10843
11739
|
"type": "TableGroupOption[]",
|
|
10844
11740
|
"required": false
|
|
11741
|
+
},
|
|
11742
|
+
"vertical": {
|
|
11743
|
+
"type": "boolean",
|
|
11744
|
+
"required": false
|
|
10845
11745
|
}
|
|
10846
11746
|
},
|
|
10847
11747
|
"events": [
|
|
@@ -10877,6 +11777,183 @@
|
|
|
10877
11777
|
"text"
|
|
10878
11778
|
]
|
|
10879
11779
|
},
|
|
11780
|
+
{
|
|
11781
|
+
"name": "table-preferences",
|
|
11782
|
+
"title": "TablePreferences",
|
|
11783
|
+
"description": "Compact table preferences dialog with Filters, Sort, Group, and Customize tabs.",
|
|
11784
|
+
"type": "registry:ui",
|
|
11785
|
+
"meta": {
|
|
11786
|
+
"library": "@ds-mo/ui",
|
|
11787
|
+
"distribution": "npm",
|
|
11788
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/table-preferences",
|
|
11789
|
+
"source": "src/wc/components/TablePreferences/TablePreferences.tsx",
|
|
11790
|
+
"intentStatus": "complete",
|
|
11791
|
+
"intent": {
|
|
11792
|
+
"audience": "general",
|
|
11793
|
+
"status": "experimental",
|
|
11794
|
+
"summary": "Compact table preferences dialog with Filters, Sort, Group, and Customize tabs.",
|
|
11795
|
+
"useWhen": [
|
|
11796
|
+
"A narrow table toolbar or a user preference calls for one result-shaping control."
|
|
11797
|
+
],
|
|
11798
|
+
"avoidWhen": [
|
|
11799
|
+
"The application needs unrelated actions or a submitted form."
|
|
11800
|
+
],
|
|
11801
|
+
"states": [
|
|
11802
|
+
"The application owns all filter, sort, grouping, and column configuration values. Apply emitted changes to the table and replace the matching preferences inputs.",
|
|
11803
|
+
"The component owns popup visibility, active tab, positioning, and dismissal; embedded controls reuse the same content as their standalone popups.",
|
|
11804
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
11805
|
+
"Apply-required filtering stages edits locally, including match mode. Clear immediately clears all filters and discards pending edits. The footer appears when filters are selected or applied; Apply stays in place and inactive without pending changes; applying emits controlled changes. Closing discards unapplied edits.",
|
|
11806
|
+
"Embedded presentation delegates its active tab, draft state, Apply, Reset, and dismissal to the owning panel; it renders vertical filter and grouping content without a popup trigger."
|
|
11807
|
+
],
|
|
11808
|
+
"accessibility": [
|
|
11809
|
+
"An icon-only Preferences trigger opens a named dialog. TabGroup owns section keyboard navigation; Escape and outside activation dismiss, returning focus to the trigger."
|
|
11810
|
+
],
|
|
11811
|
+
"responsiveBehavior": [
|
|
11812
|
+
"The popup fits the viewport and scrolls internally. The application chooses whether to show it instead of separate controls. Hide the table-owned Customize trigger while retaining column customization."
|
|
11813
|
+
],
|
|
11814
|
+
"patterns": [],
|
|
11815
|
+
"commonlyComposedWith": [
|
|
11816
|
+
"component:ds-table",
|
|
11817
|
+
"component:ds-table-toolbar",
|
|
11818
|
+
"component:ds-filter-menu",
|
|
11819
|
+
"component:ds-menu",
|
|
11820
|
+
"component:ds-table-group",
|
|
11821
|
+
"component:ds-tab-group"
|
|
11822
|
+
]
|
|
11823
|
+
},
|
|
11824
|
+
"props": {
|
|
11825
|
+
"activeFilterId": {
|
|
11826
|
+
"type": "string | undefined",
|
|
11827
|
+
"required": false
|
|
11828
|
+
},
|
|
11829
|
+
"activeTab": {
|
|
11830
|
+
"type": "PreferencesTab",
|
|
11831
|
+
"required": false
|
|
11832
|
+
},
|
|
11833
|
+
"columnOrder": {
|
|
11834
|
+
"type": "string[]",
|
|
11835
|
+
"required": false
|
|
11836
|
+
},
|
|
11837
|
+
"columns": {
|
|
11838
|
+
"type": "TableColumn[]",
|
|
11839
|
+
"required": false
|
|
11840
|
+
},
|
|
11841
|
+
"customizeOptions": {
|
|
11842
|
+
"type": "MenuItemData[]",
|
|
11843
|
+
"required": false
|
|
11844
|
+
},
|
|
11845
|
+
"customizeSections": {
|
|
11846
|
+
"type": "MenuSection[]",
|
|
11847
|
+
"required": false
|
|
11848
|
+
},
|
|
11849
|
+
"embedded": {
|
|
11850
|
+
"type": "boolean",
|
|
11851
|
+
"required": false
|
|
11852
|
+
},
|
|
11853
|
+
"filters": {
|
|
11854
|
+
"type": "FilterMenuFilter[]",
|
|
11855
|
+
"required": false
|
|
11856
|
+
},
|
|
11857
|
+
"grouping": {
|
|
11858
|
+
"type": "TableGroupingState | null",
|
|
11859
|
+
"required": false
|
|
11860
|
+
},
|
|
11861
|
+
"groupingOptions": {
|
|
11862
|
+
"type": "TableGroupOption[]",
|
|
11863
|
+
"required": false
|
|
11864
|
+
},
|
|
11865
|
+
"hasBorder": {
|
|
11866
|
+
"type": "boolean",
|
|
11867
|
+
"required": false
|
|
11868
|
+
},
|
|
11869
|
+
"hiddenColumnIds": {
|
|
11870
|
+
"type": "string[]",
|
|
11871
|
+
"required": false
|
|
11872
|
+
},
|
|
11873
|
+
"label": {
|
|
11874
|
+
"type": "string",
|
|
11875
|
+
"required": false
|
|
11876
|
+
},
|
|
11877
|
+
"matchModes": {
|
|
11878
|
+
"type": "FilterMenuMatchModes",
|
|
11879
|
+
"required": false
|
|
11880
|
+
},
|
|
11881
|
+
"sort": {
|
|
11882
|
+
"type": "TableSortState | null",
|
|
11883
|
+
"required": false
|
|
11884
|
+
},
|
|
11885
|
+
"sortColumns": {
|
|
11886
|
+
"type": "TableColumn[]",
|
|
11887
|
+
"required": false
|
|
11888
|
+
},
|
|
11889
|
+
"values": {
|
|
11890
|
+
"type": "FilterMenuValues",
|
|
11891
|
+
"required": false
|
|
11892
|
+
}
|
|
11893
|
+
},
|
|
11894
|
+
"events": [
|
|
11895
|
+
{
|
|
11896
|
+
"name": "dsActiveFilterChange",
|
|
11897
|
+
"detail": "string"
|
|
11898
|
+
},
|
|
11899
|
+
{
|
|
11900
|
+
"name": "dsColumnsConfigChange",
|
|
11901
|
+
"detail": "TableColumnsConfigChangeDetail"
|
|
11902
|
+
},
|
|
11903
|
+
{
|
|
11904
|
+
"name": "dsCustomizeOptionChange",
|
|
11905
|
+
"detail": "string"
|
|
11906
|
+
},
|
|
11907
|
+
{
|
|
11908
|
+
"name": "dsFilterChange",
|
|
11909
|
+
"detail": "FilterMenuChangeDetail"
|
|
11910
|
+
},
|
|
11911
|
+
{
|
|
11912
|
+
"name": "dsFilterMatchModeChange",
|
|
11913
|
+
"detail": "FilterMenuMatchModeChangeDetail"
|
|
11914
|
+
},
|
|
11915
|
+
{
|
|
11916
|
+
"name": "dsFiltersClear",
|
|
11917
|
+
"detail": "void"
|
|
11918
|
+
},
|
|
11919
|
+
{
|
|
11920
|
+
"name": "dsGroupChange",
|
|
11921
|
+
"detail": "TableGroupingState"
|
|
11922
|
+
},
|
|
11923
|
+
{
|
|
11924
|
+
"name": "dsGroupClear",
|
|
11925
|
+
"detail": "void"
|
|
11926
|
+
},
|
|
11927
|
+
{
|
|
11928
|
+
"name": "dsPreferencesTabChange",
|
|
11929
|
+
"detail": "PreferencesTab"
|
|
11930
|
+
},
|
|
11931
|
+
{
|
|
11932
|
+
"name": "dsSortChange",
|
|
11933
|
+
"detail": "TableSortChangeDetail"
|
|
11934
|
+
}
|
|
11935
|
+
],
|
|
11936
|
+
"slots": [],
|
|
11937
|
+
"exports": {
|
|
11938
|
+
"customElement": "ds-table-preferences",
|
|
11939
|
+
"react": "DsTablePreferences",
|
|
11940
|
+
"vue": "DsTablePreferences",
|
|
11941
|
+
"angular": "DsTablePreferences"
|
|
11942
|
+
}
|
|
11943
|
+
},
|
|
11944
|
+
"dependencies": [
|
|
11945
|
+
"@ds-mo/ui",
|
|
11946
|
+
"@ds-mo/tokens"
|
|
11947
|
+
],
|
|
11948
|
+
"registryDependencies": [
|
|
11949
|
+
"button-unfilled",
|
|
11950
|
+
"filter-menu",
|
|
11951
|
+
"menu",
|
|
11952
|
+
"tab-group",
|
|
11953
|
+
"table-group",
|
|
11954
|
+
"tooltip"
|
|
11955
|
+
]
|
|
11956
|
+
},
|
|
10880
11957
|
{
|
|
10881
11958
|
"name": "table-saved-views",
|
|
10882
11959
|
"title": "TableSavedViews",
|
|
@@ -10905,7 +11982,8 @@
|
|
|
10905
11982
|
"component:ds-table",
|
|
10906
11983
|
"component:ds-select",
|
|
10907
11984
|
"component:ds-menu",
|
|
10908
|
-
"component:ds-modal"
|
|
11985
|
+
"component:ds-modal",
|
|
11986
|
+
"component:ds-field"
|
|
10909
11987
|
],
|
|
10910
11988
|
"patterns": [
|
|
10911
11989
|
"pattern:menu-trigger"
|
|
@@ -10913,17 +11991,22 @@
|
|
|
10913
11991
|
"accessibility": [
|
|
10914
11992
|
"The primary control retains combobox semantics and exposes a direct accessible name.",
|
|
10915
11993
|
"Each custom view exposes a separately named options trigger. The options menu supports keyboard navigation and returns focus through the shared Select and Menu behavior.",
|
|
10916
|
-
"The naming dialog traps focus through Modal behavior,
|
|
11994
|
+
"The naming dialog traps focus through Modal behavior. The dialog heading names the task, so the name field omits a visible label; the input keeps aria-label Name, Field associates validation text, and focus returns to the saved-views control after closing.",
|
|
11995
|
+
"Footer actions are assigned with slot=\"footer\" on each button so Modal owns the two-action layout."
|
|
10917
11996
|
],
|
|
10918
11997
|
"states": [
|
|
10919
11998
|
"views, value, and dirty are controlled. Dirty state is presented only for a selected custom view; the default template never shows the trigger dot or save/discard actions even if dirty is supplied. Selection, create, save, discard, rename, and remove events communicate intent and never mutate application records.",
|
|
10920
11999
|
"The component owns only transient interaction state: the contextual menu, naming dialog, draft name, duplicate-name validation, and focus restoration.",
|
|
10921
12000
|
"The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist.",
|
|
10922
|
-
"The built-in picker and contextual option menu each retain their own surface-open treatment. Opening a view menu does not select that view."
|
|
12001
|
+
"The built-in picker and contextual option menu each retain their own surface-open treatment. Opening a view menu does not select that view.",
|
|
12002
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
12003
|
+
"Expanded toolbar triggers use an icon and regular-weight text without a trailing chevron.",
|
|
12004
|
+
"Selected views and applied filters do not promote trigger icon or label colors. Trigger colors remain neutral across value changes."
|
|
10923
12005
|
],
|
|
10924
12006
|
"responsiveBehavior": [
|
|
10925
12007
|
"The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior. Its trigger hugs short view names and is capped at the compact menu-width token so long names truncate while the dirty dot stays visible. Its choice popup keeps that same token as the minimum width.",
|
|
10926
|
-
"Place it in the start region of ds-table-toolbar so the middle region can keep left-side and right-side controls on one spanning cluster."
|
|
12008
|
+
"Place it in the start region of ds-table-toolbar so the middle region can keep left-side and right-side controls on one spanning cluster.",
|
|
12009
|
+
"The ViewMenu prefix identifies saved views. Compact compositions and narrow table captions show only the icon while retaining the accessible name and tooltip."
|
|
10927
12010
|
],
|
|
10928
12011
|
"frameworkCaveats": {
|
|
10929
12012
|
"customElements": [
|
|
@@ -10952,6 +12035,10 @@
|
|
|
10952
12035
|
]
|
|
10953
12036
|
},
|
|
10954
12037
|
"props": {
|
|
12038
|
+
"compact": {
|
|
12039
|
+
"type": "boolean",
|
|
12040
|
+
"required": false
|
|
12041
|
+
},
|
|
10955
12042
|
"createLabel": {
|
|
10956
12043
|
"type": "string",
|
|
10957
12044
|
"required": false
|
|
@@ -10968,6 +12055,10 @@
|
|
|
10968
12055
|
"type": "boolean",
|
|
10969
12056
|
"required": false
|
|
10970
12057
|
},
|
|
12058
|
+
"hasBorder": {
|
|
12059
|
+
"type": "boolean",
|
|
12060
|
+
"required": false
|
|
12061
|
+
},
|
|
10971
12062
|
"label": {
|
|
10972
12063
|
"type": "string",
|
|
10973
12064
|
"required": false
|
|
@@ -11069,7 +12160,7 @@
|
|
|
11069
12160
|
"Typing slash opens the field listbox without inserting slash into the table query. Text typed while it is open filters data points by complete label, Up and Down change the active match, Enter selects it, Escape closes it, and Left and Right retain native text-cursor behavior because focus never leaves the input. Backspace edits the field-picker query first and closes the listbox when that query is empty.",
|
|
11070
12161
|
"The query disables browser autocomplete history, automatic capitalization, autocorrection, and spellchecking so browser-owned suggestions never obscure the product-owned field menu or table results.",
|
|
11071
12162
|
"Selected field Chips have individually labeled remove actions and are also described by the search input. Polite announcements report additions, removals, and clearing without duplicating the visible query.",
|
|
11072
|
-
"The
|
|
12163
|
+
"The search input exposes the slash command through aria-keyshortcuts and its description, without a visible suffix button.",
|
|
11073
12164
|
"The clear action removes both free text and every selected field. It restores focus to the search input; each Chip's own remove action remains scoped to that field."
|
|
11074
12165
|
],
|
|
11075
12166
|
"states": [
|
|
@@ -11079,12 +12170,13 @@
|
|
|
11079
12170
|
"Backspace edits a non-empty field-picker query, then closes the open slash listbox when that query is empty. When the table query is empty and the listbox is already closed, the next Backspace removes the last selected field. Ordinary Backspace edits table query text when the listbox is closed.",
|
|
11080
12171
|
"Duplicate, blank, and unknown field identities are ignored for presentation. Selected fields preserve the consumer's order.",
|
|
11081
12172
|
"Inactive search leaves the tab order, closes the field listbox, and does not emit query or field changes.",
|
|
11082
|
-
"The field-picker action holds the shared surface-open wash while its listbox is visible; chosen search fields remain independent."
|
|
12173
|
+
"The field-picker action holds the shared surface-open wash while its listbox is visible; chosen search fields remain independent.",
|
|
12174
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback."
|
|
11083
12175
|
],
|
|
11084
12176
|
"responsiveBehavior": [
|
|
11085
12177
|
"The control fills the available inline size supplied by the table toolbar search slot. Selected Chips and the editable query share one horizontal editor lane so the md control does not grow vertically.",
|
|
11086
12178
|
"The field popup enters the top layer, aligns its first choice cell with the search control, flips or clamps to the viewport or nearest overlay boundary, and scrolls internally when its catalog is taller than available space.",
|
|
11087
|
-
"
|
|
12179
|
+
"Clear appears when query text is present and uses the standard sm icon button treatment."
|
|
11088
12180
|
],
|
|
11089
12181
|
"frameworkCaveats": {
|
|
11090
12182
|
"customElements": [
|
|
@@ -11130,6 +12222,10 @@
|
|
|
11130
12222
|
"type": "string",
|
|
11131
12223
|
"required": false
|
|
11132
12224
|
},
|
|
12225
|
+
"hasBorder": {
|
|
12226
|
+
"type": "boolean",
|
|
12227
|
+
"required": false
|
|
12228
|
+
},
|
|
11133
12229
|
"isInactive": {
|
|
11134
12230
|
"type": "boolean",
|
|
11135
12231
|
"required": false
|
|
@@ -11177,7 +12273,6 @@
|
|
|
11177
12273
|
"registryDependencies": [
|
|
11178
12274
|
"button-unfilled",
|
|
11179
12275
|
"chip",
|
|
11180
|
-
"divider",
|
|
11181
12276
|
"empty-state",
|
|
11182
12277
|
"icon",
|
|
11183
12278
|
"text"
|
|
@@ -11235,7 +12330,9 @@
|
|
|
11235
12330
|
"Selecting a different data field keeps the current direction, or starts ascending when no sort exists. Selecting a direction applies it to the current field, or to the first sortable field when no sort exists. Selecting the already-active field or direction is a no-op and does not toggle the way a header click does.",
|
|
11236
12331
|
"The trigger stays Sort in regular-weight resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis. It keeps pressed interaction paint without physically scaling inside the stable table caption row.",
|
|
11237
12332
|
"Compound sortable headers contribute one Data row per segment. Action columns never appear.",
|
|
11238
|
-
"The trigger automatically holds the shared surface-open wash through menu exit while the selected sort remains independently controlled."
|
|
12333
|
+
"The trigger automatically holds the shared surface-open wash through menu exit while the selected sort remains independently controlled.",
|
|
12334
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
12335
|
+
"Expanded toolbar triggers use an icon and regular-weight text without a trailing chevron."
|
|
11239
12336
|
],
|
|
11240
12337
|
"responsiveBehavior": [
|
|
11241
12338
|
"Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
|
|
@@ -11277,6 +12374,10 @@
|
|
|
11277
12374
|
"type": "TableColumn[]",
|
|
11278
12375
|
"required": false
|
|
11279
12376
|
},
|
|
12377
|
+
"hasBorder": {
|
|
12378
|
+
"type": "boolean",
|
|
12379
|
+
"required": false
|
|
12380
|
+
},
|
|
11280
12381
|
"sort": {
|
|
11281
12382
|
"type": "TableSortState | null",
|
|
11282
12383
|
"required": false
|
|
@@ -11338,7 +12439,8 @@
|
|
|
11338
12439
|
"component:ds-table-group",
|
|
11339
12440
|
"component:ds-select",
|
|
11340
12441
|
"component:ds-table-sort",
|
|
11341
|
-
"component:ds-button-unfilled"
|
|
12442
|
+
"component:ds-button-unfilled",
|
|
12443
|
+
"component:ds-table-preferences"
|
|
11342
12444
|
],
|
|
11343
12445
|
"patterns": [],
|
|
11344
12446
|
"accessibility": [
|
|
@@ -11349,14 +12451,15 @@
|
|
|
11349
12451
|
"states": [
|
|
11350
12452
|
"The component owns layout only. It never mutates slotted control props, values, menus, loading, persistence, or consequences. Use ds-table-saved-views and ds-table-filter when those interactions need the shared CompoMo behavior while application data and persistence remain external.",
|
|
11351
12453
|
"Buttons in the toolbar keep their hover and pressed interaction paint without physically scaling, so pointer feedback does not disturb the stable caption geometry.",
|
|
11352
|
-
"The start cluster is followed by
|
|
11353
|
-
"
|
|
12454
|
+
"The start cluster is followed by Search, optional leading controls, and one trailing action cluster. The start cluster hides when nothing is projected. Search is a dedicated slot that hides when nothing is projected and grows to consume available row space. Empty leading or trailing clusters add no placeholder chrome. Search is the only toolbar region that grows and shrinks; all action controls retain their control geometry and align directly before the table-owned actions.",
|
|
12455
|
+
"Data-mode switching remains a table-owned caption action. Column customization normally uses the table caption trigger; compact compositions use the shared ds-table-preferences control and hide that trigger. When slotted into a table header, the table caption owns overflow for the complete toolbar and table-owned action row.",
|
|
12456
|
+
"Standard toolbars omit region dividers. Borderless compositions show dividers after populated start and search regions when another region follows; the application supplies borderless controls."
|
|
11354
12457
|
],
|
|
11355
12458
|
"responsiveBehavior": [
|
|
11356
12459
|
"The start cluster, search, trailing Filter/Sort/Group, and table caption trailing actions stay on one line. Saved views hug their current trigger content up to the compact menu-width token rather than reserving that full width; long names truncate while the dirty dot stays visible. Filter, Sort, and Group triggers cap at the same token, and Sort and Group popups keep that compact menu-width floor. A standalone toolbar owns its horizontal scrolling; inside a table, the complete caption row is the single overflow owner so table-owned actions never remain pinned over scrolling toolbar controls.",
|
|
11357
|
-
"Search consumes the row space left between fixed control groups and flexes smaller when the complete row needs space. Inside a named ds-table container narrower than 900px, ds-table-filter, ds-table-group, and ds-table-sort omit their labels and chevrons; each exposes its label through a hover and keyboard-focus tooltip. Empty leading and trailing slot groups do not add spacing. Active filtering
|
|
12460
|
+
"Search consumes the row space left between fixed control groups and flexes smaller when the complete row needs space. Inside a named ds-table container narrower than 900px, ds-table-filter, ds-table-group, and ds-table-sort omit their labels and chevrons; each exposes its label through a hover and keyboard-focus tooltip. Empty leading and trailing slot groups do not add spacing. Active filtering retains neutral trigger colors. Group and Sort keep resting secondary chrome. Table-owned Customize also becomes the icon-only Table menu button at that width with the same tooltip behavior.",
|
|
11358
12461
|
"The scrollbar is visually suppressed without removing touch, trackpad, mouse-wheel, or keyboard scrolling from the overflow container.",
|
|
11359
|
-
"
|
|
12462
|
+
"For compact toolbars, the application can replace Filter, Sort, Group and the table Customize trigger with ds-table-preferences in the trailing slot. Share the same controlled values and events; the toolbar remains a data-agnostic layout."
|
|
11360
12463
|
],
|
|
11361
12464
|
"frameworkCaveats": {
|
|
11362
12465
|
"customElements": [
|
|
@@ -11381,6 +12484,10 @@
|
|
|
11381
12484
|
]
|
|
11382
12485
|
},
|
|
11383
12486
|
"props": {
|
|
12487
|
+
"borderless": {
|
|
12488
|
+
"type": "boolean",
|
|
12489
|
+
"required": false
|
|
12490
|
+
},
|
|
11384
12491
|
"label": {
|
|
11385
12492
|
"type": "string",
|
|
11386
12493
|
"required": false
|
|
@@ -11794,7 +12901,7 @@
|
|
|
11794
12901
|
"The default four visible rows can be changed with rows; rows is clamped to at least one.",
|
|
11795
12902
|
"Vertical resizing is enabled by default and can be disabled when the surrounding layout owns the field height.",
|
|
11796
12903
|
"Size changes typography and inset spacing without changing the authored row count.",
|
|
11797
|
-
"Border, focus, error, placeholder, inactive, hover, and pressed treatments follow the same shared recipes as Input."
|
|
12904
|
+
"Border, focus, error, placeholder, inactive, hover, and pressed treatments follow the same shared recipes as Input. When hasBorder is false, supporting error copy insets to the text origin rather than the resting border box."
|
|
11798
12905
|
],
|
|
11799
12906
|
"responsiveBehavior": [
|
|
11800
12907
|
"Textarea fills its parent by default and follows the width supplied by Field or the form layout.",
|
|
@@ -11952,6 +13059,122 @@
|
|
|
11952
13059
|
"text"
|
|
11953
13060
|
]
|
|
11954
13061
|
},
|
|
13062
|
+
{
|
|
13063
|
+
"name": "time-picker",
|
|
13064
|
+
"title": "TimePicker",
|
|
13065
|
+
"description": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
|
|
13066
|
+
"type": "registry:ui",
|
|
13067
|
+
"meta": {
|
|
13068
|
+
"library": "@ds-mo/ui",
|
|
13069
|
+
"distribution": "npm",
|
|
13070
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/time-picker",
|
|
13071
|
+
"source": "src/wc/components/TimePicker/TimePicker.tsx",
|
|
13072
|
+
"intentStatus": "complete",
|
|
13073
|
+
"intent": {
|
|
13074
|
+
"audience": "general",
|
|
13075
|
+
"status": "stable",
|
|
13076
|
+
"summary": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
|
|
13077
|
+
"useWhen": [
|
|
13078
|
+
"A user picks a clock time from hour, minute, and AM/PM lists.",
|
|
13079
|
+
"A time field needs 32px clock tiles that match calendar day geometry and the shared choice-list selected treatment."
|
|
13080
|
+
],
|
|
13081
|
+
"avoidWhen": [
|
|
13082
|
+
"The user types a time without opening a picker; the owning field keeps that editable value.",
|
|
13083
|
+
"The value is a calendar date rather than a clock time.",
|
|
13084
|
+
"The user chooses from a finite set of named schedule options rather than an exact time."
|
|
13085
|
+
],
|
|
13086
|
+
"alternatives": [
|
|
13087
|
+
{
|
|
13088
|
+
"when": "The time is a form field that can be typed or picked.",
|
|
13089
|
+
"component": "component:ds-input-time",
|
|
13090
|
+
"reason": "InputTime owns the editable field, form association, and the time-picker popup."
|
|
13091
|
+
},
|
|
13092
|
+
{
|
|
13093
|
+
"when": "The value is a calendar date.",
|
|
13094
|
+
"component": "component:ds-calendar",
|
|
13095
|
+
"reason": "Calendar owns the month grid for single dates and ranges."
|
|
13096
|
+
}
|
|
13097
|
+
],
|
|
13098
|
+
"commonlyComposedWith": [
|
|
13099
|
+
"component:ds-input-time",
|
|
13100
|
+
"component:ds-text"
|
|
13101
|
+
],
|
|
13102
|
+
"accessibility": [
|
|
13103
|
+
"Hour, minute, and AM/PM are separate labelled listboxes without visible column headings. Each list keeps one tab stop on the selected option.",
|
|
13104
|
+
"Arrow keys move to the next or previous option and stop at the first and last values; they do not wrap. Home and End jump to those ends. Left and Right move between columns and stop at Hour and AM/PM.",
|
|
13105
|
+
"Inactive pickers disable every option. Optional min and max times disable combinations outside that inclusive bound."
|
|
13106
|
+
],
|
|
13107
|
+
"states": [
|
|
13108
|
+
"Selected hour, minute, and period tiles use the shared interaction-fill selected wash and primary text. Resting tiles use secondary text on a transparent 32px square.",
|
|
13109
|
+
"Lists are finite. Hour runs 1 through 12, minutes follow the step, and AM/PM has two values. Scrolling and keyboard movement stop at those ends instead of looping.",
|
|
13110
|
+
"An empty value highlights 12:00 AM so the lists have a resting selection without inventing a second empty state."
|
|
13111
|
+
],
|
|
13112
|
+
"responsiveBehavior": [
|
|
13113
|
+
"The three columns fill the width supplied by the owner. Tile size, 4px gaps, and the seven-tile list viewport are owned here; the owner supplies the popup or pane width."
|
|
13114
|
+
],
|
|
13115
|
+
"frameworkCaveats": {
|
|
13116
|
+
"customElements": [
|
|
13117
|
+
"Listen for dsChange. The detail is the clock time string HH:MM."
|
|
13118
|
+
],
|
|
13119
|
+
"react": [
|
|
13120
|
+
"Use DsTimePicker, bind value, and handle onDsChange."
|
|
13121
|
+
]
|
|
13122
|
+
},
|
|
13123
|
+
"references": [
|
|
13124
|
+
{
|
|
13125
|
+
"label": "Storybook examples",
|
|
13126
|
+
"path": "src/wc/components/TimePicker/TimePicker.stories.ts"
|
|
13127
|
+
}
|
|
13128
|
+
]
|
|
13129
|
+
},
|
|
13130
|
+
"props": {
|
|
13131
|
+
"autoFocus": {
|
|
13132
|
+
"type": "boolean",
|
|
13133
|
+
"required": false
|
|
13134
|
+
},
|
|
13135
|
+
"isInactive": {
|
|
13136
|
+
"type": "boolean",
|
|
13137
|
+
"required": false
|
|
13138
|
+
},
|
|
13139
|
+
"max": {
|
|
13140
|
+
"type": "string | undefined",
|
|
13141
|
+
"required": false
|
|
13142
|
+
},
|
|
13143
|
+
"min": {
|
|
13144
|
+
"type": "string | undefined",
|
|
13145
|
+
"required": false
|
|
13146
|
+
},
|
|
13147
|
+
"step": {
|
|
13148
|
+
"type": "string | number",
|
|
13149
|
+
"required": false
|
|
13150
|
+
},
|
|
13151
|
+
"value": {
|
|
13152
|
+
"type": "string",
|
|
13153
|
+
"required": false
|
|
13154
|
+
}
|
|
13155
|
+
},
|
|
13156
|
+
"events": [
|
|
13157
|
+
{
|
|
13158
|
+
"name": "dsChange",
|
|
13159
|
+
"detail": "string"
|
|
13160
|
+
}
|
|
13161
|
+
],
|
|
13162
|
+
"slots": [],
|
|
13163
|
+
"exports": {
|
|
13164
|
+
"customElement": "ds-time-picker",
|
|
13165
|
+
"react": "DsTimePicker",
|
|
13166
|
+
"vue": "DsTimePicker",
|
|
13167
|
+
"angular": "DsTimePicker"
|
|
13168
|
+
}
|
|
13169
|
+
},
|
|
13170
|
+
"dependencies": [
|
|
13171
|
+
"@ds-mo/ui",
|
|
13172
|
+
"@ds-mo/tokens"
|
|
13173
|
+
],
|
|
13174
|
+
"registryDependencies": [
|
|
13175
|
+
"text"
|
|
13176
|
+
]
|
|
13177
|
+
},
|
|
11955
13178
|
{
|
|
11956
13179
|
"name": "toast",
|
|
11957
13180
|
"title": "Toast",
|