@ds-mo/ui 15.4.0 → 15.5.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/NOTICE +7 -1
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +64 -8
- package/dist/angular/boolean-value-accessor.js +3 -3
- package/dist/angular/ds-agent-activity.js +3 -3
- package/dist/angular/ds-agent-questionnaire.js +3 -3
- package/dist/angular/ds-agent-response.js +3 -3
- package/dist/angular/ds-agent-source-list.js +3 -3
- package/dist/angular/ds-agent-tool-call.js +3 -3
- package/dist/angular/ds-attachment-list.js +3 -3
- package/dist/angular/ds-avatar.js +3 -3
- package/dist/angular/ds-badge.js +3 -3
- package/dist/angular/ds-banner.js +3 -3
- package/dist/angular/ds-bar-action.js +3 -3
- package/dist/angular/ds-bar-nav.js +3 -3
- package/dist/angular/ds-bar-page-title.js +3 -3
- package/dist/angular/ds-bar-title.js +3 -3
- package/dist/angular/ds-bar-workflow.js +3 -3
- package/dist/angular/ds-breadcrumb.js +3 -3
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-button-inverted.js +3 -3
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-calendar.js +3 -3
- package/dist/angular/ds-card-action-center.js +3 -3
- package/dist/angular/ds-card-chart.js +3 -3
- package/dist/angular/ds-card-navigation.js +3 -3
- package/dist/angular/ds-card-overview.js +3 -3
- package/dist/angular/ds-card-setting.js +3 -3
- package/dist/angular/ds-card-settings-scope.js +3 -3
- package/dist/angular/ds-chart-legend.js +3 -3
- package/dist/angular/ds-chart.js +3 -3
- package/dist/angular/ds-checkbox-group.js +3 -3
- package/dist/angular/ds-checkbox.d.ts +1 -1
- package/dist/angular/ds-checkbox.js +5 -5
- package/dist/angular/ds-chip.js +3 -3
- package/dist/angular/ds-code-block.js +3 -3
- package/dist/angular/ds-conversation-list-item.js +3 -3
- package/dist/angular/ds-conversation-list-section.js +3 -3
- package/dist/angular/ds-conversation-list.js +3 -3
- package/dist/angular/ds-data-customize.js +3 -3
- package/dist/angular/ds-data-filter.js +3 -3
- package/dist/angular/ds-data-group.js +3 -3
- package/dist/angular/ds-data-preferences.js +3 -3
- package/dist/angular/ds-data-saved-views.js +3 -3
- package/dist/angular/ds-data-search.js +3 -3
- package/dist/angular/ds-data-sort.js +3 -3
- package/dist/angular/ds-data-toolbar.js +3 -3
- package/dist/angular/ds-divider.js +3 -3
- package/dist/angular/ds-empty-state.js +3 -3
- package/dist/angular/ds-field.js +3 -3
- package/dist/angular/ds-filter-menu.js +3 -3
- package/dist/angular/ds-icon.js +3 -3
- package/dist/angular/ds-inline-banner-settings.js +3 -3
- package/dist/angular/ds-input-date.js +3 -3
- package/dist/angular/ds-input-time.js +3 -3
- package/dist/angular/ds-input.js +3 -3
- package/dist/angular/ds-loader.js +3 -3
- package/dist/angular/ds-map-cluster-marker.js +3 -3
- package/dist/angular/ds-map-entity-marker.js +3 -3
- package/dist/angular/ds-markdown.js +3 -3
- package/dist/angular/ds-menu.js +3 -3
- package/dist/angular/ds-message-actions.js +3 -3
- package/dist/angular/ds-message-bubble.js +3 -3
- package/dist/angular/ds-message-composer.js +3 -3
- package/dist/angular/ds-message-scroller.js +3 -3
- package/dist/angular/ds-message.js +3 -3
- package/dist/angular/ds-mobile-bar-nav.js +3 -3
- package/dist/angular/ds-mobile-header.js +3 -3
- package/dist/angular/ds-mobile-section-switcher.js +3 -3
- package/dist/angular/ds-mobile-sheet-nav.js +3 -3
- package/dist/angular/ds-modal.js +3 -3
- package/dist/angular/ds-pagination.js +3 -3
- package/dist/angular/ds-panel-nav.js +3 -3
- package/dist/angular/ds-panel-sub-nav.js +3 -3
- package/dist/angular/ds-panel-tool-header.js +3 -3
- package/dist/angular/ds-panel-tool-search.js +3 -3
- package/dist/angular/ds-panel-tools.js +3 -3
- package/dist/angular/ds-paper-texture.js +3 -3
- package/dist/angular/ds-radio-tile.js +3 -3
- package/dist/angular/ds-radio.js +3 -3
- package/dist/angular/ds-score.js +3 -3
- package/dist/angular/ds-scroll-overlay.js +3 -3
- package/dist/angular/ds-select.d.ts +1 -1
- package/dist/angular/ds-select.js +5 -5
- package/dist/angular/ds-setting-row-checkbox.js +3 -3
- package/dist/angular/ds-setting-row-radio.js +3 -3
- package/dist/angular/ds-setting-row-toggle.js +3 -3
- package/dist/angular/ds-shell-app.js +3 -3
- package/dist/angular/ds-shell-page.js +3 -3
- package/dist/angular/ds-shell-tools.js +3 -3
- package/dist/angular/ds-skeleton.js +3 -3
- package/dist/angular/ds-slider.js +3 -3
- package/dist/angular/ds-swatch-picker.js +3 -3
- package/dist/angular/ds-switch.js +3 -3
- package/dist/angular/ds-tab-group.js +3 -3
- package/dist/angular/ds-table.d.ts +7 -1
- package/dist/angular/ds-table.js +13 -7
- package/dist/angular/ds-tag.js +3 -3
- package/dist/angular/ds-text.js +3 -3
- package/dist/angular/ds-textarea.js +3 -3
- package/dist/angular/ds-time-picker.js +3 -3
- package/dist/angular/ds-toast.js +3 -3
- package/dist/angular/ds-tooltip-chart.js +3 -3
- package/dist/angular/ds-tooltip.js +3 -3
- package/dist/angular/ds-typing-indicator.js +3 -3
- package/dist/angular/number-value-accessor.js +3 -3
- package/dist/angular/radio-value-accessor.js +3 -3
- package/dist/angular/select-value-accessor.js +3 -3
- package/dist/angular/text-value-accessor.js +3 -3
- package/dist/angular/value-accessor.js +3 -3
- package/dist/components/THIRD-PARTY-NOTICES +1791 -0
- package/dist/components/bundled-dependencies.json +478 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-avatar.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-banner.js.map +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-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-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +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-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-conversation-list.js.map +1 -1
- package/dist/components/ds-data-customize.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-preferences.js.map +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-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-filter-menu.js +1 -1
- package/dist/components/ds-icon.js +1 -1
- 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-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-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-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-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-toggle.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +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-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/p--STJbKuN.js +2 -0
- package/dist/components/p--STJbKuN.js.map +1 -0
- package/dist/components/{p-Co1rUdOR.js → p--pJyciTI.js} +2 -2
- package/dist/components/p--pJyciTI.js.map +1 -0
- package/dist/components/p-02k7d7BH.js +2 -0
- package/dist/components/p-02k7d7BH.js.map +1 -0
- package/dist/components/{p-CZNZTcYS.js → p-5-gQbIIz.js} +2 -2
- package/dist/components/{p-DRdoGSGX.js → p-7MwoWtTJ.js} +2 -2
- package/dist/components/p-B0uO3-Dp.js +2 -0
- package/dist/components/p-B0uO3-Dp.js.map +1 -0
- package/dist/components/p-B6TX55c5.js +2 -0
- package/dist/components/p-B6TX55c5.js.map +1 -0
- package/dist/components/p-B95UP66y.js +2 -0
- package/dist/components/p-B95UP66y.js.map +1 -0
- package/dist/components/p-BGSG6xIS.js +2 -0
- package/dist/components/p-BGSG6xIS.js.map +1 -0
- package/dist/components/p-BNarCFJZ.js +2 -0
- package/dist/components/p-BNarCFJZ.js.map +1 -0
- package/dist/components/{p-DJDbskZf.js → p-BO5URdZF.js} +2 -2
- package/dist/components/{p-DmSnHVW6.js → p-BVxK8ce0.js} +2 -2
- package/dist/components/{p-B0EpvBDs.js → p-BYeG0b5N.js} +2 -2
- package/dist/components/p-BcpIK9S6.js +2 -0
- package/dist/components/p-BcpIK9S6.js.map +1 -0
- package/dist/components/p-Bf-BphXP.js +2 -0
- package/dist/components/p-Bf-BphXP.js.map +1 -0
- package/dist/components/{p-Bk3poU91.js → p-BmIllmq2.js} +2 -2
- package/dist/components/p-BmIllmq2.js.map +1 -0
- package/dist/components/p-Bq_ypMSy.js +2 -0
- package/dist/components/p-Bq_ypMSy.js.map +1 -0
- package/dist/components/p-ByLH5RAD.js +2 -0
- package/dist/components/p-ByLH5RAD.js.map +1 -0
- package/dist/components/{p-DzvTC27M.js → p-C1ZfBbJ_.js} +2 -2
- package/dist/components/p-C1ZfBbJ_.js.map +1 -0
- package/dist/components/p-C1oczmAc.js +2 -0
- package/dist/components/p-C1oczmAc.js.map +1 -0
- package/dist/components/p-C5BBIDVm.js +2 -0
- package/dist/components/p-C5BBIDVm.js.map +1 -0
- package/dist/components/{p-CJ1NnOEW.js → p-CA3iQ1ME.js} +2 -2
- package/dist/components/p-CE6MaXBg.js +2 -0
- package/dist/components/p-CE6MaXBg.js.map +1 -0
- package/dist/components/p-CXGjCWSh.js +2 -0
- package/dist/components/p-CXGjCWSh.js.map +1 -0
- package/dist/components/{p-DYQa1DVF.js → p-C_9VGgPf.js} +2 -2
- package/dist/components/p-CbrDF2gA.js +2 -0
- package/dist/components/p-CbrDF2gA.js.map +1 -0
- package/dist/components/{p-7TVdPhGR.js → p-CgQB8Ct5.js} +2 -2
- package/dist/components/{p-D6FRqNhN.js → p-D-J7GgjY.js} +2 -2
- package/dist/components/{p-DSZPO06T.js → p-D9_iDlkT.js} +2 -2
- package/dist/components/{p-BwdnVqAY.js → p-DEYCF-oJ.js} +2 -2
- package/dist/components/p-DGVZhrMd.js +2 -0
- package/dist/components/p-DGVZhrMd.js.map +1 -0
- package/dist/components/{p-C8V4lkVy.js → p-DKGW3gRa.js} +2 -2
- package/dist/components/p-DPFg5d4_.js +2 -0
- package/dist/components/p-DPFg5d4_.js.map +1 -0
- package/dist/components/{p-C4huuwed.js → p-DR_8IPn9.js} +2 -2
- package/dist/components/p-DXL5D30P.js +2 -0
- package/dist/components/p-DXL5D30P.js.map +1 -0
- package/dist/components/{p-B0BQCVkq.js → p-D_iZPukF.js} +2 -2
- package/dist/components/{p-JBki_jyY.js → p-DfMTDFcE.js} +2 -2
- package/dist/components/{p-MOJmB6vX.js → p-Dg6hnCc2.js} +2 -2
- package/dist/components/{p-DXk1eml1.js → p-DjbT9kKm.js} +2 -2
- package/dist/components/p-Dka0lUI_.js +2 -0
- package/dist/components/p-Dka0lUI_.js.map +1 -0
- package/dist/components/p-DlsjHRU3.js +2 -0
- package/dist/components/p-DlsjHRU3.js.map +1 -0
- package/dist/components/{p-_IqSPt5V.js → p-Dr5rkAhe.js} +2 -2
- package/dist/components/p-DuCCuJKI.js +2 -0
- package/dist/components/p-DuCCuJKI.js.map +1 -0
- package/dist/components/{p-DIQiHX0q.js → p-DvGrsLgt.js} +2 -2
- package/dist/components/{p-Doa2blZT.js → p-PtxCwf5S.js} +2 -2
- package/dist/components/p-PzYJqN8B.js +2 -0
- package/dist/components/p-PzYJqN8B.js.map +1 -0
- package/dist/components/p-S1Ct3FJV.js +2 -0
- package/dist/components/p-S1Ct3FJV.js.map +1 -0
- package/dist/components/p-YC7UM4jH.js +2 -0
- package/dist/components/p-YC7UM4jH.js.map +1 -0
- package/dist/components/{p-B9TM6FqC.js → p-d76Ry5nh.js} +2 -2
- package/dist/components/p-ioGH5SoA.js +2 -0
- package/dist/components/p-ioGH5SoA.js.map +1 -0
- package/dist/components/p-jp7hwRtC.js +2 -0
- package/dist/components/p-jp7hwRtC.js.map +1 -0
- package/dist/components/{p-BFHpU-uU.js → p-kwS-vkau.js} +2 -2
- package/dist/components/{p-DjkUFlDW.js → p-pPtjNRqC.js} +3 -2
- package/dist/components/p-pPtjNRqC.js.map +1 -0
- package/dist/components/{p-B39iJO8F.js → p-rmPIcWED.js} +2 -2
- package/dist/components/p-t2Ebn8si.js +2 -0
- package/dist/components/p-t2Ebn8si.js.map +1 -0
- package/dist/components/p-wRhYxngW.js +2 -0
- package/dist/components/p-wRhYxngW.js.map +1 -0
- package/dist/docs/components.json +477 -82
- package/dist/lib/components/Icon/icon-cache.d.ts +6 -0
- package/dist/lib/utils/clock-time.d.ts +1 -0
- package/dist/lib/utils/date-filter-value.d.ts +2 -0
- package/dist/lib/utils/form-association.d.ts +2 -1
- package/dist/lib/utils/format-percentage.d.ts +1 -1
- package/dist/lib/utils/index.js +113 -93
- package/dist/lib/utils/index.js.map +4 -4
- package/dist/lib/utils/intl-formatters.d.ts +3 -0
- package/dist/lib/utils/resolve-css-length-px.d.ts +4 -3
- package/dist/lint/THIRD-PARTY-NOTICES +97 -40
- package/dist/lint/bundled-dependencies.json +162 -0
- package/dist/lint/index.js +1341 -1333
- package/dist/mcp/THIRD-PARTY-NOTICES +470 -0
- package/dist/mcp/bundled-dependencies.json +29 -0
- package/dist/mcp-data/registry/agent-tool-call.json +1 -1
- package/dist/mcp-data/registry/banner.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +1 -1
- package/dist/mcp-data/registry/bar-page-title.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/calendar.json +4 -4
- package/dist/mcp-data/registry/card-overview.json +1 -1
- package/dist/mcp-data/registry/chart.json +3 -3
- package/dist/mcp-data/registry/checkbox.json +17 -1
- package/dist/mcp-data/registry/conversation-list.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/filter-menu.json +1 -1
- package/dist/mcp-data/registry/icon.json +6 -5
- 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/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +1 -1
- package/dist/mcp-data/registry/message.json +4 -4
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/panel-nav.json +1 -1
- package/dist/mcp-data/registry/radio-tile.json +1 -1
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +63 -7
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select.json +70 -3
- package/dist/mcp-data/registry/shell-app.json +1 -1
- package/dist/mcp-data/registry/slider.json +3 -3
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/table.json +140 -14
- package/dist/mcp-data/registry/tooltip-chart.json +1 -1
- package/dist/react/ds-table.d.ts +3 -1
- package/dist/react/ds-table.js +2 -0
- package/dist/styles/table.css +405 -8
- package/dist/types/components/AgentToolCall/AgentToolCall.d.ts +3 -0
- package/dist/types/components/Banner/Banner.d.ts +1 -0
- package/dist/types/components/BarNav/BarNav.d.ts +4 -0
- package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +4 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +5 -0
- package/dist/types/components/Calendar/Calendar.d.ts +2 -0
- package/dist/types/components/CardOverview/CardOverview.d.ts +3 -0
- package/dist/types/components/Chart/Chart.d.ts +7 -1
- package/dist/types/components/Checkbox/Checkbox.d.ts +3 -0
- package/dist/types/components/ConversationList/ConversationList.d.ts +3 -0
- package/dist/types/components/DataGroup/DataGroup.d.ts +3 -0
- package/dist/types/components/DataPreferences/DataPreferences.d.ts +1 -0
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +1 -0
- package/dist/types/components/Icon/icon-cache.d.ts +6 -0
- package/dist/types/components/Icon/icon-svg.d.ts +10 -24
- package/dist/types/components/Markdown/Markdown.d.ts +4 -0
- package/dist/types/components/Menu/Menu.d.ts +3 -0
- package/dist/types/components/Message/Message.d.ts +1 -1
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +5 -0
- package/dist/types/components/Modal/Modal.d.ts +3 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +8 -1
- package/dist/types/components/Radio/Radio.d.ts +1 -0
- package/dist/types/components/ScrollOverlay/ScrollOverlay.d.ts +1 -0
- package/dist/types/components/Select/Select.d.ts +8 -0
- package/dist/types/components/ShellApp/ShellApp.d.ts +3 -0
- package/dist/types/components/Slider/Slider.d.ts +1 -1
- package/dist/types/components/Switch/Switch.d.ts +2 -0
- package/dist/types/components/Table/Table.d.ts +35 -0
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/components/Table/table-body-renderer.d.ts +1 -0
- package/dist/types/components/Table/table-cell-editor.d.ts +4 -0
- package/dist/types/components/Table/table-grid-model.d.ts +23 -0
- package/dist/types/components/Table/table-layout-controller.d.ts +1 -0
- package/dist/types/components/Table/table-model.d.ts +1 -1
- package/dist/types/components/Table/table-review-fixtures.d.ts +10 -0
- package/dist/types/components/Table/table-row-view.d.ts +11 -2
- package/dist/types/components/Table/table-skeleton-view.d.ts +3 -1
- package/dist/types/components/Table/table-structure.d.ts +38 -0
- package/dist/types/components/Table/table-types.d.ts +71 -1
- package/dist/types/components/Table/table-virtual-controller.d.ts +1 -0
- package/dist/types/components/TooltipChart/TooltipChart.d.ts +4 -0
- package/dist/types/components.d.ts +98 -12
- package/dist/types/shell/chrome-transition.d.ts +1 -0
- package/dist/types/utils/anchored-position-controller.d.ts +2 -0
- package/dist/types/utils/clock-time.d.ts +1 -0
- package/dist/types/utils/connection-tasks.d.ts +13 -0
- package/dist/types/utils/date-filter-value.d.ts +2 -0
- package/dist/types/utils/form-association.d.ts +2 -1
- package/dist/types/utils/format-percentage.d.ts +1 -1
- package/dist/types/utils/intl-formatters.d.ts +4 -0
- package/dist/types/utils/resolve-css-length-px.d.ts +4 -3
- package/dist/types/utils/select-controller.d.ts +1 -0
- package/dist/vue/THIRD-PARTY-NOTICES +14 -0
- package/dist/vue/bundled-dependencies.json +13 -0
- package/dist/vue/ds-checkbox.js +1 -0
- package/dist/vue/ds-select.js +4 -0
- package/dist/vue/ds-table.js +8 -0
- package/package.json +16 -11
- package/dist/components/p-B8ZonS3S.js +0 -2
- package/dist/components/p-B8ZonS3S.js.map +0 -1
- package/dist/components/p-BDdlJZyL.js +0 -2
- package/dist/components/p-BDdlJZyL.js.map +0 -1
- package/dist/components/p-BERXvOCf.js +0 -2
- package/dist/components/p-BERXvOCf.js.map +0 -1
- package/dist/components/p-BQspV5U7.js +0 -2
- package/dist/components/p-BQspV5U7.js.map +0 -1
- package/dist/components/p-BhjqYTiY.js +0 -2
- package/dist/components/p-BhjqYTiY.js.map +0 -1
- package/dist/components/p-BjtXYFhw.js +0 -2
- package/dist/components/p-BjtXYFhw.js.map +0 -1
- package/dist/components/p-Bk3poU91.js.map +0 -1
- package/dist/components/p-BxduVc5g.js +0 -2
- package/dist/components/p-BxduVc5g.js.map +0 -1
- package/dist/components/p-C0qN3PSb.js +0 -2
- package/dist/components/p-C0qN3PSb.js.map +0 -1
- package/dist/components/p-CPamUzaj.js +0 -2
- package/dist/components/p-CPamUzaj.js.map +0 -1
- package/dist/components/p-CUDocY23.js +0 -2
- package/dist/components/p-CUDocY23.js.map +0 -1
- package/dist/components/p-CX6ZxUQT.js +0 -2
- package/dist/components/p-CX6ZxUQT.js.map +0 -1
- package/dist/components/p-Cgn-BORA.js +0 -2
- package/dist/components/p-Cgn-BORA.js.map +0 -1
- package/dist/components/p-Ck1hgD6g.js +0 -2
- package/dist/components/p-Ck1hgD6g.js.map +0 -1
- package/dist/components/p-Co1rUdOR.js.map +0 -1
- package/dist/components/p-CochmPyg.js +0 -2
- package/dist/components/p-CochmPyg.js.map +0 -1
- package/dist/components/p-DCyJ3_PL.js +0 -2
- package/dist/components/p-DCyJ3_PL.js.map +0 -1
- package/dist/components/p-DVEx-Xg9.js +0 -2
- package/dist/components/p-DVEx-Xg9.js.map +0 -1
- package/dist/components/p-DYsE6HLk.js +0 -2
- package/dist/components/p-DYsE6HLk.js.map +0 -1
- package/dist/components/p-DebLYW7A.js +0 -2
- package/dist/components/p-DebLYW7A.js.map +0 -1
- package/dist/components/p-DjkUFlDW.js.map +0 -1
- package/dist/components/p-Dnt5xUBD.js +0 -2
- package/dist/components/p-Dnt5xUBD.js.map +0 -1
- package/dist/components/p-Dyqd-cub.js +0 -2
- package/dist/components/p-Dyqd-cub.js.map +0 -1
- package/dist/components/p-DzvTC27M.js.map +0 -1
- package/dist/components/p-g0jsfEXz.js +0 -2
- package/dist/components/p-g0jsfEXz.js.map +0 -1
- package/dist/components/p-pp1IQN4Z.js +0 -2
- package/dist/components/p-pp1IQN4Z.js.map +0 -1
- package/dist/components/p-rCeztgVn.js +0 -2
- package/dist/components/p-rCeztgVn.js.map +0 -1
- /package/dist/components/{p-CZNZTcYS.js.map → p-5-gQbIIz.js.map} +0 -0
- /package/dist/components/{p-DRdoGSGX.js.map → p-7MwoWtTJ.js.map} +0 -0
- /package/dist/components/{p-DJDbskZf.js.map → p-BO5URdZF.js.map} +0 -0
- /package/dist/components/{p-DmSnHVW6.js.map → p-BVxK8ce0.js.map} +0 -0
- /package/dist/components/{p-B0EpvBDs.js.map → p-BYeG0b5N.js.map} +0 -0
- /package/dist/components/{p-CJ1NnOEW.js.map → p-CA3iQ1ME.js.map} +0 -0
- /package/dist/components/{p-DYQa1DVF.js.map → p-C_9VGgPf.js.map} +0 -0
- /package/dist/components/{p-7TVdPhGR.js.map → p-CgQB8Ct5.js.map} +0 -0
- /package/dist/components/{p-D6FRqNhN.js.map → p-D-J7GgjY.js.map} +0 -0
- /package/dist/components/{p-DSZPO06T.js.map → p-D9_iDlkT.js.map} +0 -0
- /package/dist/components/{p-BwdnVqAY.js.map → p-DEYCF-oJ.js.map} +0 -0
- /package/dist/components/{p-C8V4lkVy.js.map → p-DKGW3gRa.js.map} +0 -0
- /package/dist/components/{p-C4huuwed.js.map → p-DR_8IPn9.js.map} +0 -0
- /package/dist/components/{p-B0BQCVkq.js.map → p-D_iZPukF.js.map} +0 -0
- /package/dist/components/{p-JBki_jyY.js.map → p-DfMTDFcE.js.map} +0 -0
- /package/dist/components/{p-MOJmB6vX.js.map → p-Dg6hnCc2.js.map} +0 -0
- /package/dist/components/{p-DXk1eml1.js.map → p-DjbT9kKm.js.map} +0 -0
- /package/dist/components/{p-_IqSPt5V.js.map → p-Dr5rkAhe.js.map} +0 -0
- /package/dist/components/{p-DIQiHX0q.js.map → p-DvGrsLgt.js.map} +0 -0
- /package/dist/components/{p-Doa2blZT.js.map → p-PtxCwf5S.js.map} +0 -0
- /package/dist/components/{p-B9TM6FqC.js.map → p-d76Ry5nh.js.map} +0 -0
- /package/dist/components/{p-BFHpU-uU.js.map → p-kwS-vkau.js.map} +0 -0
- /package/dist/components/{p-B39iJO8F.js.map → p-rmPIcWED.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/wc/components/Icon/flag-icon-catalog.ts", "../../../src/wc/components/Icon/map-icon-catalog.ts", "../../../src/wc/components/Icon/icon-cache.ts", "../../../src/wc/utils/resolve-css-length-px.ts", "../../../src/wc/utils/format-compact-number.ts", "../../../src/wc/utils/format-percentage.ts", "../../../src/wc/utils/metric-change.ts", "../../../src/wc/utils/truncate-svg-text.ts", "../../../src/wc/utils/is-element-truncated.ts", "../../../src/wc/utils/resolve-css-time-ms.ts", "../../../src/wc/utils/scroll-edge-fade.ts", "../../../src/wc/utils/token-defaults.ts", "../../../src/wc/utils/required-validity.ts", "../../../src/wc/utils/form-association.ts", "../../../src/wc/utils/safe-url.ts", "../../../src/wc/utils/control-width.ts", "../../../node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-array/src/descending.js", "../../../node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-array/src/number.js", "../../../node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-array/src/count.js", "../../../node_modules/d3-array/src/variance.js", "../../../node_modules/d3-array/src/deviation.js", "../../../node_modules/d3-array/src/extent.js", "../../../node_modules/d3-array/src/identity.js", "../../../node_modules/d3-array/src/array.js", "../../../node_modules/d3-array/src/constant.js", "../../../node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-array/src/nice.js", "../../../node_modules/d3-array/src/threshold/sturges.js", "../../../node_modules/d3-array/src/bin.js", "../../../node_modules/d3-array/src/quantile.js", "../../../src/wc/utils/chart-grammar.ts", "../../../src/wc/utils/control-text.ts", "../../../src/wc/utils/choice-popup-alignment.ts", "../../../src/wc/utils/clock-time.ts", "../../../src/wc/utils/date-filter-value.ts"],
|
|
4
|
-
"sourcesContent": ["/** Auto-generated by scripts/generate-icon-catalog.mjs \u2014 do not edit. */\n\nexport const flagIconLoaders: Record<string, () => Promise<string>> = {\n FlagAustria: () => import('@ds-mo/icons/svg/flags/FlagAustria').then(m => m.FlagAustria),\n FlagBelgium: () => import('@ds-mo/icons/svg/flags/FlagBelgium').then(m => m.FlagBelgium),\n FlagBulgaria: () => import('@ds-mo/icons/svg/flags/FlagBulgaria').then(m => m.FlagBulgaria),\n FlagCanada: () => import('@ds-mo/icons/svg/flags/FlagCanada').then(m => m.FlagCanada),\n FlagCroatia: () => import('@ds-mo/icons/svg/flags/FlagCroatia').then(m => m.FlagCroatia),\n FlagCyprus: () => import('@ds-mo/icons/svg/flags/FlagCyprus').then(m => m.FlagCyprus),\n FlagCzechRepublic: () => import('@ds-mo/icons/svg/flags/FlagCzechRepublic').then(m => m.FlagCzechRepublic),\n FlagDenmark: () => import('@ds-mo/icons/svg/flags/FlagDenmark').then(m => m.FlagDenmark),\n FlagEU: () => import('@ds-mo/icons/svg/flags/FlagEU').then(m => m.FlagEU),\n FlagEstonia: () => import('@ds-mo/icons/svg/flags/FlagEstonia').then(m => m.FlagEstonia),\n FlagFinland: () => import('@ds-mo/icons/svg/flags/FlagFinland').then(m => m.FlagFinland),\n FlagFrance: () => import('@ds-mo/icons/svg/flags/FlagFrance').then(m => m.FlagFrance),\n FlagGermany: () => import('@ds-mo/icons/svg/flags/FlagGermany').then(m => m.FlagGermany),\n FlagGreece: () => import('@ds-mo/icons/svg/flags/FlagGreece').then(m => m.FlagGreece),\n FlagHungary: () => import('@ds-mo/icons/svg/flags/FlagHungary').then(m => m.FlagHungary),\n FlagIreland: () => import('@ds-mo/icons/svg/flags/FlagIreland').then(m => m.FlagIreland),\n FlagItaly: () => import('@ds-mo/icons/svg/flags/FlagItaly').then(m => m.FlagItaly),\n FlagLatvia: () => import('@ds-mo/icons/svg/flags/FlagLatvia').then(m => m.FlagLatvia),\n FlagLithuania: () => import('@ds-mo/icons/svg/flags/FlagLithuania').then(m => m.FlagLithuania),\n FlagLuxembourg: () => import('@ds-mo/icons/svg/flags/FlagLuxembourg').then(m => m.FlagLuxembourg),\n FlagMalta: () => import('@ds-mo/icons/svg/flags/FlagMalta').then(m => m.FlagMalta),\n FlagMexico: () => import('@ds-mo/icons/svg/flags/FlagMexico').then(m => m.FlagMexico),\n FlagNetherlands: () => import('@ds-mo/icons/svg/flags/FlagNetherlands').then(m => m.FlagNetherlands),\n FlagPoland: () => import('@ds-mo/icons/svg/flags/FlagPoland').then(m => m.FlagPoland),\n FlagPortugal: () => import('@ds-mo/icons/svg/flags/FlagPortugal').then(m => m.FlagPortugal),\n FlagRomania: () => import('@ds-mo/icons/svg/flags/FlagRomania').then(m => m.FlagRomania),\n FlagSlovakia: () => import('@ds-mo/icons/svg/flags/FlagSlovakia').then(m => m.FlagSlovakia),\n FlagSlovenia: () => import('@ds-mo/icons/svg/flags/FlagSlovenia').then(m => m.FlagSlovenia),\n FlagSpain: () => import('@ds-mo/icons/svg/flags/FlagSpain').then(m => m.FlagSpain),\n FlagSweden: () => import('@ds-mo/icons/svg/flags/FlagSweden').then(m => m.FlagSweden),\n FlagUnitedKingdom: () => import('@ds-mo/icons/svg/flags/FlagUnitedKingdom').then(m => m.FlagUnitedKingdom),\n FlagUnitedStates: () => import('@ds-mo/icons/svg/flags/FlagUnitedStates').then(m => m.FlagUnitedStates),\n};\n", "/** Auto-generated by scripts/generate-icon-catalog.mjs \u2014 do not edit. */\n\nexport const mapIconLoaders: Record<string, () => Promise<string>> = {\n MapEntityAsset: () => import('@ds-mo/icons/svg/map/MapEntityAsset').then(m => m.MapEntityAsset),\n MapEntityPerson: () => import('@ds-mo/icons/svg/map/MapEntityPerson').then(m => m.MapEntityPerson),\n MapEntityTravelGroup: () => import('@ds-mo/icons/svg/map/MapEntityTravelGroup').then(m => m.MapEntityTravelGroup),\n MapEntityVehicle: () => import('@ds-mo/icons/svg/map/MapEntityVehicle').then(m => m.MapEntityVehicle),\n MapExclamation: () => import('@ds-mo/icons/svg/map/MapExclamation').then(m => m.MapExclamation),\n MapGatewayReconnect: () => import('@ds-mo/icons/svg/map/MapGatewayReconnect').then(m => m.MapGatewayReconnect),\n MapGatewayStrikethrough: () => import('@ds-mo/icons/svg/map/MapGatewayStrikethrough').then(m => m.MapGatewayStrikethrough),\n MapGeofence: () => import('@ds-mo/icons/svg/map/MapGeofence').then(m => m.MapGeofence),\n MapKey: () => import('@ds-mo/icons/svg/map/MapKey').then(m => m.MapKey),\n MapLightning: () => import('@ds-mo/icons/svg/map/MapLightning').then(m => m.MapLightning),\n MapLockClosed: () => import('@ds-mo/icons/svg/map/MapLockClosed').then(m => m.MapLockClosed),\n MapPencil: () => import('@ds-mo/icons/svg/map/MapPencil').then(m => m.MapPencil),\n MapPlus: () => import('@ds-mo/icons/svg/map/MapPlus').then(m => m.MapPlus),\n MapRewind: () => import('@ds-mo/icons/svg/map/MapRewind').then(m => m.MapRewind),\n MapShieldCircle: () => import('@ds-mo/icons/svg/map/MapShieldCircle').then(m => m.MapShieldCircle),\n MapTarget: () => import('@ds-mo/icons/svg/map/MapTarget').then(m => m.MapTarget),\n};\n", "/**\n * Shared SVG glyph cache for ds-icon.\n *\n * Keyed on a global symbol so every module instance (the compiled Stencil chunk\n * inside dist/components and any direct source import, e.g. via `@ds-mo/ui/utils`)\n * reads and writes the same cache. Without this, `registerIcons` called from an\n * app would fill a different Map than the one ds-icon resolves from.\n */\nimport { flagIconLoaders } from './flag-icon-catalog';\nimport { mapIconLoaders } from './map-icon-catalog';\n\nconst CACHE_KEY = Symbol.for('ds-mo.icon-svg-cache');\n\ntype IconCacheMap = Map<string, string>;\n\ntype GlobalWithIconCache = { [CACHE_KEY]?: IconCacheMap };\n\n/** IcoMo ships each glyph in exactly one category; the catalogs mirror that split. */\nexport type IconCategory = 'system' | 'flag' | 'map';\n\nexport function iconCacheKey(name: string, category: IconCategory): string {\n return `${category}:${name}`;\n}\n\nfunction hasOwn(loaders: Record<string, unknown>, name: string): boolean {\n return Object.prototype.hasOwnProperty.call(loaders, name);\n}\n\n/**\n * Pick the catalog a name belongs to by own-key membership \u2014 never by prefix.\n *\n * A prefix test looks equivalent and is not. IcoMo ships `Flag`/`FlagFilled` as\n * *system* icons (a generic flag glyph, not a country) and `MapNavigation`,\n * `MapPage`, `MapPin`, `MapStreet` as system icons too, while every genuine\n * flag/map export carries the category prefix. So `startsWith('Flag')` or\n * `startsWith('Map')` misroutes those six to a catalog that does not contain\n * them, the own-key lookup misses, and ds-icon renders nothing with no error.\n *\n * Only the two prefixed catalogs are consulted; anything else is system. That\n * keeps the system catalog \u2014 400 loaders, by far the largest \u2014 out of the\n * `@ds-mo/ui/utils` entry, which exists to hand apps `registerIcons`.\n *\n * Test order is not a tie-break: `generate-icon-catalog.mjs` fails the build if\n * IcoMo ever ships one name in two categories, so at most one can match.\n *\n * Names in no catalog resolve as system, which is what lets an app register a\n * glyph of its own under a custom name and have ds-icon read it back.\n */\nexport function resolveIconCategory(name: string): IconCategory {\n if (hasOwn(flagIconLoaders, name)) return 'flag';\n if (hasOwn(mapIconLoaders, name)) return 'map';\n return 'system';\n}\n\nexport function iconCache(): IconCacheMap {\n const g = globalThis as GlobalWithIconCache;\n return (g[CACHE_KEY] ??= new Map());\n}\n\n/**\n * Pre-register glyphs so ds-icon renders them synchronously \u2014 no lazy-chunk\n * fetch, no first-paint pop-in. Import the SVG strings from `@ds-mo/icons`\n * in the app (statically, so they ship in the app's own bundle):\n *\n * ```ts\n * import { Bell } from '@ds-mo/icons/svg/Bell';\n * import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';\n * import { MapGeofence } from '@ds-mo/icons/svg/map/MapGeofence';\n * import { registerIcons } from '@ds-mo/ui/utils';\n *\n * registerIcons({ Bell });\n * registerIcons({ FlagUnitedStates });\n * registerIcons({ MapGeofence });\n * ```\n *\n * The category comes from the name, exactly as ds-icon derives it, so a\n * registration is always readable by the element that needs it. Glyphs under a\n * name IcoMo does not ship \u2014 an app's own marker artwork, say \u2014 register as\n * system and resolve the same way.\n *\n * There is deliberately no category override. ds-icon has no such override when\n * it reads, so forcing a different category on write could only produce an\n * entry nothing ever reads.\n *\n * Icons that are not registered still work \u2014 they lazy-load on first render\n * and stay cached afterwards.\n */\nexport function registerIcons(icons: Record<string, string>): void {\n const cache = iconCache();\n for (const [name, svg] of Object.entries(icons)) {\n cache.set(iconCacheKey(name, resolveIconCategory(name)), svg);\n }\n}\n", "const lengthPxCache = new Map<string, number>();\n\nlet probeEl: HTMLElement | null = null;\n\nfunction getProbeElement(): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n\n if (!probeEl) {\n probeEl = document.createElement('div');\n probeEl.setAttribute('aria-hidden', 'true');\n probeEl.style.cssText =\n 'position:absolute;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:0;overflow:hidden;';\n document.documentElement.appendChild(probeEl);\n }\n\n return probeEl;\n}\n\nfunction applyContextVariables(\n probe: HTMLElement,\n cssLength: string,\n context: Element\n): Array<{ name: string; value: string; priority: string }> {\n const contextStyle = getComputedStyle(context);\n const pending = [...cssLength.matchAll(/var\\(\\s*(--[\\w-]+)/g)].map(match => match[1]);\n const visited = new Set<string>();\n const previous: Array<{ name: string; value: string; priority: string }> = [];\n\n while (pending.length > 0) {\n const name = pending.shift();\n if (!name || visited.has(name)) continue;\n visited.add(name);\n const value = contextStyle.getPropertyValue(name).trim();\n if (!value) continue;\n previous.push({\n name,\n value: probe.style.getPropertyValue(name),\n priority: probe.style.getPropertyPriority(name),\n });\n probe.style.setProperty(name, value);\n for (const match of value.matchAll(/var\\(\\s*(--[\\w-]+)/g)) pending.push(match[1]);\n }\n\n return previous;\n}\n\nfunction restoreProbeVariables(\n probe: HTMLElement,\n previous: Array<{ name: string; value: string; priority: string }>\n): void {\n for (const { name, value, priority } of previous) {\n if (value) probe.style.setProperty(name, value, priority);\n else probe.style.removeProperty(name);\n }\n}\n\n/** Clear session cache (tests only). */\nexport function clearCssLengthPxCache(): void {\n lengthPxCache.clear();\n}\n\n/**\n * Resolve a CSS length to pixels for layout math.\n * Numbers pass through; `var(--dimension-*)`, `calc(...)`, and `16px` resolve via a hidden probe.\n */\nexport function resolveCssLengthPx(\n value: number | string | undefined,\n fallback: number | string,\n context?: Element\n): number {\n const resolved = value === undefined || value === null || value === '' ? fallback : value;\n if (typeof resolved === 'number') return resolved;\n\n const trimmed = resolved.trim();\n if (!trimmed) return resolveCssLengthPx(fallback, 0, context);\n\n // Component-scoped custom properties inherit from their actual composition\n // boundary, not documentElement where the shared measurement probe lives.\n // Resolve a direct var() from that scope first, then measure the resulting\n // token/calc/px value with the normal cached path.\n const scopedProperty = context ? trimmed.match(/^var\\(\\s*(--[\\w-]+)/)?.[1] : undefined;\n if (context && scopedProperty) {\n const scopedValue = getComputedStyle(context).getPropertyValue(scopedProperty).trim();\n if (scopedValue && scopedValue !== trimmed) {\n return resolveCssLengthPx(scopedValue, fallback, context);\n }\n }\n\n const contextDependent = !!context && trimmed.includes('var(');\n const cached = contextDependent ? undefined : lengthPxCache.get(trimmed);\n if (cached !== undefined) return cached;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n const n = Number(trimmed);\n lengthPxCache.set(trimmed, n);\n return n;\n }\n\n const pxMatch = trimmed.match(/^(-?\\d+(\\.\\d+)?)px$/);\n if (pxMatch) {\n const px = parseFloat(pxMatch[1]);\n lengthPxCache.set(trimmed, px);\n return px;\n }\n\n const cssLength = /^--[\\w-]+$/.test(trimmed) ? `var(${trimmed})` : trimmed;\n\n const probe = getProbeElement();\n if (!probe) {\n return typeof fallback === 'number' ? fallback : 0;\n }\n\n const previousVariables = context ? applyContextVariables(probe, cssLength, context) : [];\n probe.style.width = cssLength;\n const px = probe.getBoundingClientRect().width;\n probe.style.width = '';\n restoreProbeVariables(probe, previousVariables);\n // A stylesheet can finish loading after a custom element's first layout\n // pass (notably in WebKit). Do not permanently cache the probe's temporary\n // zero when the length depends on a custom property; a later call must be\n // able to resolve the now-available token.\n if (!contextDependent && (px !== 0 || !cssLength.includes('var('))) {\n lengthPxCache.set(trimmed, px);\n }\n return px;\n}\n", "const COMPACT_UNITS: { threshold: number; suffix: string }[] = [\n { threshold: 1_000_000_000, suffix: 'b' },\n { threshold: 1_000_000, suffix: 'm' },\n { threshold: 1_000, suffix: 'k' },\n];\n\n/** Compact large numbers for display: 1000 -> \"1k\", 1500 -> \"1.5k\", 110100 -> \"110.1k\", 1000000 -> \"1m\". */\nexport function formatCompactNumber(value: number, locale?: string): string {\n if (locale) {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n compactDisplay: 'short',\n maximumFractionDigits: 1,\n }).format(value);\n }\n const sign = value < 0 ? '-' : '';\n const abs = Math.abs(value);\n if (abs < 1000) return String(value);\n\n for (let i = 0; i < COMPACT_UNITS.length; i++) {\n const unit = COMPACT_UNITS[i];\n if (abs < unit.threshold) continue;\n\n let scaled = Math.round((abs / unit.threshold) * 10) / 10;\n // Carry over, e.g. 999.96k rounds to \"1000k\" \u2014 bump to the next unit instead.\n if (scaled >= 1000 && i > 0) {\n const next = COMPACT_UNITS[i - 1];\n scaled = Math.round((abs / next.threshold) * 10) / 10;\n return `${sign}${scaled}${next.suffix}`;\n }\n return `${sign}${scaled}${unit.suffix}`;\n }\n return String(value);\n}\n", "export type PercentageDecimals = 1 | 2;\n\n/** Format a ratio as a locale-aware percentage with an exact, supported precision. */\nexport function formatPercentage(\n ratio: number,\n decimals: PercentageDecimals = 1,\n locale?: string\n): string {\n const precision = decimals === 2 ? 2 : 1;\n const value = Number.isFinite(ratio) ? ratio : 0;\n\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }).format(value);\n}\n", "import { formatCompactNumber } from './format-compact-number';\n\nexport type MetricTrendDirection = 'up' | 'down';\n\n/**\n * How a change should read to the user. Deliberately separate from direction:\n * a metric can fall and read positive, or move and read neutral, so the arrow\n * and the sentiment are independent.\n */\nexport type MetricTrendTone = 'positive' | 'negative' | 'neutral';\n\n/** Display-ready trend for an overview score or metric. */\nexport interface MetricTrend {\n direction: MetricTrendDirection;\n /** Formatted change, for example `9` or `32%`. */\n value: string;\n tone: MetricTrendTone;\n}\n\nexport interface MetricChange {\n /** Signed difference, current minus previous. */\n delta: number;\n /** Magnitude of the difference. */\n absolute: number;\n /**\n * Magnitude as a share of the previous value, so `0.32` means 32 percent.\n * Zero when the previous value is zero, because the change has no base to\n * measure against and an infinite increase is not reportable.\n */\n ratio: number;\n /** `null` when the values match or either side is missing. */\n direction: MetricTrendDirection | null;\n}\n\nexport interface ResolveMetricTrendOptions {\n /** Lower is better, so a decrease reads positive. Collisions, costs, defects. */\n inverted?: boolean;\n /** Report the change without a positive or negative reading. */\n neutral?: boolean;\n /** Report the change as a share of the previous value rather than a magnitude. */\n display?: 'absolute' | 'percentage';\n locale?: string;\n}\n\nconst NO_CHANGE: MetricChange = { delta: 0, absolute: 0, ratio: 0, direction: null };\n\nfunction isUsable(value: number | null | undefined): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\n/**\n * Compare a metric against its previous period.\n *\n * Reports magnitudes only \u2014 whether a rise is good news is a product decision,\n * so callers pair this with `resolveMetricTrend` or map `direction` themselves.\n */\nexport function computeMetricChange(\n current: number | null | undefined,\n previous: number | null | undefined\n): MetricChange {\n if (!isUsable(current) || !isUsable(previous)) return NO_CHANGE;\n\n // Trim floating-point noise so 0.3 - 0.1 does not report a change of 0.199\u2026\n const delta = Number.parseFloat((current - previous).toFixed(10));\n if (delta === 0) return NO_CHANGE;\n\n const absolute = Math.abs(delta);\n const ratio = previous === 0 ? 0 : Math.abs(delta / previous);\n\n return { delta, absolute, ratio, direction: delta > 0 ? 'up' : 'down' };\n}\n\n/**\n * Build a display-ready trend, or `null` when there is nothing to report so the\n * caller can omit the trend entirely rather than render a zero.\n *\n * Percentages are formatted without decimals to match the product's overview\n * bar; `formatPercentage` is not used because it requires one or two decimals.\n */\nexport function resolveMetricTrend(\n current: number | null | undefined,\n previous: number | null | undefined,\n options: ResolveMetricTrendOptions = {}\n): MetricTrend | null {\n const { inverted = false, neutral = false, display = 'absolute', locale } = options;\n const change = computeMetricChange(current, previous);\n if (!change.direction) return null;\n\n // A rise reads positive by default and negative when lower is better.\n const rose = change.direction === 'up';\n const tone: MetricTrendTone = neutral ? 'neutral' : rose !== inverted ? 'positive' : 'negative';\n\n const value =\n display === 'percentage'\n ? new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 0 }).format(\n change.ratio\n )\n : formatCompactNumber(change.absolute, locale);\n\n return { direction: change.direction, value, tone };\n}\n", "/**\n * Binary-searches the longest prefix of `text` (plus an ellipsis) that fits within `maxWidth`\n * px when rendered by `el`, using the SVG `getComputedTextLength()` API for exact measurement \u2014\n * `text-overflow: ellipsis` doesn't apply to raw SVG `<text>` nodes.\n *\n * Mutates `el.textContent` during measurement; the caller's next render (driven by the\n * returned string going into state) overwrites it with the final value.\n */\nexport function truncateSvgTextToWidth(el: SVGTextElement, text: string, maxWidth: number): string {\n el.textContent = text;\n if (maxWidth <= 0 || el.getComputedTextLength() <= maxWidth) return text;\n\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = Math.ceil((lo + hi) / 2);\n el.textContent = `${text.slice(0, mid)}\u2026`;\n if (el.getComputedTextLength() <= maxWidth) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n return lo > 0 ? `${text.slice(0, lo)}\u2026` : '\u2026';\n}\n", "/** Subpixel rounding can make overflow look equal at 0\u20131px; ignore that noise. */\nconst TRUNCATION_EPSILON_PX = 1;\n\n/**\n * Whether a laid-out element is visually truncated.\n * Prefers `ds-text`'s inner semantic node when present so host flex layout\n * does not hide horizontal or line-clamp overflow.\n */\nexport function isElementTruncated(element: HTMLElement): boolean {\n const target = element.querySelector<HTMLElement>('.ds-text__element') ?? element;\n return (\n target.scrollWidth - target.clientWidth > TRUNCATION_EPSILON_PX ||\n target.scrollHeight - target.clientHeight > TRUNCATION_EPSILON_PX\n );\n}\n", "/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */\nexport function parseCssTimeMs(value: string, fallback: number): number {\n const firstToken = value.trim().split(/\\s+/)[0] ?? '';\n const num = parseFloat(firstToken);\n if (Number.isNaN(num)) return fallback;\n if (/ms\\s*$/.test(firstToken)) return num;\n if (/s\\s*$/.test(firstToken)) return num * 1000;\n return num;\n}\n\nfunction extractCssCustomProp(ref: string): string | null {\n const varMatch = ref.match(/^var\\(\\s*(--[^),]+)/);\n if (varMatch) return varMatch[1].trim();\n if (ref.startsWith('--')) return ref.trim();\n return null;\n}\n\nfunction readTokenTimeMs(token: string, fallback: number): number {\n if (typeof document === 'undefined') return fallback;\n\n const prop = extractCssCustomProp(token);\n if (!prop) return parseCssTimeMs(token, fallback);\n\n const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();\n return parseCssTimeMs(raw, fallback);\n}\n\n/**\n * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.\n * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.\n */\nexport function resolveCssTimeMs(\n value: number | string | undefined,\n fallbackToken: string\n): number {\n if (typeof value === 'number') return value;\n\n const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;\n const prop = extractCssCustomProp(token);\n\n if (prop) {\n return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n }\n\n return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n}\n\n/** Whether the user has requested reduced non-essential motion. */\nexport function prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n}\n\n/**\n * Resolve an animation-coupled duration. Returns zero under reduced motion so\n * JS cleanup stays synchronized with CSS that removes the corresponding motion.\n */\nexport function resolveMotionTimeMs(\n value: number | string | undefined,\n fallbackToken: string\n): number {\n return prefersReducedMotion() ? 0 : resolveCssTimeMs(value, fallbackToken);\n}\n", "/** CSS custom property for scroll-edge fade depth (dimension token or length). */\nexport const SCROLL_EDGE_FADE_SIZE_VAR = '--ds-scroll-edge-fade-size';\n\nexport const SCROLL_EDGE_FADE_DEFAULT_SIZE = 'var(--dimension-size-600)';\n\nexport type ScrollEdgeFadeEdge = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ScrollEdgeFadeSizeToken =\n | 'size-000'\n | 'size-050'\n | 'size-075'\n | 'size-100'\n | 'size-150'\n | 'size-200'\n | 'size-250'\n | 'size-300'\n | 'size-400'\n | 'size-500'\n | 'size-600'\n | 'size-800';\n\nexport type ScrollEdgeFadeSize = ScrollEdgeFadeSizeToken | (string & {});\n\nconst SIZE_VALUE: Record<ScrollEdgeFadeSizeToken, string> = {\n 'size-000': 'var(--dimension-size-000)',\n 'size-050': 'var(--dimension-size-050)',\n 'size-075': 'var(--dimension-size-075)',\n 'size-100': 'var(--dimension-size-100)',\n 'size-150': 'var(--dimension-size-150)',\n 'size-200': 'var(--dimension-size-200)',\n 'size-250': 'var(--dimension-size-250)',\n 'size-300': 'var(--dimension-size-300)',\n 'size-400': 'var(--dimension-size-400)',\n 'size-500': 'var(--dimension-size-500)',\n 'size-600': 'var(--dimension-size-600)',\n 'size-800': 'var(--dimension-size-800)',\n};\n\nconst SIZE_REF = `var(${SCROLL_EDGE_FADE_SIZE_VAR}, ${SCROLL_EDGE_FADE_DEFAULT_SIZE})`;\n\nexport interface ScrollEdgeFadeOptions {\n /** One or more edges to fade. */\n edges: ScrollEdgeFadeEdge | ScrollEdgeFadeEdge[];\n /**\n * Reveal and hide configured fades from the container's own scroll position.\n * Uses CSS scroll-driven animations with a static-fade fallback; no listener required.\n */\n scrollAware?: boolean;\n /**\n * When true, removes the complete mask. Pass a map to remove only configured\n * edges that are flush when scroll state already lives in JavaScript.\n */\n atEnd?: boolean | Partial<Record<ScrollEdgeFadeEdge, boolean>>;\n /** Force the mask off regardless of scroll position (`ds-fade` `visible={false}`). */\n hidden?: boolean;\n}\n\n/** Resolve a dimension size token name or raw CSS length for `--ds-scroll-edge-fade-size`. */\nexport function resolveScrollEdgeFadeSize(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): string {\n if (height) return height;\n return Object.prototype.hasOwnProperty.call(SIZE_VALUE, size)\n ? SIZE_VALUE[size as ScrollEdgeFadeSizeToken]\n : size;\n}\n\n/** Inline style map setting fade depth on a scroll container. */\nexport function scrollEdgeFadeSizeStyle(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): Record<string, string> {\n return {\n [SCROLL_EDGE_FADE_SIZE_VAR]: resolveScrollEdgeFadeSize(size, height),\n };\n}\n\n/**\n * Alpha mask for a scroll container edge \u2014 content fades to transparent so\n * textured backgrounds (shell gradients, images) show through.\n */\nexport function scrollEdgeFadeMaskImage(edge: ScrollEdgeFadeEdge): string {\n switch (edge) {\n case 'top':\n return `linear-gradient(to bottom, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'bottom':\n return `linear-gradient(to bottom, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n case 'left':\n return `linear-gradient(to right, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'right':\n return `linear-gradient(to right, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n }\n}\n\n/** Inline style map for a masked scroll region (single edge). */\nexport function scrollEdgeFadeMaskStyle(\n edge: ScrollEdgeFadeEdge,\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): Record<string, string> {\n const mask = scrollEdgeFadeMaskImage(edge);\n return {\n ...scrollEdgeFadeSizeStyle(size, height),\n WebkitMaskImage: mask,\n maskImage: mask,\n WebkitMaskSize: '100% 100%',\n maskSize: '100% 100%',\n };\n}\n\n/** Class map for `scroll-edge-fade` modifiers \u2014 pair with `scroll-edge-fade.css`. */\nexport function scrollEdgeFadeClassMap(opts: ScrollEdgeFadeOptions): Record<string, boolean> {\n const edges = Array.isArray(opts.edges) ? opts.edges : [opts.edges];\n const classes: Record<string, boolean> = {\n 'scroll-edge-fade': true,\n 'scroll-edge-fade--scroll-aware': opts.scrollAware === true,\n 'scroll-edge-fade--hidden': opts.hidden === true,\n };\n\n for (const edge of edges) {\n classes[`scroll-edge-fade--${edge}`] = true;\n }\n\n const { atEnd } = opts;\n if (atEnd === true) {\n classes['scroll-edge-fade--at-end'] = true;\n } else if (atEnd && typeof atEnd === 'object') {\n for (const edge of edges) {\n if (atEnd[edge]) {\n classes[`scroll-edge-fade--${edge}-at-edge`] = true;\n }\n }\n }\n\n return classes;\n}\n\n/** Whether a scroll container is flush with the given edge (within `threshold` px). */\nexport function isScrollAtEdge(el: HTMLElement, edge: ScrollEdgeFadeEdge, threshold = 2): boolean {\n switch (edge) {\n case 'top':\n return el.scrollTop <= threshold;\n case 'bottom':\n return el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n case 'left':\n return el.scrollLeft <= threshold;\n case 'right':\n return el.scrollWidth - el.scrollLeft - el.clientWidth <= threshold;\n }\n}\n", "import {\n dimensionIconographyMd,\n dimensionIconographySm,\n dimensionIconographyXs,\n dimensionMenuWidthLg,\n dimensionMenuWidthXs,\n dimensionPanelWidth2xs,\n dimensionPanelWidthLg,\n dimensionPanelWidthMd,\n dimensionRadius025,\n dimensionSize200,\n dimensionSize300,\n dimensionSize400,\n dimensionSize600,\n dimensionSize800,\n dimensionSpace100,\n dimensionSpace050,\n dimensionSpace200,\n dimensionSpace300,\n dimensionSpace400,\n dimensionStrokeWidth012,\n dimensionStrokeWidth025,\n dimensionStrokeWidth037,\n typographyLineheightLg,\n typographyLineheightMd,\n typographyLineheightSm,\n typographyLineheightXl,\n typographyLineheightXs,\n effectAnimationDelayLong2,\n effectAnimationDelayMedium1,\n effectAnimationDelayMedium3,\n effectAnimationDelayInstant,\n effectAnimationDelayShort2,\n effectAnimationDurationMedium1,\n effectAnimationDurationShort3,\n effectMotionShort2,\n effectMotionShort3,\n} from '@ds-mo/tokens/ts';\n\n/** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */\nexport const TOKEN_DEFAULTS = {\n space050: dimensionSpace050,\n space100: dimensionSpace100,\n space200: dimensionSpace200,\n space300: dimensionSpace300,\n space400: dimensionSpace400,\n radius025: dimensionRadius025,\n strokeWidth012: dimensionStrokeWidth012,\n strokeWidth025: dimensionStrokeWidth025,\n strokeWidth037: dimensionStrokeWidth037,\n size200: dimensionSize200,\n size300: dimensionSize300,\n size400: dimensionSize400,\n size600: dimensionSize600,\n size800: dimensionSize800,\n iconographyMd: dimensionIconographyMd,\n iconographySm: dimensionIconographySm,\n iconographyXs: dimensionIconographyXs,\n panelWidth2xs: dimensionPanelWidth2xs,\n panelWidthMd: dimensionPanelWidthMd,\n panelWidthLg: dimensionPanelWidthLg,\n menuWidthXs: dimensionMenuWidthXs,\n menuWidthLg: dimensionMenuWidthLg,\n lineheightLg: typographyLineheightLg,\n lineheightMd: typographyLineheightMd,\n lineheightSm: typographyLineheightSm,\n lineheightXl: typographyLineheightXl,\n lineheightXs: typographyLineheightXs,\n motionShort2: effectMotionShort2,\n motionShort3: effectMotionShort3,\n animationDurationShort3: effectAnimationDurationShort3,\n animationDurationMedium1: effectAnimationDurationMedium1,\n animationDelayInstant: effectAnimationDelayInstant,\n animationDelayMedium1: effectAnimationDelayMedium1,\n animationDelayMedium3: effectAnimationDelayMedium3,\n animationDelayShort2: effectAnimationDelayShort2,\n animationDelayLong2: effectAnimationDelayLong2,\n /** Unmeasured menu height fallback: 20\u00D7 base (160px at default scale). */\n menuFallbackHeight: 'calc(var(--dimension-size-base) * 20)',\n /** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */\n tooltipFallbackWidth: 'calc(var(--dimension-size-800) + var(--dimension-size-200))',\n /** Fill-mode donut diameter floor: 16\u00D7 size-base (128px). */\n donutFillMin: 'calc(var(--dimension-size-base) * 16)',\n /** Fill-mode donut diameter ceiling: 24\u00D7 size-base (192px). */\n donutFillMax: 'calc(var(--dimension-size-base) * 24)',\n} as const;\n\nexport type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;\n\n/** Valid CSS length strings for overlay offset props \u2014 bind on `sideOffset` / `alignOffset` in hosts. */\nexport const TOKEN_CSS_LENGTHS = {\n space050: `var(${dimensionSpace050})`,\n space200: `var(${dimensionSpace200})`,\n menuWidthXs: `var(${dimensionMenuWidthXs})`,\n menuWidthLg: `var(${dimensionMenuWidthLg})`,\n} as const;\n", "/**\n * Shared \"required field\" validity contract for form-associated custom\n * elements (Checkbox, Radio, Switch, Input, Select, \u2026).\n *\n * Each control computes its own `missing` condition (what counts as empty\n * differs: unchecked, no value, no selection, \u2026) and its own form value, then\n * calls `setRequiredValidity` instead of hand-rolling the `setValidity` call\n * and the default message string.\n *\n * @see AGENTS.md \u2014 \"Required-field validity\"\n */\n\nexport const DEFAULT_REQUIRED_MESSAGE = 'This field is required.';\n\n/** Sets or clears the `valueMissing` validity flag on a form-associated element. */\nexport function setRequiredValidity(\n internals: ElementInternals,\n missing: boolean,\n message: string\n): void {\n internals.setValidity(missing ? { valueMissing: true } : {}, missing ? message : '');\n}\n", "export type FormControlState = File | FormData | string | null;\n\nexport interface SetFormControlValueOptions {\n inactive?: boolean;\n state?: FormControlState;\n}\n\nexport interface SetRepeatedFormControlValueOptions {\n inactive?: boolean;\n state?: FormControlState;\n}\n\n/**\n * Set one form-associated value while consistently omitting inactive controls.\n * Pass `state` only when restoration differs from the submitted value.\n */\nexport function setFormControlValue(\n internals: ElementInternals,\n value: File | string | null,\n options: SetFormControlValueOptions = {}\n): void {\n const submission = options.inactive ? null : value;\n if (options.state === undefined) {\n internals.setFormValue(submission);\n return;\n }\n internals.setFormValue(submission, options.state);\n}\n\n/**\n * Submit repeated values under one field name and preserve a serialized array\n * for browser form-state restoration.\n */\nexport function setRepeatedFormControlValue(\n internals: ElementInternals,\n name: string | null | undefined,\n values: readonly (number | string)[],\n options: SetRepeatedFormControlValueOptions = {}\n): void {\n if (options.inactive || !name || values.length === 0) {\n internals.setFormValue(null);\n return;\n }\n\n const data = new FormData();\n values.forEach(value => data.append(name, String(value)));\n internals.setFormValue(data, options.state ?? JSON.stringify(values));\n}\n\nexport function restoreStringFormState(state: FormControlState, fallback: string = ''): string {\n return typeof state === 'string' ? state : fallback;\n}\n\nexport function restoreStringArrayFormState(state: FormControlState): string[] {\n if (typeof state !== 'string') return [];\n try {\n const restored: unknown = JSON.parse(state);\n return Array.isArray(restored)\n ? restored.filter((value): value is string => typeof value === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nexport function restoreNumberArrayFormState(\n state: FormControlState,\n maximumValues?: number\n): number[] {\n if (typeof state !== 'string') return [];\n try {\n const restored: unknown = JSON.parse(state);\n if (!Array.isArray(restored)) return [];\n const values = restored\n .map(value => (typeof value === 'number' ? value : Number(value)))\n .filter(value => Number.isFinite(value));\n return maximumValues === undefined ? values : values.slice(0, maximumValues);\n } catch {\n return [];\n }\n}\n", "export type SafeUrlProtocol = 'blob:' | 'http:' | 'https:' | 'mailto:';\n\nexport interface ResolveSafeUrlOptions {\n protocols?: readonly SafeUrlProtocol[];\n baseUrl?: string | URL;\n}\n\nconst DEFAULT_PROTOCOLS: readonly SafeUrlProtocol[] = ['http:', 'https:'];\n\n/**\n * Resolve a consumer-authored URL only when its protocol is explicitly allowed.\n * Relative URLs use the current document base in browser rendering; server-side\n * callers can provide `baseUrl` when they intentionally support relative input.\n */\nexport function resolveSafeUrl(\n value: string | null | undefined,\n options: ResolveSafeUrlOptions = {}\n): string | undefined {\n const candidate = value?.trim();\n if (!candidate) return undefined;\n\n const baseUrl =\n options.baseUrl ?? (typeof document === 'undefined' ? undefined : document.baseURI);\n\n try {\n const url = baseUrl === undefined ? new URL(candidate) : new URL(candidate, baseUrl);\n const protocols = options.protocols ?? DEFAULT_PROTOCOLS;\n return protocols.includes(url.protocol as SafeUrlProtocol) ? url.href : undefined;\n } catch {\n return undefined;\n }\n}\n", "/** Shared width fit for interactive controls (buttons, select, \u2026). */\nexport type ControlWidth = 'hug' | 'fill';\n\n/** Host / control class map for `width=\"hug\" | \"fill\"`. */\nexport function controlWidthClass(width: ControlWidth): Record<string, boolean> {\n return {\n 'ds-control-width--hug': width === 'hug',\n 'ds-control-width--fill': width === 'fill',\n };\n}\n", "export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can\u2019t do this\n // for a comparator (except for specific, known comparators) because we can\u2019t\n // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n", "export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n", "export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n", "export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n", "export default function identity(x) {\n return x;\n}\n", "var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n", "export default function constant(x) {\n return () => x;\n}\n", "const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n", "import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n", "import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain\u2019s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don\u2019t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n", "import { bin as d3Bin, deviation, extent, quantileSorted, ticks } from 'd3-array';\nimport type { CurveFactory } from 'd3-shape';\n\nexport type ChartValue = string | number | Date;\nexport type ChartKey = string | number;\nexport type ChartDataIntent = 'brand' | 'caution' | 'negative' | 'neutral' | 'positive' | 'warning';\n\nexport type ChartChannel<TDatum, TValue> =\n | Extract<keyof TDatum, string>\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\nexport type ChartVisual<TDatum, TValue> =\n | TValue\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\n/** Structural boundary accepted by the chart compiler for native D3 scales. */\nexport type ChartScale = ((value: ChartValue) => unknown) & {\n copy?: () => ChartScale;\n domain: (...values: unknown[]) => unknown;\n range: (...values: unknown[]) => unknown;\n bandwidth?: () => number;\n ticks?: (count?: number) => ChartValue[];\n tickFormat?: (count?: number) => (value: ChartValue) => string;\n nice?: (count?: number) => unknown;\n};\n\n/** A configured D3 scale or a zero-argument D3 scale factory. */\nexport type ChartScaleSource = ChartScale | (() => unknown);\n\nexport interface ChartTickOptions {\n count?: number;\n values?: readonly ChartValue[];\n format?: (value: ChartValue, locale: string) => string;\n /** Minimum measured gap between adjacent tick labels, in CSS pixels. */\n spacing?: number;\n /** Length of the tick stub extending away from the plot, in CSS pixels. */\n size?: number;\n /** Gap between the end of a tick stub and its label, in CSS pixels. */\n padding?: number;\n /** Rotation in degrees. Negative values rotate counter-clockwise. */\n rotate?: number;\n}\n\nexport interface ChartAxisPresentation {\n label?: string;\n /** Render the axis baseline. Defaults to true. */\n line?: boolean;\n ticks?: ChartTickOptions;\n}\n\nexport interface ChartAxisOptions {\n scale: ChartScaleSource;\n nice?: boolean;\n grid?: boolean;\n axis?: false | ChartAxisPresentation;\n}\n\nexport interface ChartMargin {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport type ChartFocusMode = 'none' | 'nearest' | 'nearest-x' | 'nearest-y' | 'group-x' | 'group-y';\n\nexport interface ChartPoint<TDatum = unknown> {\n key: ChartKey;\n sceneKey: string;\n markId: string;\n datum: TDatum;\n datumIndex: number;\n groupValue?: ChartValue;\n groupLabel?: string;\n xValue: ChartValue;\n yValue: ChartValue;\n /** Primary semantic value for polar, heatmap, and distribution marks. */\n value?: ChartValue;\n angleValue?: ChartValue;\n radiusValue?: ChartValue;\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartTooltipItem {\n label: string;\n value: string;\n color?: string;\n}\n\nexport interface ChartTooltipContext<TDatum = unknown> {\n locale: string;\n primary: ChartPoint<TDatum>;\n points: readonly ChartPoint<TDatum>[];\n}\n\nexport interface ChartTooltipOptions<TDatum = unknown> {\n format?: (point: ChartPoint<TDatum>, locale: string) => string;\n formatGroupHeading?: (points: readonly ChartPoint<TDatum>[], locale: string) => string;\n formatGroupItem?: (point: ChartPoint<TDatum>, locale: string) => ChartTooltipItem;\n}\n\nexport type ChartTooltip<TDatum = unknown> = boolean | ChartTooltipOptions<TDatum>;\n\nexport interface ChartColorOptions {\n domain?: readonly ChartValue[];\n range?: readonly string[];\n}\n\nexport interface ChartBuildContext {\n width: number;\n height: number;\n}\n\nexport interface ChartCartesianCoordinate {\n type?: 'cartesian';\n}\n\nexport interface ChartPolarCoordinate {\n type: 'polar';\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n /** Default inner radius as a fraction of the available radius. */\n innerRadius?: number;\n /** Outer radius as a fraction of the available radius. */\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n}\n\nexport type ChartCoordinate = ChartCartesianCoordinate | ChartPolarCoordinate;\n\nexport interface ChartPolarAxisOptions {\n domain?: readonly ChartValue[];\n label?: string;\n ticks?: ChartTickOptions;\n grid?: boolean;\n}\n\nexport interface ChartCenterContent {\n value?: string;\n caption?: string;\n}\n\nexport interface ChartCenterOptions extends ChartCenterContent {\n /** Optional focused content. Authored content remains the default. */\n focused?: (point: ChartPoint, locale: string) => ChartCenterContent;\n}\n\nexport type ChartMarkKind =\n | 'polar'\n | 'line-y'\n | 'area-y'\n | 'bar-x'\n | 'bar-y'\n | 'box-y'\n | 'dot'\n | 'rule-x'\n | 'rule-y'\n | 'band-x'\n | 'band-y'\n | 'rect'\n | 'cell'\n | 'text'\n | 'arc'\n | 'radial-line'\n | 'radial-area'\n | 'radial-dot';\n\nexport interface ChartMark<TDatum = unknown> {\n kind: ChartMarkKind;\n data: readonly TDatum[];\n options: ChartMarkOptions<TDatum>;\n}\n\nexport interface ChartPolarContainerOptions {\n id?: string;\n marks: readonly ChartMark[];\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n innerRadius?: number;\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n center?: ChartCenterOptions;\n}\n\nexport interface ChartBaseMarkOptions<TDatum> {\n id?: string;\n /** Exclude decorative layers from semantic focus while retaining rendering. */\n interactive?: boolean;\n key?: ChartChannel<TDatum, ChartKey>;\n z?: ChartChannel<TDatum, ChartValue | null | undefined>;\n color?: ChartChannel<TDatum, ChartValue | null | undefined>;\n value?: ChartChannel<TDatum, ChartValue | null | undefined>;\n fill?: ChartVisual<TDatum, string>;\n stroke?: ChartVisual<TDatum, string>;\n opacity?: ChartVisual<TDatum, number>;\n fillOpacity?: ChartVisual<TDatum, number>;\n strokeOpacity?: ChartVisual<TDatum, number>;\n strokeWidth?: ChartVisual<TDatum, number | string>;\n strokeDasharray?: ChartVisual<TDatum, string>;\n}\n\nexport interface ChartLineYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport interface ChartAreaYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport type ChartBarLayout = 'single' | 'grouped' | 'stacked';\n\nexport interface ChartBarOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n layout?: ChartBarLayout;\n inset?: ChartVisual<TDatum, number>;\n radius?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartBoxYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n /** Tukey whisker multiplier. */\n whisker?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartDotOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartRuleOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n}\n\nexport interface ChartBandOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n}\n\nexport interface ChartRectOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n radius?: ChartVisual<TDatum, number | string>;\n inset?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartCellOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n intensity?: ChartChannel<TDatum, number | null | undefined>;\n intent?: ChartDataIntent;\n minimumOpacity?: number;\n maximumOpacity?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartTextOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n text?: ChartChannel<TDatum, string | number | null | undefined>;\n fontFamily?: ChartVisual<TDatum, string>;\n fontSize?: ChartVisual<TDatum, number | string>;\n fontWeight?: ChartVisual<TDatum, number | string>;\n textAnchor?: ChartVisual<TDatum, 'start' | 'middle' | 'end'>;\n dx?: ChartVisual<TDatum, number>;\n dy?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartArcOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n theta1?: ChartChannel<TDatum, number | null | undefined>;\n theta2?: ChartChannel<TDatum, number | null | undefined>;\n innerRadius?: ChartVisual<TDatum, number>;\n outerRadius?: ChartVisual<TDatum, number>;\n cornerRadius?: ChartVisual<TDatum, number>;\n padAngle?: ChartVisual<TDatum, number>;\n label?: ChartChannel<TDatum, string | null | undefined>;\n}\n\nexport interface ChartRadialOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n angle?: ChartChannel<TDatum, ChartValue | null | undefined>;\n radius?: ChartChannel<TDatum, number | null | undefined>;\n radius1?: ChartChannel<TDatum, number | null | undefined>;\n radius2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport type ChartMarkOptions<TDatum> =\n | ChartLineYOptions<TDatum>\n | ChartAreaYOptions<TDatum>\n | ChartBarOptions<TDatum>\n | ChartBoxYOptions<TDatum>\n | ChartDotOptions<TDatum>\n | ChartRuleOptions<TDatum>\n | ChartBandOptions<TDatum>\n | ChartRectOptions<TDatum>\n | ChartCellOptions<TDatum>\n | ChartTextOptions<TDatum>\n | ChartArcOptions<TDatum>\n | ChartRadialOptions<TDatum>;\n\nexport interface ChartSpec<TDatum = unknown> {\n marks: readonly ChartMark<TDatum>[] | readonly ChartMark<unknown>[];\n coordinate?: ChartCoordinate;\n x?: ChartAxisOptions;\n y?: ChartAxisOptions;\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n center?: ChartCenterOptions;\n margin?: number | ChartMargin;\n guides?: boolean;\n /** Clip graphical marks to the solved plot rectangle. Defaults to true. */\n clip?: boolean;\n color?: ChartColorOptions;\n focus?: ChartFocusMode;\n tooltip?: ChartTooltip<TDatum>;\n maxFocusDistance?: number;\n}\n\nexport type ChartSpecBuilder<TDatum = unknown> = (context: ChartBuildContext) => ChartSpec<TDatum>;\n\nexport interface ChartDefinition<TDatum = unknown> {\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>;\n}\n\nexport interface NormalizedStackDatum<TDatum> {\n data: TDatum;\n group: ChartKey;\n series: ChartKey;\n value: number;\n proportion: number;\n}\n\nexport interface NormalizeStackOptions<TDatum> {\n group: ChartChannel<TDatum, ChartKey>;\n series: ChartChannel<TDatum, ChartKey>;\n value: ChartChannel<TDatum, number>;\n}\n\nexport interface ChartPieDatum<TDatum> {\n data: TDatum;\n index: number;\n key: ChartKey;\n label: string;\n value: number;\n theta1: number;\n theta2: number;\n}\n\nexport interface ChartPieOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n key?: ChartChannel<TDatum, ChartKey>;\n label?: ChartChannel<TDatum, string>;\n sort?: (a: TDatum, b: TDatum) => number;\n}\n\nexport interface ChartBinDatum<TDatum> {\n key: string;\n x1: number;\n x2: number;\n x: number;\n count: number;\n cumulative: number;\n rows: readonly TDatum[];\n}\n\nexport interface ChartBinOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n thresholds?: number | readonly number[];\n}\n\nexport interface ChartDensityDatum {\n key: string;\n x: number;\n density: number;\n}\n\nexport interface ChartDensityOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n samples?: number;\n bandwidth?: number;\n}\n\nexport function defineChart<TDatum>(\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>\n): ChartDefinition<TDatum> {\n return { chart };\n}\n\nfunction createMark<TDatum, TOptions extends ChartMarkOptions<TDatum>>(\n kind: ChartMarkKind,\n data: readonly TDatum[],\n options: TOptions\n): ChartMark<TDatum> {\n return { kind, data, options };\n}\n\n/** Compose polar marks and guides inside the shared chart scene. */\nexport function polar(options: ChartPolarContainerOptions): ChartMark {\n return { kind: 'polar', data: [], options: options as unknown as ChartMarkOptions<unknown> };\n}\n\nconst identity = <TValue>(value: TValue): TValue => value;\n\nexport function lineY<TDatum>(\n data: readonly TDatum[],\n options: ChartLineYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('line-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function areaY<TDatum>(\n data: readonly TDatum[],\n options: ChartAreaYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('area-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function barY<TDatum>(\n data: readonly TDatum[],\n options: ChartBarOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('bar-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function barX<TDatum>(\n data: readonly TDatum[],\n options: ChartBarOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('bar-x', data, {\n x: options.x ?? (identity as ChartChannel<TDatum, number>),\n y: options.y ?? ((_, index) => index),\n ...options,\n });\n}\n\nexport function boxY<TDatum>(\n data: readonly TDatum[],\n options: ChartBoxYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('box-y', data, {\n x: options.x ?? (() => 'distribution'),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function dot<TDatum>(\n data: readonly TDatum[],\n options: ChartDotOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('dot', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function ruleX<TDatum>(\n data: readonly TDatum[],\n options: ChartRuleOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('rule-x', data, {\n x: options.x ?? (identity as ChartChannel<TDatum, ChartValue>),\n ...options,\n });\n}\n\nexport function ruleY<TDatum>(\n data: readonly TDatum[],\n options: ChartRuleOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('rule-y', data, {\n y: options.y ?? (identity as ChartChannel<TDatum, ChartValue>),\n ...options,\n });\n}\n\nexport function bandX<TDatum>(\n data: readonly TDatum[],\n options: ChartBandOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('band-x', data, options);\n}\n\nexport function bandY<TDatum>(\n data: readonly TDatum[],\n options: ChartBandOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('band-y', data, options);\n}\n\nexport function rect<TDatum>(\n data: readonly TDatum[],\n options: ChartRectOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('rect', data, options);\n}\n\nexport function cell<TDatum>(\n data: readonly TDatum[],\n options: ChartCellOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('cell', data, options);\n}\n\nexport function textMark<TDatum>(\n data: readonly TDatum[],\n options: ChartTextOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('text', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? ((_, index) => index),\n text: options.text ?? (identity as ChartChannel<TDatum, string>),\n ...options,\n });\n}\n\nexport function arcMark<TDatum>(\n data: readonly TDatum[],\n options: ChartArcOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('arc', data, {\n theta1: options.theta1 ?? ('theta1' as ChartChannel<TDatum, number>),\n theta2: options.theta2 ?? ('theta2' as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialLine<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-line', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialArea<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-area', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialDot<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-dot', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function channelValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n channel: ChartChannel<TDatum, TValue> | undefined\n): TValue | undefined {\n if (channel === undefined) return undefined;\n if (typeof channel === 'function') return channel(datum, index, data);\n if (datum == null || typeof datum !== 'object') return undefined;\n return (datum as Record<string, TValue>)[channel];\n}\n\nexport function visualValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n value: ChartVisual<TDatum, TValue> | undefined,\n fallback: TValue\n): TValue {\n return typeof value === 'function'\n ? (value as (datum: TDatum, index: number, data: readonly TDatum[]) => TValue)(\n datum,\n index,\n data\n )\n : (value ?? fallback);\n}\n\nexport function normalizeStack<TDatum>(\n data: readonly TDatum[],\n options: NormalizeStackOptions<TDatum>\n): NormalizedStackDatum<TDatum>[] {\n const rows = data.map((datum, index) => {\n const group = channelValue(datum, index, data, options.group);\n const series = channelValue(datum, index, data, options.series);\n const value = channelValue(datum, index, data, options.value);\n if (group === undefined || series === undefined)\n throw new TypeError('normalizeStack requires a group and series key for every row.');\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)\n throw new RangeError('normalizeStack values must be finite, non-negative numbers.');\n return { data: datum, group, series, value };\n });\n const totals = new Map<string, number>();\n rows.forEach(row =>\n totals.set(chartValueKey(row.group), (totals.get(chartValueKey(row.group)) ?? 0) + row.value)\n );\n return rows.map(row => ({\n ...row,\n proportion:\n (totals.get(chartValueKey(row.group)) ?? 0) > 0\n ? row.value / (totals.get(chartValueKey(row.group)) as number)\n : 0,\n }));\n}\n\nexport function pieLayout<TDatum>(\n data: readonly TDatum[],\n options: ChartPieOptions<TDatum>\n): ChartPieDatum<TDatum>[] {\n const ordered = data.map((datum, index) => ({ datum, index }));\n if (options.sort) ordered.sort((a, b) => options.sort?.(a.datum, b.datum) ?? 0);\n const values = ordered.map(({ datum, index }) => {\n const value = channelValue(datum, index, data, options.value);\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;\n });\n const total = values.reduce((sum, value) => sum + value, 0);\n let position = 0;\n return ordered.flatMap(({ datum, index }, orderedIndex) => {\n const value = values[orderedIndex] ?? 0;\n if (!(value > 0) || !(total > 0)) return [];\n const theta1 = position;\n position += value / total;\n const key = channelValue(datum, index, data, options.key) ?? index;\n const label = channelValue(datum, index, data, options.label) ?? String(key);\n return [{ data: datum, index, key, label, value, theta1, theta2: position }];\n });\n}\n\nexport function binX<TDatum>(\n data: readonly TDatum[],\n options: ChartBinOptions<TDatum>\n): ChartBinDatum<TDatum>[] {\n const generator = d3Bin<TDatum, number>().value(\n (datum, index, rows) =>\n channelValue(datum, index, Array.from(rows), options.value) ?? Number.NaN\n );\n if (typeof options.thresholds === 'number') generator.thresholds(options.thresholds);\n else if (options.thresholds !== undefined) generator.thresholds([...options.thresholds]);\n const bins = generator(data as TDatum[]);\n let cumulative = 0;\n return bins.flatMap(bin => {\n const x1 = bin.x0;\n const x2 = bin.x1;\n if (x1 === undefined || x2 === undefined) return [];\n cumulative += bin.length;\n return [\n {\n key: `bin:${x1}:${x2}`,\n x1,\n x2,\n x: (x1 + x2) / 2,\n count: bin.length,\n cumulative,\n rows: [...bin],\n },\n ];\n });\n}\n\nexport function cumulativeBins<TDatum>(\n bins: readonly ChartBinDatum<TDatum>[]\n): ChartBinDatum<TDatum>[] {\n let cumulative = 0;\n return bins.map(bin => ({ ...bin, cumulative: (cumulative += bin.count) }));\n}\n\nexport function densityX<TDatum>(\n data: readonly TDatum[],\n options: ChartDensityOptions<TDatum>\n): ChartDensityDatum[] {\n const values = data\n .map((datum, index) => channelValue(datum, index, data, options.value))\n .filter((value): value is number => typeof value === 'number' && Number.isFinite(value))\n .sort((a, b) => a - b);\n if (values.length === 0) return [];\n const [minimum = 0, maximum = minimum + 1] = extent(values);\n const span = Math.max(Number.EPSILON, maximum - minimum);\n const sampleCount = Math.max(8, options.samples ?? 48);\n const sampleValues = ticks(minimum, maximum, sampleCount);\n const sigma = deviation(values) ?? span / 6;\n const bandwidth = Math.max(\n Number.EPSILON,\n options.bandwidth ?? 1.06 * sigma * Math.pow(values.length, -0.2)\n );\n const normalizer = 1 / (Math.sqrt(2 * Math.PI) * bandwidth * values.length);\n return sampleValues.map(x => ({\n key: `density:${x}`,\n x,\n density:\n values.reduce((sum, value) => {\n const u = (x - value) / bandwidth;\n return sum + Math.exp(-0.5 * u * u);\n }, 0) * normalizer,\n }));\n}\n\nexport function boxStatistics(values: readonly number[], whisker = 1.5) {\n const sorted = values.filter(Number.isFinite).sort((a, b) => a - b);\n if (sorted.length === 0) return undefined;\n const q1 = quantileSorted(sorted, 0.25) as number;\n const median = quantileSorted(sorted, 0.5) as number;\n const q3 = quantileSorted(sorted, 0.75) as number;\n const iqr = q3 - q1;\n const lowerFence = q1 - whisker * iqr;\n const upperFence = q3 + whisker * iqr;\n const lower = sorted.find(value => value >= lowerFence) ?? sorted[0];\n const upper =\n [...sorted].reverse().find(value => value <= upperFence) ?? sorted[sorted.length - 1];\n return {\n q1,\n median,\n q3,\n lower,\n upper,\n outliers: sorted.filter(value => value < lower || value > upper),\n };\n}\n\nexport function chartValueKey(value: unknown): string {\n if (value instanceof Date) return `date:${value.getTime()}`;\n return `${typeof value}:${String(value)}`;\n}\n", "import type { TextVariant } from '../components/Text/text-types';\n\n/** Shared public control sizes. Typography is derived; it is not a separate density API. */\nexport type ControlSize = 'lg' | 'md' | 'sm' | 'xs';\n\n/** Outer-density reduction used when a control is nested inside a same-size frame. */\nexport type ControlInsetDepth = 'single' | 'double';\n\n/** Complete text variant selected internally by each control size. */\nexport const CONTROL_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-large',\n md: 'text-body-medium',\n sm: 'text-body-small',\n xs: 'text-caption',\n};\n\n/** Supporting copy paired with each control density in two-line choice rows. */\nexport const CONTROL_SUPPORTING_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-medium',\n md: 'text-body-small',\n sm: 'text-caption',\n xs: 'text-caption',\n};\n", "import type { AnchoredAlign } from './anchored-position';\n\n/**\n * `choice-cell` aligns the first/last interactive row edge with the anchor,\n * allowing the popup frame to extend by the section inset. `popup-frame`\n * aligns the popup frame itself and is reserved for deliberate custom geometry.\n */\nexport type ChoicePopupAnchorAlignment = 'choice-cell' | 'popup-frame';\n\nexport interface ChoicePopupAlignOffsetInput {\n align: AnchoredAlign;\n alignOffsetPx: number;\n sectionInsetPx: number;\n anchorAlignment?: ChoicePopupAnchorAlignment;\n}\n\n/**\n * Resolve the cross-axis offset for a choice popup. Authored `alignOffsetPx`\n * remains an additive nudge after the shared inner-cell alignment is applied.\n */\nexport function resolveChoicePopupAlignOffset({\n align,\n alignOffsetPx,\n sectionInsetPx,\n anchorAlignment = 'choice-cell',\n}: ChoicePopupAlignOffsetInput): number {\n if (anchorAlignment === 'popup-frame' || align === 'center') return alignOffsetPx;\n return alignOffsetPx + (align === 'start' ? -sectionInsetPx : sectionInsetPx);\n}\n\n/** Minimum popup width that keeps both choice-cell edges aligned to a trigger. */\nexport function choicePopupMinWidth(anchorWidth: number, sectionInsetPx: number): number {\n return anchorWidth + sectionInsetPx * 2;\n}\n", "export type ClockPeriod = 'AM' | 'PM';\n\nexport interface ClockTimeParts {\n hour12: number;\n minute: number;\n period: ClockPeriod;\n}\n\nexport const CLOCK_HOURS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] as const;\nexport const CLOCK_PERIODS: readonly ClockPeriod[] = ['AM', 'PM'];\n\nconst CLOCK_TIME_PATTERN = /^\\d{2}:\\d{2}$/;\n\nexport function isClockTime(value: string): boolean {\n if (!CLOCK_TIME_PATTERN.test(value)) return false;\n const [hour, minute] = value.split(':').map(Number);\n return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;\n}\n\nexport function clockMinuteStep(step: string | number = 60): number {\n const seconds = typeof step === 'number' ? step : Number(step);\n if (!Number.isFinite(seconds) || seconds <= 0) return 1;\n if (seconds < 60) return 1;\n return Math.max(1, Math.round(seconds / 60));\n}\n\nexport function clockMinutes(step: number = 1, baseMinute: number = 0): number[] {\n const stride = Number.isFinite(step) && step > 0 ? Math.floor(step) : 1;\n const normalizedBase = ((Math.floor(baseMinute) % 60) + 60) % 60;\n const values = new Set<number>();\n for (let offset = 0; offset < 1440; offset += stride) {\n values.add((normalizedBase + offset) % 60);\n }\n return [...values].sort((a, b) => a - b);\n}\n\nexport function splitClockTime(value: string): ClockTimeParts | null {\n if (!isClockTime(value)) return null;\n const [hour24, minute] = value.split(':').map(Number);\n const period: ClockPeriod = hour24 >= 12 ? 'PM' : 'AM';\n const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;\n return { hour12, minute, period };\n}\n\nexport function joinClockTime(parts: ClockTimeParts): string {\n const hour24 =\n parts.period === 'AM'\n ? parts.hour12 === 12\n ? 0\n : parts.hour12\n : parts.hour12 === 12\n ? 12\n : parts.hour12 + 12;\n return `${String(hour24).padStart(2, '0')}:${String(parts.minute).padStart(2, '0')}`;\n}\n\n/** Readable 12-hour label for filled clock values such as `09:00` \u2192 `9:00 AM`. */\nexport function formatClockTimeLabel(value: string): string {\n const parts = splitClockTime(value);\n if (!parts) return '';\n return `${parts.hour12}:${String(parts.minute).padStart(2, '0')} ${parts.period}`;\n}\n\n/** Parse a typed clock time: `HH:MM`, `H:MM`, or a 12-hour label such as `9:00 AM`. */\nexport function parseLooseClockTime(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isClockTime(trimmed)) return trimmed;\n\n const twentyFour = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n if (twentyFour) {\n const hour = Number(twentyFour[1]);\n const minute = Number(twentyFour[2]);\n if (hour > 23 || minute > 59) return '';\n return `${String(hour).padStart(2, '0')}:${twentyFour[2]}`;\n }\n\n const meridiem = trimmed.match(/^(\\d{1,2})(?::(\\d{2}))?\\s*([AaPp])\\.?[Mm]\\.?$/);\n if (!meridiem) return '';\n const hour12 = Number(meridiem[1]);\n const minute = meridiem[2] ? Number(meridiem[2]) : 0;\n if (hour12 < 1 || hour12 > 12 || minute > 59) return '';\n const period: ClockPeriod = meridiem[3].toUpperCase() === 'P' ? 'PM' : 'AM';\n return joinClockTime({ hour12, minute, period });\n}\n\nexport function isClockTimeOutOfRange(value: string, min?: string, max?: string): boolean {\n if (!isClockTime(value)) return true;\n if (min && isClockTime(min) && value < min) return true;\n if (max && isClockTime(max) && value > max) return true;\n return false;\n}\n\n/** Whether a minute-precision clock value aligns to the configured native step. */\nexport function isClockTimeStepAligned(\n value: string,\n step: string | number = 60,\n min?: string\n): boolean {\n if (!isClockTime(value)) return false;\n const valueParts = value.split(':').map(Number);\n const baseParts = min && isClockTime(min) ? min.split(':').map(Number) : [0, 0];\n const stride = clockMinuteStep(step);\n const valueMinutes = valueParts[0] * 60 + valueParts[1];\n const baseMinutes = baseParts[0] * 60 + baseParts[1];\n return (valueMinutes - baseMinutes) % stride === 0;\n}\n\n/** Move within a finite list without wrapping past the first or last item. */\nexport function stepBoundedIndex(index: number, offset: number, length: number): number {\n if (length <= 0) return 0;\n return Math.min(length - 1, Math.max(0, index + offset));\n}\n", "export const DATE_FILTER_RELATIVE_PRESETS = [\n { label: 'Today', value: 'today', days: 1, offset: 0 },\n { label: 'Yesterday', value: 'yesterday', days: 1, offset: -1 },\n { label: 'Last 7 days', value: 'last-7-days', days: 7, offset: 0 },\n { label: 'Last 14 days', value: 'last-14-days', days: 14, offset: 0 },\n { label: 'Last 30 days', value: 'last-30-days', days: 30, offset: 0 },\n { label: 'Last 60 days', value: 'last-60-days', days: 60, offset: 0 },\n { label: 'Last 90 days', value: 'last-90-days', days: 90, offset: 0 },\n] as const;\n\nexport type DateFilterRelativePreset = (typeof DATE_FILTER_RELATIVE_PRESETS)[number]['value'];\nexport type DateFilterRelativeValue = `relative:${DateFilterRelativePreset}`;\nexport type DateFilterRangeValue = `range:${string}/${string}`;\nexport type DateFilterValue = DateFilterRelativeValue | DateFilterRangeValue;\n\nexport interface DateFilterRange {\n start: string;\n end: string;\n}\n\nexport type ParsedDateFilterValue =\n | { kind: 'relative'; preset: DateFilterRelativePreset }\n | ({ kind: 'range' } & DateFilterRange);\n\nconst ISO_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst ISO_CALENDAR_DATE_LABEL = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\nexport function isIsoCalendarDate(value: string): boolean {\n if (!ISO_DATE_PATTERN.test(value)) return false;\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day));\n return (\n date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day\n );\n}\n\n/** Readable calendar date for filled ISO values such as `2026-09-10` \u2192 `Sep 10, 2026`. */\nexport function formatIsoCalendarDateLabel(value: string): string {\n if (!isIsoCalendarDate(value)) return '';\n return ISO_CALENDAR_DATE_LABEL.format(new Date(`${value}T00:00:00Z`));\n}\n\nconst MONTH_LABELS = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\n\n/** Parse a typed calendar date: ISO, `M/D/YYYY`, or a short-month label such as `Sep 10, 2026`. */\nexport function parseLooseCalendarDate(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isIsoCalendarDate(trimmed)) return trimmed;\n\n const numeric = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (numeric) {\n const iso = `${numeric[3]}-${numeric[1].padStart(2, '0')}-${numeric[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n }\n\n const labelled = trimmed.match(/^([A-Za-z]{3})\\s+(\\d{1,2}),\\s+(\\d{4})$/);\n if (!labelled) return '';\n const monthIndex = MONTH_LABELS.indexOf(labelled[1].toLowerCase());\n if (monthIndex < 0) return '';\n const iso = `${labelled[3]}-${String(monthIndex + 1).padStart(2, '0')}-${labelled[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n}\n\nexport function shiftIsoCalendarDate(value: string, days: number): string {\n if (!isIsoCalendarDate(value)) return '';\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day + days));\n return date.toISOString().slice(0, 10);\n}\n\nexport function dateFilterRelativeValue(preset: DateFilterRelativePreset): DateFilterRelativeValue {\n return `relative:${preset}`;\n}\n\nexport function dateFilterRangeValue(start: string, end: string = start): DateFilterRangeValue {\n const ordered = start <= end ? [start, end] : [end, start];\n return `range:${ordered[0]}/${ordered[1]}`;\n}\n\nexport function parseDateFilterValue(value: unknown): ParsedDateFilterValue | null {\n if (typeof value !== 'string' || !value) return null;\n\n if (value.startsWith('relative:')) {\n const preset = value.slice('relative:'.length) as DateFilterRelativePreset;\n return DATE_FILTER_RELATIVE_PRESETS.some(candidate => candidate.value === preset)\n ? { kind: 'relative', preset }\n : null;\n }\n\n if (value.startsWith('range:')) {\n const [start, end, ...rest] = value.slice('range:'.length).split('/');\n if (rest.length || !isIsoCalendarDate(start) || !isIsoCalendarDate(end)) return null;\n return start <= end ? { kind: 'range', start, end } : { kind: 'range', start: end, end: start };\n }\n\n // Preserve the previous single-date contract as a one-day range.\n return isIsoCalendarDate(value) ? { kind: 'range', start: value, end: value } : null;\n}\n\nexport function normalizeDateFilterValue(value: unknown): DateFilterValue | '' {\n const parsed = parseDateFilterValue(value);\n if (!parsed) return '';\n return parsed.kind === 'relative'\n ? dateFilterRelativeValue(parsed.preset)\n : dateFilterRangeValue(parsed.start, parsed.end);\n}\n\nexport function resolveDateFilterRange(\n value: unknown,\n referenceDate: string\n): DateFilterRange | null {\n if (!isIsoCalendarDate(referenceDate)) return null;\n const parsed = parseDateFilterValue(value);\n if (!parsed) return null;\n if (parsed.kind === 'range') return { start: parsed.start, end: parsed.end };\n\n const preset = DATE_FILTER_RELATIVE_PRESETS.find(candidate => candidate.value === parsed.preset);\n if (!preset) return null;\n const end = shiftIsoCalendarDate(referenceDate, preset.offset);\n return { start: shiftIsoCalendarDate(end, -(preset.days - 1)), end };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../../src/wc/components/Icon/flag-icon-catalog.ts", "../../../src/wc/components/Icon/map-icon-catalog.ts", "../../../src/wc/components/Icon/icon-cache.ts", "../../../src/wc/utils/resolve-css-length-px.ts", "../../../src/wc/utils/intl-formatters.ts", "../../../src/wc/utils/format-compact-number.ts", "../../../src/wc/utils/format-percentage.ts", "../../../src/wc/utils/metric-change.ts", "../../../src/wc/utils/truncate-svg-text.ts", "../../../src/wc/utils/is-element-truncated.ts", "../../../src/wc/utils/resolve-css-time-ms.ts", "../../../src/wc/utils/scroll-edge-fade.ts", "../../../src/wc/utils/token-defaults.ts", "../../../src/wc/utils/required-validity.ts", "../../../src/wc/utils/form-association.ts", "../../../src/wc/utils/safe-url.ts", "../../../src/wc/utils/control-width.ts", "../../../node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-array/src/descending.js", "../../../node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-array/src/number.js", "../../../node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-array/src/count.js", "../../../node_modules/d3-array/src/variance.js", "../../../node_modules/d3-array/src/deviation.js", "../../../node_modules/d3-array/src/extent.js", "../../../node_modules/d3-array/src/identity.js", "../../../node_modules/d3-array/src/array.js", "../../../node_modules/d3-array/src/constant.js", "../../../node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-array/src/nice.js", "../../../node_modules/d3-array/src/threshold/sturges.js", "../../../node_modules/d3-array/src/bin.js", "../../../node_modules/d3-array/src/quantile.js", "../../../src/wc/utils/chart-grammar.ts", "../../../src/wc/utils/control-text.ts", "../../../src/wc/utils/choice-popup-alignment.ts", "../../../src/wc/utils/clock-time.ts", "../../../src/wc/utils/date-filter-value.ts"],
|
|
4
|
+
"sourcesContent": ["/** Auto-generated by scripts/generate-icon-catalog.mjs \u2014 do not edit. */\n\nexport const flagIconLoaders: Record<string, () => Promise<string>> = {\n FlagAustria: () => import('@ds-mo/icons/svg/flags/FlagAustria').then(m => m.FlagAustria),\n FlagBelgium: () => import('@ds-mo/icons/svg/flags/FlagBelgium').then(m => m.FlagBelgium),\n FlagBulgaria: () => import('@ds-mo/icons/svg/flags/FlagBulgaria').then(m => m.FlagBulgaria),\n FlagCanada: () => import('@ds-mo/icons/svg/flags/FlagCanada').then(m => m.FlagCanada),\n FlagCroatia: () => import('@ds-mo/icons/svg/flags/FlagCroatia').then(m => m.FlagCroatia),\n FlagCyprus: () => import('@ds-mo/icons/svg/flags/FlagCyprus').then(m => m.FlagCyprus),\n FlagCzechRepublic: () => import('@ds-mo/icons/svg/flags/FlagCzechRepublic').then(m => m.FlagCzechRepublic),\n FlagDenmark: () => import('@ds-mo/icons/svg/flags/FlagDenmark').then(m => m.FlagDenmark),\n FlagEU: () => import('@ds-mo/icons/svg/flags/FlagEU').then(m => m.FlagEU),\n FlagEstonia: () => import('@ds-mo/icons/svg/flags/FlagEstonia').then(m => m.FlagEstonia),\n FlagFinland: () => import('@ds-mo/icons/svg/flags/FlagFinland').then(m => m.FlagFinland),\n FlagFrance: () => import('@ds-mo/icons/svg/flags/FlagFrance').then(m => m.FlagFrance),\n FlagGermany: () => import('@ds-mo/icons/svg/flags/FlagGermany').then(m => m.FlagGermany),\n FlagGreece: () => import('@ds-mo/icons/svg/flags/FlagGreece').then(m => m.FlagGreece),\n FlagHungary: () => import('@ds-mo/icons/svg/flags/FlagHungary').then(m => m.FlagHungary),\n FlagIreland: () => import('@ds-mo/icons/svg/flags/FlagIreland').then(m => m.FlagIreland),\n FlagItaly: () => import('@ds-mo/icons/svg/flags/FlagItaly').then(m => m.FlagItaly),\n FlagLatvia: () => import('@ds-mo/icons/svg/flags/FlagLatvia').then(m => m.FlagLatvia),\n FlagLithuania: () => import('@ds-mo/icons/svg/flags/FlagLithuania').then(m => m.FlagLithuania),\n FlagLuxembourg: () => import('@ds-mo/icons/svg/flags/FlagLuxembourg').then(m => m.FlagLuxembourg),\n FlagMalta: () => import('@ds-mo/icons/svg/flags/FlagMalta').then(m => m.FlagMalta),\n FlagMexico: () => import('@ds-mo/icons/svg/flags/FlagMexico').then(m => m.FlagMexico),\n FlagNetherlands: () => import('@ds-mo/icons/svg/flags/FlagNetherlands').then(m => m.FlagNetherlands),\n FlagPoland: () => import('@ds-mo/icons/svg/flags/FlagPoland').then(m => m.FlagPoland),\n FlagPortugal: () => import('@ds-mo/icons/svg/flags/FlagPortugal').then(m => m.FlagPortugal),\n FlagRomania: () => import('@ds-mo/icons/svg/flags/FlagRomania').then(m => m.FlagRomania),\n FlagSlovakia: () => import('@ds-mo/icons/svg/flags/FlagSlovakia').then(m => m.FlagSlovakia),\n FlagSlovenia: () => import('@ds-mo/icons/svg/flags/FlagSlovenia').then(m => m.FlagSlovenia),\n FlagSpain: () => import('@ds-mo/icons/svg/flags/FlagSpain').then(m => m.FlagSpain),\n FlagSweden: () => import('@ds-mo/icons/svg/flags/FlagSweden').then(m => m.FlagSweden),\n FlagUnitedKingdom: () => import('@ds-mo/icons/svg/flags/FlagUnitedKingdom').then(m => m.FlagUnitedKingdom),\n FlagUnitedStates: () => import('@ds-mo/icons/svg/flags/FlagUnitedStates').then(m => m.FlagUnitedStates),\n};\n", "/** Auto-generated by scripts/generate-icon-catalog.mjs \u2014 do not edit. */\n\nexport const mapIconLoaders: Record<string, () => Promise<string>> = {\n MapEntityAsset: () => import('@ds-mo/icons/svg/map/MapEntityAsset').then(m => m.MapEntityAsset),\n MapEntityPerson: () => import('@ds-mo/icons/svg/map/MapEntityPerson').then(m => m.MapEntityPerson),\n MapEntityTravelGroup: () => import('@ds-mo/icons/svg/map/MapEntityTravelGroup').then(m => m.MapEntityTravelGroup),\n MapEntityVehicle: () => import('@ds-mo/icons/svg/map/MapEntityVehicle').then(m => m.MapEntityVehicle),\n MapExclamation: () => import('@ds-mo/icons/svg/map/MapExclamation').then(m => m.MapExclamation),\n MapGatewayReconnect: () => import('@ds-mo/icons/svg/map/MapGatewayReconnect').then(m => m.MapGatewayReconnect),\n MapGatewayStrikethrough: () => import('@ds-mo/icons/svg/map/MapGatewayStrikethrough').then(m => m.MapGatewayStrikethrough),\n MapGeofence: () => import('@ds-mo/icons/svg/map/MapGeofence').then(m => m.MapGeofence),\n MapKey: () => import('@ds-mo/icons/svg/map/MapKey').then(m => m.MapKey),\n MapLightning: () => import('@ds-mo/icons/svg/map/MapLightning').then(m => m.MapLightning),\n MapLockClosed: () => import('@ds-mo/icons/svg/map/MapLockClosed').then(m => m.MapLockClosed),\n MapPencil: () => import('@ds-mo/icons/svg/map/MapPencil').then(m => m.MapPencil),\n MapPlus: () => import('@ds-mo/icons/svg/map/MapPlus').then(m => m.MapPlus),\n MapRewind: () => import('@ds-mo/icons/svg/map/MapRewind').then(m => m.MapRewind),\n MapShieldCircle: () => import('@ds-mo/icons/svg/map/MapShieldCircle').then(m => m.MapShieldCircle),\n MapTarget: () => import('@ds-mo/icons/svg/map/MapTarget').then(m => m.MapTarget),\n};\n", "/**\n * Shared SVG glyph cache for ds-icon.\n *\n * Keyed on a global symbol so every module instance (the compiled Stencil chunk\n * inside dist/components and any direct source import, e.g. via `@ds-mo/ui/utils`)\n * reads and writes the same cache. Without this, `registerIcons` called from an\n * app would fill a different Map than the one ds-icon resolves from.\n */\nimport { flagIconLoaders } from './flag-icon-catalog';\nimport { mapIconLoaders } from './map-icon-catalog';\n\nconst CACHE_KEY = Symbol.for('ds-mo.icon-svg-cache');\n\ntype IconCacheMap = Map<string, string>;\n\ntype GlobalWithIconCache = { [CACHE_KEY]?: IconCacheMap };\n\n/** IcoMo ships each glyph in exactly one category; the catalogs mirror that split. */\nexport type IconCategory = 'system' | 'flag' | 'map';\n\nexport function iconCacheKey(name: string, category: IconCategory): string {\n return `${category}:${name}`;\n}\n\nfunction hasOwn(loaders: Record<string, unknown>, name: string): boolean {\n return Object.prototype.hasOwnProperty.call(loaders, name);\n}\n\n/**\n * Pick the catalog a name belongs to by own-key membership \u2014 never by prefix.\n *\n * A prefix test looks equivalent and is not. IcoMo ships `Flag`/`FlagFilled` as\n * *system* icons (a generic flag glyph, not a country) and `MapNavigation`,\n * `MapPage`, `MapPin`, `MapStreet` as system icons too, while every genuine\n * flag/map export carries the category prefix. So `startsWith('Flag')` or\n * `startsWith('Map')` misroutes those six to a catalog that does not contain\n * them, the own-key lookup misses, and ds-icon renders nothing with no error.\n *\n * Only the two prefixed catalogs are consulted; anything else is system. That\n * keeps the system catalog \u2014 400 loaders, by far the largest \u2014 out of the\n * `@ds-mo/ui/utils` entry, which exists to hand apps `registerIcons`.\n *\n * Test order is not a tie-break: `generate-icon-catalog.mjs` fails the build if\n * IcoMo ever ships one name in two categories, so at most one can match.\n *\n * Names in no catalog resolve as system, which is what lets an app register a\n * glyph of its own under a custom name and have ds-icon read it back.\n */\nexport function resolveIconCategory(name: string): IconCategory {\n if (hasOwn(flagIconLoaders, name)) return 'flag';\n if (hasOwn(mapIconLoaders, name)) return 'map';\n return 'system';\n}\n\nexport function iconCache(): IconCacheMap {\n const g = globalThis as GlobalWithIconCache;\n return (g[CACHE_KEY] ??= new Map());\n}\n\n/**\n * Pre-register glyphs so ds-icon renders them synchronously \u2014 no lazy-chunk\n * fetch, no first-paint pop-in. Import the SVG strings from `@ds-mo/icons`\n * in the app (statically, so they ship in the app's own bundle):\n *\n * ```ts\n * import { Bell } from '@ds-mo/icons/svg/Bell';\n * import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';\n * import { MapGeofence } from '@ds-mo/icons/svg/map/MapGeofence';\n * import { registerIcons } from '@ds-mo/ui/utils';\n *\n * registerIcons({ Bell });\n * registerIcons({ FlagUnitedStates });\n * registerIcons({ MapGeofence });\n * ```\n *\n * The category comes from the name, exactly as ds-icon derives it, so a\n * registration is always readable by the element that needs it. Glyphs under a\n * name IcoMo does not ship \u2014 an app's own marker artwork, say \u2014 register as\n * system and resolve the same way.\n *\n * Custom glyphs must be static and self-contained. Shapes, local gradients,\n * clipping and narrow inline paint styles are supported; scripts, embedded\n * stylesheets, animation, images and external resources are rejected. Validation\n * happens when rendering, including for pre-registered strings. Unsupported\n * markup preserves the icon's empty fixed-size box.\n *\n * There is deliberately no category override. ds-icon has no such override when\n * it reads, so forcing a different category on write could only produce an\n * entry nothing ever reads.\n *\n * Icons that are not registered still work \u2014 they lazy-load on first render\n * and stay cached afterwards.\n */\nexport function registerIcons(icons: Record<string, string>): void {\n const cache = iconCache();\n for (const [name, svg] of Object.entries(icons)) {\n cache.set(iconCacheKey(name, resolveIconCategory(name)), svg);\n }\n}\n", "// Only literals are independent of theme, viewport, font, and component scope.\nconst lengthPxCache = new Map<string, number>();\nconst probes = new WeakMap<Document, HTMLElement>();\nconst CACHE_LIMIT = 256;\n\nfunction literalPixels(value: string): number | undefined {\n const cached = lengthPxCache.get(value);\n if (cached !== undefined) return cached;\n if (!/^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?(?:px)?$/i.test(value)) return undefined;\n const pixels = Number(value.replace(/px$/i, ''));\n if (!Number.isFinite(pixels)) return undefined;\n if (lengthPxCache.size >= CACHE_LIMIT) lengthPxCache.clear();\n lengthPxCache.set(value, pixels);\n return pixels;\n}\n\nfunction getProbeElement(ownerDocument: Document): HTMLElement {\n let probe = probes.get(ownerDocument);\n if (!probe) {\n probe = ownerDocument.createElement('div');\n probe.setAttribute('aria-hidden', 'true');\n probe.style.cssText =\n 'all:initial;position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:0;margin:0;padding:0;border:0;overflow:hidden;';\n probes.set(ownerDocument, probe);\n }\n if (!probe.isConnected) ownerDocument.documentElement.appendChild(probe);\n return probe;\n}\n\n/** Clear the bounded cache of context-independent numeric and pixel literals. */\nexport function clearCssLengthPxCache(): void {\n lengthPxCache.clear();\n}\n\n/**\n * Resolve a CSS length to pixels for layout math. Dynamic expressions are read\n * from the current document and optional component scope on every call. Relative\n * font units use that scope; percentage lengths use the viewport's inline size.\n */\nexport function resolveCssLengthPx(\n value: number | string | undefined,\n fallback: number | string,\n context?: Element\n): number {\n const resolved = value === undefined || value === null || value === '' ? fallback : value;\n if (typeof resolved === 'number') return Number.isFinite(resolved) ? resolved : 0;\n\n const trimmed = resolved.trim();\n if (!trimmed) return resolveCssLengthPx(fallback, 0, context);\n const literal = literalPixels(trimmed);\n if (literal !== undefined) return literal;\n\n const fallbackPixels = typeof fallback === 'number' ? fallback : literalPixels(fallback.trim());\n const safeFallback = Number.isFinite(fallbackPixels) ? (fallbackPixels as number) : 0;\n const ownerDocument =\n context?.ownerDocument ?? (typeof document === 'undefined' ? null : document);\n const view = ownerDocument?.defaultView;\n if (!ownerDocument?.documentElement || !view) return safeFallback;\n\n const cssLength = /^--[\\w-]+$/.test(trimmed) ? `var(${trimmed})` : trimmed;\n if (!view.CSS.supports('left', cssLength)) return safeFallback;\n const scopeStyle = view.getComputedStyle(context ?? ownerDocument.documentElement);\n const directProperty = cssLength.match(/^var\\(\\s*(--[\\w-]+)\\s*\\)$/)?.[1];\n if (directProperty) {\n const scopedValue = scopeStyle.getPropertyValue(directProperty).trim();\n if (!scopedValue) return safeFallback;\n // Most design tokens are pixel literals; avoid a layout probe on that path.\n const scopedPixels = literalPixels(scopedValue);\n if (scopedPixels !== undefined) return scopedPixels;\n }\n\n const probe = getProbeElement(ownerDocument);\n const variables = new Set([...cssLength.matchAll(/var\\(\\s*(--[\\w-]+)/g)].map(match => match[1]));\n // Computed custom properties already have their nested var() references\n // substituted. Explicitly unset missing values so root tokens cannot leak\n // into a scope that invalidates them and supplies its own var() fallback.\n for (const name of variables) {\n probe.style.setProperty(name, scopeStyle.getPropertyValue(name).trim() || 'initial');\n }\n probe.style.font = scopeStyle.font;\n probe.style.fontSize = scopeStyle.fontSize;\n probe.style.lineHeight = scopeStyle.lineHeight;\n // An offset accepts negative lengths too, unlike width which clamps them.\n probe.style.left = '';\n probe.style.left = cssLength;\n try {\n if (!probe.style.left) return safeFallback;\n const pixels = parseFloat(view.getComputedStyle(probe).left);\n return Number.isFinite(pixels) ? pixels : safeFallback;\n } finally {\n probe.style.left = '0px';\n for (const name of variables) probe.style.removeProperty(name);\n }\n}\n", "/** Internal, bounded formatter reuse. Omitted/invalid locales use the English product default. */\nconst DEFAULT_LOCALE = 'en-US';\nconst CACHE_LIMIT = 32;\nconst locales = new Map<string, string>();\nconst numbers = new Map<string, Intl.NumberFormat>();\nconst dates = new Map<string, Intl.DateTimeFormat>();\n\nfunction remember<T>(cache: Map<string, T>, key: string, value: T): T {\n if (cache.size >= CACHE_LIMIT) cache.delete(cache.keys().next().value!);\n cache.set(key, value);\n return value;\n}\n\nexport function resolveFormatLocale(locale?: string): string {\n if (typeof locale !== 'string' || !locale.trim()) return DEFAULT_LOCALE;\n const key = locale.trim();\n const cached = locales.get(key);\n if (cached) return cached;\n let resolved = DEFAULT_LOCALE;\n try {\n resolved = Intl.NumberFormat.supportedLocalesOf(key)[0] ?? DEFAULT_LOCALE;\n } catch {\n // Invalid application input must not prevent a component from rendering.\n }\n return remember(locales, key, resolved);\n}\n\nfunction keyFor(locale: string, options: object): string {\n return JSON.stringify([locale, Object.entries(options).sort(([a], [b]) => a.localeCompare(b))]);\n}\n\nexport function numberFormatter(\n locale?: string,\n options: Intl.NumberFormatOptions = {}\n): Intl.NumberFormat {\n const resolved = resolveFormatLocale(locale);\n const key = keyFor(resolved, options);\n return numbers.get(key) ?? remember(numbers, key, new Intl.NumberFormat(resolved, options));\n}\n\nexport function dateFormatter(\n locale?: string,\n options: Intl.DateTimeFormatOptions = {}\n): Intl.DateTimeFormat {\n const resolved = resolveFormatLocale(locale);\n const key = keyFor(resolved, options);\n return dates.get(key) ?? remember(dates, key, new Intl.DateTimeFormat(resolved, options));\n}\n", "import { numberFormatter } from './intl-formatters';\nconst COMPACT_UNITS: { threshold: number; suffix: string }[] = [\n { threshold: 1_000_000_000, suffix: 'b' },\n { threshold: 1_000_000, suffix: 'm' },\n { threshold: 1_000, suffix: 'k' },\n];\n\n/** Compact large numbers for display: 1000 -> \"1k\", 1500 -> \"1.5k\", 110100 -> \"110.1k\", 1000000 -> \"1m\". */\nexport function formatCompactNumber(value: number, locale?: string): string {\n if (locale) {\n return numberFormatter(locale, {\n notation: 'compact',\n compactDisplay: 'short',\n maximumFractionDigits: 1,\n }).format(value);\n }\n const sign = value < 0 ? '-' : '';\n const abs = Math.abs(value);\n if (abs < 1000) return String(value);\n\n for (let i = 0; i < COMPACT_UNITS.length; i++) {\n const unit = COMPACT_UNITS[i];\n if (abs < unit.threshold) continue;\n\n let scaled = Math.round((abs / unit.threshold) * 10) / 10;\n // Carry over, e.g. 999.96k rounds to \"1000k\" \u2014 bump to the next unit instead.\n if (scaled >= 1000 && i > 0) {\n const next = COMPACT_UNITS[i - 1];\n scaled = Math.round((abs / next.threshold) * 10) / 10;\n return `${sign}${scaled}${next.suffix}`;\n }\n return `${sign}${scaled}${unit.suffix}`;\n }\n return String(value);\n}\n", "import { numberFormatter } from './intl-formatters';\nexport type PercentageDecimals = 1 | 2;\n\n/** Format a ratio as a percentage (English by default) with an exact, supported precision. */\nexport function formatPercentage(\n ratio: number,\n decimals: PercentageDecimals = 1,\n locale?: string\n): string {\n const precision = decimals === 2 ? 2 : 1;\n const value = Number.isFinite(ratio) ? ratio : 0;\n\n return numberFormatter(locale, {\n style: 'percent',\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }).format(value);\n}\n", "import { numberFormatter } from './intl-formatters';\nimport { formatCompactNumber } from './format-compact-number';\n\nexport type MetricTrendDirection = 'up' | 'down';\n\n/**\n * How a change should read to the user. Deliberately separate from direction:\n * a metric can fall and read positive, or move and read neutral, so the arrow\n * and the sentiment are independent.\n */\nexport type MetricTrendTone = 'positive' | 'negative' | 'neutral';\n\n/** Display-ready trend for an overview score or metric. */\nexport interface MetricTrend {\n direction: MetricTrendDirection;\n /** Formatted change, for example `9` or `32%`. */\n value: string;\n tone: MetricTrendTone;\n}\n\nexport interface MetricChange {\n /** Signed difference, current minus previous. */\n delta: number;\n /** Magnitude of the difference. */\n absolute: number;\n /**\n * Magnitude as a share of the previous value, so `0.32` means 32 percent.\n * Zero when the previous value is zero, because the change has no base to\n * measure against and an infinite increase is not reportable.\n */\n ratio: number;\n /** `null` when the values match or either side is missing. */\n direction: MetricTrendDirection | null;\n}\n\nexport interface ResolveMetricTrendOptions {\n /** Lower is better, so a decrease reads positive. Collisions, costs, defects. */\n inverted?: boolean;\n /** Report the change without a positive or negative reading. */\n neutral?: boolean;\n /** Report the change as a share of the previous value rather than a magnitude. */\n display?: 'absolute' | 'percentage';\n locale?: string;\n}\n\nconst NO_CHANGE: MetricChange = { delta: 0, absolute: 0, ratio: 0, direction: null };\n\nfunction isUsable(value: number | null | undefined): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\n/**\n * Compare a metric against its previous period.\n *\n * Reports magnitudes only \u2014 whether a rise is good news is a product decision,\n * so callers pair this with `resolveMetricTrend` or map `direction` themselves.\n */\nexport function computeMetricChange(\n current: number | null | undefined,\n previous: number | null | undefined\n): MetricChange {\n if (!isUsable(current) || !isUsable(previous)) return NO_CHANGE;\n\n // Trim floating-point noise so 0.3 - 0.1 does not report a change of 0.199\u2026\n const delta = Number.parseFloat((current - previous).toFixed(10));\n if (delta === 0) return NO_CHANGE;\n\n const absolute = Math.abs(delta);\n const ratio = previous === 0 ? 0 : Math.abs(delta / previous);\n\n return { delta, absolute, ratio, direction: delta > 0 ? 'up' : 'down' };\n}\n\n/**\n * Build a display-ready trend, or `null` when there is nothing to report so the\n * caller can omit the trend entirely rather than render a zero.\n *\n * Percentages are formatted without decimals to match the product's overview\n * bar; `formatPercentage` is not used because it requires one or two decimals.\n */\nexport function resolveMetricTrend(\n current: number | null | undefined,\n previous: number | null | undefined,\n options: ResolveMetricTrendOptions = {}\n): MetricTrend | null {\n const { inverted = false, neutral = false, display = 'absolute', locale } = options;\n const change = computeMetricChange(current, previous);\n if (!change.direction) return null;\n\n // A rise reads positive by default and negative when lower is better.\n const rose = change.direction === 'up';\n const tone: MetricTrendTone = neutral ? 'neutral' : rose !== inverted ? 'positive' : 'negative';\n\n const value =\n display === 'percentage'\n ? numberFormatter(locale, { style: 'percent', maximumFractionDigits: 0 }).format(change.ratio)\n : formatCompactNumber(change.absolute, locale);\n\n return { direction: change.direction, value, tone };\n}\n", "/**\n * Binary-searches the longest prefix of `text` (plus an ellipsis) that fits within `maxWidth`\n * px when rendered by `el`, using the SVG `getComputedTextLength()` API for exact measurement \u2014\n * `text-overflow: ellipsis` doesn't apply to raw SVG `<text>` nodes.\n *\n * Mutates `el.textContent` during measurement; the caller's next render (driven by the\n * returned string going into state) overwrites it with the final value.\n */\nexport function truncateSvgTextToWidth(el: SVGTextElement, text: string, maxWidth: number): string {\n el.textContent = text;\n if (maxWidth <= 0 || el.getComputedTextLength() <= maxWidth) return text;\n\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = Math.ceil((lo + hi) / 2);\n el.textContent = `${text.slice(0, mid)}\u2026`;\n if (el.getComputedTextLength() <= maxWidth) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n return lo > 0 ? `${text.slice(0, lo)}\u2026` : '\u2026';\n}\n", "/** Subpixel rounding can make overflow look equal at 0\u20131px; ignore that noise. */\nconst TRUNCATION_EPSILON_PX = 1;\n\n/**\n * Whether a laid-out element is visually truncated.\n * Prefers `ds-text`'s inner semantic node when present so host flex layout\n * does not hide horizontal or line-clamp overflow.\n */\nexport function isElementTruncated(element: HTMLElement): boolean {\n const target = element.querySelector<HTMLElement>('.ds-text__element') ?? element;\n return (\n target.scrollWidth - target.clientWidth > TRUNCATION_EPSILON_PX ||\n target.scrollHeight - target.clientHeight > TRUNCATION_EPSILON_PX\n );\n}\n", "/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */\nexport function parseCssTimeMs(value: string, fallback: number): number {\n const firstToken = value.trim().split(/\\s+/)[0] ?? '';\n const num = parseFloat(firstToken);\n if (Number.isNaN(num)) return fallback;\n if (/ms\\s*$/.test(firstToken)) return num;\n if (/s\\s*$/.test(firstToken)) return num * 1000;\n return num;\n}\n\nfunction extractCssCustomProp(ref: string): string | null {\n const varMatch = ref.match(/^var\\(\\s*(--[^),]+)/);\n if (varMatch) return varMatch[1].trim();\n if (ref.startsWith('--')) return ref.trim();\n return null;\n}\n\nfunction readTokenTimeMs(token: string, fallback: number): number {\n if (typeof document === 'undefined') return fallback;\n\n const prop = extractCssCustomProp(token);\n if (!prop) return parseCssTimeMs(token, fallback);\n\n const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();\n return parseCssTimeMs(raw, fallback);\n}\n\n/**\n * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.\n * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.\n */\nexport function resolveCssTimeMs(\n value: number | string | undefined,\n fallbackToken: string\n): number {\n if (typeof value === 'number') return value;\n\n const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;\n const prop = extractCssCustomProp(token);\n\n if (prop) {\n return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n }\n\n return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n}\n\n/** Whether the user has requested reduced non-essential motion. */\nexport function prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n}\n\n/**\n * Resolve an animation-coupled duration. Returns zero under reduced motion so\n * JS cleanup stays synchronized with CSS that removes the corresponding motion.\n */\nexport function resolveMotionTimeMs(\n value: number | string | undefined,\n fallbackToken: string\n): number {\n return prefersReducedMotion() ? 0 : resolveCssTimeMs(value, fallbackToken);\n}\n", "/** CSS custom property for scroll-edge fade depth (dimension token or length). */\nexport const SCROLL_EDGE_FADE_SIZE_VAR = '--ds-scroll-edge-fade-size';\n\nexport const SCROLL_EDGE_FADE_DEFAULT_SIZE = 'var(--dimension-size-600)';\n\nexport type ScrollEdgeFadeEdge = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ScrollEdgeFadeSizeToken =\n | 'size-000'\n | 'size-050'\n | 'size-075'\n | 'size-100'\n | 'size-150'\n | 'size-200'\n | 'size-250'\n | 'size-300'\n | 'size-400'\n | 'size-500'\n | 'size-600'\n | 'size-800';\n\nexport type ScrollEdgeFadeSize = ScrollEdgeFadeSizeToken | (string & {});\n\nconst SIZE_VALUE: Record<ScrollEdgeFadeSizeToken, string> = {\n 'size-000': 'var(--dimension-size-000)',\n 'size-050': 'var(--dimension-size-050)',\n 'size-075': 'var(--dimension-size-075)',\n 'size-100': 'var(--dimension-size-100)',\n 'size-150': 'var(--dimension-size-150)',\n 'size-200': 'var(--dimension-size-200)',\n 'size-250': 'var(--dimension-size-250)',\n 'size-300': 'var(--dimension-size-300)',\n 'size-400': 'var(--dimension-size-400)',\n 'size-500': 'var(--dimension-size-500)',\n 'size-600': 'var(--dimension-size-600)',\n 'size-800': 'var(--dimension-size-800)',\n};\n\nconst SIZE_REF = `var(${SCROLL_EDGE_FADE_SIZE_VAR}, ${SCROLL_EDGE_FADE_DEFAULT_SIZE})`;\n\nexport interface ScrollEdgeFadeOptions {\n /** One or more edges to fade. */\n edges: ScrollEdgeFadeEdge | ScrollEdgeFadeEdge[];\n /**\n * Reveal and hide configured fades from the container's own scroll position.\n * Uses CSS scroll-driven animations with a static-fade fallback; no listener required.\n */\n scrollAware?: boolean;\n /**\n * When true, removes the complete mask. Pass a map to remove only configured\n * edges that are flush when scroll state already lives in JavaScript.\n */\n atEnd?: boolean | Partial<Record<ScrollEdgeFadeEdge, boolean>>;\n /** Force the mask off regardless of scroll position (`ds-fade` `visible={false}`). */\n hidden?: boolean;\n}\n\n/** Resolve a dimension size token name or raw CSS length for `--ds-scroll-edge-fade-size`. */\nexport function resolveScrollEdgeFadeSize(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): string {\n if (height) return height;\n return Object.prototype.hasOwnProperty.call(SIZE_VALUE, size)\n ? SIZE_VALUE[size as ScrollEdgeFadeSizeToken]\n : size;\n}\n\n/** Inline style map setting fade depth on a scroll container. */\nexport function scrollEdgeFadeSizeStyle(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): Record<string, string> {\n return {\n [SCROLL_EDGE_FADE_SIZE_VAR]: resolveScrollEdgeFadeSize(size, height),\n };\n}\n\n/**\n * Alpha mask for a scroll container edge \u2014 content fades to transparent so\n * textured backgrounds (shell gradients, images) show through.\n */\nexport function scrollEdgeFadeMaskImage(edge: ScrollEdgeFadeEdge): string {\n switch (edge) {\n case 'top':\n return `linear-gradient(to bottom, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'bottom':\n return `linear-gradient(to bottom, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n case 'left':\n return `linear-gradient(to right, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'right':\n return `linear-gradient(to right, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n }\n}\n\n/** Inline style map for a masked scroll region (single edge). */\nexport function scrollEdgeFadeMaskStyle(\n edge: ScrollEdgeFadeEdge,\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string\n): Record<string, string> {\n const mask = scrollEdgeFadeMaskImage(edge);\n return {\n ...scrollEdgeFadeSizeStyle(size, height),\n WebkitMaskImage: mask,\n maskImage: mask,\n WebkitMaskSize: '100% 100%',\n maskSize: '100% 100%',\n };\n}\n\n/** Class map for `scroll-edge-fade` modifiers \u2014 pair with `scroll-edge-fade.css`. */\nexport function scrollEdgeFadeClassMap(opts: ScrollEdgeFadeOptions): Record<string, boolean> {\n const edges = Array.isArray(opts.edges) ? opts.edges : [opts.edges];\n const classes: Record<string, boolean> = {\n 'scroll-edge-fade': true,\n 'scroll-edge-fade--scroll-aware': opts.scrollAware === true,\n 'scroll-edge-fade--hidden': opts.hidden === true,\n };\n\n for (const edge of edges) {\n classes[`scroll-edge-fade--${edge}`] = true;\n }\n\n const { atEnd } = opts;\n if (atEnd === true) {\n classes['scroll-edge-fade--at-end'] = true;\n } else if (atEnd && typeof atEnd === 'object') {\n for (const edge of edges) {\n if (atEnd[edge]) {\n classes[`scroll-edge-fade--${edge}-at-edge`] = true;\n }\n }\n }\n\n return classes;\n}\n\n/** Whether a scroll container is flush with the given edge (within `threshold` px). */\nexport function isScrollAtEdge(el: HTMLElement, edge: ScrollEdgeFadeEdge, threshold = 2): boolean {\n switch (edge) {\n case 'top':\n return el.scrollTop <= threshold;\n case 'bottom':\n return el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n case 'left':\n return el.scrollLeft <= threshold;\n case 'right':\n return el.scrollWidth - el.scrollLeft - el.clientWidth <= threshold;\n }\n}\n", "import {\n dimensionIconographyMd,\n dimensionIconographySm,\n dimensionIconographyXs,\n dimensionMenuWidthLg,\n dimensionMenuWidthXs,\n dimensionPanelWidth2xs,\n dimensionPanelWidthLg,\n dimensionPanelWidthMd,\n dimensionRadius025,\n dimensionSize200,\n dimensionSize300,\n dimensionSize400,\n dimensionSize600,\n dimensionSize800,\n dimensionSpace100,\n dimensionSpace050,\n dimensionSpace200,\n dimensionSpace300,\n dimensionSpace400,\n dimensionStrokeWidth012,\n dimensionStrokeWidth025,\n dimensionStrokeWidth037,\n typographyLineheightLg,\n typographyLineheightMd,\n typographyLineheightSm,\n typographyLineheightXl,\n typographyLineheightXs,\n effectAnimationDelayLong2,\n effectAnimationDelayMedium1,\n effectAnimationDelayMedium3,\n effectAnimationDelayInstant,\n effectAnimationDelayShort2,\n effectAnimationDurationMedium1,\n effectAnimationDurationShort3,\n effectMotionShort2,\n effectMotionShort3,\n} from '@ds-mo/tokens/ts';\n\n/** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */\nexport const TOKEN_DEFAULTS = {\n space050: dimensionSpace050,\n space100: dimensionSpace100,\n space200: dimensionSpace200,\n space300: dimensionSpace300,\n space400: dimensionSpace400,\n radius025: dimensionRadius025,\n strokeWidth012: dimensionStrokeWidth012,\n strokeWidth025: dimensionStrokeWidth025,\n strokeWidth037: dimensionStrokeWidth037,\n size200: dimensionSize200,\n size300: dimensionSize300,\n size400: dimensionSize400,\n size600: dimensionSize600,\n size800: dimensionSize800,\n iconographyMd: dimensionIconographyMd,\n iconographySm: dimensionIconographySm,\n iconographyXs: dimensionIconographyXs,\n panelWidth2xs: dimensionPanelWidth2xs,\n panelWidthMd: dimensionPanelWidthMd,\n panelWidthLg: dimensionPanelWidthLg,\n menuWidthXs: dimensionMenuWidthXs,\n menuWidthLg: dimensionMenuWidthLg,\n lineheightLg: typographyLineheightLg,\n lineheightMd: typographyLineheightMd,\n lineheightSm: typographyLineheightSm,\n lineheightXl: typographyLineheightXl,\n lineheightXs: typographyLineheightXs,\n motionShort2: effectMotionShort2,\n motionShort3: effectMotionShort3,\n animationDurationShort3: effectAnimationDurationShort3,\n animationDurationMedium1: effectAnimationDurationMedium1,\n animationDelayInstant: effectAnimationDelayInstant,\n animationDelayMedium1: effectAnimationDelayMedium1,\n animationDelayMedium3: effectAnimationDelayMedium3,\n animationDelayShort2: effectAnimationDelayShort2,\n animationDelayLong2: effectAnimationDelayLong2,\n /** Unmeasured menu height fallback: 20\u00D7 base (160px at default scale). */\n menuFallbackHeight: 'calc(var(--dimension-size-base) * 20)',\n /** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */\n tooltipFallbackWidth: 'calc(var(--dimension-size-800) + var(--dimension-size-200))',\n /** Fill-mode donut diameter floor: 16\u00D7 size-base (128px). */\n donutFillMin: 'calc(var(--dimension-size-base) * 16)',\n /** Fill-mode donut diameter ceiling: 24\u00D7 size-base (192px). */\n donutFillMax: 'calc(var(--dimension-size-base) * 24)',\n} as const;\n\nexport type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;\n\n/** Valid CSS length strings for overlay offset props \u2014 bind on `sideOffset` / `alignOffset` in hosts. */\nexport const TOKEN_CSS_LENGTHS = {\n space050: `var(${dimensionSpace050})`,\n space200: `var(${dimensionSpace200})`,\n menuWidthXs: `var(${dimensionMenuWidthXs})`,\n menuWidthLg: `var(${dimensionMenuWidthLg})`,\n} as const;\n", "/**\n * Shared \"required field\" validity contract for form-associated custom\n * elements (Checkbox, Radio, Switch, Input, Select, \u2026).\n *\n * Each control computes its own `missing` condition (what counts as empty\n * differs: unchecked, no value, no selection, \u2026) and its own form value, then\n * calls `setRequiredValidity` instead of hand-rolling the `setValidity` call\n * and the default message string.\n *\n * @see AGENTS.md \u2014 \"Required-field validity\"\n */\n\nexport const DEFAULT_REQUIRED_MESSAGE = 'This field is required.';\n\n/** Sets or clears the `valueMissing` validity flag on a form-associated element. */\nexport function setRequiredValidity(\n internals: ElementInternals,\n missing: boolean,\n message: string\n): void {\n internals.setValidity(missing ? { valueMissing: true } : {}, missing ? message : '');\n}\n", "export type FormControlState = File | FormData | string | null;\n\nexport interface SetFormControlValueOptions {\n inactive?: boolean;\n state?: FormControlState;\n}\n\nexport interface SetRepeatedFormControlValueOptions {\n inactive?: boolean;\n state?: FormControlState;\n}\n\n/**\n * Set one form-associated value while consistently omitting inactive controls.\n * Inactive controls retain their restoration state even when submission is\n * omitted. Pass `state` when restoration differs from the control's value.\n */\nexport function setFormControlValue(\n internals: ElementInternals,\n value: File | string | null,\n options: SetFormControlValueOptions = {}\n): void {\n const submission = options.inactive ? null : value;\n internals.setFormValue(submission, options.state === undefined ? value : options.state);\n}\n\n/**\n * Submit repeated values under one field name and preserve a serialized array\n * for browser form-state restoration.\n */\nexport function setRepeatedFormControlValue(\n internals: ElementInternals,\n name: string | null | undefined,\n values: readonly (number | string)[],\n options: SetRepeatedFormControlValueOptions = {}\n): void {\n const state = options.state === undefined ? JSON.stringify(values) : options.state;\n if (options.inactive || !name || values.length === 0) {\n internals.setFormValue(null, state);\n return;\n }\n\n const data = new FormData();\n values.forEach(value => data.append(name, String(value)));\n internals.setFormValue(data, state);\n}\n\nexport function restoreStringFormState(state: FormControlState, fallback: string = ''): string {\n return typeof state === 'string' ? state : fallback;\n}\n\nexport function restoreStringArrayFormState(state: FormControlState): string[] {\n if (typeof state !== 'string') return [];\n try {\n const restored: unknown = JSON.parse(state);\n return Array.isArray(restored)\n ? restored.filter((value): value is string => typeof value === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nexport function restoreNumberArrayFormState(\n state: FormControlState,\n maximumValues?: number\n): number[] {\n if (typeof state !== 'string') return [];\n try {\n const restored: unknown = JSON.parse(state);\n if (!Array.isArray(restored)) return [];\n const values = restored\n .filter(\n (value): value is number | string =>\n typeof value === 'number' || (typeof value === 'string' && value.trim().length > 0)\n )\n .map(Number)\n .filter(value => Number.isFinite(value));\n return maximumValues === undefined ? values : values.slice(0, maximumValues);\n } catch {\n return [];\n }\n}\n", "export type SafeUrlProtocol = 'blob:' | 'http:' | 'https:' | 'mailto:';\n\nexport interface ResolveSafeUrlOptions {\n protocols?: readonly SafeUrlProtocol[];\n baseUrl?: string | URL;\n}\n\nconst DEFAULT_PROTOCOLS: readonly SafeUrlProtocol[] = ['http:', 'https:'];\n\n/**\n * Resolve a consumer-authored URL only when its protocol is explicitly allowed.\n * Relative URLs use the current document base in browser rendering; server-side\n * callers can provide `baseUrl` when they intentionally support relative input.\n */\nexport function resolveSafeUrl(\n value: string | null | undefined,\n options: ResolveSafeUrlOptions = {}\n): string | undefined {\n const candidate = typeof value === 'string' ? value.trim() : '';\n if (!candidate) return undefined;\n\n const baseUrl =\n options.baseUrl ?? (typeof document === 'undefined' ? undefined : document.baseURI);\n\n try {\n const url = baseUrl === undefined ? new URL(candidate) : new URL(candidate, baseUrl);\n const protocols = options.protocols ?? DEFAULT_PROTOCOLS;\n return protocols.includes(url.protocol as SafeUrlProtocol) ? url.href : undefined;\n } catch {\n return undefined;\n }\n}\n", "/** Shared width fit for interactive controls (buttons, select, \u2026). */\nexport type ControlWidth = 'hug' | 'fill';\n\n/** Host / control class map for `width=\"hug\" | \"fill\"`. */\nexport function controlWidthClass(width: ControlWidth): Record<string, boolean> {\n return {\n 'ds-control-width--hug': width === 'hug',\n 'ds-control-width--fill': width === 'fill',\n };\n}\n", "export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can\u2019t do this\n // for a comparator (except for specific, known comparators) because we can\u2019t\n // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n", "export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n", "export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n", "export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n", "export default function identity(x) {\n return x;\n}\n", "var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n", "export default function constant(x) {\n return () => x;\n}\n", "const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n", "import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n", "import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain\u2019s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don\u2019t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n", "import { bin as d3Bin, deviation, extent, quantileSorted, ticks } from 'd3-array';\nimport type { CurveFactory } from 'd3-shape';\n\nexport type ChartValue = string | number | Date;\nexport type ChartKey = string | number;\nexport type ChartDataIntent = 'brand' | 'caution' | 'negative' | 'neutral' | 'positive' | 'warning';\n\nexport type ChartChannel<TDatum, TValue> =\n | Extract<keyof TDatum, string>\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\nexport type ChartVisual<TDatum, TValue> =\n | TValue\n | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue);\n\n/** Structural boundary accepted by the chart compiler for native D3 scales. */\nexport type ChartScale = ((value: ChartValue) => unknown) & {\n copy?: () => ChartScale;\n domain: (...values: unknown[]) => unknown;\n range: (...values: unknown[]) => unknown;\n bandwidth?: () => number;\n ticks?: (count?: number) => ChartValue[];\n tickFormat?: (count?: number) => (value: ChartValue) => string;\n nice?: (count?: number) => unknown;\n};\n\n/** A configured D3 scale or a zero-argument D3 scale factory. */\nexport type ChartScaleSource = ChartScale | (() => unknown);\n\nexport interface ChartTickOptions {\n count?: number;\n values?: readonly ChartValue[];\n format?: (value: ChartValue, locale: string) => string;\n /** Minimum measured gap between adjacent tick labels, in CSS pixels. */\n spacing?: number;\n /** Length of the tick stub extending away from the plot, in CSS pixels. */\n size?: number;\n /** Gap between the end of a tick stub and its label, in CSS pixels. */\n padding?: number;\n /** Rotation in degrees. Negative values rotate counter-clockwise. */\n rotate?: number;\n}\n\nexport interface ChartAxisPresentation {\n label?: string;\n /** Render the axis baseline. Defaults to true. */\n line?: boolean;\n ticks?: ChartTickOptions;\n}\n\nexport interface ChartAxisOptions {\n scale: ChartScaleSource;\n nice?: boolean;\n grid?: boolean;\n axis?: false | ChartAxisPresentation;\n}\n\nexport interface ChartMargin {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport type ChartFocusMode = 'none' | 'nearest' | 'nearest-x' | 'nearest-y' | 'group-x' | 'group-y';\n\nexport interface ChartPoint<TDatum = unknown> {\n key: ChartKey;\n sceneKey: string;\n markId: string;\n datum: TDatum;\n datumIndex: number;\n groupValue?: ChartValue;\n groupLabel?: string;\n xValue: ChartValue;\n yValue: ChartValue;\n /** Primary semantic value for polar, heatmap, and distribution marks. */\n value?: ChartValue;\n angleValue?: ChartValue;\n radiusValue?: ChartValue;\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartTooltipItem {\n label: string;\n value: string;\n color?: string;\n}\n\nexport interface ChartTooltipContext<TDatum = unknown> {\n locale: string;\n primary: ChartPoint<TDatum>;\n points: readonly ChartPoint<TDatum>[];\n}\n\nexport interface ChartTooltipOptions<TDatum = unknown> {\n format?: (point: ChartPoint<TDatum>, locale: string) => string;\n formatGroupHeading?: (points: readonly ChartPoint<TDatum>[], locale: string) => string;\n formatGroupItem?: (point: ChartPoint<TDatum>, locale: string) => ChartTooltipItem;\n}\n\nexport type ChartTooltip<TDatum = unknown> = boolean | ChartTooltipOptions<TDatum>;\n\nexport interface ChartColorOptions {\n domain?: readonly ChartValue[];\n range?: readonly string[];\n}\n\nexport interface ChartBuildContext {\n width: number;\n height: number;\n}\n\nexport interface ChartCartesianCoordinate {\n type?: 'cartesian';\n}\n\nexport interface ChartPolarCoordinate {\n type: 'polar';\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n /** Default inner radius as a fraction of the available radius. */\n innerRadius?: number;\n /** Outer radius as a fraction of the available radius. */\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n}\n\nexport type ChartCoordinate = ChartCartesianCoordinate | ChartPolarCoordinate;\n\nexport interface ChartPolarAxisOptions {\n domain?: readonly ChartValue[];\n label?: string;\n ticks?: ChartTickOptions;\n grid?: boolean;\n}\n\nexport interface ChartCenterContent {\n value?: string;\n caption?: string;\n}\n\nexport interface ChartCenterOptions extends ChartCenterContent {\n /** Optional focused content. Authored content remains the default. */\n focused?: (point: ChartPoint, locale: string) => ChartCenterContent;\n}\n\nexport type ChartMarkKind =\n | 'polar'\n | 'line-y'\n | 'area-y'\n | 'bar-x'\n | 'bar-y'\n | 'box-y'\n | 'dot'\n | 'rule-x'\n | 'rule-y'\n | 'band-x'\n | 'band-y'\n | 'rect'\n | 'cell'\n | 'text'\n | 'arc'\n | 'radial-line'\n | 'radial-area'\n | 'radial-dot';\n\nexport interface ChartMark<TDatum = unknown> {\n kind: ChartMarkKind;\n data: readonly TDatum[];\n options: ChartMarkOptions<TDatum>;\n}\n\nexport interface ChartPolarContainerOptions {\n id?: string;\n marks: readonly ChartMark[];\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n /** Radians measured clockwise from twelve o'clock. */\n startAngle?: number;\n /** Radians measured clockwise from twelve o'clock. */\n endAngle?: number;\n innerRadius?: number;\n outerRadius?: number;\n grid?: 'none' | 'polygon';\n center?: ChartCenterOptions;\n}\n\nexport interface ChartBaseMarkOptions<TDatum> {\n id?: string;\n /** Exclude decorative layers from semantic focus while retaining rendering. */\n interactive?: boolean;\n key?: ChartChannel<TDatum, ChartKey>;\n z?: ChartChannel<TDatum, ChartValue | null | undefined>;\n color?: ChartChannel<TDatum, ChartValue | null | undefined>;\n value?: ChartChannel<TDatum, ChartValue | null | undefined>;\n fill?: ChartVisual<TDatum, string>;\n stroke?: ChartVisual<TDatum, string>;\n opacity?: ChartVisual<TDatum, number>;\n fillOpacity?: ChartVisual<TDatum, number>;\n strokeOpacity?: ChartVisual<TDatum, number>;\n strokeWidth?: ChartVisual<TDatum, number | string>;\n strokeDasharray?: ChartVisual<TDatum, string>;\n}\n\nexport interface ChartLineYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport interface ChartAreaYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n}\n\nexport type ChartBarLayout = 'single' | 'grouped' | 'stacked';\n\nexport interface ChartBarOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n layout?: ChartBarLayout;\n inset?: ChartVisual<TDatum, number>;\n radius?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartBoxYOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, number | null | undefined>;\n /** Tukey whisker multiplier. */\n whisker?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartDotOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport interface ChartRuleOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n}\n\nexport interface ChartBandOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n}\n\nexport interface ChartRectOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x1?: ChartChannel<TDatum, number | null | undefined>;\n x2?: ChartChannel<TDatum, number | null | undefined>;\n y1?: ChartChannel<TDatum, number | null | undefined>;\n y2?: ChartChannel<TDatum, number | null | undefined>;\n radius?: ChartVisual<TDatum, number | string>;\n inset?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartCellOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n intensity?: ChartChannel<TDatum, number | null | undefined>;\n intent?: ChartDataIntent;\n minimumOpacity?: number;\n maximumOpacity?: number;\n inset?: number;\n radius?: number | string;\n}\n\nexport interface ChartTextOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n x?: ChartChannel<TDatum, ChartValue | null | undefined>;\n y?: ChartChannel<TDatum, ChartValue | null | undefined>;\n text?: ChartChannel<TDatum, string | number | null | undefined>;\n fontFamily?: ChartVisual<TDatum, string>;\n fontSize?: ChartVisual<TDatum, number | string>;\n fontWeight?: ChartVisual<TDatum, number | string>;\n textAnchor?: ChartVisual<TDatum, 'start' | 'middle' | 'end'>;\n dx?: ChartVisual<TDatum, number>;\n dy?: ChartVisual<TDatum, number>;\n}\n\nexport interface ChartArcOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n theta1?: ChartChannel<TDatum, number | null | undefined>;\n theta2?: ChartChannel<TDatum, number | null | undefined>;\n innerRadius?: ChartVisual<TDatum, number>;\n outerRadius?: ChartVisual<TDatum, number>;\n cornerRadius?: ChartVisual<TDatum, number>;\n padAngle?: ChartVisual<TDatum, number>;\n label?: ChartChannel<TDatum, string | null | undefined>;\n}\n\nexport interface ChartRadialOptions<TDatum> extends ChartBaseMarkOptions<TDatum> {\n angle?: ChartChannel<TDatum, ChartValue | null | undefined>;\n radius?: ChartChannel<TDatum, number | null | undefined>;\n radius1?: ChartChannel<TDatum, number | null | undefined>;\n radius2?: ChartChannel<TDatum, number | null | undefined>;\n curve?: CurveFactory;\n r?: ChartVisual<TDatum, number | string>;\n}\n\nexport type ChartMarkOptions<TDatum> =\n | ChartLineYOptions<TDatum>\n | ChartAreaYOptions<TDatum>\n | ChartBarOptions<TDatum>\n | ChartBoxYOptions<TDatum>\n | ChartDotOptions<TDatum>\n | ChartRuleOptions<TDatum>\n | ChartBandOptions<TDatum>\n | ChartRectOptions<TDatum>\n | ChartCellOptions<TDatum>\n | ChartTextOptions<TDatum>\n | ChartArcOptions<TDatum>\n | ChartRadialOptions<TDatum>;\n\nexport interface ChartSpec<TDatum = unknown> {\n marks: readonly ChartMark<TDatum>[] | readonly ChartMark<unknown>[];\n coordinate?: ChartCoordinate;\n x?: ChartAxisOptions;\n y?: ChartAxisOptions;\n angle?: ChartPolarAxisOptions;\n radius?: ChartAxisOptions;\n center?: ChartCenterOptions;\n margin?: number | ChartMargin;\n guides?: boolean;\n /** Clip graphical marks to the solved plot rectangle. Defaults to true. */\n clip?: boolean;\n color?: ChartColorOptions;\n focus?: ChartFocusMode;\n tooltip?: ChartTooltip<TDatum>;\n maxFocusDistance?: number;\n}\n\nexport type ChartSpecBuilder<TDatum = unknown> = (context: ChartBuildContext) => ChartSpec<TDatum>;\n\nexport interface ChartDefinition<TDatum = unknown> {\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>;\n}\n\nexport interface NormalizedStackDatum<TDatum> {\n data: TDatum;\n group: ChartKey;\n series: ChartKey;\n value: number;\n proportion: number;\n}\n\nexport interface NormalizeStackOptions<TDatum> {\n group: ChartChannel<TDatum, ChartKey>;\n series: ChartChannel<TDatum, ChartKey>;\n value: ChartChannel<TDatum, number>;\n}\n\nexport interface ChartPieDatum<TDatum> {\n data: TDatum;\n index: number;\n key: ChartKey;\n label: string;\n value: number;\n theta1: number;\n theta2: number;\n}\n\nexport interface ChartPieOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n key?: ChartChannel<TDatum, ChartKey>;\n label?: ChartChannel<TDatum, string>;\n sort?: (a: TDatum, b: TDatum) => number;\n}\n\nexport interface ChartBinDatum<TDatum> {\n key: string;\n x1: number;\n x2: number;\n x: number;\n count: number;\n cumulative: number;\n rows: readonly TDatum[];\n}\n\nexport interface ChartBinOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n thresholds?: number | readonly number[];\n}\n\nexport interface ChartDensityDatum {\n key: string;\n x: number;\n density: number;\n}\n\nexport interface ChartDensityOptions<TDatum> {\n value: ChartChannel<TDatum, number>;\n samples?: number;\n bandwidth?: number;\n}\n\nexport function defineChart<TDatum>(\n chart: ChartSpec<TDatum> | ChartSpecBuilder<TDatum>\n): ChartDefinition<TDatum> {\n return { chart };\n}\n\nfunction createMark<TDatum, TOptions extends ChartMarkOptions<TDatum>>(\n kind: ChartMarkKind,\n data: readonly TDatum[],\n options: TOptions\n): ChartMark<TDatum> {\n return { kind, data, options };\n}\n\n/** Compose polar marks and guides inside the shared chart scene. */\nexport function polar(options: ChartPolarContainerOptions): ChartMark {\n return { kind: 'polar', data: [], options: options as unknown as ChartMarkOptions<unknown> };\n}\n\nconst identity = <TValue>(value: TValue): TValue => value;\n\nexport function lineY<TDatum>(\n data: readonly TDatum[],\n options: ChartLineYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('line-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function areaY<TDatum>(\n data: readonly TDatum[],\n options: ChartAreaYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('area-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function barY<TDatum>(\n data: readonly TDatum[],\n options: ChartBarOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('bar-y', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function barX<TDatum>(\n data: readonly TDatum[],\n options: ChartBarOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('bar-x', data, {\n x: options.x ?? (identity as ChartChannel<TDatum, number>),\n y: options.y ?? ((_, index) => index),\n ...options,\n });\n}\n\nexport function boxY<TDatum>(\n data: readonly TDatum[],\n options: ChartBoxYOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('box-y', data, {\n x: options.x ?? (() => 'distribution'),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function dot<TDatum>(\n data: readonly TDatum[],\n options: ChartDotOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('dot', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function ruleX<TDatum>(\n data: readonly TDatum[],\n options: ChartRuleOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('rule-x', data, {\n x: options.x ?? (identity as ChartChannel<TDatum, ChartValue>),\n ...options,\n });\n}\n\nexport function ruleY<TDatum>(\n data: readonly TDatum[],\n options: ChartRuleOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('rule-y', data, {\n y: options.y ?? (identity as ChartChannel<TDatum, ChartValue>),\n ...options,\n });\n}\n\nexport function bandX<TDatum>(\n data: readonly TDatum[],\n options: ChartBandOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('band-x', data, options);\n}\n\nexport function bandY<TDatum>(\n data: readonly TDatum[],\n options: ChartBandOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('band-y', data, options);\n}\n\nexport function rect<TDatum>(\n data: readonly TDatum[],\n options: ChartRectOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('rect', data, options);\n}\n\nexport function cell<TDatum>(\n data: readonly TDatum[],\n options: ChartCellOptions<TDatum>\n): ChartMark<TDatum> {\n return createMark('cell', data, options);\n}\n\nexport function textMark<TDatum>(\n data: readonly TDatum[],\n options: ChartTextOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('text', data, {\n x: options.x ?? ((_, index) => index),\n y: options.y ?? ((_, index) => index),\n text: options.text ?? (identity as ChartChannel<TDatum, string>),\n ...options,\n });\n}\n\nexport function arcMark<TDatum>(\n data: readonly TDatum[],\n options: ChartArcOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('arc', data, {\n theta1: options.theta1 ?? ('theta1' as ChartChannel<TDatum, number>),\n theta2: options.theta2 ?? ('theta2' as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialLine<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-line', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialArea<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-area', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function radialDot<TDatum>(\n data: readonly TDatum[],\n options: ChartRadialOptions<TDatum> = {}\n): ChartMark<TDatum> {\n return createMark('radial-dot', data, {\n angle: options.angle ?? ((_, index) => index),\n radius: options.radius ?? (identity as ChartChannel<TDatum, number>),\n ...options,\n });\n}\n\nexport function channelValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n channel: ChartChannel<TDatum, TValue> | undefined\n): TValue | undefined {\n if (channel === undefined) return undefined;\n if (typeof channel === 'function') return channel(datum, index, data);\n if (datum == null || typeof datum !== 'object') return undefined;\n return (datum as Record<string, TValue>)[channel];\n}\n\nexport function visualValue<TDatum, TValue>(\n datum: TDatum,\n index: number,\n data: readonly TDatum[],\n value: ChartVisual<TDatum, TValue> | undefined,\n fallback: TValue\n): TValue {\n return typeof value === 'function'\n ? (value as (datum: TDatum, index: number, data: readonly TDatum[]) => TValue)(\n datum,\n index,\n data\n )\n : (value ?? fallback);\n}\n\nexport function normalizeStack<TDatum>(\n data: readonly TDatum[],\n options: NormalizeStackOptions<TDatum>\n): NormalizedStackDatum<TDatum>[] {\n const rows = data.map((datum, index) => {\n const group = channelValue(datum, index, data, options.group);\n const series = channelValue(datum, index, data, options.series);\n const value = channelValue(datum, index, data, options.value);\n if (group === undefined || series === undefined)\n throw new TypeError('normalizeStack requires a group and series key for every row.');\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)\n throw new RangeError('normalizeStack values must be finite, non-negative numbers.');\n return { data: datum, group, series, value };\n });\n const totals = new Map<string, number>();\n rows.forEach(row =>\n totals.set(chartValueKey(row.group), (totals.get(chartValueKey(row.group)) ?? 0) + row.value)\n );\n return rows.map(row => ({\n ...row,\n proportion:\n (totals.get(chartValueKey(row.group)) ?? 0) > 0\n ? row.value / (totals.get(chartValueKey(row.group)) as number)\n : 0,\n }));\n}\n\nexport function pieLayout<TDatum>(\n data: readonly TDatum[],\n options: ChartPieOptions<TDatum>\n): ChartPieDatum<TDatum>[] {\n const ordered = data.map((datum, index) => ({ datum, index }));\n if (options.sort) ordered.sort((a, b) => options.sort?.(a.datum, b.datum) ?? 0);\n const values = ordered.map(({ datum, index }) => {\n const value = channelValue(datum, index, data, options.value);\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;\n });\n const total = values.reduce((sum, value) => sum + value, 0);\n let position = 0;\n return ordered.flatMap(({ datum, index }, orderedIndex) => {\n const value = values[orderedIndex] ?? 0;\n if (!(value > 0) || !(total > 0)) return [];\n const theta1 = position;\n position += value / total;\n const key = channelValue(datum, index, data, options.key) ?? index;\n const label = channelValue(datum, index, data, options.label) ?? String(key);\n return [{ data: datum, index, key, label, value, theta1, theta2: position }];\n });\n}\n\nexport function binX<TDatum>(\n data: readonly TDatum[],\n options: ChartBinOptions<TDatum>\n): ChartBinDatum<TDatum>[] {\n const generator = d3Bin<TDatum, number>().value(\n (datum, index, rows) =>\n channelValue(datum, index, Array.from(rows), options.value) ?? Number.NaN\n );\n if (typeof options.thresholds === 'number') generator.thresholds(options.thresholds);\n else if (options.thresholds !== undefined) generator.thresholds([...options.thresholds]);\n const bins = generator(data as TDatum[]);\n let cumulative = 0;\n return bins.flatMap(bin => {\n const x1 = bin.x0;\n const x2 = bin.x1;\n if (x1 === undefined || x2 === undefined) return [];\n cumulative += bin.length;\n return [\n {\n key: `bin:${x1}:${x2}`,\n x1,\n x2,\n x: (x1 + x2) / 2,\n count: bin.length,\n cumulative,\n rows: [...bin],\n },\n ];\n });\n}\n\nexport function cumulativeBins<TDatum>(\n bins: readonly ChartBinDatum<TDatum>[]\n): ChartBinDatum<TDatum>[] {\n let cumulative = 0;\n return bins.map(bin => ({ ...bin, cumulative: (cumulative += bin.count) }));\n}\n\nexport function densityX<TDatum>(\n data: readonly TDatum[],\n options: ChartDensityOptions<TDatum>\n): ChartDensityDatum[] {\n const values = data\n .map((datum, index) => channelValue(datum, index, data, options.value))\n .filter((value): value is number => typeof value === 'number' && Number.isFinite(value))\n .sort((a, b) => a - b);\n if (values.length === 0) return [];\n const [minimum = 0, maximum = minimum + 1] = extent(values);\n const span = Math.max(Number.EPSILON, maximum - minimum);\n const sampleCount = Math.max(8, options.samples ?? 48);\n const sampleValues = ticks(minimum, maximum, sampleCount);\n const sigma = deviation(values) ?? span / 6;\n const bandwidth = Math.max(\n Number.EPSILON,\n options.bandwidth ?? 1.06 * sigma * Math.pow(values.length, -0.2)\n );\n const normalizer = 1 / (Math.sqrt(2 * Math.PI) * bandwidth * values.length);\n return sampleValues.map(x => ({\n key: `density:${x}`,\n x,\n density:\n values.reduce((sum, value) => {\n const u = (x - value) / bandwidth;\n return sum + Math.exp(-0.5 * u * u);\n }, 0) * normalizer,\n }));\n}\n\nexport function boxStatistics(values: readonly number[], whisker = 1.5) {\n const sorted = values.filter(Number.isFinite).sort((a, b) => a - b);\n if (sorted.length === 0) return undefined;\n const q1 = quantileSorted(sorted, 0.25) as number;\n const median = quantileSorted(sorted, 0.5) as number;\n const q3 = quantileSorted(sorted, 0.75) as number;\n const iqr = q3 - q1;\n const lowerFence = q1 - whisker * iqr;\n const upperFence = q3 + whisker * iqr;\n const lower = sorted.find(value => value >= lowerFence) ?? sorted[0];\n const upper =\n [...sorted].reverse().find(value => value <= upperFence) ?? sorted[sorted.length - 1];\n return {\n q1,\n median,\n q3,\n lower,\n upper,\n outliers: sorted.filter(value => value < lower || value > upper),\n };\n}\n\nexport function chartValueKey(value: unknown): string {\n if (value instanceof Date) return `date:${value.getTime()}`;\n return `${typeof value}:${String(value)}`;\n}\n", "import type { TextVariant } from '../components/Text/text-types';\n\n/** Shared public control sizes. Typography is derived; it is not a separate density API. */\nexport type ControlSize = 'lg' | 'md' | 'sm' | 'xs';\n\n/** Outer-density reduction used when a control is nested inside a same-size frame. */\nexport type ControlInsetDepth = 'single' | 'double';\n\n/** Complete text variant selected internally by each control size. */\nexport const CONTROL_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-large',\n md: 'text-body-medium',\n sm: 'text-body-small',\n xs: 'text-caption',\n};\n\n/** Supporting copy paired with each control density in two-line choice rows. */\nexport const CONTROL_SUPPORTING_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-medium',\n md: 'text-body-small',\n sm: 'text-caption',\n xs: 'text-caption',\n};\n", "import type { AnchoredAlign } from './anchored-position';\n\n/**\n * `choice-cell` aligns the first/last interactive row edge with the anchor,\n * allowing the popup frame to extend by the section inset. `popup-frame`\n * aligns the popup frame itself and is reserved for deliberate custom geometry.\n */\nexport type ChoicePopupAnchorAlignment = 'choice-cell' | 'popup-frame';\n\nexport interface ChoicePopupAlignOffsetInput {\n align: AnchoredAlign;\n alignOffsetPx: number;\n sectionInsetPx: number;\n anchorAlignment?: ChoicePopupAnchorAlignment;\n}\n\n/**\n * Resolve the cross-axis offset for a choice popup. Authored `alignOffsetPx`\n * remains an additive nudge after the shared inner-cell alignment is applied.\n */\nexport function resolveChoicePopupAlignOffset({\n align,\n alignOffsetPx,\n sectionInsetPx,\n anchorAlignment = 'choice-cell',\n}: ChoicePopupAlignOffsetInput): number {\n if (anchorAlignment === 'popup-frame' || align === 'center') return alignOffsetPx;\n return alignOffsetPx + (align === 'start' ? -sectionInsetPx : sectionInsetPx);\n}\n\n/** Minimum popup width that keeps both choice-cell edges aligned to a trigger. */\nexport function choicePopupMinWidth(anchorWidth: number, sectionInsetPx: number): number {\n return anchorWidth + sectionInsetPx * 2;\n}\n", "export type ClockPeriod = 'AM' | 'PM';\n\nexport interface ClockTimeParts {\n hour12: number;\n minute: number;\n period: ClockPeriod;\n}\n\nexport const CLOCK_HOURS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] as const;\nexport const CLOCK_PERIODS: readonly ClockPeriod[] = ['AM', 'PM'];\n\nconst CLOCK_TIME_PATTERN = /^\\d{2}:\\d{2}$/;\n\nexport function isClockTime(value: string): boolean {\n if (typeof value !== 'string' || !CLOCK_TIME_PATTERN.test(value)) return false;\n const [hour, minute] = value.split(':').map(Number);\n return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;\n}\n\nexport function clockMinuteStep(step: string | number = 60): number {\n const seconds = typeof step === 'number' ? step : Number(step);\n if (!Number.isFinite(seconds) || seconds <= 0) return 1;\n if (seconds < 60) return 1;\n return Math.max(1, Math.round(seconds / 60));\n}\n\n/** Minute choices for a positive whole-minute stride; sub-minute strides fall back to one. */\nexport function clockMinutes(step: number = 1, baseMinute: number = 0): number[] {\n const stride = Number.isFinite(step) ? Math.max(1, Math.floor(step)) : 1;\n const normalizedBase = Number.isFinite(baseMinute)\n ? ((Math.floor(baseMinute) % 60) + 60) % 60\n : 0;\n const values = new Set<number>();\n for (let offset = 0; offset < 1440; offset += stride) {\n values.add((normalizedBase + offset) % 60);\n }\n return [...values].sort((a, b) => a - b);\n}\n\nexport function splitClockTime(value: string): ClockTimeParts | null {\n if (!isClockTime(value)) return null;\n const [hour24, minute] = value.split(':').map(Number);\n const period: ClockPeriod = hour24 >= 12 ? 'PM' : 'AM';\n const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;\n return { hour12, minute, period };\n}\n\nexport function joinClockTime(parts: ClockTimeParts): string {\n if (\n !parts ||\n !Number.isInteger(parts.hour12) ||\n parts.hour12 < 1 ||\n parts.hour12 > 12 ||\n !Number.isInteger(parts.minute) ||\n parts.minute < 0 ||\n parts.minute > 59 ||\n (parts.period !== 'AM' && parts.period !== 'PM')\n )\n return '';\n const hour24 =\n parts.period === 'AM'\n ? parts.hour12 === 12\n ? 0\n : parts.hour12\n : parts.hour12 === 12\n ? 12\n : parts.hour12 + 12;\n return `${String(hour24).padStart(2, '0')}:${String(parts.minute).padStart(2, '0')}`;\n}\n\n/** Readable 12-hour label for filled clock values such as `09:00` \u2192 `9:00 AM`. */\nexport function formatClockTimeLabel(value: string): string {\n const parts = splitClockTime(value);\n if (!parts) return '';\n return `${parts.hour12}:${String(parts.minute).padStart(2, '0')} ${parts.period}`;\n}\n\n/** Parse a typed clock time: `HH:MM`, `H:MM`, or a 12-hour label such as `9:00 AM`. */\nexport function parseLooseClockTime(value: string): string {\n if (typeof value !== 'string') return '';\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isClockTime(trimmed)) return trimmed;\n\n const twentyFour = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n if (twentyFour) {\n const hour = Number(twentyFour[1]);\n const minute = Number(twentyFour[2]);\n if (hour > 23 || minute > 59) return '';\n return `${String(hour).padStart(2, '0')}:${twentyFour[2]}`;\n }\n\n const meridiem = trimmed.match(/^(\\d{1,2})(?::(\\d{2}))?\\s*([AaPp])\\.?[Mm]\\.?$/);\n if (!meridiem) return '';\n const hour12 = Number(meridiem[1]);\n const minute = meridiem[2] ? Number(meridiem[2]) : 0;\n if (hour12 < 1 || hour12 > 12 || minute > 59) return '';\n const period: ClockPeriod = meridiem[3].toUpperCase() === 'P' ? 'PM' : 'AM';\n return joinClockTime({ hour12, minute, period });\n}\n\nexport function isClockTimeOutOfRange(value: string, min?: string, max?: string): boolean {\n if (!isClockTime(value)) return true;\n if (min && isClockTime(min) && value < min) return true;\n if (max && isClockTime(max) && value > max) return true;\n return false;\n}\n\n/** Whether a minute-precision clock value aligns to the configured native step. */\nexport function isClockTimeStepAligned(\n value: string,\n step: string | number = 60,\n min?: string\n): boolean {\n if (!isClockTime(value)) return false;\n const valueParts = value.split(':').map(Number);\n const baseParts = min && isClockTime(min) ? min.split(':').map(Number) : [0, 0];\n const stride = clockMinuteStep(step);\n const valueMinutes = valueParts[0] * 60 + valueParts[1];\n const baseMinutes = baseParts[0] * 60 + baseParts[1];\n return (valueMinutes - baseMinutes) % stride === 0;\n}\n\n/** Move within a finite list without wrapping past the first or last item. */\nexport function stepBoundedIndex(index: number, offset: number, length: number): number {\n if (length <= 0) return 0;\n return Math.min(length - 1, Math.max(0, index + offset));\n}\n", "export const DATE_FILTER_RELATIVE_PRESETS = [\n { label: 'Today', value: 'today', days: 1, offset: 0 },\n { label: 'Yesterday', value: 'yesterday', days: 1, offset: -1 },\n { label: 'Last 7 days', value: 'last-7-days', days: 7, offset: 0 },\n { label: 'Last 14 days', value: 'last-14-days', days: 14, offset: 0 },\n { label: 'Last 30 days', value: 'last-30-days', days: 30, offset: 0 },\n { label: 'Last 60 days', value: 'last-60-days', days: 60, offset: 0 },\n { label: 'Last 90 days', value: 'last-90-days', days: 90, offset: 0 },\n] as const;\n\nexport type DateFilterRelativePreset = (typeof DATE_FILTER_RELATIVE_PRESETS)[number]['value'];\nexport type DateFilterRelativeValue = `relative:${DateFilterRelativePreset}`;\nexport type DateFilterRangeValue = `range:${string}/${string}`;\nexport type DateFilterValue = DateFilterRelativeValue | DateFilterRangeValue;\n\nexport interface DateFilterRange {\n start: string;\n end: string;\n}\n\nexport type ParsedDateFilterValue =\n | { kind: 'relative'; preset: DateFilterRelativePreset }\n | ({ kind: 'range' } & DateFilterRange);\n\nconst ISO_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst ISO_CALENDAR_DATE_LABEL = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\n/** Validate a timezone-free Gregorian day with a four-digit year from 0001 through 9999. */\nexport function isIsoCalendarDate(value: string): boolean {\n if (typeof value !== 'string' || !ISO_DATE_PATTERN.test(value)) return false;\n const [year, month, day] = value.split('-').map(Number);\n if (year < 1) return false;\n const date = new Date(`${value}T00:00:00Z`);\n return (\n date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day\n );\n}\n\n/** Readable calendar date for filled ISO values such as `2026-09-10` \u2192 `Sep 10, 2026`. */\nexport function formatIsoCalendarDateLabel(value: string): string {\n if (!isIsoCalendarDate(value)) return '';\n return ISO_CALENDAR_DATE_LABEL.formatToParts(new Date(`${value}T00:00:00Z`))\n .map(part => (part.type === 'year' ? part.value.padStart(4, '0') : part.value))\n .join('');\n}\n\nconst MONTH_LABELS = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\n\n/** Parse a typed calendar date: ISO, `M/D/YYYY`, or a short-month label such as `Sep 10, 2026`. */\nexport function parseLooseCalendarDate(value: string): string {\n if (typeof value !== 'string') return '';\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isIsoCalendarDate(trimmed)) return trimmed;\n\n const numeric = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (numeric) {\n const iso = `${numeric[3]}-${numeric[1].padStart(2, '0')}-${numeric[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n }\n\n const labelled = trimmed.match(/^([A-Za-z]{3})\\s+(\\d{1,2}),\\s+(\\d{4})$/);\n if (!labelled) return '';\n const monthIndex = MONTH_LABELS.indexOf(labelled[1].toLowerCase());\n if (monthIndex < 0) return '';\n const iso = `${labelled[3]}-${String(monthIndex + 1).padStart(2, '0')}-${labelled[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n}\n\n/** Shift whole calendar days in UTC; return an empty value for invalid input or year overflow. */\nexport function shiftIsoCalendarDate(value: string, days: number): string {\n if (!isIsoCalendarDate(value) || !Number.isSafeInteger(days)) return '';\n const date = new Date(`${value}T00:00:00Z`);\n date.setUTCDate(date.getUTCDate() + days);\n const year = date.getUTCFullYear();\n return year >= 1 && year <= 9999 ? date.toISOString().slice(0, 10) : '';\n}\n\nexport function dateFilterRelativeValue(preset: DateFilterRelativePreset): DateFilterRelativeValue {\n return `relative:${preset}`;\n}\n\nexport function dateFilterRangeValue(start: string, end: string = start): DateFilterRangeValue {\n const ordered = start <= end ? [start, end] : [end, start];\n return `range:${ordered[0]}/${ordered[1]}`;\n}\n\nexport function parseDateFilterValue(value: unknown): ParsedDateFilterValue | null {\n if (typeof value !== 'string' || !value) return null;\n\n if (value.startsWith('relative:')) {\n const preset = value.slice('relative:'.length) as DateFilterRelativePreset;\n return DATE_FILTER_RELATIVE_PRESETS.some(candidate => candidate.value === preset)\n ? { kind: 'relative', preset }\n : null;\n }\n\n if (value.startsWith('range:')) {\n const [start, end, ...rest] = value.slice('range:'.length).split('/');\n if (rest.length || !isIsoCalendarDate(start) || !isIsoCalendarDate(end)) return null;\n return start <= end ? { kind: 'range', start, end } : { kind: 'range', start: end, end: start };\n }\n\n // Preserve the previous single-date contract as a one-day range.\n return isIsoCalendarDate(value) ? { kind: 'range', start: value, end: value } : null;\n}\n\nexport function normalizeDateFilterValue(value: unknown): DateFilterValue | '' {\n const parsed = parseDateFilterValue(value);\n if (!parsed) return '';\n return parsed.kind === 'relative'\n ? dateFilterRelativeValue(parsed.preset)\n : dateFilterRangeValue(parsed.start, parsed.end);\n}\n\nexport function resolveDateFilterRange(\n value: unknown,\n referenceDate: string\n): DateFilterRange | null {\n if (!isIsoCalendarDate(referenceDate)) return null;\n const parsed = parseDateFilterValue(value);\n if (!parsed) return null;\n if (parsed.kind === 'range') return { start: parsed.start, end: parsed.end };\n\n const preset = DATE_FILTER_RELATIVE_PRESETS.find(candidate => candidate.value === parsed.preset);\n if (!preset) return null;\n const end = shiftIsoCalendarDate(referenceDate, preset.offset);\n const start = shiftIsoCalendarDate(end, -(preset.days - 1));\n return start && end ? { start, end } : null;\n}\n"],
|
|
5
|
+
"mappings": ";AAEO,IAAM,kBAAyD;AAAA,EACpE,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,cAAc,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,YAAY;AAAA,EAC1F,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,mBAAmB,MAAM,OAAO,0CAA0C,EAAE,KAAK,OAAK,EAAE,iBAAiB;AAAA,EACzG,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,QAAQ,MAAM,OAAO,+BAA+B,EAAE,KAAK,OAAK,EAAE,MAAM;AAAA,EACxE,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,WAAW,MAAM,OAAO,kCAAkC,EAAE,KAAK,OAAK,EAAE,SAAS;AAAA,EACjF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,eAAe,MAAM,OAAO,sCAAsC,EAAE,KAAK,OAAK,EAAE,aAAa;AAAA,EAC7F,gBAAgB,MAAM,OAAO,uCAAuC,EAAE,KAAK,OAAK,EAAE,cAAc;AAAA,EAChG,WAAW,MAAM,OAAO,kCAAkC,EAAE,KAAK,OAAK,EAAE,SAAS;AAAA,EACjF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,iBAAiB,MAAM,OAAO,wCAAwC,EAAE,KAAK,OAAK,EAAE,eAAe;AAAA,EACnG,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,cAAc,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,YAAY;AAAA,EAC1F,aAAa,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACvF,cAAc,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,YAAY;AAAA,EAC1F,cAAc,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,YAAY;AAAA,EAC1F,WAAW,MAAM,OAAO,kCAAkC,EAAE,KAAK,OAAK,EAAE,SAAS;AAAA,EACjF,YAAY,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,UAAU;AAAA,EACpF,mBAAmB,MAAM,OAAO,0CAA0C,EAAE,KAAK,OAAK,EAAE,iBAAiB;AAAA,EACzG,kBAAkB,MAAM,OAAO,yCAAyC,EAAE,KAAK,OAAK,EAAE,gBAAgB;AACxG;;;ACjCO,IAAM,iBAAwD;AAAA,EACnE,gBAAgB,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,cAAc;AAAA,EAC9F,iBAAiB,MAAM,OAAO,sCAAsC,EAAE,KAAK,OAAK,EAAE,eAAe;AAAA,EACjG,sBAAsB,MAAM,OAAO,2CAA2C,EAAE,KAAK,OAAK,EAAE,oBAAoB;AAAA,EAChH,kBAAkB,MAAM,OAAO,uCAAuC,EAAE,KAAK,OAAK,EAAE,gBAAgB;AAAA,EACpG,gBAAgB,MAAM,OAAO,qCAAqC,EAAE,KAAK,OAAK,EAAE,cAAc;AAAA,EAC9F,qBAAqB,MAAM,OAAO,0CAA0C,EAAE,KAAK,OAAK,EAAE,mBAAmB;AAAA,EAC7G,yBAAyB,MAAM,OAAO,8CAA8C,EAAE,KAAK,OAAK,EAAE,uBAAuB;AAAA,EACzH,aAAa,MAAM,OAAO,kCAAkC,EAAE,KAAK,OAAK,EAAE,WAAW;AAAA,EACrF,QAAQ,MAAM,OAAO,6BAA6B,EAAE,KAAK,OAAK,EAAE,MAAM;AAAA,EACtE,cAAc,MAAM,OAAO,mCAAmC,EAAE,KAAK,OAAK,EAAE,YAAY;AAAA,EACxF,eAAe,MAAM,OAAO,oCAAoC,EAAE,KAAK,OAAK,EAAE,aAAa;AAAA,EAC3F,WAAW,MAAM,OAAO,gCAAgC,EAAE,KAAK,OAAK,EAAE,SAAS;AAAA,EAC/E,SAAS,MAAM,OAAO,8BAA8B,EAAE,KAAK,OAAK,EAAE,OAAO;AAAA,EACzE,WAAW,MAAM,OAAO,gCAAgC,EAAE,KAAK,OAAK,EAAE,SAAS;AAAA,EAC/E,iBAAiB,MAAM,OAAO,sCAAsC,EAAE,KAAK,OAAK,EAAE,eAAe;AAAA,EACjG,WAAW,MAAM,OAAO,gCAAgC,EAAE,KAAK,OAAK,EAAE,SAAS;AACjF;;;ACRA,IAAM,YAAY,uBAAO,IAAI,sBAAsB;AAS5C,SAAS,aAAa,MAAc,UAAgC;AACzE,SAAO,GAAG,QAAQ,IAAI,IAAI;AAC5B;AAEA,SAAS,OAAO,SAAkC,MAAuB;AACvE,SAAO,OAAO,UAAU,eAAe,KAAK,SAAS,IAAI;AAC3D;AAsBO,SAAS,oBAAoB,MAA4B;AAC9D,MAAI,OAAO,iBAAiB,IAAI,EAAG,QAAO;AAC1C,MAAI,OAAO,gBAAgB,IAAI,EAAG,QAAO;AACzC,SAAO;AACT;AAEO,SAAS,YAA0B;AACxC,QAAM,IAAI;AACV,SAAQ,gCAAiB,oBAAI,IAAI;AACnC;AAoCO,SAAS,cAAc,OAAqC;AACjE,QAAM,QAAQ,UAAU;AACxB,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,UAAM,IAAI,aAAa,MAAM,oBAAoB,IAAI,CAAC,GAAG,GAAG;AAAA,EAC9D;AACF;;;ACjGA,IAAM,gBAAgB,oBAAI,IAAoB;AAC9C,IAAM,SAAS,oBAAI,QAA+B;AAClD,IAAM,cAAc;AAEpB,SAAS,cAAc,OAAmC;AACxD,QAAM,SAAS,cAAc,IAAI,KAAK;AACtC,MAAI,WAAW,OAAW,QAAO;AACjC,MAAI,CAAC,mDAAmD,KAAK,KAAK,EAAG,QAAO;AAC5E,QAAM,SAAS,OAAO,MAAM,QAAQ,QAAQ,EAAE,CAAC;AAC/C,MAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,MAAI,cAAc,QAAQ,YAAa,eAAc,MAAM;AAC3D,gBAAc,IAAI,OAAO,MAAM;AAC/B,SAAO;AACT;AAEA,SAAS,gBAAgB,eAAsC;AAC7D,MAAI,QAAQ,OAAO,IAAI,aAAa;AACpC,MAAI,CAAC,OAAO;AACV,YAAQ,cAAc,cAAc,KAAK;AACzC,UAAM,aAAa,eAAe,MAAM;AACxC,UAAM,MAAM,UACV;AACF,WAAO,IAAI,eAAe,KAAK;AAAA,EACjC;AACA,MAAI,CAAC,MAAM,YAAa,eAAc,gBAAgB,YAAY,KAAK;AACvE,SAAO;AACT;AAGO,SAAS,wBAA8B;AAC5C,gBAAc,MAAM;AACtB;AAOO,SAAS,mBACd,OACA,UACA,SACQ;AACR,QAAM,WAAW,UAAU,UAAa,UAAU,QAAQ,UAAU,KAAK,WAAW;AACpF,MAAI,OAAO,aAAa,SAAU,QAAO,OAAO,SAAS,QAAQ,IAAI,WAAW;AAEhF,QAAM,UAAU,SAAS,KAAK;AAC9B,MAAI,CAAC,QAAS,QAAO,mBAAmB,UAAU,GAAG,OAAO;AAC5D,QAAM,UAAU,cAAc,OAAO;AACrC,MAAI,YAAY,OAAW,QAAO;AAElC,QAAM,iBAAiB,OAAO,aAAa,WAAW,WAAW,cAAc,SAAS,KAAK,CAAC;AAC9F,QAAM,eAAe,OAAO,SAAS,cAAc,IAAK,iBAA4B;AACpF,QAAM,gBACJ,SAAS,kBAAkB,OAAO,aAAa,cAAc,OAAO;AACtE,QAAM,OAAO,eAAe;AAC5B,MAAI,CAAC,eAAe,mBAAmB,CAAC,KAAM,QAAO;AAErD,QAAM,YAAY,aAAa,KAAK,OAAO,IAAI,OAAO,OAAO,MAAM;AACnE,MAAI,CAAC,KAAK,IAAI,SAAS,QAAQ,SAAS,EAAG,QAAO;AAClD,QAAM,aAAa,KAAK,iBAAiB,WAAW,cAAc,eAAe;AACjF,QAAM,iBAAiB,UAAU,MAAM,2BAA2B,IAAI,CAAC;AACvE,MAAI,gBAAgB;AAClB,UAAM,cAAc,WAAW,iBAAiB,cAAc,EAAE,KAAK;AACrE,QAAI,CAAC,YAAa,QAAO;AAEzB,UAAM,eAAe,cAAc,WAAW;AAC9C,QAAI,iBAAiB,OAAW,QAAO;AAAA,EACzC;AAEA,QAAM,QAAQ,gBAAgB,aAAa;AAC3C,QAAM,YAAY,IAAI,IAAI,CAAC,GAAG,UAAU,SAAS,qBAAqB,CAAC,EAAE,IAAI,WAAS,MAAM,CAAC,CAAC,CAAC;AAI/F,aAAW,QAAQ,WAAW;AAC5B,UAAM,MAAM,YAAY,MAAM,WAAW,iBAAiB,IAAI,EAAE,KAAK,KAAK,SAAS;AAAA,EACrF;AACA,QAAM,MAAM,OAAO,WAAW;AAC9B,QAAM,MAAM,WAAW,WAAW;AAClC,QAAM,MAAM,aAAa,WAAW;AAEpC,QAAM,MAAM,OAAO;AACnB,QAAM,MAAM,OAAO;AACnB,MAAI;AACF,QAAI,CAAC,MAAM,MAAM,KAAM,QAAO;AAC9B,UAAM,SAAS,WAAW,KAAK,iBAAiB,KAAK,EAAE,IAAI;AAC3D,WAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C,UAAE;AACA,UAAM,MAAM,OAAO;AACnB,eAAW,QAAQ,UAAW,OAAM,MAAM,eAAe,IAAI;AAAA,EAC/D;AACF;;;AC5FA,IAAM,iBAAiB;AACvB,IAAMA,eAAc;AACpB,IAAM,UAAU,oBAAI,IAAoB;AACxC,IAAM,UAAU,oBAAI,IAA+B;AAGnD,SAAS,SAAY,OAAuB,KAAa,OAAa;AACpE,MAAI,MAAM,QAAQC,aAAa,OAAM,OAAO,MAAM,KAAK,EAAE,KAAK,EAAE,KAAM;AACtE,QAAM,IAAI,KAAK,KAAK;AACpB,SAAO;AACT;AAEO,SAAS,oBAAoB,QAAyB;AAC3D,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,KAAK,EAAG,QAAO;AACzD,QAAM,MAAM,OAAO,KAAK;AACxB,QAAM,SAAS,QAAQ,IAAI,GAAG;AAC9B,MAAI,OAAQ,QAAO;AACnB,MAAI,WAAW;AACf,MAAI;AACF,eAAW,KAAK,aAAa,mBAAmB,GAAG,EAAE,CAAC,KAAK;AAAA,EAC7D,QAAQ;AAAA,EAER;AACA,SAAO,SAAS,SAAS,KAAK,QAAQ;AACxC;AAEA,SAAS,OAAO,QAAgB,SAAyB;AACvD,SAAO,KAAK,UAAU,CAAC,QAAQ,OAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAChG;AAEO,SAAS,gBACd,QACA,UAAoC,CAAC,GAClB;AACnB,QAAM,WAAW,oBAAoB,MAAM;AAC3C,QAAM,MAAM,OAAO,UAAU,OAAO;AACpC,SAAO,QAAQ,IAAI,GAAG,KAAK,SAAS,SAAS,KAAK,IAAI,KAAK,aAAa,UAAU,OAAO,CAAC;AAC5F;;;ACrCA,IAAM,gBAAyD;AAAA,EAC7D,EAAE,WAAW,KAAe,QAAQ,IAAI;AAAA,EACxC,EAAE,WAAW,KAAW,QAAQ,IAAI;AAAA,EACpC,EAAE,WAAW,KAAO,QAAQ,IAAI;AAClC;AAGO,SAAS,oBAAoB,OAAe,QAAyB;AAC1E,MAAI,QAAQ;AACV,WAAO,gBAAgB,QAAQ;AAAA,MAC7B,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,uBAAuB;AAAA,IACzB,CAAC,EAAE,OAAO,KAAK;AAAA,EACjB;AACA,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,QAAM,MAAM,KAAK,IAAI,KAAK;AAC1B,MAAI,MAAM,IAAM,QAAO,OAAO,KAAK;AAEnC,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,OAAO,cAAc,CAAC;AAC5B,QAAI,MAAM,KAAK,UAAW;AAE1B,QAAI,SAAS,KAAK,MAAO,MAAM,KAAK,YAAa,EAAE,IAAI;AAEvD,QAAI,UAAU,OAAQ,IAAI,GAAG;AAC3B,YAAM,OAAO,cAAc,IAAI,CAAC;AAChC,eAAS,KAAK,MAAO,MAAM,KAAK,YAAa,EAAE,IAAI;AACnD,aAAO,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,MAAM;AAAA,IACvC;AACA,WAAO,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,MAAM;AAAA,EACvC;AACA,SAAO,OAAO,KAAK;AACrB;;;AC9BO,SAAS,iBACd,OACA,WAA+B,GAC/B,QACQ;AACR,QAAM,YAAY,aAAa,IAAI,IAAI;AACvC,QAAM,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ;AAE/C,SAAO,gBAAgB,QAAQ;AAAA,IAC7B,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,CAAC,EAAE,OAAO,KAAK;AACjB;;;AC4BA,IAAM,YAA0B,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,KAAK;AAEnF,SAAS,SAAS,OAAmD;AACnE,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAC3D;AAQO,SAAS,oBACd,SACA,UACc;AACd,MAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAS,QAAQ,EAAG,QAAO;AAGtD,QAAM,QAAQ,OAAO,YAAY,UAAU,UAAU,QAAQ,EAAE,CAAC;AAChE,MAAI,UAAU,EAAG,QAAO;AAExB,QAAM,WAAW,KAAK,IAAI,KAAK;AAC/B,QAAM,QAAQ,aAAa,IAAI,IAAI,KAAK,IAAI,QAAQ,QAAQ;AAE5D,SAAO,EAAE,OAAO,UAAU,OAAO,WAAW,QAAQ,IAAI,OAAO,OAAO;AACxE;AASO,SAAS,mBACd,SACA,UACA,UAAqC,CAAC,GAClB;AACpB,QAAM,EAAE,WAAW,OAAO,UAAU,OAAO,UAAU,YAAY,OAAO,IAAI;AAC5E,QAAM,SAAS,oBAAoB,SAAS,QAAQ;AACpD,MAAI,CAAC,OAAO,UAAW,QAAO;AAG9B,QAAM,OAAO,OAAO,cAAc;AAClC,QAAM,OAAwB,UAAU,YAAY,SAAS,WAAW,aAAa;AAErF,QAAM,QACJ,YAAY,eACR,gBAAgB,QAAQ,EAAE,OAAO,WAAW,uBAAuB,EAAE,CAAC,EAAE,OAAO,OAAO,KAAK,IAC3F,oBAAoB,OAAO,UAAU,MAAM;AAEjD,SAAO,EAAE,WAAW,OAAO,WAAW,OAAO,KAAK;AACpD;;;AC3FO,SAAS,uBAAuB,IAAoB,MAAc,UAA0B;AACjG,KAAG,cAAc;AACjB,MAAI,YAAY,KAAK,GAAG,sBAAsB,KAAK,SAAU,QAAO;AAEpE,MAAI,KAAK;AACT,MAAI,KAAK,KAAK;AACd,SAAO,KAAK,IAAI;AACd,UAAM,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC;AACnC,OAAG,cAAc,GAAG,KAAK,MAAM,GAAG,GAAG,CAAC;AACtC,QAAI,GAAG,sBAAsB,KAAK,UAAU;AAC1C,WAAK;AAAA,IACP,OAAO;AACL,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AACA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,WAAM;AAC5C;;;ACvBA,IAAM,wBAAwB;AAOvB,SAAS,mBAAmB,SAA+B;AAChE,QAAM,SAAS,QAAQ,cAA2B,mBAAmB,KAAK;AAC1E,SACE,OAAO,cAAc,OAAO,cAAc,yBAC1C,OAAO,eAAe,OAAO,eAAe;AAEhD;;;ACbO,SAAS,eAAe,OAAe,UAA0B;AACtE,QAAM,aAAa,MAAM,KAAK,EAAE,MAAM,KAAK,EAAE,CAAC,KAAK;AACnD,QAAM,MAAM,WAAW,UAAU;AACjC,MAAI,OAAO,MAAM,GAAG,EAAG,QAAO;AAC9B,MAAI,SAAS,KAAK,UAAU,EAAG,QAAO;AACtC,MAAI,QAAQ,KAAK,UAAU,EAAG,QAAO,MAAM;AAC3C,SAAO;AACT;AAEA,SAAS,qBAAqB,KAA4B;AACxD,QAAM,WAAW,IAAI,MAAM,qBAAqB;AAChD,MAAI,SAAU,QAAO,SAAS,CAAC,EAAE,KAAK;AACtC,MAAI,IAAI,WAAW,IAAI,EAAG,QAAO,IAAI,KAAK;AAC1C,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAe,UAA0B;AAChE,MAAI,OAAO,aAAa,YAAa,QAAO;AAE5C,QAAM,OAAO,qBAAqB,KAAK;AACvC,MAAI,CAAC,KAAM,QAAO,eAAe,OAAO,QAAQ;AAEhD,QAAM,MAAM,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,IAAI,EAAE,KAAK;AACnF,SAAO,eAAe,KAAK,QAAQ;AACrC;AAMO,SAAS,iBACd,OACA,eACQ;AACR,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,QAAM,QAAQ,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AACzE,QAAM,OAAO,qBAAqB,KAAK;AAEvC,MAAI,MAAM;AACR,WAAO,gBAAgB,OAAO,gBAAgB,eAAe,GAAG,CAAC;AAAA,EACnE;AAEA,SAAO,eAAe,OAAO,gBAAgB,eAAe,GAAG,CAAC;AAClE;AAGO,SAAS,uBAAgC;AAC9C,SACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,cAC7B,OAAO,WAAW,kCAAkC,EAAE;AAE1D;AAMO,SAAS,oBACd,OACA,eACQ;AACR,SAAO,qBAAqB,IAAI,IAAI,iBAAiB,OAAO,aAAa;AAC3E;;;AChEO,IAAM,4BAA4B;AAElC,IAAM,gCAAgC;AAoB7C,IAAM,aAAsD;AAAA,EAC1D,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AACd;AAEA,IAAM,WAAW,OAAO,yBAAyB,KAAK,6BAA6B;AAoB5E,SAAS,0BACd,OAA2B,YAC3B,QACQ;AACR,MAAI,OAAQ,QAAO;AACnB,SAAO,OAAO,UAAU,eAAe,KAAK,YAAY,IAAI,IACxD,WAAW,IAA+B,IAC1C;AACN;AAGO,SAAS,wBACd,OAA2B,YAC3B,QACwB;AACxB,SAAO;AAAA,IACL,CAAC,yBAAyB,GAAG,0BAA0B,MAAM,MAAM;AAAA,EACrE;AACF;AAMO,SAAS,wBAAwB,MAAkC;AACxE,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,kDAAkD,QAAQ;AAAA,IACnE,KAAK;AACH,aAAO,uDAAuD,QAAQ;AAAA,IACxE,KAAK;AACH,aAAO,iDAAiD,QAAQ;AAAA,IAClE,KAAK;AACH,aAAO,sDAAsD,QAAQ;AAAA,EACzE;AACF;AAGO,SAAS,wBACd,MACA,OAA2B,YAC3B,QACwB;AACxB,QAAM,OAAO,wBAAwB,IAAI;AACzC,SAAO;AAAA,IACL,GAAG,wBAAwB,MAAM,MAAM;AAAA,IACvC,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AACF;AAGO,SAAS,uBAAuB,MAAsD;AAC3F,QAAM,QAAQ,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AAClE,QAAM,UAAmC;AAAA,IACvC,oBAAoB;AAAA,IACpB,kCAAkC,KAAK,gBAAgB;AAAA,IACvD,4BAA4B,KAAK,WAAW;AAAA,EAC9C;AAEA,aAAW,QAAQ,OAAO;AACxB,YAAQ,qBAAqB,IAAI,EAAE,IAAI;AAAA,EACzC;AAEA,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,UAAU,MAAM;AAClB,YAAQ,0BAA0B,IAAI;AAAA,EACxC,WAAW,SAAS,OAAO,UAAU,UAAU;AAC7C,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM,IAAI,GAAG;AACf,gBAAQ,qBAAqB,IAAI,UAAU,IAAI;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGO,SAAS,eAAe,IAAiB,MAA0B,YAAY,GAAY;AAChG,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,GAAG,aAAa;AAAA,IACzB,KAAK;AACH,aAAO,GAAG,eAAe,GAAG,YAAY,GAAG,gBAAgB;AAAA,IAC7D,KAAK;AACH,aAAO,GAAG,cAAc;AAAA,IAC1B,KAAK;AACH,aAAO,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe;AAAA,EAC9D;AACF;;;ACtJA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGA,IAAM,iBAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA;AAAA,EAErB,oBAAoB;AAAA;AAAA,EAEpB,sBAAsB;AAAA;AAAA,EAEtB,cAAc;AAAA;AAAA,EAEd,cAAc;AAChB;AAKO,IAAM,oBAAoB;AAAA,EAC/B,UAAU,OAAO,iBAAiB;AAAA,EAClC,UAAU,OAAO,iBAAiB;AAAA,EAClC,aAAa,OAAO,oBAAoB;AAAA,EACxC,aAAa,OAAO,oBAAoB;AAC1C;;;ACnFO,IAAM,2BAA2B;AAGjC,SAAS,oBACd,WACA,SACA,SACM;AACN,YAAU,YAAY,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,UAAU,UAAU,EAAE;AACrF;;;ACJO,SAAS,oBACd,WACA,OACA,UAAsC,CAAC,GACjC;AACN,QAAM,aAAa,QAAQ,WAAW,OAAO;AAC7C,YAAU,aAAa,YAAY,QAAQ,UAAU,SAAY,QAAQ,QAAQ,KAAK;AACxF;AAMO,SAAS,4BACd,WACA,MACA,QACA,UAA8C,CAAC,GACzC;AACN,QAAM,QAAQ,QAAQ,UAAU,SAAY,KAAK,UAAU,MAAM,IAAI,QAAQ;AAC7E,MAAI,QAAQ,YAAY,CAAC,QAAQ,OAAO,WAAW,GAAG;AACpD,cAAU,aAAa,MAAM,KAAK;AAClC;AAAA,EACF;AAEA,QAAM,OAAO,IAAI,SAAS;AAC1B,SAAO,QAAQ,WAAS,KAAK,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC;AACxD,YAAU,aAAa,MAAM,KAAK;AACpC;AAEO,SAAS,uBAAuB,OAAyB,WAAmB,IAAY;AAC7F,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEO,SAAS,4BAA4B,OAAmC;AAC7E,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC;AACvC,MAAI;AACF,UAAM,WAAoB,KAAK,MAAM,KAAK;AAC1C,WAAO,MAAM,QAAQ,QAAQ,IACzB,SAAS,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IACrE,CAAC;AAAA,EACP,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,4BACd,OACA,eACU;AACV,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC;AACvC,MAAI;AACF,UAAM,WAAoB,KAAK,MAAM,KAAK;AAC1C,QAAI,CAAC,MAAM,QAAQ,QAAQ,EAAG,QAAO,CAAC;AACtC,UAAM,SAAS,SACZ;AAAA,MACC,CAAC,UACC,OAAO,UAAU,YAAa,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA,IACrF,EACC,IAAI,MAAM,EACV,OAAO,WAAS,OAAO,SAAS,KAAK,CAAC;AACzC,WAAO,kBAAkB,SAAY,SAAS,OAAO,MAAM,GAAG,aAAa;AAAA,EAC7E,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;;;AC3EA,IAAM,oBAAgD,CAAC,SAAS,QAAQ;AAOjE,SAAS,eACd,OACA,UAAiC,CAAC,GACd;AACpB,QAAM,YAAY,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAC7D,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,UACJ,QAAQ,YAAY,OAAO,aAAa,cAAc,SAAY,SAAS;AAE7E,MAAI;AACF,UAAM,MAAM,YAAY,SAAY,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,WAAW,OAAO;AACnF,UAAM,YAAY,QAAQ,aAAa;AACvC,WAAO,UAAU,SAAS,IAAI,QAA2B,IAAI,IAAI,OAAO;AAAA,EAC1E,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AC3BO,SAAS,kBAAkB,OAA8C;AAC9E,SAAO;AAAA,IACL,yBAAyB,UAAU;AAAA,IACnC,0BAA0B,UAAU;AAAA,EACtC;AACF;;;ACTe,SAAR,UAA2B,GAAG,GAAG;AACtC,SAAO,KAAK,QAAQ,KAAK,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAC9E;;;ACFe,SAAR,WAA4B,GAAG,GAAG;AACvC,SAAO,KAAK,QAAQ,KAAK,OAAO,MAC5B,IAAI,IAAI,KACR,IAAI,IAAI,IACR,KAAK,IAAI,IACT;AACN;;;ACHe,SAAR,SAA0B,GAAG;AAClC,MAAI,UAAU,UAAU;AAOxB,MAAI,EAAE,WAAW,GAAG;AAClB,eAAW;AACX,eAAW,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,GAAG,CAAC;AACtC,YAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI;AAAA,EAC3B,OAAO;AACL,eAAW,MAAM,aAAa,MAAM,aAAa,IAAI;AACrD,eAAW;AACX,YAAQ;AAAA,EACV;AAEA,WAAS,KAAK,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ;AACzC,QAAI,KAAK,IAAI;AACX,UAAI,SAAS,GAAG,CAAC,MAAM,EAAG,QAAO;AACjC,SAAG;AACD,cAAM,MAAO,KAAK,OAAQ;AAC1B,YAAI,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,EAAG,MAAK,MAAM;AAAA,YACnC,MAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAEA,WAAS,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ;AAC1C,QAAI,KAAK,IAAI;AACX,UAAI,SAAS,GAAG,CAAC,MAAM,EAAG,QAAO;AACjC,SAAG;AACD,cAAM,MAAO,KAAK,OAAQ;AAC1B,YAAI,SAAS,EAAE,GAAG,GAAG,CAAC,KAAK,EAAG,MAAK,MAAM;AAAA,YACpC,MAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAEA,WAAS,OAAO,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ;AAC3C,UAAM,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC;AAC/B,WAAO,IAAI,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;AAAA,EAClE;AAEA,SAAO,EAAC,MAAM,QAAQ,MAAK;AAC7B;AAEA,SAAS,OAAO;AACd,SAAO;AACT;;;ACvDe,SAAR,OAAwB,GAAG;AAChC,SAAO,MAAM,OAAO,MAAM,CAAC;AAC7B;;;ACEA,IAAM,kBAAkB,SAAS,SAAS;AACnC,IAAM,cAAc,gBAAgB;AACpC,IAAM,aAAa,gBAAgB;AACnC,IAAM,eAAe,SAAS,MAAM,EAAE;AAC7C,IAAO,iBAAQ;;;ACRA,SAAR,MAAuB,QAAQ,SAAS;AAC7C,MAAIC,SAAQ;AACZ,MAAI,YAAY,QAAW;AACzB,aAAS,SAAS,QAAQ;AACxB,UAAI,SAAS,SAAS,QAAQ,CAAC,UAAU,OAAO;AAC9C,UAAEA;AAAA,MACJ;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,QAAQ;AACZ,aAAS,SAAS,QAAQ;AACxB,WAAK,QAAQ,QAAQ,OAAO,EAAE,OAAO,MAAM,MAAM,SAAS,QAAQ,CAAC,UAAU,OAAO;AAClF,UAAEA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACA,SAAOA;AACT;;;ACjBe,SAAR,SAA0B,QAAQ,SAAS;AAChD,MAAIC,SAAQ;AACZ,MAAI;AACJ,MAAI,OAAO;AACX,MAAI,MAAM;AACV,MAAI,YAAY,QAAW;AACzB,aAAS,SAAS,QAAQ;AACxB,UAAI,SAAS,SAAS,QAAQ,CAAC,UAAU,OAAO;AAC9C,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ,EAAEA;AAClB,eAAO,SAAS,QAAQ;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,QAAQ;AACZ,aAAS,SAAS,QAAQ;AACxB,WAAK,QAAQ,QAAQ,OAAO,EAAE,OAAO,MAAM,MAAM,SAAS,QAAQ,CAAC,UAAU,OAAO;AAClF,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ,EAAEA;AAClB,eAAO,SAAS,QAAQ;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,MAAIA,SAAQ,EAAG,QAAO,OAAOA,SAAQ;AACvC;;;ACtBe,SAAR,UAA2B,QAAQ,SAAS;AACjD,QAAM,IAAI,SAAS,QAAQ,OAAO;AAClC,SAAO,IAAI,KAAK,KAAK,CAAC,IAAI;AAC5B;;;ACLe,SAAR,OAAwB,QAAQ,SAAS;AAC9C,MAAI;AACJ,MAAI;AACJ,MAAI,YAAY,QAAW;AACzB,eAAW,SAAS,QAAQ;AAC1B,UAAI,SAAS,MAAM;AACjB,YAAI,QAAQ,QAAW;AACrB,cAAI,SAAS,MAAO,OAAM,MAAM;AAAA,QAClC,OAAO;AACL,cAAI,MAAM,MAAO,OAAM;AACvB,cAAI,MAAM,MAAO,OAAM;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,QAAQ;AACZ,aAAS,SAAS,QAAQ;AACxB,WAAK,QAAQ,QAAQ,OAAO,EAAE,OAAO,MAAM,MAAM,MAAM;AACrD,YAAI,QAAQ,QAAW;AACrB,cAAI,SAAS,MAAO,OAAM,MAAM;AAAA,QAClC,OAAO;AACL,cAAI,MAAM,MAAO,OAAM;AACvB,cAAI,MAAM,MAAO,OAAM;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,KAAK,GAAG;AAClB;;;AC5Be,SAAR,SAA0B,GAAG;AAClC,SAAO;AACT;;;ACFA,IAAI,QAAQ,MAAM;AAEX,IAAI,QAAQ,MAAM;AAClB,IAAI,MAAM,MAAM;;;ACHR,SAAR,SAA0B,GAAG;AAClC,SAAO,MAAM;AACf;;;ACFA,IAAM,MAAM,KAAK,KAAK,EAAE;AAAxB,IACI,KAAK,KAAK,KAAK,EAAE;AADrB,IAEI,KAAK,KAAK,KAAK,CAAC;AAEpB,SAAS,SAAS,OAAO,MAAMC,QAAO;AACpC,QAAM,QAAQ,OAAO,SAAS,KAAK,IAAI,GAAGA,MAAK,GAC3C,QAAQ,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC,GACnC,QAAQ,OAAO,KAAK,IAAI,IAAI,KAAK,GACjC,SAAS,SAAS,MAAM,KAAK,SAAS,KAAK,IAAI,SAAS,KAAK,IAAI;AACrE,MAAI,IAAI,IAAI;AACZ,MAAI,QAAQ,GAAG;AACb,UAAM,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;AAC7B,SAAK,KAAK,MAAM,QAAQ,GAAG;AAC3B,SAAK,KAAK,MAAM,OAAO,GAAG;AAC1B,QAAI,KAAK,MAAM,MAAO,GAAE;AACxB,QAAI,KAAK,MAAM,KAAM,GAAE;AACvB,UAAM,CAAC;AAAA,EACT,OAAO;AACL,UAAM,KAAK,IAAI,IAAI,KAAK,IAAI;AAC5B,SAAK,KAAK,MAAM,QAAQ,GAAG;AAC3B,SAAK,KAAK,MAAM,OAAO,GAAG;AAC1B,QAAI,KAAK,MAAM,MAAO,GAAE;AACxB,QAAI,KAAK,MAAM,KAAM,GAAE;AAAA,EACzB;AACA,MAAI,KAAK,MAAM,OAAOA,UAASA,SAAQ,EAAG,QAAO,SAAS,OAAO,MAAMA,SAAQ,CAAC;AAChF,SAAO,CAAC,IAAI,IAAI,GAAG;AACrB;AAEe,SAAR,MAAuB,OAAO,MAAMA,QAAO;AAChD,SAAO,CAAC,MAAM,QAAQ,CAAC,OAAOA,SAAQ,CAACA;AACvC,MAAI,EAAEA,SAAQ,GAAI,QAAO,CAAC;AAC1B,MAAI,UAAU,KAAM,QAAO,CAAC,KAAK;AACjC,QAAM,UAAU,OAAO,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,UAAU,SAAS,MAAM,OAAOA,MAAK,IAAI,SAAS,OAAO,MAAMA,MAAK;AAClH,MAAI,EAAE,MAAM,IAAK,QAAO,CAAC;AACzB,QAAM,IAAI,KAAK,KAAK,GAAGC,SAAQ,IAAI,MAAM,CAAC;AAC1C,MAAI,SAAS;AACX,QAAI,MAAM,EAAG,UAAS,IAAI,GAAG,IAAI,GAAG,EAAE,EAAG,CAAAA,OAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAAA,QAC3D,UAAS,IAAI,GAAG,IAAI,GAAG,EAAE,EAAG,CAAAA,OAAM,CAAC,KAAK,KAAK,KAAK;AAAA,EACzD,OAAO;AACL,QAAI,MAAM,EAAG,UAAS,IAAI,GAAG,IAAI,GAAG,EAAE,EAAG,CAAAA,OAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAAA,QAC3D,UAAS,IAAI,GAAG,IAAI,GAAG,EAAE,EAAG,CAAAA,OAAM,CAAC,KAAK,KAAK,KAAK;AAAA,EACzD;AACA,SAAOA;AACT;AAEO,SAAS,cAAc,OAAO,MAAMD,QAAO;AAChD,SAAO,CAAC,MAAM,QAAQ,CAAC,OAAOA,SAAQ,CAACA;AACvC,SAAO,SAAS,OAAO,MAAMA,MAAK,EAAE,CAAC;AACvC;;;AC9Ce,SAAR,KAAsB,OAAO,MAAME,QAAO;AAC/C,MAAI;AACJ,SAAO,MAAM;AACX,UAAM,OAAO,cAAc,OAAO,MAAMA,MAAK;AAC7C,QAAI,SAAS,WAAW,SAAS,KAAK,CAAC,SAAS,IAAI,GAAG;AACrD,aAAO,CAAC,OAAO,IAAI;AAAA,IACrB,WAAW,OAAO,GAAG;AACnB,cAAQ,KAAK,MAAM,QAAQ,IAAI,IAAI;AACnC,aAAO,KAAK,KAAK,OAAO,IAAI,IAAI;AAAA,IAClC,WAAW,OAAO,GAAG;AACnB,cAAQ,KAAK,KAAK,QAAQ,IAAI,IAAI;AAClC,aAAO,KAAK,MAAM,OAAO,IAAI,IAAI;AAAA,IACnC;AACA,cAAU;AAAA,EACZ;AACF;;;ACfe,SAAR,iBAAkC,QAAQ;AAC/C,SAAO,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;AACtE;;;ACKe,SAAR,MAAuB;AAC5B,MAAI,QAAQ,UACR,SAAS,QACT,YAAY;AAEhB,WAAS,UAAU,MAAM;AACvB,QAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,MAAM,KAAK,IAAI;AAEhD,QAAI,GACA,IAAI,KAAK,QACT,GACA,MACA,SAAS,IAAI,MAAM,CAAC;AAExB,SAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,aAAO,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,GAAG,IAAI;AAAA,IACpC;AAEA,QAAI,KAAK,OAAO,MAAM,GAClB,KAAK,GAAG,CAAC,GACT,KAAK,GAAG,CAAC,GACT,KAAK,UAAU,QAAQ,IAAI,EAAE;AAIjC,QAAI,CAAC,MAAM,QAAQ,EAAE,GAAG;AACtB,YAAM,MAAM,IAAI,KAAK,CAAC;AACtB,UAAI,WAAW,OAAQ,EAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE;AACjD,WAAK,MAAM,IAAI,IAAI,EAAE;AAKrB,UAAI,GAAG,CAAC,KAAK,GAAI,QAAO,cAAc,IAAI,IAAI,EAAE;AAShD,UAAI,GAAG,GAAG,SAAS,CAAC,KAAK,IAAI;AAC3B,YAAI,OAAO,MAAM,WAAW,QAAQ;AAClC,gBAAMC,QAAO,cAAc,IAAI,IAAI,EAAE;AACrC,cAAI,SAASA,KAAI,GAAG;AAClB,gBAAIA,QAAO,GAAG;AACZ,oBAAM,KAAK,MAAM,KAAKA,KAAI,IAAI,KAAKA;AAAA,YACrC,WAAWA,QAAO,GAAG;AACnB,oBAAM,KAAK,KAAK,KAAK,CAACA,KAAI,IAAI,KAAK,CAACA;AAAA,YACtC;AAAA,UACF;AAAA,QACF,OAAO;AACL,aAAG,IAAI;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAIA,QAAI,IAAI,GAAG,QAAQ,IAAI,GAAG,IAAI;AAC9B,WAAO,GAAG,CAAC,KAAK,GAAI,GAAE;AACtB,WAAO,GAAG,IAAI,CAAC,IAAI,GAAI,GAAE;AACzB,QAAI,KAAK,IAAI,EAAG,MAAK,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI;AAE7C,QAAI,OAAO,IAAI,MAAM,IAAI,CAAC,GACtBC;AAGJ,SAAK,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AACvB,MAAAA,OAAM,KAAK,CAAC,IAAI,CAAC;AACjB,MAAAA,KAAI,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;AAC7B,MAAAA,KAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI;AAAA,IAC3B;AAGA,QAAI,SAAS,IAAI,GAAG;AAClB,UAAI,OAAO,GAAG;AACZ,aAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,eAAK,IAAI,OAAO,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,IAAI;AACjD,iBAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAAA,UAC7D;AAAA,QACF;AAAA,MACF,WAAW,OAAO,GAAG;AACnB,aAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,eAAK,IAAI,OAAO,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,IAAI;AACjD,kBAAM,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI;AACpC,iBAAK,KAAK,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,WAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,aAAK,IAAI,OAAO,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,IAAI;AACjD,eAAK,eAAO,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,YAAU,QAAQ,SAAS,GAAG;AAC5B,WAAO,UAAU,UAAU,QAAQ,OAAO,MAAM,aAAa,IAAI,SAAS,CAAC,GAAG,aAAa;AAAA,EAC7F;AAEA,YAAU,SAAS,SAAS,GAAG;AAC7B,WAAO,UAAU,UAAU,SAAS,OAAO,MAAM,aAAa,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa;AAAA,EACzG;AAEA,YAAU,aAAa,SAAS,GAAG;AACjC,WAAO,UAAU,UAAU,YAAY,OAAO,MAAM,aAAa,IAAI,SAAS,MAAM,QAAQ,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa;AAAA,EACpI;AAEA,SAAO;AACT;;;ACtGO,SAAS,eAAe,QAAQ,GAAG,UAAU,QAAQ;AAC1D,MAAI,EAAE,IAAI,OAAO,WAAW,MAAM,IAAI,CAAC,CAAC,EAAG;AAC3C,MAAI,KAAK,KAAK,IAAI,EAAG,QAAO,CAAC,QAAQ,OAAO,CAAC,GAAG,GAAG,MAAM;AACzD,MAAI,KAAK,EAAG,QAAO,CAAC,QAAQ,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM;AACxD,MAAI,GACA,KAAK,IAAI,KAAK,GACd,KAAK,KAAK,MAAM,CAAC,GACjB,SAAS,CAAC,QAAQ,OAAO,EAAE,GAAG,IAAI,MAAM,GACxC,SAAS,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM;AACpD,SAAO,UAAU,SAAS,WAAW,IAAI;AAC3C;;;AC2XO,SAAS,YACd,OACyB;AACzB,SAAO,EAAE,MAAM;AACjB;AAEA,SAAS,WACP,MACA,MACA,SACmB;AACnB,SAAO,EAAE,MAAM,MAAM,QAAQ;AAC/B;AAGO,SAAS,MAAM,SAAgD;AACpE,SAAO,EAAE,MAAM,SAAS,MAAM,CAAC,GAAG,QAAyD;AAC7F;AAEA,IAAMC,YAAW,CAAS,UAA0B;AAE7C,SAAS,MACd,MACA,UAAqC,CAAC,GACnB;AACnB,SAAO,WAAW,UAAU,MAAM;AAAA,IAChC,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,MACd,MACA,UAAqC,CAAC,GACnB;AACnB,SAAO,WAAW,UAAU,MAAM;AAAA,IAChC,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,KACd,MACA,UAAmC,CAAC,GACjB;AACnB,SAAO,WAAW,SAAS,MAAM;AAAA,IAC/B,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,KACd,MACA,UAAmC,CAAC,GACjB;AACnB,SAAO,WAAW,SAAS,MAAM;AAAA,IAC/B,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,KACd,MACA,UAAoC,CAAC,GAClB;AACnB,SAAO,WAAW,SAAS,MAAM;AAAA,IAC/B,GAAG,QAAQ,MAAM,MAAM;AAAA,IACvB,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,IACd,MACA,UAAmC,CAAC,GACjB;AACnB,SAAO,WAAW,OAAO,MAAM;AAAA,IAC7B,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,MACd,MACA,UAAoC,CAAC,GAClB;AACnB,SAAO,WAAW,UAAU,MAAM;AAAA,IAChC,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,MACd,MACA,UAAoC,CAAC,GAClB;AACnB,SAAO,WAAW,UAAU,MAAM;AAAA,IAChC,GAAG,QAAQ,KAAMA;AAAA,IACjB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,MACd,MACA,SACmB;AACnB,SAAO,WAAW,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,MACd,MACA,SACmB;AACnB,SAAO,WAAW,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,KACd,MACA,SACmB;AACnB,SAAO,WAAW,QAAQ,MAAM,OAAO;AACzC;AAEO,SAAS,KACd,MACA,SACmB;AACnB,SAAO,WAAW,QAAQ,MAAM,OAAO;AACzC;AAEO,SAAS,SACd,MACA,UAAoC,CAAC,GAClB;AACnB,SAAO,WAAW,QAAQ,MAAM;AAAA,IAC9B,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,GAAG,QAAQ,MAAM,CAAC,GAAG,UAAU;AAAA,IAC/B,MAAM,QAAQ,QAASA;AAAA,IACvB,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,QACd,MACA,UAAmC,CAAC,GACjB;AACnB,SAAO,WAAW,OAAO,MAAM;AAAA,IAC7B,QAAQ,QAAQ,UAAW;AAAA,IAC3B,QAAQ,QAAQ,UAAW;AAAA,IAC3B,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,WACd,MACA,UAAsC,CAAC,GACpB;AACnB,SAAO,WAAW,eAAe,MAAM;AAAA,IACrC,OAAO,QAAQ,UAAU,CAAC,GAAG,UAAU;AAAA,IACvC,QAAQ,QAAQ,UAAWA;AAAA,IAC3B,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,WACd,MACA,UAAsC,CAAC,GACpB;AACnB,SAAO,WAAW,eAAe,MAAM;AAAA,IACrC,OAAO,QAAQ,UAAU,CAAC,GAAG,UAAU;AAAA,IACvC,QAAQ,QAAQ,UAAWA;AAAA,IAC3B,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,UACd,MACA,UAAsC,CAAC,GACpB;AACnB,SAAO,WAAW,cAAc,MAAM;AAAA,IACpC,OAAO,QAAQ,UAAU,CAAC,GAAG,UAAU;AAAA,IACvC,QAAQ,QAAQ,UAAWA;AAAA,IAC3B,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,aACd,OACA,OACA,MACA,SACoB;AACpB,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI,OAAO,YAAY,WAAY,QAAO,QAAQ,OAAO,OAAO,IAAI;AACpE,MAAI,SAAS,QAAQ,OAAO,UAAU,SAAU,QAAO;AACvD,SAAQ,MAAiC,OAAO;AAClD;AAkBO,SAAS,eACd,MACA,SACgC;AAChC,QAAM,OAAO,KAAK,IAAI,CAAC,OAAO,UAAU;AACtC,UAAM,QAAQ,aAAa,OAAO,OAAO,MAAM,QAAQ,KAAK;AAC5D,UAAM,SAAS,aAAa,OAAO,OAAO,MAAM,QAAQ,MAAM;AAC9D,UAAM,QAAQ,aAAa,OAAO,OAAO,MAAM,QAAQ,KAAK;AAC5D,QAAI,UAAU,UAAa,WAAW;AACpC,YAAM,IAAI,UAAU,+DAA+D;AACrF,QAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ;AAClE,YAAM,IAAI,WAAW,6DAA6D;AACpF,WAAO,EAAE,MAAM,OAAO,OAAO,QAAQ,MAAM;AAAA,EAC7C,CAAC;AACD,QAAM,SAAS,oBAAI,IAAoB;AACvC,OAAK;AAAA,IAAQ,SACX,OAAO,IAAI,cAAc,IAAI,KAAK,IAAI,OAAO,IAAI,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,KAAK;AAAA,EAC9F;AACA,SAAO,KAAK,IAAI,UAAQ;AAAA,IACtB,GAAG;AAAA,IACH,aACG,OAAO,IAAI,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,IAC1C,IAAI,QAAS,OAAO,IAAI,cAAc,IAAI,KAAK,CAAC,IAChD;AAAA,EACR,EAAE;AACJ;AAEO,SAAS,UACd,MACA,SACyB;AACzB,QAAM,UAAU,KAAK,IAAI,CAAC,OAAO,WAAW,EAAE,OAAO,MAAM,EAAE;AAC7D,MAAI,QAAQ,KAAM,SAAQ,KAAK,CAAC,GAAG,MAAM,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC;AAC9E,QAAM,SAAS,QAAQ,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAC/C,UAAM,QAAQ,aAAa,OAAO,OAAO,MAAM,QAAQ,KAAK;AAC5D,WAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAAA,EACpF,CAAC;AACD,QAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAC1D,MAAI,WAAW;AACf,SAAO,QAAQ,QAAQ,CAAC,EAAE,OAAO,MAAM,GAAG,iBAAiB;AACzD,UAAM,QAAQ,OAAO,YAAY,KAAK;AACtC,QAAI,EAAE,QAAQ,MAAM,EAAE,QAAQ,GAAI,QAAO,CAAC;AAC1C,UAAM,SAAS;AACf,gBAAY,QAAQ;AACpB,UAAM,MAAM,aAAa,OAAO,OAAO,MAAM,QAAQ,GAAG,KAAK;AAC7D,UAAM,QAAQ,aAAa,OAAO,OAAO,MAAM,QAAQ,KAAK,KAAK,OAAO,GAAG;AAC3E,WAAO,CAAC,EAAE,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO,QAAQ,QAAQ,SAAS,CAAC;AAAA,EAC7E,CAAC;AACH;AAEO,SAAS,KACd,MACA,SACyB;AACzB,QAAM,YAAY,IAAsB,EAAE;AAAA,IACxC,CAAC,OAAO,OAAO,SACb,aAAa,OAAO,OAAO,MAAM,KAAK,IAAI,GAAG,QAAQ,KAAK,KAAK,OAAO;AAAA,EAC1E;AACA,MAAI,OAAO,QAAQ,eAAe,SAAU,WAAU,WAAW,QAAQ,UAAU;AAAA,WAC1E,QAAQ,eAAe,OAAW,WAAU,WAAW,CAAC,GAAG,QAAQ,UAAU,CAAC;AACvF,QAAM,OAAO,UAAU,IAAgB;AACvC,MAAI,aAAa;AACjB,SAAO,KAAK,QAAQ,CAAAC,SAAO;AACzB,UAAM,KAAKA,KAAI;AACf,UAAM,KAAKA,KAAI;AACf,QAAI,OAAO,UAAa,OAAO,OAAW,QAAO,CAAC;AAClD,kBAAcA,KAAI;AAClB,WAAO;AAAA,MACL;AAAA,QACE,KAAK,OAAO,EAAE,IAAI,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,QACA,IAAI,KAAK,MAAM;AAAA,QACf,OAAOA,KAAI;AAAA,QACX;AAAA,QACA,MAAM,CAAC,GAAGA,IAAG;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eACd,MACyB;AACzB,MAAI,aAAa;AACjB,SAAO,KAAK,IAAI,CAAAA,UAAQ,EAAE,GAAGA,MAAK,YAAa,cAAcA,KAAI,MAAO,EAAE;AAC5E;AAEO,SAAS,SACd,MACA,SACqB;AACrB,QAAM,SAAS,KACZ,IAAI,CAAC,OAAO,UAAU,aAAa,OAAO,OAAO,MAAM,QAAQ,KAAK,CAAC,EACrE,OAAO,CAAC,UAA2B,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,CAAC,EACtF,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACvB,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,QAAM,CAAC,UAAU,GAAG,UAAU,UAAU,CAAC,IAAI,OAAO,MAAM;AAC1D,QAAM,OAAO,KAAK,IAAI,OAAO,SAAS,UAAU,OAAO;AACvD,QAAM,cAAc,KAAK,IAAI,GAAG,QAAQ,WAAW,EAAE;AACrD,QAAM,eAAe,MAAM,SAAS,SAAS,WAAW;AACxD,QAAM,QAAQ,UAAU,MAAM,KAAK,OAAO;AAC1C,QAAM,YAAY,KAAK;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ,aAAa,OAAO,QAAQ,KAAK,IAAI,OAAO,QAAQ,IAAI;AAAA,EAClE;AACA,QAAM,aAAa,KAAK,KAAK,KAAK,IAAI,KAAK,EAAE,IAAI,YAAY,OAAO;AACpE,SAAO,aAAa,IAAI,QAAM;AAAA,IAC5B,KAAK,WAAW,CAAC;AAAA,IACjB;AAAA,IACA,SACE,OAAO,OAAO,CAAC,KAAK,UAAU;AAC5B,YAAM,KAAK,IAAI,SAAS;AACxB,aAAO,MAAM,KAAK,IAAI,OAAO,IAAI,CAAC;AAAA,IACpC,GAAG,CAAC,IAAI;AAAA,EACZ,EAAE;AACJ;AAEO,SAAS,cAAc,QAA2B,UAAU,KAAK;AACtE,QAAM,SAAS,OAAO,OAAO,OAAO,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAClE,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,KAAK,eAAe,QAAQ,IAAI;AACtC,QAAM,SAAS,eAAe,QAAQ,GAAG;AACzC,QAAM,KAAK,eAAe,QAAQ,IAAI;AACtC,QAAM,MAAM,KAAK;AACjB,QAAM,aAAa,KAAK,UAAU;AAClC,QAAM,aAAa,KAAK,UAAU;AAClC,QAAM,QAAQ,OAAO,KAAK,WAAS,SAAS,UAAU,KAAK,OAAO,CAAC;AACnE,QAAM,QACJ,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,WAAS,SAAS,UAAU,KAAK,OAAO,OAAO,SAAS,CAAC;AACtF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,OAAO,OAAO,WAAS,QAAQ,SAAS,QAAQ,KAAK;AAAA,EACjE;AACF;AAEO,SAAS,cAAc,OAAwB;AACpD,MAAI,iBAAiB,KAAM,QAAO,QAAQ,MAAM,QAAQ,CAAC;AACzD,SAAO,GAAG,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC;AACzC;;;AC5vBO,IAAM,uBAAyD;AAAA,EACpE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAGO,IAAM,kCAAoE;AAAA,EAC/E,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;;;ACFO,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAwC;AACtC,MAAI,oBAAoB,iBAAiB,UAAU,SAAU,QAAO;AACpE,SAAO,iBAAiB,UAAU,UAAU,CAAC,iBAAiB;AAChE;AAGO,SAAS,oBAAoB,aAAqB,gBAAgC;AACvF,SAAO,cAAc,iBAAiB;AACxC;;;ACzBO,IAAM,cAAc,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE;AAC1D,IAAM,gBAAwC,CAAC,MAAM,IAAI;AAEhE,IAAM,qBAAqB;AAEpB,SAAS,YAAY,OAAwB;AAClD,MAAI,OAAO,UAAU,YAAY,CAAC,mBAAmB,KAAK,KAAK,EAAG,QAAO;AACzE,QAAM,CAAC,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AAClD,SAAO,QAAQ,KAAK,QAAQ,MAAM,UAAU,KAAK,UAAU;AAC7D;AAEO,SAAS,gBAAgB,OAAwB,IAAY;AAClE,QAAM,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,IAAI;AAC7D,MAAI,CAAC,OAAO,SAAS,OAAO,KAAK,WAAW,EAAG,QAAO;AACtD,MAAI,UAAU,GAAI,QAAO;AACzB,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,UAAU,EAAE,CAAC;AAC7C;AAGO,SAAS,aAAa,OAAe,GAAG,aAAqB,GAAa;AAC/E,QAAM,SAAS,OAAO,SAAS,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI;AACvE,QAAM,iBAAiB,OAAO,SAAS,UAAU,KAC3C,KAAK,MAAM,UAAU,IAAI,KAAM,MAAM,KACvC;AACJ,QAAM,SAAS,oBAAI,IAAY;AAC/B,WAAS,SAAS,GAAG,SAAS,MAAM,UAAU,QAAQ;AACpD,WAAO,KAAK,iBAAiB,UAAU,EAAE;AAAA,EAC3C;AACA,SAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACzC;AAEO,SAAS,eAAe,OAAsC;AACnE,MAAI,CAAC,YAAY,KAAK,EAAG,QAAO;AAChC,QAAM,CAAC,QAAQ,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AACpD,QAAM,SAAsB,UAAU,KAAK,OAAO;AAClD,QAAM,SAAS,SAAS,OAAO,IAAI,KAAK,SAAS;AACjD,SAAO,EAAE,QAAQ,QAAQ,OAAO;AAClC;AAEO,SAAS,cAAc,OAA+B;AAC3D,MACE,CAAC,SACD,CAAC,OAAO,UAAU,MAAM,MAAM,KAC9B,MAAM,SAAS,KACf,MAAM,SAAS,MACf,CAAC,OAAO,UAAU,MAAM,MAAM,KAC9B,MAAM,SAAS,KACf,MAAM,SAAS,MACd,MAAM,WAAW,QAAQ,MAAM,WAAW;AAE3C,WAAO;AACT,QAAM,SACJ,MAAM,WAAW,OACb,MAAM,WAAW,KACf,IACA,MAAM,SACR,MAAM,WAAW,KACf,KACA,MAAM,SAAS;AACvB,SAAO,GAAG,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,MAAM,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC;AACpF;AAGO,SAAS,qBAAqB,OAAuB;AAC1D,QAAM,QAAQ,eAAe,KAAK;AAClC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,GAAG,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,MAAM,MAAM;AACjF;AAGO,SAAS,oBAAoB,OAAuB;AACzD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,YAAY,OAAO,EAAG,QAAO;AAEjC,QAAM,aAAa,QAAQ,MAAM,qBAAqB;AACtD,MAAI,YAAY;AACd,UAAM,OAAO,OAAO,WAAW,CAAC,CAAC;AACjC,UAAMC,UAAS,OAAO,WAAW,CAAC,CAAC;AACnC,QAAI,OAAO,MAAMA,UAAS,GAAI,QAAO;AACrC,WAAO,GAAG,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;AAAA,EAC1D;AAEA,QAAM,WAAW,QAAQ,MAAM,+CAA+C;AAC9E,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,SAAS,OAAO,SAAS,CAAC,CAAC;AACjC,QAAM,SAAS,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,IAAI;AACnD,MAAI,SAAS,KAAK,SAAS,MAAM,SAAS,GAAI,QAAO;AACrD,QAAM,SAAsB,SAAS,CAAC,EAAE,YAAY,MAAM,MAAM,OAAO;AACvE,SAAO,cAAc,EAAE,QAAQ,QAAQ,OAAO,CAAC;AACjD;AAEO,SAAS,sBAAsB,OAAe,KAAc,KAAuB;AACxF,MAAI,CAAC,YAAY,KAAK,EAAG,QAAO;AAChC,MAAI,OAAO,YAAY,GAAG,KAAK,QAAQ,IAAK,QAAO;AACnD,MAAI,OAAO,YAAY,GAAG,KAAK,QAAQ,IAAK,QAAO;AACnD,SAAO;AACT;AAGO,SAAS,uBACd,OACA,OAAwB,IACxB,KACS;AACT,MAAI,CAAC,YAAY,KAAK,EAAG,QAAO;AAChC,QAAM,aAAa,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9C,QAAM,YAAY,OAAO,YAAY,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC;AAC9E,QAAM,SAAS,gBAAgB,IAAI;AACnC,QAAM,eAAe,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;AACtD,QAAM,cAAc,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;AACnD,UAAQ,eAAe,eAAe,WAAW;AACnD;AAGO,SAAS,iBAAiB,OAAe,QAAgB,QAAwB;AACtF,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,GAAG,QAAQ,MAAM,CAAC;AACzD;;;AC/HO,IAAM,+BAA+B;AAAA,EAC1C,EAAE,OAAO,SAAS,OAAO,SAAS,MAAM,GAAG,QAAQ,EAAE;AAAA,EACrD,EAAE,OAAO,aAAa,OAAO,aAAa,MAAM,GAAG,QAAQ,GAAG;AAAA,EAC9D,EAAE,OAAO,eAAe,OAAO,eAAe,MAAM,GAAG,QAAQ,EAAE;AAAA,EACjE,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,MAAM,IAAI,QAAQ,EAAE;AAAA,EACpE,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,MAAM,IAAI,QAAQ,EAAE;AAAA,EACpE,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,MAAM,IAAI,QAAQ,EAAE;AAAA,EACpE,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,MAAM,IAAI,QAAQ,EAAE;AACtE;AAgBA,IAAM,mBAAmB;AAEzB,IAAM,0BAA0B,IAAI,KAAK,eAAe,SAAS;AAAA,EAC/D,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AACZ,CAAC;AAGM,SAAS,kBAAkB,OAAwB;AACxD,MAAI,OAAO,UAAU,YAAY,CAAC,iBAAiB,KAAK,KAAK,EAAG,QAAO;AACvE,QAAM,CAAC,MAAM,OAAO,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AACtD,MAAI,OAAO,EAAG,QAAO;AACrB,QAAM,OAAO,oBAAI,KAAK,GAAG,KAAK,YAAY;AAC1C,SACE,KAAK,eAAe,MAAM,QAAQ,KAAK,YAAY,MAAM,QAAQ,KAAK,KAAK,WAAW,MAAM;AAEhG;AAGO,SAAS,2BAA2B,OAAuB;AAChE,MAAI,CAAC,kBAAkB,KAAK,EAAG,QAAO;AACtC,SAAO,wBAAwB,cAAc,oBAAI,KAAK,GAAG,KAAK,YAAY,CAAC,EACxE,IAAI,UAAS,KAAK,SAAS,SAAS,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,KAAK,KAAM,EAC7E,KAAK,EAAE;AACZ;AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,uBAAuB,OAAuB;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,kBAAkB,OAAO,EAAG,QAAO;AAEvC,QAAM,UAAU,QAAQ,MAAM,iCAAiC;AAC/D,MAAI,SAAS;AACX,UAAMC,OAAM,GAAG,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACvF,WAAO,kBAAkBA,IAAG,IAAIA,OAAM;AAAA,EACxC;AAEA,QAAM,WAAW,QAAQ,MAAM,wCAAwC;AACvE,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,aAAa,aAAa,QAAQ,SAAS,CAAC,EAAE,YAAY,CAAC;AACjE,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,OAAO,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACrG,SAAO,kBAAkB,GAAG,IAAI,MAAM;AACxC;AAGO,SAAS,qBAAqB,OAAe,MAAsB;AACxE,MAAI,CAAC,kBAAkB,KAAK,KAAK,CAAC,OAAO,cAAc,IAAI,EAAG,QAAO;AACrE,QAAM,OAAO,oBAAI,KAAK,GAAG,KAAK,YAAY;AAC1C,OAAK,WAAW,KAAK,WAAW,IAAI,IAAI;AACxC,QAAM,OAAO,KAAK,eAAe;AACjC,SAAO,QAAQ,KAAK,QAAQ,OAAO,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AACvE;AAEO,SAAS,wBAAwB,QAA2D;AACjG,SAAO,YAAY,MAAM;AAC3B;AAEO,SAAS,qBAAqB,OAAe,MAAc,OAA6B;AAC7F,QAAM,UAAU,SAAS,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK;AACzD,SAAO,SAAS,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AAC1C;AAEO,SAAS,qBAAqB,OAA8C;AACjF,MAAI,OAAO,UAAU,YAAY,CAAC,MAAO,QAAO;AAEhD,MAAI,MAAM,WAAW,WAAW,GAAG;AACjC,UAAM,SAAS,MAAM,MAAM,YAAY,MAAM;AAC7C,WAAO,6BAA6B,KAAK,eAAa,UAAU,UAAU,MAAM,IAC5E,EAAE,MAAM,YAAY,OAAO,IAC3B;AAAA,EACN;AAEA,MAAI,MAAM,WAAW,QAAQ,GAAG;AAC9B,UAAM,CAAC,OAAO,KAAK,GAAG,IAAI,IAAI,MAAM,MAAM,SAAS,MAAM,EAAE,MAAM,GAAG;AACpE,QAAI,KAAK,UAAU,CAAC,kBAAkB,KAAK,KAAK,CAAC,kBAAkB,GAAG,EAAG,QAAO;AAChF,WAAO,SAAS,MAAM,EAAE,MAAM,SAAS,OAAO,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO,KAAK,KAAK,MAAM;AAAA,EAChG;AAGA,SAAO,kBAAkB,KAAK,IAAI,EAAE,MAAM,SAAS,OAAO,OAAO,KAAK,MAAM,IAAI;AAClF;AAEO,SAAS,yBAAyB,OAAsC;AAC7E,QAAM,SAAS,qBAAqB,KAAK;AACzC,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO,SAAS,aACnB,wBAAwB,OAAO,MAAM,IACrC,qBAAqB,OAAO,OAAO,OAAO,GAAG;AACnD;AAEO,SAAS,uBACd,OACA,eACwB;AACxB,MAAI,CAAC,kBAAkB,aAAa,EAAG,QAAO;AAC9C,QAAM,SAAS,qBAAqB,KAAK;AACzC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,SAAS,QAAS,QAAO,EAAE,OAAO,OAAO,OAAO,KAAK,OAAO,IAAI;AAE3E,QAAM,SAAS,6BAA6B,KAAK,eAAa,UAAU,UAAU,OAAO,MAAM;AAC/F,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,MAAM,qBAAqB,eAAe,OAAO,MAAM;AAC7D,QAAM,QAAQ,qBAAqB,KAAK,EAAE,OAAO,OAAO,EAAE;AAC1D,SAAO,SAAS,MAAM,EAAE,OAAO,IAAI,IAAI;AACzC;",
|
|
6
|
+
"names": ["CACHE_LIMIT", "CACHE_LIMIT", "count", "count", "count", "ticks", "count", "step", "bin", "identity", "bin", "minute", "iso"]
|
|
7
7
|
}
|