@ds-mo/ui 14.35.0 → 15.0.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 +5733 -4656
- 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-conversation-list.d.ts +1 -1
- package/dist/angular/ds-conversation-list.js +3 -4
- package/dist/angular/ds-data-customize.d.ts +18 -0
- package/dist/angular/ds-data-customize.js +46 -0
- package/dist/angular/ds-data-filter.d.ts +50 -0
- package/dist/angular/{ds-table-filter.js → ds-data-filter.js} +10 -10
- package/dist/angular/ds-data-group.d.ts +29 -0
- package/dist/angular/{ds-table-group.js → ds-data-group.js} +10 -10
- package/dist/angular/ds-data-preferences.d.ts +39 -0
- package/dist/angular/{ds-table-preferences.js → ds-data-preferences.js} +15 -15
- package/dist/angular/ds-data-saved-views.d.ts +49 -0
- package/dist/angular/{ds-table-saved-views.js → ds-data-saved-views.js} +10 -10
- package/dist/angular/ds-data-search.d.ts +20 -0
- package/dist/angular/{ds-table-search.js → ds-data-search.js} +12 -12
- package/dist/angular/ds-data-sort.d.ts +16 -0
- package/dist/angular/{ds-table-sort.js → ds-data-sort.js} +12 -12
- package/dist/angular/ds-data-toolbar.d.ts +12 -0
- package/dist/angular/{ds-table-toolbar.js → ds-data-toolbar.js} +10 -10
- package/dist/angular/ds-field.d.ts +1 -1
- package/dist/angular/ds-field.js +1 -1
- 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-select.d.ts +1 -1
- package/dist/angular/ds-select.js +3 -3
- package/dist/angular/ds-table.d.ts +7 -7
- package/dist/angular/ds-table.js +6 -6
- 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 +13 -7
- package/dist/angular/proxies.d.ts +13 -7
- package/dist/angular/proxies.js +13 -7
- 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-avatar.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-table-search.d.ts → ds-calendar.d.ts} +4 -4
- package/dist/components/ds-calendar.js +2 -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-conversation-list.js.map +1 -1
- package/dist/components/ds-data-customize.d.ts +11 -0
- package/dist/components/ds-data-customize.js +2 -0
- package/dist/components/ds-data-customize.js.map +1 -0
- package/dist/components/{ds-table-group.d.ts → ds-data-filter.d.ts} +4 -4
- package/dist/components/ds-data-filter.js +2 -0
- package/dist/components/ds-data-filter.js.map +1 -0
- package/dist/components/{ds-table-sort.d.ts → ds-data-group.d.ts} +4 -4
- package/dist/components/ds-data-group.js +2 -0
- package/dist/components/ds-data-group.js.map +1 -0
- package/dist/components/{ds-table-saved-views.d.ts → ds-data-preferences.d.ts} +4 -4
- package/dist/components/ds-data-preferences.js +2 -0
- package/dist/components/ds-data-preferences.js.map +1 -0
- package/dist/components/ds-data-saved-views.d.ts +11 -0
- package/dist/components/ds-data-saved-views.js +2 -0
- package/dist/components/ds-data-saved-views.js.map +1 -0
- package/dist/components/ds-data-search.d.ts +11 -0
- package/dist/components/ds-data-search.js +2 -0
- package/dist/components/ds-data-search.js.map +1 -0
- package/dist/components/ds-data-sort.d.ts +11 -0
- package/dist/components/ds-data-sort.js +2 -0
- package/dist/components/ds-data-sort.js.map +1 -0
- package/dist/components/{ds-table-filter.d.ts → ds-data-toolbar.d.ts} +4 -4
- package/dist/components/ds-data-toolbar.js +2 -0
- package/dist/components/ds-data-toolbar.js.map +1 -0
- 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-icon.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-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-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-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-time-picker.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/index.d.ts +5 -5
- package/dist/components/p-0FYD2bev.js +2 -0
- package/dist/components/p-0FYD2bev.js.map +1 -0
- package/dist/components/p-0qY_HDId.js +2 -0
- package/dist/components/{p-D_u8WhlU.js.map → p-0qY_HDId.js.map} +1 -1
- package/dist/components/{p-BQsVI_vO.js → p-5URekSny.js} +2 -2
- package/dist/components/{p-eo_pmPqp.js → p-7V1AhetH.js} +2 -2
- package/dist/components/{p-yZRXPHDe.js → p-8yBdCXCn.js} +2 -2
- package/dist/components/p-BKZdqJQB.js +2 -0
- package/dist/components/p-BKZdqJQB.js.map +1 -0
- package/dist/components/p-BYrBU_U9.js +2 -0
- package/dist/components/p-BYrBU_U9.js.map +1 -0
- package/dist/components/{p-D44g2Kw1.js → p-BciTtTwx.js} +2 -2
- package/dist/components/p-BciTtTwx.js.map +1 -0
- package/dist/components/{p-CZOiTaNa.js → p-BeNa6tw5.js} +2 -2
- package/dist/components/{p-CZOiTaNa.js.map → p-BeNa6tw5.js.map} +1 -1
- package/dist/components/p-BgQMEHRa.js +2 -0
- package/dist/components/{p-CwqFJMvP.js.map → p-BgQMEHRa.js.map} +1 -1
- package/dist/components/{p-BQaO7cg_.js → p-BhJXmuRA.js} +2 -2
- package/dist/components/{p-n68x-ZKp.js → p-Bm7rqs3C.js} +2 -2
- package/dist/components/{p-DdspY23v.js → p-Bn8I7iw6.js} +2 -2
- package/dist/components/{p-BnWxbhFP.js → p-Bpd6YCo4.js} +2 -2
- package/dist/components/{p-B-9fdIWv.js → p-C-3YqeTb.js} +2 -2
- package/dist/components/{p-umAf0fBn.js → p-CD4DZPy_.js} +2 -2
- package/dist/components/p-CElUM-xU.js +2 -0
- package/dist/components/p-CElUM-xU.js.map +1 -0
- package/dist/components/{p-CuwopElg.js → p-CGidq1iC.js} +2 -2
- package/dist/components/p-CNxvnQ6A.js +2 -0
- package/dist/components/p-CNxvnQ6A.js.map +1 -0
- package/dist/components/{p-CI7VfYC3.js → p-CUcUHwI3.js} +2 -2
- package/dist/components/p-CYzFfFcH.js +2 -0
- package/dist/components/{p-BINSI_KF.js.map → p-CYzFfFcH.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-CdgOLWX9.js +2 -0
- package/dist/components/p-CdgOLWX9.js.map +1 -0
- package/dist/components/{p-BcdHgPi5.js → p-CeXf9-X3.js} +2 -2
- package/dist/components/{p-CSnsz3Eb.js → p-CiH4GG6r.js} +2 -2
- package/dist/components/{p-y06IxxoN.js → p-CiJ1WR11.js} +2 -2
- package/dist/components/p-CmexIVnE.js +2 -0
- package/dist/components/{p-N5SHSVo2.js.map → p-CmexIVnE.js.map} +1 -1
- package/dist/components/{p-BmFeeR4q.js → p-CqW2eyiF.js} +2 -2
- package/dist/components/{p-CzbsTZt7.js → p-Cxr0IQjC.js} +2 -2
- package/dist/components/{p-CqlBlv55.js → p-CzIpquvw.js} +2 -2
- package/dist/components/{p-DC69DgAR.js → p-D0y7Sja6.js} +2 -2
- package/dist/components/{p-Cwz9TPVS.js → p-D1vQGJzc.js} +2 -2
- package/dist/components/{p-Cwz9TPVS.js.map → p-D1vQGJzc.js.map} +1 -1
- package/dist/components/{p-C7CZ9pnP.js → p-D6Wl3dRO.js} +2 -2
- package/dist/components/{p-BPhbwXOv.js → p-D922f6Tb.js} +2 -2
- package/dist/components/{p-beRFLHbB.js → p-DHICPS4n.js} +2 -2
- package/dist/components/{p-omPm8_vx.js → p-DOAybCp0.js} +2 -2
- package/dist/components/{p-DEGNrPLe.js → p-DVINzOoK.js} +2 -2
- package/dist/components/{p-DEGNrPLe.js.map → p-DVINzOoK.js.map} +1 -1
- package/dist/components/p-DVOjjuXc.js +2 -0
- package/dist/components/p-DVOjjuXc.js.map +1 -0
- package/dist/components/p-Di5FH7eh.js +2 -0
- package/dist/components/p-Di5FH7eh.js.map +1 -0
- package/dist/components/p-DjkUFlDW.js +2 -0
- package/dist/components/p-DjkUFlDW.js.map +1 -0
- package/dist/components/{p-BnzsBNUY.js → p-Dn9QHL4O.js} +2 -2
- package/dist/components/{p-DGzn4k4h.js → p-Do2FJd1y.js} +2 -2
- package/dist/components/{p-DTDLlinw.js → p-DpoTwJAR.js} +2 -2
- package/dist/components/{p-Dk-8Ju0Q.js → p-Dpr2y6_S.js} +2 -2
- package/dist/components/{p-Dk-8Ju0Q.js.map → p-Dpr2y6_S.js.map} +1 -1
- package/dist/components/p-Dw9sE6Iw.js +2 -0
- package/dist/components/p-Dw9sE6Iw.js.map +1 -0
- package/dist/components/{p-CLGtPE0K.js → p-DwbcNDJF.js} +2 -2
- package/dist/components/p-Dzndkdx5.js +2 -0
- package/dist/components/{p-xHGqrz_p.js.map → p-Dzndkdx5.js.map} +1 -1
- package/dist/components/{p-C8ek-1SP.js → p-E5W27Fu_.js} +2 -2
- package/dist/components/{p-mpk_Mm8_.js → p-FIBCluwV.js} +2 -2
- package/dist/components/{p-DQQFN2sw.js → p-IEq_06J0.js} +2 -2
- package/dist/components/{p-DQQFN2sw.js.map → p-IEq_06J0.js.map} +1 -1
- package/dist/components/{p-CE540WZ7.js → p-MG4lcN0D.js} +2 -2
- package/dist/components/p-Nc76seSq.js +2 -0
- package/dist/components/p-Nc76seSq.js.map +1 -0
- package/dist/components/{p-DtLQIMsa.js → p-ZhP2tVmM.js} +2 -2
- package/dist/components/p-aD5cw_m2.js +2 -0
- package/dist/components/p-aD5cw_m2.js.map +1 -0
- package/dist/components/p-etifxiDc.js +2 -0
- package/dist/components/{p-beCz9OnD.js.map → p-etifxiDc.js.map} +1 -1
- package/dist/components/p-kDZ0sEII.js +2 -0
- package/dist/components/p-kDZ0sEII.js.map +1 -0
- package/dist/components/{p-BPlWEidl.js → p-ljbw3UMZ.js} +2 -2
- package/dist/components/{p-DZ58Sg5a.js → p-vfCu7XSc.js} +2 -2
- package/dist/components/p-vfCu7XSc.js.map +1 -0
- package/dist/components/{p-DFjIBS5B.js → p-xdmJCPCg.js} +2 -2
- package/dist/components/{p-CAxDdYjh.js → p-xtGGIZmU.js} +2 -2
- package/dist/docs/components.json +18102 -14568
- package/dist/lib/components/Icon/flag-icon-catalog.d.ts +2 -0
- package/dist/lib/components/Icon/icon-cache.d.ts +36 -4
- package/dist/lib/components/Icon/map-icon-catalog.d.ts +2 -0
- package/dist/lib/shell/index.js +2 -2
- package/dist/lib/shell/index.js.map +1 -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 +201 -5
- package/dist/lib/utils/index.js.map +4 -4
- package/dist/mcp-data/registry/agent-activity.json +2 -2
- package/dist/mcp-data/registry/agent-questionnaire.json +2 -2
- package/dist/mcp-data/registry/agent-response.json +1 -1
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/agent-tool-call.json +2 -2
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +1 -1
- package/dist/mcp-data/registry/bar-action.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +1 -1
- package/dist/mcp-data/registry/bar-page-title.json +1 -1
- package/dist/mcp-data/registry/bar-title.json +3 -3
- package/dist/mcp-data/registry/bar-workflow.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-inverted.json +580 -0
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/calendar.json +273 -0
- package/dist/mcp-data/registry/card-action-center.json +1 -1
- package/dist/mcp-data/registry/card-chart.json +1 -1
- package/dist/mcp-data/registry/card-navigation.json +5 -3
- package/dist/mcp-data/registry/card-overview.json +1 -1
- package/dist/mcp-data/registry/card-setting.json +1 -1
- package/dist/mcp-data/registry/card-settings-scope.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +1 -1
- package/dist/mcp-data/registry/chart.json +1 -1
- package/dist/mcp-data/registry/checkbox.json +1 -1
- package/dist/mcp-data/registry/chip.json +1 -1
- package/dist/mcp-data/registry/code-block.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +10 -32
- package/dist/mcp-data/registry/data-customize.json +374 -0
- package/dist/mcp-data/registry/{table-filter.json → data-filter.json} +33 -33
- package/dist/mcp-data/registry/data-group.json +358 -0
- package/dist/mcp-data/registry/data-preferences.json +566 -0
- package/dist/mcp-data/registry/data-saved-views.json +433 -0
- package/dist/mcp-data/registry/data-search.json +367 -0
- package/dist/mcp-data/registry/data-sort.json +254 -0
- package/dist/mcp-data/registry/data-toolbar.json +181 -0
- package/dist/mcp-data/registry/divider.json +1 -1
- package/dist/mcp-data/registry/empty-state.json +1 -1
- package/dist/mcp-data/registry/field.json +20 -15
- package/dist/mcp-data/registry/filter-menu.json +7 -11
- package/dist/mcp-data/registry/icon.json +13 -7
- 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 +57 -9
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +3 -3
- package/dist/mcp-data/registry/message-actions.json +1 -1
- package/dist/mcp-data/registry/message-bubble.json +1 -1
- package/dist/mcp-data/registry/message-composer.json +2 -2
- package/dist/mcp-data/registry/message-scroller.json +1 -1
- package/dist/mcp-data/registry/message.json +1 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
- package/dist/mcp-data/registry/mobile-header.json +1 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/pagination.json +1 -1
- package/dist/mcp-data/registry/panel-nav.json +1 -1
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +1 -1
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/panel-tools.json +3 -3
- package/dist/mcp-data/registry/paper-texture.json +1 -1
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +5911 -4816
- package/dist/mcp-data/registry/score.json +1 -1
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select.json +64 -8
- package/dist/mcp-data/registry/shell-app.json +1 -1
- package/dist/mcp-data/registry/shell-page.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/swatch-picker.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/table.json +71 -71
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/textarea.json +3 -3
- package/dist/mcp-data/registry/time-picker.json +259 -0
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-chart.json +1 -1
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +13 -7
- package/dist/react/components.js +13 -7
- 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-data-customize.d.ts +13 -0
- package/dist/react/ds-data-customize.js +15 -0
- package/dist/react/ds-data-filter.d.ts +18 -0
- package/dist/react/{ds-table-filter.js → ds-data-filter.js} +5 -5
- package/dist/react/ds-data-group.d.ts +14 -0
- package/dist/react/{ds-table-group.js → ds-data-group.js} +5 -5
- package/dist/react/ds-data-preferences.d.ts +21 -0
- package/dist/react/{ds-table-preferences.js → ds-data-preferences.js} +6 -6
- package/dist/react/ds-data-saved-views.d.ts +17 -0
- package/dist/react/{ds-table-saved-views.js → ds-data-saved-views.js} +5 -5
- package/dist/react/ds-data-search.d.ts +14 -0
- package/dist/react/{ds-table-search.js → ds-data-search.js} +5 -5
- package/dist/react/ds-data-sort.d.ts +12 -0
- package/dist/react/ds-data-sort.js +12 -0
- package/dist/react/{ds-table-toolbar.d.ts → ds-data-toolbar.d.ts} +3 -3
- package/dist/react/ds-data-toolbar.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.d.ts +3 -3
- package/dist/react/ds-table.js +1 -1
- package/dist/react/ds-time-picker.d.ts +12 -0
- package/dist/react/ds-time-picker.js +12 -0
- package/dist/styles/table.css +11 -11
- 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/ConversationList/ConversationList.d.ts +0 -7
- package/dist/types/components/DataCustomize/DataCustomize.d.ts +67 -0
- package/dist/types/components/{TableFilter/TableFilter.d.ts → DataFilter/DataFilter.d.ts} +2 -2
- package/dist/types/components/{TableGroup/TableGroup.d.ts → DataGroup/DataGroup.d.ts} +8 -8
- package/dist/types/components/{TablePreferences/TablePreferences.d.ts → DataPreferences/DataPreferences.d.ts} +29 -13
- package/dist/types/components/{TableSavedViews/TableSavedViews.d.ts → DataSavedViews/DataSavedViews.d.ts} +10 -10
- package/dist/types/components/DataSavedViews/data-saved-views-types.d.ts +24 -0
- package/dist/types/components/DataSavedViews/index.d.ts +2 -0
- package/dist/types/components/{TableSearch/TableSearch.d.ts → DataSearch/DataSearch.d.ts} +6 -6
- package/dist/types/components/{TableSearch/table-search-model.d.ts → DataSearch/data-search-model.d.ts} +6 -6
- package/dist/types/components/{TableSearch/table-search-types.d.ts → DataSearch/data-search-types.d.ts} +3 -3
- package/dist/types/components/{TableSort/TableSort.d.ts → DataSort/DataSort.d.ts} +7 -6
- package/dist/types/components/DataSort/data-sort-menu.d.ts +15 -0
- package/dist/types/components/{TableToolbar/TableToolbar.d.ts → DataToolbar/DataToolbar.d.ts} +3 -3
- package/dist/types/components/Field/Field.d.ts +7 -2
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +0 -10
- package/dist/types/components/Icon/icon-cache.d.ts +36 -4
- package/dist/types/components/Icon/map-icon-catalog.d.ts +3 -0
- 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/PanelTools/PanelTools.d.ts +1 -1
- package/dist/types/components/Select/Select.d.ts +8 -1
- package/dist/types/components/Table/Table.d.ts +9 -9
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/components/Table/table-action-menu.d.ts +1 -1
- package/dist/types/components/Table/table-body-renderer.d.ts +2 -2
- package/dist/types/components/Table/table-column-customizer.d.ts +9 -9
- package/dist/types/components/Table/table-group-load-controller.d.ts +2 -2
- package/dist/types/components/Table/table-model.d.ts +7 -7
- package/dist/types/components/Table/table-render-model.d.ts +3 -3
- package/dist/types/components/Table/table-types.d.ts +17 -36
- package/dist/types/components/Table/table-virtual-model.d.ts +2 -2
- package/dist/types/components/TimePicker/TimePicker.d.ts +33 -0
- package/dist/types/components.d.ts +5461 -4433
- package/dist/types/utils/button-render.d.ts +1 -1
- package/dist/types/utils/clock-time.d.ts +23 -0
- package/dist/types/utils/data-field.d.ts +38 -0
- package/dist/types/utils/date-filter-value.d.ts +4 -0
- package/dist/types/utils/index.d.ts +3 -1
- package/dist/types/utils/list-customizer.d.ts +38 -0
- package/dist/types/utils/table-caption-compact.d.ts +1 -1
- package/dist/vue/components.d.ts +13 -7
- package/dist/vue/components.js +13 -7
- package/dist/vue/ds-button-inverted.d.ts +3 -0
- package/dist/vue/ds-button-inverted.js +33 -0
- package/dist/vue/{ds-table-sort.d.ts → ds-calendar.d.ts} +1 -1
- package/dist/vue/ds-calendar.js +16 -0
- package/dist/vue/ds-conversation-list.js +1 -3
- package/dist/vue/ds-data-customize.d.ts +3 -0
- package/dist/vue/ds-data-customize.js +23 -0
- package/dist/vue/{ds-table-group.d.ts → ds-data-filter.d.ts} +1 -1
- package/dist/vue/{ds-table-filter.js → ds-data-filter.js} +2 -2
- package/dist/vue/{ds-table-filter.d.ts → ds-data-group.d.ts} +1 -1
- package/dist/vue/{ds-table-group.js → ds-data-group.js} +2 -2
- package/dist/vue/{ds-table-saved-views.d.ts → ds-data-preferences.d.ts} +1 -1
- package/dist/vue/{ds-table-preferences.js → ds-data-preferences.js} +10 -7
- package/dist/vue/ds-data-saved-views.d.ts +3 -0
- package/dist/vue/{ds-table-saved-views.js → ds-data-saved-views.js} +2 -2
- package/dist/vue/{ds-table-search.d.ts → ds-data-search.d.ts} +1 -1
- package/dist/vue/{ds-table-search.js → ds-data-search.js} +3 -3
- package/dist/vue/ds-data-sort.d.ts +3 -0
- package/dist/vue/{ds-table-sort.js → ds-data-sort.js} +3 -3
- package/dist/vue/ds-data-toolbar.d.ts +3 -0
- package/dist/vue/ds-data-toolbar.js +9 -0
- package/dist/vue/{ds-table-preferences.d.ts → ds-input-date.d.ts} +1 -1
- 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-select.js +3 -0
- package/dist/vue/ds-table.js +4 -4
- package/dist/vue/ds-time-picker.d.ts +3 -0
- package/dist/vue/ds-time-picker.js +16 -0
- package/package.json +3 -3
- package/dist/angular/ds-table-filter.d.ts +0 -50
- package/dist/angular/ds-table-group.d.ts +0 -29
- package/dist/angular/ds-table-preferences.d.ts +0 -39
- package/dist/angular/ds-table-saved-views.d.ts +0 -49
- package/dist/angular/ds-table-search.d.ts +0 -20
- package/dist/angular/ds-table-sort.d.ts +0 -16
- package/dist/angular/ds-table-toolbar.d.ts +0 -12
- package/dist/components/ds-table-filter.js +0 -2
- package/dist/components/ds-table-filter.js.map +0 -1
- package/dist/components/ds-table-group.js +0 -2
- package/dist/components/ds-table-preferences.d.ts +0 -11
- package/dist/components/ds-table-preferences.js +0 -2
- package/dist/components/ds-table-preferences.js.map +0 -1
- package/dist/components/ds-table-saved-views.js +0 -2
- package/dist/components/ds-table-saved-views.js.map +0 -1
- package/dist/components/ds-table-search.js +0 -2
- package/dist/components/ds-table-search.js.map +0 -1
- package/dist/components/ds-table-sort.js +0 -2
- package/dist/components/ds-table-sort.js.map +0 -1
- package/dist/components/ds-table-toolbar.d.ts +0 -11
- package/dist/components/ds-table-toolbar.js +0 -2
- package/dist/components/ds-table-toolbar.js.map +0 -1
- package/dist/components/p-BINSI_KF.js +0 -2
- package/dist/components/p-BbfBvMRR.js +0 -2
- package/dist/components/p-BbfBvMRR.js.map +0 -1
- package/dist/components/p-C1_3CVma.js +0 -2
- package/dist/components/p-C1_3CVma.js.map +0 -1
- package/dist/components/p-CKarsuR2.js +0 -2
- package/dist/components/p-CKarsuR2.js.map +0 -1
- package/dist/components/p-Cea7rROU.js +0 -2
- package/dist/components/p-Cea7rROU.js.map +0 -1
- package/dist/components/p-Cmj04E5Q.js +0 -2
- package/dist/components/p-Cmj04E5Q.js.map +0 -1
- package/dist/components/p-Cq_Qpe_C.js +0 -2
- package/dist/components/p-Cq_Qpe_C.js.map +0 -1
- package/dist/components/p-CwqFJMvP.js +0 -2
- package/dist/components/p-D44g2Kw1.js.map +0 -1
- package/dist/components/p-DZ58Sg5a.js.map +0 -1
- package/dist/components/p-D_u8WhlU.js +0 -2
- package/dist/components/p-Dhw_W8nk.js.map +0 -1
- package/dist/components/p-FPZbS19l.js +0 -2
- package/dist/components/p-FPZbS19l.js.map +0 -1
- package/dist/components/p-KBrC9IG4.js +0 -2
- package/dist/components/p-KBrC9IG4.js.map +0 -1
- package/dist/components/p-N5SHSVo2.js +0 -2
- package/dist/components/p-QjkufCcn.js +0 -2
- package/dist/components/p-QjkufCcn.js.map +0 -1
- package/dist/components/p-UAIxh67Q.js +0 -2
- package/dist/components/p-UAIxh67Q.js.map +0 -1
- package/dist/components/p-beCz9OnD.js +0 -2
- package/dist/components/p-xHGqrz_p.js +0 -2
- package/dist/mcp-data/registry/table-group.json +0 -358
- package/dist/mcp-data/registry/table-preferences.json +0 -511
- package/dist/mcp-data/registry/table-saved-views.json +0 -431
- package/dist/mcp-data/registry/table-search.json +0 -366
- package/dist/mcp-data/registry/table-sort.json +0 -253
- package/dist/mcp-data/registry/table-toolbar.json +0 -180
- package/dist/react/ds-table-filter.d.ts +0 -18
- package/dist/react/ds-table-group.d.ts +0 -14
- package/dist/react/ds-table-preferences.d.ts +0 -21
- package/dist/react/ds-table-saved-views.d.ts +0 -17
- package/dist/react/ds-table-search.d.ts +0 -14
- package/dist/react/ds-table-sort.d.ts +0 -12
- package/dist/react/ds-table-sort.js +0 -12
- package/dist/react/ds-table-toolbar.js +0 -12
- package/dist/types/components/FilterMenu/filter-menu-calendar.d.ts +0 -13
- package/dist/types/components/TableSavedViews/index.d.ts +0 -2
- package/dist/types/components/TableSavedViews/table-saved-views-types.d.ts +0 -24
- package/dist/types/components/TableSort/table-sort-menu.d.ts +0 -15
- package/dist/vue/ds-table-toolbar.d.ts +0 -3
- package/dist/vue/ds-table-toolbar.js +0 -9
- /package/dist/components/{ds-table-group.js.map → ds-calendar.js.map} +0 -0
- /package/dist/components/{p-BQsVI_vO.js.map → p-5URekSny.js.map} +0 -0
- /package/dist/components/{p-eo_pmPqp.js.map → p-7V1AhetH.js.map} +0 -0
- /package/dist/components/{p-yZRXPHDe.js.map → p-8yBdCXCn.js.map} +0 -0
- /package/dist/components/{p-BQaO7cg_.js.map → p-BhJXmuRA.js.map} +0 -0
- /package/dist/components/{p-n68x-ZKp.js.map → p-Bm7rqs3C.js.map} +0 -0
- /package/dist/components/{p-DdspY23v.js.map → p-Bn8I7iw6.js.map} +0 -0
- /package/dist/components/{p-BnWxbhFP.js.map → p-Bpd6YCo4.js.map} +0 -0
- /package/dist/components/{p-B-9fdIWv.js.map → p-C-3YqeTb.js.map} +0 -0
- /package/dist/components/{p-umAf0fBn.js.map → p-CD4DZPy_.js.map} +0 -0
- /package/dist/components/{p-CuwopElg.js.map → p-CGidq1iC.js.map} +0 -0
- /package/dist/components/{p-CI7VfYC3.js.map → p-CUcUHwI3.js.map} +0 -0
- /package/dist/components/{p-BcdHgPi5.js.map → p-CeXf9-X3.js.map} +0 -0
- /package/dist/components/{p-CSnsz3Eb.js.map → p-CiH4GG6r.js.map} +0 -0
- /package/dist/components/{p-y06IxxoN.js.map → p-CiJ1WR11.js.map} +0 -0
- /package/dist/components/{p-BmFeeR4q.js.map → p-CqW2eyiF.js.map} +0 -0
- /package/dist/components/{p-CzbsTZt7.js.map → p-Cxr0IQjC.js.map} +0 -0
- /package/dist/components/{p-CqlBlv55.js.map → p-CzIpquvw.js.map} +0 -0
- /package/dist/components/{p-DC69DgAR.js.map → p-D0y7Sja6.js.map} +0 -0
- /package/dist/components/{p-C7CZ9pnP.js.map → p-D6Wl3dRO.js.map} +0 -0
- /package/dist/components/{p-BPhbwXOv.js.map → p-D922f6Tb.js.map} +0 -0
- /package/dist/components/{p-beRFLHbB.js.map → p-DHICPS4n.js.map} +0 -0
- /package/dist/components/{p-omPm8_vx.js.map → p-DOAybCp0.js.map} +0 -0
- /package/dist/components/{p-BnzsBNUY.js.map → p-Dn9QHL4O.js.map} +0 -0
- /package/dist/components/{p-DGzn4k4h.js.map → p-Do2FJd1y.js.map} +0 -0
- /package/dist/components/{p-DTDLlinw.js.map → p-DpoTwJAR.js.map} +0 -0
- /package/dist/components/{p-CLGtPE0K.js.map → p-DwbcNDJF.js.map} +0 -0
- /package/dist/components/{p-C8ek-1SP.js.map → p-E5W27Fu_.js.map} +0 -0
- /package/dist/components/{p-mpk_Mm8_.js.map → p-FIBCluwV.js.map} +0 -0
- /package/dist/components/{p-CE540WZ7.js.map → p-MG4lcN0D.js.map} +0 -0
- /package/dist/components/{p-DtLQIMsa.js.map → p-ZhP2tVmM.js.map} +0 -0
- /package/dist/components/{p-BPlWEidl.js.map → p-ljbw3UMZ.js.map} +0 -0
- /package/dist/components/{p-DFjIBS5B.js.map → p-xdmJCPCg.js.map} +0 -0
- /package/dist/components/{p-CAxDdYjh.js.map → p-xtGGIZmU.js.map} +0 -0
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
type IconCacheMap = Map<string, string>;
|
|
2
|
-
|
|
2
|
+
/** IcoMo ships each glyph in exactly one category; the catalogs mirror that split. */
|
|
3
|
+
export type IconCategory = 'system' | 'flag' | 'map';
|
|
4
|
+
export declare function iconCacheKey(name: string, category: IconCategory): string;
|
|
5
|
+
/**
|
|
6
|
+
* Pick the catalog a name belongs to by own-key membership — never by prefix.
|
|
7
|
+
*
|
|
8
|
+
* A prefix test looks equivalent and is not. IcoMo ships `Flag`/`FlagFilled` as
|
|
9
|
+
* *system* icons (a generic flag glyph, not a country) and `MapNavigation`,
|
|
10
|
+
* `MapPage`, `MapPin`, `MapStreet` as system icons too, while every genuine
|
|
11
|
+
* flag/map export carries the category prefix. So `startsWith('Flag')` or
|
|
12
|
+
* `startsWith('Map')` misroutes those six to a catalog that does not contain
|
|
13
|
+
* them, the own-key lookup misses, and ds-icon renders nothing with no error.
|
|
14
|
+
*
|
|
15
|
+
* Only the two prefixed catalogs are consulted; anything else is system. That
|
|
16
|
+
* keeps the system catalog — 400 loaders, by far the largest — out of the
|
|
17
|
+
* `@ds-mo/ui/utils` entry, which exists to hand apps `registerIcons`.
|
|
18
|
+
*
|
|
19
|
+
* Test order is not a tie-break: `generate-icon-catalog.mjs` fails the build if
|
|
20
|
+
* IcoMo ever ships one name in two categories, so at most one can match.
|
|
21
|
+
*
|
|
22
|
+
* Names in no catalog resolve as system, which is what lets an app register a
|
|
23
|
+
* glyph of its own under a custom name and have ds-icon read it back.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveIconCategory(name: string): IconCategory;
|
|
3
26
|
export declare function iconCache(): IconCacheMap;
|
|
4
27
|
/**
|
|
5
28
|
* Pre-register glyphs so ds-icon renders them synchronously — no lazy-chunk
|
|
@@ -9,16 +32,25 @@ export declare function iconCache(): IconCacheMap;
|
|
|
9
32
|
* ```ts
|
|
10
33
|
* import { Bell } from '@ds-mo/icons/svg/Bell';
|
|
11
34
|
* import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';
|
|
35
|
+
* import { MapGeofence } from '@ds-mo/icons/svg/map/MapGeofence';
|
|
12
36
|
* import { registerIcons } from '@ds-mo/ui/utils';
|
|
13
37
|
*
|
|
14
38
|
* registerIcons({ Bell });
|
|
15
39
|
* registerIcons({ FlagUnitedStates });
|
|
40
|
+
* registerIcons({ MapGeofence });
|
|
16
41
|
* ```
|
|
17
42
|
*
|
|
43
|
+
* The category comes from the name, exactly as ds-icon derives it, so a
|
|
44
|
+
* registration is always readable by the element that needs it. Glyphs under a
|
|
45
|
+
* name IcoMo does not ship — an app's own marker artwork, say — register as
|
|
46
|
+
* system and resolve the same way.
|
|
47
|
+
*
|
|
48
|
+
* There is deliberately no category override. ds-icon has no such override when
|
|
49
|
+
* it reads, so forcing a different category on write could only produce an
|
|
50
|
+
* entry nothing ever reads.
|
|
51
|
+
*
|
|
18
52
|
* Icons that are not registered still work — they lazy-load on first render
|
|
19
53
|
* and stay cached afterwards.
|
|
20
54
|
*/
|
|
21
|
-
export declare function registerIcons(icons: Record<string, string
|
|
22
|
-
flag?: boolean;
|
|
23
|
-
}): void;
|
|
55
|
+
export declare function registerIcons(icons: Record<string, string>): void;
|
|
24
56
|
export {};
|
package/dist/lib/shell/index.js
CHANGED
|
@@ -18,7 +18,7 @@ var PANEL_TOOLS_SHORTCUTS = {
|
|
|
18
18
|
var PANEL_TOOLS_DEFAULT_ITEMS = [
|
|
19
19
|
{
|
|
20
20
|
id: "agents",
|
|
21
|
-
icon: "
|
|
21
|
+
icon: "AIAsterisk",
|
|
22
22
|
label: PANEL_TOOLS_LABELS.agents,
|
|
23
23
|
railPlacement: "header",
|
|
24
24
|
order: 0,
|
|
@@ -51,7 +51,7 @@ var PANEL_TOOLS_DEFAULT_ITEMS = [
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
id: "help",
|
|
54
|
-
icon: "
|
|
54
|
+
icon: "QuestionCircle",
|
|
55
55
|
label: PANEL_TOOLS_LABELS.help,
|
|
56
56
|
railPlacement: "footer",
|
|
57
57
|
order: 0,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/wc/components/PanelTools/panel-tools-types.ts", "../../../src/wc/shell/nav-chrome.ts", "../../../src/wc/components/Menu/menu-placement.ts", "../../../src/wc/shell/shell-gradient-presets.ts", "../../../src/wc/shell/shell-responsive.ts"],
|
|
4
|
-
"sourcesContent": ["/** Application-owned tool id for the shell rail and responsive tool views. */\nexport type PanelToolsToolId = string;\n\n/** Canonical Motive shell recipe used when item metadata is omitted. */\nexport type CanonicalPanelToolsToolId =\n | 'search'\n | 'messages'\n | 'agents'\n | 'stacks'\n | 'activity'\n | 'help';\n\nexport const PANEL_TOOLS_TOOL_IDS: CanonicalPanelToolsToolId[] = [\n 'agents',\n 'messages',\n 'activity',\n 'search',\n 'stacks',\n 'help',\n];\n\n/** Rail header slot \u2014 mirrors panel-nav M logo row. */\nexport const PANEL_TOOLS_PRIMARY_TOOL_ID: CanonicalPanelToolsToolId = 'agents';\n\n/** Rail footer slot \u2014 flush to the bottom of the tools column. */\nexport const PANEL_TOOLS_FOOTER_TOOL_ID: CanonicalPanelToolsToolId = 'help';\n\nexport const PANEL_TOOLS_LABELS: Record<CanonicalPanelToolsToolId, string> = {\n search: 'Search',\n messages: 'Messages',\n stacks: 'Stacks',\n activity: 'Activity',\n agents: 'Agents',\n help: 'Help & Support',\n};\n\nexport const PANEL_TOOLS_SHORTCUTS: Partial<Record<CanonicalPanelToolsToolId, string>> = {\n search: 'K',\n agents: 'A',\n messages: 'M',\n stacks: 'S',\n activity: 'N',\n help: '/',\n};\n\nexport type PanelToolsRailPlacement = 'header' | 'body' | 'footer';\n\nexport interface PanelToolsItem {\n id: PanelToolsToolId;\n /** Icon name for <ds-icon>. */\n icon: string;\n /** Visible and accessible fallback label for custom tool ids. */\n label?: string;\n /** Explicit rail region; canonical Agents/Help placement is the fallback. */\n railPlacement?: PanelToolsRailPlacement;\n /** Stable ordering within the selected rail region. */\n order?: number;\n /** Optional shortcut label displayed by the tooltip. */\n shortcutKey?: string;\n /** Mobile destination recipe; canonical ids retain their explicit defaults. */\n mobileDestination?: 'search' | 'inbox' | 'activity' | 'messages' | 'agents' | 'help';\n /** Whether this rail button is currently pressed/active. */\n selected?: boolean;\n /** Show a notification dot. */\n dot?: boolean;\n isInactive?: boolean;\n ariaLabel?: string;\n}\n\nexport type PanelToolsRailAccessoryVisual =\n | { type: 'icon'; icon: string }\n | { type: 'initial'; initial: string }\n | { type: 'image'; src: string };\n\nexport interface PanelToolsRailAccessoryAction {\n /** Stable application-owned action id emitted with the accessory id. */\n id: string;\n /** Overrides the accessory label for the primary action. */\n ariaLabel?: string;\n isInactive?: boolean;\n}\n\nexport interface PanelToolsRailAccessorySecondaryAction {\n id: string;\n icon: string;\n ariaLabel: string;\n isInactive?: boolean;\n}\n\nexport type PanelToolsRailTransientTone = 'active' | 'positive';\n\ninterface PanelToolsRailAccessoryBase {\n /** Stable application-owned identity. Duplicate or blank ids are omitted. */\n id: string;\n /** Explicit rail region; accessories never infer placement from their id. */\n railPlacement: PanelToolsRailPlacement;\n /** Stable ordering within the selected rail region. */\n order: number;\n}\n\n/** Decorative boundary between application-owned rail accessory groups. */\nexport interface PanelToolsRailDividerAccessory extends PanelToolsRailAccessoryBase {\n type: 'divider';\n}\n\n/**\n * A compact one-action shortcut that matches standard tool-button geometry.\n * PanelTools owns its initial orb, notification dot, and transient interaction paint.\n */\nexport interface PanelToolsRailShortcutAccessory extends PanelToolsRailAccessoryBase {\n type: 'shortcut';\n /** Accessible shortcut name and action-label fallback. */\n ariaLabel: string;\n /** One or two displayed graphemes. Longer values are truncated visually. */\n initials: string;\n /** Supplemental notification dot. Include its meaning in the accessible label when needed. */\n dot?: boolean;\n action: PanelToolsRailAccessoryAction;\n}\n\n/**\n * A direct application intent that never selects a tool or changes drawer state.\n * PanelTools owns the two-control-height surface and its focus behavior.\n */\nexport interface PanelToolsRailTransientAccessory extends PanelToolsRailAccessoryBase {\n type: 'transient';\n /** Accessible accessory name and primary-action fallback label. */\n ariaLabel: string;\n visual: PanelToolsRailAccessoryVisual;\n /** State announced with the primary action and shown in its tooltip. */\n statusText: string;\n /** Bold surface treatment. Active uses brand; positive uses positive semantic color. */\n statusTone: PanelToolsRailTransientTone;\n primaryAction: PanelToolsRailAccessoryAction;\n secondaryAction?: PanelToolsRailAccessorySecondaryAction;\n}\n\nexport type PanelToolsRailAccessory =\n | PanelToolsRailDividerAccessory\n | PanelToolsRailShortcutAccessory\n | PanelToolsRailTransientAccessory;\n\nexport interface PanelToolsRailAccessoryActionDetail {\n accessoryId: string;\n actionId: string;\n /** Rendered action control, suitable for anchoring an application-owned overlay. */\n anchor: HTMLElement;\n}\n\n/** Canonical shell recipe used by Lab and by managed ShellApp examples. */\nexport const PANEL_TOOLS_DEFAULT_ITEMS: PanelToolsItem[] = [\n {\n id: 'agents',\n icon: 'AI',\n label: PANEL_TOOLS_LABELS.agents,\n railPlacement: 'header',\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.agents,\n mobileDestination: 'agents',\n },\n {\n id: 'messages',\n icon: 'MessageBubbleStack',\n label: PANEL_TOOLS_LABELS.messages,\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.messages,\n mobileDestination: 'messages',\n },\n {\n id: 'activity',\n icon: 'Bell',\n label: PANEL_TOOLS_LABELS.activity,\n order: 1,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.activity,\n mobileDestination: 'activity',\n },\n {\n id: 'search',\n icon: 'MagnifyingGlass',\n label: PANEL_TOOLS_LABELS.search,\n order: 2,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.search,\n mobileDestination: 'search',\n },\n {\n id: 'help',\n icon: 'CircleQuestion',\n label: PANEL_TOOLS_LABELS.help,\n railPlacement: 'footer',\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.help,\n mobileDestination: 'help',\n },\n];\n\nexport interface PanelToolsHeaderAction {\n id: string;\n icon: string;\n ariaLabel: string;\n triggerId?: string;\n controls?: string;\n expanded?: boolean;\n /** Associated surface remains visible, including exit motion. */\n surfaceOpen?: boolean;\n haspopup?: 'menu' | 'dialog' | 'listbox' | 'tree' | 'grid';\n pressed?: boolean;\n isInactive?: boolean;\n}\n\nexport interface PanelToolsHeaderActionDetail {\n tool: PanelToolsToolId;\n id: string;\n /** Rendered header action host. Pass this to an external overlay's element anchor prop. */\n anchor?: HTMLElement;\n}\n\nexport interface PanelToolHeaderActionDetail {\n id: string;\n originalEvent: MouseEvent;\n /** Rendered action host, suitable for anchoring an external overlay across a shadow boundary. */\n anchor: HTMLElement;\n}\n\nexport interface PanelToolsHeaderConfig {\n title?: string;\n showBack?: boolean;\n backIcon?: string;\n backAriaLabel?: string;\n actions?: PanelToolsHeaderAction[];\n}\n\n/** Per-tool header state. The application replaces the object when a tool changes depth or actions. */\nexport type PanelToolsHeaders = Partial<Record<PanelToolsToolId, PanelToolsHeaderConfig>>;\n", "/** Nav chrome style slot \u2014 dashboard vs settings. Colors unified for now; texture hooks use the class. */\nexport type NavChromeStyle = 'dashboard' | 'settings';\n\n/** Document hint for first paint before framework props land. */\nexport const NAV_STYLE_HINT_ATTR = 'data-nav-style';\n\nexport function readNavStyleAttr(attr: string | null): NavChromeStyle | undefined {\n if (attr === 'dashboard' || attr === 'settings') return attr;\n return undefined;\n}\n\nexport function setNavStyleHint(style: NavChromeStyle): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(NAV_STYLE_HINT_ATTR, style);\n}\n\nexport function clearNavStyleHint(): void {\n if (typeof document === 'undefined') return;\n document.documentElement.removeAttribute(NAV_STYLE_HINT_ATTR);\n}\n\nexport function resolveNavChromeStyle(\n styleProp: NavChromeStyle,\n hostAttr: string | null,\n docHint?: string | null\n): NavChromeStyle {\n const fromHost = readNavStyleAttr(hostAttr);\n if (fromHost) return fromHost;\n\n const hint =\n docHint !== undefined\n ? docHint\n : typeof document !== 'undefined'\n ? document.documentElement.getAttribute(NAV_STYLE_HINT_ATTR)\n : null;\n const fromHint = readNavStyleAttr(hint);\n if (fromHint) return fromHint;\n\n return styleProp;\n}\n\nexport function shouldResyncNavChromeStyle(\n renderedStyle: NavChromeStyle,\n style: NavChromeStyle\n): boolean {\n return renderedStyle !== style;\n}\n", "import type { ChoicePopupAnchorAlignment } from '../../utils/choice-popup-alignment';\nimport type { MenuAlign, MenuSide } from './menu-position';\n\n/** Placement props bindable on `ds-menu` (side, align, offsets). */\nexport interface MenuPlacement {\n side: MenuSide;\n align: MenuAlign;\n anchorAlignment: ChoicePopupAnchorAlignment;\n sideOffset: number | string;\n alignOffset: number | string;\n}\n\n/**\n * Canonical `ds-menu` placement for the **panel-nav footer user menu**.\n * Anchor from `dsNavUserAction` detail `{ anchor }` (id `ds-panel-nav-user-menu-anchor`).\n *\n * Not for BarNav overflow menus \u2014 those use `side=\"bottom\"` / `align=\"end\"` internally.\n * `align: 'end'` bottom-aligns the last choice cell on the anchor; the side offset nudges into the content area:\n * - `sideOffset` space-100 + space-050 (12px): 4px past the panel-nav outer edge (anchor is ~8px inset).\n * - `anchorAlignment: 'choice-cell'`: the shared section inset puts the last row edge on the footer user row.\n */\nexport const PANEL_NAV_USER_MENU_PLACEMENT = {\n side: 'right',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for PanelNav's collapsed child-route flyout.\n * The parent control is 8px inside the panel edge, so a 12px side offset leaves\n * a 4px visual gap outside the panel. Start choice-cell alignment places the\n * first flyout row on the same block axis as its parent control.\n */\nexport const PANEL_NAV_CHILD_MENU_PLACEMENT = {\n side: 'right',\n align: 'start',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for a menu opened by a PanelTools header action.\n * Matches BarNav overflow: the 32px trigger is 8px inside the 48px header, so\n * a 12px side offset places the popup 4px below the header edge. Choice-cell\n * alignment keeps the final menu item edge aligned with the trigger.\n */\nexport const PANEL_TOOLS_HEADER_MENU_PLACEMENT = {\n side: 'bottom',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n", "/** Built-in shell chrome wash presets. */\nexport type ShellGradientPreset = 'none' | 'cool' | 'neutral' | 'warm' | 'fresh';\n\nexport const SHELL_GRADIENT_PRESETS: ShellGradientPreset[] = [\n 'none',\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Wash presets shown after the `none` option in pickers. */\nexport const SHELL_GRADIENT_WASH_PRESETS: Exclude<ShellGradientPreset, 'none'>[] = [\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Default wash when `gradient-preset` is omitted. */\nexport const DEFAULT_SHELL_GRADIENT_PRESET: ShellGradientPreset = 'neutral';\n\nexport const SHELL_GRADIENT_PRESET_LABELS: Record<ShellGradientPreset, string> = {\n none: 'None',\n cool: 'Cool',\n neutral: 'Neutral',\n warm: 'Warm',\n fresh: 'Fresh',\n};\n\nexport interface ShellGradientStop {\n color: string;\n position: number;\n}\n\nexport interface ShellGradientRecipe {\n opacity: number;\n stops: readonly ShellGradientStop[];\n}\n\nexport interface ShellGradientPickerPreview {\n backgroundColor: string;\n backgroundImage?: string;\n opacity?: number;\n}\n\nexport interface ShellGradientPickerOption {\n value: ShellGradientPreset;\n label: string;\n preview: ShellGradientPickerPreview;\n}\n\nexport interface ShellGradientPickerSection {\n options: ShellGradientPickerOption[];\n}\n\nconst SHELL_GRADIENT_RECIPES: Record<Exclude<ShellGradientPreset, 'none'>, ShellGradientRecipe> = {\n cool: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-blue-strong-background)', position: 100 },\n ],\n },\n neutral: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-grey-strong-background)', position: 100 },\n ],\n },\n warm: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-yellow-strong-background)', position: 100 },\n ],\n },\n fresh: {\n opacity: 0.4,\n stops: [\n { color: 'var(--color-color-intent-cyan-faint-background)', position: 0 },\n { color: 'var(--color-background-transparent)', position: 47 },\n { color: 'var(--color-background-transparent)', position: 58 },\n { color: 'var(--color-color-intent-red-faint-background)', position: 83 },\n { color: 'var(--color-color-intent-pink-faint-background)', position: 100 },\n ],\n },\n};\n\nconst GRADIENT_GEOMETRY = '100% 100% at 0% 0%';\n\nexport function shellGradientPresetStopToken(preset: ShellGradientPreset): string | null {\n if (preset === 'none') return null;\n const stops = SHELL_GRADIENT_RECIPES[preset].stops;\n return stops[stops.length - 1]?.color ?? null;\n}\n\nexport function shellGradientPresetRecipe(preset: ShellGradientPreset): ShellGradientRecipe | null {\n const normalized = normalizeShellGradientPreset(preset);\n return normalized === 'none' ? null : SHELL_GRADIENT_RECIPES[normalized];\n}\n\nexport function shellGradientPresetOpacity(preset: ShellGradientPreset): string {\n return String(shellGradientPresetRecipe(preset)?.opacity ?? 0);\n}\n\nexport function isShellGradientPreset(value: string): value is ShellGradientPreset {\n return (SHELL_GRADIENT_PRESETS as string[]).includes(value);\n}\n\n/**\n * Coerce unknown/absent presets to the default. Runtime values escape the\n * type: removing the reflected `gradient-preset` attribute (e.g. an Angular\n * `[attr.gradient-preset]=\"null\"` binding) drives the prop to null past its\n * field default \u2014 without normalization the stop lookup interpolates the\n * literal string \"undefined\" into CSS and the wash silently disappears.\n */\nexport function normalizeShellGradientPreset(\n value: string | null | undefined\n): ShellGradientPreset {\n return value != null && isShellGradientPreset(value) ? value : DEFAULT_SHELL_GRADIENT_PRESET;\n}\n\n/** Radial wash for a preset \u2014 transparent at top-left into the intent stop. `none` returns no image. */\nexport function buildShellRadialGradientForPreset(preset: ShellGradientPreset): string {\n const normalized = normalizeShellGradientPreset(preset);\n if (normalized === 'none') return 'none';\n\n return buildShellRadialGradientFromStops(SHELL_GRADIENT_RECIPES[normalized].stops);\n}\n\n/** Build the production shell geometry from an ordered set of design-time stops. */\nexport function buildShellRadialGradientFromStops(stops: readonly ShellGradientStop[]): string {\n const serialized = stops.map(stop => `${stop.color} ${stop.position}%`).join(', ');\n return `radial-gradient(${GRADIENT_GEOMETRY}, ${serialized})`;\n}\n\n/** Generic SwatchPicker sections for the fixed shell appearance presets. */\nexport function shellGradientPickerSections(): ShellGradientPickerSection[] {\n return [\n {\n options: [\n {\n value: 'none',\n label: SHELL_GRADIENT_PRESET_LABELS.none,\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n },\n },\n ],\n },\n {\n options: SHELL_GRADIENT_WASH_PRESETS.map(preset => ({\n value: preset,\n label: SHELL_GRADIENT_PRESET_LABELS[preset],\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n backgroundImage: buildShellRadialGradientForPreset(preset),\n opacity: Number(shellGradientPresetOpacity(preset)),\n },\n })),\n },\n ];\n}\n", "import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';\nexport type MobileDestination =\n | 'area'\n | 'search'\n | 'inbox'\n | 'activity'\n | 'messages'\n | 'agents'\n | 'help';\nexport type ShellInboxToolId = PanelToolsToolId;\n\nexport const SHELL_DESKTOP_BREAKPOINT = 1200;\nexport const SHELL_MOBILE_BREAKPOINT = 768;\nexport const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId = 'activity';\n\nexport function resolveShellResponsiveMode(width: number): ShellResponsiveMode {\n if (width >= SHELL_DESKTOP_BREAKPOINT) return 'desktop';\n if (width >= SHELL_MOBILE_BREAKPOINT) return 'tablet';\n return 'mobile';\n}\n\nexport function resolveManagedShellPageCapacity(\n mode: ShellResponsiveMode\n): 'roomy' | 'compact' | 'constrained' {\n return mode === 'desktop' ? 'roomy' : 'compact';\n}\n\nexport function shellMobileDestinationForTool(\n open: boolean,\n tool: PanelToolsToolId | ''\n): MobileDestination {\n if (!open || !tool) return 'area';\n if (tool === 'help') return 'help';\n if (tool === 'search') return 'search';\n if (tool === 'messages') return 'messages';\n if (tool === 'agents') return 'agents';\n return 'inbox';\n}\n\n/** Explicit item metadata wins over the legacy canonical Stacks/Activity grouping. */\nexport function itemUsesShellInbox(item: {\n id: PanelToolsToolId;\n mobileDestination?: MobileDestination;\n}): boolean {\n return (\n item.mobileDestination === 'inbox' ||\n (item.mobileDestination === undefined && isShellInboxTool(item.id))\n );\n}\n\nexport function isShellInboxTool(tool: string): tool is ShellInboxToolId {\n return tool === 'stacks' || tool === 'activity';\n}\n\nexport function resolveAvailableInboxTool(\n preferred: string,\n available: readonly PanelToolsToolId[]\n): ShellInboxToolId | '' {\n const inbox = available.filter(isShellInboxTool);\n if (isShellInboxTool(preferred) && inbox.includes(preferred)) return preferred;\n if (inbox.includes(SHELL_DEFAULT_INBOX_TOOL)) return SHELL_DEFAULT_INBOX_TOOL;\n return inbox[0] ?? '';\n}\n\n/** Active-destination reselects are inert unless they also dismiss the Menu pane. */\nexport function shouldEmitMobileDestinationChange(\n active: MobileDestination,\n next: MobileDestination,\n navigationOpen: boolean\n): boolean {\n return navigationOpen || active !== next;\n}\n"],
|
|
4
|
+
"sourcesContent": ["/** Application-owned tool id for the shell rail and responsive tool views. */\nexport type PanelToolsToolId = string;\n\n/** Canonical Motive shell recipe used when item metadata is omitted. */\nexport type CanonicalPanelToolsToolId =\n | 'search'\n | 'messages'\n | 'agents'\n | 'stacks'\n | 'activity'\n | 'help';\n\nexport const PANEL_TOOLS_TOOL_IDS: CanonicalPanelToolsToolId[] = [\n 'agents',\n 'messages',\n 'activity',\n 'search',\n 'stacks',\n 'help',\n];\n\n/** Rail header slot \u2014 mirrors panel-nav M logo row. */\nexport const PANEL_TOOLS_PRIMARY_TOOL_ID: CanonicalPanelToolsToolId = 'agents';\n\n/** Rail footer slot \u2014 flush to the bottom of the tools column. */\nexport const PANEL_TOOLS_FOOTER_TOOL_ID: CanonicalPanelToolsToolId = 'help';\n\nexport const PANEL_TOOLS_LABELS: Record<CanonicalPanelToolsToolId, string> = {\n search: 'Search',\n messages: 'Messages',\n stacks: 'Stacks',\n activity: 'Activity',\n agents: 'Agents',\n help: 'Help & Support',\n};\n\nexport const PANEL_TOOLS_SHORTCUTS: Partial<Record<CanonicalPanelToolsToolId, string>> = {\n search: 'K',\n agents: 'A',\n messages: 'M',\n stacks: 'S',\n activity: 'N',\n help: '/',\n};\n\nexport type PanelToolsRailPlacement = 'header' | 'body' | 'footer';\n\nexport interface PanelToolsItem {\n id: PanelToolsToolId;\n /** Icon name for <ds-icon>. */\n icon: string;\n /** Visible and accessible fallback label for custom tool ids. */\n label?: string;\n /** Explicit rail region; canonical Agents/Help placement is the fallback. */\n railPlacement?: PanelToolsRailPlacement;\n /** Stable ordering within the selected rail region. */\n order?: number;\n /** Optional shortcut label displayed by the tooltip. */\n shortcutKey?: string;\n /** Mobile destination recipe; canonical ids retain their explicit defaults. */\n mobileDestination?: 'search' | 'inbox' | 'activity' | 'messages' | 'agents' | 'help';\n /** Whether this rail button is currently pressed/active. */\n selected?: boolean;\n /** Show a notification dot. */\n dot?: boolean;\n isInactive?: boolean;\n ariaLabel?: string;\n}\n\nexport type PanelToolsRailAccessoryVisual =\n | { type: 'icon'; icon: string }\n | { type: 'initial'; initial: string }\n | { type: 'image'; src: string };\n\nexport interface PanelToolsRailAccessoryAction {\n /** Stable application-owned action id emitted with the accessory id. */\n id: string;\n /** Overrides the accessory label for the primary action. */\n ariaLabel?: string;\n isInactive?: boolean;\n}\n\nexport interface PanelToolsRailAccessorySecondaryAction {\n id: string;\n icon: string;\n ariaLabel: string;\n isInactive?: boolean;\n}\n\nexport type PanelToolsRailTransientTone = 'active' | 'positive';\n\ninterface PanelToolsRailAccessoryBase {\n /** Stable application-owned identity. Duplicate or blank ids are omitted. */\n id: string;\n /** Explicit rail region; accessories never infer placement from their id. */\n railPlacement: PanelToolsRailPlacement;\n /** Stable ordering within the selected rail region. */\n order: number;\n}\n\n/** Decorative boundary between application-owned rail accessory groups. */\nexport interface PanelToolsRailDividerAccessory extends PanelToolsRailAccessoryBase {\n type: 'divider';\n}\n\n/**\n * A compact one-action shortcut that matches standard tool-button geometry.\n * PanelTools owns its initial orb, notification dot, and transient interaction paint.\n */\nexport interface PanelToolsRailShortcutAccessory extends PanelToolsRailAccessoryBase {\n type: 'shortcut';\n /** Accessible shortcut name and action-label fallback. */\n ariaLabel: string;\n /** One or two displayed graphemes. Longer values are truncated visually. */\n initials: string;\n /** Supplemental notification dot. Include its meaning in the accessible label when needed. */\n dot?: boolean;\n action: PanelToolsRailAccessoryAction;\n}\n\n/**\n * A direct application intent that never selects a tool or changes drawer state.\n * PanelTools owns the two-control-height surface and its focus behavior.\n */\nexport interface PanelToolsRailTransientAccessory extends PanelToolsRailAccessoryBase {\n type: 'transient';\n /** Accessible accessory name and primary-action fallback label. */\n ariaLabel: string;\n visual: PanelToolsRailAccessoryVisual;\n /** State announced with the primary action and shown in its tooltip. */\n statusText: string;\n /** Bold surface treatment. Active uses brand; positive uses positive semantic color. */\n statusTone: PanelToolsRailTransientTone;\n primaryAction: PanelToolsRailAccessoryAction;\n secondaryAction?: PanelToolsRailAccessorySecondaryAction;\n}\n\nexport type PanelToolsRailAccessory =\n | PanelToolsRailDividerAccessory\n | PanelToolsRailShortcutAccessory\n | PanelToolsRailTransientAccessory;\n\nexport interface PanelToolsRailAccessoryActionDetail {\n accessoryId: string;\n actionId: string;\n /** Rendered action control, suitable for anchoring an application-owned overlay. */\n anchor: HTMLElement;\n}\n\n/** Canonical shell recipe used by Lab and by managed ShellApp examples. */\nexport const PANEL_TOOLS_DEFAULT_ITEMS: PanelToolsItem[] = [\n {\n id: 'agents',\n icon: 'AIAsterisk',\n label: PANEL_TOOLS_LABELS.agents,\n railPlacement: 'header',\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.agents,\n mobileDestination: 'agents',\n },\n {\n id: 'messages',\n icon: 'MessageBubbleStack',\n label: PANEL_TOOLS_LABELS.messages,\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.messages,\n mobileDestination: 'messages',\n },\n {\n id: 'activity',\n icon: 'Bell',\n label: PANEL_TOOLS_LABELS.activity,\n order: 1,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.activity,\n mobileDestination: 'activity',\n },\n {\n id: 'search',\n icon: 'MagnifyingGlass',\n label: PANEL_TOOLS_LABELS.search,\n order: 2,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.search,\n mobileDestination: 'search',\n },\n {\n id: 'help',\n icon: 'QuestionCircle',\n label: PANEL_TOOLS_LABELS.help,\n railPlacement: 'footer',\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.help,\n mobileDestination: 'help',\n },\n];\n\nexport interface PanelToolsHeaderAction {\n id: string;\n icon: string;\n ariaLabel: string;\n triggerId?: string;\n controls?: string;\n expanded?: boolean;\n /** Associated surface remains visible, including exit motion. */\n surfaceOpen?: boolean;\n haspopup?: 'menu' | 'dialog' | 'listbox' | 'tree' | 'grid';\n pressed?: boolean;\n isInactive?: boolean;\n}\n\nexport interface PanelToolsHeaderActionDetail {\n tool: PanelToolsToolId;\n id: string;\n /** Rendered header action host. Pass this to an external overlay's element anchor prop. */\n anchor?: HTMLElement;\n}\n\nexport interface PanelToolHeaderActionDetail {\n id: string;\n originalEvent: MouseEvent;\n /** Rendered action host, suitable for anchoring an external overlay across a shadow boundary. */\n anchor: HTMLElement;\n}\n\nexport interface PanelToolsHeaderConfig {\n title?: string;\n showBack?: boolean;\n backIcon?: string;\n backAriaLabel?: string;\n actions?: PanelToolsHeaderAction[];\n}\n\n/** Per-tool header state. The application replaces the object when a tool changes depth or actions. */\nexport type PanelToolsHeaders = Partial<Record<PanelToolsToolId, PanelToolsHeaderConfig>>;\n", "/** Nav chrome style slot \u2014 dashboard vs settings. Colors unified for now; texture hooks use the class. */\nexport type NavChromeStyle = 'dashboard' | 'settings';\n\n/** Document hint for first paint before framework props land. */\nexport const NAV_STYLE_HINT_ATTR = 'data-nav-style';\n\nexport function readNavStyleAttr(attr: string | null): NavChromeStyle | undefined {\n if (attr === 'dashboard' || attr === 'settings') return attr;\n return undefined;\n}\n\nexport function setNavStyleHint(style: NavChromeStyle): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(NAV_STYLE_HINT_ATTR, style);\n}\n\nexport function clearNavStyleHint(): void {\n if (typeof document === 'undefined') return;\n document.documentElement.removeAttribute(NAV_STYLE_HINT_ATTR);\n}\n\nexport function resolveNavChromeStyle(\n styleProp: NavChromeStyle,\n hostAttr: string | null,\n docHint?: string | null\n): NavChromeStyle {\n const fromHost = readNavStyleAttr(hostAttr);\n if (fromHost) return fromHost;\n\n const hint =\n docHint !== undefined\n ? docHint\n : typeof document !== 'undefined'\n ? document.documentElement.getAttribute(NAV_STYLE_HINT_ATTR)\n : null;\n const fromHint = readNavStyleAttr(hint);\n if (fromHint) return fromHint;\n\n return styleProp;\n}\n\nexport function shouldResyncNavChromeStyle(\n renderedStyle: NavChromeStyle,\n style: NavChromeStyle\n): boolean {\n return renderedStyle !== style;\n}\n", "import type { ChoicePopupAnchorAlignment } from '../../utils/choice-popup-alignment';\nimport type { MenuAlign, MenuSide } from './menu-position';\n\n/** Placement props bindable on `ds-menu` (side, align, offsets). */\nexport interface MenuPlacement {\n side: MenuSide;\n align: MenuAlign;\n anchorAlignment: ChoicePopupAnchorAlignment;\n sideOffset: number | string;\n alignOffset: number | string;\n}\n\n/**\n * Canonical `ds-menu` placement for the **panel-nav footer user menu**.\n * Anchor from `dsNavUserAction` detail `{ anchor }` (id `ds-panel-nav-user-menu-anchor`).\n *\n * Not for BarNav overflow menus \u2014 those use `side=\"bottom\"` / `align=\"end\"` internally.\n * `align: 'end'` bottom-aligns the last choice cell on the anchor; the side offset nudges into the content area:\n * - `sideOffset` space-100 + space-050 (12px): 4px past the panel-nav outer edge (anchor is ~8px inset).\n * - `anchorAlignment: 'choice-cell'`: the shared section inset puts the last row edge on the footer user row.\n */\nexport const PANEL_NAV_USER_MENU_PLACEMENT = {\n side: 'right',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for PanelNav's collapsed child-route flyout.\n * The parent control is 8px inside the panel edge, so a 12px side offset leaves\n * a 4px visual gap outside the panel. Start choice-cell alignment places the\n * first flyout row on the same block axis as its parent control.\n */\nexport const PANEL_NAV_CHILD_MENU_PLACEMENT = {\n side: 'right',\n align: 'start',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for a menu opened by a PanelTools header action.\n * Matches BarNav overflow: the 32px trigger is 8px inside the 48px header, so\n * a 12px side offset places the popup 4px below the header edge. Choice-cell\n * alignment keeps the final menu item edge aligned with the trigger.\n */\nexport const PANEL_TOOLS_HEADER_MENU_PLACEMENT = {\n side: 'bottom',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n", "/** Built-in shell chrome wash presets. */\nexport type ShellGradientPreset = 'none' | 'cool' | 'neutral' | 'warm' | 'fresh';\n\nexport const SHELL_GRADIENT_PRESETS: ShellGradientPreset[] = [\n 'none',\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Wash presets shown after the `none` option in pickers. */\nexport const SHELL_GRADIENT_WASH_PRESETS: Exclude<ShellGradientPreset, 'none'>[] = [\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Default wash when `gradient-preset` is omitted. */\nexport const DEFAULT_SHELL_GRADIENT_PRESET: ShellGradientPreset = 'neutral';\n\nexport const SHELL_GRADIENT_PRESET_LABELS: Record<ShellGradientPreset, string> = {\n none: 'None',\n cool: 'Cool',\n neutral: 'Neutral',\n warm: 'Warm',\n fresh: 'Fresh',\n};\n\nexport interface ShellGradientStop {\n color: string;\n position: number;\n}\n\nexport interface ShellGradientRecipe {\n opacity: number;\n stops: readonly ShellGradientStop[];\n}\n\nexport interface ShellGradientPickerPreview {\n backgroundColor: string;\n backgroundImage?: string;\n opacity?: number;\n}\n\nexport interface ShellGradientPickerOption {\n value: ShellGradientPreset;\n label: string;\n preview: ShellGradientPickerPreview;\n}\n\nexport interface ShellGradientPickerSection {\n options: ShellGradientPickerOption[];\n}\n\nconst SHELL_GRADIENT_RECIPES: Record<Exclude<ShellGradientPreset, 'none'>, ShellGradientRecipe> = {\n cool: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-blue-strong-background)', position: 100 },\n ],\n },\n neutral: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-grey-strong-background)', position: 100 },\n ],\n },\n warm: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-yellow-strong-background)', position: 100 },\n ],\n },\n fresh: {\n opacity: 0.4,\n stops: [\n { color: 'var(--color-color-intent-cyan-faint-background)', position: 0 },\n { color: 'var(--color-background-transparent)', position: 47 },\n { color: 'var(--color-background-transparent)', position: 58 },\n { color: 'var(--color-color-intent-red-faint-background)', position: 83 },\n { color: 'var(--color-color-intent-pink-faint-background)', position: 100 },\n ],\n },\n};\n\nconst GRADIENT_GEOMETRY = '100% 100% at 0% 0%';\n\nexport function shellGradientPresetStopToken(preset: ShellGradientPreset): string | null {\n if (preset === 'none') return null;\n const stops = SHELL_GRADIENT_RECIPES[preset].stops;\n return stops[stops.length - 1]?.color ?? null;\n}\n\nexport function shellGradientPresetRecipe(preset: ShellGradientPreset): ShellGradientRecipe | null {\n const normalized = normalizeShellGradientPreset(preset);\n return normalized === 'none' ? null : SHELL_GRADIENT_RECIPES[normalized];\n}\n\nexport function shellGradientPresetOpacity(preset: ShellGradientPreset): string {\n return String(shellGradientPresetRecipe(preset)?.opacity ?? 0);\n}\n\nexport function isShellGradientPreset(value: string): value is ShellGradientPreset {\n return (SHELL_GRADIENT_PRESETS as string[]).includes(value);\n}\n\n/**\n * Coerce unknown/absent presets to the default. Runtime values escape the\n * type: removing the reflected `gradient-preset` attribute (e.g. an Angular\n * `[attr.gradient-preset]=\"null\"` binding) drives the prop to null past its\n * field default \u2014 without normalization the stop lookup interpolates the\n * literal string \"undefined\" into CSS and the wash silently disappears.\n */\nexport function normalizeShellGradientPreset(\n value: string | null | undefined\n): ShellGradientPreset {\n return value != null && isShellGradientPreset(value) ? value : DEFAULT_SHELL_GRADIENT_PRESET;\n}\n\n/** Radial wash for a preset \u2014 transparent at top-left into the intent stop. `none` returns no image. */\nexport function buildShellRadialGradientForPreset(preset: ShellGradientPreset): string {\n const normalized = normalizeShellGradientPreset(preset);\n if (normalized === 'none') return 'none';\n\n return buildShellRadialGradientFromStops(SHELL_GRADIENT_RECIPES[normalized].stops);\n}\n\n/** Build the production shell geometry from an ordered set of design-time stops. */\nexport function buildShellRadialGradientFromStops(stops: readonly ShellGradientStop[]): string {\n const serialized = stops.map(stop => `${stop.color} ${stop.position}%`).join(', ');\n return `radial-gradient(${GRADIENT_GEOMETRY}, ${serialized})`;\n}\n\n/** Generic SwatchPicker sections for the fixed shell appearance presets. */\nexport function shellGradientPickerSections(): ShellGradientPickerSection[] {\n return [\n {\n options: [\n {\n value: 'none',\n label: SHELL_GRADIENT_PRESET_LABELS.none,\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n },\n },\n ],\n },\n {\n options: SHELL_GRADIENT_WASH_PRESETS.map(preset => ({\n value: preset,\n label: SHELL_GRADIENT_PRESET_LABELS[preset],\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n backgroundImage: buildShellRadialGradientForPreset(preset),\n opacity: Number(shellGradientPresetOpacity(preset)),\n },\n })),\n },\n ];\n}\n", "import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';\nexport type MobileDestination =\n | 'area'\n | 'search'\n | 'inbox'\n | 'activity'\n | 'messages'\n | 'agents'\n | 'help';\nexport type ShellInboxToolId = PanelToolsToolId;\n\nexport const SHELL_DESKTOP_BREAKPOINT = 1200;\nexport const SHELL_MOBILE_BREAKPOINT = 768;\nexport const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId = 'activity';\n\nexport function resolveShellResponsiveMode(width: number): ShellResponsiveMode {\n if (width >= SHELL_DESKTOP_BREAKPOINT) return 'desktop';\n if (width >= SHELL_MOBILE_BREAKPOINT) return 'tablet';\n return 'mobile';\n}\n\nexport function resolveManagedShellPageCapacity(\n mode: ShellResponsiveMode\n): 'roomy' | 'compact' | 'constrained' {\n return mode === 'desktop' ? 'roomy' : 'compact';\n}\n\nexport function shellMobileDestinationForTool(\n open: boolean,\n tool: PanelToolsToolId | ''\n): MobileDestination {\n if (!open || !tool) return 'area';\n if (tool === 'help') return 'help';\n if (tool === 'search') return 'search';\n if (tool === 'messages') return 'messages';\n if (tool === 'agents') return 'agents';\n return 'inbox';\n}\n\n/** Explicit item metadata wins over the legacy canonical Stacks/Activity grouping. */\nexport function itemUsesShellInbox(item: {\n id: PanelToolsToolId;\n mobileDestination?: MobileDestination;\n}): boolean {\n return (\n item.mobileDestination === 'inbox' ||\n (item.mobileDestination === undefined && isShellInboxTool(item.id))\n );\n}\n\nexport function isShellInboxTool(tool: string): tool is ShellInboxToolId {\n return tool === 'stacks' || tool === 'activity';\n}\n\nexport function resolveAvailableInboxTool(\n preferred: string,\n available: readonly PanelToolsToolId[]\n): ShellInboxToolId | '' {\n const inbox = available.filter(isShellInboxTool);\n if (isShellInboxTool(preferred) && inbox.includes(preferred)) return preferred;\n if (inbox.includes(SHELL_DEFAULT_INBOX_TOOL)) return SHELL_DEFAULT_INBOX_TOOL;\n return inbox[0] ?? '';\n}\n\n/** Active-destination reselects are inert unless they also dismiss the Menu pane. */\nexport function shouldEmitMobileDestinationChange(\n active: MobileDestination,\n next: MobileDestination,\n navigationOpen: boolean\n): boolean {\n return navigationOpen || active !== next;\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ButtonSize, type ButtonVariant } from './button-types';
|
|
2
2
|
interface ButtonContentOptions {
|
|
3
|
-
namespace: 'button-filled' | 'button-unfilled';
|
|
3
|
+
namespace: 'button-filled' | 'button-inverted' | 'button-unfilled';
|
|
4
4
|
variant: ButtonVariant;
|
|
5
5
|
size: ButtonSize;
|
|
6
6
|
label: string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type ClockPeriod = 'AM' | 'PM';
|
|
2
|
+
export interface ClockTimeParts {
|
|
3
|
+
hour12: number;
|
|
4
|
+
minute: number;
|
|
5
|
+
period: ClockPeriod;
|
|
6
|
+
}
|
|
7
|
+
export declare const CLOCK_HOURS: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
8
|
+
export declare const CLOCK_PERIODS: readonly ClockPeriod[];
|
|
9
|
+
export declare function isClockTime(value: string): boolean;
|
|
10
|
+
export declare function clockMinuteStep(step?: string | number): number;
|
|
11
|
+
export declare function clockMinutes(step?: number, baseMinute?: number): number[];
|
|
12
|
+
export declare function splitClockTime(value: string): ClockTimeParts | null;
|
|
13
|
+
export declare function joinClockTime(parts: ClockTimeParts): string;
|
|
14
|
+
/** Readable 12-hour label for filled clock values such as `09:00` → `9:00 AM`. */
|
|
15
|
+
export declare function formatClockTimeLabel(value: string): string;
|
|
16
|
+
/** Parse a typed clock time: `HH:MM`, `H:MM`, or a 12-hour label such as `9:00 AM`. */
|
|
17
|
+
export declare function parseLooseClockTime(value: string): string;
|
|
18
|
+
export declare function isClockTimeOutOfRange(value: string, min?: string, max?: string): boolean;
|
|
19
|
+
/** Whether a minute-precision clock value aligns to the configured native step. */
|
|
20
|
+
export declare function isClockTimeStepAligned(value: string, step?: string | number, min?: string): boolean;
|
|
21
|
+
/** Move within a finite list without wrapping past the first or last item. */
|
|
22
|
+
export declare function stepBoundedIndex(index: number, offset: number, length: number): number;
|
|
@@ -49,6 +49,10 @@ export type ParsedDateFilterValue = {
|
|
|
49
49
|
kind: 'range';
|
|
50
50
|
} & DateFilterRange);
|
|
51
51
|
export declare function isIsoCalendarDate(value: string): boolean;
|
|
52
|
+
/** Readable calendar date for filled ISO values such as `2026-09-10` → `Sep 10, 2026`. */
|
|
53
|
+
export declare function formatIsoCalendarDateLabel(value: string): string;
|
|
54
|
+
/** Parse a typed calendar date: ISO, `M/D/YYYY`, or a short-month label such as `Sep 10, 2026`. */
|
|
55
|
+
export declare function parseLooseCalendarDate(value: string): string;
|
|
52
56
|
export declare function shiftIsoCalendarDate(value: string, days: number): string;
|
|
53
57
|
export declare function dateFilterRelativeValue(preset: DateFilterRelativePreset): DateFilterRelativeValue;
|
|
54
58
|
export declare function dateFilterRangeValue(start: string, end?: string): DateFilterRangeValue;
|
|
@@ -25,5 +25,7 @@ export { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from './control
|
|
|
25
25
|
export type { ControlInsetDepth, ControlSize } from './control-text';
|
|
26
26
|
export { choicePopupMinWidth, resolveChoicePopupAlignOffset } from './choice-popup-alignment';
|
|
27
27
|
export type { ChoicePopupAnchorAlignment } from './choice-popup-alignment';
|
|
28
|
-
export {
|
|
28
|
+
export { CLOCK_HOURS, CLOCK_PERIODS, clockMinuteStep, clockMinutes, formatClockTimeLabel, isClockTime, isClockTimeOutOfRange, isClockTimeStepAligned, joinClockTime, parseLooseClockTime, splitClockTime, stepBoundedIndex, } from './clock-time';
|
|
29
|
+
export type { ClockPeriod, ClockTimeParts } from './clock-time';
|
|
30
|
+
export { DATE_FILTER_RELATIVE_PRESETS, dateFilterRangeValue, dateFilterRelativeValue, formatIsoCalendarDateLabel, isIsoCalendarDate, parseLooseCalendarDate, normalizeDateFilterValue, parseDateFilterValue, resolveDateFilterRange, shiftIsoCalendarDate, } from './date-filter-value';
|
|
29
31
|
export type { DateFilterRange, DateFilterRangeValue, DateFilterRelativePreset, DateFilterRelativeValue, DateFilterValue, ParsedDateFilterValue, } from './date-filter-value';
|
package/dist/lib/utils/index.js
CHANGED
|
@@ -1,17 +1,80 @@
|
|
|
1
|
+
// src/wc/components/Icon/flag-icon-catalog.ts
|
|
2
|
+
var flagIconLoaders = {
|
|
3
|
+
FlagAustria: () => import("@ds-mo/icons/svg/flags/FlagAustria").then((m) => m.FlagAustria),
|
|
4
|
+
FlagBelgium: () => import("@ds-mo/icons/svg/flags/FlagBelgium").then((m) => m.FlagBelgium),
|
|
5
|
+
FlagBulgaria: () => import("@ds-mo/icons/svg/flags/FlagBulgaria").then((m) => m.FlagBulgaria),
|
|
6
|
+
FlagCanada: () => import("@ds-mo/icons/svg/flags/FlagCanada").then((m) => m.FlagCanada),
|
|
7
|
+
FlagCroatia: () => import("@ds-mo/icons/svg/flags/FlagCroatia").then((m) => m.FlagCroatia),
|
|
8
|
+
FlagCyprus: () => import("@ds-mo/icons/svg/flags/FlagCyprus").then((m) => m.FlagCyprus),
|
|
9
|
+
FlagCzechRepublic: () => import("@ds-mo/icons/svg/flags/FlagCzechRepublic").then((m) => m.FlagCzechRepublic),
|
|
10
|
+
FlagDenmark: () => import("@ds-mo/icons/svg/flags/FlagDenmark").then((m) => m.FlagDenmark),
|
|
11
|
+
FlagEU: () => import("@ds-mo/icons/svg/flags/FlagEU").then((m) => m.FlagEU),
|
|
12
|
+
FlagEstonia: () => import("@ds-mo/icons/svg/flags/FlagEstonia").then((m) => m.FlagEstonia),
|
|
13
|
+
FlagFinland: () => import("@ds-mo/icons/svg/flags/FlagFinland").then((m) => m.FlagFinland),
|
|
14
|
+
FlagFrance: () => import("@ds-mo/icons/svg/flags/FlagFrance").then((m) => m.FlagFrance),
|
|
15
|
+
FlagGermany: () => import("@ds-mo/icons/svg/flags/FlagGermany").then((m) => m.FlagGermany),
|
|
16
|
+
FlagGreece: () => import("@ds-mo/icons/svg/flags/FlagGreece").then((m) => m.FlagGreece),
|
|
17
|
+
FlagHungary: () => import("@ds-mo/icons/svg/flags/FlagHungary").then((m) => m.FlagHungary),
|
|
18
|
+
FlagIreland: () => import("@ds-mo/icons/svg/flags/FlagIreland").then((m) => m.FlagIreland),
|
|
19
|
+
FlagItaly: () => import("@ds-mo/icons/svg/flags/FlagItaly").then((m) => m.FlagItaly),
|
|
20
|
+
FlagLatvia: () => import("@ds-mo/icons/svg/flags/FlagLatvia").then((m) => m.FlagLatvia),
|
|
21
|
+
FlagLithuania: () => import("@ds-mo/icons/svg/flags/FlagLithuania").then((m) => m.FlagLithuania),
|
|
22
|
+
FlagLuxembourg: () => import("@ds-mo/icons/svg/flags/FlagLuxembourg").then((m) => m.FlagLuxembourg),
|
|
23
|
+
FlagMalta: () => import("@ds-mo/icons/svg/flags/FlagMalta").then((m) => m.FlagMalta),
|
|
24
|
+
FlagMexico: () => import("@ds-mo/icons/svg/flags/FlagMexico").then((m) => m.FlagMexico),
|
|
25
|
+
FlagNetherlands: () => import("@ds-mo/icons/svg/flags/FlagNetherlands").then((m) => m.FlagNetherlands),
|
|
26
|
+
FlagPoland: () => import("@ds-mo/icons/svg/flags/FlagPoland").then((m) => m.FlagPoland),
|
|
27
|
+
FlagPortugal: () => import("@ds-mo/icons/svg/flags/FlagPortugal").then((m) => m.FlagPortugal),
|
|
28
|
+
FlagRomania: () => import("@ds-mo/icons/svg/flags/FlagRomania").then((m) => m.FlagRomania),
|
|
29
|
+
FlagSlovakia: () => import("@ds-mo/icons/svg/flags/FlagSlovakia").then((m) => m.FlagSlovakia),
|
|
30
|
+
FlagSlovenia: () => import("@ds-mo/icons/svg/flags/FlagSlovenia").then((m) => m.FlagSlovenia),
|
|
31
|
+
FlagSpain: () => import("@ds-mo/icons/svg/flags/FlagSpain").then((m) => m.FlagSpain),
|
|
32
|
+
FlagSweden: () => import("@ds-mo/icons/svg/flags/FlagSweden").then((m) => m.FlagSweden),
|
|
33
|
+
FlagUnitedKingdom: () => import("@ds-mo/icons/svg/flags/FlagUnitedKingdom").then((m) => m.FlagUnitedKingdom),
|
|
34
|
+
FlagUnitedStates: () => import("@ds-mo/icons/svg/flags/FlagUnitedStates").then((m) => m.FlagUnitedStates)
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/wc/components/Icon/map-icon-catalog.ts
|
|
38
|
+
var mapIconLoaders = {
|
|
39
|
+
MapEntityAsset: () => import("@ds-mo/icons/svg/map/MapEntityAsset").then((m) => m.MapEntityAsset),
|
|
40
|
+
MapEntityPerson: () => import("@ds-mo/icons/svg/map/MapEntityPerson").then((m) => m.MapEntityPerson),
|
|
41
|
+
MapEntityTravelGroup: () => import("@ds-mo/icons/svg/map/MapEntityTravelGroup").then((m) => m.MapEntityTravelGroup),
|
|
42
|
+
MapEntityVehicle: () => import("@ds-mo/icons/svg/map/MapEntityVehicle").then((m) => m.MapEntityVehicle),
|
|
43
|
+
MapExclamation: () => import("@ds-mo/icons/svg/map/MapExclamation").then((m) => m.MapExclamation),
|
|
44
|
+
MapGatewayReconnect: () => import("@ds-mo/icons/svg/map/MapGatewayReconnect").then((m) => m.MapGatewayReconnect),
|
|
45
|
+
MapGatewayStrikethrough: () => import("@ds-mo/icons/svg/map/MapGatewayStrikethrough").then((m) => m.MapGatewayStrikethrough),
|
|
46
|
+
MapGeofence: () => import("@ds-mo/icons/svg/map/MapGeofence").then((m) => m.MapGeofence),
|
|
47
|
+
MapKey: () => import("@ds-mo/icons/svg/map/MapKey").then((m) => m.MapKey),
|
|
48
|
+
MapLightning: () => import("@ds-mo/icons/svg/map/MapLightning").then((m) => m.MapLightning),
|
|
49
|
+
MapLockClosed: () => import("@ds-mo/icons/svg/map/MapLockClosed").then((m) => m.MapLockClosed),
|
|
50
|
+
MapPencil: () => import("@ds-mo/icons/svg/map/MapPencil").then((m) => m.MapPencil),
|
|
51
|
+
MapPlus: () => import("@ds-mo/icons/svg/map/MapPlus").then((m) => m.MapPlus),
|
|
52
|
+
MapRewind: () => import("@ds-mo/icons/svg/map/MapRewind").then((m) => m.MapRewind),
|
|
53
|
+
MapShieldCircle: () => import("@ds-mo/icons/svg/map/MapShieldCircle").then((m) => m.MapShieldCircle),
|
|
54
|
+
MapTarget: () => import("@ds-mo/icons/svg/map/MapTarget").then((m) => m.MapTarget)
|
|
55
|
+
};
|
|
56
|
+
|
|
1
57
|
// src/wc/components/Icon/icon-cache.ts
|
|
2
58
|
var CACHE_KEY = /* @__PURE__ */ Symbol.for("ds-mo.icon-svg-cache");
|
|
3
|
-
function iconCacheKey(name,
|
|
4
|
-
return
|
|
59
|
+
function iconCacheKey(name, category) {
|
|
60
|
+
return `${category}:${name}`;
|
|
61
|
+
}
|
|
62
|
+
function hasOwn(loaders, name) {
|
|
63
|
+
return Object.prototype.hasOwnProperty.call(loaders, name);
|
|
64
|
+
}
|
|
65
|
+
function resolveIconCategory(name) {
|
|
66
|
+
if (hasOwn(flagIconLoaders, name)) return "flag";
|
|
67
|
+
if (hasOwn(mapIconLoaders, name)) return "map";
|
|
68
|
+
return "system";
|
|
5
69
|
}
|
|
6
70
|
function iconCache() {
|
|
7
71
|
const g = globalThis;
|
|
8
72
|
return g[CACHE_KEY] ?? (g[CACHE_KEY] = /* @__PURE__ */ new Map());
|
|
9
73
|
}
|
|
10
|
-
function registerIcons(icons
|
|
74
|
+
function registerIcons(icons) {
|
|
11
75
|
const cache = iconCache();
|
|
12
76
|
for (const [name, svg] of Object.entries(icons)) {
|
|
13
|
-
|
|
14
|
-
cache.set(iconCacheKey(name, flag), svg);
|
|
77
|
+
cache.set(iconCacheKey(name, resolveIconCategory(name)), svg);
|
|
15
78
|
}
|
|
16
79
|
}
|
|
17
80
|
|
|
@@ -1058,6 +1121,85 @@ function choicePopupMinWidth(anchorWidth, sectionInsetPx) {
|
|
|
1058
1121
|
return anchorWidth + sectionInsetPx * 2;
|
|
1059
1122
|
}
|
|
1060
1123
|
|
|
1124
|
+
// src/wc/utils/clock-time.ts
|
|
1125
|
+
var CLOCK_HOURS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
1126
|
+
var CLOCK_PERIODS = ["AM", "PM"];
|
|
1127
|
+
var CLOCK_TIME_PATTERN = /^\d{2}:\d{2}$/;
|
|
1128
|
+
function isClockTime(value) {
|
|
1129
|
+
if (!CLOCK_TIME_PATTERN.test(value)) return false;
|
|
1130
|
+
const [hour, minute] = value.split(":").map(Number);
|
|
1131
|
+
return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;
|
|
1132
|
+
}
|
|
1133
|
+
function clockMinuteStep(step = 60) {
|
|
1134
|
+
const seconds = typeof step === "number" ? step : Number(step);
|
|
1135
|
+
if (!Number.isFinite(seconds) || seconds <= 0) return 1;
|
|
1136
|
+
if (seconds < 60) return 1;
|
|
1137
|
+
return Math.max(1, Math.round(seconds / 60));
|
|
1138
|
+
}
|
|
1139
|
+
function clockMinutes(step = 1, baseMinute = 0) {
|
|
1140
|
+
const stride = Number.isFinite(step) && step > 0 ? Math.floor(step) : 1;
|
|
1141
|
+
const normalizedBase = (Math.floor(baseMinute) % 60 + 60) % 60;
|
|
1142
|
+
const values = /* @__PURE__ */ new Set();
|
|
1143
|
+
for (let offset = 0; offset < 1440; offset += stride) {
|
|
1144
|
+
values.add((normalizedBase + offset) % 60);
|
|
1145
|
+
}
|
|
1146
|
+
return [...values].sort((a, b) => a - b);
|
|
1147
|
+
}
|
|
1148
|
+
function splitClockTime(value) {
|
|
1149
|
+
if (!isClockTime(value)) return null;
|
|
1150
|
+
const [hour24, minute] = value.split(":").map(Number);
|
|
1151
|
+
const period = hour24 >= 12 ? "PM" : "AM";
|
|
1152
|
+
const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
|
|
1153
|
+
return { hour12, minute, period };
|
|
1154
|
+
}
|
|
1155
|
+
function joinClockTime(parts) {
|
|
1156
|
+
const hour24 = parts.period === "AM" ? parts.hour12 === 12 ? 0 : parts.hour12 : parts.hour12 === 12 ? 12 : parts.hour12 + 12;
|
|
1157
|
+
return `${String(hour24).padStart(2, "0")}:${String(parts.minute).padStart(2, "0")}`;
|
|
1158
|
+
}
|
|
1159
|
+
function formatClockTimeLabel(value) {
|
|
1160
|
+
const parts = splitClockTime(value);
|
|
1161
|
+
if (!parts) return "";
|
|
1162
|
+
return `${parts.hour12}:${String(parts.minute).padStart(2, "0")} ${parts.period}`;
|
|
1163
|
+
}
|
|
1164
|
+
function parseLooseClockTime(value) {
|
|
1165
|
+
const trimmed = value.trim();
|
|
1166
|
+
if (!trimmed) return "";
|
|
1167
|
+
if (isClockTime(trimmed)) return trimmed;
|
|
1168
|
+
const twentyFour = trimmed.match(/^(\d{1,2}):(\d{2})$/);
|
|
1169
|
+
if (twentyFour) {
|
|
1170
|
+
const hour = Number(twentyFour[1]);
|
|
1171
|
+
const minute2 = Number(twentyFour[2]);
|
|
1172
|
+
if (hour > 23 || minute2 > 59) return "";
|
|
1173
|
+
return `${String(hour).padStart(2, "0")}:${twentyFour[2]}`;
|
|
1174
|
+
}
|
|
1175
|
+
const meridiem = trimmed.match(/^(\d{1,2})(?::(\d{2}))?\s*([AaPp])\.?[Mm]\.?$/);
|
|
1176
|
+
if (!meridiem) return "";
|
|
1177
|
+
const hour12 = Number(meridiem[1]);
|
|
1178
|
+
const minute = meridiem[2] ? Number(meridiem[2]) : 0;
|
|
1179
|
+
if (hour12 < 1 || hour12 > 12 || minute > 59) return "";
|
|
1180
|
+
const period = meridiem[3].toUpperCase() === "P" ? "PM" : "AM";
|
|
1181
|
+
return joinClockTime({ hour12, minute, period });
|
|
1182
|
+
}
|
|
1183
|
+
function isClockTimeOutOfRange(value, min, max) {
|
|
1184
|
+
if (!isClockTime(value)) return true;
|
|
1185
|
+
if (min && isClockTime(min) && value < min) return true;
|
|
1186
|
+
if (max && isClockTime(max) && value > max) return true;
|
|
1187
|
+
return false;
|
|
1188
|
+
}
|
|
1189
|
+
function isClockTimeStepAligned(value, step = 60, min) {
|
|
1190
|
+
if (!isClockTime(value)) return false;
|
|
1191
|
+
const valueParts = value.split(":").map(Number);
|
|
1192
|
+
const baseParts = min && isClockTime(min) ? min.split(":").map(Number) : [0, 0];
|
|
1193
|
+
const stride = clockMinuteStep(step);
|
|
1194
|
+
const valueMinutes = valueParts[0] * 60 + valueParts[1];
|
|
1195
|
+
const baseMinutes = baseParts[0] * 60 + baseParts[1];
|
|
1196
|
+
return (valueMinutes - baseMinutes) % stride === 0;
|
|
1197
|
+
}
|
|
1198
|
+
function stepBoundedIndex(index, offset, length) {
|
|
1199
|
+
if (length <= 0) return 0;
|
|
1200
|
+
return Math.min(length - 1, Math.max(0, index + offset));
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1061
1203
|
// src/wc/utils/date-filter-value.ts
|
|
1062
1204
|
var DATE_FILTER_RELATIVE_PRESETS = [
|
|
1063
1205
|
{ label: "Today", value: "today", days: 1, offset: 0 },
|
|
@@ -1069,12 +1211,52 @@ var DATE_FILTER_RELATIVE_PRESETS = [
|
|
|
1069
1211
|
{ label: "Last 90 days", value: "last-90-days", days: 90, offset: 0 }
|
|
1070
1212
|
];
|
|
1071
1213
|
var ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
1214
|
+
var ISO_CALENDAR_DATE_LABEL = new Intl.DateTimeFormat("en-US", {
|
|
1215
|
+
month: "short",
|
|
1216
|
+
day: "numeric",
|
|
1217
|
+
year: "numeric",
|
|
1218
|
+
timeZone: "UTC"
|
|
1219
|
+
});
|
|
1072
1220
|
function isIsoCalendarDate(value) {
|
|
1073
1221
|
if (!ISO_DATE_PATTERN.test(value)) return false;
|
|
1074
1222
|
const [year, month, day] = value.split("-").map(Number);
|
|
1075
1223
|
const date = new Date(Date.UTC(year, month - 1, day));
|
|
1076
1224
|
return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
|
|
1077
1225
|
}
|
|
1226
|
+
function formatIsoCalendarDateLabel(value) {
|
|
1227
|
+
if (!isIsoCalendarDate(value)) return "";
|
|
1228
|
+
return ISO_CALENDAR_DATE_LABEL.format(/* @__PURE__ */ new Date(`${value}T00:00:00Z`));
|
|
1229
|
+
}
|
|
1230
|
+
var MONTH_LABELS = [
|
|
1231
|
+
"jan",
|
|
1232
|
+
"feb",
|
|
1233
|
+
"mar",
|
|
1234
|
+
"apr",
|
|
1235
|
+
"may",
|
|
1236
|
+
"jun",
|
|
1237
|
+
"jul",
|
|
1238
|
+
"aug",
|
|
1239
|
+
"sep",
|
|
1240
|
+
"oct",
|
|
1241
|
+
"nov",
|
|
1242
|
+
"dec"
|
|
1243
|
+
];
|
|
1244
|
+
function parseLooseCalendarDate(value) {
|
|
1245
|
+
const trimmed = value.trim();
|
|
1246
|
+
if (!trimmed) return "";
|
|
1247
|
+
if (isIsoCalendarDate(trimmed)) return trimmed;
|
|
1248
|
+
const numeric = trimmed.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
|
|
1249
|
+
if (numeric) {
|
|
1250
|
+
const iso2 = `${numeric[3]}-${numeric[1].padStart(2, "0")}-${numeric[2].padStart(2, "0")}`;
|
|
1251
|
+
return isIsoCalendarDate(iso2) ? iso2 : "";
|
|
1252
|
+
}
|
|
1253
|
+
const labelled = trimmed.match(/^([A-Za-z]{3})\s+(\d{1,2}),\s+(\d{4})$/);
|
|
1254
|
+
if (!labelled) return "";
|
|
1255
|
+
const monthIndex = MONTH_LABELS.indexOf(labelled[1].toLowerCase());
|
|
1256
|
+
if (monthIndex < 0) return "";
|
|
1257
|
+
const iso = `${labelled[3]}-${String(monthIndex + 1).padStart(2, "0")}-${labelled[2].padStart(2, "0")}`;
|
|
1258
|
+
return isIsoCalendarDate(iso) ? iso : "";
|
|
1259
|
+
}
|
|
1078
1260
|
function shiftIsoCalendarDate(value, days) {
|
|
1079
1261
|
if (!isIsoCalendarDate(value)) return "";
|
|
1080
1262
|
const [year, month, day] = value.split("-").map(Number);
|
|
@@ -1117,6 +1299,8 @@ function resolveDateFilterRange(value, referenceDate) {
|
|
|
1117
1299
|
return { start: shiftIsoCalendarDate(end, -(preset.days - 1)), end };
|
|
1118
1300
|
}
|
|
1119
1301
|
export {
|
|
1302
|
+
CLOCK_HOURS,
|
|
1303
|
+
CLOCK_PERIODS,
|
|
1120
1304
|
CONTROL_SUPPORTING_TEXT_VARIANT,
|
|
1121
1305
|
CONTROL_TEXT_VARIANT,
|
|
1122
1306
|
DATE_FILTER_RELATIVE_PRESETS,
|
|
@@ -1137,6 +1321,8 @@ export {
|
|
|
1137
1321
|
cell,
|
|
1138
1322
|
choicePopupMinWidth,
|
|
1139
1323
|
clearCssLengthPxCache,
|
|
1324
|
+
clockMinuteStep,
|
|
1325
|
+
clockMinutes,
|
|
1140
1326
|
computeMetricChange,
|
|
1141
1327
|
controlWidthClass,
|
|
1142
1328
|
cumulativeBins,
|
|
@@ -1145,16 +1331,24 @@ export {
|
|
|
1145
1331
|
defineChart,
|
|
1146
1332
|
densityX,
|
|
1147
1333
|
dot,
|
|
1334
|
+
formatClockTimeLabel,
|
|
1148
1335
|
formatCompactNumber,
|
|
1336
|
+
formatIsoCalendarDateLabel,
|
|
1149
1337
|
formatPercentage,
|
|
1338
|
+
isClockTime,
|
|
1339
|
+
isClockTimeOutOfRange,
|
|
1340
|
+
isClockTimeStepAligned,
|
|
1150
1341
|
isElementTruncated,
|
|
1151
1342
|
isIsoCalendarDate,
|
|
1152
1343
|
isScrollAtEdge,
|
|
1344
|
+
joinClockTime,
|
|
1153
1345
|
lineY,
|
|
1154
1346
|
normalizeDateFilterValue,
|
|
1155
1347
|
normalizeStack,
|
|
1156
1348
|
parseCssTimeMs,
|
|
1157
1349
|
parseDateFilterValue,
|
|
1350
|
+
parseLooseCalendarDate,
|
|
1351
|
+
parseLooseClockTime,
|
|
1158
1352
|
pieLayout,
|
|
1159
1353
|
polar,
|
|
1160
1354
|
prefersReducedMotion,
|
|
@@ -1184,6 +1378,8 @@ export {
|
|
|
1184
1378
|
setRepeatedFormControlValue,
|
|
1185
1379
|
setRequiredValidity,
|
|
1186
1380
|
shiftIsoCalendarDate,
|
|
1381
|
+
splitClockTime,
|
|
1382
|
+
stepBoundedIndex,
|
|
1187
1383
|
textMark,
|
|
1188
1384
|
truncateSvgTextToWidth
|
|
1189
1385
|
};
|