@ds-mo/ui 14.19.0 → 14.20.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 +24 -8
- package/dist/angular/ds-filter-menu.d.ts +1 -1
- package/dist/angular/ds-filter-menu.js +3 -3
- 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-banner.js.map +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-action.js.map +1 -1
- package/dist/components/ds-bar-nav.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-bar-workflow.js.map +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-chart.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +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-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.js +1 -1
- package/dist/components/ds-loader.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-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table-filter.js +1 -1
- package/dist/components/ds-table-filter.js.map +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table.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-toast.js +1 -1
- package/dist/components/ds-toast.js.map +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/p-0XTyQNRG.js +2 -0
- package/dist/components/{p-JPTkZ3Ji.js.map → p-0XTyQNRG.js.map} +1 -1
- package/dist/components/{p-DaAXY-XS.js → p-1UAVanY9.js} +2 -2
- package/dist/components/p-1UAVanY9.js.map +1 -0
- package/dist/components/{p-BNiuAMeh.js → p-AtUP95E_.js} +2 -2
- package/dist/components/p-AtUP95E_.js.map +1 -0
- package/dist/components/p-B-HsfQOK.js +2 -0
- package/dist/components/p-B-HsfQOK.js.map +1 -0
- package/dist/components/{p-B_jZIC9R.js → p-B2FT4Da6.js} +2 -2
- package/dist/components/{p-B_jZIC9R.js.map → p-B2FT4Da6.js.map} +1 -1
- package/dist/components/p-B4wTnsUL.js +2 -0
- package/dist/components/p-B4wTnsUL.js.map +1 -0
- package/dist/components/p-B5-R5mb8.js +2 -0
- package/dist/components/p-B5-R5mb8.js.map +1 -0
- package/dist/components/p-B6rSDhJY.js +2 -0
- package/dist/components/p-B6rSDhJY.js.map +1 -0
- package/dist/components/{p-B1JRCDHS.js → p-BHhmB9-4.js} +2 -2
- package/dist/components/{p-B1JRCDHS.js.map → p-BHhmB9-4.js.map} +1 -1
- package/dist/components/p-BUexfjjg.js +2 -0
- package/dist/components/{p-DOUDRJbE.js.map → p-BUexfjjg.js.map} +1 -1
- package/dist/components/{p-BBG6Sswb.js → p-BYFS2qWb.js} +2 -2
- package/dist/components/{p-BBG6Sswb.js.map → p-BYFS2qWb.js.map} +1 -1
- package/dist/components/{p-uI6z53BE.js → p-Bb4KnRy0.js} +2 -2
- package/dist/components/{p-HB_cf_aR.js → p-BeA6Jv-3.js} +2 -2
- package/dist/components/{p-HB_cf_aR.js.map → p-BeA6Jv-3.js.map} +1 -1
- package/dist/components/{p-Bbb9A3NV.js → p-BjRD57w3.js} +2 -2
- package/dist/components/p-BjRD57w3.js.map +1 -0
- package/dist/components/p-BkelrY4-.js +2 -0
- package/dist/components/{p-CwjVgUqy.js.map → p-BkelrY4-.js.map} +1 -1
- package/dist/components/{p-r8PMqlqm.js → p-BmssRAEZ.js} +2 -2
- package/dist/components/p-BmssRAEZ.js.map +1 -0
- package/dist/components/{p-BNkU9dcc.js → p-Bv6FSDPR.js} +2 -2
- package/dist/components/{p-BNkU9dcc.js.map → p-Bv6FSDPR.js.map} +1 -1
- package/dist/components/{p-D3fMaUJ3.js → p-Bx5BSd6F.js} +2 -2
- package/dist/components/p-Bx5BSd6F.js.map +1 -0
- package/dist/components/{p-B8q-6a03.js → p-C0qN3PSb.js} +1 -1
- package/dist/components/{p-B8q-6a03.js.map → p-C0qN3PSb.js.map} +1 -1
- package/dist/components/p-CCmgtju-.js +2 -0
- package/dist/components/p-CCmgtju-.js.map +1 -0
- package/dist/components/p-CDw_WEVt.js +2 -0
- package/dist/components/p-CDw_WEVt.js.map +1 -0
- package/dist/components/{p-DFQ9mcbK.js → p-CUL5_8JM.js} +2 -2
- package/dist/components/p-CUL5_8JM.js.map +1 -0
- package/dist/components/{p-BFfLvMZd.js → p-Cea7rROU.js} +2 -2
- package/dist/components/{p-BFfLvMZd.js.map → p-Cea7rROU.js.map} +1 -1
- package/dist/components/{p-B0Byw6OX.js → p-CgGcgMjs.js} +1 -1
- package/dist/components/{p-B0Byw6OX.js.map → p-CgGcgMjs.js.map} +1 -1
- package/dist/components/{p-C-Y7gYgz.js → p-ChfVRPHw.js} +2 -2
- package/dist/components/p-ChfVRPHw.js.map +1 -0
- package/dist/components/{p-CJq3n5kA.js → p-Ck1hgD6g.js} +2 -2
- package/dist/components/p-Ck1hgD6g.js.map +1 -0
- package/dist/components/{p-BMc0DE59.js → p-CochmPyg.js} +1 -1
- package/dist/components/p-CochmPyg.js.map +1 -0
- package/dist/components/{p-DDgeXGbB.js → p-CptSB-tA.js} +2 -2
- package/dist/components/p-CptSB-tA.js.map +1 -0
- package/dist/components/{p-DBue3ISk.js → p-CyZqk196.js} +2 -2
- package/dist/components/p-CyZqk196.js.map +1 -0
- package/dist/components/{p-Cxr0IQjC.js → p-CzbsTZt7.js} +2 -2
- package/dist/components/p-CzbsTZt7.js.map +1 -0
- package/dist/components/{p-ZpQBAwZC.js → p-D7QlTWbN.js} +2 -2
- package/dist/components/p-D7QlTWbN.js.map +1 -0
- package/dist/components/{p-C6DNhlES.js → p-DA5H_Iq_.js} +1 -1
- package/dist/components/p-DA5H_Iq_.js.map +1 -0
- package/dist/components/p-DBYv7fRq.js +2 -0
- package/dist/components/p-DBYv7fRq.js.map +1 -0
- package/dist/components/{p-CY4YFAT3.js → p-DCbKsABt.js} +1 -1
- package/dist/components/p-DCbKsABt.js.map +1 -0
- package/dist/components/{p-C6R5Lft0.js → p-DFC0sRM-.js} +2 -2
- package/dist/components/p-DFC0sRM-.js.map +1 -0
- package/dist/components/p-DGe5oXR0.js +2 -0
- package/dist/components/p-DGe5oXR0.js.map +1 -0
- package/dist/components/{p-CsBICYmt.js → p-DGkn8FwV.js} +2 -2
- package/dist/components/p-DGkn8FwV.js.map +1 -0
- package/dist/components/p-DIlScMvI.js +2 -0
- package/dist/components/p-DIlScMvI.js.map +1 -0
- package/dist/components/p-DKt_8s-U.js +2 -0
- package/dist/components/p-DKt_8s-U.js.map +1 -0
- package/dist/components/p-DLbHgbVj.js +2 -0
- package/dist/components/p-DLbHgbVj.js.map +1 -0
- package/dist/components/{p-Bu3dOjpW.js → p-DM1Z_hh0.js} +2 -2
- package/dist/components/{p-Bu3dOjpW.js.map → p-DM1Z_hh0.js.map} +1 -1
- package/dist/components/p-DOUk4KoT.js.map +1 -1
- package/dist/components/p-DQBT1Jkf.js +2 -0
- package/dist/components/p-DQBT1Jkf.js.map +1 -0
- package/dist/components/p-DW5Ita-P.js +2 -0
- package/dist/components/{p-DUdOmSFR.js.map → p-DW5Ita-P.js.map} +1 -1
- package/dist/components/{p-BS0AbMNK.js → p-DWjTOoXs.js} +2 -2
- package/dist/components/p-DWjTOoXs.js.map +1 -0
- package/dist/components/{p-DNpLDbWY.js → p-DZ58Sg5a.js} +1 -1
- package/dist/components/p-DZ58Sg5a.js.map +1 -0
- package/dist/components/{p-BknXYAEc.js → p-DdH7b4JF.js} +2 -2
- package/dist/components/p-DdH7b4JF.js.map +1 -0
- package/dist/components/p-DfDoqOlx.js +2 -0
- package/dist/components/p-DfDoqOlx.js.map +1 -0
- package/dist/components/p-Do8wbFff.js +2 -0
- package/dist/components/p-Do8wbFff.js.map +1 -0
- package/dist/components/p-Is1lFmwp.js +2 -0
- package/dist/components/p-Is1lFmwp.js.map +1 -0
- package/dist/components/p-L8IIeDXM.js +2 -0
- package/dist/components/p-L8IIeDXM.js.map +1 -0
- package/dist/components/{p-BUDAwJVV.js → p-caLOcQUK.js} +2 -2
- package/dist/components/p-caLOcQUK.js.map +1 -0
- package/dist/components/{p-D1eEgwcP.js → p-etg-Uk1u.js} +1 -1
- package/dist/components/{p-D1eEgwcP.js.map → p-etg-Uk1u.js.map} +1 -1
- package/dist/components/{p-C9gC4haA.js → p-fRDzpfi9.js} +2 -2
- package/dist/components/p-fRDzpfi9.js.map +1 -0
- package/dist/components/{p-C-vRkDyn.js → p-rCeztgVn.js} +1 -1
- package/dist/components/{p-C-vRkDyn.js.map → p-rCeztgVn.js.map} +1 -1
- package/dist/components/{p-BKp__CQX.js → p-rw0ZxIE4.js} +2 -2
- package/dist/components/p-rw0ZxIE4.js.map +1 -0
- package/dist/components/p-v4oqkJms.js +2 -0
- package/dist/components/p-v4oqkJms.js.map +1 -0
- package/dist/docs/components.json +117 -19
- package/dist/lib/shell/index.d.ts +2 -2
- package/dist/lib/shell/index.js +8 -6
- package/dist/lib/shell/index.js.map +2 -2
- package/dist/lib/toast/index.js +1 -4
- package/dist/lib/toast/index.js.map +2 -2
- package/dist/lib/utils/date-filter-value.d.ts +57 -0
- package/dist/lib/utils/index.d.ts +3 -1
- package/dist/lib/utils/index.js +171 -22
- package/dist/lib/utils/index.js.map +3 -3
- package/dist/mcp/cli.js +70 -31
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +3 -3
- package/dist/mcp-data/registry/agent-source-list.json +2 -2
- package/dist/mcp-data/registry/agent-tool-call.json +2 -2
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +2 -2
- package/dist/mcp-data/registry/bar-action.json +1 -1
- package/dist/mcp-data/registry/bar-nav.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-unfilled.json +1 -1
- package/dist/mcp-data/registry/card-chart.json +2 -2
- package/dist/mcp-data/registry/card-overview.json +3 -3
- package/dist/mcp-data/registry/card-setting.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.json +2 -2
- 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 +1 -1
- package/dist/mcp-data/registry/filter-menu.json +56 -9
- package/dist/mcp-data/registry/icon.json +2 -2
- package/dist/mcp-data/registry/input.json +2 -2
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/menu.json +3 -3
- 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 +3 -3
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +2 -2
- package/dist/mcp-data/registry/mobile-section-switcher.json +2 -2
- package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
- package/dist/mcp-data/registry/modal.json +2 -2
- package/dist/mcp-data/registry/pagination.json +2 -2
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- 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 +2 -2
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +23 -7
- package/dist/mcp-data/registry/select.json +1 -1
- package/dist/mcp-data/registry/shell-app.json +2 -2
- 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 +2 -2
- package/dist/mcp-data/registry/slider.json +2 -2
- package/dist/mcp-data/registry/swatch-picker.json +3 -3
- package/dist/mcp-data/registry/switch.json +2 -2
- package/dist/mcp-data/registry/tab-group.json +2 -2
- package/dist/mcp-data/registry/table-filter.json +5 -3
- package/dist/mcp-data/registry/table-sort.json +1 -1
- package/dist/mcp-data/registry/table.json +18 -18
- package/dist/mcp-data/registry/tag.json +2 -2
- package/dist/mcp-data/registry/text.json +4 -4
- package/dist/mcp-data/registry/toast.json +2 -2
- package/dist/mcp-data/registry/tooltip-chart.json +2 -2
- package/dist/mcp-data/registry/tooltip.json +2 -2
- package/dist/styles/prose.css +42 -38
- package/dist/styles/table.css +39 -67
- package/dist/types/components/CardSetting/index.d.ts +1 -1
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +20 -1
- package/dist/types/components/FilterMenu/filter-menu-calendar.d.ts +13 -0
- package/dist/types/components/TooltipChart/index.d.ts +1 -1
- package/dist/types/components.d.ts +26 -4
- package/dist/types/shell/index.d.ts +2 -2
- package/dist/types/utils/date-filter-value.d.ts +58 -0
- package/dist/types/utils/index.d.ts +3 -1
- package/dist/vue/ds-filter-menu.js +2 -0
- package/package.json +11 -1
- package/dist/components/p--CRAu9fJ.js +0 -2
- package/dist/components/p--CRAu9fJ.js.map +0 -1
- package/dist/components/p-BCOl1x0_.js +0 -2
- package/dist/components/p-BCOl1x0_.js.map +0 -1
- package/dist/components/p-BHVOiWz5.js +0 -2
- package/dist/components/p-BHVOiWz5.js.map +0 -1
- package/dist/components/p-BKp__CQX.js.map +0 -1
- package/dist/components/p-BMc0DE59.js.map +0 -1
- package/dist/components/p-BNiuAMeh.js.map +0 -1
- package/dist/components/p-BPG0r_mC.js +0 -2
- package/dist/components/p-BPG0r_mC.js.map +0 -1
- package/dist/components/p-BS0AbMNK.js.map +0 -1
- package/dist/components/p-BUDAwJVV.js.map +0 -1
- package/dist/components/p-BZVWmzKf.js +0 -2
- package/dist/components/p-BZVWmzKf.js.map +0 -1
- package/dist/components/p-Bbb9A3NV.js.map +0 -1
- package/dist/components/p-BhYS_Ump.js +0 -2
- package/dist/components/p-BhYS_Ump.js.map +0 -1
- package/dist/components/p-BknXYAEc.js.map +0 -1
- package/dist/components/p-BxGQ3cRJ.js +0 -2
- package/dist/components/p-BxGQ3cRJ.js.map +0 -1
- package/dist/components/p-BysVBVQv.js +0 -2
- package/dist/components/p-BysVBVQv.js.map +0 -1
- package/dist/components/p-C-Y7gYgz.js.map +0 -1
- package/dist/components/p-C6DNhlES.js.map +0 -1
- package/dist/components/p-C6R5Lft0.js.map +0 -1
- package/dist/components/p-C9gC4haA.js.map +0 -1
- package/dist/components/p-CAnnQL1F.js +0 -2
- package/dist/components/p-CAnnQL1F.js.map +0 -1
- package/dist/components/p-CJq3n5kA.js.map +0 -1
- package/dist/components/p-CY4YFAT3.js.map +0 -1
- package/dist/components/p-Cg0kimXZ.js +0 -2
- package/dist/components/p-Cg0kimXZ.js.map +0 -1
- package/dist/components/p-CsBICYmt.js.map +0 -1
- package/dist/components/p-CwjVgUqy.js +0 -2
- package/dist/components/p-Cxr0IQjC.js.map +0 -1
- package/dist/components/p-D3fMaUJ3.js.map +0 -1
- package/dist/components/p-D7R4yE2C.js +0 -2
- package/dist/components/p-D7R4yE2C.js.map +0 -1
- package/dist/components/p-DAvh38E4.js +0 -2
- package/dist/components/p-DAvh38E4.js.map +0 -1
- package/dist/components/p-DBue3ISk.js.map +0 -1
- package/dist/components/p-DDgeXGbB.js.map +0 -1
- package/dist/components/p-DFQ9mcbK.js.map +0 -1
- package/dist/components/p-DNpLDbWY.js.map +0 -1
- package/dist/components/p-DOUDRJbE.js +0 -2
- package/dist/components/p-DUdOmSFR.js +0 -2
- package/dist/components/p-DaAXY-XS.js.map +0 -1
- package/dist/components/p-DlYw4UGQ.js +0 -2
- package/dist/components/p-DlYw4UGQ.js.map +0 -1
- package/dist/components/p-DtndC9f1.js +0 -2
- package/dist/components/p-DtndC9f1.js.map +0 -1
- package/dist/components/p-JPTkZ3Ji.js +0 -2
- package/dist/components/p-ZpQBAwZC.js.map +0 -1
- package/dist/components/p-ag6Io-kL.js +0 -2
- package/dist/components/p-ag6Io-kL.js.map +0 -1
- package/dist/components/p-fg9EKoZp.js +0 -2
- package/dist/components/p-fg9EKoZp.js.map +0 -1
- package/dist/components/p-iMuFgSoM.js +0 -2
- package/dist/components/p-iMuFgSoM.js.map +0 -1
- package/dist/components/p-r8PMqlqm.js.map +0 -1
- /package/dist/components/{p-uI6z53BE.js.map → p-Bb4KnRy0.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["answerFor","answers","questionId","find","answer","createQuestionnaireDrafts","questions","Object","fromEntries","map","question","id","choiceValues","Set","choices","choice","value","type","values","Array","isArray","known","filter","has","other","otherSelected","Boolean","allowOther","otherText","skipped","isKnownChoice","normalizeQuestionAnswer","draft","trim","push","length","required","validateQuestionDraft","undefined","missing","formatQuestionAnswer","labels","Map","label","get","join","agentQuestionnaireCss","DEFAULT_LABELS","progress","previous","next","skip","cancel","otherPlaceholder","preparing","questionnaireId","AgentQuestionnaire","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","status","allowCancel","currentStep","drafts","validation","instanceId","otherValue","answerPending","resetScheduled","answersSnapshot","waitingForRequestAnswers","componentWillLoad","draftRequestId","requestId","resetDraft","handleQuestionnaireInputChange","scheduleDraftReset","handleStatusChange","setFocus","focusCurrentControl","copy","disabled","queueMicrotask","requestChanged","answersChanged","preferInvalid","focus","invalidControl","el","querySelector","control","action","target","requestAnimationFrame","setTimeout","updateDraft","update","_removed","rest","validate","message","move","step","Math","min","max","submit","invalidIndex","findIndex","validateWithoutFocus","dsAnswer","emit","progressLabel","split","String","selectSingle","renderSingleChoice","promptId","errorId","options","h","class","size","form","ariaLabelledby","onDsChange","event","detail","renderOtherInput","renderMultipleChoice","detachedForm","key","description","checked","includes","placeholder","onInput","renderQuestion","as","variant","textId","color","rows","role","name","renderAnswered","emphasis","render","Host","last","canSkip","skippable","questionnaire","side","icon","hasBorder","isInactive","onDsClick","dsCancel","errorMessage","width","isLoading"],"sources":["src/wc/components/AgentQuestionnaire/agent-questionnaire-model.ts","src/wc/components/AgentQuestionnaire/AgentQuestionnaire.css?tag=ds-agent-questionnaire&encapsulation=scoped","src/wc/components/AgentQuestionnaire/AgentQuestionnaire.tsx"],"sourcesContent":["import type {\n AgentQuestion,\n AgentQuestionAnswer,\n} from '../conversation-types';\n\nexport interface AgentQuestionDraft {\n value: string | string[];\n otherSelected: boolean;\n otherText: string;\n skipped: boolean;\n}\n\nexport type AgentQuestionDrafts = Record<string, AgentQuestionDraft>;\n\nfunction answerFor(\n answers: AgentQuestionAnswer[],\n questionId: string,\n): AgentQuestionAnswer | undefined {\n return answers.find(answer => answer.questionId === questionId);\n}\n\nexport function createQuestionnaireDrafts(\n questions: AgentQuestion[],\n answers: AgentQuestionAnswer[],\n): AgentQuestionDrafts {\n return Object.fromEntries(\n questions.map(question => {\n const answer = answerFor(answers, question.id);\n const choiceValues = new Set(question.choices?.map(choice => choice.value) ?? []);\n\n if (question.type === 'multiple') {\n const values = Array.isArray(answer?.value) ? answer.value : [];\n const known = values.filter(value => choiceValues.has(value));\n const other = values.find(value => !choiceValues.has(value)) ?? '';\n return [\n question.id,\n {\n value: known,\n otherSelected: Boolean(question.allowOther && other),\n otherText: question.allowOther ? other : '',\n skipped: answer?.value === null,\n },\n ];\n }\n\n const value = typeof answer?.value === 'string' ? answer.value : '';\n const isKnownChoice = question.type === 'single' && choiceValues.has(value);\n return [\n question.id,\n {\n value: question.type === 'single' && !isKnownChoice ? '' : value,\n otherSelected: Boolean(\n question.type === 'single' && question.allowOther && value && !isKnownChoice,\n ),\n otherText:\n question.type === 'single' && question.allowOther && value && !isKnownChoice\n ? value\n : '',\n skipped: answer?.value === null,\n },\n ];\n }),\n );\n}\n\nexport function normalizeQuestionAnswer(\n question: AgentQuestion,\n draft: AgentQuestionDraft,\n): AgentQuestionAnswer {\n if (draft.skipped) return { questionId: question.id, value: null };\n\n if (question.type === 'multiple') {\n const values = Array.isArray(draft.value) ? [...draft.value] : [];\n if (draft.otherSelected && draft.otherText.trim()) values.push(draft.otherText.trim());\n return {\n questionId: question.id,\n value: values.length || question.required ? values : null,\n };\n }\n\n if (draft.otherSelected) {\n const other = draft.otherText.trim();\n return { questionId: question.id, value: other || null };\n }\n\n const value = typeof draft.value === 'string' ? draft.value.trim() : '';\n return { questionId: question.id, value: value || null };\n}\n\nexport function validateQuestionDraft(\n question: AgentQuestion,\n draft: AgentQuestionDraft,\n): string | undefined {\n if (\n (question.type === 'single' || question.type === 'multiple') &&\n !question.choices?.length\n ) {\n return 'This question has no available choices.';\n }\n\n if (draft.otherSelected && !draft.otherText.trim()) {\n return 'Enter a response for Other.';\n }\n\n if (!question.required || draft.skipped) return undefined;\n const answer = normalizeQuestionAnswer(question, draft).value;\n const missing = answer === null || (Array.isArray(answer) && answer.length === 0);\n if (!missing) return undefined;\n return question.type === 'text'\n ? 'Enter an answer before continuing.'\n : 'Choose an answer before continuing.';\n}\n\nexport function formatQuestionAnswer(\n question: AgentQuestion,\n answer: AgentQuestionAnswer | undefined,\n): string {\n if (!answer || answer.value === null) return 'Skipped';\n const values = Array.isArray(answer.value) ? answer.value : [answer.value];\n const labels = new Map(question.choices?.map(choice => [choice.value, choice.label]) ?? []);\n return values.map(value => labels.get(value) ?? value).join(', ');\n}\n","@import '../../utils/forced-colors.css';\n@import '../../utils/visually-hidden.css';\n\n:host {\n display: block;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.questionnaire {\n display: grid;\n gap: var(--dimension-space-150);\n width: 100%;\n padding: var(--dimension-space-200);\n border-radius: var(--dimension-radius-125);\n background: var(--color-background-primary);\n box-shadow: var(--effect-elevation-elevated-md);\n box-sizing: border-box;\n}\n\n.questionnaire--answered {\n gap: var(--dimension-space-100);\n padding: var(--dimension-space-150);\n background: var(--color-background-secondary);\n box-shadow: none;\n}\n\n.questionnaire--preparing {\n align-items: center;\n grid-template-columns: auto minmax(0, 1fr);\n}\n\n.questionnaire__header,\n.questionnaire__actions,\n.questionnaire__actions-leading,\n.questionnaire__error,\n.questionnaire__submission-error {\n display: flex;\n align-items: center;\n}\n\n.questionnaire__header,\n.questionnaire__actions {\n justify-content: space-between;\n gap: var(--dimension-space-100);\n}\n\n.questionnaire__body,\n.questionnaire__prompt,\n.questionnaire__choices,\n.questionnaire__single-choice,\n.questionnaire__multiple-choice,\n.questionnaire__other-choice,\n.questionnaire__summary,\n.questionnaire__summary li {\n display: grid;\n}\n\n.questionnaire__body,\n.questionnaire__prompt,\n.questionnaire__choices,\n.questionnaire__single-choice,\n.questionnaire__multiple-choice,\n.questionnaire__other-choice {\n gap: var(--dimension-space-100);\n}\n\n.questionnaire__choices {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\n\nds-radio,\nds-checkbox {\n width: 100%;\n min-width: 0;\n}\n\n.questionnaire__other-input,\n.questionnaire__text-input {\n width: 100%;\n padding: var(--dimension-space-100);\n border: var(--dimension-stroke-width-012) solid var(--color-border-secondary);\n border-radius: var(--dimension-radius-050);\n outline: none;\n background: var(--color-background-primary);\n color: var(--color-foreground-primary);\n font-family: var(--typography-font-family-ui);\n font-size: var(--typography-fontsize-md);\n font-weight: var(--typography-weight-regular);\n line-height: var(--typography-lineheight-md);\n letter-spacing: var(--typography-letterspacing-negative-half);\n box-sizing: border-box;\n -webkit-user-select: text;\n user-select: text;\n}\n\n.questionnaire__other-input {\n width: calc(100% - var(--dimension-size-500));\n margin-inline-start: var(--dimension-size-500);\n}\n\n.questionnaire__text-input {\n min-height: calc(var(--typography-lineheight-md) * 4 + var(--dimension-space-200));\n resize: vertical;\n}\n\n.questionnaire__other-input:focus,\n.questionnaire__text-input:focus {\n border-color: var(--color-border-bold-brand);\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-018)\n var(--color-border-bold-brand);\n}\n\n.questionnaire__other-input[aria-invalid='true'],\n.questionnaire__text-input[aria-invalid='true'] {\n border-color: var(--color-border-bold-negative);\n}\n\n.questionnaire__error,\n.questionnaire__submission-error {\n gap: var(--dimension-space-050);\n color: var(--color-foreground-bold-negative);\n}\n\n.questionnaire__submission-error {\n padding: var(--dimension-space-075);\n border-radius: var(--dimension-radius-050);\n background: var(--color-background-faint-negative);\n}\n\n.questionnaire__actions-leading {\n flex-wrap: wrap;\n gap: var(--dimension-space-075);\n}\n\n.questionnaire__action-item {\n width: fit-content;\n max-width: 100%;\n}\n\n.questionnaire textarea:disabled {\n color: var(--color-foreground-tertiary);\n cursor: default;\n opacity: 1;\n}\n\n.questionnaire__summary {\n gap: var(--dimension-space-100);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.questionnaire__summary li {\n gap: var(--dimension-space-025);\n}\n\n@media (max-width: 480px) {\n .questionnaire {\n padding: var(--dimension-space-150);\n }\n\n .questionnaire__actions {\n align-items: stretch;\n flex-direction: column;\n }\n\n .questionnaire__actions-leading {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n width: 100%;\n }\n\n .questionnaire__action-item,\n .questionnaire__action-item--primary {\n width: 100%;\n }\n}\n\n@media (forced-colors: active) {\n .questionnaire {\n border: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n box-shadow: none;\n }\n\n .questionnaire__other-input[aria-invalid='true'],\n .questionnaire__text-input[aria-invalid='true'] {\n outline: var(--dimension-stroke-width-025) dashed var(--ds-forced-color-content);\n }\n\n .questionnaire__submission-error {\n border: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n background: var(--ds-forced-color-surface);\n }\n\n .questionnaire input:disabled,\n .questionnaire textarea:disabled {\n color: var(--ds-forced-color-disabled);\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type {\n AgentQuestion,\n AgentQuestionAnswer,\n AgentQuestionnaireAnswerEventDetail,\n AgentQuestionnaireCancelEventDetail,\n AgentQuestionnaireLabels,\n AgentQuestionnaireStatus,\n} from '../conversation-types';\nimport {\n createQuestionnaireDrafts,\n formatQuestionAnswer,\n normalizeQuestionAnswer,\n validateQuestionDraft,\n} from './agent-questionnaire-model';\nimport type {\n AgentQuestionDraft,\n AgentQuestionDrafts,\n} from './agent-questionnaire-model';\n\nconst DEFAULT_LABELS: AgentQuestionnaireLabels = {\n progress: 'Question {current} of {total}',\n previous: 'Previous',\n next: 'Next',\n answer: 'Answer',\n skip: 'Skip',\n cancel: 'Cancel',\n other: 'Other',\n otherPlaceholder: 'Enter another answer',\n preparing: 'Preparing questions…',\n};\n\nlet questionnaireId = 0;\n\n@Component({\n tag: 'ds-agent-questionnaire',\n styleUrl: 'AgentQuestionnaire.css',\n scoped: true,\n})\nexport class AgentQuestionnaire {\n @Element() el!: HTMLElement;\n\n @Prop() requestId!: string;\n @Prop() questions!: AgentQuestion[];\n @Prop() answers: AgentQuestionAnswer[] = [];\n @Prop() status: AgentQuestionnaireStatus = 'ready';\n @Prop() errorMessage?: string;\n @Prop() allowCancel: boolean = false;\n @Prop() labels?: Partial<AgentQuestionnaireLabels>;\n\n @Event() dsAnswer!: EventEmitter<AgentQuestionnaireAnswerEventDetail>;\n @Event() dsCancel!: EventEmitter<AgentQuestionnaireCancelEventDetail>;\n\n @State() private currentStep = 0;\n @State() private drafts: AgentQuestionDrafts = {};\n @State() private validation: Record<string, string> = {};\n\n private readonly instanceId = ++questionnaireId;\n private readonly otherValue = `__ds-agent-questionnaire-other-${this.instanceId}`;\n private answerPending = false;\n private resetScheduled = false;\n private draftRequestId?: string;\n private answersSnapshot: AgentQuestionAnswer[] = [];\n private waitingForRequestAnswers = false;\n\n componentWillLoad() {\n this.draftRequestId = this.requestId;\n this.answersSnapshot = this.answers;\n this.resetDraft();\n }\n\n @Watch('requestId')\n @Watch('questions')\n @Watch('answers')\n handleQuestionnaireInputChange() {\n this.scheduleDraftReset();\n }\n\n @Watch('status')\n handleStatusChange(status: AgentQuestionnaireStatus) {\n if (status !== 'submitting') this.answerPending = false;\n }\n\n @Method()\n async setFocus(): Promise<void> {\n this.focusCurrentControl();\n }\n\n private get copy(): AgentQuestionnaireLabels {\n return { ...DEFAULT_LABELS, ...this.labels };\n }\n\n private get disabled(): boolean {\n return this.status === 'submitting';\n }\n\n private resetDraft(answers = this.answers) {\n this.currentStep = 0;\n this.drafts = createQuestionnaireDrafts(this.questions ?? [], answers ?? []);\n this.validation = {};\n this.answerPending = false;\n }\n\n private scheduleDraftReset() {\n if (this.resetScheduled) return;\n this.resetScheduled = true;\n queueMicrotask(() => {\n this.resetScheduled = false;\n const requestChanged = this.requestId !== this.draftRequestId;\n const answersChanged = this.answers !== this.answersSnapshot;\n if (requestChanged && !answersChanged) {\n this.waitingForRequestAnswers = true;\n } else if (answersChanged) {\n this.waitingForRequestAnswers = false;\n }\n this.resetDraft(this.waitingForRequestAnswers ? [] : this.answers);\n this.draftRequestId = this.requestId;\n this.answersSnapshot = this.answers;\n });\n }\n\n private focusCurrentControl(preferInvalid = false) {\n const focus = () => {\n const invalidControl = preferInvalid\n ? this.el.querySelector<HTMLElement>(\n '[data-question-control][aria-invalid=\"true\"]:not([disabled])',\n )\n : null;\n const control = invalidControl ??\n this.el.querySelector<HTMLElement>(\n '[data-question-control]:not([disabled]):not([is-inactive])',\n );\n const action = this.el.querySelector<HTMLElement>(\n '[data-question-action]:not([is-inactive]):not([is-loading])',\n );\n const target = (control ?? action) as\n | (HTMLElement & { setFocus?: () => Promise<void> })\n | null;\n if (target?.setFocus) void target.setFocus();\n else target?.focus();\n };\n focus();\n requestAnimationFrame(focus);\n setTimeout(focus, 0);\n }\n\n private updateDraft(questionId: string, update: Partial<AgentQuestionDraft>) {\n const previous = this.drafts[questionId] ?? {\n value: '',\n otherSelected: false,\n otherText: '',\n skipped: false,\n };\n this.drafts = {\n ...this.drafts,\n [questionId]: { ...previous, ...update, skipped: false },\n };\n if (this.validation[questionId]) {\n const { [questionId]: _removed, ...rest } = this.validation;\n this.validation = rest;\n }\n }\n\n private validate(question: AgentQuestion): boolean {\n const message = validateQuestionDraft(question, this.drafts[question.id]);\n if (!message) return true;\n this.validation = { ...this.validation, [question.id]: message };\n this.focusCurrentControl(true);\n return false;\n }\n\n private move(step: number) {\n this.currentStep = Math.min(Math.max(step, 0), this.questions.length - 1);\n this.focusCurrentControl();\n }\n\n private next(question: AgentQuestion) {\n if (!this.validate(question)) return;\n this.move(this.currentStep + 1);\n }\n\n private skip(question: AgentQuestion) {\n if (question.required) return;\n this.drafts = {\n ...this.drafts,\n [question.id]: {\n ...(this.drafts[question.id] ?? {\n value: '',\n otherSelected: false,\n otherText: '',\n }),\n skipped: true,\n },\n };\n if (this.currentStep < this.questions.length - 1) this.move(this.currentStep + 1);\n else this.submit();\n }\n\n private submit() {\n if (this.disabled || this.answerPending) return;\n const invalidIndex = this.questions.findIndex(\n question => !this.validateWithoutFocus(question),\n );\n if (invalidIndex >= 0) {\n this.currentStep = invalidIndex;\n this.focusCurrentControl(true);\n return;\n }\n\n this.answerPending = true;\n this.dsAnswer.emit({\n requestId: this.requestId,\n answers: this.questions.map(question =>\n normalizeQuestionAnswer(question, this.drafts[question.id]),\n ),\n });\n }\n\n private validateWithoutFocus(question: AgentQuestion): boolean {\n const message = validateQuestionDraft(question, this.drafts[question.id]);\n if (!message) return true;\n this.validation = { ...this.validation, [question.id]: message };\n return false;\n }\n\n private progressLabel(): string {\n return this.copy.progress\n .split('{current}')\n .join(String(this.currentStep + 1))\n .split('{total}')\n .join(String(this.questions.length));\n }\n\n private selectSingle(question: AgentQuestion, value: string) {\n const otherSelected = value === this.otherValue;\n this.updateDraft(question.id, {\n value: otherSelected ? '' : value,\n otherSelected,\n });\n if (otherSelected) {\n requestAnimationFrame(() =>\n this.el.querySelector<HTMLInputElement>('[data-question-other-input]')?.focus(),\n );\n }\n }\n\n private renderSingleChoice(\n question: AgentQuestion,\n promptId: string,\n errorId: string,\n ) {\n const draft = this.drafts[question.id];\n const value = draft.otherSelected\n ? this.otherValue\n : typeof draft.value === 'string'\n ? draft.value\n : '';\n const options = [\n ...(question.choices ?? []),\n ...(question.allowOther\n ? [{ value: this.otherValue, label: this.copy.other }]\n : []),\n ];\n return (\n <div class=\"questionnaire__single-choice\">\n <ds-radio\n data-question-control\n size=\"lg\"\n options={options}\n value={value}\n disabled={this.disabled}\n form={`ds-agent-questionnaire-detached-${this.instanceId}`}\n ariaLabelledby={promptId}\n aria-describedby={this.validation[question.id] ? errorId : undefined}\n onDsChange={(event: CustomEvent<string>) =>\n this.selectSingle(question, event.detail)\n }\n />\n {draft.otherSelected ? this.renderOtherInput(question, errorId) : null}\n </div>\n );\n }\n\n private renderMultipleChoice(question: AgentQuestion, errorId: string) {\n const draft = this.drafts[question.id];\n const values = Array.isArray(draft.value) ? draft.value : [];\n const detachedForm = `ds-agent-questionnaire-detached-${this.instanceId}`;\n return (\n <div class=\"questionnaire__multiple-choice\">\n {question.choices?.map(choice => (\n <ds-checkbox\n key={choice.value}\n data-question-control\n size=\"lg\"\n label={choice.label}\n description={choice.description}\n value={choice.value}\n checked={values.includes(choice.value)}\n disabled={this.disabled}\n form={detachedForm}\n onDsChange={(event: CustomEvent<boolean>) => {\n this.updateDraft(question.id, {\n value: event.detail\n ? [...values, choice.value]\n : values.filter(value => value !== choice.value),\n });\n }}\n />\n ))}\n {question.allowOther ? (\n <div class=\"questionnaire__other-choice\">\n <ds-checkbox\n data-question-control\n size=\"lg\"\n label={this.copy.other}\n checked={draft.otherSelected}\n disabled={this.disabled}\n form={detachedForm}\n onDsChange={(event: CustomEvent<boolean>) => {\n this.updateDraft(question.id, { otherSelected: event.detail });\n if (event.detail) {\n requestAnimationFrame(() =>\n this.el\n .querySelector<HTMLInputElement>('[data-question-other-input]')\n ?.focus(),\n );\n }\n }}\n />\n {draft.otherSelected ? this.renderOtherInput(question, errorId) : null}\n </div>\n ) : null}\n </div>\n );\n }\n\n private renderOtherInput(question: AgentQuestion, errorId: string) {\n const draft = this.drafts[question.id];\n return (\n <input\n class=\"questionnaire__other-input\"\n data-question-control\n data-question-other-input\n type=\"text\"\n form={`ds-agent-questionnaire-detached-${this.instanceId}`}\n value={draft.otherText}\n placeholder={this.copy.otherPlaceholder}\n aria-label={this.copy.other}\n aria-invalid={this.validation[question.id] ? 'true' : undefined}\n aria-describedby={this.validation[question.id] ? errorId : undefined}\n disabled={this.disabled}\n onInput={(event: Event) =>\n this.updateDraft(question.id, {\n otherText: (event.target as HTMLInputElement).value,\n })\n }\n />\n );\n }\n\n private renderQuestion(question: AgentQuestion) {\n const draft = this.drafts[question.id];\n const errorId = `ds-agent-questionnaire-${this.instanceId}-${this.currentStep}-error`;\n const promptId = `ds-agent-questionnaire-${this.instanceId}-${this.currentStep}-prompt`;\n return (\n <div class=\"questionnaire__body\">\n <div class=\"questionnaire__prompt\">\n <ds-text as=\"h2\" variant=\"text-title-small\" textId={promptId}>\n {question.question}\n </ds-text>\n {question.description ? (\n <ds-text variant=\"text-body-small\" color=\"secondary\">\n {question.description}\n </ds-text>\n ) : null}\n </div>\n {question.type === 'text' ? (\n <textarea\n class=\"questionnaire__text-input\"\n data-question-control\n value={typeof draft.value === 'string' ? draft.value : ''}\n form={`ds-agent-questionnaire-detached-${this.instanceId}`}\n placeholder={question.placeholder}\n aria-label={question.question}\n aria-invalid={this.validation[question.id] ? 'true' : undefined}\n aria-describedby={this.validation[question.id] ? errorId : undefined}\n disabled={this.disabled}\n rows={4}\n onInput={(event: Event) =>\n this.updateDraft(question.id, {\n value: (event.target as HTMLTextAreaElement).value,\n })\n }\n />\n ) : (\n <fieldset\n class=\"questionnaire__choices\"\n aria-describedby={this.validation[question.id] ? errorId : undefined}\n >\n <legend class=\"ds-visually-hidden\">{question.question}</legend>\n {question.type === 'single'\n ? this.renderSingleChoice(question, promptId, errorId)\n : this.renderMultipleChoice(question, errorId)}\n </fieldset>\n )}\n {this.validation[question.id] ? (\n <div id={errorId} class=\"questionnaire__error\" role=\"alert\">\n <ds-icon name=\"ErrorTriangle\" size=\"xs\" color=\"inherit\" />\n <ds-text variant=\"text-body-small\" color=\"negative\">\n {this.validation[question.id]}\n </ds-text>\n </div>\n ) : null}\n </div>\n );\n }\n\n private renderAnswered() {\n return (\n <div class=\"questionnaire questionnaire--answered\">\n <ol class=\"questionnaire__summary\">\n {this.questions.map(question => (\n <li>\n <ds-text variant=\"text-body-small\" emphasis>{question.question}</ds-text>\n <ds-text variant=\"text-body-small\" color=\"secondary\">\n {formatQuestionAnswer(\n question,\n this.answers.find(answer => answer.questionId === question.id),\n )}\n </ds-text>\n </li>\n ))}\n </ol>\n </div>\n );\n }\n\n render() {\n if (this.status === 'preparing') {\n return (\n <Host>\n <div class=\"questionnaire questionnaire--preparing\" role=\"status\">\n <ds-loader size=\"sm\" />\n <ds-text variant=\"text-body-medium\">{this.copy.preparing}</ds-text>\n </div>\n </Host>\n );\n }\n if (!this.questions?.length) return null;\n if (this.status === 'answered') return <Host>{this.renderAnswered()}</Host>;\n\n const question = this.questions[this.currentStep];\n const last = this.currentStep === this.questions.length - 1;\n const canSkip = Boolean(question.skippable && !question.required);\n return (\n <Host>\n <section\n class={{\n questionnaire: true,\n 'questionnaire--submitting': this.disabled,\n 'questionnaire--error': this.status === 'error',\n }}\n aria-busy={this.disabled ? 'true' : undefined}\n aria-label={question.question}\n >\n <header class=\"questionnaire__header\">\n <ds-text variant=\"text-caption\" color=\"secondary\">{this.progressLabel()}</ds-text>\n {this.allowCancel ? (\n <ds-tooltip label={this.copy.cancel} side=\"top\" size=\"sm\">\n <ds-button-unfilled\n data-question-action\n variant=\"icon\"\n icon=\"Cross\"\n size=\"sm\"\n aria-label={this.copy.cancel}\n hasBorder={false}\n isInactive={this.disabled}\n onDsClick={() => this.dsCancel.emit({ requestId: this.requestId })}\n />\n </ds-tooltip>\n ) : null}\n </header>\n {this.renderQuestion(question)}\n {this.status === 'error' && this.errorMessage ? (\n <div class=\"questionnaire__submission-error\" role=\"alert\">\n <ds-icon name=\"ErrorTriangle\" size=\"xs\" color=\"inherit\" />\n <ds-text variant=\"text-body-small\" color=\"negative\">{this.errorMessage}</ds-text>\n </div>\n ) : null}\n <footer class=\"questionnaire__actions\">\n <div class=\"questionnaire__actions-leading\">\n {this.currentStep > 0 ? (\n <div class=\"questionnaire__action-item\">\n <ds-button-unfilled\n data-question-action\n label={this.copy.previous}\n size=\"sm\"\n width=\"fill\"\n isInactive={this.disabled}\n onDsClick={() => this.move(this.currentStep - 1)}\n />\n </div>\n ) : null}\n {canSkip ? (\n <div class=\"questionnaire__action-item\">\n <ds-button-unfilled\n data-question-action\n label={this.copy.skip}\n size=\"sm\"\n width=\"fill\"\n hasBorder={false}\n isInactive={this.disabled}\n onDsClick={() => this.skip(question)}\n />\n </div>\n ) : null}\n </div>\n <div class=\"questionnaire__action-item questionnaire__action-item--primary\">\n <ds-button-filled\n data-question-action\n label={last ? this.copy.answer : this.copy.next}\n size=\"sm\"\n width=\"fill\"\n isLoading={this.disabled}\n onDsClick={() => (last ? this.submit() : this.next(question))}\n />\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["checkboxCss","idCounter","Checkbox","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","labelId","descriptionId","checked","size","value","disabled","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","indeterminate","isInactive","presentation","initialChecked","initialIndeterminate","formDisabled","handleActivate","dsChange","emit","handleKeyDown","e","key","preventDefault","componentWillLoad","syncFormValue","inactive","setFormControlValue","internals","missing","setRequiredValidity","formDisabledCallback","formResetCallback","render","isMarked","invalid","h","Host","role","undefined","String","description","tabIndex","class","checkbox","Boolean","onClick","onKeyDown","box","viewBox","fill","focusable","d","as","variant","CONTROL_TEXT_VARIANT","textId","label","CONTROL_SUPPORTING_TEXT_VARIANT","color"],"sources":["src/wc/components/Checkbox/Checkbox.css?tag=ds-checkbox&encapsulation=scoped","src/wc/components/Checkbox/Checkbox.tsx"],"sourcesContent":["@import '../../utils/control-inactive.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n padding: 0 var(--ds-control-padding-inline);\n border-radius: var(--ds-control-radius);\n cursor: default;\n user-select: none;\n}\n\n:host(.checkbox--described) {\n height: auto;\n min-height: var(--ds-control-height);\n padding-block: var(--dimension-space-075);\n}\n\n:host(.checkbox--presentation) {\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n padding: 0;\n gap: 0;\n pointer-events: none;\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n:host(.checkbox--lg) {\n --_checkbox-box: var(--dimension-iconography-md);\n --_checkbox-stroke: var(--dimension-stroke-width-018);\n}\n\n:host(.checkbox--md) {\n --_checkbox-box: var(--dimension-iconography-sm);\n --_checkbox-stroke: var(--dimension-stroke-width-015);\n}\n\n:host(.checkbox--sm) {\n --_checkbox-box: var(--dimension-iconography-xs);\n --_checkbox-stroke: var(--dimension-stroke-width-012);\n}\n\n:host(.checkbox--xs) {\n --_checkbox-box: var(--dimension-size-100);\n --_checkbox-stroke: calc(var(--dimension-stroke-width-base) * 3 / 32);\n}\n\n.checkbox__placement {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n\n.box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--_checkbox-box);\n height: var(--_checkbox-box);\n border: 0;\n border-radius: var(--dimension-radius-025);\n box-shadow: inset 0 0 0 var(--_checkbox-stroke) var(--color-foreground-tertiary);\n transition:\n background-color var(--effect-motion-short-2),\n box-shadow var(--effect-motion-short-2);\n}\n\n.box--marked {\n color: var(--color-foreground-on-bold-background-primary);\n background-color: var(--color-background-bold-brand);\n box-shadow: none;\n}\n\n.checkbox__mark {\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n fill: currentColor;\n}\n\n.checkbox__copy {\n display: grid;\n flex: 1;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding: 0 var(--ds-control-label-inset);\n}\n\n@media (forced-colors: active) {\n .box {\n border: var(--_checkbox-stroke) solid var(--ds-forced-color-content);\n box-shadow: none;\n }\n\n .box--marked {\n color: var(--ds-forced-color-on-selected);\n background-color: var(--ds-forced-color-selected);\n border-color: var(--ds-forced-color-selected);\n }\n}\n","import { AttachInternals, Component, Prop, State, Event, EventEmitter, Watch, h, Host } from '@stencil/core';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n setFormControlValue,\n setRequiredValidity,\n} from '../../utils';\n\nexport type CheckboxSize = 'lg' | 'md' | 'sm' | 'xs';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-checkbox',\n styleUrl: 'Checkbox.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Checkbox {\n @AttachInternals() internals!: ElementInternals;\n private labelId = `ds-checkbox-label-${++idCounter}`;\n private descriptionId = `${this.labelId}-description`;\n\n /** Visible label and accessible name. Omitted only in presentation mode. */\n @Prop() label!: string;\n /** Optional supporting description associated with the checkbox. */\n @Prop() description?: string;\n /** Current checked state. */\n @Prop({ mutable: true }) checked: boolean = false;\n /** Visual and placement density. */\n @Prop() size: CheckboxSize = 'md';\n /** Native form field name. */\n @Prop({ reflect: true }) name: string | undefined;\n /** Submitted value when checked. */\n @Prop() value: string = 'on';\n /** Native disabled state. */\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Require the checkbox to be checked for form validity. */\n @Prop({ reflect: true }) required: boolean = false;\n /** Validation message used when a required checkbox is unchecked. */\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Mixed visual state. Activation clears it before toggling checked. */\n @Prop({ mutable: true }) indeterminate: boolean = false;\n /** Design-system inactive state. */\n @Prop() isInactive: boolean = false;\n /** Visual-only indicator for a composite control that owns selection semantics. */\n @Prop() presentation: boolean = false;\n\n /** Emitted after user activation with the new checked state. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private initialChecked = false;\n private initialIndeterminate = false;\n @State() private formDisabled = false;\n\n componentWillLoad() {\n this.initialChecked = this.checked;\n this.initialIndeterminate = this.indeterminate;\n this.syncFormValue();\n }\n\n @Watch('checked')\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('presentation')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled || this.presentation;\n setFormControlValue(this.internals, this.checked ? this.value : null, { inactive });\n const missing = this.required && !inactive && !this.checked;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.checked = this.initialChecked;\n this.indeterminate = this.initialIndeterminate;\n }\n\n private handleActivate = () => {\n if (this.isInactive || this.disabled || this.formDisabled || this.presentation) return;\n if (this.indeterminate) this.indeterminate = false;\n this.checked = !this.checked;\n this.dsChange.emit(this.checked);\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleActivate();\n }\n };\n\n render() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const isMarked = this.checked || this.indeterminate;\n const invalid = this.required && !inactive && !this.checked;\n\n return (\n <Host\n role={this.presentation ? undefined : 'checkbox'}\n aria-checked={this.presentation ? undefined : this.indeterminate ? 'mixed' : String(this.checked)}\n aria-disabled={!this.presentation && inactive ? 'true' : undefined}\n aria-required={!this.presentation && this.required ? 'true' : undefined}\n aria-invalid={!this.presentation && invalid ? 'true' : undefined}\n aria-labelledby={this.presentation ? undefined : this.labelId}\n aria-describedby={\n !this.presentation && this.description ? this.descriptionId : undefined\n }\n aria-hidden={this.presentation ? 'true' : undefined}\n tabIndex={this.presentation || inactive ? -1 : 0}\n class={{\n checkbox: true,\n 'checkbox--presentation': this.presentation,\n 'checkbox--described': Boolean(this.description),\n [`checkbox--${this.size}`]: true,\n [`ds-control--${this.size}`]: true,\n 'ds-control-inactive': inactive && !this.presentation,\n 'ds-focus-ring-inset': !this.presentation,\n 'ds-interaction-fill': !inactive && !this.presentation,\n }}\n onClick={this.presentation ? undefined : this.handleActivate}\n onKeyDown={this.presentation ? undefined : this.handleKeyDown}\n >\n <span class=\"checkbox__placement ds-interaction-fill__content\" aria-hidden=\"true\">\n <span class={{ box: true, 'box--marked': isMarked }}>\n {isMarked && (\n // eslint-disable-next-line local/prefer-ds-icon -- Checkbox owns this fixed state-mark geometry.\n <svg\n class=\"checkbox__mark\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path\n d={\n this.indeterminate\n ? 'M12 7.375V8.625H4V7.375H12Z'\n : 'M12.9756 4.65527L7.22559 11.4053C7.11258 11.5379 6.94946 11.6169 6.77539 11.624C6.60111 11.631 6.43095 11.5657 6.30762 11.4424L3.05762 8.19238L3.94238 7.30762L6.71289 10.0781L12.0244 3.84473L12.9756 4.65527Z'\n }\n />\n </svg>\n )}\n </span>\n </span>\n {!this.presentation && (\n <span class=\"checkbox__copy ds-interaction-fill__content\">\n <ds-text\n class=\"checkbox__label\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[this.size]}\n textId={this.labelId}\n >\n {this.label}\n </ds-text>\n {this.description ? (\n <ds-text\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"secondary\"\n textId={this.descriptionId}\n >\n {this.description}\n </ds-text>\n ) : null}\n </span>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,H as s,h as t,a as i,t as a}from"./index.js";import{r as n}from"./p-BMc0DE59.js";function l(e,s,t){if(e!=="auto")return e;if(s==="constrained")return"constrained";if(s==="compact"||!t)return"compact";return"expanded"}const h=()=>`.sc-ds-shell-page-h{--_shell-page-content-background:var(--color-background-primary);--_shell-page-header-background:var(--color-background-primary);--_shell-page-responsive-content-block-start-inset:var(--dimension-space-400);--_shell-page-content-block-start-inset:var( --ds-shell-page-content-block-start-inset, var(--_shell-page-responsive-content-block-start-inset) );--ds-shell-page-sticky-header-block-size:var(--dimension-size-600);--ds-shell-page-content-block-start-offset:calc( var(--ds-shell-page-sticky-header-block-size) + var(--_shell-page-content-block-start-inset) );display:block;position:relative;min-width:0;min-height:100%;box-sizing:border-box;background:var(--_shell-page-content-background)}.shell-page-host--surface-secondary.sc-ds-shell-page-h{--_shell-page-content-background:var(--color-background-secondary)}.shell-page-host--surface-secondary[responsive-mode='desktop'].sc-ds-shell-page-h,.shell-page-host--surface-secondary[responsive-mode='tablet'].sc-ds-shell-page-h{--_shell-page-header-background:var(--color-background-secondary)}[responsive-mode='tablet'].sc-ds-shell-page-h,[responsive-mode='mobile'].sc-ds-shell-page-h{--_shell-page-responsive-content-block-start-inset:var(--dimension-space-200)}[responsive-mode='mobile'].sc-ds-shell-page-h{--ds-shell-page-sticky-header-block-size:calc( var(--dimension-size-500) + var(--dimension-space-200) )}.shell-page-host--header-compact.sc-ds-shell-page-h,.shell-page-host--header-constrained.sc-ds-shell-page-h{--_shell-page-content-block-start-inset:var( --ds-shell-page-compact-content-block-start-inset, var(--_shell-page-responsive-content-block-start-inset) )}.shell-page-host--inset-none.sc-ds-shell-page-h,.shell-page-host--block-start-inset-none.sc-ds-shell-page-h{--_shell-page-content-block-start-inset:0px}.shell-page__scroll-sentinel.sc-ds-shell-page{position:absolute;inset-block-start:var(--ds-shell-page-header-travel, 0);inset-inline-start:0;width:var(--dimension-stroke-width-012);height:var(--dimension-stroke-width-012);pointer-events:none}.shell-page__sticky-header.sc-ds-shell-page{position:sticky;inset-block-start:var(--ds-shell-page-sticky-offset, 0);z-index:var(--dimension-z-index-raised);min-width:0;background:var(--_shell-page-header-background);overflow:visible;overflow-anchor:none}.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-workflow,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-workflow,.shell-page__mobile-header.sc-ds-shell-page-s>ds-mobile-header,.shell-page__mobile-header .sc-ds-shell-page-s>ds-mobile-header{display:block;min-width:0}.shell-page__desktop-header[hidden].sc-ds-shell-page,.shell-page__mobile-header[hidden].sc-ds-shell-page{display:none}.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__scroll-sentinel.sc-ds-shell-page,.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__flow-spacer.sc-ds-shell-page{display:none}.shell-page__flow-spacer.sc-ds-shell-page{height:var(--ds-shell-page-flow-spacer, 0);background:var(--_shell-page-content-background)}.shell-page__content.sc-ds-shell-page{min-width:0;box-sizing:border-box;background:var(--_shell-page-content-background)}.shell-page-host--inset-default.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-400);padding-block-start:var(--_shell-page-content-block-start-inset)}.shell-page-host--inset-default[responsive-mode='tablet'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page,.shell-page-host--inset-default[responsive-mode='mobile'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-200);padding-block-start:var(--_shell-page-content-block-start-inset)}.shell-page-host--inset-none.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:0}`;const r=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.headerPresentation="auto";this.contentInset="default";this.contentInsetBlockStart="default";this.scrollCompaction=true;this.contentSurface="primary";this.responsiveMode="desktop";this.pageTopVisible=true;this.sentinelEl=null;this.spacerEl=null;this.stickyHeaderEl=null;this.headerEl=null;this.expandedHeaderHeight=0;this.headerTravel=0;this.expandedGeometryFrozen=false;this.pageHeaderResizeObserver=null;this.headerResizeObserver=null;this.headerMutationObserver=null;this.headerRevealFrame=null;this.headerGeometryFrame=null;this.reconnectFrame=null;this.scrollRoot=null;this.hasLoaded=false;this.handleScroll=()=>{if(!this.sentinelEl||!this.scrollRoot)return;const e=this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top;this.syncHeaderDividerInset(e);const s=this.sentinelEl.getBoundingClientRect().top>=e;if(this.scrollCompaction&&!s&&this.pageTopVisible&&this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl);this.expandedGeometryFrozen=true}if(s&&this.expandedGeometryFrozen&&this.el.getBoundingClientRect().top>=e){this.expandedGeometryFrozen=false;if(this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl)}}this.pageTopVisible=s};this.handleHeaderSlotChange=e=>{if(this.responsiveMode==="mobile")return;const s=e.target;const t=s.assignedElements().find((e=>e.tagName.toLowerCase()==="ds-bar-title"));this.observeHeader(t??null)}}handleHeaderContractChange(){this.syncHeaderVariant(true)}handleResponsiveModeChange(){this.el.style.removeProperty("--ds-shell-page-sticky-header-block-size");this.observeHeader(this.responsiveMode==="mobile"?null:this.findHeader())}componentDidLoad(){this.hasLoaded=true;this.connectRuntime()}componentDidRender(){this.syncHeaderVariant()}connectedCallback(){if(!this.hasLoaded)return;if(this.reconnectFrame!==null)cancelAnimationFrame(this.reconnectFrame);this.reconnectFrame=requestAnimationFrame((()=>{this.reconnectFrame=null;if(this.el.isConnected)this.connectRuntime()}))}disconnectedCallback(){if(this.reconnectFrame!==null)cancelAnimationFrame(this.reconnectFrame);this.reconnectFrame=null;this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.pageHeaderResizeObserver?.disconnect();this.pageHeaderResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=null}connectRuntime(){this.observePageHeaderGeometry();this.observeHeader(this.responsiveMode==="mobile"?null:this.findHeader());this.connectScrollRoot()}get effectiveVariant(){return l(this.headerPresentation,this.headerCapacity??"roomy",this.scrollCompaction?this.pageTopVisible:true)}get headerContractResolved(){return this.headerPresentation!=="auto"||this.headerCapacity!==undefined}get isScrollCompacted(){return this.scrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy"&&!this.pageTopVisible}get contentInsetStyles(){const e={};const s=this.contentInsetBlockStartSize?.trim();const t=this.compactContentInsetBlockStartSize?.trim();if(s)e["--ds-shell-page-content-block-start-inset"]=s;if(t)e["--ds-shell-page-compact-content-block-start-inset"]=t;return e}composedParent(e){return e.assignedSlot?.parentElement??e.parentElement}findScrollRoot(){let e=this.composedParent(this.el);while(e&&e!==document.documentElement){const s=getComputedStyle(e).overflowY;if(s==="auto"||s==="scroll"||s==="overlay"){return e}e=this.composedParent(e)}return window}connectScrollRoot(){const e=this.findScrollRoot();if(e===this.scrollRoot)return;this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=e;this.scrollRoot.addEventListener("scroll",this.handleScroll,{passive:true});this.handleScroll()}get scrollRootResolved(){const e=this.el.closest("ds-shell-app");if(!e)return true;const s=e.querySelector(".shell-app__content");return s!==null&&this.scrollRoot===s}findHeader(){return this.el.querySelector("ds-bar-title")}get compactHeaderHeight(){return n("--dimension-size-600",0)}syncHeaderDividerInset(e){const s=this.headerEl;if(!s)return;const t=this.scrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy";const i=n("--dimension-space-400",0);if(!t||!this.sentinelEl||!this.scrollRoot||this.headerTravel<=0||i<=0){s.style.removeProperty("--ds-bar-title-divider-inset");return}const a=e??(this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top);const l=this.sentinelEl.getBoundingClientRect().top-a;const h=Math.min(1,Math.max(0,1-l/this.headerTravel));s.style.setProperty("--ds-bar-title-divider-inset",`${i*(1-h)}px`)}setHeaderTravel(e){const s=Math.max(0,e);if(Math.abs(s-this.headerTravel)<.5)return;this.headerTravel=s;this.el.style.setProperty("--ds-shell-page-header-travel",`${s}px`);this.handleScroll()}measureHeaderTravel(e){const s=e.querySelector("[data-shell-page-header-anchor]");const t=this.compactHeaderHeight;if(!s||t<=0)return;const i=e.getBoundingClientRect();const a=s.getBoundingClientRect();if(i.height<=0||a.height<=0)return;const n=a.top-i.top;const l=Math.max(0,(t-a.height)/2);this.setHeaderTravel(n-l)}captureExpandedHeaderGeometry(e){this.expandedHeaderHeight=Math.max(this.expandedHeaderHeight,e.getBoundingClientRect().height);this.measureHeaderTravel(e)}setSpacerHeight(e){if(!this.spacerEl)return;this.spacerEl.style.setProperty("--ds-shell-page-flow-spacer",`${Math.max(0,e)}px`)}variantClass(e){return`bar-title-host--${e}`}setStickyHeaderOffset(e){this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset",e==="expanded"&&this.scrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy"?`${-this.headerTravel}px`:"0px")}syncPageHeaderBlockSize(){const e=this.stickyHeaderEl?.getBoundingClientRect().height??0;if(e>0){this.el.style.setProperty("--ds-shell-page-sticky-header-block-size",`${e}px`)}}observePageHeaderGeometry(){this.pageHeaderResizeObserver?.disconnect();this.pageHeaderResizeObserver=null;this.syncPageHeaderBlockSize();if(!this.stickyHeaderEl||typeof ResizeObserver==="undefined")return;this.pageHeaderResizeObserver=new ResizeObserver((()=>{this.syncPageHeaderBlockSize()}));this.pageHeaderResizeObserver.observe(this.stickyHeaderEl)}syncRenderedHeaderGeometry(e){const s=this.effectiveVariant;if(!e.classList.contains(this.variantClass(s)))return;this.syncPageHeaderBlockSize();this.setSpacerHeight(this.isScrollCompacted?this.expandedHeaderHeight-this.compactHeaderHeight:0);this.setStickyHeaderOffset(s);if(s==="expanded"&&!this.expandedGeometryFrozen){this.captureExpandedHeaderGeometry(e);this.setStickyHeaderOffset(s)}}cancelHeaderGeometrySync(){if(this.headerGeometryFrame!==null)cancelAnimationFrame(this.headerGeometryFrame);this.headerGeometryFrame=null}scheduleHeaderGeometrySync(s){this.cancelHeaderGeometrySync();let t=e.MAX_HEADER_GEOMETRY_FRAMES;let i=0;const a=()=>{if(this.headerEl!==s)return;t-=1;i+=1;this.connectScrollRoot();this.syncRenderedHeaderGeometry(s);const e=this.effectiveVariant!=="expanded"||this.expandedHeaderHeight>0&&this.headerTravel>0;if(e&&this.scrollRootResolved&&i>=2||t<=0){this.headerGeometryFrame=null;return}this.headerGeometryFrame=requestAnimationFrame(a)};this.headerGeometryFrame=requestAnimationFrame(a)}cancelHeaderReveal(){if(this.headerRevealFrame!==null)cancelAnimationFrame(this.headerRevealFrame);this.headerRevealFrame=null;this.headerEl?.removeAttribute("data-shell-page-syncing")}revealHeaderWhenSynced(s,t){let i=e.MAX_HEADER_REVEAL_FRAMES;const a=()=>{if(this.headerEl!==s){s.removeAttribute("data-shell-page-syncing");return}i-=1;if(s.classList.contains(this.variantClass(t))){s.removeAttribute("data-shell-page-syncing");this.headerRevealFrame=null;return}if(i<=0){this.headerRevealFrame=null;return}this.headerRevealFrame=requestAnimationFrame(a)};this.headerRevealFrame=requestAnimationFrame(a)}syncHeaderVariant(e=false){const s=this.headerEl;if(!s)return;this.syncHeaderDividerInset();if(!this.headerContractResolved){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","");return}const t=this.effectiveVariant;const i=!s.classList.contains(this.variantClass(t));if(!i)this.syncRenderedHeaderGeometry(s);if(i&&this.isScrollCompacted){this.setSpacerHeight(this.expandedHeaderHeight-this.compactHeaderHeight);this.setStickyHeaderOffset(t)}if(e){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","")}if(s.variant!==t){s.variant=t;this.scheduleHeaderGeometrySync(s)}if(e){this.revealHeaderWhenSynced(s,t)}}observeHeader(e){this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.headerEl=e;this.expandedHeaderHeight=0;this.expandedGeometryFrozen=false;this.setHeaderTravel(0);this.setSpacerHeight(0);this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset","0px");if(!e)return;if(e.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(e)}if(typeof ResizeObserver!=="undefined"){this.headerResizeObserver=new ResizeObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerResizeObserver.observe(e)}if(typeof MutationObserver!=="undefined"){this.headerMutationObserver=new MutationObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerMutationObserver.observe(e,{attributes:true,attributeFilter:["class"],childList:true,subtree:true})}this.syncHeaderVariant(true);this.scheduleHeaderGeometrySync(e)}render(){const e=this.responsiveMode==="mobile";return t(i,{key:"e9c50aedf7efa7dfa600e64d76af107c51abcf67",role:"main",style:this.contentInsetStyles,class:{"shell-page-host--inset-default":this.contentInset==="default","shell-page-host--inset-none":this.contentInset==="none","shell-page-host--block-start-inset-none":this.contentInsetBlockStart==="none","shell-page-host--surface-primary":this.contentSurface==="primary","shell-page-host--surface-secondary":this.contentSurface==="secondary","shell-page-host--mobile":e,[`shell-page-host--header-${this.effectiveVariant}`]:true}},t("div",{key:"d25fc4ee9d1fdeb3ccbb0b39ccab657ba5cb402d",ref:e=>{this.sentinelEl=e??null},class:"shell-page__scroll-sentinel","aria-hidden":"true"}),t("div",{key:"778eb49da839a6b4ed8781cdb311be87878f41fe",ref:e=>{this.stickyHeaderEl=e??null},class:"shell-page__sticky-header"},t("div",{key:"a1de46d4652541719f0d69200100a9f1777baf32",class:"shell-page__desktop-header",hidden:e,"aria-hidden":e?"true":undefined,inert:e?true:undefined},t("slot",{key:"02b8898564756c486f62130d59df55e7b9da65e0",name:"header",onSlotchange:this.handleHeaderSlotChange})),t("div",{key:"da418e753ce19602158750d936cdc821719acf54",class:"shell-page__mobile-header",hidden:!e,"aria-hidden":!e?"true":undefined,inert:!e?true:undefined},t("slot",{key:"fdedacef9319d0fc0ea39eca975291a42d0ab3ea",name:"mobile-header"}))),t("div",{key:"6ebb97adce4a0d09b84b9e8e995c16494b4c70ef",ref:e=>{this.spacerEl=e??null},class:"shell-page__flow-spacer","aria-hidden":"true"}),t("div",{key:"f6579688691f16f1cb226835a3d8c9fd12b025d5",class:"shell-page__content"},t("slot",{key:"e446cde5684624f7d25dbe267e5f81eaca91c4fe"})))}get el(){return this}static get watchers(){return{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],scrollCompaction:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}]}}static get style(){return h()}},[262,"ds-shell-page",{headerPresentation:[1,"header-presentation"],headerCapacity:[1,"header-capacity"],contentInset:[1,"content-inset"],contentInsetBlockStart:[1,"content-inset-block-start"],contentInsetBlockStartSize:[1,"content-inset-block-start-size"],compactContentInsetBlockStartSize:[1,"compact-content-inset-block-start-size"],scrollCompaction:[4,"scroll-compaction"],contentSurface:[1,"content-surface"],responsiveMode:[513,"responsive-mode"],pageTopVisible:[32]},undefined,{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],scrollCompaction:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}]}]);r.MAX_HEADER_REVEAL_FRAMES=12;r.MAX_HEADER_GEOMETRY_FRAMES=12;function o(){if(typeof customElements==="undefined"){return}const e=["ds-shell-page"];e.forEach((e=>{switch(e){case"ds-shell-page":if(!customElements.get(a(e))){customElements.define(a(e),r)}break}}))}o();export{r as S,o as d};
|
|
2
|
-
//# sourceMappingURL=p-BxGQ3cRJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["resolveShellPageHeaderVariant","presentation","capacity","pageTopVisible","shellPageCss","ShellPage","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","headerPresentation","contentInset","contentInsetBlockStart","scrollCompaction","contentSurface","responsiveMode","sentinelEl","spacerEl","stickyHeaderEl","headerEl","expandedHeaderHeight","headerTravel","expandedGeometryFrozen","pageHeaderResizeObserver","headerResizeObserver","headerMutationObserver","headerRevealFrame","headerGeometryFrame","reconnectFrame","scrollRoot","hasLoaded","handleScroll","rootTop","window","getBoundingClientRect","top","syncHeaderDividerInset","nextPageTopVisible","classList","contains","variantClass","captureExpandedHeaderGeometry","el","handleHeaderSlotChange","event","slot","target","header","assignedElements","find","element","tagName","toLowerCase","observeHeader","handleHeaderContractChange","syncHeaderVariant","handleResponsiveModeChange","style","removeProperty","findHeader","componentDidLoad","connectRuntime","componentDidRender","connectedCallback","cancelAnimationFrame","requestAnimationFrame","isConnected","disconnectedCallback","disconnect","cancelHeaderReveal","cancelHeaderGeometrySync","removeEventListener","observePageHeaderGeometry","connectScrollRoot","effectiveVariant","headerCapacity","headerContractResolved","undefined","isScrollCompacted","contentInsetStyles","styles","expanded","contentInsetBlockStartSize","trim","compact","compactContentInsetBlockStartSize","composedParent","assignedSlot","parentElement","findScrollRoot","ancestor","document","documentElement","overflow","getComputedStyle","overflowY","next","addEventListener","passive","scrollRootResolved","shell","closest","expected","querySelector","compactHeaderHeight","resolveCssLengthPx","ownsScrollTransition","expandedInset","scrollRootTop","remainingTravel","progress","Math","min","max","setProperty","setHeaderTravel","distance","abs","measureHeaderTravel","anchor","compactHeight","headerRect","anchorRect","height","expandedAnchorTop","compactAnchorTop","setSpacerHeight","variant","setStickyHeaderOffset","renderedVariant","syncPageHeaderBlockSize","renderedHeight","ResizeObserver","observe","syncRenderedHeaderGeometry","scheduleHeaderGeometrySync","framesRemaining","MAX_HEADER_GEOMETRY_FRAMES","framesElapsed","sync","geometryReady","removeAttribute","revealHeaderWhenSynced","MAX_HEADER_REVEAL_FRAMES","reveal","concealUntilSynced","setAttribute","renderedVariantIsStale","MutationObserver","attributes","attributeFilter","childList","subtree","render","mobile","h","Host","key","role","class","ref","hidden","inert","name","onSlotchange"],"sources":["src/wc/components/ShellPage/shell-page-responsive.ts","src/wc/components/ShellPage/ShellPage.css?tag=ds-shell-page&encapsulation=scoped","src/wc/components/ShellPage/ShellPage.tsx"],"sourcesContent":["import type { ShellPageCapacity, ShellPageHeaderPresentation } from './shell-page-types';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\n\nexport function resolveShellPageHeaderVariant(\n presentation: ShellPageHeaderPresentation,\n capacity: ShellPageCapacity,\n pageTopVisible: boolean\n): BarTitleVariant {\n if (presentation !== 'auto') return presentation;\n if (capacity === 'constrained') return 'constrained';\n if (capacity === 'compact' || !pageTopVisible) return 'compact';\n return 'expanded';\n}\n",":host {\n --_shell-page-content-background: var(--color-background-primary);\n --_shell-page-header-background: var(--color-background-primary);\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-400);\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n --ds-shell-page-sticky-header-block-size: var(--dimension-size-600);\n --ds-shell-page-content-block-start-offset: calc(\n var(--ds-shell-page-sticky-header-block-size) +\n var(--_shell-page-content-block-start-inset)\n );\n display: block;\n position: relative;\n min-width: 0;\n min-height: 100%;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--surface-secondary) {\n --_shell-page-content-background: var(--color-background-secondary);\n}\n\n:host(.shell-page-host--surface-secondary[responsive-mode='desktop']),\n:host(.shell-page-host--surface-secondary[responsive-mode='tablet']) {\n --_shell-page-header-background: var(--color-background-secondary);\n}\n\n:host([responsive-mode='tablet']),\n:host([responsive-mode='mobile']) {\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-200);\n}\n\n:host([responsive-mode='mobile']) {\n --ds-shell-page-sticky-header-block-size: calc(\n var(--dimension-size-500) + var(--dimension-space-200)\n );\n}\n\n:host(.shell-page-host--header-compact),\n:host(.shell-page-host--header-constrained) {\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-compact-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n}\n\n:host(.shell-page-host--inset-none),\n:host(.shell-page-host--block-start-inset-none) {\n --_shell-page-content-block-start-inset: 0px;\n}\n\n.shell-page__scroll-sentinel {\n position: absolute;\n inset-block-start: var(--ds-shell-page-header-travel, 0);\n inset-inline-start: 0;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n pointer-events: none;\n}\n\n.shell-page__sticky-header {\n position: sticky;\n inset-block-start: var(--ds-shell-page-sticky-offset, 0);\n z-index: var(--dimension-z-index-raised);\n min-width: 0;\n background: var(--_shell-page-header-background);\n overflow: visible;\n overflow-anchor: none;\n}\n\n.shell-page__desktop-header ::slotted(ds-bar-title),\n.shell-page__desktop-header ::slotted(ds-bar-workflow),\n.shell-page__mobile-header ::slotted(ds-mobile-header) {\n display: block;\n min-width: 0;\n}\n\n.shell-page__desktop-header[hidden],\n.shell-page__mobile-header[hidden] {\n display: none;\n}\n\n:host(.shell-page-host--mobile) .shell-page__scroll-sentinel,\n:host(.shell-page-host--mobile) .shell-page__flow-spacer {\n display: none;\n}\n\n.shell-page__flow-spacer {\n height: var(--ds-shell-page-flow-spacer, 0);\n background: var(--_shell-page-content-background);\n}\n\n.shell-page__content {\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--inset-default) .shell-page__content {\n padding: var(--dimension-space-400);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-default[responsive-mode='tablet']) .shell-page__content,\n:host(.shell-page-host--inset-default[responsive-mode='mobile']) .shell-page__content {\n padding: var(--dimension-space-200);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-none) .shell-page__content {\n padding: 0;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport type { ShellResponsiveMode } from '../../shell/shell-responsive';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\nimport { resolveShellPageHeaderVariant } from './shell-page-responsive';\nimport type {\n ShellPageCapacity,\n ShellPageContentInset,\n ShellPageContentSurface,\n ShellPageHeaderPresentation,\n} from './shell-page-types';\n\ntype BarTitleElement = HTMLElement & { variant: BarTitleVariant };\n\n@Component({\n tag: 'ds-shell-page',\n styleUrl: 'ShellPage.css',\n scoped: true,\n})\nexport class ShellPage {\n private static readonly MAX_HEADER_REVEAL_FRAMES = 12;\n private static readonly MAX_HEADER_GEOMETRY_FRAMES = 12;\n\n @Element() el!: HTMLElement;\n\n /** Automatic capacity/scroll behavior, or an explicit header variant override. */\n @Prop() headerPresentation: ShellPageHeaderPresentation = 'auto';\n\n /** Available page-header capacity supplied by the owning application shell. */\n @Prop() headerCapacity?: ShellPageCapacity;\n\n /** Standard page gutters, or no inset for full-bleed page content. */\n @Prop() contentInset: ShellPageContentInset = 'default';\n\n /** Preserve the responsive side/end gutters while allowing content to meet the header. */\n @Prop() contentInsetBlockStart: ShellPageContentInset = 'default';\n\n /** Exact block-start content inset, overriding the responsive default when provided. */\n @Prop() contentInsetBlockStartSize?: string;\n\n /** Exact block-start content inset while the header is compact or constrained. */\n @Prop() compactContentInsetBlockStartSize?: string;\n\n /** Allow roomy automatic headers to compact as the page scrolls. */\n @Prop() scrollCompaction: boolean = true;\n\n /** Canvas surface painted around and beneath routed page content. */\n @Prop() contentSurface: ShellPageContentSurface = 'primary';\n\n /** Explicit shell breakpoint presentation. Mobile uses the dedicated mobile-header slot. */\n @Prop({ attribute: 'responsive-mode', reflect: true })\n responsiveMode: ShellResponsiveMode = 'desktop';\n\n @State() private pageTopVisible = true;\n\n private sentinelEl: HTMLElement | null = null;\n private spacerEl: HTMLElement | null = null;\n private stickyHeaderEl: HTMLElement | null = null;\n private headerEl: BarTitleElement | null = null;\n private expandedHeaderHeight = 0;\n private headerTravel = 0;\n private expandedGeometryFrozen = false;\n private pageHeaderResizeObserver: ResizeObserver | null = null;\n private headerResizeObserver: ResizeObserver | null = null;\n private headerMutationObserver: MutationObserver | null = null;\n private headerRevealFrame: number | null = null;\n private headerGeometryFrame: number | null = null;\n private reconnectFrame: number | null = null;\n private scrollRoot: HTMLElement | Window | null = null;\n private hasLoaded = false;\n\n @Watch('headerCapacity')\n @Watch('headerPresentation')\n @Watch('scrollCompaction')\n handleHeaderContractChange() {\n this.syncHeaderVariant(true);\n }\n\n @Watch('responsiveMode')\n handleResponsiveModeChange() {\n this.el.style.removeProperty('--ds-shell-page-sticky-header-block-size');\n this.observeHeader(this.responsiveMode === 'mobile' ? null : this.findHeader());\n }\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.connectRuntime();\n }\n\n componentDidRender() {\n this.syncHeaderVariant();\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = requestAnimationFrame(() => {\n this.reconnectFrame = null;\n if (this.el.isConnected) this.connectRuntime();\n });\n }\n\n disconnectedCallback() {\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = null;\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.pageHeaderResizeObserver?.disconnect();\n this.pageHeaderResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = null;\n }\n\n private connectRuntime() {\n this.observePageHeaderGeometry();\n this.observeHeader(this.responsiveMode === 'mobile' ? null : this.findHeader());\n this.connectScrollRoot();\n }\n\n private get effectiveVariant(): BarTitleVariant {\n return resolveShellPageHeaderVariant(\n this.headerPresentation,\n this.headerCapacity ?? 'roomy',\n this.scrollCompaction ? this.pageTopVisible : true\n );\n }\n\n private get headerContractResolved(): boolean {\n return this.headerPresentation !== 'auto' || this.headerCapacity !== undefined;\n }\n\n private get isScrollCompacted(): boolean {\n return (\n this.scrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy' &&\n !this.pageTopVisible\n );\n }\n\n private get contentInsetStyles(): { [name: string]: string } {\n const styles: { [name: string]: string } = {};\n const expanded = this.contentInsetBlockStartSize?.trim();\n const compact = this.compactContentInsetBlockStartSize?.trim();\n if (expanded) styles['--ds-shell-page-content-block-start-inset'] = expanded;\n if (compact) styles['--ds-shell-page-compact-content-block-start-inset'] = compact;\n return styles;\n }\n\n private composedParent(element: Element): Element | null {\n return (element as HTMLElement).assignedSlot?.parentElement ?? element.parentElement;\n }\n\n private findScrollRoot(): HTMLElement | Window {\n let ancestor = this.composedParent(this.el);\n while (ancestor && ancestor !== document.documentElement) {\n const overflow = getComputedStyle(ancestor).overflowY;\n if (overflow === 'auto' || overflow === 'scroll' || overflow === 'overlay') {\n return ancestor as HTMLElement;\n }\n ancestor = this.composedParent(ancestor);\n }\n return window;\n }\n\n private connectScrollRoot() {\n const next = this.findScrollRoot();\n if (next === this.scrollRoot) return;\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = next;\n this.scrollRoot.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll();\n }\n\n private get scrollRootResolved(): boolean {\n const shell = this.el.closest('ds-shell-app');\n if (!shell) return true;\n const expected = shell.querySelector<HTMLElement>('.shell-app__content');\n return expected !== null && this.scrollRoot === expected;\n }\n\n private handleScroll = () => {\n if (!this.sentinelEl || !this.scrollRoot) return;\n const rootTop =\n this.scrollRoot === window ? 0 : (this.scrollRoot as HTMLElement).getBoundingClientRect().top;\n this.syncHeaderDividerInset(rootTop);\n const nextPageTopVisible = this.sentinelEl.getBoundingClientRect().top >= rootTop;\n if (\n this.scrollCompaction &&\n !nextPageTopVisible &&\n this.pageTopVisible &&\n this.headerEl?.classList.contains(this.variantClass('expanded'))\n ) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n this.expandedGeometryFrozen = true;\n }\n if (\n nextPageTopVisible &&\n this.expandedGeometryFrozen &&\n this.el.getBoundingClientRect().top >= rootTop\n ) {\n this.expandedGeometryFrozen = false;\n if (this.headerEl?.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n }\n }\n this.pageTopVisible = nextPageTopVisible;\n };\n\n private findHeader(): BarTitleElement | null {\n return this.el.querySelector<BarTitleElement>('ds-bar-title');\n }\n\n private get compactHeaderHeight(): number {\n return resolveCssLengthPx('--dimension-size-600', 0);\n }\n\n private syncHeaderDividerInset(rootTop?: number) {\n const header = this.headerEl;\n if (!header) return;\n\n const ownsScrollTransition =\n this.scrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy';\n const expandedInset = resolveCssLengthPx('--dimension-space-400', 0);\n if (\n !ownsScrollTransition ||\n !this.sentinelEl ||\n !this.scrollRoot ||\n this.headerTravel <= 0 ||\n expandedInset <= 0\n ) {\n header.style.removeProperty('--ds-bar-title-divider-inset');\n return;\n }\n\n const scrollRootTop =\n rootTop ??\n (this.scrollRoot === window\n ? 0\n : (this.scrollRoot as HTMLElement).getBoundingClientRect().top);\n const remainingTravel = this.sentinelEl.getBoundingClientRect().top - scrollRootTop;\n const progress = Math.min(1, Math.max(0, 1 - remainingTravel / this.headerTravel));\n header.style.setProperty('--ds-bar-title-divider-inset', `${expandedInset * (1 - progress)}px`);\n }\n\n private setHeaderTravel(distance: number) {\n const next = Math.max(0, distance);\n if (Math.abs(next - this.headerTravel) < 0.5) return;\n this.headerTravel = next;\n this.el.style.setProperty('--ds-shell-page-header-travel', `${next}px`);\n this.handleScroll();\n }\n\n private measureHeaderTravel(header: BarTitleElement) {\n const anchor = header.querySelector<HTMLElement>('[data-shell-page-header-anchor]');\n const compactHeight = this.compactHeaderHeight;\n if (!anchor || compactHeight <= 0) return;\n\n const headerRect = header.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n if (headerRect.height <= 0 || anchorRect.height <= 0) return;\n\n const expandedAnchorTop = anchorRect.top - headerRect.top;\n const compactAnchorTop = Math.max(0, (compactHeight - anchorRect.height) / 2);\n this.setHeaderTravel(expandedAnchorTop - compactAnchorTop);\n }\n\n private captureExpandedHeaderGeometry(header: BarTitleElement) {\n // Keep the largest observed expanded geometry for this header instance.\n // During a variant handoff Chromium can briefly report the compact box\n // before the child host class mutation is delivered; that transient must\n // not erase the flow reservation captured at the roomy page top.\n this.expandedHeaderHeight = Math.max(\n this.expandedHeaderHeight,\n header.getBoundingClientRect().height\n );\n this.measureHeaderTravel(header);\n }\n\n private setSpacerHeight(height: number) {\n if (!this.spacerEl) return;\n this.spacerEl.style.setProperty('--ds-shell-page-flow-spacer', `${Math.max(0, height)}px`);\n }\n\n private variantClass(variant: BarTitleVariant): string {\n return `bar-title-host--${variant}`;\n }\n\n private setStickyHeaderOffset(renderedVariant: BarTitleVariant) {\n this.stickyHeaderEl?.style.setProperty(\n '--ds-shell-page-sticky-offset',\n renderedVariant === 'expanded' &&\n this.scrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy'\n ? `${-this.headerTravel}px`\n : '0px'\n );\n }\n\n private syncPageHeaderBlockSize() {\n const renderedHeight = this.stickyHeaderEl?.getBoundingClientRect().height ?? 0;\n if (renderedHeight > 0) {\n this.el.style.setProperty('--ds-shell-page-sticky-header-block-size', `${renderedHeight}px`);\n }\n }\n\n private observePageHeaderGeometry() {\n this.pageHeaderResizeObserver?.disconnect();\n this.pageHeaderResizeObserver = null;\n this.syncPageHeaderBlockSize();\n\n if (!this.stickyHeaderEl || typeof ResizeObserver === 'undefined') return;\n this.pageHeaderResizeObserver = new ResizeObserver(() => {\n this.syncPageHeaderBlockSize();\n });\n this.pageHeaderResizeObserver.observe(this.stickyHeaderEl);\n }\n\n private syncRenderedHeaderGeometry(header: BarTitleElement) {\n const renderedVariant = this.effectiveVariant;\n if (!header.classList.contains(this.variantClass(renderedVariant))) return;\n\n this.syncPageHeaderBlockSize();\n\n // Update both flow-preservation pieces before reading layout. Otherwise a\n // reverse compact → expanded render can briefly contain the tall header and\n // the compact spacer together, giving browser scroll anchoring a transient\n // height change to compensate.\n this.setSpacerHeight(\n this.isScrollCompacted ? this.expandedHeaderHeight - this.compactHeaderHeight : 0\n );\n this.setStickyHeaderOffset(renderedVariant);\n\n if (renderedVariant === 'expanded' && !this.expandedGeometryFrozen) {\n this.captureExpandedHeaderGeometry(header);\n this.setStickyHeaderOffset(renderedVariant);\n }\n }\n\n private cancelHeaderGeometrySync() {\n if (this.headerGeometryFrame !== null) cancelAnimationFrame(this.headerGeometryFrame);\n this.headerGeometryFrame = null;\n }\n\n private scheduleHeaderGeometrySync(header: BarTitleElement) {\n this.cancelHeaderGeometrySync();\n let framesRemaining = ShellPage.MAX_HEADER_GEOMETRY_FRAMES;\n let framesElapsed = 0;\n const sync = () => {\n if (this.headerEl !== header) return;\n framesRemaining -= 1;\n framesElapsed += 1;\n // In WebKit a child's componentDidLoad can precede its assignment into\n // the parent's rendered slot. Revalidate after ShellApp has had a frame\n // to expose the actual content scroller.\n this.connectScrollRoot();\n this.syncRenderedHeaderGeometry(header);\n const geometryReady =\n this.effectiveVariant !== 'expanded' ||\n (this.expandedHeaderHeight > 0 && this.headerTravel > 0);\n if (\n (geometryReady && this.scrollRootResolved && framesElapsed >= 2) ||\n framesRemaining <= 0\n ) {\n this.headerGeometryFrame = null;\n return;\n }\n this.headerGeometryFrame = requestAnimationFrame(sync);\n };\n this.headerGeometryFrame = requestAnimationFrame(sync);\n }\n\n private cancelHeaderReveal() {\n if (this.headerRevealFrame !== null) cancelAnimationFrame(this.headerRevealFrame);\n this.headerRevealFrame = null;\n this.headerEl?.removeAttribute('data-shell-page-syncing');\n }\n\n private revealHeaderWhenSynced(header: BarTitleElement, variant: BarTitleVariant) {\n // Stencil normally re-renders within a frame or two of a prop change. Stop\n // polling at the cap, but fail closed: a stale variant must never paint.\n let framesRemaining = ShellPage.MAX_HEADER_REVEAL_FRAMES;\n const reveal = () => {\n if (this.headerEl !== header) {\n header.removeAttribute('data-shell-page-syncing');\n return;\n }\n framesRemaining -= 1;\n if (header.classList.contains(this.variantClass(variant))) {\n header.removeAttribute('data-shell-page-syncing');\n this.headerRevealFrame = null;\n return;\n }\n if (framesRemaining <= 0) {\n this.headerRevealFrame = null;\n return;\n }\n this.headerRevealFrame = requestAnimationFrame(reveal);\n };\n this.headerRevealFrame = requestAnimationFrame(reveal);\n }\n\n private syncHeaderVariant(concealUntilSynced = false) {\n const header = this.headerEl;\n if (!header) return;\n\n this.syncHeaderDividerInset();\n if (!this.headerContractResolved) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n return;\n }\n\n const next = this.effectiveVariant;\n const renderedVariantIsStale = !header.classList.contains(this.variantClass(next));\n if (!renderedVariantIsStale) this.syncRenderedHeaderGeometry(header);\n if (renderedVariantIsStale && this.isScrollCompacted) {\n // Preserve the expanded flow before asking BarTitle to become compact.\n // This prevents the sentinel from moving back into view during the\n // parent/child render handoff and keeps the variant transition stable.\n this.setSpacerHeight(this.expandedHeaderHeight - this.compactHeaderHeight);\n this.setStickyHeaderOffset(next);\n }\n if (concealUntilSynced) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n }\n if (header.variant !== next) {\n header.variant = next;\n // The child update and its MutationObserver callback can land in\n // different phases across engines. Poll the rendered class as the\n // authoritative handoff before committing sticky/spacer geometry.\n this.scheduleHeaderGeometrySync(header);\n }\n if (concealUntilSynced) {\n this.revealHeaderWhenSynced(header, next);\n }\n }\n\n private observeHeader(header: BarTitleElement | null) {\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.headerEl = header;\n this.expandedHeaderHeight = 0;\n this.expandedGeometryFrozen = false;\n this.setHeaderTravel(0);\n this.setSpacerHeight(0);\n this.stickyHeaderEl?.style.setProperty('--ds-shell-page-sticky-offset', '0px');\n\n if (!header) return;\n if (header.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(header);\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.headerResizeObserver = new ResizeObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerResizeObserver.observe(header);\n }\n if (typeof MutationObserver !== 'undefined') {\n this.headerMutationObserver = new MutationObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerMutationObserver.observe(header, {\n attributes: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n });\n }\n this.syncHeaderVariant(true);\n this.scheduleHeaderGeometrySync(header);\n }\n\n private handleHeaderSlotChange = (event: Event) => {\n if (this.responsiveMode === 'mobile') return;\n const slot = event.target as HTMLSlotElement;\n const header = slot\n .assignedElements()\n .find(element => element.tagName.toLowerCase() === 'ds-bar-title');\n this.observeHeader((header as BarTitleElement | undefined) ?? null);\n };\n\n render() {\n const mobile = this.responsiveMode === 'mobile';\n return (\n <Host\n role=\"main\"\n style={this.contentInsetStyles}\n class={{\n 'shell-page-host--inset-default': this.contentInset === 'default',\n 'shell-page-host--inset-none': this.contentInset === 'none',\n 'shell-page-host--block-start-inset-none': this.contentInsetBlockStart === 'none',\n 'shell-page-host--surface-primary': this.contentSurface === 'primary',\n 'shell-page-host--surface-secondary': this.contentSurface === 'secondary',\n 'shell-page-host--mobile': mobile,\n [`shell-page-host--header-${this.effectiveVariant}`]: true,\n }}\n >\n <div\n ref={el => {\n this.sentinelEl = el ?? null;\n }}\n class=\"shell-page__scroll-sentinel\"\n aria-hidden=\"true\"\n />\n <div\n ref={el => {\n this.stickyHeaderEl = el ?? null;\n }}\n class=\"shell-page__sticky-header\"\n >\n <div\n class=\"shell-page__desktop-header\"\n hidden={mobile}\n aria-hidden={mobile ? 'true' : undefined}\n inert={mobile ? true : undefined}\n >\n <slot name=\"header\" onSlotchange={this.handleHeaderSlotChange} />\n </div>\n <div\n class=\"shell-page__mobile-header\"\n hidden={!mobile}\n aria-hidden={!mobile ? 'true' : undefined}\n inert={!mobile ? true : undefined}\n >\n <slot name=\"mobile-header\" />\n </div>\n </div>\n <div\n ref={el => {\n this.spacerEl = el ?? null;\n }}\n class=\"shell-page__flow-spacer\"\n aria-hidden=\"true\"\n />\n <div class=\"shell-page__content\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as s,H as c,c as e,h as r,a as i,t}from"./index.js";function o(s,c){return c.length>0?c.flatMap((s=>s.options)):[...s]}function a(s,c){const e=s.findIndex((s=>s.value===c&&!s.isInactive));if(e>=0)return e;return s.findIndex((s=>!s.isInactive))}function n(s,c,e){const r=s.map(((s,c)=>({option:s,index:c}))).filter((({option:s})=>!s.isInactive)).map((({index:s})=>s));if(r.length===0)return null;if(e==="Home")return r[0];if(e==="End")return r[r.length-1];const i=e==="ArrowRight"||e==="ArrowDown"?1:-1;const t=r.indexOf(c);if(t<0){return i>0?r[0]:r[r.length-1]}return r[(t+i+r.length)%r.length]}function d(s){if(s===undefined||!Number.isFinite(s))return 1;return Math.min(1,Math.max(0,s))}const h=()=>`@media (forced-colors: active){.sc-ds-swatch-picker:root,.sc-ds-swatch-picker-h,.ds-forced-colors-scope.sc-ds-swatch-picker{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-swatch-picker-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-swatch-picker-h,.ds-focus-ring.sc-ds-swatch-picker,.ds-focus-ring-inset.sc-ds-swatch-picker-h,.ds-focus-ring-inset.sc-ds-swatch-picker{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-swatch-picker-h:focus-visible,.ds-focus-ring.sc-ds-swatch-picker:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-swatch-picker-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-swatch-picker{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-swatch-picker-h:focus-visible,.ds-focus-ring-inset.sc-ds-swatch-picker:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-swatch-picker-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-swatch-picker:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-swatch-picker-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-swatch-picker:root,.sc-ds-swatch-picker-h,.ds-forced-colors-scope.sc-ds-swatch-picker{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-swatch-picker-h,.ds-control-inactive.sc-ds-swatch-picker{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-swatch-picker-h,.ds-control-inactive.sc-ds-swatch-picker{color:var(--ds-forced-color-disabled);opacity:1}}@media (forced-colors: active){.sc-ds-swatch-picker:root,.sc-ds-swatch-picker-h,.ds-forced-colors-scope.sc-ds-swatch-picker{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-swatch-picker-h{box-sizing:border-box;display:block;width:100%;--_swatch-inner-inset:calc( var(--dimension-stroke-width-025) + var(--dimension-space-025) );--_swatch-ring-bg:var(--color-background-primary);--_swatch-select-motion:var(--effect-motion-short-3)}.swatch-picker.sc-ds-swatch-picker{box-sizing:border-box;display:flex;align-items:center;flex-wrap:wrap;width:100%;min-height:var(--dimension-size-400);gap:var(--dimension-space-100);padding:var(--dimension-space-100)}.swatch-picker__option.sc-ds-swatch-picker{position:relative;box-sizing:border-box;flex:0 0 auto;width:var(--dimension-size-300);height:var(--dimension-size-300);padding:0;border:none;border-radius:var(--dimension-radius-half);background:transparent;cursor:default;isolation:isolate}.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{position:absolute;inset:0;border-radius:inherit;pointer-events:none}.swatch-picker__fill.sc-ds-swatch-picker{z-index:1;background-color:var(--_swatch-preview-color);background-image:var(--_swatch-preview-image);background-repeat:no-repeat;background-position:center;background-size:cover;opacity:var(--_swatch-preview-opacity);transition:inset var(--_swatch-select-motion)}.swatch-picker__border.sc-ds-swatch-picker{z-index:2;box-shadow:inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-secondary);transition:inset var(--_swatch-select-motion)}.swatch-picker__interaction.sc-ds-swatch-picker{z-index:3;background-color:transparent;transition:inset var(--_swatch-select-motion), background-color 0s}@media (hover: hover) and (pointer: fine){.swatch-picker__option.sc-ds-swatch-picker:hover:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-hover)}}.swatch-picker__option.sc-ds-swatch-picker:active:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-pressed)}.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{opacity:0;transform:scale(1.2);transform-origin:center;transition:opacity var(--_swatch-select-motion), transform var(--_swatch-select-motion)}.swatch-picker__halo.sc-ds-swatch-picker{z-index:4;box-shadow:inset 0 0 0 var(--_swatch-inner-inset) var(--_swatch-ring-bg)}.swatch-picker__stroke.sc-ds-swatch-picker{z-index:5;box-shadow:inset 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__interaction.sc-ds-swatch-picker{inset:var(--_swatch-inner-inset)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__stroke.sc-ds-swatch-picker{opacity:1;transform:scale(1)}.swatch-picker__divider.sc-ds-swatch-picker{flex:0 0 auto;align-self:center;width:var(--dimension-stroke-width-012);height:var(--dimension-size-300);background-color:var(--color-border-tertiary)}@media (prefers-reduced-motion: reduce){.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{transition:none}}@media (forced-colors: active){.swatch-picker__fill.sc-ds-swatch-picker{forced-color-adjust:none}.swatch-picker__border.sc-ds-swatch-picker{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}.swatch-picker__halo.sc-ds-swatch-picker{box-shadow:none}.swatch-picker__stroke.sc-ds-swatch-picker{box-shadow:none;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.swatch-picker__divider.sc-ds-swatch-picker{background-color:var(--ds-forced-color-content)}}`;const l=s(class s extends c{constructor(s){super();if(s!==false){this.__registerHost()}this.dsChange=e(this,"dsChange",7);this.value="";this.options=[];this.sections=[];this.groupLabel="Swatch options"}get activeOptions(){return o(this.options,this.sections)}selectOption(s){if(s.isInactive||s.value===this.value)return;this.value=s.value;this.dsChange.emit(s.value)}focusOption(s){requestAnimationFrame((()=>{const c=this.el.querySelectorAll(".swatch-picker__option");c[s]?.focus()}))}handleOptionKeyDown(s,c){const e=s.key;if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Home","End"].includes(e)){return}const r=n(this.activeOptions,c,e);if(r===null)return;s.preventDefault();const i=this.activeOptions[r];this.selectOption(i);this.focusOption(r)}renderOption(s,c,e){const i=s.value===this.value;const t=d(s.preview.opacity);return r("button",{key:s.value,type:"button",class:{"swatch-picker__option":true,"swatch-picker__option--selected":i,"ds-focus-ring-inset":true,"ds-control-inactive":!!s.isInactive},style:{"--_swatch-preview-color":s.preview.backgroundColor??"var(--color-background-secondary)","--_swatch-preview-image":s.preview.backgroundImage??"none","--_swatch-preview-opacity":String(t)},role:"radio","aria-label":s.label,"aria-checked":i?"true":"false",tabIndex:c===e?0:-1,disabled:s.isInactive,onClick:()=>this.selectOption(s),onKeyDown:s=>this.handleOptionKeyDown(s,c)},r("span",{class:"swatch-picker__fill","aria-hidden":"true"}),r("span",{class:"swatch-picker__border","aria-hidden":"true"}),r("span",{class:"swatch-picker__interaction","aria-hidden":"true"}),r("span",{class:"swatch-picker__halo","aria-hidden":"true"}),r("span",{class:"swatch-picker__stroke","aria-hidden":"true"}))}render(){const s=this.activeOptions;const c=a(s,this.value);let e=0;return r(i,{key:"f621418068395f9b3b71a2e75c13b33537aa64b8"},r("div",{key:"bdbc7cdcd46aa8742cea459f42879502ecebda09",class:"swatch-picker",role:"radiogroup","aria-label":this.groupLabel},(this.sections.length>0?this.sections:[{options:this.options}]).map(((s,i)=>[s.options.map((s=>{const r=e++;return this.renderOption(s,r,c)})),i<(this.sections.length>0?this.sections.length:1)-1&&r("span",{class:"swatch-picker__divider","aria-hidden":"true"})]))))}get el(){return this}static get style(){return h()}},[2,"ds-swatch-picker",{value:[1537],options:[16],sections:[16],groupLabel:[1,"group-label"]}]);function p(){if(typeof customElements==="undefined"){return}const s=["ds-swatch-picker"];s.forEach((s=>{switch(s){case"ds-swatch-picker":if(!customElements.get(t(s))){customElements.define(t(s),l)}break}}))}p();export{l as S,p as d};
|
|
2
|
-
//# sourceMappingURL=p-BysVBVQv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["flattenSwatchPickerOptions","options","sections","length","flatMap","section","resolveSwatchPickerTabIndex","value","selectedIndex","findIndex","option","isInactive","resolveSwatchPickerNavigationIndex","currentIndex","key","enabledIndexes","map","index","filter","direction","currentEnabledIndex","indexOf","normalizeSwatchPickerOpacity","opacity","undefined","Number","isFinite","Math","min","max","swatchPickerCss","SwatchPicker","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","groupLabel","activeOptions","selectOption","dsChange","emit","focusOption","requestAnimationFrame","optionButtons","el","querySelectorAll","focus","handleOptionKeyDown","event","includes","nextIndex","preventDefault","nextOption","renderOption","tabIndex","selected","preview","h","type","class","style","backgroundColor","backgroundImage","String","role","label","disabled","onClick","onKeyDown","render","optionIndex","Host","sectionIndex"],"sources":["src/wc/components/SwatchPicker/swatch-picker-types.ts","src/wc/components/SwatchPicker/SwatchPicker.css?tag=ds-swatch-picker&encapsulation=scoped","src/wc/components/SwatchPicker/SwatchPicker.tsx"],"sourcesContent":["export interface SwatchPickerPreview {\n /** CSS color used as the swatch base or as a complete flat-color preview. */\n backgroundColor?: string;\n /** CSS gradient used as the swatch image. */\n backgroundImage?: string;\n /** Optional preview-layer opacity, clamped to the inclusive 0–1 range. */\n opacity?: number;\n}\n\nexport interface SwatchPickerOption {\n /** Stable value emitted when this option is selected. */\n value: string;\n /** Accessible option name; the visual preview never replaces this label. */\n label: string;\n preview: SwatchPickerPreview;\n isInactive?: boolean;\n}\n\nexport interface SwatchPickerSection {\n /** Sections remain one radio group and are separated visually. */\n options: SwatchPickerOption[];\n}\n\nexport type SwatchPickerNavigationKey =\n | 'ArrowDown'\n | 'ArrowLeft'\n | 'ArrowRight'\n | 'ArrowUp'\n | 'Home'\n | 'End';\n\nexport function flattenSwatchPickerOptions(\n options: readonly SwatchPickerOption[],\n sections: readonly SwatchPickerSection[],\n): SwatchPickerOption[] {\n return sections.length > 0\n ? sections.flatMap(section => section.options)\n : [...options];\n}\n\nexport function resolveSwatchPickerTabIndex(\n options: readonly SwatchPickerOption[],\n value: string,\n): number {\n const selectedIndex = options.findIndex(option => (\n option.value === value && !option.isInactive\n ));\n if (selectedIndex >= 0) return selectedIndex;\n return options.findIndex(option => !option.isInactive);\n}\n\nexport function resolveSwatchPickerNavigationIndex(\n options: readonly SwatchPickerOption[],\n currentIndex: number,\n key: SwatchPickerNavigationKey,\n): number | null {\n const enabledIndexes = options\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.isInactive)\n .map(({ index }) => index);\n\n if (enabledIndexes.length === 0) return null;\n if (key === 'Home') return enabledIndexes[0];\n if (key === 'End') return enabledIndexes[enabledIndexes.length - 1];\n\n const direction = key === 'ArrowRight' || key === 'ArrowDown' ? 1 : -1;\n const currentEnabledIndex = enabledIndexes.indexOf(currentIndex);\n if (currentEnabledIndex < 0) {\n return direction > 0\n ? enabledIndexes[0]\n : enabledIndexes[enabledIndexes.length - 1];\n }\n\n return enabledIndexes[\n (currentEnabledIndex + direction + enabledIndexes.length) % enabledIndexes.length\n ];\n}\n\nexport function normalizeSwatchPickerOpacity(opacity: number | undefined): number {\n if (opacity === undefined || !Number.isFinite(opacity)) return 1;\n return Math.min(1, Math.max(0, opacity));\n}\n","@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n box-sizing: border-box;\n display: block;\n width: 100%;\n --_swatch-inner-inset: calc(\n var(--dimension-stroke-width-025) + var(--dimension-space-025)\n );\n --_swatch-ring-bg: var(--color-background-primary);\n --_swatch-select-motion: var(--effect-motion-short-3);\n}\n\n.swatch-picker {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 100%;\n min-height: var(--dimension-size-400);\n gap: var(--dimension-space-100);\n padding: var(--dimension-space-100);\n}\n\n.swatch-picker__option {\n position: relative;\n box-sizing: border-box;\n flex: 0 0 auto;\n width: var(--dimension-size-300);\n height: var(--dimension-size-300);\n padding: 0;\n border: none;\n border-radius: var(--dimension-radius-half);\n background: transparent;\n cursor: default;\n isolation: isolate;\n}\n\n.swatch-picker__fill,\n.swatch-picker__border,\n.swatch-picker__interaction,\n.swatch-picker__halo,\n.swatch-picker__stroke {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n}\n\n.swatch-picker__fill {\n z-index: 1;\n background-color: var(--_swatch-preview-color);\n background-image: var(--_swatch-preview-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: cover;\n opacity: var(--_swatch-preview-opacity);\n transition:\n inset var(--_swatch-select-motion);\n}\n\n.swatch-picker__border {\n z-index: 2;\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-secondary);\n transition:\n inset var(--_swatch-select-motion);\n}\n\n.swatch-picker__interaction {\n z-index: 3;\n background-color: transparent;\n transition:\n inset var(--_swatch-select-motion),\n background-color 0s;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .swatch-picker__option:hover:not(:disabled) .swatch-picker__interaction {\n background-color: var(--color-interaction-hover);\n }\n}\n\n.swatch-picker__option:active:not(:disabled) .swatch-picker__interaction {\n background-color: var(--color-interaction-pressed);\n}\n\n.swatch-picker__halo,\n.swatch-picker__stroke {\n opacity: 0;\n transform: scale(1.2);\n transform-origin: center;\n transition:\n opacity var(--_swatch-select-motion),\n transform var(--_swatch-select-motion);\n}\n\n.swatch-picker__halo {\n z-index: 4;\n box-shadow: inset 0 0 0 var(--_swatch-inner-inset) var(--_swatch-ring-bg);\n}\n\n.swatch-picker__stroke {\n z-index: 5;\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand);\n}\n\n.swatch-picker__option--selected .swatch-picker__fill,\n.swatch-picker__option--selected .swatch-picker__border,\n.swatch-picker__option--selected .swatch-picker__interaction {\n inset: var(--_swatch-inner-inset);\n}\n\n.swatch-picker__option--selected .swatch-picker__halo,\n.swatch-picker__option--selected .swatch-picker__stroke {\n opacity: 1;\n transform: scale(1);\n}\n\n.swatch-picker__divider {\n flex: 0 0 auto;\n align-self: center;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-size-300);\n background-color: var(--color-border-tertiary);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .swatch-picker__fill,\n .swatch-picker__border,\n .swatch-picker__interaction,\n .swatch-picker__halo,\n .swatch-picker__stroke {\n transition: none;\n }\n}\n\n@media (forced-colors: active) {\n .swatch-picker__fill {\n forced-color-adjust: none;\n }\n\n .swatch-picker__border {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n\n .swatch-picker__halo {\n box-shadow: none;\n }\n\n .swatch-picker__stroke {\n box-shadow: none;\n outline: var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n }\n\n .swatch-picker__divider {\n background-color: var(--ds-forced-color-content);\n }\n}\n","import { Component, Element, Event, EventEmitter, Prop, h, Host } from '@stencil/core';\nimport {\n flattenSwatchPickerOptions,\n normalizeSwatchPickerOpacity,\n resolveSwatchPickerNavigationIndex,\n resolveSwatchPickerTabIndex,\n type SwatchPickerNavigationKey,\n type SwatchPickerOption,\n type SwatchPickerSection,\n} from './swatch-picker-types';\n\n@Component({\n tag: 'ds-swatch-picker',\n styleUrl: 'SwatchPicker.css',\n scoped: true,\n})\nexport class SwatchPicker {\n @Element() el!: HTMLElement;\n\n /** Selected option value. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /** Flat option list. Sections take precedence when supplied. Assign as a JavaScript property. */\n @Prop() options: SwatchPickerOption[] = [];\n\n /** Visually separated option groups that remain one radio group. Assign as a JavaScript property. */\n @Prop() sections: SwatchPickerSection[] = [];\n\n /** Accessible name for the complete one-of-many choice. */\n @Prop() groupLabel: string = 'Swatch options';\n\n @Event() dsChange!: EventEmitter<string>;\n\n private get activeOptions(): SwatchPickerOption[] {\n return flattenSwatchPickerOptions(this.options, this.sections);\n }\n\n private selectOption(option: SwatchPickerOption) {\n if (option.isInactive || option.value === this.value) return;\n this.value = option.value;\n this.dsChange.emit(option.value);\n }\n\n private focusOption(index: number) {\n requestAnimationFrame(() => {\n const optionButtons = this.el\n .querySelectorAll<HTMLButtonElement>('.swatch-picker__option');\n optionButtons[index]?.focus();\n });\n }\n\n private handleOptionKeyDown(\n event: KeyboardEvent,\n currentIndex: number,\n ) {\n const key = event.key as SwatchPickerNavigationKey;\n if (!['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Home', 'End'].includes(key)) {\n return;\n }\n\n const nextIndex = resolveSwatchPickerNavigationIndex(\n this.activeOptions,\n currentIndex,\n key,\n );\n if (nextIndex === null) return;\n\n event.preventDefault();\n const nextOption = this.activeOptions[nextIndex];\n this.selectOption(nextOption);\n this.focusOption(nextIndex);\n }\n\n private renderOption(\n option: SwatchPickerOption,\n index: number,\n tabIndex: number,\n ) {\n const selected = option.value === this.value;\n const opacity = normalizeSwatchPickerOpacity(option.preview.opacity);\n\n return (\n <button\n key={option.value}\n type=\"button\"\n class={{\n 'swatch-picker__option': true,\n 'swatch-picker__option--selected': selected,\n 'ds-focus-ring-inset': true,\n 'ds-control-inactive': !!option.isInactive,\n }}\n style={{\n '--_swatch-preview-color': option.preview.backgroundColor ?? 'var(--color-background-secondary)',\n '--_swatch-preview-image': option.preview.backgroundImage ?? 'none',\n '--_swatch-preview-opacity': String(opacity),\n }}\n role=\"radio\"\n aria-label={option.label}\n aria-checked={selected ? 'true' : 'false'}\n tabIndex={index === tabIndex ? 0 : -1}\n disabled={option.isInactive}\n onClick={() => this.selectOption(option)}\n onKeyDown={(event: KeyboardEvent) => this.handleOptionKeyDown(event, index)}\n >\n <span class=\"swatch-picker__fill\" aria-hidden=\"true\" />\n <span class=\"swatch-picker__border\" aria-hidden=\"true\" />\n <span class=\"swatch-picker__interaction\" aria-hidden=\"true\" />\n <span class=\"swatch-picker__halo\" aria-hidden=\"true\" />\n <span class=\"swatch-picker__stroke\" aria-hidden=\"true\" />\n </button>\n );\n }\n\n render() {\n const activeOptions = this.activeOptions;\n const tabIndex = resolveSwatchPickerTabIndex(activeOptions, this.value);\n let optionIndex = 0;\n\n return (\n <Host>\n <div\n class=\"swatch-picker\"\n role=\"radiogroup\"\n aria-label={this.groupLabel}\n >\n {(this.sections.length > 0 ? this.sections : [{ options: this.options }]).map((section, sectionIndex) => [\n section.options.map(option => {\n const currentIndex = optionIndex++;\n return this.renderOption(option, currentIndex, tabIndex);\n }),\n sectionIndex < (this.sections.length > 0 ? this.sections.length : 1) - 1 && (\n <span class=\"swatch-picker__divider\" aria-hidden=\"true\" />\n ),\n ])}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["mobileBarNavCss","MINIMUM_DIRECT_PRESS_MS","MobileBarNav","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","activeDestination","currentArea","id","icon","label","sheetNavExpanded","menuLabel","searchLabel","activityMode","activityLabel","inboxLabel","messagesLabel","agentsLabel","helpLabel","searchDot","activityDot","inboxDot","messagesDot","agentsDot","pressedItemId","activePointerId","pressedAt","pressClearTimer","disconnectedCallback","clearPressedItem","clearPressTimer","clearTimeout","beginDirectPress","itemId","event","isPrimary","pointerType","button","pointerId","performance","now","target","currentTarget","setPointerCapture","finishDirectPress","remaining","Math","max","setTimeout","cancelDirectPress","pressHandlers","onPointerDown","onPointerUp","onPointerCancel","onLostPointerCapture","destinationConfig","dot","activity","selectDestination","destination","shouldEmitMobileDestinationChange","dsDestinationChange","emit","requestAnimationFrame","focusDestination","el","querySelector","focus","preventScroll","renderDestination","item","selected","h","type","class","undefined","onClick","name","size","color","variant","render","tools","Host","key","String","dsSheetNavToggle","map"],"sources":["src/wc/components/MobileBarNav/MobileBarNav.css?tag=ds-mobile-bar-nav&encapsulation=scoped","src/wc/components/MobileBarNav/MobileBarNav.tsx"],"sourcesContent":["@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n\n:host {\n display: block;\n min-width: 0;\n background: var(--color-background-primary);\n color: var(--color-foreground-tertiary);\n -webkit-user-select: none;\n user-select: none;\n -webkit-touch-callout: none;\n}\n\n.mobile-bar-nav {\n justify-content: space-between;\n min-width: 0;\n padding-block-end: max(var(--ds-chrome-padding), env(safe-area-inset-bottom));\n border-top: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n background: var(--color-background-primary);\n -webkit-user-select: none;\n user-select: none;\n -webkit-touch-callout: none;\n}\n\n.mobile-bar-nav__group {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n}\n\n.mobile-bar-nav__item {\n appearance: none;\n flex: 0 0 var(--dimension-size-500);\n width: var(--dimension-size-500);\n height: var(--dimension-size-500);\n padding: var(--dimension-space-100);\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n color: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n}\n\n.mobile-bar-nav__item--selected {\n color: var(--color-foreground-primary);\n}\n\n/*\n * Safari can retain its native :active state after a direct touch. On coarse\n * touch-only pointers, the component-owned class provides one deterministic\n * press frame and clears it after release/cancel.\n */\n@media (hover: none) and (pointer: coarse) {\n .mobile-bar-nav__item.ds-interaction-fill:active:not(:disabled)::after {\n background: transparent;\n }\n\n .mobile-bar-nav__item--pressed.ds-interaction-fill::after,\n .mobile-bar-nav__item--pressed.ds-interaction-fill:active:not(:disabled)::after {\n background: var(--ds-interaction-pressed);\n }\n}\n\n.mobile-bar-nav__divider {\n flex: 0 0 var(--dimension-stroke-width-012);\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-iconography-lg);\n background: var(--color-border-tertiary);\n pointer-events: none;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.mobile-bar-nav__icon {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--dimension-iconography-lg);\n height: var(--dimension-iconography-lg);\n}\n\n.mobile-bar-nav__dot {\n position: absolute;\n inset-block-start: calc(var(--dimension-space-025) * -1);\n inset-inline-end: calc(var(--dimension-space-025) * -1);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n shouldEmitMobileDestinationChange,\n type MobileDestination,\n} from '../../shell/shell-responsive';\nimport type { PanelNavItem } from '../PanelNav/panel-nav-types';\nimport type { MobileBarNavDestinationDetail } from './mobile-bar-nav-types';\n\ninterface DestinationConfig {\n id: MobileDestination;\n icon: string;\n label: string;\n dot: boolean;\n}\n\nconst MINIMUM_DIRECT_PRESS_MS = 120;\n\n@Component({\n tag: 'ds-mobile-bar-nav',\n styleUrl: 'MobileBarNav.css',\n scoped: true,\n})\nexport class MobileBarNav {\n @Element() el!: HTMLElement;\n\n @Prop() activeDestination: MobileDestination = 'area';\n @Prop() currentArea: PanelNavItem = {\n id: 'tracking',\n icon: 'MapPage',\n label: 'Tracking',\n };\n @Prop() sheetNavExpanded: boolean = false;\n @Prop() menuLabel: string = 'Menu';\n @Prop() searchLabel: string = 'Search';\n /** Render Activity directly, or retain the optional grouped Inbox destination. */\n @Prop() activityMode: 'direct' | 'inbox' = 'direct';\n @Prop() activityLabel: string = 'Activity';\n @Prop() inboxLabel: string = 'Inbox';\n @Prop() messagesLabel: string = 'Messages';\n @Prop() agentsLabel: string = 'Agents';\n @Prop() helpLabel: string = 'Help & Support';\n @Prop() searchDot: boolean = false;\n @Prop() activityDot: boolean = false;\n @Prop() inboxDot: boolean = false;\n @Prop() messagesDot: boolean = false;\n @Prop() agentsDot: boolean = false;\n\n @State() private pressedItemId: string | null = null;\n\n @Event() dsSheetNavToggle!: EventEmitter<boolean>;\n @Event() dsDestinationChange!: EventEmitter<MobileBarNavDestinationDetail>;\n\n private activePointerId: number | null = null;\n private pressedAt = 0;\n private pressClearTimer: ReturnType<typeof setTimeout> | null = null;\n\n disconnectedCallback() {\n this.clearPressedItem();\n }\n\n private clearPressTimer() {\n if (this.pressClearTimer === null) return;\n clearTimeout(this.pressClearTimer);\n this.pressClearTimer = null;\n }\n\n private clearPressedItem() {\n this.clearPressTimer();\n this.activePointerId = null;\n this.pressedItemId = null;\n }\n\n private beginDirectPress(itemId: string, event: PointerEvent) {\n if (!event.isPrimary || event.pointerType === 'mouse' || event.button !== 0) return;\n\n this.clearPressTimer();\n this.activePointerId = event.pointerId;\n this.pressedAt = performance.now();\n this.pressedItemId = itemId;\n\n const target = event.currentTarget as HTMLElement;\n try {\n target.setPointerCapture(event.pointerId);\n } catch {\n // Pointer capture can fail if Safari has already cancelled the stream.\n }\n }\n\n private finishDirectPress(event: PointerEvent) {\n if (event.pointerId !== this.activePointerId) return;\n\n this.activePointerId = null;\n const remaining = Math.max(\n 0,\n MINIMUM_DIRECT_PRESS_MS - (performance.now() - this.pressedAt)\n );\n\n this.clearPressTimer();\n this.pressClearTimer = setTimeout(() => {\n this.pressClearTimer = null;\n this.pressedItemId = null;\n }, remaining);\n }\n\n private cancelDirectPress(event: PointerEvent) {\n if (event.pointerId !== this.activePointerId) return;\n this.clearPressedItem();\n }\n\n private pressHandlers(itemId: string) {\n return {\n onPointerDown: (event: PointerEvent) => this.beginDirectPress(itemId, event),\n onPointerUp: (event: PointerEvent) => this.finishDirectPress(event),\n onPointerCancel: (event: PointerEvent) => this.cancelDirectPress(event),\n onLostPointerCapture: (event: PointerEvent) => this.finishDirectPress(event),\n };\n }\n\n private destinationConfig(): DestinationConfig[] {\n const currentArea =\n this.activeDestination === 'help'\n ? {\n id: 'help' as const,\n icon: 'CircleQuestion',\n label: this.helpLabel,\n dot: false,\n }\n : {\n id: 'area' as const,\n icon: this.currentArea.icon || 'MapPage',\n label: this.currentArea.label || 'Area',\n dot: false,\n };\n\n const activity =\n this.activityMode === 'direct'\n ? {\n id: 'activity' as const,\n icon: 'Bell',\n label: this.activityLabel,\n dot: this.activityDot,\n }\n : {\n id: 'inbox' as const,\n icon: 'Inbox',\n label: this.inboxLabel,\n dot: this.inboxDot,\n };\n\n return [\n currentArea,\n { id: 'search', icon: 'MagnifyingGlass', label: this.searchLabel, dot: this.searchDot },\n activity,\n {\n id: 'messages',\n icon: 'MessageBubbleStack',\n label: this.messagesLabel,\n dot: this.messagesDot,\n },\n { id: 'agents', icon: 'AI', label: this.agentsLabel, dot: this.agentsDot },\n ];\n }\n\n private selectDestination(destination: MobileDestination) {\n if (\n !shouldEmitMobileDestinationChange(\n this.activeDestination,\n destination,\n this.sheetNavExpanded\n )\n ) {\n return;\n }\n this.dsDestinationChange.emit({ destination });\n // Owners may replace the visible mobile stage (and transiently drop focus\n // in WebKit) while handling the controlled destination change.\n requestAnimationFrame(() => {\n void this.focusDestination(destination);\n });\n }\n\n @Method()\n async focusDestination(destination: MobileDestination | 'sheet-nav') {\n const target = this.el.querySelector<HTMLElement>(\n `#${\n destination === 'sheet-nav'\n ? 'ds-mobile-sheet-nav-trigger'\n : `ds-mobile-bar-${destination}-trigger`\n }`\n );\n target?.focus({ preventScroll: true });\n }\n\n private renderDestination(item: DestinationConfig) {\n const selected = !this.sheetNavExpanded && item.id === this.activeDestination;\n return (\n <button\n id={`ds-mobile-bar-${item.id}-trigger`}\n type=\"button\"\n class={{\n 'mobile-bar-nav__item': true,\n 'mobile-bar-nav__item--selected': selected,\n 'mobile-bar-nav__item--pressed': this.pressedItemId === item.id,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-label={item.label}\n aria-current={selected ? 'page' : undefined}\n onClick={() => this.selectDestination(item.id)}\n {...this.pressHandlers(item.id)}\n >\n <span class=\"mobile-bar-nav__icon ds-interaction-fill__content\">\n <ds-icon name={item.icon} size=\"lg\" color=\"inherit\" />\n {item.dot && (\n <ds-badge class=\"mobile-bar-nav__dot\" variant=\"dot\" label=\"\" aria-hidden=\"true\" />\n )}\n </span>\n </button>\n );\n }\n\n render() {\n const [currentArea, ...tools] = this.destinationConfig();\n\n return (\n <Host>\n <nav class=\"mobile-bar-nav ds-chrome-row ds-chrome-space--md\" aria-label=\"Primary\">\n <div class=\"mobile-bar-nav__group mobile-bar-nav__group--context\">\n <button\n id=\"ds-mobile-sheet-nav-trigger\"\n type=\"button\"\n class={{\n 'mobile-bar-nav__item': true,\n 'mobile-bar-nav__item--selected': this.sheetNavExpanded,\n 'mobile-bar-nav__item--pressed':\n this.pressedItemId === 'sheet-nav',\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-label={this.menuLabel}\n aria-expanded={String(this.sheetNavExpanded)}\n aria-controls=\"ds-mobile-sheet-nav\"\n onClick={() => this.dsSheetNavToggle.emit(!this.sheetNavExpanded)}\n {...this.pressHandlers('sheet-nav')}\n >\n <span class=\"mobile-bar-nav__icon ds-interaction-fill__content\">\n <ds-icon\n name={this.sheetNavExpanded ? 'Cross' : 'Hamburger'}\n size=\"lg\"\n color=\"inherit\"\n />\n </span>\n </button>\n <span class=\"mobile-bar-nav__divider\" aria-hidden=\"true\" />\n {this.renderDestination(currentArea)}\n </div>\n <div class=\"mobile-bar-nav__group mobile-bar-nav__group--tools\">\n {tools.map(item => this.renderDestination(item))}\n </div>\n </nav>\n </Host>\n );\n }\n}\n"],"mappings":"6MAAA,MAAMA,EAAkB,IAAM,mocCyB9B,MAAMC,EAA0B,I,MAOnBC,EAAYC,EAAA,MAAAD,UAAAE,EALzB,WAAAC,CAAAC,G,wJAQUC,KAAAC,kBAAuC,OACvCD,KAAAE,YAA4B,CAClCC,GAAI,WACJC,KAAM,UACNC,MAAO,YAEDL,KAAAM,iBAA4B,MAC5BN,KAAAO,UAAoB,OACpBP,KAAAQ,YAAsB,SAEtBR,KAAAS,aAAmC,SACnCT,KAAAU,cAAwB,WACxBV,KAAAW,WAAqB,QACrBX,KAAAY,cAAwB,WACxBZ,KAAAa,YAAsB,SACtBb,KAAAc,UAAoB,iBACpBd,KAAAe,UAAqB,MACrBf,KAAAgB,YAAuB,MACvBhB,KAAAiB,SAAoB,MACpBjB,KAAAkB,YAAuB,MACvBlB,KAAAmB,UAAqB,MAEZnB,KAAAoB,cAA+B,KAKxCpB,KAAAqB,gBAAiC,KACjCrB,KAAAsB,UAAY,EACZtB,KAAAuB,gBAAwD,IAiNjE,CA/MC,oBAAAC,GACExB,KAAKyB,kB,CAGC,eAAAC,GACN,GAAI1B,KAAKuB,kBAAoB,KAAM,OACnCI,aAAa3B,KAAKuB,iBAClBvB,KAAKuB,gBAAkB,I,CAGjB,gBAAAE,GACNzB,KAAK0B,kBACL1B,KAAKqB,gBAAkB,KACvBrB,KAAKoB,cAAgB,I,CAGf,gBAAAQ,CAAiBC,EAAgBC,GACvC,IAAKA,EAAMC,WAAaD,EAAME,cAAgB,SAAWF,EAAMG,SAAW,EAAG,OAE7EjC,KAAK0B,kBACL1B,KAAKqB,gBAAkBS,EAAMI,UAC7BlC,KAAKsB,UAAYa,YAAYC,MAC7BpC,KAAKoB,cAAgBS,EAErB,MAAMQ,EAASP,EAAMQ,cACrB,IACED,EAAOE,kBAAkBT,EAAMI,U,CAC/B,M,EAKI,iBAAAM,CAAkBV,GACxB,GAAIA,EAAMI,YAAclC,KAAKqB,gBAAiB,OAE9CrB,KAAKqB,gBAAkB,KACvB,MAAMoB,EAAYC,KAAKC,IACrB,EACAjD,GAA2ByC,YAAYC,MAAQpC,KAAKsB,YAGtDtB,KAAK0B,kBACL1B,KAAKuB,gBAAkBqB,YAAW,KAChC5C,KAAKuB,gBAAkB,KACvBvB,KAAKoB,cAAgB,IAAI,GACxBqB,E,CAGG,iBAAAI,CAAkBf,GACxB,GAAIA,EAAMI,YAAclC,KAAKqB,gBAAiB,OAC9CrB,KAAKyB,kB,CAGC,aAAAqB,CAAcjB,GACpB,MAAO,CACLkB,cAAgBjB,GAAwB9B,KAAK4B,iBAAiBC,EAAQC,GACtEkB,YAAclB,GAAwB9B,KAAKwC,kBAAkBV,GAC7DmB,gBAAkBnB,GAAwB9B,KAAK6C,kBAAkBf,GACjEoB,qBAAuBpB,GAAwB9B,KAAKwC,kBAAkBV,G,CAIlE,iBAAAqB,GACN,MAAMjD,EACJF,KAAKC,oBAAsB,OACvB,CACEE,GAAI,OACJC,KAAM,iBACNC,MAAOL,KAAKc,UACZsC,IAAK,OAEP,CACEjD,GAAI,OACJC,KAAMJ,KAAKE,YAAYE,MAAQ,UAC/BC,MAAOL,KAAKE,YAAYG,OAAS,OACjC+C,IAAK,OAGb,MAAMC,EACJrD,KAAKS,eAAiB,SAClB,CACEN,GAAI,WACJC,KAAM,OACNC,MAAOL,KAAKU,cACZ0C,IAAKpD,KAAKgB,aAEZ,CACEb,GAAI,QACJC,KAAM,QACNC,MAAOL,KAAKW,WACZyC,IAAKpD,KAAKiB,UAGlB,MAAO,CACLf,EACA,CAAEC,GAAI,SAAUC,KAAM,kBAAmBC,MAAOL,KAAKQ,YAAa4C,IAAKpD,KAAKe,WAC5EsC,EACA,CACElD,GAAI,WACJC,KAAM,qBACNC,MAAOL,KAAKY,cACZwC,IAAKpD,KAAKkB,aAEZ,CAAEf,GAAI,SAAUC,KAAM,KAAMC,MAAOL,KAAKa,YAAauC,IAAKpD,KAAKmB,W,CAI3D,iBAAAmC,CAAkBC,GACxB,IACGC,EACCxD,KAAKC,kBACLsD,EACAvD,KAAKM,kBAEP,CACA,M,CAEFN,KAAKyD,oBAAoBC,KAAK,CAAEH,gBAGhCI,uBAAsB,UACf3D,KAAK4D,iBAAiBL,EAAY,G,CAK3C,sBAAMK,CAAiBL,GACrB,MAAMlB,EAASrC,KAAK6D,GAAGC,cACrB,IACEP,IAAgB,YACZ,8BACA,iBAAiBA,eAGzBlB,GAAQ0B,MAAM,CAAEC,cAAe,M,CAGzB,iBAAAC,CAAkBC,GACxB,MAAMC,GAAYnE,KAAKM,kBAAoB4D,EAAK/D,KAAOH,KAAKC,kBAC5D,OACEmE,EAAA,UACEjE,GAAI,iBAAiB+D,EAAK/D,aAC1BkE,KAAK,SACLC,MAAO,CACL,uBAAwB,KACxB,iCAAkCH,EAClC,gCAAiCnE,KAAKoB,gBAAkB8C,EAAK/D,GAC7D,sBAAuB,KACvB,sBAAuB,MACxB,aACW+D,EAAK7D,MAAK,eACR8D,EAAW,OAASI,UAClCC,QAAS,IAAMxE,KAAKsD,kBAAkBY,EAAK/D,OACvCH,KAAK8C,cAAcoB,EAAK/D,KAE5BiE,EAAA,QAAME,MAAM,qDACVF,EAAA,WAASK,KAAMP,EAAK9D,KAAMsE,KAAK,KAAKC,MAAM,YACzCT,EAAKd,KACJgB,EAAA,YAAUE,MAAM,sBAAsBM,QAAQ,MAAMvE,MAAM,GAAE,cAAa,U,CAOnF,MAAAwE,GACE,MAAO3E,KAAgB4E,GAAS9E,KAAKmD,oBAErC,OACEiB,EAACW,EAAI,CAAAC,IAAA,4CACHZ,EAAA,OAAAY,IAAA,2CAAKV,MAAM,mDAAkD,aAAY,WACvEF,EAAA,OAAAY,IAAA,2CAAKV,MAAM,wDACTF,EAAA,UAAAY,IAAA,2CACE7E,GAAG,8BACHkE,KAAK,SACLC,MAAO,CACL,uBAAwB,KACxB,iCAAkCtE,KAAKM,iBACvC,gCACEN,KAAKoB,gBAAkB,YACzB,sBAAuB,KACvB,sBAAuB,MACxB,aACWpB,KAAKO,UAAS,gBACX0E,OAAOjF,KAAKM,kBAAiB,gBAC9B,sBACdkE,QAAS,IAAMxE,KAAKkF,iBAAiBxB,MAAM1D,KAAKM,qBAC5CN,KAAK8C,cAAc,cAEvBsB,EAAA,QAAAY,IAAA,2CAAMV,MAAM,qDACVF,EAAA,WAAAY,IAAA,2CACEP,KAAMzE,KAAKM,iBAAmB,QAAU,YACxCoE,KAAK,KACLC,MAAM,cAIZP,EAAA,QAAAY,IAAA,2CAAMV,MAAM,0BAAyB,cAAa,SACjDtE,KAAKiE,kBAAkB/D,IAE1BkE,EAAA,OAAAY,IAAA,2CAAKV,MAAM,sDACRQ,EAAMK,KAAIjB,GAAQlE,KAAKiE,kBAAkBC,O","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["INSET_ACTION_SIZE","lg","md","sm","xs","ChoiceSearch","size","value","placeholder","ariaLabel","controls","activeDescendant","disabled","inputRef","clearLabel","onValueChange","onClear","onKeyDown","inputElement","h","class","name","color","CONTROL_TEXT_VARIANT","replace","ref","element","type","onInput","event","target","label","side","variant","icon","hasBorder","rounded","onDsChange","stopPropagation","onDsClick","requestAnimationFrame","focus","ChoiceFooter","summary","compactSummary","useCompactSummary","contentRef","summaryMeasureRef","clearRef","key","as","onClick","ChoiceActionFooter","onAction","ChoiceOptionRow","id","option","selected","active","focusRingVisible","usesSubtext","leading","supporting","action","actionOpen","popupRole","tabIndex","onFocus","onHover","onSelect","grid","undefined","role","String","isInactive","onMouseDown","preventDefault","onMouseMove","CONTROL_SUPPORTING_TEXT_VARIANT","subtext","trim"],"sources":["src/wc/utils/choice-list-parts.tsx"],"sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport type { ChoiceOption } from './choice-list';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n type ControlSize,\n} from './control-text';\n\nconst INSET_ACTION_SIZE: Record<ControlSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\ninterface ChoiceSearchProps {\n size?: ControlSize;\n value: string;\n placeholder: string;\n ariaLabel?: string;\n controls?: string;\n activeDescendant?: string;\n disabled?: boolean;\n inputRef: (element: HTMLInputElement | null) => void;\n clearLabel: string;\n onValueChange: (value: string) => void;\n onClear?: () => void;\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport const ChoiceSearch: FunctionalComponent<ChoiceSearchProps> = ({\n size = 'md',\n value,\n placeholder,\n ariaLabel,\n controls,\n activeDescendant,\n disabled = false,\n inputRef,\n clearLabel,\n onValueChange,\n onClear,\n onKeyDown,\n}) => {\n let inputElement: HTMLInputElement | null = null;\n\n return (\n <div class=\"select-search\">\n <div class={`select-search__control ds-control--${size}`}>\n <ds-icon name=\"MagnifyingGlass\" size={size} color=\"inherit\" />\n <input\n class={`ds-text--${CONTROL_TEXT_VARIANT[size].replace('text-', '')} ds-text--regular`}\n ref={element => {\n inputElement = (element as HTMLInputElement) ?? null;\n inputRef(inputElement);\n }}\n type=\"search\"\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n aria-label={ariaLabel ?? placeholder}\n aria-controls={controls}\n aria-activedescendant={activeDescendant}\n onInput={event => onValueChange((event.target as HTMLInputElement).value)}\n onKeyDown={onKeyDown}\n />\n {value && !disabled && (\n <ds-tooltip\n class=\"select-search__clear-tooltip\"\n label={clearLabel}\n side=\"top\"\n size=\"sm\"\n >\n <ds-button-unfilled\n class=\"select-search__clear\"\n variant=\"icon\"\n size={INSET_ACTION_SIZE[size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={clearLabel}\n onDsChange={event => event.stopPropagation()}\n onDsClick={() => {\n onValueChange('');\n onClear?.();\n requestAnimationFrame(() => inputElement?.focus());\n }}\n />\n </ds-tooltip>\n )}\n </div>\n </div>\n );\n};\n\ninterface ChoiceFooterProps {\n size?: ControlSize;\n clearLabel: string;\n summary?: string;\n compactSummary?: string;\n useCompactSummary?: boolean;\n contentRef?: (element: HTMLDivElement | null) => void;\n summaryMeasureRef?: (element: HTMLElement | null) => void;\n clearRef?: (element: HTMLButtonElement | null) => void;\n onClear: (event: MouseEvent) => void;\n}\n\nexport const ChoiceFooter: FunctionalComponent<ChoiceFooterProps> = ({\n size = 'md',\n clearLabel,\n summary,\n compactSummary,\n useCompactSummary = false,\n contentRef,\n summaryMeasureRef,\n clearRef,\n onClear,\n}) => (\n <div class=\"ds-choice-footer\">\n <div\n ref={element => contentRef?.((element as HTMLDivElement) ?? null)}\n class={`ds-choice-footer__content ds-control--${size}`}\n >\n {summary && [\n <ds-text\n key=\"summary\"\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {useCompactSummary ? compactSummary ?? summary : summary}\n </ds-text>,\n <ds-text\n key=\"summary-measure\"\n ref={element => summaryMeasureRef?.((element as HTMLElement) ?? null)}\n class=\"ds-choice-footer__summary-measure\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {summary}\n </ds-text>,\n ]}\n <button\n ref={element => clearRef?.((element as HTMLButtonElement) ?? null)}\n type=\"button\"\n class=\"ds-choice-footer__clear ds-text-action ds-focus-ring\"\n onClick={onClear}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {clearLabel}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceActionFooterProps {\n size?: ControlSize;\n label: string;\n onAction: (event: MouseEvent) => void;\n}\n\nexport const ChoiceActionFooter: FunctionalComponent<ChoiceActionFooterProps> = ({\n size = 'md',\n label,\n onAction,\n}) => (\n <div class=\"ds-choice-footer\">\n <div class={`ds-choice-footer__content ds-control--${size}`}>\n <button\n type=\"button\"\n class=\"ds-choice-footer__action ds-text-action ds-focus-ring\"\n onClick={onAction}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {label}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceOptionRowProps {\n size?: ControlSize;\n id: string;\n option: ChoiceOption;\n selected: boolean;\n active: boolean;\n focusRingVisible: boolean;\n usesSubtext: boolean;\n leading?: VNode;\n supporting?: VNode;\n action?: VNode;\n actionOpen?: boolean;\n popupRole?: 'listbox' | 'grid';\n tabIndex?: number;\n onFocus?: () => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onHover: () => void;\n onSelect: () => void;\n}\n\nexport const ChoiceOptionRow: FunctionalComponent<ChoiceOptionRowProps> = ({\n size = 'md',\n id,\n option,\n selected,\n active,\n focusRingVisible,\n usesSubtext,\n leading,\n supporting,\n action,\n actionOpen = false,\n popupRole = 'listbox',\n tabIndex,\n onFocus,\n onKeyDown,\n onHover,\n onSelect,\n}) => {\n const grid = popupRole === 'grid';\n return (\n <div\n id={grid ? id : undefined}\n role={grid ? 'row' : undefined}\n aria-selected={grid ? String(selected) : undefined}\n aria-disabled={grid && option.isInactive ? 'true' : undefined}\n class={{\n 'select-option-row': true,\n 'select-option-row--has-action': !!action,\n 'select-option-row--action-open': actionOpen,\n 'select-option-row--keyboard-active': !!action && active && focusRingVisible,\n }}\n >\n <div\n id={grid ? undefined : id}\n class={{\n 'select-option': true,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n [`ds-control--${size}`]: true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && focusRingVisible,\n 'ds-interaction-fill': !option.isInactive,\n 'ds-interaction-fill--selected': selected && !option.isInactive,\n 'ds-control-inactive': !!option.isInactive,\n 'select-option--active': active,\n }}\n role={grid ? 'gridcell' : 'option'}\n tabIndex={tabIndex}\n aria-selected={grid ? undefined : String(selected)}\n aria-disabled={!grid && option.isInactive ? 'true' : undefined}\n onMouseDown={event => event.preventDefault()}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseMove={() => {\n if (!option.isInactive) onHover();\n }}\n onClick={onSelect}\n >\n {leading}\n <div class=\"ds-choice-item__content ds-interaction-fill__content\">\n <ds-text\n class=\"ds-choice-item__label ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color={selected ? 'primary' : 'secondary'}\n >\n {option.label}\n </ds-text>\n {supporting ?? (usesSubtext ? (\n <ds-text\n class=\"ds-choice-item__subtext ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {option.subtext?.trim() || '—'}\n </ds-text>\n ) : null)}\n </div>\n </div>\n {action && (\n <div\n class=\"select-option-row__action ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale\"\n role={grid ? 'gridcell' : undefined}\n >\n {action}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["radioCss","radioIdCounter","Radio","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","instanceId","options","value","size","disabled","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","direction","isInactive","ariaLabel","initialValue","formDisabled","componentWillLoad","syncFormValue","inactive","setFormControlValue","internals","missing","length","setRequiredValidity","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringFormState","setFocus","activeItems","find","item","tabIndex","focus","Array","from","el","querySelectorAll","handleKeyDown","e","items","focused","document","activeElement","idx","indexOf","next","key","preventDefault","nextValue","dataset","dsChange","emit","selectItem","optValue","render","invalid","selectedIdx","findIndex","option","firstActiveIdx","focusableIdx","h","Host","role","ariaLabelledby","undefined","class","radio","map","index","isItemInactive","isChecked","tabIdx","labelId","descriptionId","String","description","radio__item","Boolean","onClick","onKeyDown","radio__circle","as","variant","CONTROL_TEXT_VARIANT","textId","label","CONTROL_SUPPORTING_TEXT_VARIANT","color"],"sources":["src/wc/components/Radio/Radio.css?tag=ds-radio&encapsulation=scoped","src/wc/components/Radio/Radio.tsx"],"sourcesContent":["@import '../../utils/control-inactive.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-025);\n}\n\n:host(.radio--horizontal) {\n flex-direction: row;\n gap: var(--dimension-space-100);\n}\n\n:host(.radio--lg) {\n --_radio-circle: var(--dimension-iconography-md);\n --_radio-dot: calc(var(--dimension-size-base) * 5 / 4);\n --_radio-stroke: var(--dimension-stroke-width-018);\n}\n\n:host(.radio--md) {\n --_radio-circle: var(--dimension-iconography-sm);\n --_radio-dot: var(--dimension-size-100);\n --_radio-stroke: var(--dimension-stroke-width-015);\n}\n\n:host(.radio--sm) {\n --_radio-circle: var(--dimension-iconography-xs);\n --_radio-dot: var(--dimension-size-075);\n --_radio-stroke: var(--dimension-stroke-width-012);\n}\n\n:host(.radio--xs) {\n --_radio-circle: var(--dimension-size-100);\n --_radio-dot: var(--dimension-size-050);\n --_radio-stroke: calc(var(--dimension-stroke-width-base) * 3 / 32);\n}\n\n.radio__item {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n padding: 0 var(--ds-control-padding-inline);\n border-radius: var(--ds-control-radius);\n cursor: default;\n user-select: none;\n}\n\n.radio__item--described {\n height: auto;\n min-height: var(--ds-control-height);\n padding-block: var(--dimension-space-075);\n}\n\n.radio__placement {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n\n.radio__circle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--_radio-circle);\n height: var(--_radio-circle);\n border: 0;\n border-radius: var(--dimension-radius-half);\n box-shadow: inset 0 0 0 var(--_radio-stroke) var(--color-foreground-tertiary);\n transition:\n background-color var(--effect-motion-short-2),\n box-shadow var(--effect-motion-short-2);\n}\n\n.radio__circle--checked {\n background-color: var(--color-background-bold-brand);\n box-shadow: none;\n}\n\n.radio__dot {\n width: var(--_radio-dot);\n height: var(--_radio-dot);\n border-radius: var(--dimension-radius-half);\n background-color: var(--color-foreground-on-bold-background-primary);\n}\n\n.radio__copy {\n display: grid;\n flex: 1;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding: 0 var(--ds-control-label-inset);\n}\n\n@media (forced-colors: active) {\n .radio__circle {\n border: var(--_radio-stroke) solid var(--ds-forced-color-content);\n box-shadow: none;\n }\n\n .radio__circle--checked {\n background-color: var(--ds-forced-color-selected);\n border-color: var(--ds-forced-color-selected);\n }\n\n .radio__dot {\n background-color: var(--ds-forced-color-on-selected);\n }\n}\n","import { AttachInternals, Component, Prop, State, Event, EventEmitter, Element, Listen, Method, Watch, h, Host } from '@stencil/core';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n} from '../../utils';\n\nexport interface RadioOption {\n label: string;\n value: string;\n description?: string;\n isInactive?: boolean;\n}\n\nexport type RadioSize = 'lg' | 'md' | 'sm' | 'xs';\n\nlet radioIdCounter = 0;\n\n@Component({\n tag: 'ds-radio',\n styleUrl: 'Radio.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Radio {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private readonly instanceId = ++radioIdCounter;\n\n /** Visible choices in this one-of-many set. */\n @Prop() options: RadioOption[] = [];\n /** Selected option value. */\n @Prop({ mutable: true }) value: string = '';\n /** Visual and placement density for every option. */\n @Prop() size: RadioSize = 'md';\n /** Native form field name. */\n @Prop({ reflect: true }) name: string | undefined;\n /** Associates the radio set with a form by id when rendered outside that form. */\n @Prop({ reflect: true }) form: string | undefined;\n /** Native disabled state for the complete set. */\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Require one option to be selected for form validity. */\n @Prop({ reflect: true }) required: boolean = false;\n /** Validation message used when a required set has no selection. */\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Layout direction for the option set. */\n @Prop() direction: 'vertical' | 'horizontal' = 'vertical';\n /** Design-system inactive state for the complete set. */\n @Prop() isInactive: boolean = false;\n /** Accessible name when visible group labeling is unavailable. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Id reference for a visible group label. */\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n\n /** Emitted after user selection with the selected option value. */\n @Event() dsChange!: EventEmitter<string>;\n\n private initialValue = '';\n @State() private formDisabled = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncFormValue();\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n /** Focus the selected option, or the first active option when nothing is selected. */\n @Method()\n async setFocus() {\n this.activeItems.find(item => item.tabIndex === 0)?.focus();\n }\n\n private get activeItems(): HTMLElement[] {\n return Array.from(this.el.querySelectorAll<HTMLElement>('[data-radio-item]:not([data-inactive])'));\n }\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n const items = this.activeItems;\n if (!items.length) return;\n\n const focused = items.find(item => item === document.activeElement);\n if (!focused) return;\n\n const idx = items.indexOf(focused);\n let next = -1;\n\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n next = (idx + 1) % items.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n next = (idx - 1 + items.length) % items.length;\n break;\n case 'Home':\n e.preventDefault();\n next = 0;\n break;\n case 'End':\n e.preventDefault();\n next = items.length - 1;\n break;\n }\n\n if (next >= 0) {\n items[next].focus();\n const nextValue = items[next].dataset['value'];\n if (nextValue && nextValue !== this.value) {\n this.value = nextValue;\n this.dsChange.emit(nextValue);\n }\n }\n }\n\n private selectItem(optValue: string) {\n if (this.isInactive || this.disabled || this.formDisabled) return;\n if (optValue !== this.value) {\n this.value = optValue;\n this.dsChange.emit(optValue);\n }\n }\n\n render() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const invalid = this.required && !inactive && this.value.length === 0;\n const selectedIdx = this.options.findIndex(option => option.value === this.value);\n const firstActiveIdx = this.options.findIndex(option => !inactive && !option.isInactive);\n const focusableIdx = selectedIdx >= 0 && !inactive && !this.options[selectedIdx]?.isInactive\n ? selectedIdx\n : firstActiveIdx;\n\n return (\n <Host\n role=\"radiogroup\"\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-required={this.required ? 'true' : undefined}\n aria-invalid={invalid ? 'true' : undefined}\n class={{\n radio: true,\n 'radio--horizontal': this.direction === 'horizontal',\n [`radio--${this.size}`]: true,\n }}\n >\n {this.options.map((option, index) => {\n const isItemInactive = inactive || !!option.isInactive;\n const isChecked = option.value === this.value;\n const tabIdx = isItemInactive ? -1 : index === focusableIdx ? 0 : -1;\n const labelId = `ds-radio-${this.instanceId}-label-${index}`;\n const descriptionId = `ds-radio-${this.instanceId}-description-${index}`;\n\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={String(isChecked)}\n aria-disabled={isItemInactive ? 'true' : undefined}\n aria-labelledby={labelId}\n aria-describedby={option.description ? descriptionId : undefined}\n tabIndex={tabIdx}\n data-radio-item\n data-value={option.value}\n data-inactive={isItemInactive || undefined}\n class={{\n radio__item: true,\n 'radio__item--described': Boolean(option.description),\n [`ds-control--${this.size}`]: true,\n 'ds-control-inactive': isItemInactive,\n 'ds-focus-ring-inset': !isItemInactive,\n 'ds-interaction-fill': !isItemInactive,\n }}\n onClick={() => !isItemInactive && this.selectItem(option.value)}\n onKeyDown={(e: KeyboardEvent) => {\n if ((e.key === ' ' || e.key === 'Enter') && !isItemInactive) {\n e.preventDefault();\n this.selectItem(option.value);\n }\n }}\n >\n <span class=\"radio__placement ds-interaction-fill__content\" aria-hidden=\"true\">\n <span class={{ radio__circle: true, 'radio__circle--checked': isChecked }}>\n {isChecked && <span class=\"radio__dot\" />}\n </span>\n </span>\n <span class=\"radio__copy ds-interaction-fill__content\">\n <ds-text\n class=\"radio__label\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[this.size]}\n textId={labelId}\n >\n {option.label}\n </ds-text>\n {option.description ? (\n <ds-text\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"secondary\"\n textId={descriptionId}\n >\n {option.description}\n </ds-text>\n ) : null}\n </span>\n </div>\n );\n })}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["agentSourceListCss","AgentSourceList","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","items","heading","open","hostname","href","URL","render","length","h","Host","class","onToggle","event","dsOpenChange","emit","currentTarget","name","size","color","variant","emphasis","map","source","resolveSafeUrl","url","target","rel","title","description"],"sources":["src/wc/components/AgentSourceList/AgentSourceList.css?tag=ds-agent-source-list&encapsulation=scoped","src/wc/components/AgentSourceList/AgentSourceList.tsx"],"sourcesContent":["@import '../../utils/text-decoration.css';\n\n:host { display: block; }\n.agent-sources { border-block-start: var(--dimension-stroke-width-012) solid var(--color-border-tertiary); }\nsummary { align-items: center; cursor: default; display: flex; gap: var(--dimension-space-050); list-style: none; padding-block: var(--dimension-space-075); }\nsummary::-webkit-details-marker { display: none; }\ndetails[open] summary ds-icon { transform: rotate(90deg); }\nol { display: grid; gap: var(--dimension-space-075); margin: 0; padding: 0 0 var(--dimension-space-075) var(--dimension-space-150); }\nli { display: grid; gap: var(--dimension-space-025); }\na { --ds-text-decoration-color: var(--color-foreground-tertiary); align-items: center; color: inherit; display: inline-flex; gap: var(--dimension-space-025); width: fit-content; }\n\n@media (prefers-reduced-motion: no-preference) { summary ds-icon { transition: transform var(--effect-motion-short-2); } }\n","import { Component, Event, EventEmitter, Prop, h, Host } from '@stencil/core';\nimport { resolveSafeUrl } from '../../utils';\nimport type { AgentSource } from '../conversation-types';\n\n@Component({ tag: 'ds-agent-source-list', styleUrl: 'AgentSourceList.css', scoped: true })\nexport class AgentSourceList {\n @Prop() items: AgentSource[] = [];\n @Prop() heading: string = 'Sources';\n @Prop() open: boolean = false;\n\n @Event() dsOpenChange!: EventEmitter<{ open: boolean }>;\n\n private hostname(href: string): string {\n try {\n return new URL(href).hostname;\n } catch {\n return '';\n }\n }\n\n render() {\n if (!this.items.length) return null;\n return (\n <Host>\n <details\n class=\"agent-sources\"\n open={this.open}\n onToggle={(event: Event) =>\n this.dsOpenChange.emit({\n open: (event.currentTarget as HTMLDetailsElement).open,\n })\n }\n >\n <summary>\n <ds-icon name=\"ChevronRight\" size=\"xs\" color=\"inherit\" />\n <ds-text variant=\"text-body-small\" emphasis>{this.heading} · {this.items.length}</ds-text>\n </summary>\n <ol>\n {this.items.map(source => {\n const href = resolveSafeUrl(source.url);\n const hostname = href ? this.hostname(href) : '';\n return <li>\n {href\n ? <a\n class=\"ds-text-decoration\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`${source.title} (${hostname}, opens in a new tab)`}\n ><ds-text variant=\"text-body-small\" emphasis>{source.title}</ds-text><ds-icon name=\"ExternalLink\" size=\"xs\" color=\"inherit\" /></a>\n : <ds-text variant=\"text-body-small\" emphasis>{source.title}</ds-text>}\n {hostname ? <ds-text variant=\"text-caption\" color=\"secondary\">{hostname}</ds-text> : null}\n {source.description ? <ds-text variant=\"text-body-small\" color=\"secondary\">{source.description}</ds-text> : null}\n </li>;\n })}\n </ol>\n </details>\n </Host>\n );\n }\n}\n"],"mappings":"8KAAA,MAAMA,EAAqB,IAAM,mnF,MCKpBC,EAAeC,EAAA,MAAAD,UAAAE,EAD5B,WAAAC,CAAAC,G,uFAEUC,KAAAC,MAAuB,GACvBD,KAAAE,QAAkB,UAClBF,KAAAG,KAAgB,KAoDzB,CAhDS,QAAAC,CAASC,GACf,IACE,OAAO,IAAIC,IAAID,GAAMD,Q,CACrB,MACA,MAAO,E,EAIX,MAAAG,GACE,IAAKP,KAAKC,MAAMO,OAAQ,OAAO,KAC/B,OACEC,EAACC,EAAI,KACHD,EAAA,WACEE,MAAM,gBACNR,KAAMH,KAAKG,KACXS,SAAWC,GACTb,KAAKc,aAAaC,KAAK,CACrBZ,KAAOU,EAAMG,cAAqCb,QAItDM,EAAA,eACEA,EAAA,WAASQ,KAAK,eAAeC,KAAK,KAAKC,MAAM,YAC7CV,EAAA,WAASW,QAAQ,kBAAkBC,SAAQ,MAAErB,KAAKE,QAAO,MAAKF,KAAKC,MAAMO,SAE3EC,EAAA,UACGT,KAAKC,MAAMqB,KAAIC,IACd,MAAMlB,EAAOmB,EAAeD,EAAOE,KACnC,MAAMrB,EAAWC,EAAOL,KAAKI,SAASC,GAAQ,GAC9C,OAAOI,EAAA,UACJJ,EACGI,EAAA,KACEE,MAAM,qBACNN,KAAMA,EACNqB,OAAO,SACPC,IAAI,sBAAqB,aACb,GAAGJ,EAAOK,UAAUxB,0BACjCK,EAAA,WAASW,QAAQ,kBAAkBC,SAAQ,MAAEE,EAAOK,OAAgBnB,EAAA,WAASQ,KAAK,eAAeC,KAAK,KAAKC,MAAM,aAClHV,EAAA,WAASW,QAAQ,kBAAkBC,SAAQ,MAAEE,EAAOK,OACvDxB,EAAWK,EAAA,WAASW,QAAQ,eAAeD,MAAM,aAAaf,GAAsB,KACpFmB,EAAOM,YAAcpB,EAAA,WAASW,QAAQ,kBAAkBD,MAAM,aAAaI,EAAOM,aAAyB,KACzG,M","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as t,H as e,h as s,a as r,t as i}from"./index.js";function d(t){return`ds-text--${t.replace(/^text-/,"")}`}function a(t){return t==="span"||t==="label"?"ds-text--inline-box":"ds-text--block-box"}const o=()=>`.ds-text--display-medium.sc-ds-text-h,.ds-text--display-medium.sc-ds-text{font-size:var(--typography-fontsize-3xl);line-height:var(--typography-lineheight-3xl)}.ds-text--display-small.sc-ds-text-h,.ds-text--display-small.sc-ds-text{font-size:var(--typography-fontsize-2xl);line-height:var(--typography-lineheight-2xl)}.ds-text--title-large.sc-ds-text-h,.ds-text--title-large.sc-ds-text{font-size:var(--typography-fontsize-xl);line-height:var(--typography-lineheight-xl)}.ds-text--title-medium.sc-ds-text-h,.ds-text--title-medium.sc-ds-text{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--title-small.sc-ds-text-h,.ds-text--title-small.sc-ds-text{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-large.sc-ds-text-h,.ds-text--body-large.sc-ds-text{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--body-medium.sc-ds-text-h,.ds-text--body-medium.sc-ds-text{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-small.sc-ds-text-h,.ds-text--body-small.sc-ds-text{font-size:var(--typography-fontsize-sm);line-height:var(--typography-lineheight-sm)}.ds-text--caption.sc-ds-text-h,.ds-text--caption.sc-ds-text{font-size:var(--typography-fontsize-xs);line-height:var(--typography-lineheight-xs);text-transform:uppercase}.ds-text--display-medium.ds-text--emphasis.sc-ds-text-h,.ds-text--display-small.ds-text--emphasis.sc-ds-text-h,.ds-text--display-medium.ds-text--emphasis.sc-ds-text,.ds-text--display-small.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-bold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--display-medium.ds-text--regular.sc-ds-text-h,.ds-text--display-small.ds-text--regular.sc-ds-text-h,.ds-text--display-medium.ds-text--regular.sc-ds-text,.ds-text--display-small.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-large.ds-text--emphasis.sc-ds-text-h,.ds-text--title-large.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--title-large.ds-text--regular.sc-ds-text-h,.ds-text--title-large.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--emphasis.sc-ds-text-h,.ds-text--title-small.ds-text--emphasis.sc-ds-text-h,.ds-text--title-medium.ds-text--emphasis.sc-ds-text,.ds-text--title-small.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--regular.sc-ds-text-h,.ds-text--title-small.ds-text--regular.sc-ds-text-h,.ds-text--title-medium.ds-text--regular.sc-ds-text,.ds-text--title-small.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-large.ds-text--emphasis.sc-ds-text-h,.ds-text--body-medium.ds-text--emphasis.sc-ds-text-h,.ds-text--body-large.ds-text--emphasis.sc-ds-text,.ds-text--body-medium.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--body-large.ds-text--regular.sc-ds-text-h,.ds-text--body-medium.ds-text--regular.sc-ds-text-h,.ds-text--body-large.ds-text--regular.sc-ds-text,.ds-text--body-medium.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--emphasis.sc-ds-text-h,.ds-text--body-small.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--regular.sc-ds-text-h,.ds-text--body-small.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-none)}.ds-text--caption.ds-text--emphasis.sc-ds-text-h,.ds-text--caption.ds-text--emphasis.sc-ds-text{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-positive)}.ds-text--caption.ds-text--regular.sc-ds-text-h,.ds-text--caption.ds-text--regular.sc-ds-text{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-positive)}@media (forced-colors: active){.sc-ds-text:root,.sc-ds-text-h,.ds-forced-colors-scope.sc-ds-text{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}@keyframes ds-shimmer-text-motion{0%{background-position:100% 0}76.923%{background-position:0 0}100%{background-position:0 0}}@keyframes ds-shimmer-surface-motion{0%{background-position:100% 0}76.923%{background-position:0 0}100%{background-position:0 0}}.ds-shimmer-text.sc-ds-text{--ds-shimmer-base:currentColor;--ds-shimmer-duration:var(--effect-animation-duration-long-2);--ds-shimmer-repeat-delay:var(--effect-animation-delay-short-3);--ds-shimmer-cycle-duration:calc( var(--ds-shimmer-duration) + var(--ds-shimmer-repeat-delay) );--ds-shimmer-easing:var(--effect-animation-easing-linear);--ds-shimmer-spread:var(--dimension-size-500);--ds-shimmer-travel:calc( var(--dimension-size-800) + var(--dimension-size-500) + var(--dimension-size-200) );background-color:var(--ds-shimmer-base);background-image:linear-gradient( 330deg, transparent calc(50% - var(--ds-shimmer-spread)), var(--ds-shimmer, var(--color-shimmer-shimmer)) 50%, transparent calc(50% + var(--ds-shimmer-spread)) );background-repeat:no-repeat;background-position:100% 0;background-size:calc( 200% + var(--ds-shimmer-spread) * 2 + var(--ds-shimmer-travel) * 2 ) 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:ds-shimmer-text-motion var(--ds-shimmer-cycle-duration) var(--ds-shimmer-easing) infinite}.ds-shimmer-surface.sc-ds-text{--ds-shimmer-surface-base:var(--color-foreground-quaternary);--ds-shimmer-duration:var(--effect-animation-duration-long-2);--ds-shimmer-repeat-delay:var(--effect-animation-delay-short-3);--ds-shimmer-cycle-duration:calc( var(--ds-shimmer-duration) + var(--ds-shimmer-repeat-delay) );--ds-shimmer-easing:var(--effect-animation-easing-linear);--ds-shimmer-spread:var(--dimension-size-500);--ds-shimmer-travel:calc( var(--dimension-size-800) + var(--dimension-size-500) + var(--dimension-size-200) );position:relative;overflow:hidden;background-color:var(--ds-shimmer-surface-base)}.ds-shimmer-surface.sc-ds-text::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient( 330deg, transparent calc(50% - var(--ds-shimmer-spread)), var(--ds-shimmer, var(--color-shimmer-shimmer)) 50%, transparent calc(50% + var(--ds-shimmer-spread)) );background-repeat:no-repeat;background-position:100% 0;background-size:calc( 200% + var(--ds-shimmer-spread) * 2 + var(--ds-shimmer-travel) * 2 ) 100%;animation:ds-shimmer-surface-motion var(--ds-shimmer-cycle-duration) var(--ds-shimmer-easing) infinite}@media (prefers-reduced-motion: reduce){.ds-shimmer-text.sc-ds-text{animation:none;background-image:none;-webkit-text-fill-color:currentColor}.ds-shimmer-surface.sc-ds-text::after{display:none;animation:none}}@media (forced-colors: active){.ds-shimmer-text.sc-ds-text{animation:none;background-image:none;-webkit-text-fill-color:currentColor}.ds-shimmer-surface.sc-ds-text{background-color:var(--ds-forced-color-disabled)}.ds-shimmer-surface.sc-ds-text::after{display:none;animation:none}}.sc-ds-text-h{box-sizing:border-box;max-width:100%;min-width:0;margin:0;padding:0;border:0;font-family:var(--typography-font-family-ui)}.sc-ds-text-h:where(.ds-text--inline-box){display:inline-block}.sc-ds-text-h:where(.ds-text--block-box){display:block;width:100%}.ds-text__element.sc-ds-text{display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;border:0;font:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;text-transform:inherit;text-align:inherit;text-decoration:inherit;text-underline-offset:inherit;font-style:inherit;font-variant-numeric:inherit;font-feature-settings:inherit;-webkit-user-select:inherit;user-select:inherit;white-space:inherit;text-wrap:inherit;overflow-wrap:inherit;word-break:inherit;overflow:inherit;text-overflow:inherit}.ds-text--truncate-1.sc-ds-text-h{overflow:hidden}.ds-text--truncate-1.sc-ds-text-h .ds-text__element.sc-ds-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-text--truncate-2.sc-ds-text-h,.ds-text--truncate-3.sc-ds-text-h,.ds-text--truncate-4.sc-ds-text-h,.ds-text--truncate-5.sc-ds-text-h{overflow:hidden}.ds-text--truncate-2.sc-ds-text-h .ds-text__element.sc-ds-text,.ds-text--truncate-3.sc-ds-text-h .ds-text__element.sc-ds-text,.ds-text--truncate-4.sc-ds-text-h .ds-text__element.sc-ds-text,.ds-text--truncate-5.sc-ds-text-h .ds-text__element.sc-ds-text{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.ds-text--truncate-2.sc-ds-text-h .ds-text__element.sc-ds-text{-webkit-line-clamp:2}.ds-text--truncate-3.sc-ds-text-h .ds-text__element.sc-ds-text{-webkit-line-clamp:3}.ds-text--truncate-4.sc-ds-text-h .ds-text__element.sc-ds-text{-webkit-line-clamp:4}.ds-text--truncate-5.sc-ds-text-h .ds-text__element.sc-ds-text{-webkit-line-clamp:5}.ds-text--nowrap.sc-ds-text-h,.ds-text--nowrap.sc-ds-text-h .ds-text__element.sc-ds-text{white-space:nowrap;word-break:normal;overflow:hidden;text-overflow:ellipsis;min-width:0}.ds-text--balance.sc-ds-text-h,.ds-text--balance.sc-ds-text-h .ds-text__element.sc-ds-text{text-wrap:balance}.ds-text--pretty.sc-ds-text-h,.ds-text--pretty.sc-ds-text-h .ds-text__element.sc-ds-text{text-wrap:pretty}.ds-text--color-primary.sc-ds-text-h{color:var(--color-foreground-primary)}.ds-text--color-secondary.sc-ds-text-h{color:var(--color-foreground-secondary)}.ds-text--color-tertiary.sc-ds-text-h{color:var(--color-foreground-tertiary)}.ds-text--color-quaternary.sc-ds-text-h{color:var(--color-foreground-quaternary)}.ds-text--color-brand.sc-ds-text-h{color:var(--color-foreground-bold-brand)}.ds-text--color-negative.sc-ds-text-h{color:var(--color-foreground-bold-negative)}.ds-text--color-positive.sc-ds-text-h{color:var(--color-foreground-bold-positive)}.ds-text--color-warning.sc-ds-text-h{color:var(--color-foreground-bold-warning)}.ds-text--color-caution.sc-ds-text-h{color:var(--color-foreground-bold-caution)}.ds-text--color-ai.sc-ds-text-h{color:var(--color-foreground-bold-ai)}.ds-text--color-on-strong.sc-ds-text-h{color:var(--color-foreground-on-strong-background-primary)}.ds-text--color-on-bold.sc-ds-text-h{color:var(--color-foreground-on-bold-background-primary)}.ds-text--decoration-underline.sc-ds-text-h,.ds-text--decoration-dotted-underline.sc-ds-text-h{text-decoration-color:var(--ds-text-decoration-color, var(--color-foreground-tertiary));text-decoration-thickness:var(--ds-text-decoration-thickness, var(--dimension-stroke-width-012));text-underline-offset:var(--ds-text-decoration-offset, var(--dimension-space-025))}.ds-text--decoration-underline.sc-ds-text-h{text-decoration-line:underline}.ds-text--decoration-dotted-underline.sc-ds-text-h{text-decoration-line:underline;text-decoration-style:dotted}.ds-text--italic.sc-ds-text-h{font-style:italic}.ds-text--font-feature-tabular-nums.sc-ds-text-h{font-variant-numeric:tabular-nums;font-feature-settings:'tnum'}.ds-text--align-left.sc-ds-text-h{text-align:left}.ds-text--align-center.sc-ds-text-h{text-align:center}.ds-text--align-right.sc-ds-text-h{text-align:right}`;const n=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.variant="text-body-medium";this.emphasis=false;this.color="inherit";this.italic=false;this.shimmer=false;this.lineTruncation="none";this.fontFeature="normal";this.as="p"}render(){const t=this.as;const e=t=>typeof t==="string"&&t.startsWith("var(--");const i=Number(this.lineTruncation);const o={"ds-text":true,[a(this.as)]:true,[d(this.variant)]:true,"ds-text--emphasis":this.emphasis,"ds-text--regular":!this.emphasis,"ds-text--nowrap":this.wrap==="nowrap","ds-text--balance":this.wrap==="balance","ds-text--pretty":this.wrap==="pretty","ds-text--truncate-1":i===1&&this.wrap!=="nowrap","ds-text--truncate-2":i===2&&this.wrap!=="nowrap","ds-text--truncate-3":i===3&&this.wrap!=="nowrap","ds-text--truncate-4":i===4&&this.wrap!=="nowrap","ds-text--truncate-5":i===5&&this.wrap!=="nowrap","ds-text--color-primary":this.color==="primary","ds-text--color-secondary":this.color==="secondary","ds-text--color-tertiary":this.color==="tertiary","ds-text--color-quaternary":this.color==="quaternary","ds-text--color-brand":this.color==="brand","ds-text--color-negative":this.color==="negative","ds-text--color-positive":this.color==="positive","ds-text--color-warning":this.color==="warning","ds-text--color-caution":this.color==="caution","ds-text--color-ai":this.color==="ai","ds-text--color-on-strong":this.color==="on-strong","ds-text--color-on-bold":this.color==="on-bold","ds-text--color-inherit":this.color==="inherit","ds-text--decoration-underline":this.decoration==="underline","ds-text--decoration-dotted-underline":this.decoration==="dotted-underline","ds-text--italic":this.italic,"ds-text--align-left":this.align==="left","ds-text--align-center":this.align==="center","ds-text--align-right":this.align==="right","ds-text--font-feature-tabular-nums":this.fontFeature==="tabular-nums"};const n=this.color&&e(this.color)?{color:this.color}:undefined;const c={};if(this.as==="label"&&this.for)c["for"]=this.for;if(this.textId)c["id"]=this.textId;return s(r,{key:"d23be6df058b95db801969b0f84460b6e63dba05",class:o,style:n},s(t,{key:"110af41049c4355cbd8c83057a06c4305f79dcd1",class:{"ds-text__element":true,"ds-shimmer-text":this.shimmer},...c},s("slot",{key:"08047bf24986f8192295b977cde7ed99931b2ef1"})))}static get style(){return o()}},[262,"ds-text",{variant:[1],emphasis:[4],color:[1],decoration:[1],italic:[4],shimmer:[4],align:[1],lineTruncation:[8,"line-truncation"],wrap:[1],fontFeature:[1,"font-feature"],as:[1],for:[1],textId:[1,"text-id"]}]);function c(){if(typeof customElements==="undefined"){return}const t=["ds-text"];t.forEach((t=>{switch(t){case"ds-text":if(!customElements.get(i(t))){customElements.define(i(t),n)}break}}))}c();export{n as T,c as d};
|
|
2
|
-
//# sourceMappingURL=p-CAnnQL1F.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["textVariantClass","variant","replace","textDisplayClass","element","textCss","Text","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","emphasis","color","italic","shimmer","lineTruncation","fontFeature","as","render","Tag","isCustomColor","c","startsWith","truncationLines","Number","cls","wrap","decoration","align","style","undefined","extraProps","for","textId","h","Host","key","class"],"sources":["src/wc/components/Text/text-utils.ts","src/wc/components/Text/Text.css?tag=ds-text&encapsulation=scoped","src/wc/components/Text/Text.tsx"],"sourcesContent":["import type { TextElement, TextVariant } from './text-types';\n\n/** `text-body-medium` → `ds-text--body-medium` */\nexport function textVariantClass(variant: TextVariant): string {\n return `ds-text--${variant.replace(/^text-/, '')}`;\n}\n\n/** Inline semantics get a measurable inline box; paragraphs/headings get a block box. */\nexport function textDisplayClass(element: TextElement): string {\n return element === 'span' || element === 'label'\n ? 'ds-text--inline-box'\n : 'ds-text--block-box';\n}\n","@import '../../utils/typography.css';\n@import '../../utils/shimmer.css';\n\n:host {\n box-sizing: border-box;\n max-width: 100%;\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n font-family: var(--typography-font-family-ui);\n}\n\n:host(:where(.ds-text--inline-box)) {\n display: inline-block;\n}\n\n:host(:where(.ds-text--block-box)) {\n display: block;\n width: 100%;\n}\n\n/*\n * The host is the measurable typography box. The semantic inner element fills\n * it and inherits every text metric without adding margins, padding, or its own\n * line-height strut. One rendered line therefore measures exactly one token\n * line-height; N lines measure N × that token.\n */\n.ds-text__element {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n color: inherit;\n text-transform: inherit;\n text-align: inherit;\n text-decoration: inherit;\n text-underline-offset: inherit;\n font-style: inherit;\n font-variant-numeric: inherit;\n font-feature-settings: inherit;\n -webkit-user-select: inherit;\n user-select: inherit;\n white-space: inherit;\n text-wrap: inherit;\n overflow-wrap: inherit;\n word-break: inherit;\n /* Consumer truncation on the host (PanelNav, ChartLegend, …) must reach the\n text node — overflow/text-overflow are not inherited by default. */\n overflow: inherit;\n text-overflow: inherit;\n}\n\n/* ── Truncation ─────────────────────────────────────────────────────────── */\n\n:host(.ds-text--truncate-1) {\n overflow: hidden;\n}\n\n:host(.ds-text--truncate-1) .ds-text__element {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host(.ds-text--truncate-2),\n:host(.ds-text--truncate-3),\n:host(.ds-text--truncate-4),\n:host(.ds-text--truncate-5) {\n overflow: hidden;\n}\n\n:host(.ds-text--truncate-2) .ds-text__element,\n:host(.ds-text--truncate-3) .ds-text__element,\n:host(.ds-text--truncate-4) .ds-text__element,\n:host(.ds-text--truncate-5) .ds-text__element {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n}\n\n:host(.ds-text--truncate-2) .ds-text__element { -webkit-line-clamp: 2; }\n:host(.ds-text--truncate-3) .ds-text__element { -webkit-line-clamp: 3; }\n:host(.ds-text--truncate-4) .ds-text__element { -webkit-line-clamp: 4; }\n:host(.ds-text--truncate-5) .ds-text__element { -webkit-line-clamp: 5; }\n\n/* ── Wrap ───────────────────────────────────────────────────────────────── */\n\n:host(.ds-text--nowrap),\n:host(.ds-text--nowrap) .ds-text__element {\n white-space: nowrap;\n word-break: normal;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n:host(.ds-text--balance),\n:host(.ds-text--balance) .ds-text__element { text-wrap: balance; }\n\n:host(.ds-text--pretty),\n:host(.ds-text--pretty) .ds-text__element { text-wrap: pretty; }\n\n/* ── Color ──────────────────────────────────────────────────────────────── */\n\n:host(.ds-text--color-primary) { color: var(--color-foreground-primary); }\n:host(.ds-text--color-secondary) { color: var(--color-foreground-secondary); }\n:host(.ds-text--color-tertiary) { color: var(--color-foreground-tertiary); }\n:host(.ds-text--color-quaternary) { color: var(--color-foreground-quaternary); }\n:host(.ds-text--color-brand) { color: var(--color-foreground-bold-brand); }\n:host(.ds-text--color-negative) { color: var(--color-foreground-bold-negative); }\n:host(.ds-text--color-positive) { color: var(--color-foreground-bold-positive); }\n:host(.ds-text--color-warning) { color: var(--color-foreground-bold-warning); }\n:host(.ds-text--color-caution) { color: var(--color-foreground-bold-caution); }\n:host(.ds-text--color-ai) { color: var(--color-foreground-bold-ai); }\n:host(.ds-text--color-on-strong) { color: var(--color-foreground-on-strong-background-primary); }\n:host(.ds-text--color-on-bold) { color: var(--color-foreground-on-bold-background-primary); }\n/*\n * The inherit state intentionally has no declaration. `color` inherits\n * naturally, while omitting a host rule lets an owning component apply a\n * semantic token directly to ds-text without depending on stylesheet order.\n */\n\n/* ── Decorations ─────────────────────────────────────────────────────────── */\n\n:host(.ds-text--decoration-underline),\n:host(.ds-text--decoration-dotted-underline) {\n text-decoration-color: var(--ds-text-decoration-color, var(--color-foreground-tertiary));\n text-decoration-thickness: var(--ds-text-decoration-thickness, var(--dimension-stroke-width-012));\n text-underline-offset: var(--ds-text-decoration-offset, var(--dimension-space-025));\n}\n\n:host(.ds-text--decoration-underline) {\n text-decoration-line: underline;\n}\n\n:host(.ds-text--decoration-dotted-underline) {\n text-decoration-line: underline;\n text-decoration-style: dotted;\n}\n\n/* ── Style ──────────────────────────────────────────────────────────────── */\n\n:host(.ds-text--italic) { font-style: italic; }\n\n:host(.ds-text--font-feature-tabular-nums) {\n font-variant-numeric: tabular-nums;\n font-feature-settings: 'tnum';\n}\n\n/* ── Align ──────────────────────────────────────────────────────────────── */\n\n:host(.ds-text--align-left) { text-align: left; }\n:host(.ds-text--align-center) { text-align: center; }\n:host(.ds-text--align-right) { text-align: right; }\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport { textDisplayClass, textVariantClass } from './text-utils';\nimport type {\n TextAlign,\n TextColor,\n TextDecoration,\n TextElement,\n TextFontFeature,\n TextVariant,\n LineTruncation,\n TextWrap,\n} from './text-types';\n\n@Component({\n tag: 'ds-text',\n styleUrl: 'Text.css',\n scoped: true,\n})\nexport class Text {\n @Prop() variant: TextVariant = 'text-body-medium';\n /**\n * Heavier weight + tighter letter-spacing for the variant.\n * `false` (default): one step below emphasis (display semibold, title/body\n * medium, caption medium).\n * `true`: display bold, title/caption semibold, body medium.\n */\n @Prop() emphasis: boolean = false;\n /**\n * Semantic foreground color token or CSS variable. `tertiary` and the\n * still-fainter `quaternary` are restricted to genuinely inactive/disabled\n * UI content or purely decorative content; prefer the owning control's\n * inactive state whenever one exists.\n */\n @Prop() color: TextColor = 'inherit';\n /** Link underline or dotted hidden-interaction affordance; does not add semantics. */\n @Prop() decoration: TextDecoration | undefined;\n @Prop() italic: boolean = false;\n /** Animate the visible glyphs with the shared loading shimmer treatment. */\n @Prop() shimmer: boolean = false;\n @Prop() align: TextAlign | undefined;\n @Prop() lineTruncation: LineTruncation = 'none';\n @Prop() wrap: TextWrap | undefined;\n @Prop() fontFeature: TextFontFeature = 'normal';\n @Prop() as: TextElement = 'p';\n /** Maps to `for` attribute on <label> elements. */\n @Prop() for: string | undefined;\n /** Forwarded to the inner element (e.g. aria-labelledby targets). */\n @Prop() textId: string | undefined;\n\n render() {\n // Polymorphic element: TSX treats a variable tag as a component, so a\n // dynamic intrinsic element name must be cast to `any` to render.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const Tag = this.as as any;\n const isCustomColor = (c: TextColor) => typeof c === 'string' && c.startsWith('var(--');\n const truncationLines = Number(this.lineTruncation);\n\n const cls: Record<string, boolean> = {\n 'ds-text': true,\n [textDisplayClass(this.as)]: true,\n [textVariantClass(this.variant)]: true,\n 'ds-text--emphasis': this.emphasis,\n 'ds-text--regular': !this.emphasis,\n 'ds-text--nowrap': this.wrap === 'nowrap',\n 'ds-text--balance': this.wrap === 'balance',\n 'ds-text--pretty': this.wrap === 'pretty',\n 'ds-text--truncate-1': truncationLines === 1 && this.wrap !== 'nowrap',\n 'ds-text--truncate-2': truncationLines === 2 && this.wrap !== 'nowrap',\n 'ds-text--truncate-3': truncationLines === 3 && this.wrap !== 'nowrap',\n 'ds-text--truncate-4': truncationLines === 4 && this.wrap !== 'nowrap',\n 'ds-text--truncate-5': truncationLines === 5 && this.wrap !== 'nowrap',\n 'ds-text--color-primary': this.color === 'primary',\n 'ds-text--color-secondary': this.color === 'secondary',\n 'ds-text--color-tertiary': this.color === 'tertiary',\n 'ds-text--color-quaternary': this.color === 'quaternary',\n 'ds-text--color-brand': this.color === 'brand',\n 'ds-text--color-negative': this.color === 'negative',\n 'ds-text--color-positive': this.color === 'positive',\n 'ds-text--color-warning': this.color === 'warning',\n 'ds-text--color-caution': this.color === 'caution',\n 'ds-text--color-ai': this.color === 'ai',\n 'ds-text--color-on-strong': this.color === 'on-strong',\n 'ds-text--color-on-bold': this.color === 'on-bold',\n 'ds-text--color-inherit': this.color === 'inherit',\n 'ds-text--decoration-underline': this.decoration === 'underline',\n 'ds-text--decoration-dotted-underline': this.decoration === 'dotted-underline',\n 'ds-text--italic': this.italic,\n 'ds-text--align-left': this.align === 'left',\n 'ds-text--align-center': this.align === 'center',\n 'ds-text--align-right': this.align === 'right',\n 'ds-text--font-feature-tabular-nums': this.fontFeature === 'tabular-nums',\n };\n\n const style = this.color && isCustomColor(this.color)\n ? { color: this.color as string }\n : undefined;\n\n const extraProps: Record<string, string> = {};\n if (this.as === 'label' && this.for) extraProps['for'] = this.for;\n if (this.textId) extraProps['id'] = this.textId;\n\n return (\n <Host class={cls} style={style}>\n <Tag\n class={{\n 'ds-text__element': true,\n 'ds-shimmer-text': this.shimmer,\n }}\n {...extraProps}\n >\n <slot />\n </Tag>\n </Host>\n );\n }\n}\n"],"mappings":"2DAGM,SAAUA,EAAiBC,GAC/B,MAAO,YAAYA,EAAQC,QAAQ,SAAU,KAC/C,CAGM,SAAUC,EAAiBC,GAC/B,OAAOA,IAAY,QAAUA,IAAY,QACrC,sBACA,oBACN,CCZA,MAAMC,EAAU,IAAM,qnX,MCkBTC,EAAIC,EAAA,MAAAD,UAAAE,EALjB,WAAAC,CAAAC,G,4CAMUC,KAAAV,QAAuB,mBAOvBU,KAAAC,SAAoB,MAOpBD,KAAAE,MAAmB,UAGnBF,KAAAG,OAAkB,MAElBH,KAAAI,QAAmB,MAEnBJ,KAAAK,eAAiC,OAEjCL,KAAAM,YAA+B,SAC/BN,KAAAO,GAAkB,GAwE3B,CAlEC,MAAAC,GAIE,MAAMC,EAAMT,KAAKO,GACjB,MAAMG,EAAiBC,UAAwBA,IAAM,UAAYA,EAAEC,WAAW,UAC9E,MAAMC,EAAkBC,OAAOd,KAAKK,gBAEpC,MAAMU,EAA+B,CACnC,UAAW,KACX,CAACvB,EAAiBQ,KAAKO,KAAM,KAC7B,CAAClB,EAAiBW,KAAKV,UAAW,KAClC,oBAAqBU,KAAKC,SAC1B,oBAAqBD,KAAKC,SAC1B,kBAAmBD,KAAKgB,OAAS,SACjC,mBAAoBhB,KAAKgB,OAAS,UAClC,kBAAmBhB,KAAKgB,OAAS,SACjC,sBAAuBH,IAAoB,GAAKb,KAAKgB,OAAS,SAC9D,sBAAuBH,IAAoB,GAAKb,KAAKgB,OAAS,SAC9D,sBAAuBH,IAAoB,GAAKb,KAAKgB,OAAS,SAC9D,sBAAuBH,IAAoB,GAAKb,KAAKgB,OAAS,SAC9D,sBAAuBH,IAAoB,GAAKb,KAAKgB,OAAS,SAC9D,yBAA4BhB,KAAKE,QAAU,UAC3C,2BAA4BF,KAAKE,QAAU,YAC3C,0BAA4BF,KAAKE,QAAU,WAC3C,4BAA6BF,KAAKE,QAAU,aAC5C,uBAA4BF,KAAKE,QAAU,QAC3C,0BAA4BF,KAAKE,QAAU,WAC3C,0BAA4BF,KAAKE,QAAU,WAC3C,yBAA4BF,KAAKE,QAAU,UAC3C,yBAA4BF,KAAKE,QAAU,UAC3C,oBAA4BF,KAAKE,QAAU,KAC3C,2BAA4BF,KAAKE,QAAU,YAC3C,yBAA4BF,KAAKE,QAAU,UAC3C,yBAA4BF,KAAKE,QAAU,UAC3C,gCAAwCF,KAAKiB,aAAe,YAC5D,uCAAwCjB,KAAKiB,aAAe,mBAC5D,kBAAmBjB,KAAKG,OACxB,sBAAyBH,KAAKkB,QAAU,OACxC,wBAAyBlB,KAAKkB,QAAU,SACxC,uBAAyBlB,KAAKkB,QAAU,QACxC,qCAAsClB,KAAKM,cAAgB,gBAG7D,MAAMa,EAAQnB,KAAKE,OAASQ,EAAcV,KAAKE,OAC3C,CAAEA,MAAOF,KAAKE,OACdkB,UAEJ,MAAMC,EAAqC,GAC3C,GAAIrB,KAAKO,KAAO,SAAWP,KAAKsB,IAAKD,EAAW,OAASrB,KAAKsB,IAC9D,GAAItB,KAAKuB,OAAQF,EAAW,MAAQrB,KAAKuB,OAEzC,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,MAAOZ,EAAKI,MAAOA,GACvBK,EAACf,EAAG,CAAAiB,IAAA,2CACFC,MAAO,CACL,mBAAoB,KACpB,kBAAmB3B,KAAKI,YAEtBiB,GAEJG,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
|