@ds-mo/ui 15.3.0 → 15.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +506 -31
- package/dist/angular/ds-checkbox-group.d.ts +12 -0
- package/dist/angular/ds-checkbox-group.js +38 -0
- package/dist/angular/ds-checkbox.d.ts +1 -1
- package/dist/angular/ds-checkbox.js +3 -3
- package/dist/angular/ds-inline-banner-settings.d.ts +12 -0
- package/dist/angular/ds-inline-banner-settings.js +38 -0
- package/dist/angular/ds-radio.d.ts +1 -1
- package/dist/angular/ds-radio.js +3 -3
- package/dist/angular/ds-setting-row-checkbox.d.ts +12 -0
- package/dist/angular/ds-setting-row-checkbox.js +38 -0
- package/dist/angular/ds-setting-row-radio.d.ts +12 -0
- package/dist/angular/ds-setting-row-radio.js +38 -0
- package/dist/angular/ds-setting-row-toggle.d.ts +18 -0
- package/dist/angular/{ds-setting-row.js → ds-setting-row-toggle.js} +12 -12
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +5 -1
- package/dist/angular/proxies.d.ts +5 -1
- package/dist/angular/proxies.js +5 -1
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-response.js.map +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-inverted.js +1 -1
- package/dist/components/ds-button-inverted.js.map +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-action-center.js +1 -1
- package/dist/components/ds-card-action-center.js.map +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +1 -1
- package/dist/components/ds-card-navigation.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-card-settings-scope.js +1 -1
- package/dist/components/ds-card-settings-scope.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +4 -4
- package/dist/components/ds-checkbox-group.js +2 -0
- package/dist/components/ds-checkbox-group.js.map +1 -0
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-group.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-search.js.map +1 -1
- package/dist/components/ds-data-sort.js +1 -1
- package/dist/components/ds-data-toolbar.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-inline-banner-settings.d.ts +11 -0
- package/dist/components/ds-inline-banner-settings.js +2 -0
- package/dist/components/ds-inline-banner-settings.js.map +1 -0
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-date.js.map +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input-time.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-map-cluster-marker.js +1 -1
- package/dist/components/ds-map-entity-marker.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio-tile.js +1 -1
- package/dist/components/ds-radio-tile.js.map +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-setting-row-checkbox.d.ts +11 -0
- package/dist/components/ds-setting-row-checkbox.js +2 -0
- package/dist/components/ds-setting-row-checkbox.js.map +1 -0
- package/dist/components/ds-setting-row-radio.d.ts +11 -0
- package/dist/components/ds-setting-row-radio.js +2 -0
- package/dist/components/ds-setting-row-radio.js.map +1 -0
- package/dist/components/ds-setting-row-toggle.d.ts +11 -0
- package/dist/components/ds-setting-row-toggle.js +2 -0
- package/dist/components/ds-setting-row-toggle.js.map +1 -0
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-time-picker.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/p-7TVdPhGR.js +2 -0
- package/dist/components/{p-DHapI2sf.js.map → p-7TVdPhGR.js.map} +1 -1
- package/dist/components/{p-7V1AhetH.js → p-B0BQCVkq.js} +2 -2
- package/dist/components/{p-Co5MiPNa.js → p-B0EpvBDs.js} +2 -2
- package/dist/components/{p-DFkw6wrS.js → p-B39iJO8F.js} +2 -2
- package/dist/components/p-B9TM6FqC.js +2 -0
- package/dist/components/{p-p_MwknM3.js.map → p-B9TM6FqC.js.map} +1 -1
- package/dist/components/{p-AmT4GlhM.js → p-B9y6azEw.js} +2 -2
- package/dist/components/p-BDdlJZyL.js +2 -0
- package/dist/components/{p-cuZva5tl.js.map → p-BDdlJZyL.js.map} +1 -1
- package/dist/components/{p-CrL9wxZg.js → p-BERXvOCf.js} +2 -2
- package/dist/components/{p-AM_ht6Im.js → p-BFHpU-uU.js} +2 -2
- package/dist/components/{p-B-HOVYoH.js → p-BQspV5U7.js} +2 -2
- package/dist/components/p-BWSIw8AQ.js +2 -0
- package/dist/components/p-BWSIw8AQ.js.map +1 -0
- package/dist/components/p-BhjqYTiY.js +2 -0
- package/dist/components/p-BhjqYTiY.js.map +1 -0
- package/dist/components/{p-C_gJD8l3.js → p-Bk3poU91.js} +2 -2
- package/dist/components/{p-Gb-vTuXr.js → p-BnuNaXR2.js} +2 -2
- package/dist/components/p-BwdnVqAY.js +2 -0
- package/dist/components/{p-BHI4LcGK.js.map → p-BwdnVqAY.js.map} +1 -1
- package/dist/components/p-C4huuwed.js +2 -0
- package/dist/components/{p-tJaC01aE.js.map → p-C4huuwed.js.map} +1 -1
- package/dist/components/{p-BsM37Prt.js → p-C8V4lkVy.js} +2 -2
- package/dist/components/p-CJ1NnOEW.js +2 -0
- package/dist/components/p-CJ1NnOEW.js.map +1 -0
- package/dist/components/p-CPamUzaj.js +2 -0
- package/dist/components/{p-BSuMDPaV.js.map → p-CPamUzaj.js.map} +1 -1
- package/dist/components/{p-BU1B6NW8.js → p-CUDocY23.js} +2 -2
- package/dist/components/{p-BU1B6NW8.js.map → p-CUDocY23.js.map} +1 -1
- package/dist/components/p-CX6ZxUQT.js +2 -0
- package/dist/components/p-CX6ZxUQT.js.map +1 -0
- package/dist/components/{p-C-c8SJ00.js → p-CZNZTcYS.js} +2 -2
- package/dist/components/{p-DQPzqcYR.js → p-CbCN9ew9.js} +2 -2
- package/dist/components/p-CeXf9-X3.js.map +1 -1
- package/dist/components/p-Cgn-BORA.js +2 -0
- package/dist/components/p-Cgn-BORA.js.map +1 -0
- package/dist/components/{p-CzQ_JF6A.js → p-Co1rUdOR.js} +2 -2
- package/dist/components/p-Co1rUdOR.js.map +1 -0
- package/dist/components/{p-D0KD-Nr_.js → p-CwdRaJER.js} +2 -2
- package/dist/components/p-D6FRqNhN.js +2 -0
- package/dist/components/p-D6FRqNhN.js.map +1 -0
- package/dist/components/{p-Cihjy4WY.js → p-D8OWhnID.js} +2 -2
- package/dist/components/p-DCyJ3_PL.js +2 -0
- package/dist/components/{p-fYZK3zqM.js.map → p-DCyJ3_PL.js.map} +1 -1
- package/dist/components/{p-BXSHN1OK.js → p-DIQiHX0q.js} +2 -2
- package/dist/components/{p-z8L-YMi3.js → p-DJDbskZf.js} +2 -2
- package/dist/components/p-DRdoGSGX.js +2 -0
- package/dist/components/{p-DWmYCOKz.js.map → p-DRdoGSGX.js.map} +1 -1
- package/dist/components/{p-Bm3KWMe4.js → p-DSZPO06T.js} +2 -2
- package/dist/components/{p-C3-dcROG.js → p-DSmDyI2o.js} +2 -2
- package/dist/components/{p-DcrdyDRw.js → p-DVEx-Xg9.js} +2 -2
- package/dist/components/{p-Bu4OmhKK.js → p-DXk1eml1.js} +2 -2
- package/dist/components/{p-B7QEpaMe.js → p-DYQa1DVF.js} +2 -2
- package/dist/components/p-DYQa1DVF.js.map +1 -0
- package/dist/components/p-DYsE6HLk.js +2 -0
- package/dist/components/p-DYsE6HLk.js.map +1 -0
- package/dist/components/p-DebLYW7A.js +2 -0
- package/dist/components/p-DebLYW7A.js.map +1 -0
- package/dist/components/{p-Bh1Fx0aW.js → p-DmSnHVW6.js} +2 -2
- package/dist/components/p-Dnt5xUBD.js +2 -0
- package/dist/components/{p-C4VeD49U.js.map → p-Dnt5xUBD.js.map} +1 -1
- package/dist/components/p-Doa2blZT.js +2 -0
- package/dist/components/{p-CztB8Pbq.js.map → p-Doa2blZT.js.map} +1 -1
- package/dist/components/{p-CCpJT31M.js → p-Dyqd-cub.js} +2 -2
- package/dist/components/{p-CCpJT31M.js.map → p-Dyqd-cub.js.map} +1 -1
- package/dist/components/p-DzvTC27M.js +2 -0
- package/dist/components/p-DzvTC27M.js.map +1 -0
- package/dist/components/p-JBki_jyY.js +2 -0
- package/dist/components/{p-BugKaVWc.js.map → p-JBki_jyY.js.map} +1 -1
- package/dist/components/p-MOJmB6vX.js +2 -0
- package/dist/components/{p-iGNHXFZA.js.map → p-MOJmB6vX.js.map} +1 -1
- package/dist/components/{p-BYJtvRQm.js → p-UJMEz8_O.js} +2 -2
- package/dist/components/{p-Bo7GxFBh.js → p-_IqSPt5V.js} +2 -2
- package/dist/components/p-g0jsfEXz.js +2 -0
- package/dist/components/{p-Fkkd3gMB.js.map → p-g0jsfEXz.js.map} +1 -1
- package/dist/components/{p-lADW-TI8.js → p-pp1IQN4Z.js} +2 -2
- package/dist/docs/components.json +701 -13
- package/dist/lib/shell/index.js +1 -1
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lint/index.js +1 -1
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
- package/dist/mcp-data/registry/agent-response.json +2 -2
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/agent-tool-call.json +1 -1
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +1 -1
- package/dist/mcp-data/registry/bar-action.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +4 -4
- package/dist/mcp-data/registry/bar-page-title.json +3 -3
- package/dist/mcp-data/registry/bar-title.json +3 -3
- package/dist/mcp-data/registry/bar-workflow.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-inverted.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +8 -8
- package/dist/mcp-data/registry/calendar.json +1 -1
- package/dist/mcp-data/registry/card-action-center.json +1 -1
- package/dist/mcp-data/registry/card-chart.json +1 -1
- package/dist/mcp-data/registry/card-navigation.json +1 -1
- package/dist/mcp-data/registry/card-overview.json +1 -1
- package/dist/mcp-data/registry/card-setting.json +22 -8
- package/dist/mcp-data/registry/card-settings-scope.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +1 -1
- package/dist/mcp-data/registry/chart.json +1 -1
- package/dist/mcp-data/registry/checkbox-group.json +246 -0
- package/dist/mcp-data/registry/checkbox.json +25 -5
- package/dist/mcp-data/registry/chip.json +1 -1
- package/dist/mcp-data/registry/code-block.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +1 -1
- package/dist/mcp-data/registry/data-customize.json +1 -1
- package/dist/mcp-data/registry/data-filter.json +1 -1
- package/dist/mcp-data/registry/data-group.json +1 -1
- package/dist/mcp-data/registry/data-preferences.json +1 -1
- package/dist/mcp-data/registry/data-saved-views.json +1 -1
- package/dist/mcp-data/registry/data-search.json +1 -1
- package/dist/mcp-data/registry/data-sort.json +1 -1
- package/dist/mcp-data/registry/data-toolbar.json +1 -1
- 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 +1 -1
- package/dist/mcp-data/registry/icon.json +1 -1
- package/dist/mcp-data/registry/inline-banner-settings.json +175 -0
- package/dist/mcp-data/registry/input-date.json +1 -1
- package/dist/mcp-data/registry/input-time.json +1 -1
- package/dist/mcp-data/registry/input.json +1 -1
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/map-cluster-marker.json +1 -1
- package/dist/mcp-data/registry/map-entity-marker.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +1 -1
- package/dist/mcp-data/registry/message-actions.json +1 -1
- package/dist/mcp-data/registry/message-bubble.json +4 -4
- package/dist/mcp-data/registry/message-composer.json +6 -6
- package/dist/mcp-data/registry/message-scroller.json +1 -1
- package/dist/mcp-data/registry/message.json +2 -2
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +1 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/pagination.json +1 -1
- package/dist/mcp-data/registry/panel-nav.json +3 -3
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +3 -3
- package/dist/mcp-data/registry/panel-tool-search.json +2 -2
- package/dist/mcp-data/registry/panel-tools.json +3 -3
- package/dist/mcp-data/registry/paper-texture.json +1 -1
- package/dist/mcp-data/registry/radio-tile.json +5 -4
- package/dist/mcp-data/registry/radio.json +50 -8
- package/dist/mcp-data/registry/registry.json +518 -31
- package/dist/mcp-data/registry/score.json +1 -1
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select.json +1 -1
- package/dist/mcp-data/registry/setting-row-checkbox.json +197 -0
- package/dist/mcp-data/registry/setting-row-radio.json +196 -0
- package/dist/mcp-data/registry/{setting-row.json → setting-row-toggle.json} +45 -25
- package/dist/mcp-data/registry/shell-app.json +3 -3
- package/dist/mcp-data/registry/shell-page.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/swatch-picker.json +1 -1
- package/dist/mcp-data/registry/switch.json +3 -3
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/table.json +1 -1
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/textarea.json +1 -1
- package/dist/mcp-data/registry/time-picker.json +1 -1
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-chart.json +1 -1
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +5 -1
- package/dist/react/components.js +5 -1
- package/dist/react/ds-checkbox-group.d.ts +9 -0
- package/dist/react/ds-checkbox-group.js +12 -0
- package/dist/react/ds-inline-banner-settings.d.ts +9 -0
- package/dist/react/ds-inline-banner-settings.js +12 -0
- package/dist/react/ds-setting-row-checkbox.d.ts +9 -0
- package/dist/react/ds-setting-row-checkbox.js +12 -0
- package/dist/react/ds-setting-row-radio.d.ts +9 -0
- package/dist/react/ds-setting-row-radio.js +12 -0
- package/dist/react/ds-setting-row-toggle.d.ts +12 -0
- package/dist/react/ds-setting-row-toggle.js +12 -0
- package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +2 -0
- package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +4 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +5 -2
- package/dist/types/components/CardSetting/CardSetting.d.ts +12 -2
- package/dist/types/components/Checkbox/Checkbox.d.ts +2 -0
- package/dist/types/components/CheckboxGroup/CheckboxGroup.d.ts +20 -0
- package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +6 -0
- package/dist/types/components/Radio/Radio.d.ts +8 -0
- package/dist/types/components/SettingRowCheckbox/SettingRowCheckbox.d.ts +19 -0
- package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +19 -0
- package/dist/types/components/{SettingRow/SettingRow.d.ts → SettingRowToggle/SettingRowToggle.d.ts} +5 -2
- package/dist/types/components/Switch/Switch.d.ts +7 -0
- package/dist/types/components.d.ts +290 -20
- package/dist/vue/components.d.ts +5 -1
- package/dist/vue/components.js +5 -1
- package/dist/vue/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +1 -1
- package/dist/vue/ds-checkbox-group.js +12 -0
- package/dist/vue/ds-checkbox.js +1 -0
- package/dist/vue/ds-inline-banner-settings.d.ts +3 -0
- package/dist/vue/ds-inline-banner-settings.js +8 -0
- package/dist/vue/ds-radio.js +2 -0
- package/dist/vue/ds-setting-row-checkbox.d.ts +3 -0
- package/dist/vue/ds-setting-row-checkbox.js +11 -0
- package/dist/vue/ds-setting-row-radio.d.ts +3 -0
- package/dist/vue/ds-setting-row-radio.js +11 -0
- package/dist/vue/ds-setting-row-toggle.d.ts +3 -0
- package/dist/vue/ds-setting-row-toggle.js +15 -0
- package/package.json +3 -3
- package/dist/angular/ds-setting-row.d.ts +0 -18
- package/dist/components/ds-setting-row.js +0 -2
- package/dist/components/ds-setting-row.js.map +0 -1
- package/dist/components/p-3bsypMrY.js +0 -2
- package/dist/components/p-3bsypMrY.js.map +0 -1
- package/dist/components/p-B7QEpaMe.js.map +0 -1
- package/dist/components/p-B7bXN-vf.js +0 -2
- package/dist/components/p-B7bXN-vf.js.map +0 -1
- package/dist/components/p-BHI4LcGK.js +0 -2
- package/dist/components/p-BSuMDPaV.js +0 -2
- package/dist/components/p-BVwg5XVz.js +0 -2
- package/dist/components/p-BVwg5XVz.js.map +0 -1
- package/dist/components/p-BugKaVWc.js +0 -2
- package/dist/components/p-C4VeD49U.js +0 -2
- package/dist/components/p-CI7c9kp-.js +0 -2
- package/dist/components/p-CI7c9kp-.js.map +0 -1
- package/dist/components/p-CJD0kLeV.js +0 -2
- package/dist/components/p-CJD0kLeV.js.map +0 -1
- package/dist/components/p-Cc3ZUQlJ.js +0 -2
- package/dist/components/p-Cc3ZUQlJ.js.map +0 -1
- package/dist/components/p-CzQ_JF6A.js.map +0 -1
- package/dist/components/p-CztB8Pbq.js +0 -2
- package/dist/components/p-DCLRAH5i.js +0 -2
- package/dist/components/p-DCLRAH5i.js.map +0 -1
- package/dist/components/p-DHapI2sf.js +0 -2
- package/dist/components/p-DWmYCOKz.js +0 -2
- package/dist/components/p-DX2RyZba.js +0 -2
- package/dist/components/p-DX2RyZba.js.map +0 -1
- package/dist/components/p-Dcn1eDVt.js +0 -2
- package/dist/components/p-Dcn1eDVt.js.map +0 -1
- package/dist/components/p-Fkkd3gMB.js +0 -2
- package/dist/components/p-cuZva5tl.js +0 -2
- package/dist/components/p-fYZK3zqM.js +0 -2
- package/dist/components/p-iGNHXFZA.js +0 -2
- package/dist/components/p-p_MwknM3.js +0 -2
- package/dist/components/p-tJaC01aE.js +0 -2
- package/dist/react/ds-setting-row.d.ts +0 -12
- package/dist/react/ds-setting-row.js +0 -12
- package/dist/vue/ds-setting-row.js +0 -14
- /package/dist/components/{p-7V1AhetH.js.map → p-B0BQCVkq.js.map} +0 -0
- /package/dist/components/{p-Co5MiPNa.js.map → p-B0EpvBDs.js.map} +0 -0
- /package/dist/components/{p-DFkw6wrS.js.map → p-B39iJO8F.js.map} +0 -0
- /package/dist/components/{p-AmT4GlhM.js.map → p-B9y6azEw.js.map} +0 -0
- /package/dist/components/{p-CrL9wxZg.js.map → p-BERXvOCf.js.map} +0 -0
- /package/dist/components/{p-AM_ht6Im.js.map → p-BFHpU-uU.js.map} +0 -0
- /package/dist/components/{p-B-HOVYoH.js.map → p-BQspV5U7.js.map} +0 -0
- /package/dist/components/{p-C_gJD8l3.js.map → p-Bk3poU91.js.map} +0 -0
- /package/dist/components/{p-Gb-vTuXr.js.map → p-BnuNaXR2.js.map} +0 -0
- /package/dist/components/{p-BsM37Prt.js.map → p-C8V4lkVy.js.map} +0 -0
- /package/dist/components/{p-C-c8SJ00.js.map → p-CZNZTcYS.js.map} +0 -0
- /package/dist/components/{p-DQPzqcYR.js.map → p-CbCN9ew9.js.map} +0 -0
- /package/dist/components/{p-D0KD-Nr_.js.map → p-CwdRaJER.js.map} +0 -0
- /package/dist/components/{p-Cihjy4WY.js.map → p-D8OWhnID.js.map} +0 -0
- /package/dist/components/{p-BXSHN1OK.js.map → p-DIQiHX0q.js.map} +0 -0
- /package/dist/components/{p-z8L-YMi3.js.map → p-DJDbskZf.js.map} +0 -0
- /package/dist/components/{p-Bm3KWMe4.js.map → p-DSZPO06T.js.map} +0 -0
- /package/dist/components/{p-C3-dcROG.js.map → p-DSmDyI2o.js.map} +0 -0
- /package/dist/components/{p-DcrdyDRw.js.map → p-DVEx-Xg9.js.map} +0 -0
- /package/dist/components/{p-Bu4OmhKK.js.map → p-DXk1eml1.js.map} +0 -0
- /package/dist/components/{p-Bh1Fx0aW.js.map → p-DmSnHVW6.js.map} +0 -0
- /package/dist/components/{p-BYJtvRQm.js.map → p-UJMEz8_O.js.map} +0 -0
- /package/dist/components/{p-Bo7GxFBh.js.map → p-_IqSPt5V.js.map} +0 -0
- /package/dist/components/{p-lADW-TI8.js.map → p-pp1IQN4Z.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["filterMenuCss","filterMenuId","ICON_SIZE","lg","md","sm","xs","DATE_MODE_TABS","id","label","RELATIVE_DATE_OPTIONS","DATE_FILTER_RELATIVE_PRESETS","map","preset","value","dateFilterRelativeValue","FilterMenu","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","embedded","vertical","open","triggerLabel","showSelectedCount","icon","size","width","showIndicator","hasBorder","neutralTrigger","applyRequired","activeFill","collapseLabel","ariaLabel","filters","values","matchModes","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","menuWidth","menuWidthLg","menuLabel","categoriesLabel","clearLabel","searchPlaceholder","noResultsText","footerLayout","initialFocusVisible","shouldRender","closing","positionReady","pos","x","y","focusRingVisible","activeOptionIndex","captionCompact","dateModeByFilter","optionQueryByFilter","generatedId","triggerElement","pendingInitialFocusVisible","closeTimer","hasLoaded","closingSnapshot","position","AnchoredPositionController","getAnchor","resolvedAnchor","getPopup","el","querySelector","getOwnerDocument","ownerDocument","measure","anchor","popup","anchorRect","getBoundingClientRect","sectionInsetPx","resolveCssLengthPx","TOKEN_DEFAULTS","popupWidth","offsetWidth","popupFallbackWidth","popupHeight","offsetHeight","popupFallbackHeight","sideOffsetPx","alignOffsetPx","resolveChoicePopupAlignOffset","viewportPadPx","viewportPad","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","boundary","apply","onReady","liveUpdate","observeResize","topLayer","interaction","AnchoredOverlayInteractionController","onOutsideActivation","close","changeValue","detail","draftValues","filterId","dsChange","emit","changeMode","draftModes","mode","dsMatchModeChange","hasPendingChanges","normalize","Array","isArray","length","sort","undefined","modes","some","filter","JSON","stringify","applyDraft","Object","keys","dsClear","Set","componentDidLoad","syncCaptionCompactObserver","onOpenChange","connectedCallback","disconnectedCallback","disconnectCaptionCompactObserver","unobserve","teardownListeners","onCollapseLabelChange","isOpen","setupListeners","schedule","focusInitialCategory","cancel","captureClosingSnapshot","duration","resolveMotionTimeMs","motionShort2","animationDurationShort3","finishClose","setTimeout","onPositionInputChange","handleKeyDown","event","key","preventDefault","tabLeavesPopup","moveFocusAfterTab","shiftKey","anchorId","document","getElementById","usesInternalTrigger","menuFallbackHeight","connect","observe","disconnect","clearTimeout","restoreFocus","focusAnchor","dsOpenChange","dsClose","toggleFromTrigger","handleTriggerKeyDown","matches","hidePopover","dsAfterClose","options","option","fromEntries","entries","activeFilterId","requestAnimationFrame","focus","selectedFilter","find","selectedCount","kind","totalSelected","reduce","total","activeFilterCount","selectCategory","dsActiveFilterChange","handleCategoryKeyDown","currentIndex","findIndex","nextIndex","handlePanelKeyDown","handleOptionKeyDown","index","visibleOptions","selectOption","includes","enabled","candidate","optionIndex","isInactive","current","indexOf","next","direction","start","optionMatchesQuery","query","normalized","trim","toLocaleLowerCase","description","booleanOption","fieldLabel","setOptionQuery","firstEnabled","content","scrollTop","handleOptionSearchKeyDown","toggleMultiple","checked","selected","add","delete","ordered","has","dateMode","parseDateFilterValue","setDateMode","renderRelativeDateOptions","relativeFilter","h","class","role","ChoiceOptionRow","active","usesSubtext","tabIndex","onFocus","onKeyDown","onHover","onSelect","renderDateCalendar","selectionMode","onDsChange","stopPropagation","renderDateFilter","hasContainer","tabs","renderOptionSearch","ChoiceSearch","hasFocusBoundary","hasInteractionFill","placeholder","controls","inputRef","onValueChange","renderNoOptionResults","body","renderOptions","allOptions","choiceListUsesSubtext","subtext","isSelected","leading","presentation","Boolean","captionIconOnly","captionCompactDisconnect","observeTableCaptionCompact","compact","renderCaptionTooltip","trigger","renderFooter","categoriesClear","appliedCount","as","variant","color","type","disabled","onClick","renderMatchModeFooter","nextMode","render","Host","name","emphasis","state","activeFilter","hasActiveFilters","categoriesClearFooter","textVariant","CONTROL_TEXT_VARIANT","iconSize","popupId","popupStyle","left","top","transform","Math","round","zIndex","visibility","controlWidthClass","ref","element","inputId","String","lineTruncation","popover","style","count","divider","onMouseDown","hasRing","intent","contrast","isInset","rounded"],"sources":["src/wc/components/FilterMenu/FilterMenu.css?tag=ds-filter-menu&encapsulation=scoped","src/wc/components/FilterMenu/FilterMenu.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/choice-list.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/search-control.css';\n@import '../../utils/table-caption-control.css';\n\n:host(.filter-menu-host--external-trigger) {\n display: contents;\n}\n\n.filter-menu {\n display: flex;\n min-height: 0;\n flex-direction: column;\n color: var(--color-foreground-secondary);\n}\n\n.filter-menu__body {\n display: grid;\n grid-template-columns: var(--dimension-menu-width-xs) var(--dimension-menu-width-sm);\n min-height: calc(var(--dimension-size-800) * 4 + var(--dimension-space-150));\n max-height: calc(100vh - var(--dimension-size-800) - var(--dimension-size-600));\n}\n\n.filter-menu__category-pane {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n border-inline-end: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.filter-menu__categories {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.filter-menu__category-section {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.filter-menu__category-section.ds-choice-section--divided {\n padding-block-end: var(--dimension-space-050);\n}\n\n.filter-menu__category {\n justify-content: space-between;\n width: 100%;\n border: 0;\n background: transparent;\n color: var(--color-foreground-secondary);\n cursor: default;\n text-align: start;\n}\n\n.filter-menu__category--active {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__category-dot-box {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon, var(--dimension-iconography-md));\n height: var(--ds-control-icon, var(--dimension-iconography-md));\n pointer-events: none;\n}\n\n.filter-menu__options {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-menu__options-content {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: auto;\n}\n\n.filter-menu__option-search {\n position: relative;\n flex: 0 0 var(--dimension-size-500);\n min-width: 0;\n min-height: var(--dimension-size-500);\n background: transparent;\n}\n\n.filter-menu__option-search::after {\n content: '';\n position: absolute;\n inset: auto 0 0;\n height: var(--dimension-stroke-width-012);\n background-color: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.filter-menu__option-search .select-search {\n height: 100%;\n background: transparent;\n}\n\n.filter-menu__options--date,\n.filter-menu__option-list--date,\n.filter-menu__date {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__option-list--date,\n.filter-menu__date {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-header {\n flex: 0 0 var(--dimension-size-500);\n justify-content: center;\n min-block-size: var(--dimension-size-500);\n padding: var(--dimension-space-050);\n background: var(--color-background-secondary);\n}\n\n.filter-menu__date-body {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__date-relative {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-body > ds-calendar {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n}\n\n.filter-menu__footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__footer--categories-clear .ds-choice-footer__content {\n justify-content: flex-start;\n}\n\n.filter-menu__footer--categories-clear[aria-hidden='true']::before {\n visibility: hidden;\n}\n\n.ds-choice-footer__content:has(.filter-menu__apply) {\n column-gap: var(--dimension-space-100);\n}\n\n.filter-menu__apply ds-text {\n padding-right: 0;\n}\n\n.filter-menu__action-separator + .filter-menu__clear ds-text {\n padding-left: 0;\n}\n\n.filter-menu__apply {\n color: var(--color-foreground-bold-brand);\n}\n\n.filter-menu__apply:disabled {\n color: var(--color-foreground-tertiary);\n text-decoration-line: none;\n}\n\n.filter-menu__clear {\n --ds-text-action-foreground: var(--color-foreground-bold-negative);\n\n color: var(--ds-text-action-foreground);\n}\n\n.filter-menu__match-mode-footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__match-mode-content {\n justify-content: flex-start;\n padding-inline: calc(\n var(--dimension-space-050) + var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n}\n\n.filter-menu__match-mode-toggle {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: default;\n}\n\n@media (forced-colors: active) {\n .filter-menu__category-pane {\n border-inline-end-color: var(--ds-forced-color-content);\n }\n}\n\n.data-preferences-embedded {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n color: var(--color-foreground-secondary);\n}\n\n.data-preferences-embedded .filter-menu__body {\n grid-template-columns: min(var(--dimension-menu-width-xs), 40%) minmax(0, 1fr);\n}\n\n.filter-menu-vertical__section {\n border-bottom: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n.filter-menu-vertical__section > summary {\n cursor: default;\n padding: var(--dimension-space-200);\n}\n.filter-menu-vertical__section > summary ds-text {\n display: inline;\n}\n\n.filter-menu-vertical__section > summary {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n list-style: none;\n}\n.filter-menu-vertical__section > summary::-webkit-details-marker {\n display: none;\n}\n.filter-menu-vertical__section:not([open]) .filter-menu-vertical__chevron {\n transform: rotate(-90deg);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n type VNode,\n Watch,\n} from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n DATE_FILTER_RELATIVE_PRESETS,\n controlWidthClass,\n dateFilterRelativeValue,\n parseDateFilterValue,\n resolveChoicePopupAlignOffset,\n resolveCssLengthPx,\n resolveMotionTimeMs,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n type ControlWidth,\n} from '../../utils';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type { AnchoredAlign, AnchoredSide } from '../../utils/anchored-position';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow, ChoiceSearch } from '../../utils/choice-list-parts';\nimport { choiceListUsesSubtext } from '../../utils/choice-list';\n\nexport type FilterMenuFilterKind = 'single' | 'multiple' | 'boolean' | 'date';\nexport type FilterMenuSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type FilterMenuWidth = ControlWidth;\nexport type FilterMenuFooterLayout = 'summary' | 'categories-clear';\nexport type FilterMenuMatchMode = 'any' | 'all';\ntype FilterMenuDateMode = 'range' | 'relative';\n\nexport interface FilterMenuOption {\n label: string;\n value: string;\n description?: string;\n isInactive?: boolean;\n}\n\nexport interface FilterMenuFilter {\n id: string;\n label: string;\n kind: FilterMenuFilterKind;\n options?: FilterMenuOption[];\n description?: string;\n fieldLabel?: string;\n /** Draw a standard menu-section divider after this category. */\n divider?: boolean;\n}\n\nexport type FilterMenuValue = string[] | boolean | string;\nexport type FilterMenuValues = Record<string, FilterMenuValue | undefined>;\nexport type FilterMenuMatchModes = Record<string, FilterMenuMatchMode | undefined>;\n\nexport interface FilterMenuChangeDetail {\n filterId: string;\n value: FilterMenuValue;\n}\n\nexport interface FilterMenuMatchModeChangeDetail {\n filterId: string;\n mode: FilterMenuMatchMode;\n}\n\nlet filterMenuId = 0;\n\nconst ICON_SIZE: Record<FilterMenuSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst DATE_MODE_TABS = [\n { id: 'relative', label: 'Relative' },\n { id: 'range', label: 'Range' },\n];\n\nconst RELATIVE_DATE_OPTIONS: FilterMenuOption[] = DATE_FILTER_RELATIVE_PRESETS.map(preset => ({\n label: preset.label,\n value: dateFilterRelativeValue(preset.value),\n}));\n\n@Component({\n tag: 'ds-filter-menu',\n styleUrl: 'FilterMenu.css',\n scoped: true,\n})\nexport class FilterMenu {\n @Element() el!: HTMLElement;\n\n /** Controlled popup visibility. */\n /** Render content inside a parent-owned surface; the parent owns dismissal and positioning. */\n @Prop() embedded: boolean = false;\n /** Stacked, collapsible sections for a configuration panel. */\n @Prop() vertical: boolean = false;\n @Prop({ mutable: true }) open: boolean = false;\n /** Select trigger text. */\n @Prop() triggerLabel: string = 'Filters';\n /** Append the active-filter count to the visible trigger label. */\n @Prop() showSelectedCount: boolean = true;\n /** Optional select trigger prefix icon name. */\n @Prop() icon: string | undefined = 'Filters';\n /** Select trigger density. */\n @Prop() size: FilterMenuSize = 'md';\n /** Select trigger width fit. */\n @Prop() width: FilterMenuWidth = 'hug';\n /** Show the surface-aware inset border around the select trigger. */\n /** Show the trigger chevron. */\n @Prop() showIndicator: boolean = true;\n @Prop() hasBorder: boolean = true;\n /** Show selected interaction fill when one or more criteria are active. */\n /** Keep trigger colors neutral when a value is selected. */\n @Prop() neutralTrigger: boolean = false;\n /** Stage filter edits until Apply is pressed. */\n @Prop() applyRequired: boolean = false;\n @State() private draftValues?: FilterMenuValues;\n @State() private draftModes?: FilterMenuMatchModes;\n\n private changeValue(detail: FilterMenuChangeDetail): void {\n if (this.applyRequired)\n this.draftValues = { ...(this.draftValues ?? this.values), [detail.filterId]: detail.value };\n else this.dsChange.emit(detail);\n }\n private changeMode(detail: FilterMenuMatchModeChangeDetail): void {\n if (this.applyRequired)\n this.draftModes = { ...(this.draftModes ?? this.matchModes), [detail.filterId]: detail.mode };\n else this.dsMatchModeChange.emit(detail);\n }\n private get hasPendingChanges(): boolean {\n const normalize = (value: FilterMenuValue | undefined) =>\n Array.isArray(value) ? (value.length ? [...value].sort() : undefined) : value || undefined;\n const values = this.draftValues ?? this.values;\n const modes = this.draftModes ?? this.matchModes;\n return this.filters.some(\n filter =>\n JSON.stringify(normalize(values[filter.id])) !==\n JSON.stringify(normalize(this.values[filter.id])) ||\n (modes[filter.id] ?? 'any') !== (this.matchModes[filter.id] ?? 'any')\n );\n }\n private applyDraft(): void {\n if (!this.hasPendingChanges) return;\n if (this.draftValues && Object.keys(this.draftValues).length === 0) {\n this.dsClear.emit();\n } else if (this.draftValues) {\n for (const id of new Set([...Object.keys(this.values), ...Object.keys(this.draftValues)])) {\n if (JSON.stringify(this.values[id]) !== JSON.stringify(this.draftValues[id]))\n this.dsChange.emit({\n filterId: id,\n value:\n this.draftValues[id] ??\n (Array.isArray(this.values[id])\n ? []\n : typeof this.values[id] === 'boolean'\n ? false\n : ''),\n });\n }\n }\n if (this.draftModes) {\n for (const filterId of new Set([\n ...Object.keys(this.matchModes),\n ...Object.keys(this.draftModes),\n ])) {\n const mode = this.draftModes[filterId] ?? 'any';\n if ((this.matchModes[filterId] ?? 'any') !== mode)\n this.dsMatchModeChange.emit({ filterId, mode });\n }\n }\n }\n @Prop() activeFill: boolean = false;\n /**\n * Opt into table-caption icon-only chrome below 900px. The trigger omits its\n * visible label and chevron; keep an accessible name via aria-label.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n /** ID applied to the internal select trigger. */\n @Prop() inputId: string | undefined;\n /** Direct accessible name for the internal select trigger. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Product-owned filter categories and option definitions. */\n @Prop() filters: FilterMenuFilter[] = [];\n /** Controlled values keyed by filter id. */\n @Prop() values: FilterMenuValues = {};\n /** Controlled any/all match mode keyed by multiple-choice filter id. Defaults to any. */\n @Prop() matchModes: FilterMenuMatchModes = {};\n /** Controlled category shown in the option pane. */\n @Prop() activeFilterId: string | undefined;\n /** External trigger element to position against. */\n @Prop() anchor: HTMLElement | undefined;\n /** ID of the external trigger element used for positioning and focus return. */\n @Prop() anchorId: string | undefined;\n /** Explicit collision owner; otherwise the nearest data-ds-overlay-boundary ancestor is used. */\n @Prop() boundary: HTMLElement | undefined;\n /** Preferred popup side; collision handling may flip it. */\n @Prop() side: AnchoredSide = 'bottom';\n /** Cross-axis alignment against the trigger. */\n @Prop() align: AnchoredAlign = 'end';\n /** Gap between trigger and popup — number in px or a TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number in px or a TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Popup width. It remains clamped to its collision boundary by the component recipe. */\n @Prop() menuWidth: string = TOKEN_CSS_LENGTHS.menuWidthLg;\n /** Accessible name for the non-modal filter dialog. */\n @Prop() menuLabel: string = 'Filters';\n /** Accessible name for the category tab list. */\n @Prop() categoriesLabel: string = 'Filter categories';\n /** Footer action and date-clear accessible label. */\n @Prop() clearLabel: string = 'Clear';\n /** Placeholder shown in each non-date option search header. */\n @Prop() searchPlaceholder: string = 'Search';\n /** Empty-state text shown when an option search has no matches. */\n @Prop() noResultsText: string = 'No results';\n /** Footer recipe: full-width selected summary or reserved category-pane Clear action. */\n @Prop() footerLayout: FilterMenuFooterLayout = 'summary';\n /** Show a visible focus ring on initial entry after keyboard activation. */\n @Prop() initialFocusVisible: boolean = false;\n\n @State() private shouldRender = false;\n @State() private closing = false;\n @State() private positionReady = false;\n @State() private pos: { x: number; y: number } = { x: 0, y: 0 };\n @State() private focusRingVisible = false;\n @State() private activeOptionIndex = 0;\n @State() private captionCompact = false;\n @State() private dateModeByFilter: Record<string, FilterMenuDateMode> = {};\n @State() private optionQueryByFilter: Record<string, string> = {};\n\n /** Requests a controlled value replacement without closing the popup. */\n @Event() dsChange!: EventEmitter<FilterMenuChangeDetail>;\n /** Requests that the consumer clear every filter value. */\n @Event() dsClear!: EventEmitter<void>;\n /** Requests a controlled any/all mode replacement for a multiple-choice filter. */\n @Event() dsMatchModeChange!: EventEmitter<FilterMenuMatchModeChangeDetail>;\n /** Requests a controlled active-category replacement. */\n @Event() dsActiveFilterChange!: EventEmitter<string>;\n /** Requests that the controlled popup close. */\n @Event() dsClose!: EventEmitter<void>;\n /** Emitted whenever internal select-trigger activation changes popup visibility. */\n @Event() dsOpenChange!: EventEmitter<boolean>;\n /** Emitted after exit motion and rendered popup removal complete. */\n @Event() dsAfterClose!: EventEmitter<void>;\n\n private readonly generatedId = `ds-filter-menu-${++filterMenuId}`;\n private triggerElement: HTMLButtonElement | null = null;\n private pendingInitialFocusVisible = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n private closingSnapshot: {\n filters: FilterMenuFilter[];\n values: FilterMenuValues;\n matchModes: FilterMenuMatchModes;\n activeFilterId: string | undefined;\n } | null = null;\n\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.open) return null;\n const anchorRect = anchor.getBoundingClientRect();\n const sectionInsetPx = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect,\n popupWidth: popup.offsetWidth || this.popupFallbackWidth,\n popupHeight: popup.offsetHeight || this.popupFallbackHeight,\n side: this.side,\n align: this.align,\n sideOffsetPx: resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050),\n alignOffsetPx: resolveChoicePopupAlignOffset({\n align: this.align,\n alignOffsetPx: resolveCssLengthPx(this.alignOffset, 0),\n sectionInsetPx,\n }),\n viewportPadPx: this.viewportPad,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n };\n },\n apply: ({ x, y }) => {\n this.pos = { x, y };\n },\n onReady: () => {\n this.positionReady = true;\n },\n liveUpdate: 'double-frame',\n observeResize: true,\n topLayer: true,\n });\n private readonly interaction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.close(),\n });\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n disconnectedCallback() {\n this.disconnectCaptionCompactObserver();\n this.position.unobserve();\n this.teardownListeners();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (!isOpen) {\n this.draftValues = undefined;\n this.draftModes = undefined;\n }\n if (this.embedded) return;\n if (isOpen) {\n this.teardownListeners();\n this.closingSnapshot = null;\n this.shouldRender = true;\n this.closing = false;\n this.positionReady = false;\n this.focusRingVisible = this.pendingInitialFocusVisible || this.initialFocusVisible;\n this.setupListeners();\n this.position.schedule(() => this.focusInitialCategory());\n return;\n }\n\n if (!this.shouldRender) return;\n this.position.cancel();\n this.captureClosingSnapshot();\n this.closing = true;\n this.teardownListeners();\n const duration = resolveMotionTimeMs(\n TOKEN_DEFAULTS.motionShort2,\n TOKEN_DEFAULTS.animationDurationShort3\n );\n if (duration <= 0) {\n this.finishClose();\n return;\n }\n this.closeTimer = setTimeout(() => this.finishClose(), duration);\n }\n\n @Watch('anchor')\n @Watch('anchorId')\n @Watch('boundary')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('menuWidth')\n onPositionInputChange() {\n if (this.open) this.position.schedule();\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (this.embedded && (event.key === 'Escape' || event.key === 'Tab')) return;\n if ((!this.shouldRender && !this.embedded) || this.closing) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n if (event.key !== 'Tab' || !this.tabLeavesPopup(event)) return;\n event.preventDefault();\n this.close(false);\n this.interaction.moveFocusAfterTab(event.shiftKey);\n }\n\n private get resolvedAnchor(): HTMLElement | null {\n if (this.anchor) return this.anchor;\n if (this.anchorId) return document.getElementById(this.anchorId);\n return this.triggerElement;\n }\n\n private get usesInternalTrigger(): boolean {\n return !this.embedded && !this.anchor && !this.anchorId;\n }\n\n private get viewportPad(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get popupFallbackWidth(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuWidthLg, TOKEN_DEFAULTS.menuWidthLg);\n }\n\n private get popupFallbackHeight(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuFallbackHeight, TOKEN_DEFAULTS.menuFallbackHeight);\n }\n\n private setupListeners() {\n this.interaction.connect();\n this.position.observe();\n }\n\n private teardownListeners() {\n this.position.unobserve();\n this.interaction.disconnect();\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private close(restoreFocus = true) {\n this.captureClosingSnapshot();\n if (restoreFocus) this.interaction.focusAnchor();\n this.dsOpenChange.emit(false);\n this.dsClose.emit();\n this.open = false;\n this.onOpenChange(false);\n }\n\n private toggleFromTrigger(event: MouseEvent) {\n if (this.open) {\n this.close();\n return;\n }\n this.pendingInitialFocusVisible = event.detail === 0;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private handleTriggerKeyDown(event: KeyboardEvent) {\n if (event.key !== 'ArrowDown' || this.open) return;\n event.preventDefault();\n this.pendingInitialFocusVisible = true;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private finishClose() {\n const popup = this.el.querySelector<HTMLElement>('.filter-menu-popup');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.shouldRender = false;\n this.closing = false;\n this.closingSnapshot = null;\n this.closeTimer = null;\n this.dateModeByFilter = {};\n this.optionQueryByFilter = {};\n this.dsAfterClose.emit();\n }\n\n private captureClosingSnapshot() {\n if (this.closingSnapshot) return;\n this.closingSnapshot = {\n filters: this.filters.map(filter => ({\n ...filter,\n options: filter.options?.map(option => ({ ...option })),\n })),\n values: Object.fromEntries(\n Object.entries(this.values).map(([key, value]) => [\n key,\n Array.isArray(value) ? [...value] : value,\n ])\n ),\n matchModes: { ...this.matchModes },\n activeFilterId: this.activeFilterId,\n };\n }\n\n private focusInitialCategory() {\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>('.filter-menu__category[tabindex=\"0\"]')?.focus();\n this.pendingInitialFocusVisible = false;\n });\n }\n\n private tabLeavesPopup(event: KeyboardEvent): boolean {\n return this.interaction.tabLeavesPopup(event);\n }\n\n private selectedFilter(filters: FilterMenuFilter[], activeFilterId: string | undefined) {\n return filters.find(filter => filter.id === activeFilterId) ?? filters[0];\n }\n\n private selectedCount(filter: FilterMenuFilter, values: FilterMenuValues): number {\n const value = values[filter.id];\n if (filter.kind === 'multiple') return Array.isArray(value) ? value.length : 0;\n if (filter.kind === 'boolean') return value === true ? 1 : 0;\n return typeof value === 'string' && value.length > 0 ? 1 : 0;\n }\n\n private totalSelected(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.reduce((total, filter) => total + this.selectedCount(filter, values), 0);\n }\n\n private activeFilterCount(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.filter(filter => this.selectedCount(filter, values) > 0).length;\n }\n\n private selectCategory(filterId: string, focus = false) {\n this.activeOptionIndex = 0;\n this.dsActiveFilterChange.emit(filterId);\n if (!focus) return;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n });\n }\n\n private handleCategoryKeyDown(\n event: KeyboardEvent,\n filters: FilterMenuFilter[],\n filterId: string\n ) {\n const currentIndex = filters.findIndex(filter => filter.id === filterId);\n let nextIndex: number;\n if (event.key === 'ArrowDown') nextIndex = (currentIndex + 1) % filters.length;\n else if (event.key === 'ArrowUp')\n nextIndex = (currentIndex - 1 + filters.length) % filters.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = filters.length - 1;\n else if (event.key === 'ArrowRight') {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(\n '.filter-menu__options [role=\"option\"], .filter-menu__options [data-date-option], .filter-menu__options input'\n )\n ?.focus();\n });\n return;\n } else return;\n\n event.preventDefault();\n this.focusRingVisible = true;\n this.selectCategory(filters[nextIndex].id, true);\n }\n\n private handlePanelKeyDown(event: KeyboardEvent, filterId: string) {\n if (event.key !== 'ArrowLeft') return;\n event.preventDefault();\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n }\n\n private handleOptionKeyDown(\n event: KeyboardEvent,\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n index: number,\n values: FilterMenuValues,\n visibleOptions: FilterMenuOption[] = filter.options ?? []\n ) {\n if (event.key === 'ArrowLeft') {\n this.handlePanelKeyDown(event, filter.id);\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(filter, option, values);\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n const enabled = visibleOptions\n .map((candidate, optionIndex) => ({ candidate, optionIndex }))\n .filter(({ candidate }) => !candidate.isInactive)\n .map(({ optionIndex }) => optionIndex);\n if (!enabled.length) return;\n const current = enabled.indexOf(index);\n let next: number;\n if (event.key === 'Home') next = enabled[0];\n else if (event.key === 'End') next = enabled[enabled.length - 1];\n else {\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n const start = current >= 0 ? current : direction === 1 ? -1 : 0;\n next = enabled[(start + direction + enabled.length) % enabled.length];\n }\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private optionMatchesQuery(option: FilterMenuOption, query: string): boolean {\n const normalized = query.trim().toLocaleLowerCase();\n if (!normalized) return true;\n return `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(normalized);\n }\n\n private visibleOptions(\n filter: FilterMenuFilter,\n query = this.optionQueryByFilter[filter.id] ?? ''\n ) {\n if (filter.kind === 'boolean') {\n const option = this.booleanOption(filter);\n return this.optionMatchesQuery(option, query) ? [option] : [];\n }\n return (filter.options ?? []).filter(option => this.optionMatchesQuery(option, query));\n }\n\n private booleanOption(filter: FilterMenuFilter): FilterMenuOption {\n return {\n label: filter.fieldLabel ?? filter.label,\n value: 'true',\n description: filter.description,\n };\n }\n\n private setOptionQuery(filter: FilterMenuFilter, value: string) {\n const visibleOptions = this.visibleOptions(filter, value);\n const firstEnabled = visibleOptions.findIndex(option => !option.isInactive);\n this.activeOptionIndex = firstEnabled;\n this.focusRingVisible = false;\n this.optionQueryByFilter = { ...this.optionQueryByFilter, [filter.id]: value };\n requestAnimationFrame(() => {\n const content = this.el.querySelector<HTMLElement>('.filter-menu__options-content');\n if (content) content.scrollTop = 0;\n this.position.schedule();\n });\n }\n\n private handleOptionSearchKeyDown(event: KeyboardEvent, filter: FilterMenuFilter) {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const visibleOptions = this.visibleOptions(filter);\n const enabled = visibleOptions\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.isInactive)\n .map(({ index }) => index);\n if (!enabled.length) return;\n event.preventDefault();\n const next = event.key === 'ArrowDown' ? enabled[0] : enabled[enabled.length - 1];\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private toggleMultiple(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n checked: boolean,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n const current = Array.isArray(values[filter.id]) ? (values[filter.id] as string[]) : [];\n const selected = new Set(current);\n if (checked) selected.add(option.value);\n else selected.delete(option.value);\n const ordered = (filter.options ?? [])\n .map(candidate => candidate.value)\n .filter(value => selected.has(value));\n this.changeValue({ filterId: filter.id, value: ordered });\n }\n\n private selectOption(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n if (filter.kind === 'single') {\n this.changeValue({ filterId: filter.id, value: option.value });\n return;\n }\n const selected = Array.isArray(values[filter.id])\n ? (values[filter.id] as string[]).includes(option.value)\n : false;\n this.toggleMultiple(filter, option, !selected, values);\n }\n\n private dateMode(filterId: string, value: FilterMenuValue | undefined): FilterMenuDateMode {\n return this.dateModeByFilter[filterId] ?? parseDateFilterValue(value)?.kind ?? 'relative';\n }\n\n private setDateMode(filter: FilterMenuFilter, mode: string) {\n if (mode !== 'range' && mode !== 'relative') return;\n this.dateModeByFilter = { ...this.dateModeByFilter, [filter.id]: mode };\n this.activeOptionIndex = 0;\n }\n\n private renderRelativeDateOptions(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const relativeFilter: FilterMenuFilter = {\n ...filter,\n kind: 'single',\n options: RELATIVE_DATE_OPTIONS,\n };\n return (\n <div\n class=\"filter-menu__date-relative ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label=\"Relative date\"\n >\n {RELATIVE_DATE_OPTIONS.map((option, index) => (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-relative-${index}`}\n option={option}\n selected={value === option.value}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={false}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, relativeFilter, option, index, {\n [filter.id]: value,\n })\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.changeValue({ filterId: filter.id, value: option.value })}\n />\n ))}\n </div>\n );\n }\n\n private renderDateCalendar(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n return (\n <ds-calendar\n selectionMode=\"range\"\n value={typeof value === 'string' ? value : ''}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.changeValue({ filterId: filter.id, value: event.detail });\n }}\n />\n );\n }\n\n private renderDateFilter(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const mode = this.dateMode(filter.id, value);\n return (\n <div class=\"filter-menu__date\">\n <header class=\"filter-menu__date-header ds-chrome-header ds-chrome-header--bounded\">\n <ds-tab-group\n ariaLabel=\"Date filter mode\"\n size=\"md\"\n width=\"fill\"\n hasContainer={false}\n value={mode}\n tabs={DATE_MODE_TABS}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.setDateMode(filter, event.detail);\n }}\n />\n </header>\n <div class=\"filter-menu__date-body\">\n {mode === 'relative'\n ? this.renderRelativeDateOptions(filter, value)\n : this.renderDateCalendar(filter, value)}\n </div>\n </div>\n );\n }\n\n private renderOptionSearch(filter: FilterMenuFilter) {\n return (\n <div class=\"filter-menu__option-search\">\n <ChoiceSearch\n size=\"md\"\n hasFocusBoundary={false}\n hasInteractionFill={false}\n value={this.optionQueryByFilter[filter.id] ?? ''}\n placeholder={this.searchPlaceholder}\n ariaLabel={`Search ${filter.label} options`}\n controls={`${this.generatedId}-${filter.id}-options`}\n inputRef={() => undefined}\n clearLabel={`Clear ${filter.label} search`}\n onValueChange={value => this.setOptionQuery(filter, value)}\n onKeyDown={(event: KeyboardEvent) => this.handleOptionSearchKeyDown(event, filter)}\n />\n </div>\n );\n }\n\n private renderNoOptionResults() {\n return (\n <div\n class=\"ds-choice-empty ds-empty-region\"\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.noResultsText}\n aria-live=\"polite\"\n >\n <ds-empty-state body={this.noResultsText} />\n </div>\n );\n }\n\n private renderOptions(filter: FilterMenuFilter, values: FilterMenuValues) {\n const value = values[filter.id];\n if (filter.kind === 'multiple' || filter.kind === 'single') {\n const selected = Array.isArray(value) ? value : [];\n const allOptions = filter.options ?? [];\n const options = this.visibleOptions(filter);\n const usesSubtext = choiceListUsesSubtext(\n allOptions.map(option => ({\n label: option.label,\n value: option.value,\n subtext: option.description,\n }))\n );\n if (!options.length) return this.renderNoOptionResults();\n return options.map((option, index) => {\n const isSelected =\n filter.kind === 'multiple' ? selected.includes(option.value) : value === option.value;\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-${index}`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n isInactive: option.isInactive,\n }}\n selected={isSelected}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={usesSubtext}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n leading={\n filter.kind === 'multiple' ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={isSelected} presentation />\n </span>\n ) : undefined\n }\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, filter, option, index, values, options)\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.selectOption(filter, option, values)}\n />\n );\n });\n }\n\n if (filter.kind === 'boolean') {\n const [option] = this.visibleOptions(filter);\n if (!option) return this.renderNoOptionResults();\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-0`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n }}\n selected={value === true}\n active\n focusRingVisible={this.focusRingVisible}\n usesSubtext={Boolean(option.description)}\n tabIndex={0}\n leading={\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={value === true} presentation />\n </span>\n }\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') this.handlePanelKeyDown(event, filter.id);\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.changeValue({ filterId: filter.id, value: value !== true });\n }\n }}\n onHover={() => {\n this.focusRingVisible = false;\n }}\n onSelect={() => this.changeValue({ filterId: filter.id, value: value !== true })}\n />\n );\n }\n\n return this.renderDateFilter(filter, value);\n }\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel && this.captionCompact && this.usesInternalTrigger && Boolean(this.icon)\n );\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private renderCaptionTooltip(trigger: VNode, label: string): VNode {\n if (!this.collapseLabel) return trigger;\n return (\n <ds-tooltip label={label} side=\"top\" size=\"sm\">\n {trigger}\n </ds-tooltip>\n );\n }\n\n private renderFooter(totalSelected: number, categoriesClear: boolean) {\n const appliedCount = this.totalSelected(this.filters, this.values);\n if (this.applyRequired && totalSelected === 0 && appliedCount === 0) return null;\n return (\n <div\n class={{\n 'filter-menu__footer': true,\n 'filter-menu__footer--categories-clear': categoriesClear,\n 'ds-choice-footer': true,\n }}\n aria-hidden={\n !this.applyRequired &&\n categoriesClear &&\n totalSelected === 0 &&\n !this.draftValues &&\n !this.draftModes\n ? 'true'\n : undefined\n }\n >\n <div class=\"ds-choice-footer__content ds-control--md\">\n {!categoriesClear ? (\n <ds-text\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-live=\"polite\"\n >\n {totalSelected} selected\n </ds-text>\n ) : null}\n {this.applyRequired ? (\n <button\n class=\"filter-menu__apply ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n disabled={!this.hasPendingChanges}\n onClick={() => this.applyDraft()}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n Apply\n </ds-text>\n </button>\n ) : null}\n {this.applyRequired && (totalSelected > 0 || appliedCount > 0) ? (\n <ds-text\n class=\"filter-menu__action-separator\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"tertiary\"\n aria-hidden=\"true\"\n >\n ·\n </ds-text>\n ) : null}\n {totalSelected > 0 || (this.applyRequired && appliedCount > 0) ? (\n <button\n class=\"filter-menu__clear ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n onClick={() => {\n if (this.applyRequired) {\n this.draftValues = {};\n this.draftModes = {};\n }\n this.dsClear.emit();\n }}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.clearLabel}\n </ds-text>\n </button>\n ) : null}\n </div>\n </div>\n );\n }\n\n private renderMatchModeFooter(filter: FilterMenuFilter, matchModes: FilterMenuMatchModes) {\n const mode: FilterMenuMatchMode = matchModes[filter.id] === 'all' ? 'all' : 'any';\n const nextMode: FilterMenuMatchMode = mode === 'any' ? 'all' : 'any';\n return (\n <div class=\"filter-menu__match-mode-footer ds-choice-footer\">\n <div class=\"filter-menu__match-mode-content ds-choice-footer__content ds-control--md\">\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n Limit results to\n </ds-text>\n <button\n class=\"filter-menu__match-mode-toggle ds-text-action ds-focus-ring\"\n type=\"button\"\n aria-label={`Limit ${filter.label} results to ${nextMode} selected`}\n onClick={() => this.changeMode({ filterId: filter.id, mode: nextMode })}\n onKeyDown={(event: KeyboardEvent) => this.handlePanelKeyDown(event, filter.id)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {mode}\n </ds-text>\n </button>\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n selected\n </ds-text>\n </div>\n </div>\n );\n }\n\n render() {\n if (this.vertical)\n return (\n <Host class=\"filter-menu-vertical\">\n {this.filters.map(filter => (\n <details open key={filter.id} class=\"filter-menu-vertical__section\">\n <summary>\n <ds-icon class=\"filter-menu-vertical__chevron\" name=\"ChevronDown\" size=\"md\" />\n <ds-text variant=\"text-body-medium\" emphasis>\n {filter.label}\n </ds-text>\n </summary>\n {filter.kind !== 'date' && this.renderOptionSearch(filter)}\n <div\n id={`${this.generatedId}-${filter.id}-options`}\n role={filter.kind === 'date' ? undefined : 'listbox'}\n aria-label={filter.label}\n aria-multiselectable={filter.kind === 'multiple' ? 'true' : undefined}\n class=\"ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n >\n {this.renderOptions(filter, this.values)}\n </div>\n {filter.kind === 'multiple' && this.renderMatchModeFooter(filter, this.matchModes)}\n </details>\n ))}\n </Host>\n );\n const state =\n this.closing && this.closingSnapshot\n ? this.closingSnapshot\n : {\n filters: this.filters,\n values: this.draftValues ?? this.values,\n matchModes: this.draftModes ?? this.matchModes,\n activeFilterId: this.activeFilterId,\n };\n const activeFilter = this.selectedFilter(state.filters, state.activeFilterId);\n const totalSelected = this.totalSelected(state.filters, state.values);\n const activeFilterCount = this.activeFilterCount(state.filters, state.values);\n const hasActiveFilters = activeFilterCount > 0;\n const categoriesClearFooter = this.footerLayout === 'categories-clear';\n const label = `${this.triggerLabel}${\n this.showSelectedCount && hasActiveFilters ? ` · ${activeFilterCount}` : ''\n }`;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const popupId = `${this.generatedId}-popup`;\n const popupStyle: Record<string, string> = {\n position: 'fixed',\n left: '0',\n top: '0',\n width: this.menuWidth,\n transform: `translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,\n zIndex: '9998',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n\n return (\n <Host\n class={{\n 'filter-menu-host': true,\n 'filter-menu-host--external-trigger': !this.usesInternalTrigger,\n 'ds-select-trigger-host': this.usesInternalTrigger,\n [`ds-control--${this.size}`]: true,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n >\n {this.usesInternalTrigger\n ? this.renderCaptionTooltip(\n <button\n ref={element => {\n this.triggerElement = (element as HTMLButtonElement) ?? null;\n }}\n id={this.inputId ?? `${this.generatedId}-trigger`}\n type=\"button\"\n class={{\n trigger: true,\n 'ds-control-frame': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.activeFill && hasActiveFilters,\n 'trigger--expanded': this.open || this.closing,\n 'ds-interaction-fill--surface-open': this.open || this.closing,\n 'trigger--bordered': this.hasBorder,\n 'trigger--has-value': hasActiveFilters && !this.neutralTrigger,\n [`ds-control--${this.size}`]: true,\n }}\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.open)}\n aria-controls={this.open ? popupId : undefined}\n aria-label={this.ariaLabel ?? this.menuLabel}\n onClick={(event: MouseEvent) => this.toggleFromTrigger(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleTriggerKeyDown(event)}\n >\n {this.icon ? (\n <span\n class=\"trigger__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n ) : null}\n {this.captionIconOnly ? null : (\n <ds-text\n class=\"trigger__label-box trigger__label trigger__label-content ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant={textVariant}\n color=\"inherit\"\n lineTruncation={1}\n >\n {label}\n </ds-text>\n )}\n {this.captionIconOnly || !this.showIndicator ? null : (\n <span\n class=\"trigger__chevron ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name=\"ChevronDown\" size={iconSize} color=\"inherit\" />\n </span>\n )}\n </button>,\n this.captionIconOnly ? label : ''\n )\n : null}\n\n {this.shouldRender || this.embedded ? (\n <div\n id={popupId}\n popover={this.embedded ? undefined : 'manual'}\n class={{\n 'filter-menu-popup': true,\n 'ds-choice-popup': !this.embedded,\n 'data-preferences-embedded': this.embedded,\n 'ds-choice-popup--closing': this.closing,\n }}\n style={this.embedded ? undefined : popupStyle}\n role=\"dialog\"\n aria-label={this.menuLabel}\n >\n {activeFilter ? (\n <div class=\"filter-menu\">\n <div class=\"filter-menu__body\">\n <div class=\"filter-menu__category-pane\">\n <div\n class=\"filter-menu__categories ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"tablist\"\n aria-label={this.categoriesLabel}\n aria-orientation=\"vertical\"\n >\n {state.filters.map(filter => {\n const active = filter.id === activeFilter.id;\n const count = this.selectedCount(filter, state.values);\n return (\n <div\n key={filter.id}\n class={{\n 'filter-menu__category-section': true,\n 'ds-choice-section--divided': Boolean(filter.divider),\n }}\n >\n <button\n id={`${this.generatedId}-${filter.id}-tab`}\n type=\"button\"\n role=\"tab\"\n data-filter-category={filter.id}\n class={{\n 'filter-menu__category': true,\n 'filter-menu__category--active': active,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && this.focusRingVisible,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': active,\n }}\n aria-selected={String(active)}\n aria-controls={`${this.generatedId}-panel`}\n tabIndex={active ? 0 : -1}\n onMouseDown={() => {\n this.focusRingVisible = false;\n }}\n onClick={() => this.selectCategory(filter.id)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCategoryKeyDown(event, state.filters, filter.id)\n }\n >\n <ds-text\n class=\"ds-choice-item__content ds-choice-item__label ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={active ? 'primary' : 'secondary'}\n >\n {filter.label}\n </ds-text>\n {count > 0 && filter.kind === 'date' ? (\n <span\n class=\"filter-menu__category-dot-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-badge variant=\"dot\" hasRing={false} label=\"\" />\n </span>\n ) : count > 0 ? (\n <ds-tag\n class=\"ds-choice-item__tag ds-interaction-fill__content\"\n label={String(count)}\n size=\"sm\"\n intent=\"brand\"\n contrast=\"bold\"\n isInset\n rounded\n />\n ) : null}\n </button>\n </div>\n );\n })}\n </div>\n {categoriesClearFooter ? this.renderFooter(totalSelected, true) : null}\n </div>\n\n <div\n id={`${this.generatedId}-panel`}\n class={{\n 'filter-menu__options': true,\n 'filter-menu__options--date': activeFilter.kind === 'date',\n }}\n role=\"tabpanel\"\n aria-labelledby={`${this.generatedId}-${activeFilter.id}-tab`}\n >\n {activeFilter.kind === 'date' ? null : this.renderOptionSearch(activeFilter)}\n <div class=\"filter-menu__options-content\">\n {activeFilter.kind === 'date' ? (\n <div key={activeFilter.id} class=\"filter-menu__option-list--date\">\n {this.renderOptions(activeFilter, state.values)}\n </div>\n ) : (\n <div\n id={`${this.generatedId}-${activeFilter.id}-options`}\n key={activeFilter.id}\n class=\"filter-menu__option-list ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label={activeFilter.label}\n aria-multiselectable={\n activeFilter.kind === 'multiple' ? 'true' : undefined\n }\n >\n {this.renderOptions(activeFilter, state.values)}\n </div>\n )}\n </div>\n {activeFilter.kind === 'multiple'\n ? this.renderMatchModeFooter(activeFilter, state.matchModes)\n : null}\n </div>\n </div>\n\n {!categoriesClearFooter && totalSelected > 0\n ? this.renderFooter(totalSelected, false)\n : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["filterMenuCss","filterMenuId","ICON_SIZE","lg","md","sm","xs","DATE_MODE_TABS","id","label","RELATIVE_DATE_OPTIONS","DATE_FILTER_RELATIVE_PRESETS","map","preset","value","dateFilterRelativeValue","FilterMenu","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","embedded","vertical","open","triggerLabel","showSelectedCount","icon","size","width","showIndicator","hasBorder","neutralTrigger","applyRequired","activeFill","collapseLabel","ariaLabel","filters","values","matchModes","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","menuWidth","menuWidthLg","menuLabel","categoriesLabel","clearLabel","searchPlaceholder","noResultsText","footerLayout","initialFocusVisible","shouldRender","closing","positionReady","pos","x","y","focusRingVisible","activeOptionIndex","captionCompact","dateModeByFilter","optionQueryByFilter","generatedId","triggerElement","pendingInitialFocusVisible","closeTimer","hasLoaded","closingSnapshot","position","AnchoredPositionController","getAnchor","resolvedAnchor","getPopup","el","querySelector","getOwnerDocument","ownerDocument","measure","anchor","popup","anchorRect","getBoundingClientRect","sectionInsetPx","resolveCssLengthPx","TOKEN_DEFAULTS","popupWidth","offsetWidth","popupFallbackWidth","popupHeight","offsetHeight","popupFallbackHeight","sideOffsetPx","alignOffsetPx","resolveChoicePopupAlignOffset","viewportPadPx","viewportPad","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","boundary","apply","onReady","liveUpdate","observeResize","topLayer","interaction","AnchoredOverlayInteractionController","onOutsideActivation","close","changeValue","detail","draftValues","filterId","dsChange","emit","changeMode","draftModes","mode","dsMatchModeChange","hasPendingChanges","normalize","Array","isArray","length","sort","undefined","modes","some","filter","JSON","stringify","applyDraft","Object","keys","dsClear","Set","componentDidLoad","syncCaptionCompactObserver","onOpenChange","connectedCallback","disconnectedCallback","disconnectCaptionCompactObserver","unobserve","teardownListeners","onCollapseLabelChange","isOpen","setupListeners","schedule","focusInitialCategory","cancel","captureClosingSnapshot","duration","resolveMotionTimeMs","motionShort2","animationDurationShort3","finishClose","setTimeout","onPositionInputChange","handleKeyDown","event","key","preventDefault","tabLeavesPopup","moveFocusAfterTab","shiftKey","anchorId","document","getElementById","usesInternalTrigger","menuFallbackHeight","connect","observe","disconnect","clearTimeout","restoreFocus","focusAnchor","dsOpenChange","dsClose","toggleFromTrigger","handleTriggerKeyDown","matches","hidePopover","dsAfterClose","options","option","fromEntries","entries","activeFilterId","requestAnimationFrame","focus","selectedFilter","find","selectedCount","kind","totalSelected","reduce","total","activeFilterCount","selectCategory","dsActiveFilterChange","handleCategoryKeyDown","currentIndex","findIndex","nextIndex","handlePanelKeyDown","handleOptionKeyDown","index","visibleOptions","selectOption","includes","enabled","candidate","optionIndex","isInactive","current","indexOf","next","direction","start","optionMatchesQuery","query","normalized","trim","toLocaleLowerCase","description","booleanOption","fieldLabel","setOptionQuery","firstEnabled","content","scrollTop","handleOptionSearchKeyDown","toggleMultiple","checked","selected","add","delete","ordered","has","dateMode","parseDateFilterValue","setDateMode","renderRelativeDateOptions","relativeFilter","h","class","role","ChoiceOptionRow","active","usesSubtext","tabIndex","onFocus","onKeyDown","onHover","onSelect","renderDateCalendar","selectionMode","onDsChange","stopPropagation","renderDateFilter","hasContainer","tabs","renderOptionSearch","ChoiceSearch","hasFocusBoundary","hasInteractionFill","placeholder","controls","inputRef","onValueChange","renderNoOptionResults","body","renderOptions","allOptions","choiceListUsesSubtext","subtext","isSelected","leading","presentation","Boolean","captionIconOnly","captionCompactDisconnect","observeTableCaptionCompact","compact","renderCaptionTooltip","trigger","renderFooter","categoriesClear","appliedCount","as","variant","color","type","disabled","onClick","renderMatchModeFooter","nextMode","render","Host","name","emphasis","state","activeFilter","hasActiveFilters","categoriesClearFooter","textVariant","CONTROL_TEXT_VARIANT","iconSize","popupId","popupStyle","left","top","transform","Math","round","zIndex","visibility","controlWidthClass","ref","element","inputId","String","lineTruncation","popover","style","count","divider","onMouseDown","hasRing","intent","contrast","isInset","rounded"],"sources":["src/wc/components/FilterMenu/FilterMenu.css?tag=ds-filter-menu&encapsulation=scoped","src/wc/components/FilterMenu/FilterMenu.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/choice-list.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/search-control.css';\n@import '../../utils/table-caption-control.css';\n\n:host(.filter-menu-host--external-trigger) {\n display: contents;\n}\n\n.filter-menu {\n display: flex;\n min-height: 0;\n flex-direction: column;\n color: var(--color-foreground-secondary);\n}\n\n.filter-menu__body {\n display: grid;\n grid-template-columns: var(--dimension-menu-width-xs) var(--dimension-menu-width-sm);\n min-height: calc(var(--dimension-size-800) * 4 + var(--dimension-space-150));\n max-height: calc(100vh - var(--dimension-size-800) - var(--dimension-size-600));\n}\n\n.filter-menu__category-pane {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n border-inline-end: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.filter-menu__categories {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.filter-menu__category-section {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.filter-menu__category-section.ds-choice-section--divided {\n padding-block-end: var(--dimension-space-050);\n}\n\n.filter-menu__category {\n justify-content: space-between;\n width: 100%;\n border: 0;\n background: transparent;\n color: var(--color-foreground-secondary);\n cursor: default;\n text-align: start;\n}\n\n.filter-menu__category--active {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__category-dot-box {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon, var(--dimension-iconography-md));\n height: var(--ds-control-icon, var(--dimension-iconography-md));\n pointer-events: none;\n}\n\n.filter-menu__options {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-menu__options-content {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: auto;\n}\n\n.filter-menu__option-search {\n position: relative;\n flex: 0 0 var(--dimension-size-500);\n min-width: 0;\n min-height: var(--dimension-size-500);\n background: transparent;\n}\n\n.filter-menu__option-search::after {\n content: '';\n position: absolute;\n inset: auto 0 0;\n height: var(--dimension-stroke-width-012);\n background-color: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.filter-menu__option-search .select-search {\n height: 100%;\n background: transparent;\n}\n\n.filter-menu__options--date,\n.filter-menu__option-list--date,\n.filter-menu__date {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__option-list--date,\n.filter-menu__date {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-header {\n flex: 0 0 var(--dimension-size-500);\n justify-content: center;\n min-block-size: var(--dimension-size-500);\n padding: var(--dimension-space-050);\n background: var(--color-background-secondary);\n}\n\n.filter-menu__date-body {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__date-relative {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-body > ds-calendar {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n}\n\n.filter-menu__footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__footer--categories-clear .ds-choice-footer__content {\n justify-content: flex-start;\n}\n\n.filter-menu__footer--categories-clear[aria-hidden='true']::before {\n visibility: hidden;\n}\n\n.ds-choice-footer__content:has(.filter-menu__apply) {\n column-gap: var(--dimension-space-100);\n}\n\n.filter-menu__apply ds-text {\n padding-right: 0;\n}\n\n.filter-menu__action-separator + .filter-menu__clear ds-text {\n padding-left: 0;\n}\n\n.filter-menu__apply {\n color: var(--color-foreground-bold-brand);\n}\n\n.filter-menu__apply:disabled {\n color: var(--color-foreground-tertiary);\n text-decoration-line: none;\n}\n\n.filter-menu__clear {\n --ds-text-action-foreground: var(--color-foreground-bold-negative);\n\n color: var(--ds-text-action-foreground);\n}\n\n.filter-menu__match-mode-footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__match-mode-content {\n justify-content: flex-start;\n padding-inline: calc(\n var(--dimension-space-050) + var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n}\n\n.filter-menu__match-mode-toggle {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: default;\n}\n\n@media (forced-colors: active) {\n .filter-menu__category-pane {\n border-inline-end-color: var(--ds-forced-color-content);\n }\n}\n\n.data-preferences-embedded {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n color: var(--color-foreground-secondary);\n}\n\n.data-preferences-embedded .filter-menu__body {\n grid-template-columns: min(var(--dimension-menu-width-xs), 40%) minmax(0, 1fr);\n}\n\n.filter-menu-vertical__section {\n border-bottom: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n.filter-menu-vertical__section > summary {\n cursor: default;\n padding: var(--dimension-space-200);\n}\n.filter-menu-vertical__section > summary ds-text {\n display: inline;\n}\n\n.filter-menu-vertical__section > summary {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n list-style: none;\n}\n.filter-menu-vertical__section > summary::-webkit-details-marker {\n display: none;\n}\n.filter-menu-vertical__section:not([open]) .filter-menu-vertical__chevron {\n transform: rotate(-90deg);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n type VNode,\n Watch,\n} from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n DATE_FILTER_RELATIVE_PRESETS,\n controlWidthClass,\n dateFilterRelativeValue,\n parseDateFilterValue,\n resolveChoicePopupAlignOffset,\n resolveCssLengthPx,\n resolveMotionTimeMs,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n type ControlWidth,\n} from '../../utils';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type { AnchoredAlign, AnchoredSide } from '../../utils/anchored-position';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow, ChoiceSearch } from '../../utils/choice-list-parts';\nimport { choiceListUsesSubtext } from '../../utils/choice-list';\n\nexport type FilterMenuFilterKind = 'single' | 'multiple' | 'boolean' | 'date';\nexport type FilterMenuSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type FilterMenuWidth = ControlWidth;\nexport type FilterMenuFooterLayout = 'summary' | 'categories-clear';\nexport type FilterMenuMatchMode = 'any' | 'all';\ntype FilterMenuDateMode = 'range' | 'relative';\n\nexport interface FilterMenuOption {\n label: string;\n value: string;\n description?: string;\n isInactive?: boolean;\n}\n\nexport interface FilterMenuFilter {\n id: string;\n label: string;\n kind: FilterMenuFilterKind;\n options?: FilterMenuOption[];\n description?: string;\n fieldLabel?: string;\n /** Draw a standard menu-section divider after this category. */\n divider?: boolean;\n}\n\nexport type FilterMenuValue = string[] | boolean | string;\nexport type FilterMenuValues = Record<string, FilterMenuValue | undefined>;\nexport type FilterMenuMatchModes = Record<string, FilterMenuMatchMode | undefined>;\n\nexport interface FilterMenuChangeDetail {\n filterId: string;\n value: FilterMenuValue;\n}\n\nexport interface FilterMenuMatchModeChangeDetail {\n filterId: string;\n mode: FilterMenuMatchMode;\n}\n\nlet filterMenuId = 0;\n\nconst ICON_SIZE: Record<FilterMenuSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst DATE_MODE_TABS = [\n { id: 'relative', label: 'Relative' },\n { id: 'range', label: 'Range' },\n];\n\nconst RELATIVE_DATE_OPTIONS: FilterMenuOption[] = DATE_FILTER_RELATIVE_PRESETS.map(preset => ({\n label: preset.label,\n value: dateFilterRelativeValue(preset.value),\n}));\n\n@Component({\n tag: 'ds-filter-menu',\n styleUrl: 'FilterMenu.css',\n scoped: true,\n})\nexport class FilterMenu {\n @Element() el!: HTMLElement;\n\n /** Controlled popup visibility. */\n /** Render content inside a parent-owned surface; the parent owns dismissal and positioning. */\n @Prop() embedded: boolean = false;\n /** Stacked, collapsible sections for a configuration panel. */\n @Prop() vertical: boolean = false;\n @Prop({ mutable: true }) open: boolean = false;\n /** Select trigger text. */\n @Prop() triggerLabel: string = 'Filters';\n /** Append the active-filter count to the visible trigger label. */\n @Prop() showSelectedCount: boolean = true;\n /** Optional select trigger prefix icon name. */\n @Prop() icon: string | undefined = 'Filters';\n /** Select trigger density. */\n @Prop() size: FilterMenuSize = 'md';\n /** Select trigger width fit. */\n @Prop() width: FilterMenuWidth = 'hug';\n /** Show the surface-aware inset border around the select trigger. */\n /** Show the trigger chevron. */\n @Prop() showIndicator: boolean = true;\n @Prop() hasBorder: boolean = true;\n /** Show selected interaction fill when one or more criteria are active. */\n /** Keep trigger colors neutral when a value is selected. */\n @Prop() neutralTrigger: boolean = false;\n /** Stage filter edits until Apply is pressed. */\n @Prop() applyRequired: boolean = false;\n @State() private draftValues?: FilterMenuValues;\n @State() private draftModes?: FilterMenuMatchModes;\n\n private changeValue(detail: FilterMenuChangeDetail): void {\n if (this.applyRequired)\n this.draftValues = { ...(this.draftValues ?? this.values), [detail.filterId]: detail.value };\n else this.dsChange.emit(detail);\n }\n private changeMode(detail: FilterMenuMatchModeChangeDetail): void {\n if (this.applyRequired)\n this.draftModes = { ...(this.draftModes ?? this.matchModes), [detail.filterId]: detail.mode };\n else this.dsMatchModeChange.emit(detail);\n }\n private get hasPendingChanges(): boolean {\n const normalize = (value: FilterMenuValue | undefined) =>\n Array.isArray(value) ? (value.length ? [...value].sort() : undefined) : value || undefined;\n const values = this.draftValues ?? this.values;\n const modes = this.draftModes ?? this.matchModes;\n return this.filters.some(\n filter =>\n JSON.stringify(normalize(values[filter.id])) !==\n JSON.stringify(normalize(this.values[filter.id])) ||\n (modes[filter.id] ?? 'any') !== (this.matchModes[filter.id] ?? 'any')\n );\n }\n private applyDraft(): void {\n if (!this.hasPendingChanges) return;\n if (this.draftValues && Object.keys(this.draftValues).length === 0) {\n this.dsClear.emit();\n } else if (this.draftValues) {\n for (const id of new Set([...Object.keys(this.values), ...Object.keys(this.draftValues)])) {\n if (JSON.stringify(this.values[id]) !== JSON.stringify(this.draftValues[id]))\n this.dsChange.emit({\n filterId: id,\n value:\n this.draftValues[id] ??\n (Array.isArray(this.values[id])\n ? []\n : typeof this.values[id] === 'boolean'\n ? false\n : ''),\n });\n }\n }\n if (this.draftModes) {\n for (const filterId of new Set([\n ...Object.keys(this.matchModes),\n ...Object.keys(this.draftModes),\n ])) {\n const mode = this.draftModes[filterId] ?? 'any';\n if ((this.matchModes[filterId] ?? 'any') !== mode)\n this.dsMatchModeChange.emit({ filterId, mode });\n }\n }\n }\n @Prop() activeFill: boolean = false;\n /**\n * Opt into table-caption icon-only chrome below 900px. The trigger omits its\n * visible label and chevron; keep an accessible name via aria-label.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n /** ID applied to the internal select trigger. */\n @Prop() inputId: string | undefined;\n /** Direct accessible name for the internal select trigger. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Product-owned filter categories and option definitions. */\n @Prop() filters: FilterMenuFilter[] = [];\n /** Controlled values keyed by filter id. */\n @Prop() values: FilterMenuValues = {};\n /** Controlled any/all match mode keyed by multiple-choice filter id. Defaults to any. */\n @Prop() matchModes: FilterMenuMatchModes = {};\n /** Controlled category shown in the option pane. */\n @Prop() activeFilterId: string | undefined;\n /** External trigger element to position against. */\n @Prop() anchor: HTMLElement | undefined;\n /** ID of the external trigger element used for positioning and focus return. */\n @Prop() anchorId: string | undefined;\n /** Explicit collision owner; otherwise the nearest data-ds-overlay-boundary ancestor is used. */\n @Prop() boundary: HTMLElement | undefined;\n /** Preferred popup side; collision handling may flip it. */\n @Prop() side: AnchoredSide = 'bottom';\n /** Cross-axis alignment against the trigger. */\n @Prop() align: AnchoredAlign = 'end';\n /** Gap between trigger and popup — number in px or a TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number in px or a TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Popup width. It remains clamped to its collision boundary by the component recipe. */\n @Prop() menuWidth: string = TOKEN_CSS_LENGTHS.menuWidthLg;\n /** Accessible name for the non-modal filter dialog. */\n @Prop() menuLabel: string = 'Filters';\n /** Accessible name for the category tab list. */\n @Prop() categoriesLabel: string = 'Filter categories';\n /** Footer action and date-clear accessible label. */\n @Prop() clearLabel: string = 'Clear';\n /** Placeholder shown in each non-date option search header. */\n @Prop() searchPlaceholder: string = 'Search';\n /** Empty-state text shown when an option search has no matches. */\n @Prop() noResultsText: string = 'No results';\n /** Footer recipe: full-width selected summary or reserved category-pane Clear action. */\n @Prop() footerLayout: FilterMenuFooterLayout = 'summary';\n /** Show a visible focus ring on initial entry after keyboard activation. */\n @Prop() initialFocusVisible: boolean = false;\n\n @State() private shouldRender = false;\n @State() private closing = false;\n @State() private positionReady = false;\n @State() private pos: { x: number; y: number } = { x: 0, y: 0 };\n @State() private focusRingVisible = false;\n @State() private activeOptionIndex = 0;\n @State() private captionCompact = false;\n @State() private dateModeByFilter: Record<string, FilterMenuDateMode> = {};\n @State() private optionQueryByFilter: Record<string, string> = {};\n\n /** Requests a controlled value replacement without closing the popup. */\n @Event() dsChange!: EventEmitter<FilterMenuChangeDetail>;\n /** Requests that the consumer clear every filter value. */\n @Event() dsClear!: EventEmitter<void>;\n /** Requests a controlled any/all mode replacement for a multiple-choice filter. */\n @Event() dsMatchModeChange!: EventEmitter<FilterMenuMatchModeChangeDetail>;\n /** Requests a controlled active-category replacement. */\n @Event() dsActiveFilterChange!: EventEmitter<string>;\n /** Requests that the controlled popup close. */\n @Event() dsClose!: EventEmitter<void>;\n /** Emitted whenever internal select-trigger activation changes popup visibility. */\n @Event() dsOpenChange!: EventEmitter<boolean>;\n /** Emitted after exit motion and rendered popup removal complete. */\n @Event() dsAfterClose!: EventEmitter<void>;\n\n private readonly generatedId = `ds-filter-menu-${++filterMenuId}`;\n private triggerElement: HTMLButtonElement | null = null;\n private pendingInitialFocusVisible = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n private closingSnapshot: {\n filters: FilterMenuFilter[];\n values: FilterMenuValues;\n matchModes: FilterMenuMatchModes;\n activeFilterId: string | undefined;\n } | null = null;\n\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.open) return null;\n const anchorRect = anchor.getBoundingClientRect();\n const sectionInsetPx = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect,\n popupWidth: popup.offsetWidth || this.popupFallbackWidth,\n popupHeight: popup.offsetHeight || this.popupFallbackHeight,\n side: this.side,\n align: this.align,\n sideOffsetPx: resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050),\n alignOffsetPx: resolveChoicePopupAlignOffset({\n align: this.align,\n alignOffsetPx: resolveCssLengthPx(this.alignOffset, 0),\n sectionInsetPx,\n }),\n viewportPadPx: this.viewportPad,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n };\n },\n apply: ({ x, y }) => {\n this.pos = { x, y };\n },\n onReady: () => {\n this.positionReady = true;\n },\n liveUpdate: 'double-frame',\n observeResize: true,\n topLayer: true,\n });\n private readonly interaction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.close(),\n });\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n disconnectedCallback() {\n this.disconnectCaptionCompactObserver();\n this.position.unobserve();\n this.teardownListeners();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (!isOpen) {\n this.draftValues = undefined;\n this.draftModes = undefined;\n }\n if (this.embedded) return;\n if (isOpen) {\n this.teardownListeners();\n this.closingSnapshot = null;\n this.shouldRender = true;\n this.closing = false;\n this.positionReady = false;\n this.focusRingVisible = this.pendingInitialFocusVisible || this.initialFocusVisible;\n this.setupListeners();\n this.position.schedule(() => this.focusInitialCategory());\n return;\n }\n\n if (!this.shouldRender) return;\n this.position.cancel();\n this.captureClosingSnapshot();\n this.closing = true;\n this.teardownListeners();\n const duration = resolveMotionTimeMs(\n TOKEN_DEFAULTS.motionShort2,\n TOKEN_DEFAULTS.animationDurationShort3\n );\n if (duration <= 0) {\n this.finishClose();\n return;\n }\n this.closeTimer = setTimeout(() => this.finishClose(), duration);\n }\n\n @Watch('anchor')\n @Watch('anchorId')\n @Watch('boundary')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('menuWidth')\n onPositionInputChange() {\n if (this.open) this.position.schedule();\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (this.embedded && (event.key === 'Escape' || event.key === 'Tab')) return;\n if ((!this.shouldRender && !this.embedded) || this.closing) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n if (event.key !== 'Tab' || !this.tabLeavesPopup(event)) return;\n event.preventDefault();\n this.close(false);\n this.interaction.moveFocusAfterTab(event.shiftKey);\n }\n\n private get resolvedAnchor(): HTMLElement | null {\n if (this.anchor) return this.anchor;\n if (this.anchorId) return document.getElementById(this.anchorId);\n return this.triggerElement;\n }\n\n private get usesInternalTrigger(): boolean {\n return !this.embedded && !this.anchor && !this.anchorId;\n }\n\n private get viewportPad(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get popupFallbackWidth(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuWidthLg, TOKEN_DEFAULTS.menuWidthLg);\n }\n\n private get popupFallbackHeight(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuFallbackHeight, TOKEN_DEFAULTS.menuFallbackHeight);\n }\n\n private setupListeners() {\n this.interaction.connect();\n this.position.observe();\n }\n\n private teardownListeners() {\n this.position.unobserve();\n this.interaction.disconnect();\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private close(restoreFocus = true) {\n this.captureClosingSnapshot();\n if (restoreFocus) this.interaction.focusAnchor();\n this.dsOpenChange.emit(false);\n this.dsClose.emit();\n this.open = false;\n this.onOpenChange(false);\n }\n\n private toggleFromTrigger(event: MouseEvent) {\n if (this.open) {\n this.close();\n return;\n }\n this.pendingInitialFocusVisible = event.detail === 0;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private handleTriggerKeyDown(event: KeyboardEvent) {\n if (event.key !== 'ArrowDown' || this.open) return;\n event.preventDefault();\n this.pendingInitialFocusVisible = true;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private finishClose() {\n const popup = this.el.querySelector<HTMLElement>('.filter-menu-popup');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.shouldRender = false;\n this.closing = false;\n this.closingSnapshot = null;\n this.closeTimer = null;\n this.dateModeByFilter = {};\n this.optionQueryByFilter = {};\n this.dsAfterClose.emit();\n }\n\n private captureClosingSnapshot() {\n if (this.closingSnapshot) return;\n this.closingSnapshot = {\n filters: this.filters.map(filter => ({\n ...filter,\n options: filter.options?.map(option => ({ ...option })),\n })),\n values: Object.fromEntries(\n Object.entries(this.values).map(([key, value]) => [\n key,\n Array.isArray(value) ? [...value] : value,\n ])\n ),\n matchModes: { ...this.matchModes },\n activeFilterId: this.activeFilterId,\n };\n }\n\n private focusInitialCategory() {\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>('.filter-menu__category[tabindex=\"0\"]')?.focus();\n this.pendingInitialFocusVisible = false;\n });\n }\n\n private tabLeavesPopup(event: KeyboardEvent): boolean {\n return this.interaction.tabLeavesPopup(event);\n }\n\n private selectedFilter(filters: FilterMenuFilter[], activeFilterId: string | undefined) {\n return filters.find(filter => filter.id === activeFilterId) ?? filters[0];\n }\n\n private selectedCount(filter: FilterMenuFilter, values: FilterMenuValues): number {\n const value = values[filter.id];\n if (filter.kind === 'multiple') return Array.isArray(value) ? value.length : 0;\n if (filter.kind === 'boolean') return value === true ? 1 : 0;\n return typeof value === 'string' && value.length > 0 ? 1 : 0;\n }\n\n private totalSelected(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.reduce((total, filter) => total + this.selectedCount(filter, values), 0);\n }\n\n private activeFilterCount(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.filter(filter => this.selectedCount(filter, values) > 0).length;\n }\n\n private selectCategory(filterId: string, focus = false) {\n this.activeOptionIndex = 0;\n this.dsActiveFilterChange.emit(filterId);\n if (!focus) return;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n });\n }\n\n private handleCategoryKeyDown(\n event: KeyboardEvent,\n filters: FilterMenuFilter[],\n filterId: string\n ) {\n const currentIndex = filters.findIndex(filter => filter.id === filterId);\n let nextIndex: number;\n if (event.key === 'ArrowDown') nextIndex = (currentIndex + 1) % filters.length;\n else if (event.key === 'ArrowUp')\n nextIndex = (currentIndex - 1 + filters.length) % filters.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = filters.length - 1;\n else if (event.key === 'ArrowRight') {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(\n '.filter-menu__options [role=\"option\"], .filter-menu__options [data-date-option], .filter-menu__options input'\n )\n ?.focus();\n });\n return;\n } else return;\n\n event.preventDefault();\n this.focusRingVisible = true;\n this.selectCategory(filters[nextIndex].id, true);\n }\n\n private handlePanelKeyDown(event: KeyboardEvent, filterId: string) {\n if (event.key !== 'ArrowLeft') return;\n event.preventDefault();\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n }\n\n private handleOptionKeyDown(\n event: KeyboardEvent,\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n index: number,\n values: FilterMenuValues,\n visibleOptions: FilterMenuOption[] = filter.options ?? []\n ) {\n if (event.key === 'ArrowLeft') {\n this.handlePanelKeyDown(event, filter.id);\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(filter, option, values);\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n const enabled = visibleOptions\n .map((candidate, optionIndex) => ({ candidate, optionIndex }))\n .filter(({ candidate }) => !candidate.isInactive)\n .map(({ optionIndex }) => optionIndex);\n if (!enabled.length) return;\n const current = enabled.indexOf(index);\n let next: number;\n if (event.key === 'Home') next = enabled[0];\n else if (event.key === 'End') next = enabled[enabled.length - 1];\n else {\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n const start = current >= 0 ? current : direction === 1 ? -1 : 0;\n next = enabled[(start + direction + enabled.length) % enabled.length];\n }\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private optionMatchesQuery(option: FilterMenuOption, query: string): boolean {\n const normalized = query.trim().toLocaleLowerCase();\n if (!normalized) return true;\n return `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(normalized);\n }\n\n private visibleOptions(\n filter: FilterMenuFilter,\n query = this.optionQueryByFilter[filter.id] ?? ''\n ) {\n if (filter.kind === 'boolean') {\n const option = this.booleanOption(filter);\n return this.optionMatchesQuery(option, query) ? [option] : [];\n }\n return (filter.options ?? []).filter(option => this.optionMatchesQuery(option, query));\n }\n\n private booleanOption(filter: FilterMenuFilter): FilterMenuOption {\n return {\n label: filter.fieldLabel ?? filter.label,\n value: 'true',\n description: filter.description,\n };\n }\n\n private setOptionQuery(filter: FilterMenuFilter, value: string) {\n const visibleOptions = this.visibleOptions(filter, value);\n const firstEnabled = visibleOptions.findIndex(option => !option.isInactive);\n this.activeOptionIndex = firstEnabled;\n this.focusRingVisible = false;\n this.optionQueryByFilter = { ...this.optionQueryByFilter, [filter.id]: value };\n requestAnimationFrame(() => {\n const content = this.el.querySelector<HTMLElement>('.filter-menu__options-content');\n if (content) content.scrollTop = 0;\n this.position.schedule();\n });\n }\n\n private handleOptionSearchKeyDown(event: KeyboardEvent, filter: FilterMenuFilter) {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const visibleOptions = this.visibleOptions(filter);\n const enabled = visibleOptions\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.isInactive)\n .map(({ index }) => index);\n if (!enabled.length) return;\n event.preventDefault();\n const next = event.key === 'ArrowDown' ? enabled[0] : enabled[enabled.length - 1];\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private toggleMultiple(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n checked: boolean,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n const current = Array.isArray(values[filter.id]) ? (values[filter.id] as string[]) : [];\n const selected = new Set(current);\n if (checked) selected.add(option.value);\n else selected.delete(option.value);\n const ordered = (filter.options ?? [])\n .map(candidate => candidate.value)\n .filter(value => selected.has(value));\n this.changeValue({ filterId: filter.id, value: ordered });\n }\n\n private selectOption(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n if (filter.kind === 'single') {\n this.changeValue({ filterId: filter.id, value: option.value });\n return;\n }\n const selected = Array.isArray(values[filter.id])\n ? (values[filter.id] as string[]).includes(option.value)\n : false;\n this.toggleMultiple(filter, option, !selected, values);\n }\n\n private dateMode(filterId: string, value: FilterMenuValue | undefined): FilterMenuDateMode {\n return this.dateModeByFilter[filterId] ?? parseDateFilterValue(value)?.kind ?? 'relative';\n }\n\n private setDateMode(filter: FilterMenuFilter, mode: string) {\n if (mode !== 'range' && mode !== 'relative') return;\n this.dateModeByFilter = { ...this.dateModeByFilter, [filter.id]: mode };\n this.activeOptionIndex = 0;\n }\n\n private renderRelativeDateOptions(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const relativeFilter: FilterMenuFilter = {\n ...filter,\n kind: 'single',\n options: RELATIVE_DATE_OPTIONS,\n };\n return (\n <div\n class=\"filter-menu__date-relative ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label=\"Relative date\"\n >\n {RELATIVE_DATE_OPTIONS.map((option, index) => (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-relative-${index}`}\n option={option}\n selected={value === option.value}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={false}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, relativeFilter, option, index, {\n [filter.id]: value,\n })\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.changeValue({ filterId: filter.id, value: option.value })}\n />\n ))}\n </div>\n );\n }\n\n private renderDateCalendar(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n return (\n <ds-calendar\n selectionMode=\"range\"\n value={typeof value === 'string' ? value : ''}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.changeValue({ filterId: filter.id, value: event.detail });\n }}\n />\n );\n }\n\n private renderDateFilter(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const mode = this.dateMode(filter.id, value);\n return (\n <div class=\"filter-menu__date\">\n <header class=\"filter-menu__date-header ds-chrome-header ds-chrome-header--bounded\">\n <ds-tab-group\n ariaLabel=\"Date filter mode\"\n size=\"md\"\n width=\"fill\"\n hasContainer={false}\n value={mode}\n tabs={DATE_MODE_TABS}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.setDateMode(filter, event.detail);\n }}\n />\n </header>\n <div class=\"filter-menu__date-body\">\n {mode === 'relative'\n ? this.renderRelativeDateOptions(filter, value)\n : this.renderDateCalendar(filter, value)}\n </div>\n </div>\n );\n }\n\n private renderOptionSearch(filter: FilterMenuFilter) {\n return (\n <div class=\"filter-menu__option-search\">\n <ChoiceSearch\n size=\"md\"\n hasFocusBoundary={false}\n hasInteractionFill={false}\n value={this.optionQueryByFilter[filter.id] ?? ''}\n placeholder={this.searchPlaceholder}\n ariaLabel={`Search ${filter.label} options`}\n controls={`${this.generatedId}-${filter.id}-options`}\n inputRef={() => undefined}\n clearLabel={`Clear ${filter.label} search`}\n onValueChange={value => this.setOptionQuery(filter, value)}\n onKeyDown={(event: KeyboardEvent) => this.handleOptionSearchKeyDown(event, filter)}\n />\n </div>\n );\n }\n\n private renderNoOptionResults() {\n return (\n <div\n class=\"ds-choice-empty ds-empty-region\"\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.noResultsText}\n aria-live=\"polite\"\n >\n <ds-empty-state body={this.noResultsText} />\n </div>\n );\n }\n\n private renderOptions(filter: FilterMenuFilter, values: FilterMenuValues) {\n const value = values[filter.id];\n if (filter.kind === 'multiple' || filter.kind === 'single') {\n const selected = Array.isArray(value) ? value : [];\n const allOptions = filter.options ?? [];\n const options = this.visibleOptions(filter);\n const usesSubtext = choiceListUsesSubtext(\n allOptions.map(option => ({\n label: option.label,\n value: option.value,\n subtext: option.description,\n }))\n );\n if (!options.length) return this.renderNoOptionResults();\n return options.map((option, index) => {\n const isSelected =\n filter.kind === 'multiple' ? selected.includes(option.value) : value === option.value;\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-${index}`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n isInactive: option.isInactive,\n }}\n selected={isSelected}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={usesSubtext}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n leading={\n filter.kind === 'multiple' ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={isSelected} presentation />\n </span>\n ) : undefined\n }\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, filter, option, index, values, options)\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.selectOption(filter, option, values)}\n />\n );\n });\n }\n\n if (filter.kind === 'boolean') {\n const [option] = this.visibleOptions(filter);\n if (!option) return this.renderNoOptionResults();\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-0`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n }}\n selected={value === true}\n active\n focusRingVisible={this.focusRingVisible}\n usesSubtext={Boolean(option.description)}\n tabIndex={0}\n leading={\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={value === true} presentation />\n </span>\n }\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') this.handlePanelKeyDown(event, filter.id);\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.changeValue({ filterId: filter.id, value: value !== true });\n }\n }}\n onHover={() => {\n this.focusRingVisible = false;\n }}\n onSelect={() => this.changeValue({ filterId: filter.id, value: value !== true })}\n />\n );\n }\n\n return this.renderDateFilter(filter, value);\n }\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel && this.captionCompact && this.usesInternalTrigger && Boolean(this.icon)\n );\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private renderCaptionTooltip(trigger: VNode, label: string): VNode {\n if (!this.collapseLabel) return trigger;\n return (\n <ds-tooltip label={label} side=\"top\" size=\"sm\">\n {trigger}\n </ds-tooltip>\n );\n }\n\n private renderFooter(totalSelected: number, categoriesClear: boolean) {\n const appliedCount = this.totalSelected(this.filters, this.values);\n if (this.applyRequired && totalSelected === 0 && appliedCount === 0) return null;\n return (\n <div\n class={{\n 'filter-menu__footer': true,\n 'filter-menu__footer--categories-clear': categoriesClear,\n 'ds-choice-footer': true,\n }}\n aria-hidden={\n !this.applyRequired &&\n categoriesClear &&\n totalSelected === 0 &&\n !this.draftValues &&\n !this.draftModes\n ? 'true'\n : undefined\n }\n >\n <div class=\"ds-choice-footer__content ds-control--md\">\n {!categoriesClear ? (\n <ds-text\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-live=\"polite\"\n >\n {totalSelected} selected\n </ds-text>\n ) : null}\n {this.applyRequired ? (\n <button\n class=\"filter-menu__apply ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n disabled={!this.hasPendingChanges}\n onClick={() => this.applyDraft()}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n Apply\n </ds-text>\n </button>\n ) : null}\n {this.applyRequired && (totalSelected > 0 || appliedCount > 0) ? (\n <ds-text\n class=\"filter-menu__action-separator\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"tertiary\"\n aria-hidden=\"true\"\n >\n ·\n </ds-text>\n ) : null}\n {totalSelected > 0 || (this.applyRequired && appliedCount > 0) ? (\n <button\n class=\"filter-menu__clear ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n onClick={() => {\n if (this.applyRequired) {\n this.draftValues = {};\n this.draftModes = {};\n }\n this.dsClear.emit();\n }}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.clearLabel}\n </ds-text>\n </button>\n ) : null}\n </div>\n </div>\n );\n }\n\n private renderMatchModeFooter(filter: FilterMenuFilter, matchModes: FilterMenuMatchModes) {\n const mode: FilterMenuMatchMode = matchModes[filter.id] === 'all' ? 'all' : 'any';\n const nextMode: FilterMenuMatchMode = mode === 'any' ? 'all' : 'any';\n return (\n <div class=\"filter-menu__match-mode-footer ds-choice-footer\">\n <div class=\"filter-menu__match-mode-content ds-choice-footer__content ds-control--md\">\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n Limit results to\n </ds-text>\n <button\n class=\"filter-menu__match-mode-toggle ds-text-action ds-focus-ring\"\n type=\"button\"\n aria-label={`Limit ${filter.label} results to ${nextMode} selected`}\n onClick={() => this.changeMode({ filterId: filter.id, mode: nextMode })}\n onKeyDown={(event: KeyboardEvent) => this.handlePanelKeyDown(event, filter.id)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {mode}\n </ds-text>\n </button>\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n selected\n </ds-text>\n </div>\n </div>\n );\n }\n\n render() {\n if (this.vertical)\n return (\n <Host class=\"filter-menu-vertical\">\n {this.filters.map(filter => (\n <details open key={filter.id} class=\"filter-menu-vertical__section\">\n <summary>\n <ds-icon class=\"filter-menu-vertical__chevron\" name=\"ChevronDown\" size=\"md\" />\n <ds-text variant=\"text-body-medium\" emphasis>\n {filter.label}\n </ds-text>\n </summary>\n {filter.kind !== 'date' && this.renderOptionSearch(filter)}\n <div\n id={`${this.generatedId}-${filter.id}-options`}\n role={filter.kind === 'date' ? undefined : 'listbox'}\n aria-label={filter.label}\n aria-multiselectable={filter.kind === 'multiple' ? 'true' : undefined}\n class=\"ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n >\n {this.renderOptions(filter, this.values)}\n </div>\n {filter.kind === 'multiple' && this.renderMatchModeFooter(filter, this.matchModes)}\n </details>\n ))}\n </Host>\n );\n const state =\n this.closing && this.closingSnapshot\n ? this.closingSnapshot\n : {\n filters: this.filters,\n values: this.draftValues ?? this.values,\n matchModes: this.draftModes ?? this.matchModes,\n activeFilterId: this.activeFilterId,\n };\n const activeFilter = this.selectedFilter(state.filters, state.activeFilterId);\n const totalSelected = this.totalSelected(state.filters, state.values);\n const activeFilterCount = this.activeFilterCount(state.filters, state.values);\n const hasActiveFilters = activeFilterCount > 0;\n const categoriesClearFooter = this.footerLayout === 'categories-clear';\n const label = `${this.triggerLabel}${\n this.showSelectedCount && hasActiveFilters ? ` · ${activeFilterCount}` : ''\n }`;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const popupId = `${this.generatedId}-popup`;\n const popupStyle: Record<string, string> = {\n position: 'fixed',\n left: '0',\n top: '0',\n width: this.menuWidth,\n transform: `translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,\n zIndex: '9998',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n\n return (\n <Host\n class={{\n 'filter-menu-host': true,\n 'filter-menu-host--external-trigger': !this.usesInternalTrigger,\n 'ds-select-trigger-host': this.usesInternalTrigger,\n [`ds-control--${this.size}`]: true,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n >\n {this.usesInternalTrigger\n ? this.renderCaptionTooltip(\n <button\n ref={element => {\n this.triggerElement = (element as HTMLButtonElement) ?? null;\n }}\n id={this.inputId ?? `${this.generatedId}-trigger`}\n type=\"button\"\n class={{\n trigger: true,\n 'ds-control-frame': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.activeFill && hasActiveFilters,\n 'trigger--expanded': this.open || this.closing,\n 'ds-interaction-fill--surface-open': this.open || this.closing,\n 'trigger--bordered': this.hasBorder,\n 'trigger--has-value': hasActiveFilters && !this.neutralTrigger,\n [`ds-control--${this.size}`]: true,\n }}\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.open)}\n aria-controls={this.open ? popupId : undefined}\n aria-label={this.ariaLabel ?? this.menuLabel}\n onClick={(event: MouseEvent) => this.toggleFromTrigger(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleTriggerKeyDown(event)}\n >\n {this.icon ? (\n <span\n class=\"trigger__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n ) : null}\n {this.captionIconOnly ? null : (\n <ds-text\n class=\"trigger__label-box trigger__label trigger__label-content ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant={textVariant}\n color=\"inherit\"\n lineTruncation={1}\n >\n {label}\n </ds-text>\n )}\n {this.captionIconOnly || !this.showIndicator ? null : (\n <span\n class=\"trigger__chevron ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name=\"ChevronDown\" size={iconSize} color=\"inherit\" />\n </span>\n )}\n </button>,\n this.captionIconOnly ? label : ''\n )\n : null}\n\n {this.shouldRender || this.embedded ? (\n <div\n id={popupId}\n popover={this.embedded ? undefined : 'manual'}\n class={{\n 'filter-menu-popup': true,\n 'ds-choice-popup': !this.embedded,\n 'data-preferences-embedded': this.embedded,\n 'ds-choice-popup--closing': this.closing,\n }}\n style={this.embedded ? undefined : popupStyle}\n role=\"dialog\"\n aria-label={this.menuLabel}\n >\n {activeFilter ? (\n <div class=\"filter-menu\">\n <div class=\"filter-menu__body\">\n <div class=\"filter-menu__category-pane\">\n <div\n class=\"filter-menu__categories ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"tablist\"\n aria-label={this.categoriesLabel}\n aria-orientation=\"vertical\"\n >\n {state.filters.map(filter => {\n const active = filter.id === activeFilter.id;\n const count = this.selectedCount(filter, state.values);\n return (\n <div\n key={filter.id}\n class={{\n 'filter-menu__category-section': true,\n 'ds-choice-section--divided': Boolean(filter.divider),\n }}\n >\n <button\n id={`${this.generatedId}-${filter.id}-tab`}\n type=\"button\"\n role=\"tab\"\n data-filter-category={filter.id}\n class={{\n 'filter-menu__category': true,\n 'filter-menu__category--active': active,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && this.focusRingVisible,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': active,\n }}\n aria-selected={String(active)}\n aria-controls={`${this.generatedId}-panel`}\n tabIndex={active ? 0 : -1}\n onMouseDown={() => {\n this.focusRingVisible = false;\n }}\n onClick={() => this.selectCategory(filter.id)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCategoryKeyDown(event, state.filters, filter.id)\n }\n >\n <ds-text\n class=\"ds-choice-item__content ds-choice-item__label ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={active ? 'primary' : 'secondary'}\n >\n {filter.label}\n </ds-text>\n {count > 0 && filter.kind === 'date' ? (\n <span\n class=\"filter-menu__category-dot-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-badge variant=\"dot\" hasRing={false} label=\"\" />\n </span>\n ) : count > 0 ? (\n <ds-tag\n class=\"ds-choice-item__tag ds-interaction-fill__content\"\n label={String(count)}\n size=\"sm\"\n intent=\"brand\"\n contrast=\"bold\"\n isInset\n rounded\n />\n ) : null}\n </button>\n </div>\n );\n })}\n </div>\n {categoriesClearFooter ? this.renderFooter(totalSelected, true) : null}\n </div>\n\n <div\n id={`${this.generatedId}-panel`}\n class={{\n 'filter-menu__options': true,\n 'filter-menu__options--date': activeFilter.kind === 'date',\n }}\n role=\"tabpanel\"\n aria-labelledby={`${this.generatedId}-${activeFilter.id}-tab`}\n >\n {activeFilter.kind === 'date' ? null : this.renderOptionSearch(activeFilter)}\n <div class=\"filter-menu__options-content\">\n {activeFilter.kind === 'date' ? (\n <div key={activeFilter.id} class=\"filter-menu__option-list--date\">\n {this.renderOptions(activeFilter, state.values)}\n </div>\n ) : (\n <div\n id={`${this.generatedId}-${activeFilter.id}-options`}\n key={activeFilter.id}\n class=\"filter-menu__option-list ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label={activeFilter.label}\n aria-multiselectable={\n activeFilter.kind === 'multiple' ? 'true' : undefined\n }\n >\n {this.renderOptions(activeFilter, state.values)}\n </div>\n )}\n </div>\n {activeFilter.kind === 'multiple'\n ? this.renderMatchModeFooter(activeFilter, state.matchModes)\n : null}\n </div>\n </div>\n\n {!categoriesClearFooter && totalSelected > 0\n ? this.renderFooter(totalSelected, false)\n : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"+4BAAA,MAAMA,EAAgB,IAAM,qtwCCyE5B,IAAIC,EAAe,EAEnB,MAAMC,EAA+D,CACnEC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,MAGN,MAAMC,EAAiB,CACrB,CAAEC,GAAI,WAAYC,MAAO,YACzB,CAAED,GAAI,QAASC,MAAO,UAGxB,MAAMC,EAA4CC,EAA6BC,KAAIC,IAAM,CACvFJ,MAAOI,EAAOJ,MACdK,MAAOC,EAAwBF,EAAOC,W,MAQ3BE,EAAUC,EAAA,MAAAD,UAAAE,EALvB,WAAAC,CAAAC,G,uVAUUC,KAAAC,SAAoB,MAEpBD,KAAAE,SAAoB,MACHF,KAAAG,KAAgB,MAEjCH,KAAAI,aAAuB,UAEvBJ,KAAAK,kBAA6B,KAE7BL,KAAAM,KAA2B,UAE3BN,KAAAO,KAAuB,KAEvBP,KAAAQ,MAAyB,MAGzBR,KAAAS,cAAyB,KACzBT,KAAAU,UAAqB,KAGrBV,KAAAW,eAA0B,MAE1BX,KAAAY,cAAyB,MAwDzBZ,KAAAa,WAAsB,MAKLb,KAAAc,cAAyB,MAIfd,KAAAe,UAA2B,KAEtDf,KAAAgB,QAA8B,GAE9BhB,KAAAiB,OAA2B,GAE3BjB,KAAAkB,WAAmC,GAUnClB,KAAAmB,KAAqB,SAErBnB,KAAAoB,MAAuB,MAEvBpB,KAAAqB,WAA8BC,EAAkBC,SAEhDvB,KAAAwB,YAA+B,EAE/BxB,KAAAyB,UAAoBH,EAAkBI,YAEtC1B,KAAA2B,UAAoB,UAEpB3B,KAAA4B,gBAA0B,oBAE1B5B,KAAA6B,WAAqB,QAErB7B,KAAA8B,kBAA4B,SAE5B9B,KAAA+B,cAAwB,aAExB/B,KAAAgC,aAAuC,UAEvChC,KAAAiC,oBAA+B,MAEtBjC,KAAAkC,aAAe,MACflC,KAAAmC,QAAU,MACVnC,KAAAoC,cAAgB,MAChBpC,KAAAqC,IAAgC,CAAEC,EAAG,EAAGC,EAAG,GAC3CvC,KAAAwC,iBAAmB,MACnBxC,KAAAyC,kBAAoB,EACpBzC,KAAA0C,eAAiB,MACjB1C,KAAA2C,iBAAuD,GACvD3C,KAAA4C,oBAA8C,GAiB9C5C,KAAA6C,YAAc,oBAAoBjE,IAC3CoB,KAAA8C,eAA2C,KAC3C9C,KAAA+C,2BAA6B,MAC7B/C,KAAAgD,WAAmD,KAEnDhD,KAAAiD,UAAY,MACZjD,KAAAkD,gBAKG,KAEMlD,KAAAmD,SAAW,IAAIC,EAA2B,CACzDC,UAAW,IAAMrD,KAAKsD,eACtBC,SAAU,IAAMvD,KAAKwD,GAAGC,cAA2B,sBACnDC,iBAAkB,IAAM1D,KAAKwD,GAAGG,cAChCC,QAAS,CAACC,EAAQC,KAChB,IAAK9D,KAAKG,KAAM,OAAO,KACvB,MAAM4D,EAAaF,EAAOG,wBAC1B,MAAMC,EAAiBC,EAAmBC,EAAe5C,SAAU4C,EAAe5C,UAClF,MAAO,CACLwC,aACAK,WAAYN,EAAMO,aAAerE,KAAKsE,mBACtCC,YAAaT,EAAMU,cAAgBxE,KAAKyE,oBACxCtD,KAAMnB,KAAKmB,KACXC,MAAOpB,KAAKoB,MACZsD,aAAcR,EAAmBlE,KAAKqB,WAAY8C,EAAe5C,UACjEoD,cAAeC,EAA8B,CAC3CxD,MAAOpB,KAAKoB,MACZuD,cAAeT,EAAmBlE,KAAKwB,YAAa,GACpDyC,mBAEFY,cAAe7E,KAAK8E,YACpBC,cAAeC,OAAOC,WACtBC,eAAgBF,OAAOG,YACvBC,cAAeC,EAAmCxB,EAAQ7D,KAAKsF,UAChE,EAEHC,MAAO,EAAGjD,IAAGC,QACXvC,KAAKqC,IAAM,CAAEC,IAAGC,IAAG,EAErBiD,QAAS,KACPxF,KAAKoC,cAAgB,IAAI,EAE3BqD,WAAY,eACZC,cAAe,KACfC,SAAU,OAEK3F,KAAA4F,YAAc,IAAIC,EAAqC,CACtExC,UAAW,IAAMrD,KAAKsD,eACtBC,SAAU,IAAMvD,KAAKwD,GAAGC,cAA2B,sBACnDC,iBAAkB,IAAM1D,KAAKwD,GAAGG,cAChCmC,oBAAqB,IAAM9F,KAAK+F,SA+/BnC,CAlrCS,WAAAC,CAAYC,GAClB,GAAIjG,KAAKY,cACPZ,KAAKkG,YAAc,IAAMlG,KAAKkG,aAAelG,KAAKiB,OAAS,CAACgF,EAAOE,UAAWF,EAAOxG,YAClFO,KAAKoG,SAASC,KAAKJ,E,CAElB,UAAAK,CAAWL,GACjB,GAAIjG,KAAKY,cACPZ,KAAKuG,WAAa,IAAMvG,KAAKuG,YAAcvG,KAAKkB,WAAa,CAAC+E,EAAOE,UAAWF,EAAOO,WACpFxG,KAAKyG,kBAAkBJ,KAAKJ,E,CAEnC,qBAAYS,GACV,MAAMC,EAAalH,GACjBmH,MAAMC,QAAQpH,GAAUA,EAAMqH,OAAS,IAAIrH,GAAOsH,OAASC,UAAavH,GAASuH,UACnF,MAAM/F,EAASjB,KAAKkG,aAAelG,KAAKiB,OACxC,MAAMgG,EAAQjH,KAAKuG,YAAcvG,KAAKkB,WACtC,OAAOlB,KAAKgB,QAAQkG,MAClBC,GACEC,KAAKC,UAAUV,EAAU1F,EAAOkG,EAAOhI,QACrCiI,KAAKC,UAAUV,EAAU3G,KAAKiB,OAAOkG,EAAOhI,QAC7C8H,EAAME,EAAOhI,KAAO,UAAYa,KAAKkB,WAAWiG,EAAOhI,KAAO,Q,CAG7D,UAAAmI,GACN,IAAKtH,KAAK0G,kBAAmB,OAC7B,GAAI1G,KAAKkG,aAAeqB,OAAOC,KAAKxH,KAAKkG,aAAaY,SAAW,EAAG,CAClE9G,KAAKyH,QAAQpB,M,MACR,GAAIrG,KAAKkG,YAAa,CAC3B,IAAK,MAAM/G,KAAM,IAAIuI,IAAI,IAAIH,OAAOC,KAAKxH,KAAKiB,WAAYsG,OAAOC,KAAKxH,KAAKkG,eAAgB,CACzF,GAAIkB,KAAKC,UAAUrH,KAAKiB,OAAO9B,MAASiI,KAAKC,UAAUrH,KAAKkG,YAAY/G,IACtEa,KAAKoG,SAASC,KAAK,CACjBF,SAAUhH,EACVM,MACEO,KAAKkG,YAAY/G,KAChByH,MAAMC,QAAQ7G,KAAKiB,OAAO9B,IACvB,UACOa,KAAKiB,OAAO9B,KAAQ,UACzB,MACA,K,EAIhB,GAAIa,KAAKuG,WAAY,CACnB,IAAK,MAAMJ,KAAY,IAAIuB,IAAI,IAC1BH,OAAOC,KAAKxH,KAAKkB,eACjBqG,OAAOC,KAAKxH,KAAKuG,cAClB,CACF,MAAMC,EAAOxG,KAAKuG,WAAWJ,IAAa,MAC1C,IAAKnG,KAAKkB,WAAWiF,IAAa,SAAWK,EAC3CxG,KAAKyG,kBAAkBJ,KAAK,CAAEF,WAAUK,Q,GAsIhD,gBAAAmB,GACE3H,KAAKiD,UAAY,KACjBjD,KAAK4H,6BACL,GAAI5H,KAAKG,KAAMH,KAAK6H,aAAa,K,CAGnC,iBAAAC,GACE,IAAK9H,KAAKiD,UAAW,OACrBjD,KAAK4H,6BACL,GAAI5H,KAAKG,KAAMH,KAAK6H,aAAa,K,CAGnC,oBAAAE,GACE/H,KAAKgI,mCACLhI,KAAKmD,SAAS8E,YACdjI,KAAKkI,mB,CAIP,qBAAAC,GACEnI,KAAK4H,4B,CAIP,YAAAC,CAAaO,GACX,IAAKA,EAAQ,CACXpI,KAAKkG,YAAcc,UACnBhH,KAAKuG,WAAaS,S,CAEpB,GAAIhH,KAAKC,SAAU,OACnB,GAAImI,EAAQ,CACVpI,KAAKkI,oBACLlI,KAAKkD,gBAAkB,KACvBlD,KAAKkC,aAAe,KACpBlC,KAAKmC,QAAU,MACfnC,KAAKoC,cAAgB,MACrBpC,KAAKwC,iBAAmBxC,KAAK+C,4BAA8B/C,KAAKiC,oBAChEjC,KAAKqI,iBACLrI,KAAKmD,SAASmF,UAAS,IAAMtI,KAAKuI,yBAClC,M,CAGF,IAAKvI,KAAKkC,aAAc,OACxBlC,KAAKmD,SAASqF,SACdxI,KAAKyI,yBACLzI,KAAKmC,QAAU,KACfnC,KAAKkI,oBACL,MAAMQ,EAAWC,EACfxE,EAAeyE,aACfzE,EAAe0E,yBAEjB,GAAIH,GAAY,EAAG,CACjB1I,KAAK8I,cACL,M,CAEF9I,KAAKgD,WAAa+F,YAAW,IAAM/I,KAAK8I,eAAeJ,E,CAWzD,qBAAAM,GACE,GAAIhJ,KAAKG,KAAMH,KAAKmD,SAASmF,U,CAI/B,aAAAW,CAAcC,GACZ,GAAIlJ,KAAKC,WAAaiJ,EAAMC,MAAQ,UAAYD,EAAMC,MAAQ,OAAQ,OACtE,IAAMnJ,KAAKkC,eAAiBlC,KAAKC,UAAaD,KAAKmC,QAAS,OAC5D,GAAI+G,EAAMC,MAAQ,SAAU,CAC1BD,EAAME,iBACNpJ,KAAK+F,QACL,M,CAEF,GAAImD,EAAMC,MAAQ,QAAUnJ,KAAKqJ,eAAeH,GAAQ,OACxDA,EAAME,iBACNpJ,KAAK+F,MAAM,OACX/F,KAAK4F,YAAY0D,kBAAkBJ,EAAMK,S,CAG3C,kBAAYjG,GACV,GAAItD,KAAK6D,OAAQ,OAAO7D,KAAK6D,OAC7B,GAAI7D,KAAKwJ,SAAU,OAAOC,SAASC,eAAe1J,KAAKwJ,UACvD,OAAOxJ,KAAK8C,c,CAGd,uBAAY6G,GACV,OAAQ3J,KAAKC,WAAaD,KAAK6D,SAAW7D,KAAKwJ,Q,CAGjD,eAAY1E,GACV,OAAOZ,EAAmBC,EAAe5C,SAAU4C,EAAe5C,S,CAGpE,sBAAY+C,GACV,OAAOJ,EAAmBC,EAAezC,YAAayC,EAAezC,Y,CAGvE,uBAAY+C,GACV,OAAOP,EAAmBC,EAAeyF,mBAAoBzF,EAAeyF,mB,CAGtE,cAAAvB,GACNrI,KAAK4F,YAAYiE,UACjB7J,KAAKmD,SAAS2G,S,CAGR,iBAAA5B,GACNlI,KAAKmD,SAAS8E,YACdjI,KAAK4F,YAAYmE,aACjB,GAAI/J,KAAKgD,WAAY,CACnBgH,aAAahK,KAAKgD,YAClBhD,KAAKgD,WAAa,I,EAId,KAAA+C,CAAMkE,EAAe,MAC3BjK,KAAKyI,yBACL,GAAIwB,EAAcjK,KAAK4F,YAAYsE,cACnClK,KAAKmK,aAAa9D,KAAK,OACvBrG,KAAKoK,QAAQ/D,OACbrG,KAAKG,KAAO,MACZH,KAAK6H,aAAa,M,CAGZ,iBAAAwC,CAAkBnB,GACxB,GAAIlJ,KAAKG,KAAM,CACbH,KAAK+F,QACL,M,CAEF/F,KAAK+C,2BAA6BmG,EAAMjD,SAAW,EACnDjG,KAAKG,KAAO,KACZH,KAAKmK,aAAa9D,KAAK,MACvBrG,KAAK6H,aAAa,K,CAGZ,oBAAAyC,CAAqBpB,GAC3B,GAAIA,EAAMC,MAAQ,aAAenJ,KAAKG,KAAM,OAC5C+I,EAAME,iBACNpJ,KAAK+C,2BAA6B,KAClC/C,KAAKG,KAAO,KACZH,KAAKmK,aAAa9D,KAAK,MACvBrG,KAAK6H,aAAa,K,CAGZ,WAAAiB,GACN,MAAMhF,EAAQ9D,KAAKwD,GAAGC,cAA2B,sBACjD,GAAIK,GAAOyG,QAAQ,iBAAkBzG,EAAM0G,cAC3CxK,KAAKkC,aAAe,MACpBlC,KAAKmC,QAAU,MACfnC,KAAKkD,gBAAkB,KACvBlD,KAAKgD,WAAa,KAClBhD,KAAK2C,iBAAmB,GACxB3C,KAAK4C,oBAAsB,GAC3B5C,KAAKyK,aAAapE,M,CAGZ,sBAAAoC,GACN,GAAIzI,KAAKkD,gBAAiB,OAC1BlD,KAAKkD,gBAAkB,CACrBlC,QAAShB,KAAKgB,QAAQzB,KAAI4H,IAAM,IAC3BA,EACHuD,QAASvD,EAAOuD,SAASnL,KAAIoL,IAAM,IAAUA,UAE/C1J,OAAQsG,OAAOqD,YACbrD,OAAOsD,QAAQ7K,KAAKiB,QAAQ1B,KAAI,EAAE4J,EAAK1J,KAAW,CAChD0J,EACAvC,MAAMC,QAAQpH,GAAS,IAAIA,GAASA,MAGxCyB,WAAY,IAAKlB,KAAKkB,YACtB4J,eAAgB9K,KAAK8K,e,CAIjB,oBAAAvC,GACNwC,uBAAsB,KACpB/K,KAAKwD,GAAGC,cAA2B,yCAAyCuH,QAC5EhL,KAAK+C,2BAA6B,KAAK,G,CAInC,cAAAsG,CAAeH,GACrB,OAAOlJ,KAAK4F,YAAYyD,eAAeH,E,CAGjC,cAAA+B,CAAejK,EAA6B8J,GAClD,OAAO9J,EAAQkK,MAAK/D,GAAUA,EAAOhI,KAAO2L,KAAmB9J,EAAQ,E,CAGjE,aAAAmK,CAAchE,EAA0BlG,GAC9C,MAAMxB,EAAQwB,EAAOkG,EAAOhI,IAC5B,GAAIgI,EAAOiE,OAAS,WAAY,OAAOxE,MAAMC,QAAQpH,GAASA,EAAMqH,OAAS,EAC7E,GAAIK,EAAOiE,OAAS,UAAW,OAAO3L,IAAU,KAAO,EAAI,EAC3D,cAAcA,IAAU,UAAYA,EAAMqH,OAAS,EAAI,EAAI,C,CAGrD,aAAAuE,CAAcrK,EAA6BC,GACjD,OAAOD,EAAQsK,QAAO,CAACC,EAAOpE,IAAWoE,EAAQvL,KAAKmL,cAAchE,EAAQlG,IAAS,E,CAG/E,iBAAAuK,CAAkBxK,EAA6BC,GACrD,OAAOD,EAAQmG,QAAOA,GAAUnH,KAAKmL,cAAchE,EAAQlG,GAAU,IAAG6F,M,CAGlE,cAAA2E,CAAetF,EAAkB6E,EAAQ,OAC/ChL,KAAKyC,kBAAoB,EACzBzC,KAAK0L,qBAAqBrF,KAAKF,GAC/B,IAAK6E,EAAO,OACZD,uBAAsB,KACpB/K,KAAKwD,GAAGC,cAA2B,0BAA0B0C,QAAe6E,OAAO,G,CAI/E,qBAAAW,CACNzC,EACAlI,EACAmF,GAEA,MAAMyF,EAAe5K,EAAQ6K,WAAU1E,GAAUA,EAAOhI,KAAOgH,IAC/D,IAAI2F,EACJ,GAAI5C,EAAMC,MAAQ,YAAa2C,GAAaF,EAAe,GAAK5K,EAAQ8F,YACnE,GAAIoC,EAAMC,MAAQ,UACrB2C,GAAaF,EAAe,EAAI5K,EAAQ8F,QAAU9F,EAAQ8F,YACvD,GAAIoC,EAAMC,MAAQ,OAAQ2C,EAAY,OACtC,GAAI5C,EAAMC,MAAQ,MAAO2C,EAAY9K,EAAQ8F,OAAS,OACtD,GAAIoC,EAAMC,MAAQ,aAAc,CACnCD,EAAME,iBACN2B,uBAAsB,KACpB/K,KAAKwD,GACFC,cACC,iHAEAuH,OAAO,IAEb,M,MACK,OAEP9B,EAAME,iBACNpJ,KAAKwC,iBAAmB,KACxBxC,KAAKyL,eAAezK,EAAQ8K,GAAW3M,GAAI,K,CAGrC,kBAAA4M,CAAmB7C,EAAsB/C,GAC/C,GAAI+C,EAAMC,MAAQ,YAAa,OAC/BD,EAAME,iBACNpJ,KAAKwD,GAAGC,cAA2B,0BAA0B0C,QAAe6E,O,CAGtE,mBAAAgB,CACN9C,EACA/B,EACAwD,EACAsB,EACAhL,EACAiL,EAAqC/E,EAAOuD,SAAW,IAEvD,GAAIxB,EAAMC,MAAQ,YAAa,CAC7BnJ,KAAK+L,mBAAmB7C,EAAO/B,EAAOhI,IACtC,M,CAEF,GAAI+J,EAAMC,MAAQ,SAAWD,EAAMC,MAAQ,IAAK,CAC9CD,EAAME,iBACNpJ,KAAKmM,aAAahF,EAAQwD,EAAQ1J,GAClC,M,CAEF,IAAK,CAAC,YAAa,UAAW,OAAQ,OAAOmL,SAASlD,EAAMC,KAAM,OAClED,EAAME,iBACN,MAAMiD,EAAUH,EACb3M,KAAI,CAAC+M,EAAWC,KAAW,CAAQD,YAAWC,kBAC9CpF,QAAO,EAAGmF,gBAAiBA,EAAUE,aACrCjN,KAAI,EAAGgN,iBAAkBA,IAC5B,IAAKF,EAAQvF,OAAQ,OACrB,MAAM2F,EAAUJ,EAAQK,QAAQT,GAChC,IAAIU,EACJ,GAAIzD,EAAMC,MAAQ,OAAQwD,EAAON,EAAQ,QACpC,GAAInD,EAAMC,MAAQ,MAAOwD,EAAON,EAAQA,EAAQvF,OAAS,OACzD,CACH,MAAM8F,EAAY1D,EAAMC,MAAQ,YAAc,GAAI,EAClD,MAAM0D,EAAQJ,GAAW,EAAIA,EAAUG,IAAc,GAAI,EAAK,EAC9DD,EAAON,GAASQ,EAAQD,EAAYP,EAAQvF,QAAUuF,EAAQvF,O,CAEhE9G,KAAKyC,kBAAoBkK,EACzB3M,KAAKwC,iBAAmB,KACxBuI,uBAAsB,KACpB/K,KAAKwD,GACFC,cAA2B,IAAIzD,KAAK6C,eAAesE,EAAOhI,aAAawN,MACtE3B,OAAO,G,CAIP,kBAAA8B,CAAmBnC,EAA0BoC,GACnD,MAAMC,EAAaD,EAAME,OAAOC,oBAChC,IAAKF,EAAY,OAAO,KACxB,MAAO,GAAGrC,EAAOvL,SAASuL,EAAOwC,aAAe,KAAKD,oBAAoBd,SAASY,E,CAG5E,cAAAd,CACN/E,EACA4F,EAAQ/M,KAAK4C,oBAAoBuE,EAAOhI,KAAO,IAE/C,GAAIgI,EAAOiE,OAAS,UAAW,CAC7B,MAAMT,EAAS3K,KAAKoN,cAAcjG,GAClC,OAAOnH,KAAK8M,mBAAmBnC,EAAQoC,GAAS,CAACpC,GAAU,E,CAE7D,OAAQxD,EAAOuD,SAAW,IAAIvD,QAAOwD,GAAU3K,KAAK8M,mBAAmBnC,EAAQoC,I,CAGzE,aAAAK,CAAcjG,GACpB,MAAO,CACL/H,MAAO+H,EAAOkG,YAAclG,EAAO/H,MACnCK,MAAO,OACP0N,YAAahG,EAAOgG,Y,CAIhB,cAAAG,CAAenG,EAA0B1H,GAC/C,MAAMyM,EAAiBlM,KAAKkM,eAAe/E,EAAQ1H,GACnD,MAAM8N,EAAerB,EAAeL,WAAUlB,IAAWA,EAAO6B,aAChExM,KAAKyC,kBAAoB8K,EACzBvN,KAAKwC,iBAAmB,MACxBxC,KAAK4C,oBAAsB,IAAK5C,KAAK4C,oBAAqB,CAACuE,EAAOhI,IAAKM,GACvEsL,uBAAsB,KACpB,MAAMyC,EAAUxN,KAAKwD,GAAGC,cAA2B,iCACnD,GAAI+J,EAASA,EAAQC,UAAY,EACjCzN,KAAKmD,SAASmF,UAAU,G,CAIpB,yBAAAoF,CAA0BxE,EAAsB/B,GACtD,GAAI+B,EAAMC,MAAQ,aAAeD,EAAMC,MAAQ,UAAW,OAC1D,MAAM+C,EAAiBlM,KAAKkM,eAAe/E,GAC3C,MAAMkF,EAAUH,EACb3M,KAAI,CAACoL,EAAQsB,KAAK,CAAQtB,SAAQsB,YAClC9E,QAAO,EAAGwD,aAAcA,EAAO6B,aAC/BjN,KAAI,EAAG0M,WAAYA,IACtB,IAAKI,EAAQvF,OAAQ,OACrBoC,EAAME,iBACN,MAAMuD,EAAOzD,EAAMC,MAAQ,YAAckD,EAAQ,GAAKA,EAAQA,EAAQvF,OAAS,GAC/E9G,KAAKyC,kBAAoBkK,EACzB3M,KAAKwC,iBAAmB,KACxBuI,uBAAsB,KACpB/K,KAAKwD,GACFC,cAA2B,IAAIzD,KAAK6C,eAAesE,EAAOhI,aAAawN,MACtE3B,OAAO,G,CAIP,cAAA2C,CACNxG,EACAwD,EACAiD,EACA3M,GAEA,GAAI0J,EAAO6B,WAAY,OACvB,MAAMC,EAAU7F,MAAMC,QAAQ5F,EAAOkG,EAAOhI,KAAQ8B,EAAOkG,EAAOhI,IAAmB,GACrF,MAAM0O,EAAW,IAAInG,IAAI+E,GACzB,GAAImB,EAASC,EAASC,IAAInD,EAAOlL,YAC5BoO,EAASE,OAAOpD,EAAOlL,OAC5B,MAAMuO,GAAW7G,EAAOuD,SAAW,IAChCnL,KAAI+M,GAAaA,EAAU7M,QAC3B0H,QAAO1H,GAASoO,EAASI,IAAIxO,KAChCO,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOuO,G,CAGzC,YAAA7B,CACNhF,EACAwD,EACA1J,GAEA,GAAI0J,EAAO6B,WAAY,OACvB,GAAIrF,EAAOiE,OAAS,SAAU,CAC5BpL,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOkL,EAAOlL,QACtD,M,CAEF,MAAMoO,EAAWjH,MAAMC,QAAQ5F,EAAOkG,EAAOhI,KACxC8B,EAAOkG,EAAOhI,IAAiBiN,SAASzB,EAAOlL,OAChD,MACJO,KAAK2N,eAAexG,EAAQwD,GAASkD,EAAU5M,E,CAGzC,QAAAiN,CAAS/H,EAAkB1G,GACjC,OAAOO,KAAK2C,iBAAiBwD,IAAagI,EAAqB1O,IAAQ2L,MAAQ,U,CAGzE,WAAAgD,CAAYjH,EAA0BX,GAC5C,GAAIA,IAAS,SAAWA,IAAS,WAAY,OAC7CxG,KAAK2C,iBAAmB,IAAK3C,KAAK2C,iBAAkB,CAACwE,EAAOhI,IAAKqH,GACjExG,KAAKyC,kBAAoB,C,CAGnB,yBAAA4L,CAA0BlH,EAA0B1H,GAC1D,MAAM6O,EAAmC,IACpCnH,EACHiE,KAAM,SACNV,QAASrL,GAEX,OACEkP,EAAA,OACEC,MAAM,iFACNC,KAAK,UAAS,aACH,iBAEVpP,EAAsBE,KAAI,CAACoL,EAAQsB,IAClCsC,EAACG,EAAe,CACdnO,KAAK,KACLpB,GAAI,GAAGa,KAAK6C,eAAesE,EAAOhI,eAAe8M,IACjDtB,OAAQA,EACRkD,SAAUpO,IAAUkL,EAAOlL,MAC3BkP,OAAQ1C,IAAUjM,KAAKyC,kBACvBD,iBAAkBxC,KAAKwC,iBACvBoM,YAAa,MACbC,SAAU5C,IAAUjM,KAAKyC,kBAAoB,GAAI,EACjDqM,QAAS,KACP9O,KAAKyC,kBAAoBwJ,CAAK,EAEhC8C,UAAY7F,GACVlJ,KAAKgM,oBAAoB9C,EAAOoF,EAAgB3D,EAAQsB,EAAO,CAC7D,CAAC9E,EAAOhI,IAAKM,IAGjBuP,QAAS,KACPhP,KAAKwC,iBAAmB,MACxBxC,KAAKyC,kBAAoBwJ,CAAK,EAEhCgD,SAAU,IAAMjP,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOkL,EAAOlL,Y,CAOxE,kBAAAyP,CAAmB/H,EAA0B1H,GACnD,OACE8O,EAAA,eACEY,cAAc,QACd1P,aAAcA,IAAU,SAAWA,EAAQ,GAC3C2P,WAAalG,IACXA,EAAMmG,kBACNrP,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOyJ,EAAMjD,QAAS,G,CAM9D,gBAAAqJ,CAAiBnI,EAA0B1H,GACjD,MAAM+G,EAAOxG,KAAKkO,SAAS/G,EAAOhI,GAAIM,GACtC,OACE8O,EAAA,OAAKC,MAAM,qBACTD,EAAA,UAAQC,MAAM,uEACZD,EAAA,gBACExN,UAAU,mBACVR,KAAK,KACLC,MAAM,OACN+O,aAAc,MACd9P,MAAO+G,EACPgJ,KAAMtQ,EACNkQ,WAAalG,IACXA,EAAMmG,kBACNrP,KAAKoO,YAAYjH,EAAQ+B,EAAMjD,OAAO,KAI5CsI,EAAA,OAAKC,MAAM,0BACRhI,IAAS,WACNxG,KAAKqO,0BAA0BlH,EAAQ1H,GACvCO,KAAKkP,mBAAmB/H,EAAQ1H,I,CAMpC,kBAAAgQ,CAAmBtI,GACzB,OACEoH,EAAA,OAAKC,MAAM,8BACTD,EAACmB,EAAY,CACXnP,KAAK,KACLoP,iBAAkB,MAClBC,mBAAoB,MACpBnQ,MAAOO,KAAK4C,oBAAoBuE,EAAOhI,KAAO,GAC9C0Q,YAAa7P,KAAK8B,kBAClBf,UAAW,UAAUoG,EAAO/H,gBAC5B0Q,SAAU,GAAG9P,KAAK6C,eAAesE,EAAOhI,aACxC4Q,SAAU,IAAM/I,UAChBnF,WAAY,SAASsF,EAAO/H,eAC5B4Q,cAAevQ,GAASO,KAAKsN,eAAenG,EAAQ1H,GACpDsP,UAAY7F,GAAyBlJ,KAAK0N,0BAA0BxE,EAAO/B,K,CAM3E,qBAAA8I,GACN,OACE1B,EAAA,OACEC,MAAM,kCACNC,KAAK,SAAQ,gBACC,QAAO,gBACP,OAAM,aACRzO,KAAK+B,cAAa,YACpB,UAEVwM,EAAA,kBAAgB2B,KAAMlQ,KAAK+B,gB,CAKzB,aAAAoO,CAAchJ,EAA0BlG,GAC9C,MAAMxB,EAAQwB,EAAOkG,EAAOhI,IAC5B,GAAIgI,EAAOiE,OAAS,YAAcjE,EAAOiE,OAAS,SAAU,CAC1D,MAAMyC,EAAWjH,MAAMC,QAAQpH,GAASA,EAAQ,GAChD,MAAM2Q,EAAajJ,EAAOuD,SAAW,GACrC,MAAMA,EAAU1K,KAAKkM,eAAe/E,GACpC,MAAMyH,EAAcyB,EAClBD,EAAW7Q,KAAIoL,IAAM,CACnBvL,MAAOuL,EAAOvL,MACdK,MAAOkL,EAAOlL,MACd6Q,QAAS3F,EAAOwC,iBAGpB,IAAKzC,EAAQ5D,OAAQ,OAAO9G,KAAKiQ,wBACjC,OAAOvF,EAAQnL,KAAI,CAACoL,EAAQsB,KAC1B,MAAMsE,EACJpJ,EAAOiE,OAAS,WAAayC,EAASzB,SAASzB,EAAOlL,OAASA,IAAUkL,EAAOlL,MAClF,OACE8O,EAACG,EAAe,CACdnO,KAAK,KACLpB,GAAI,GAAGa,KAAK6C,eAAesE,EAAOhI,aAAa8M,IAC/CtB,OAAQ,CACNvL,MAAOuL,EAAOvL,MACdK,MAAOkL,EAAOlL,MACd6Q,QAAS3F,EAAOwC,YAChBX,WAAY7B,EAAO6B,YAErBqB,SAAU0C,EACV5B,OAAQ1C,IAAUjM,KAAKyC,kBACvBD,iBAAkBxC,KAAKwC,iBACvBoM,YAAaA,EACbC,SAAU5C,IAAUjM,KAAKyC,kBAAoB,GAAI,EACjD+N,QACErJ,EAAOiE,OAAS,WACdmD,EAAA,QACEC,MAAM,wEAAuE,cACjE,QAEZD,EAAA,eAAanP,MAAM,GAAGmB,KAAK,KAAKqN,QAAS2C,EAAYE,aAAY,QAEjEzJ,UAEN8H,QAAS,KACP9O,KAAKyC,kBAAoBwJ,CAAK,EAEhC8C,UAAY7F,GACVlJ,KAAKgM,oBAAoB9C,EAAO/B,EAAQwD,EAAQsB,EAAOhL,EAAQyJ,GAEjEsE,QAAS,KACPhP,KAAKwC,iBAAmB,MACxBxC,KAAKyC,kBAAoBwJ,CAAK,EAEhCgD,SAAU,IAAMjP,KAAKmM,aAAahF,EAAQwD,EAAQ1J,IAClD,G,CAKR,GAAIkG,EAAOiE,OAAS,UAAW,CAC7B,MAAOT,GAAU3K,KAAKkM,eAAe/E,GACrC,IAAKwD,EAAQ,OAAO3K,KAAKiQ,wBACzB,OACE1B,EAACG,EAAe,CACdnO,KAAK,KACLpB,GAAI,GAAGa,KAAK6C,eAAesE,EAAOhI,cAClCwL,OAAQ,CACNvL,MAAOuL,EAAOvL,MACdK,MAAOkL,EAAOlL,MACd6Q,QAAS3F,EAAOwC,aAElBU,SAAUpO,IAAU,KACpBkP,OAAM,KACNnM,iBAAkBxC,KAAKwC,iBACvBoM,YAAa8B,QAAQ/F,EAAOwC,aAC5B0B,SAAU,EACV2B,QACEjC,EAAA,QACEC,MAAM,wEAAuE,cACjE,QAEZD,EAAA,eAAanP,MAAM,GAAGmB,KAAK,KAAKqN,QAASnO,IAAU,KAAMgR,aAAY,QAGzE1B,UAAY7F,IACV,GAAIA,EAAMC,MAAQ,YAAanJ,KAAK+L,mBAAmB7C,EAAO/B,EAAOhI,SAChE,GAAI+J,EAAMC,MAAQ,SAAWD,EAAMC,MAAQ,IAAK,CACnDD,EAAME,iBACNpJ,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOA,IAAU,M,GAG7DuP,QAAS,KACPhP,KAAKwC,iBAAmB,KAAK,EAE/ByM,SAAU,IAAMjP,KAAKgG,YAAY,CAAEG,SAAUgB,EAAOhI,GAAIM,MAAOA,IAAU,Q,CAK/E,OAAOO,KAAKsP,iBAAiBnI,EAAQ1H,E,CAGvC,mBAAYkR,GACV,OACE3Q,KAAKc,eAAiBd,KAAK0C,gBAAkB1C,KAAK2J,qBAAuB+G,QAAQ1Q,KAAKM,K,CAIlF,0BAAAsH,GACN5H,KAAKgI,mCACL,IAAKhI,KAAKc,cAAe,CACvB,GAAId,KAAK0C,eAAgB1C,KAAK0C,eAAiB,MAC/C,M,CAEF1C,KAAK4Q,yBAA2BC,EAA2B7Q,KAAKwD,IAAIsN,IAClE,GAAI9Q,KAAK0C,iBAAmBoO,EAAS9Q,KAAK0C,eAAiBoO,CAAO,G,CAI9D,gCAAA9I,GACNhI,KAAK4Q,6BACL5Q,KAAK4Q,yBAA2B5J,S,CAG1B,oBAAA+J,CAAqBC,EAAgB5R,GAC3C,IAAKY,KAAKc,cAAe,OAAOkQ,EAChC,OACEzC,EAAA,cAAYnP,MAAOA,EAAO+B,KAAK,MAAMZ,KAAK,MACvCyQ,E,CAKC,YAAAC,CAAa5F,EAAuB6F,GAC1C,MAAMC,EAAenR,KAAKqL,cAAcrL,KAAKgB,QAAShB,KAAKiB,QAC3D,GAAIjB,KAAKY,eAAiByK,IAAkB,GAAK8F,IAAiB,EAAG,OAAO,KAC5E,OACE5C,EAAA,OACEC,MAAO,CACL,sBAAuB,KACvB,wCAAyC0C,EACzC,mBAAoB,MACrB,eAEElR,KAAKY,eACNsQ,GACA7F,IAAkB,IACjBrL,KAAKkG,cACLlG,KAAKuG,WACF,OACAS,WAGNuH,EAAA,OAAKC,MAAM,6CACP0C,EACA3C,EAAA,WACEC,MAAM,4BACN4C,GAAG,OACHC,QAAQ,mBACRC,MAAM,YAAW,YACP,UAETjG,EAAa,aAEd,KACHrL,KAAKY,cACJ2N,EAAA,UACEC,MAAM,4DACN+C,KAAK,SACLC,UAAWxR,KAAK0G,kBAChB+K,QAAS,IAAMzR,KAAKsH,cAEpBiH,EAAA,WAAS6C,GAAG,OAAOC,QAAQ,mBAAmBC,MAAM,WAAS,UAI7D,KACHtR,KAAKY,gBAAkByK,EAAgB,GAAK8F,EAAe,GAC1D5C,EAAA,WACEC,MAAM,gCACN4C,GAAG,OACHC,QAAQ,mBACRC,MAAM,WAAU,cACJ,QAAM,KAIlB,KACHjG,EAAgB,GAAMrL,KAAKY,eAAiBuQ,EAAe,EAC1D5C,EAAA,UACEC,MAAM,4DACN+C,KAAK,SACLE,QAAS,KACP,GAAIzR,KAAKY,cAAe,CACtBZ,KAAKkG,YAAc,GACnBlG,KAAKuG,WAAa,E,CAEpBvG,KAAKyH,QAAQpB,MAAM,GAGrBkI,EAAA,WAAS6C,GAAG,OAAOC,QAAQ,mBAAmBC,MAAM,WACjDtR,KAAK6B,aAGR,M,CAMJ,qBAAA6P,CAAsBvK,EAA0BjG,GACtD,MAAMsF,EAA4BtF,EAAWiG,EAAOhI,MAAQ,MAAQ,MAAQ,MAC5E,MAAMwS,EAAgCnL,IAAS,MAAQ,MAAQ,MAC/D,OACE+H,EAAA,OAAKC,MAAM,mDACTD,EAAA,OAAKC,MAAM,4EACTD,EAAA,WAAS6C,GAAG,OAAOC,QAAQ,mBAAmBC,MAAM,aAAW,oBAG/D/C,EAAA,UACEC,MAAM,8DACN+C,KAAK,SAAQ,aACD,SAASpK,EAAO/H,oBAAoBuS,aAChDF,QAAS,IAAMzR,KAAKsG,WAAW,CAAEH,SAAUgB,EAAOhI,GAAIqH,KAAMmL,IAC5D5C,UAAY7F,GAAyBlJ,KAAK+L,mBAAmB7C,EAAO/B,EAAOhI,KAE3EoP,EAAA,WAAS6C,GAAG,OAAOC,QAAQ,mBAAmBC,MAAM,WACjD9K,IAGL+H,EAAA,WAAS6C,GAAG,OAAOC,QAAQ,mBAAmBC,MAAM,aAAW,a,CAQvE,MAAAM,GACE,GAAI5R,KAAKE,SACP,OACEqO,EAACsD,EAAI,CAACrD,MAAM,wBACTxO,KAAKgB,QAAQzB,KAAI4H,GAChBoH,EAAA,WAASpO,KAAI,KAACgJ,IAAKhC,EAAOhI,GAAIqP,MAAM,iCAClCD,EAAA,eACEA,EAAA,WAASC,MAAM,gCAAgCsD,KAAK,cAAcvR,KAAK,OACvEgO,EAAA,WAAS8C,QAAQ,mBAAmBU,SAAQ,MACzC5K,EAAO/H,QAGX+H,EAAOiE,OAAS,QAAUpL,KAAKyP,mBAAmBtI,GACnDoH,EAAA,OACEpP,GAAI,GAAGa,KAAK6C,eAAesE,EAAOhI,aAClCsP,KAAMtH,EAAOiE,OAAS,OAASpE,UAAY,UAAS,aACxCG,EAAO/H,MAAK,uBACF+H,EAAOiE,OAAS,WAAa,OAASpE,UAC5DwH,MAAM,uDAELxO,KAAKmQ,cAAchJ,EAAQnH,KAAKiB,SAElCkG,EAAOiE,OAAS,YAAcpL,KAAK0R,sBAAsBvK,EAAQnH,KAAKkB,gBAKjF,MAAM8Q,EACJhS,KAAKmC,SAAWnC,KAAKkD,gBACjBlD,KAAKkD,gBACL,CACElC,QAAShB,KAAKgB,QACdC,OAAQjB,KAAKkG,aAAelG,KAAKiB,OACjCC,WAAYlB,KAAKuG,YAAcvG,KAAKkB,WACpC4J,eAAgB9K,KAAK8K,gBAE7B,MAAMmH,EAAejS,KAAKiL,eAAe+G,EAAMhR,QAASgR,EAAMlH,gBAC9D,MAAMO,EAAgBrL,KAAKqL,cAAc2G,EAAMhR,QAASgR,EAAM/Q,QAC9D,MAAMuK,EAAoBxL,KAAKwL,kBAAkBwG,EAAMhR,QAASgR,EAAM/Q,QACtE,MAAMiR,EAAmB1G,EAAoB,EAC7C,MAAM2G,EAAwBnS,KAAKgC,eAAiB,mBACpD,MAAM5C,EAAQ,GAAGY,KAAKI,eACpBJ,KAAKK,mBAAqB6R,EAAmB,MAAM1G,IAAsB,KAE3E,MAAM4G,EAAcC,EAAqBrS,KAAKO,MAC9C,MAAM+R,EAAWzT,EAAUmB,KAAKO,MAChC,MAAMgS,EAAU,GAAGvS,KAAK6C,oBACxB,MAAM2P,EAAqC,CACzCrP,SAAU,QACVsP,KAAM,IACNC,IAAK,IACLlS,MAAOR,KAAKyB,UACZkR,UAAW,aAAaC,KAAKC,MAAM7S,KAAKqC,IAAIC,SAASsQ,KAAKC,MAAM7S,KAAKqC,IAAIE,QACzEuQ,OAAQ,OACRC,WAAY/S,KAAKoC,cAAgB,UAAY,UAG/C,OACEmM,EAACsD,EAAI,CACHrD,MAAO,CACL,mBAAoB,KACpB,sCAAuCxO,KAAK2J,oBAC5C,yBAA0B3J,KAAK2J,oBAC/B,CAAC,eAAe3J,KAAKO,QAAS,KAC9B,2BAA4BP,KAAKc,cACjC,oCAAqCd,KAAK2Q,mBACvCqC,EAAkBhT,KAAKQ,SAG3BR,KAAK2J,oBACF3J,KAAK+Q,qBACHxC,EAAA,UACE0E,IAAKC,IACHlT,KAAK8C,eAAkBoQ,GAAiC,IAAI,EAE9D/T,GAAIa,KAAKmT,SAAW,GAAGnT,KAAK6C,sBAC5B0O,KAAK,SACL/C,MAAO,CACLwC,QAAS,KACT,mBAAoB,KACpB,sBAAuB,KACvB,sBAAuB,KACvB,gCAAiChR,KAAKa,YAAcqR,EACpD,oBAAqBlS,KAAKG,MAAQH,KAAKmC,QACvC,oCAAqCnC,KAAKG,MAAQH,KAAKmC,QACvD,oBAAqBnC,KAAKU,UAC1B,qBAAsBwR,IAAqBlS,KAAKW,eAChD,CAAC,eAAeX,KAAKO,QAAS,MAEhCkO,KAAK,WAAU,gBACD,SAAQ,gBACP2E,OAAOpT,KAAKG,MAAK,gBACjBH,KAAKG,KAAOoS,EAAUvL,UAAS,aAClChH,KAAKe,WAAaf,KAAK2B,UACnC8P,QAAUvI,GAAsBlJ,KAAKqK,kBAAkBnB,GACvD6F,UAAY7F,GAAyBlJ,KAAKsK,qBAAqBpB,IAE9DlJ,KAAKM,KACJiO,EAAA,QACEC,MAAM,mEAAkE,cAC5D,QAEZD,EAAA,WAASuD,KAAM9R,KAAKM,KAAMC,KAAM+R,EAAUhB,MAAM,aAEhD,KACHtR,KAAK2Q,gBAAkB,KACtBpC,EAAA,WACEC,MAAM,6GACN4C,GAAG,OACHC,QAASe,EACTd,MAAM,UACN+B,eAAgB,GAEfjU,GAGJY,KAAK2Q,kBAAoB3Q,KAAKS,cAAgB,KAC7C8N,EAAA,QACEC,MAAM,oEAAmE,cAC7D,QAEZD,EAAA,WAASuD,KAAK,cAAcvR,KAAM+R,EAAUhB,MAAM,cAIxDtR,KAAK2Q,gBAAkBvR,EAAQ,IAEjC,KAEHY,KAAKkC,cAAgBlC,KAAKC,SACzBsO,EAAA,OACEpP,GAAIoT,EACJe,QAAStT,KAAKC,SAAW+G,UAAY,SACrCwH,MAAO,CACL,oBAAqB,KACrB,mBAAoBxO,KAAKC,SACzB,4BAA6BD,KAAKC,SAClC,2BAA4BD,KAAKmC,SAEnCoR,MAAOvT,KAAKC,SAAW+G,UAAYwL,EACnC/D,KAAK,SAAQ,aACDzO,KAAK2B,WAEhBsQ,EACC1D,EAAA,OAAKC,MAAM,eACTD,EAAA,OAAKC,MAAM,qBACTD,EAAA,OAAKC,MAAM,8BACTD,EAAA,OACEC,MAAM,8EACNC,KAAK,UAAS,aACFzO,KAAK4B,gBAAe,mBACf,YAEhBoQ,EAAMhR,QAAQzB,KAAI4H,IACjB,MAAMwH,EAASxH,EAAOhI,KAAO8S,EAAa9S,GAC1C,MAAMqU,EAAQxT,KAAKmL,cAAchE,EAAQ6K,EAAM/Q,QAC/C,OACEsN,EAAA,OACEpF,IAAKhC,EAAOhI,GACZqP,MAAO,CACL,gCAAiC,KACjC,6BAA8BkC,QAAQvJ,EAAOsM,WAG/ClF,EAAA,UACEpP,GAAI,GAAGa,KAAK6C,eAAesE,EAAOhI,SAClCoS,KAAK,SACL9C,KAAK,MAAK,uBACYtH,EAAOhI,GAC7BqP,MAAO,CACL,wBAAyB,KACzB,gCAAiCG,EACjC,iBAAkB,KAClB,mBAAoB,KACpB,iBAAkB,KAClB,sBAAuB,KACvB,yBAA0BA,GAAU3O,KAAKwC,iBACzC,sBAAuB,KACvB,gCAAiCmM,GAClC,gBACcyE,OAAOzE,GAAO,gBACd,GAAG3O,KAAK6C,oBACvBgM,SAAUF,EAAS,GAAI,EACvB+E,YAAa,KACX1T,KAAKwC,iBAAmB,KAAK,EAE/BiP,QAAS,IAAMzR,KAAKyL,eAAetE,EAAOhI,IAC1C4P,UAAY7F,GACVlJ,KAAK2L,sBAAsBzC,EAAO8I,EAAMhR,QAASmG,EAAOhI,KAG1DoP,EAAA,WACEC,MAAM,kGACN4C,GAAG,OACHC,QAAQ,mBACRC,MAAO3C,EAAS,UAAY,aAE3BxH,EAAO/H,OAEToU,EAAQ,GAAKrM,EAAOiE,OAAS,OAC5BmD,EAAA,QACEC,MAAM,6DAA4D,cACtD,QAEZD,EAAA,YAAU8C,QAAQ,MAAMsC,QAAS,MAAOvU,MAAM,MAE9CoU,EAAQ,EACVjF,EAAA,UACEC,MAAM,mDACNpP,MAAOgU,OAAOI,GACdjT,KAAK,KACLqT,OAAO,QACPC,SAAS,OACTC,QAAO,KACPC,QAAO,OAEP,MAEF,KAIX5B,EAAwBnS,KAAKiR,aAAa5F,EAAe,MAAQ,MAGpEkD,EAAA,OACEpP,GAAI,GAAGa,KAAK6C,oBACZ2L,MAAO,CACL,uBAAwB,KACxB,6BAA8ByD,EAAa7G,OAAS,QAEtDqD,KAAK,WAAU,kBACE,GAAGzO,KAAK6C,eAAeoP,EAAa9S,UAEpD8S,EAAa7G,OAAS,OAAS,KAAOpL,KAAKyP,mBAAmBwC,GAC/D1D,EAAA,OAAKC,MAAM,gCACRyD,EAAa7G,OAAS,OACrBmD,EAAA,OAAKpF,IAAK8I,EAAa9S,GAAIqP,MAAM,kCAC9BxO,KAAKmQ,cAAc8B,EAAcD,EAAM/Q,SAG1CsN,EAAA,OACEpP,GAAI,GAAGa,KAAK6C,eAAeoP,EAAa9S,aACxCgK,IAAK8I,EAAa9S,GAClBqP,MAAM,+EACNC,KAAK,UAAS,aACFwD,EAAa7S,MAAK,uBAE5B6S,EAAa7G,OAAS,WAAa,OAASpE,WAG7ChH,KAAKmQ,cAAc8B,EAAcD,EAAM/Q,UAI7CgR,EAAa7G,OAAS,WACnBpL,KAAK0R,sBAAsBO,EAAcD,EAAM9Q,YAC/C,QAINiR,GAAyB9G,EAAgB,EACvCrL,KAAKiR,aAAa5F,EAAe,OACjC,MAEJ,MAEJ,K","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as s,H as o,c as d,h as e,a,t as i}from"./index.js";import{d as r}from"./p-D0KD-Nr_.js";import{d as t}from"./p-CI7c9kp-.js";import{d as n}from"./p-DjkUFlDW.js";import{d as l}from"./p-0XTyQNRG.js";import{d as c}from"./p-Cihjy4WY.js";import{d as m}from"./p-BXSHN1OK.js";import{b as h,T as p}from"./p-CeXf9-X3.js";const f=()=>`.sc-ds-modal-h,.sc-ds-modal:where(.ds-table),.sc-ds-modal:where(.tooltip-popup),.sc-ds-modal:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-modal,.ds-control--lg.sc-ds-modal-h,.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal,.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal,.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-modal-h,.ds-control--lg.sc-ds-modal{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-header.sc-ds-modal{display:flex;align-items:center;box-sizing:border-box;min-width:0;min-block-size:var(--dimension-size-600);padding:var(--dimension-space-100);gap:var(--dimension-space-100)}.ds-chrome-header--wrapping.sc-ds-modal{flex-wrap:wrap}.ds-chrome-header--bounded.sc-ds-modal{border-block-end:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.ds-chrome-header__leading.sc-ds-modal,.ds-chrome-header__trailing.sc-ds-modal{display:flex;align-items:center;flex:0 0 auto;min-width:0}.ds-chrome-header__trailing.sc-ds-modal{margin-inline-start:auto;gap:var(--dimension-space-100)}.ds-chrome-header__copy.sc-ds-modal{display:flex;flex:1 1 0;min-width:0;padding:var(--ds-control-padding-inline, var(--dimension-space-075));box-sizing:border-box}.ds-chrome-header__copy--wrapping.sc-ds-modal{align-items:baseline;flex-wrap:wrap;column-gap:var(--dimension-space-100);row-gap:var(--dimension-space-050)}.ds-chrome-header__copy--stacked.sc-ds-modal{align-items:stretch;flex-direction:column;gap:var(--dimension-space-050)}.ds-chrome-header__heading.sc-ds-modal,.ds-chrome-header__description.sc-ds-modal{width:auto;min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025));box-sizing:border-box}.ds-chrome-header__heading.sc-ds-modal{flex:0 1 auto}.ds-chrome-header__copy--wrapping.sc-ds-modal .ds-chrome-header__description.sc-ds-modal{flex:1 1 var(--dimension-card-width-xs)}.ds-chrome-space--sm.sc-ds-modal-h,.ds-chrome-space--sm.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-modal-h,.ds-chrome-space--md.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-modal-h,.ds-chrome-space--lg.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal,.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal,.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal{flex-direction:column}.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:grid;align-items:center}@media (forced-colors: active){.sc-ds-modal:root,.sc-ds-modal-h,.ds-forced-colors-scope.sc-ds-modal{--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-modal-h{display:contents}.modal-dialog.sc-ds-modal{display:none;flex-direction:column;max-width:none;max-height:calc(100vh - 2 * var(--dimension-space-200));margin:auto;padding:0;overflow:hidden;color:var(--color-foreground-primary);background-color:var(--color-background-primary);border:0;border-radius:var(--ds-radius-modal);box-shadow:var(--effect-elevation-elevated-floating);outline:none;box-sizing:border-box;animation:modalDialogIn var(--effect-motion-short-2) forwards}.modal-dialog[open].sc-ds-modal{display:flex}.modal-dialog.sc-ds-modal::backdrop{background-color:var(--color-background-shade);animation:modalBackdropIn var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal{animation:modalDialogOut var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal::backdrop{animation:modalBackdropOut var(--effect-motion-short-2) forwards}@keyframes modalBackdropIn{from{opacity:0}to{opacity:1}}@keyframes modalBackdropOut{from{opacity:1}to{opacity:0}}@keyframes modalDialogIn{from{opacity:0;transform:scale(0.97) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalDialogOut{from{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(0.97) translateY(4px)}}@media (prefers-reduced-motion: reduce){.modal-dialog[open].sc-ds-modal,.modal-dialog--closing.sc-ds-modal{animation:none;transform:none}.modal-dialog.sc-ds-modal::backdrop{animation:none;opacity:1}.modal-dialog--closing.sc-ds-modal,.modal-dialog--closing.sc-ds-modal::backdrop{opacity:0}}.modal-header.sc-ds-modal{align-items:flex-start;flex:0 0 auto;color:var(--color-foreground-primary)}.modal-copy.sc-ds-modal,ds-text.modal-heading.sc-ds-modal,ds-text.modal-description.sc-ds-modal{width:auto;text-align:left}ds-text.modal-heading.sc-ds-modal{-webkit-user-select:none;user-select:none}.modal-close-tooltip.sc-ds-modal{flex:0 0 auto}.modal-content.sc-ds-modal{min-height:0;padding:var(--dimension-space-200);overflow-y:auto;flex:1 1 auto;box-sizing:border-box}.modal-footer.sc-ds-modal{justify-content:flex-start;height:var(--dimension-size-800);flex:0 0 auto;border-top:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.modal-footer__actions.sc-ds-modal{display:flex;align-items:center;gap:var(--dimension-space-100);min-width:0}.modal-footer--empty.sc-ds-modal{display:none}.modal-footer__actions.sc-ds-modal slot.sc-ds-modal{display:contents}@media (forced-colors: active){.modal-dialog.sc-ds-modal{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const g={sm:"var(--dimension-modal-width-sm)",md:"var(--dimension-modal-width-md)",lg:"var(--dimension-modal-width-lg)"};const u=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","iframe",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(",");let b=0;const v=s(class s extends o{constructor(s){super();if(s!==false){this.__registerHost()}this.dsClose=d(this,"dsClose",7);this.dsAfterClose=d(this,"dsAfterClose",7);this.open=false;this.description="";this.closeAriaLabel="Close";this.modalWidth="md";this.closing=false;this.hasFooter=false;this.titleId=`ds-modal-title-${++b}`;this.descriptionId=`${this.titleId}-description`;this.dialogEl=null;this.previousFocus=null;this.closeTimer=null}componentDidLoad(){this.updateFooterPresence();if(this.open)this.onOpenChange(true)}componentDidRender(){if(!this.closing||!this.dialogEl?.open||this.closeTimer)return;const s=this.closeAnimationMs;if(s<=0){this.finishClose();return}this.closeTimer=setTimeout((()=>{this.closeTimer=null;this.finishClose()}),s)}disconnectedCallback(){this.clearCloseTimer();if(this.dialogEl?.open)this.dialogEl.close()}onOpenChange(s){if(s){this.clearCloseTimer();const s=!!this.dialogEl?.open;this.closing=false;if(!this.dialogEl||s)return;this.previousFocus=document.activeElement;this.dialogEl.showModal();requestAnimationFrame((()=>{if(this.open&&this.dialogEl?.open)this.focusClose()}))}else if(this.dialogEl?.open){this.closing=true}}focusClose(){const s=this.el.querySelector("ds-button-unfilled.modal-close");void s?.setFocus?.()}clearCloseTimer(){if(this.closeTimer){clearTimeout(this.closeTimer);this.closeTimer=null}}requestClose(s,o){if(!this.open||this.closing||!this.dialogEl?.open)return;this.dsClose.emit({reason:s,originalEvent:o});this.open=false}updateFooterPresence(s){const o=s?.assignedNodes()??[];this.hasFooter=o.some((s=>s.nodeType!==Node.TEXT_NODE||!!s.textContent?.trim()))||this.el.querySelector('[slot="footer"]')!==null}handleCancel(s){s.preventDefault();this.requestClose("escape",s)}handleBackdropPointerDown(s){if(s.target===this.dialogEl)this.requestClose("backdrop",s)}handleKeyDown(s){if(s.key==="Escape"){s.preventDefault();this.requestClose("escape",s);return}if(s.key!=="Tab"||!this.dialogEl)return;const o=Array.from(this.dialogEl.querySelectorAll(u)).filter((s=>!s.hasAttribute("disabled")&&s.getAttribute("aria-hidden")!=="true"));if(!o.length){s.preventDefault();this.dialogEl.focus();return}const d=o[0];const e=o[o.length-1];const a=document.activeElement;if(s.shiftKey&&(a===d||a===this.dialogEl)){s.preventDefault();e.focus()}else if(!s.shiftKey&&a===e){s.preventDefault();d.focus()}}get resolvedWidth(){if(this.modalWidth==="sm"||this.modalWidth==="md"||this.modalWidth==="lg"){return g[this.modalWidth]}return this.modalWidth}get describedBy(){const s=[this.description?this.descriptionId:"",this.ariaDescribedby??""].filter(Boolean);return s.length>0?s.join(" "):undefined}get closeAnimationMs(){return h(p.motionShort2,p.animationDurationShort3)}finishClose(){if(!this.dialogEl?.open)return;this.dialogEl.close();this.closing=false;this.clearCloseTimer();this.previousFocus?.focus?.();this.previousFocus=null;this.dsAfterClose.emit()}render(){return e(a,{key:"408b55772ab06bbd8f4672c869b99cba1087e3f6"},e("dialog",{key:"8b676bc13cc51e1a04371e8cff0668aa1acd15de",ref:s=>{this.dialogEl=s??null},class:{"modal-dialog":true,"modal-dialog--closing":this.closing},"aria-labelledby":this.titleId,"aria-describedby":this.describedBy,onCancel:s=>this.handleCancel(s),onPointerDown:s=>this.handleBackdropPointerDown(s),onKeyDown:s=>this.handleKeyDown(s),style:{width:`min(${this.resolvedWidth}, calc(100vw - 2 * var(--dimension-space-200)))`}},e("div",{key:"43b3e6d2e684b42d5672c3a2669cef0b1cdbfcd1",class:"modal-header ds-chrome-header ds-chrome-header--bounded"},e("div",{key:"05ad47bdaff524f9d73fe88b637ee265632e9e14",class:"modal-copy ds-chrome-header__copy ds-chrome-header__copy--stacked ds-control--md"},e("ds-text",{key:"5761cb1906848d46538e925f8ae66a5c3c26560c",class:"modal-heading ds-chrome-header__heading",as:"h2",variant:"text-title-small",emphasis:true,color:"primary",lineTruncation:1,textId:this.titleId},this.heading),this.description?e("ds-text",{class:"modal-description ds-chrome-header__description",as:"p",variant:"text-body-medium",color:"secondary",wrap:"wrap",textId:this.descriptionId},this.description):null),e("ds-tooltip",{key:"ddda325128b6ab6a2ec3c047baa88f5a1f3e0663",class:"modal-close-tooltip ds-chrome-header__trailing",label:this.closeAriaLabel,side:"bottom",size:"sm"},e("ds-button-unfilled",{key:"b8ff11f0e61212436ed07c3ae94b4bb11b884969",class:"modal-close",variant:"icon",icon:"Cross",size:"md","aria-label":this.closeAriaLabel,activeFill:false,hasBorder:false,onDsClick:s=>this.requestClose("close-button",s.detail)}))),e("div",{key:"1d459433b96cb8827f8f6e19b366da59e2575b60",class:"modal-content"},e("slot",{key:"8a56407490884b983a614ed740153b9be4b82586"})),e("div",{key:"a5999c3592a4547c7313f50c10e6f4bcc5c97165",class:{"modal-footer":true,"ds-chrome-row":true,"ds-chrome-space--lg":true,"modal-footer--empty":!this.hasFooter}},e("div",{key:"42435f0dd4d8f904b298ddaf5a12f183ba4a01bd",class:"modal-footer__actions"},e("slot",{key:"43eff37d0db1fad2799455adea0d78d189d77942",name:"footer",onSlotchange:s=>this.updateFooterPresence(s.currentTarget)})))))}get el(){return this}static get watchers(){return{open:[{onOpenChange:0}]}}static get style(){return f()}},[262,"ds-modal",{open:[1028],heading:[1],description:[1],closeAriaLabel:[1,"close-aria-label"],modalWidth:[1,"modal-width"],ariaDescribedby:[1,"aria-describedby"],closing:[32],hasFooter:[32]},undefined,{open:[{onOpenChange:0}]}]);function y(){if(typeof customElements==="undefined"){return}const s=["ds-modal","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text","ds-tooltip"];s.forEach((s=>{switch(s){case"ds-modal":if(!customElements.get(i(s))){customElements.define(i(s),v)}break;case"ds-badge":if(!customElements.get(i(s))){r()}break;case"ds-button-unfilled":if(!customElements.get(i(s))){t()}break;case"ds-icon":if(!customElements.get(i(s))){n()}break;case"ds-loader":if(!customElements.get(i(s))){l()}break;case"ds-text":if(!customElements.get(i(s))){c()}break;case"ds-tooltip":if(!customElements.get(i(s))){m()}break}}))}y();export{v as M,y as d};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as s,H as o,c as d,h as e,a,t as i}from"./index.js";import{d as r}from"./p-CwdRaJER.js";import{d as t}from"./p-D6FRqNhN.js";import{d as n}from"./p-DjkUFlDW.js";import{d as c}from"./p-0XTyQNRG.js";import{d as l}from"./p-D8OWhnID.js";import{d as m}from"./p-DIQiHX0q.js";import{b as h,T as p}from"./p-CeXf9-X3.js";const f=()=>`.sc-ds-modal-h,.sc-ds-modal:where(.ds-table),.sc-ds-modal:where(.tooltip-popup),.sc-ds-modal:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-modal,.ds-control--lg.sc-ds-modal-h,.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal,.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal,.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-modal-h,.ds-control--lg.sc-ds-modal{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-header.sc-ds-modal{display:flex;align-items:center;box-sizing:border-box;min-width:0;min-block-size:var(--dimension-size-600);padding:var(--dimension-space-100);gap:var(--dimension-space-100)}.ds-chrome-header--wrapping.sc-ds-modal{flex-wrap:wrap}.ds-chrome-header--bounded.sc-ds-modal{border-block-end:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.ds-chrome-header__leading.sc-ds-modal,.ds-chrome-header__trailing.sc-ds-modal{display:flex;align-items:center;flex:0 0 auto;min-width:0}.ds-chrome-header__trailing.sc-ds-modal{margin-inline-start:auto;gap:var(--dimension-space-100)}.ds-chrome-header__copy.sc-ds-modal{display:flex;flex:1 1 0;min-width:0;padding:var(--ds-control-padding-inline, var(--dimension-space-075));box-sizing:border-box}.ds-chrome-header__copy--wrapping.sc-ds-modal{align-items:baseline;flex-wrap:wrap;column-gap:var(--dimension-space-100);row-gap:var(--dimension-space-050)}.ds-chrome-header__copy--stacked.sc-ds-modal{align-items:stretch;flex-direction:column;gap:var(--dimension-space-050)}.ds-chrome-header__heading.sc-ds-modal,.ds-chrome-header__description.sc-ds-modal{width:auto;min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025));box-sizing:border-box}.ds-chrome-header__heading.sc-ds-modal{flex:0 1 auto}.ds-chrome-header__copy--wrapping.sc-ds-modal .ds-chrome-header__description.sc-ds-modal{flex:1 1 var(--dimension-card-width-xs)}.ds-chrome-space--sm.sc-ds-modal-h,.ds-chrome-space--sm.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-modal-h,.ds-chrome-space--md.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-modal-h,.ds-chrome-space--lg.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal,.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal,.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal{flex-direction:column}.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:grid;align-items:center}@media (forced-colors: active){.sc-ds-modal:root,.sc-ds-modal-h,.ds-forced-colors-scope.sc-ds-modal{--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-modal-h{display:contents}.modal-dialog.sc-ds-modal{display:none;flex-direction:column;max-width:none;max-height:calc(100vh - 2 * var(--dimension-space-200));margin:auto;padding:0;overflow:hidden;color:var(--color-foreground-primary);background-color:var(--color-background-primary);border:0;border-radius:var(--ds-radius-modal);box-shadow:var(--effect-elevation-elevated-floating);outline:none;box-sizing:border-box;animation:modalDialogIn var(--effect-motion-short-2) forwards}.modal-dialog[open].sc-ds-modal{display:flex}.modal-dialog.sc-ds-modal::backdrop{background-color:var(--color-background-shade);animation:modalBackdropIn var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal{animation:modalDialogOut var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal::backdrop{animation:modalBackdropOut var(--effect-motion-short-2) forwards}@keyframes modalBackdropIn{from{opacity:0}to{opacity:1}}@keyframes modalBackdropOut{from{opacity:1}to{opacity:0}}@keyframes modalDialogIn{from{opacity:0;transform:scale(0.97) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalDialogOut{from{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(0.97) translateY(4px)}}@media (prefers-reduced-motion: reduce){.modal-dialog[open].sc-ds-modal,.modal-dialog--closing.sc-ds-modal{animation:none;transform:none}.modal-dialog.sc-ds-modal::backdrop{animation:none;opacity:1}.modal-dialog--closing.sc-ds-modal,.modal-dialog--closing.sc-ds-modal::backdrop{opacity:0}}.modal-header.sc-ds-modal{align-items:flex-start;flex:0 0 auto;color:var(--color-foreground-primary)}.modal-copy.sc-ds-modal,ds-text.modal-heading.sc-ds-modal,ds-text.modal-description.sc-ds-modal{width:auto;text-align:left}ds-text.modal-heading.sc-ds-modal{-webkit-user-select:none;user-select:none}.modal-close-tooltip.sc-ds-modal{flex:0 0 auto}.modal-content.sc-ds-modal{min-height:0;padding:var(--dimension-space-200);overflow-y:auto;flex:1 1 auto;box-sizing:border-box}.modal-footer.sc-ds-modal{justify-content:flex-start;height:var(--dimension-size-800);flex:0 0 auto;border-top:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.modal-footer__actions.sc-ds-modal{display:flex;align-items:center;gap:var(--dimension-space-100);min-width:0}.modal-footer--empty.sc-ds-modal{display:none}.modal-footer__actions.sc-ds-modal slot.sc-ds-modal{display:contents}@media (forced-colors: active){.modal-dialog.sc-ds-modal{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const g={sm:"var(--dimension-modal-width-sm)",md:"var(--dimension-modal-width-md)",lg:"var(--dimension-modal-width-lg)"};const u=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","iframe",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(",");let b=0;const v=s(class s extends o{constructor(s){super();if(s!==false){this.__registerHost()}this.dsClose=d(this,"dsClose",7);this.dsAfterClose=d(this,"dsAfterClose",7);this.open=false;this.description="";this.closeAriaLabel="Close";this.modalWidth="md";this.closing=false;this.hasFooter=false;this.titleId=`ds-modal-title-${++b}`;this.descriptionId=`${this.titleId}-description`;this.dialogEl=null;this.previousFocus=null;this.closeTimer=null}componentDidLoad(){this.updateFooterPresence();if(this.open)this.onOpenChange(true)}componentDidRender(){if(!this.closing||!this.dialogEl?.open||this.closeTimer)return;const s=this.closeAnimationMs;if(s<=0){this.finishClose();return}this.closeTimer=setTimeout((()=>{this.closeTimer=null;this.finishClose()}),s)}disconnectedCallback(){this.clearCloseTimer();if(this.dialogEl?.open)this.dialogEl.close()}onOpenChange(s){if(s){this.clearCloseTimer();const s=!!this.dialogEl?.open;this.closing=false;if(!this.dialogEl||s)return;this.previousFocus=document.activeElement;this.dialogEl.showModal();requestAnimationFrame((()=>{if(this.open&&this.dialogEl?.open)this.focusClose()}))}else if(this.dialogEl?.open){this.closing=true}}focusClose(){const s=this.el.querySelector("ds-button-unfilled.modal-close");void s?.setFocus?.()}clearCloseTimer(){if(this.closeTimer){clearTimeout(this.closeTimer);this.closeTimer=null}}requestClose(s,o){if(!this.open||this.closing||!this.dialogEl?.open)return;this.dsClose.emit({reason:s,originalEvent:o});this.open=false}updateFooterPresence(s){const o=s?.assignedNodes()??[];this.hasFooter=o.some((s=>s.nodeType!==Node.TEXT_NODE||!!s.textContent?.trim()))||this.el.querySelector('[slot="footer"]')!==null}handleCancel(s){s.preventDefault();this.requestClose("escape",s)}handleBackdropPointerDown(s){if(s.target===this.dialogEl)this.requestClose("backdrop",s)}handleKeyDown(s){if(s.key==="Escape"){s.preventDefault();this.requestClose("escape",s);return}if(s.key!=="Tab"||!this.dialogEl)return;const o=Array.from(this.dialogEl.querySelectorAll(u)).filter((s=>!s.hasAttribute("disabled")&&s.getAttribute("aria-hidden")!=="true"));if(!o.length){s.preventDefault();this.dialogEl.focus();return}const d=o[0];const e=o[o.length-1];const a=document.activeElement;if(s.shiftKey&&(a===d||a===this.dialogEl)){s.preventDefault();e.focus()}else if(!s.shiftKey&&a===e){s.preventDefault();d.focus()}}get resolvedWidth(){if(this.modalWidth==="sm"||this.modalWidth==="md"||this.modalWidth==="lg"){return g[this.modalWidth]}return this.modalWidth}get describedBy(){const s=[this.description?this.descriptionId:"",this.ariaDescribedby??""].filter(Boolean);return s.length>0?s.join(" "):undefined}get closeAnimationMs(){return h(p.motionShort2,p.animationDurationShort3)}finishClose(){if(!this.dialogEl?.open)return;this.dialogEl.close();this.closing=false;this.clearCloseTimer();this.previousFocus?.focus?.();this.previousFocus=null;this.dsAfterClose.emit()}render(){return e(a,{key:"bf30efd1f1be1bfd89112e9f06be2e501e07bb4e"},e("dialog",{key:"41ccf7aea373ccaff16e689c87cd61054ecfb8f6",ref:s=>{this.dialogEl=s??null},class:{"modal-dialog":true,"modal-dialog--closing":this.closing},"aria-labelledby":this.titleId,"aria-describedby":this.describedBy,onCancel:s=>this.handleCancel(s),onPointerDown:s=>this.handleBackdropPointerDown(s),onKeyDown:s=>this.handleKeyDown(s),style:{width:`min(${this.resolvedWidth}, calc(100vw - 2 * var(--dimension-space-200)))`}},e("div",{key:"6fbe4c1f3647326baac24e1ba102b58e962c5e72",class:"modal-header ds-chrome-header ds-chrome-header--bounded"},e("div",{key:"0c321aba8d3fa597419f136e7342cefaee8a2813",class:"modal-copy ds-chrome-header__copy ds-chrome-header__copy--stacked ds-control--md"},e("ds-text",{key:"854371e7e94e7068934bee006f79cf93f7dec25e",class:"modal-heading ds-chrome-header__heading",as:"h2",variant:"text-title-small",emphasis:true,color:"primary",lineTruncation:1,textId:this.titleId},this.heading),this.description?e("ds-text",{class:"modal-description ds-chrome-header__description",as:"p",variant:"text-body-medium",color:"secondary",wrap:"wrap",textId:this.descriptionId},this.description):null),e("ds-tooltip",{key:"3bdca3dfb7297e70dc02fe6424f8a22a23973808",class:"modal-close-tooltip ds-chrome-header__trailing",label:this.closeAriaLabel,side:"bottom",size:"sm"},e("ds-button-unfilled",{key:"5f3b710429087b480a53516fcbba18917540a66e",class:"modal-close",variant:"icon",icon:"Cross",size:"md","aria-label":this.closeAriaLabel,activeFill:false,hasBorder:false,onDsClick:s=>this.requestClose("close-button",s.detail)}))),e("div",{key:"77091bfa29077860baf7053d55e4199c0c7cddf2",class:"modal-content"},e("slot",{key:"fad8810091d79295bd4c21383c37584fb118f1f2"})),e("div",{key:"a34ec4ac8f36b673cdc1da2b037b0b59623ff435",class:{"modal-footer":true,"ds-chrome-row":true,"ds-chrome-space--lg":true,"modal-footer--empty":!this.hasFooter}},e("div",{key:"21135e06d2876a6e747f6f3fb26e0c5b2b487031",class:"modal-footer__actions"},e("slot",{key:"4fc040373a83f9617de56bbcccc19f700c536ade",name:"footer",onSlotchange:s=>this.updateFooterPresence(s.currentTarget)})))))}get el(){return this}static get watchers(){return{open:[{onOpenChange:0}]}}static get style(){return f()}},[262,"ds-modal",{open:[1028],heading:[1],description:[1],closeAriaLabel:[1,"close-aria-label"],modalWidth:[1,"modal-width"],ariaDescribedby:[1,"aria-describedby"],closing:[32],hasFooter:[32]},undefined,{open:[{onOpenChange:0}]}]);function y(){if(typeof customElements==="undefined"){return}const s=["ds-modal","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text","ds-tooltip"];s.forEach((s=>{switch(s){case"ds-modal":if(!customElements.get(i(s))){customElements.define(i(s),v)}break;case"ds-badge":if(!customElements.get(i(s))){r()}break;case"ds-button-unfilled":if(!customElements.get(i(s))){t()}break;case"ds-icon":if(!customElements.get(i(s))){n()}break;case"ds-loader":if(!customElements.get(i(s))){c()}break;case"ds-text":if(!customElements.get(i(s))){l()}break;case"ds-tooltip":if(!customElements.get(i(s))){m()}break}}))}y();export{v as M,y as d};
|
|
2
|
+
//# sourceMappingURL=p-pp1IQN4Z.js.map
|