@awc-ui/core 1.0.0-beta.2 → 1.0.0-beta.3
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/README.md +18 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
- package/dist/cjs/engine.wasm-9JtXME10.js +12 -0
- package/dist/cjs/engine.wasm-9JtXME10.js.map +1 -0
- package/dist/cjs/{index-DlQ_5_Mv.js → index-Bm07YAg9.js} +4 -15
- package/dist/cjs/index-Bm07YAg9.js.map +1 -0
- package/dist/cjs/loader.cjs.js +3 -2
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/md-accordion-item.cjs.entry.js +1 -1
- package/dist/cjs/md-accordion.cjs.entry.js +1 -1
- package/dist/cjs/md-app-bar.cjs.entry.js +1 -1
- package/dist/cjs/md-area-chart.cjs.entry.js +1 -1
- package/dist/cjs/md-autocomplete.cjs.entry.js +2 -2
- package/dist/cjs/md-avatar_2.cjs.entry.js +1 -1
- package/dist/cjs/md-badge.cjs.entry.js +1 -1
- package/dist/cjs/md-bar-chart.cjs.entry.js +1 -1
- package/dist/cjs/md-bottom-sheet.cjs.entry.js +1 -1
- package/dist/cjs/md-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/md-breadcrumbs.cjs.entry.js +1 -1
- package/dist/cjs/md-button-group.cjs.entry.js +1 -1
- package/dist/cjs/md-button_7.cjs.entry.js +1 -1
- package/dist/cjs/md-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/md-chip.cjs.entry.js +1 -1
- package/dist/cjs/md-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/md-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/md-dialog.cjs.entry.js +1 -1
- package/dist/cjs/md-divider.cjs.entry.js +1 -1
- package/dist/cjs/md-fab-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/md-fab-menu.cjs.entry.js +1 -1
- package/dist/cjs/md-fab.cjs.entry.js +1 -1
- package/dist/cjs/md-line-chart.cjs.entry.js +1 -1
- package/dist/cjs/md-list-item.cjs.entry.js +1 -1
- package/dist/cjs/md-list.cjs.entry.js +1 -1
- package/dist/cjs/md-menu-item-group.cjs.entry.js +1 -1
- package/dist/cjs/md-menu_2.cjs.entry.js +1 -1
- package/dist/cjs/md-meter.cjs.entry.js +1 -1
- package/dist/cjs/md-multi-select.cjs.entry.js +2 -2
- package/dist/cjs/md-navigation-bar.cjs.entry.js +1 -1
- package/dist/cjs/md-navigation-rail-tab.cjs.entry.js +1 -1
- package/dist/cjs/md-navigation-rail.cjs.entry.js +1 -1
- package/dist/cjs/md-navigation-tab.cjs.entry.js +1 -1
- package/dist/cjs/md-number-field.cjs.entry.js +1 -1
- package/dist/cjs/md-organization-chart.cjs.entry.js +1 -1
- package/dist/cjs/md-otp-field.cjs.entry.js +1 -1
- package/dist/cjs/md-pie-chart.cjs.entry.js +1 -1
- package/dist/cjs/md-progress-indicator.cjs.entry.js +1 -1
- package/dist/cjs/md-rating.cjs.entry.js +1 -1
- package/dist/cjs/md-search.cjs.entry.js +1 -1
- package/dist/cjs/md-segmented-button-set.cjs.entry.js +1 -1
- package/dist/cjs/md-segmented-button.cjs.entry.js +1 -1
- package/dist/cjs/md-select-option.cjs.entry.js +1 -1
- package/dist/cjs/md-select.cjs.entry.js +2 -2
- package/dist/cjs/md-side-sheet.cjs.entry.js +1 -1
- package/dist/cjs/md-skeleton.cjs.entry.js +1 -1
- package/dist/cjs/md-slider.cjs.entry.js +1 -1
- package/dist/cjs/md-sparkline.cjs.entry.js +1 -1
- package/dist/cjs/md-split-button.cjs.entry.js +1 -1
- package/dist/cjs/md-status-dot.cjs.entry.js +1 -1
- package/dist/cjs/md-step.cjs.entry.js +1 -1
- package/dist/cjs/md-stepper.cjs.entry.js +1 -1
- package/dist/cjs/md-sub-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/md-switch.cjs.entry.js +1 -1
- package/dist/cjs/md-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/md-tab-panels.cjs.entry.js +1 -1
- package/dist/cjs/md-tab.cjs.entry.js +1 -1
- package/dist/cjs/md-table-body.cjs.entry.js +1 -1
- package/dist/cjs/md-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/md-table-container.cjs.entry.js +1 -1
- package/dist/cjs/md-table-expand-toggle.cjs.entry.js +1 -1
- package/dist/cjs/md-table-foot.cjs.entry.js +1 -1
- package/dist/cjs/md-table-head.cjs.entry.js +1 -1
- package/dist/cjs/md-table-pagination.cjs.entry.js +1 -1
- package/dist/cjs/md-table-row.cjs.entry.js +1 -1
- package/dist/cjs/md-table-sort-label.cjs.entry.js +1 -1
- package/dist/cjs/md-table-toolbar.cjs.entry.js +1 -1
- package/dist/cjs/md-table.cjs.entry.js +1 -1
- package/dist/cjs/md-tabs.cjs.entry.js +1 -1
- package/dist/cjs/md-text-field.cjs.entry.js +1 -1
- package/dist/cjs/md-time-picker.cjs.entry.js +1 -1
- package/dist/cjs/md-toolbar.cjs.entry.js +1 -1
- package/dist/cjs/md-transfer-list.cjs.entry.js +1 -1
- package/dist/cjs/md3.cjs.js +3 -2
- package/dist/cjs/md3.cjs.js.map +1 -1
- package/dist/cjs/{virtual-select-controller-CqriaZgm.js → virtual-select-controller-C5cSoKfB.js} +10 -9
- package/dist/cjs/virtual-select-controller-C5cSoKfB.js.map +1 -0
- package/dist/collection/wasm/engine-abi.js +8 -2
- package/dist/collection/wasm/engine-abi.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/md-accordion-item.js +1 -1
- package/dist/components/md-accordion.js +1 -1
- package/dist/components/md-app-bar.js +1 -1
- package/dist/components/md-area-chart.js +1 -1
- package/dist/components/md-area-chart.js.map +1 -1
- package/dist/components/md-autocomplete.js +1 -1
- package/dist/components/md-avatar.js +1 -1
- package/dist/components/md-badge.js +1 -1
- package/dist/components/md-bar-chart.js +1 -1
- package/dist/components/md-bottom-sheet.js +1 -1
- package/dist/components/md-breadcrumb-item.js +1 -1
- package/dist/components/md-breadcrumbs.js +1 -1
- package/dist/components/md-button-group.js +1 -1
- package/dist/components/md-button.js +1 -1
- package/dist/components/md-card.js +1 -1
- package/dist/components/md-checkbox.js +1 -1
- package/dist/components/md-chip.js +1 -1
- package/dist/components/md-color-picker.js +1 -1
- package/dist/components/md-date-picker.js +1 -1
- package/dist/components/md-dialog.js +1 -1
- package/dist/components/md-divider.js +1 -1
- package/dist/components/md-fab-menu-item.js +1 -1
- package/dist/components/md-fab-menu.js +1 -1
- package/dist/components/md-fab.js +1 -1
- package/dist/components/md-icon-button.js +1 -1
- package/dist/components/md-line-chart.js +1 -1
- package/dist/components/md-list-item.js +1 -1
- package/dist/components/md-list.js +1 -1
- package/dist/components/md-loading-indicator.js +1 -1
- package/dist/components/md-menu-item-group.js +1 -1
- package/dist/components/md-menu-item.js +1 -1
- package/dist/components/md-menu.js +1 -1
- package/dist/components/md-meter.js +1 -1
- package/dist/components/md-multi-select.js +1 -1
- package/dist/components/md-navigation-bar.js +1 -1
- package/dist/components/md-navigation-rail-tab.js +1 -1
- package/dist/components/md-navigation-rail.js +1 -1
- package/dist/components/md-navigation-tab.js +1 -1
- package/dist/components/md-number-field.js +1 -1
- package/dist/components/md-organization-chart.js +1 -1
- package/dist/components/md-otp-field.js +1 -1
- package/dist/components/md-pie-chart.js +1 -1
- package/dist/components/md-progress-indicator.js +1 -1
- package/dist/components/md-radio.js +1 -1
- package/dist/components/md-rating.js +1 -1
- package/dist/components/md-ripple.js +1 -1
- package/dist/components/md-search.js +1 -1
- package/dist/components/md-segmented-button-set.js +1 -1
- package/dist/components/md-segmented-button.js +1 -1
- package/dist/components/md-select-option.js +1 -1
- package/dist/components/md-select.js +1 -1
- package/dist/components/md-side-sheet.js +1 -1
- package/dist/components/md-skeleton.js +1 -1
- package/dist/components/md-slider.js +1 -1
- package/dist/components/md-snackbar.js +1 -1
- package/dist/components/md-sparkline.js +1 -1
- package/dist/components/md-split-button.js +1 -1
- package/dist/components/md-status-dot.js +1 -1
- package/dist/components/md-step.js +1 -1
- package/dist/components/md-stepper.js +1 -1
- package/dist/components/md-sub-menu-item.js +1 -1
- package/dist/components/md-switch.js +1 -1
- package/dist/components/md-tab-panel.js +1 -1
- package/dist/components/md-tab-panels.js +1 -1
- package/dist/components/md-tab.js +1 -1
- package/dist/components/md-table-body.js +1 -1
- package/dist/components/md-table-cell.js +1 -1
- package/dist/components/md-table-container.js +1 -1
- package/dist/components/md-table-expand-toggle.js +1 -1
- package/dist/components/md-table-foot.js +1 -1
- package/dist/components/md-table-head.js +1 -1
- package/dist/components/md-table-pagination.js +1 -1
- package/dist/components/md-table-row.js +1 -1
- package/dist/components/md-table-sort-label.js +1 -1
- package/dist/components/md-table-toolbar.js +1 -1
- package/dist/components/md-table.js +1 -1
- package/dist/components/md-tabs.js +1 -1
- package/dist/components/md-text-field.js +1 -1
- package/dist/components/md-time-picker.js +1 -1
- package/dist/components/md-toolbar.js +1 -1
- package/dist/components/md-tooltip.js +1 -1
- package/dist/components/md-transfer-list.js +1 -1
- package/dist/components/p-B-JfuA2g.js +2 -0
- package/dist/components/p-B-JfuA2g.js.map +1 -0
- package/dist/components/p-B-iHDK5h.js +2 -0
- package/dist/components/p-B-iHDK5h.js.map +1 -0
- package/dist/components/p-BA2v4IuG.js +2 -0
- package/dist/components/p-BA2v4IuG.js.map +1 -0
- package/dist/components/p-BADA63mI.js +2 -0
- package/dist/components/p-BADA63mI.js.map +1 -0
- package/dist/components/p-BR6gfOQH.js +2 -0
- package/dist/components/p-BR6gfOQH.js.map +1 -0
- package/dist/components/p-Bz-JaJcA.js +2 -0
- package/dist/components/p-Bz-JaJcA.js.map +1 -0
- package/dist/components/p-CCMritCA.js +2 -0
- package/dist/components/p-CCMritCA.js.map +1 -0
- package/dist/components/p-CTC8XAB6.js +2 -0
- package/dist/components/p-CTC8XAB6.js.map +1 -0
- package/dist/components/p-CfBPnYW7.js +2 -0
- package/dist/components/p-CfBPnYW7.js.map +1 -0
- package/dist/components/p-CtVItLby.js +2 -0
- package/dist/components/p-CtVItLby.js.map +1 -0
- package/dist/components/p-D8oM1Kr3.js +2 -0
- package/dist/components/p-D8oM1Kr3.js.map +1 -0
- package/dist/components/{p-Ddiw2Kjw.js → p-DEzb9xsY.js} +2 -2
- package/dist/components/p-DEzb9xsY.js.map +1 -0
- package/dist/components/p-DYL-8C5C.js +2 -0
- package/dist/components/p-DYL-8C5C.js.map +1 -0
- package/dist/components/p-DfU4xY2F.js +2 -0
- package/dist/components/p-DfU4xY2F.js.map +1 -0
- package/dist/components/p-Eb44PPZa.js +2 -0
- package/dist/components/p-Eb44PPZa.js.map +1 -0
- package/dist/components/{p-UdGDg2oJ.js → p-Lsoo1B-2.js} +2 -2
- package/dist/components/p-Lsoo1B-2.js.map +1 -0
- package/dist/components/p-tSoecrcz.js +2 -0
- package/dist/components/p-tSoecrcz.js.map +1 -0
- package/dist/components-csr/index.js +2 -0
- package/dist/components-csr/index.js.map +1 -0
- package/dist/components-csr/md-accordion-item.js +2 -0
- package/dist/components-csr/md-accordion-item.js.map +1 -0
- package/dist/components-csr/md-accordion.js +2 -0
- package/dist/components-csr/md-accordion.js.map +1 -0
- package/dist/components-csr/md-app-bar.js +2 -0
- package/dist/components-csr/md-app-bar.js.map +1 -0
- package/dist/components-csr/md-area-chart.js +2 -0
- package/dist/components-csr/md-area-chart.js.map +1 -0
- package/dist/components-csr/md-autocomplete.js +2 -0
- package/dist/components-csr/md-autocomplete.js.map +1 -0
- package/dist/components-csr/md-avatar.js +2 -0
- package/dist/components-csr/md-avatar.js.map +1 -0
- package/dist/components-csr/md-badge.js +2 -0
- package/dist/components-csr/md-badge.js.map +1 -0
- package/dist/components-csr/md-bar-chart.js +2 -0
- package/dist/components-csr/md-bar-chart.js.map +1 -0
- package/dist/components-csr/md-bottom-sheet.js +2 -0
- package/dist/components-csr/md-bottom-sheet.js.map +1 -0
- package/dist/components-csr/md-breadcrumb-item.js +2 -0
- package/dist/components-csr/md-breadcrumb-item.js.map +1 -0
- package/dist/components-csr/md-breadcrumbs.js +2 -0
- package/dist/components-csr/md-breadcrumbs.js.map +1 -0
- package/dist/components-csr/md-button-group.js +2 -0
- package/dist/components-csr/md-button-group.js.map +1 -0
- package/dist/components-csr/md-button.js +2 -0
- package/dist/components-csr/md-button.js.map +1 -0
- package/dist/components-csr/md-card.js +2 -0
- package/dist/components-csr/md-card.js.map +1 -0
- package/dist/components-csr/md-checkbox.js +2 -0
- package/dist/components-csr/md-checkbox.js.map +1 -0
- package/dist/components-csr/md-chip.js +2 -0
- package/dist/components-csr/md-chip.js.map +1 -0
- package/dist/components-csr/md-color-picker.js +2 -0
- package/dist/components-csr/md-color-picker.js.map +1 -0
- package/dist/components-csr/md-date-picker.js +2 -0
- package/dist/components-csr/md-date-picker.js.map +1 -0
- package/dist/components-csr/md-dialog.js +2 -0
- package/dist/components-csr/md-dialog.js.map +1 -0
- package/dist/components-csr/md-divider.js +2 -0
- package/dist/components-csr/md-divider.js.map +1 -0
- package/dist/components-csr/md-fab-menu-item.js +2 -0
- package/dist/components-csr/md-fab-menu-item.js.map +1 -0
- package/dist/components-csr/md-fab-menu.js +2 -0
- package/dist/components-csr/md-fab-menu.js.map +1 -0
- package/dist/components-csr/md-fab.js +2 -0
- package/dist/components-csr/md-fab.js.map +1 -0
- package/dist/components-csr/md-icon-button.js +2 -0
- package/dist/components-csr/md-icon-button.js.map +1 -0
- package/dist/components-csr/md-line-chart.js +2 -0
- package/dist/components-csr/md-line-chart.js.map +1 -0
- package/dist/components-csr/md-list-item.js +2 -0
- package/dist/components-csr/md-list-item.js.map +1 -0
- package/dist/components-csr/md-list.js +2 -0
- package/dist/components-csr/md-list.js.map +1 -0
- package/dist/components-csr/md-loading-indicator.js +2 -0
- package/dist/components-csr/md-loading-indicator.js.map +1 -0
- package/dist/components-csr/md-menu-item-group.js +2 -0
- package/dist/components-csr/md-menu-item-group.js.map +1 -0
- package/dist/components-csr/md-menu-item.js +2 -0
- package/dist/components-csr/md-menu-item.js.map +1 -0
- package/dist/components-csr/md-menu.js +2 -0
- package/dist/components-csr/md-menu.js.map +1 -0
- package/dist/components-csr/md-meter.js +2 -0
- package/dist/components-csr/md-meter.js.map +1 -0
- package/dist/components-csr/md-multi-select.js +2 -0
- package/dist/components-csr/md-multi-select.js.map +1 -0
- package/dist/components-csr/md-navigation-bar.js +2 -0
- package/dist/components-csr/md-navigation-bar.js.map +1 -0
- package/dist/components-csr/md-navigation-rail-tab.js +2 -0
- package/dist/components-csr/md-navigation-rail-tab.js.map +1 -0
- package/dist/components-csr/md-navigation-rail.js +2 -0
- package/dist/components-csr/md-navigation-rail.js.map +1 -0
- package/dist/components-csr/md-navigation-tab.js +2 -0
- package/dist/components-csr/md-navigation-tab.js.map +1 -0
- package/dist/components-csr/md-number-field.js +2 -0
- package/dist/components-csr/md-number-field.js.map +1 -0
- package/dist/components-csr/md-organization-chart.js +2 -0
- package/dist/components-csr/md-organization-chart.js.map +1 -0
- package/dist/components-csr/md-otp-field.js +2 -0
- package/dist/components-csr/md-otp-field.js.map +1 -0
- package/dist/components-csr/md-pie-chart.js +2 -0
- package/dist/components-csr/md-pie-chart.js.map +1 -0
- package/dist/components-csr/md-progress-indicator.js +2 -0
- package/dist/components-csr/md-progress-indicator.js.map +1 -0
- package/dist/components-csr/md-radio.js +2 -0
- package/dist/components-csr/md-radio.js.map +1 -0
- package/dist/components-csr/md-rating.js +2 -0
- package/dist/components-csr/md-rating.js.map +1 -0
- package/dist/components-csr/md-ripple.js +2 -0
- package/dist/components-csr/md-ripple.js.map +1 -0
- package/dist/components-csr/md-search.js +2 -0
- package/dist/components-csr/md-search.js.map +1 -0
- package/dist/components-csr/md-segmented-button-set.js +2 -0
- package/dist/components-csr/md-segmented-button-set.js.map +1 -0
- package/dist/components-csr/md-segmented-button.js +2 -0
- package/dist/components-csr/md-segmented-button.js.map +1 -0
- package/dist/components-csr/md-select-option.js +2 -0
- package/dist/components-csr/md-select-option.js.map +1 -0
- package/dist/components-csr/md-select.js +2 -0
- package/dist/components-csr/md-select.js.map +1 -0
- package/dist/components-csr/md-side-sheet.js +2 -0
- package/dist/components-csr/md-side-sheet.js.map +1 -0
- package/dist/components-csr/md-skeleton.js +2 -0
- package/dist/components-csr/md-skeleton.js.map +1 -0
- package/dist/components-csr/md-slider.js +2 -0
- package/dist/components-csr/md-slider.js.map +1 -0
- package/dist/components-csr/md-snackbar.js +2 -0
- package/dist/components-csr/md-snackbar.js.map +1 -0
- package/dist/components-csr/md-sparkline.js +2 -0
- package/dist/components-csr/md-sparkline.js.map +1 -0
- package/dist/components-csr/md-split-button.js +2 -0
- package/dist/components-csr/md-split-button.js.map +1 -0
- package/dist/components-csr/md-status-dot.js +2 -0
- package/dist/components-csr/md-status-dot.js.map +1 -0
- package/dist/components-csr/md-step.js +2 -0
- package/dist/components-csr/md-step.js.map +1 -0
- package/dist/components-csr/md-stepper.js +2 -0
- package/dist/components-csr/md-stepper.js.map +1 -0
- package/dist/components-csr/md-sub-menu-item.js +2 -0
- package/dist/components-csr/md-sub-menu-item.js.map +1 -0
- package/dist/components-csr/md-switch.js +2 -0
- package/dist/components-csr/md-switch.js.map +1 -0
- package/dist/components-csr/md-tab-panel.js +2 -0
- package/dist/components-csr/md-tab-panel.js.map +1 -0
- package/dist/components-csr/md-tab-panels.js +2 -0
- package/dist/components-csr/md-tab-panels.js.map +1 -0
- package/dist/components-csr/md-tab.js +2 -0
- package/dist/components-csr/md-tab.js.map +1 -0
- package/dist/components-csr/md-table-body.js +2 -0
- package/dist/components-csr/md-table-body.js.map +1 -0
- package/dist/components-csr/md-table-cell.js +2 -0
- package/dist/components-csr/md-table-cell.js.map +1 -0
- package/dist/components-csr/md-table-container.js +2 -0
- package/dist/components-csr/md-table-container.js.map +1 -0
- package/dist/components-csr/md-table-expand-toggle.js +2 -0
- package/dist/components-csr/md-table-expand-toggle.js.map +1 -0
- package/dist/components-csr/md-table-foot.js +2 -0
- package/dist/components-csr/md-table-foot.js.map +1 -0
- package/dist/components-csr/md-table-head.js +2 -0
- package/dist/components-csr/md-table-head.js.map +1 -0
- package/dist/components-csr/md-table-pagination.js +2 -0
- package/dist/components-csr/md-table-pagination.js.map +1 -0
- package/dist/components-csr/md-table-row.js +2 -0
- package/dist/components-csr/md-table-row.js.map +1 -0
- package/dist/components-csr/md-table-sort-label.js +2 -0
- package/dist/components-csr/md-table-sort-label.js.map +1 -0
- package/dist/components-csr/md-table-toolbar.js +2 -0
- package/dist/components-csr/md-table-toolbar.js.map +1 -0
- package/dist/components-csr/md-table.js +2 -0
- package/dist/components-csr/md-table.js.map +1 -0
- package/dist/components-csr/md-tabs.js +2 -0
- package/dist/components-csr/md-tabs.js.map +1 -0
- package/dist/components-csr/md-text-field.js +2 -0
- package/dist/components-csr/md-text-field.js.map +1 -0
- package/dist/components-csr/md-time-picker.js +2 -0
- package/dist/components-csr/md-time-picker.js.map +1 -0
- package/dist/components-csr/md-toolbar.js +2 -0
- package/dist/components-csr/md-toolbar.js.map +1 -0
- package/dist/components-csr/md-tooltip.js +2 -0
- package/dist/components-csr/md-tooltip.js.map +1 -0
- package/dist/components-csr/md-transfer-list.js +2 -0
- package/dist/components-csr/md-transfer-list.js.map +1 -0
- package/dist/{components/p-DXXUoRSH.js → components-csr/p--OUYjgKN.js} +2 -2
- package/dist/{components/p-Dp-w93ot.js → components-csr/p--TCJgZnE.js} +2 -2
- package/dist/components-csr/p-BdEoSBtL.js +2 -0
- package/dist/components-csr/p-BdEoSBtL.js.map +1 -0
- package/dist/components-csr/p-Bmu7RqHM.js +2 -0
- package/dist/components-csr/p-Bx6--dQF.js +2 -0
- package/dist/components-csr/p-Bx6--dQF.js.map +1 -0
- package/dist/components-csr/p-Bz-JaJcA.js +2 -0
- package/dist/components-csr/p-Bz-JaJcA.js.map +1 -0
- package/dist/{components/p-uTEkf0sE.js → components-csr/p-C0DlKmRg.js} +2 -2
- package/dist/{components/p-Ch2-tttM.js → components-csr/p-C4_7YnHT.js} +2 -2
- package/dist/{components/p-BwXpiUsu.js → components-csr/p-CG6FaRlt.js} +2 -2
- package/dist/{components/p-B0Opn6dK.js → components-csr/p-CSrxeWwL.js} +2 -2
- package/dist/components-csr/p-C_ogF68H.js +2 -0
- package/dist/components-csr/p-C_ogF68H.js.map +1 -0
- package/dist/components-csr/p-Cch_V1vi.js +2 -0
- package/dist/components-csr/p-Cch_V1vi.js.map +1 -0
- package/dist/components-csr/p-CfBPnYW7.js +2 -0
- package/dist/components-csr/p-CfBPnYW7.js.map +1 -0
- package/dist/{components/p-B3MWYEEJ.js → components-csr/p-CrbzXk64.js} +2 -2
- package/dist/components-csr/p-CxhZdOPw.js +2 -0
- package/dist/components-csr/p-CxhZdOPw.js.map +1 -0
- package/dist/{components/p-7fN_yCXW.js → components-csr/p-DF19mmLl.js} +2 -2
- package/dist/components-csr/p-DWxN44zD.js +2 -0
- package/dist/components-csr/p-DWxN44zD.js.map +1 -0
- package/dist/components-csr/p-DYBUr7K_.js +2 -0
- package/dist/components-csr/p-DYBUr7K_.js.map +1 -0
- package/dist/{components/p-e2HRV63Y.js → components-csr/p-DfcpeJAu.js} +2 -2
- package/dist/components-csr/p-DvOKnoqK.js +2 -0
- package/dist/components-csr/p-DvOKnoqK.js.map +1 -0
- package/dist/{components/p-C8EP4S21.js → components-csr/p-DvXQXhgu.js} +2 -2
- package/dist/components-csr/p-DzPKu-Ma.js +2 -0
- package/dist/components-csr/p-DzPKu-Ma.js.map +1 -0
- package/dist/{components/p-stybaFzj.js → components-csr/p-Hm3X1iai.js} +2 -2
- package/dist/{components/p-6wZSqm_2.js → components-csr/p-IWA0yIjJ.js} +2 -2
- package/dist/components-csr/p-RLxbNqRv.js +2 -0
- package/dist/components-csr/p-RLxbNqRv.js.map +1 -0
- package/dist/components-csr/p-bSpXNc5J.js +2 -0
- package/dist/components-csr/p-bSpXNc5J.js.map +1 -0
- package/dist/components-csr/p-uZbtHo-A.js +2 -0
- package/dist/components-csr/package.json +3 -0
- package/dist/esm/app-globals-DQuL1Twl.js +6 -0
- package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
- package/dist/esm/engine.wasm-CfBPnYW7.js +10 -0
- package/dist/esm/engine.wasm-CfBPnYW7.js.map +1 -0
- package/dist/esm/{index-DTaX19_O.js → index-WmvQpZnM.js} +5 -15
- package/dist/esm/index-WmvQpZnM.js.map +1 -0
- package/dist/esm/loader.js +3 -2
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/md-accordion-item.entry.js +1 -1
- package/dist/esm/md-accordion.entry.js +1 -1
- package/dist/esm/md-app-bar.entry.js +1 -1
- package/dist/esm/md-area-chart.entry.js +1 -1
- package/dist/esm/md-autocomplete.entry.js +2 -2
- package/dist/esm/md-avatar_2.entry.js +1 -1
- package/dist/esm/md-badge.entry.js +1 -1
- package/dist/esm/md-bar-chart.entry.js +1 -1
- package/dist/esm/md-bottom-sheet.entry.js +1 -1
- package/dist/esm/md-breadcrumb-item.entry.js +1 -1
- package/dist/esm/md-breadcrumbs.entry.js +1 -1
- package/dist/esm/md-button-group.entry.js +1 -1
- package/dist/esm/md-button_7.entry.js +1 -1
- package/dist/esm/md-checkbox.entry.js +1 -1
- package/dist/esm/md-chip.entry.js +1 -1
- package/dist/esm/md-color-picker.entry.js +1 -1
- package/dist/esm/md-date-picker.entry.js +1 -1
- package/dist/esm/md-dialog.entry.js +1 -1
- package/dist/esm/md-divider.entry.js +1 -1
- package/dist/esm/md-fab-menu-item.entry.js +1 -1
- package/dist/esm/md-fab-menu.entry.js +1 -1
- package/dist/esm/md-fab.entry.js +1 -1
- package/dist/esm/md-line-chart.entry.js +1 -1
- package/dist/esm/md-list-item.entry.js +1 -1
- package/dist/esm/md-list.entry.js +1 -1
- package/dist/esm/md-menu-item-group.entry.js +1 -1
- package/dist/esm/md-menu_2.entry.js +1 -1
- package/dist/esm/md-meter.entry.js +1 -1
- package/dist/esm/md-multi-select.entry.js +2 -2
- package/dist/esm/md-navigation-bar.entry.js +1 -1
- package/dist/esm/md-navigation-rail-tab.entry.js +1 -1
- package/dist/esm/md-navigation-rail.entry.js +1 -1
- package/dist/esm/md-navigation-tab.entry.js +1 -1
- package/dist/esm/md-number-field.entry.js +1 -1
- package/dist/esm/md-organization-chart.entry.js +1 -1
- package/dist/esm/md-otp-field.entry.js +1 -1
- package/dist/esm/md-pie-chart.entry.js +1 -1
- package/dist/esm/md-progress-indicator.entry.js +1 -1
- package/dist/esm/md-rating.entry.js +1 -1
- package/dist/esm/md-search.entry.js +1 -1
- package/dist/esm/md-segmented-button-set.entry.js +1 -1
- package/dist/esm/md-segmented-button.entry.js +1 -1
- package/dist/esm/md-select-option.entry.js +1 -1
- package/dist/esm/md-select.entry.js +2 -2
- package/dist/esm/md-side-sheet.entry.js +1 -1
- package/dist/esm/md-skeleton.entry.js +1 -1
- package/dist/esm/md-slider.entry.js +1 -1
- package/dist/esm/md-sparkline.entry.js +1 -1
- package/dist/esm/md-split-button.entry.js +1 -1
- package/dist/esm/md-status-dot.entry.js +1 -1
- package/dist/esm/md-step.entry.js +1 -1
- package/dist/esm/md-stepper.entry.js +1 -1
- package/dist/esm/md-sub-menu-item.entry.js +1 -1
- package/dist/esm/md-switch.entry.js +1 -1
- package/dist/esm/md-tab-panel.entry.js +1 -1
- package/dist/esm/md-tab-panels.entry.js +1 -1
- package/dist/esm/md-tab.entry.js +1 -1
- package/dist/esm/md-table-body.entry.js +1 -1
- package/dist/esm/md-table-cell.entry.js +1 -1
- package/dist/esm/md-table-container.entry.js +1 -1
- package/dist/esm/md-table-expand-toggle.entry.js +1 -1
- package/dist/esm/md-table-foot.entry.js +1 -1
- package/dist/esm/md-table-head.entry.js +1 -1
- package/dist/esm/md-table-pagination.entry.js +1 -1
- package/dist/esm/md-table-row.entry.js +1 -1
- package/dist/esm/md-table-sort-label.entry.js +1 -1
- package/dist/esm/md-table-toolbar.entry.js +1 -1
- package/dist/esm/md-table.entry.js +1 -1
- package/dist/esm/md-tabs.entry.js +1 -1
- package/dist/esm/md-text-field.entry.js +1 -1
- package/dist/esm/md-time-picker.entry.js +1 -1
- package/dist/esm/md-toolbar.entry.js +1 -1
- package/dist/esm/md-transfer-list.entry.js +1 -1
- package/dist/esm/md3.js +3 -2
- package/dist/esm/md3.js.map +1 -1
- package/dist/esm/{virtual-select-controller-BEWIC0pC.js → virtual-select-controller-CR60w6DO.js} +10 -9
- package/dist/esm/virtual-select-controller-CR60w6DO.js.map +1 -0
- package/dist/md3/md3.css +1 -1
- package/dist/md3/md3.esm.js +1 -1
- package/dist/md3/md3.esm.js.map +1 -1
- package/dist/md3/{p-2e9503d7.entry.js → p-0a599351.entry.js} +2 -2
- package/dist/md3/p-1d7e0203.entry.js +2 -0
- package/dist/md3/{p-fb61868c.entry.js.map → p-1d7e0203.entry.js.map} +1 -1
- package/dist/md3/p-1e85b8a8.entry.js +2 -0
- package/dist/md3/{p-aaec2698.entry.js.map → p-1e85b8a8.entry.js.map} +1 -1
- package/dist/md3/{p-396089fd.entry.js → p-1edb5a0d.entry.js} +2 -2
- package/dist/md3/{p-c00f7514.entry.js → p-21c89d1d.entry.js} +2 -2
- package/dist/md3/p-22633b2d.entry.js +2 -0
- package/dist/md3/{p-6b2871a0.entry.js.map → p-22633b2d.entry.js.map} +1 -1
- package/dist/md3/{p-2e09a7b7.entry.js → p-27135a6b.entry.js} +2 -2
- package/dist/md3/{p-c063c823.entry.js → p-2befc42c.entry.js} +2 -2
- package/dist/md3/p-2dda08b2.entry.js +2 -0
- package/dist/md3/{p-21772851.entry.js.map → p-2dda08b2.entry.js.map} +1 -1
- package/dist/md3/p-3508d0e0.entry.js +2 -0
- package/dist/md3/{p-f31ab454.entry.js.map → p-3508d0e0.entry.js.map} +1 -1
- package/dist/md3/{p-b34d385b.entry.js → p-35b05b45.entry.js} +2 -2
- package/dist/md3/{p-c2dd8c8c.entry.js → p-38e9a583.entry.js} +2 -2
- package/dist/md3/{p-3cce1de3.entry.js → p-38f82d34.entry.js} +2 -2
- package/dist/md3/p-3a4bd4eb.entry.js +2 -0
- package/dist/md3/{p-72457a85.entry.js.map → p-3a4bd4eb.entry.js.map} +1 -1
- package/dist/md3/{p-be02624e.entry.js → p-3c0469aa.entry.js} +2 -2
- package/dist/md3/{p-63b8c8d1.entry.js → p-408ee4be.entry.js} +2 -2
- package/dist/md3/{p-3015c7e3.entry.js → p-4770b534.entry.js} +2 -2
- package/dist/md3/p-4aed552f.entry.js +2 -0
- package/dist/md3/{p-6c44cf13.entry.js.map → p-4aed552f.entry.js.map} +1 -1
- package/dist/md3/{p-c5af701b.entry.js → p-4ba3623e.entry.js} +2 -2
- package/dist/md3/{p-7b463fbe.entry.js → p-4f2e82cb.entry.js} +2 -2
- package/dist/md3/{p-be412e3f.entry.js → p-501bf161.entry.js} +2 -2
- package/dist/md3/{p-81843ff7.entry.js → p-5929e59c.entry.js} +2 -2
- package/dist/md3/{p-32bdd439.entry.js → p-5c35f916.entry.js} +2 -2
- package/dist/md3/{p-ac35ac5f.entry.js → p-5db87a9d.entry.js} +2 -2
- package/dist/md3/{p-6038b907.entry.js → p-5f39b49d.entry.js} +2 -2
- package/dist/md3/p-637baee1.entry.js +2 -0
- package/dist/md3/{p-47af9819.entry.js.map → p-637baee1.entry.js.map} +1 -1
- package/dist/md3/{p-05ae91b6.entry.js → p-6bf632c7.entry.js} +2 -2
- package/dist/md3/{p-4e3d6e40.entry.js → p-6ea7117d.entry.js} +2 -2
- package/dist/md3/{p-9ddbf247.entry.js → p-7112374d.entry.js} +2 -2
- package/dist/md3/{p-1a8ec5bc.entry.js → p-7858833e.entry.js} +2 -2
- package/dist/md3/p-7c8842bf.entry.js +2 -0
- package/dist/md3/{p-ba2ebde1.entry.js.map → p-7c8842bf.entry.js.map} +1 -1
- package/dist/md3/{p-4d82132d.entry.js → p-7f53a423.entry.js} +2 -2
- package/dist/md3/{p-b0431a5c.entry.js → p-8135c606.entry.js} +2 -2
- package/dist/md3/{p-4dda4cb0.entry.js → p-845ca9cc.entry.js} +2 -2
- package/dist/md3/{p-5b74694e.entry.js → p-89d47130.entry.js} +2 -2
- package/dist/md3/p-8a6fed13.entry.js +2 -0
- package/dist/md3/{p-a803da99.entry.js.map → p-8a6fed13.entry.js.map} +1 -1
- package/dist/md3/{p-e3124e1e.entry.js → p-8b1ea5dc.entry.js} +2 -2
- package/dist/md3/{p-c10a33c2.entry.js → p-8e7df348.entry.js} +2 -2
- package/dist/md3/{p-65195996.entry.js → p-925768ac.entry.js} +2 -2
- package/dist/md3/p-944e69e0.entry.js +2 -0
- package/dist/md3/{p-a3308c40.entry.js.map → p-944e69e0.entry.js.map} +1 -1
- package/dist/md3/{p-ac8762e5.entry.js → p-96c06b24.entry.js} +2 -2
- package/dist/md3/p-9b9677cc.entry.js +2 -0
- package/dist/md3/{p-e7dc5a32.entry.js.map → p-9b9677cc.entry.js.map} +1 -1
- package/dist/md3/p-Bz-JaJcA.js +2 -0
- package/dist/md3/p-Bz-JaJcA.js.map +1 -0
- package/dist/md3/p-CfBPnYW7.js +2 -0
- package/dist/md3/p-CfBPnYW7.js.map +1 -0
- package/dist/md3/p-DQuL1Twl.js +2 -0
- package/dist/md3/p-DQuL1Twl.js.map +1 -0
- package/dist/md3/p-WmvQpZnM.js +3 -0
- package/dist/md3/p-WmvQpZnM.js.map +1 -0
- package/dist/md3/p-a3623653.entry.js +2 -0
- package/dist/md3/{p-19ee9c33.entry.js.map → p-a3623653.entry.js.map} +1 -1
- package/dist/md3/{p-a5fee424.entry.js → p-a49df43d.entry.js} +2 -2
- package/dist/md3/{p-da4e27d4.entry.js → p-a4d4cfed.entry.js} +2 -2
- package/dist/md3/{p-5394254f.entry.js → p-a976498b.entry.js} +2 -2
- package/dist/md3/{p-bf7842f8.entry.js → p-adf8a415.entry.js} +2 -2
- package/dist/md3/{p-c861d774.entry.js → p-ae360663.entry.js} +2 -2
- package/dist/md3/{p-8eb0b6a4.entry.js → p-b243284b.entry.js} +2 -2
- package/dist/md3/{p-45280bf4.entry.js → p-b2d88292.entry.js} +2 -2
- package/dist/md3/{p-796f79f8.entry.js → p-b3b5247b.entry.js} +2 -2
- package/dist/md3/{p-5b799707.entry.js → p-b4266f6b.entry.js} +2 -2
- package/dist/md3/p-b5586b66.entry.js +2 -0
- package/dist/md3/{p-04e97f5d.entry.js.map → p-b5586b66.entry.js.map} +1 -1
- package/dist/md3/{p-a7ffb779.entry.js → p-b7602557.entry.js} +2 -2
- package/dist/md3/{p-6ba63c73.entry.js → p-bc24f0c9.entry.js} +2 -2
- package/dist/md3/{p-edb34a6d.entry.js → p-bed8dfec.entry.js} +2 -2
- package/dist/md3/{p-50555bb7.entry.js → p-c0476406.entry.js} +2 -2
- package/dist/md3/{p-0c2e824d.entry.js → p-c20fbb9e.entry.js} +2 -2
- package/dist/md3/{p-4e45b2ff.entry.js → p-c58c68d0.entry.js} +2 -2
- package/dist/md3/{p-fc0b325d.entry.js → p-cdcea99f.entry.js} +2 -2
- package/dist/md3/{p-0f764a1e.entry.js → p-d2e39c6e.entry.js} +2 -2
- package/dist/md3/p-d7e99f9e.entry.js +2 -0
- package/dist/md3/{p-cf07e761.entry.js.map → p-d7e99f9e.entry.js.map} +1 -1
- package/dist/md3/{p-c1ca6f6c.entry.js → p-da0c36d9.entry.js} +2 -2
- package/dist/md3/{p-77a01bcc.entry.js → p-e3c37222.entry.js} +2 -2
- package/dist/md3/{p-39cb7c24.entry.js → p-e6b09e71.entry.js} +2 -2
- package/dist/md3/{p-b4631a55.entry.js → p-eddae19a.entry.js} +2 -2
- package/dist/md3/{p-c6a12344.entry.js → p-ef7b1826.entry.js} +2 -2
- package/dist/md3/p-f1b69181.entry.js +2 -0
- package/dist/md3/{p-a986fd24.entry.js.map → p-f1b69181.entry.js.map} +1 -1
- package/dist/md3/{p-e6d7f0ff.entry.js → p-f403ad20.entry.js} +2 -2
- package/dist/md3/{p-708a9313.entry.js → p-f5fd9a0b.entry.js} +2 -2
- package/dist/md3/{p-aa0e7d4d.entry.js → p-f71af38f.entry.js} +2 -2
- package/dist/md3/{p-757e3aaf.entry.js → p-fac6da4c.entry.js} +2 -2
- package/dist/md3/{p-134b670a.entry.js → p-fc864f96.entry.js} +2 -2
- package/dist/types/wasm/engine-abi.d.ts +14 -0
- package/hydrate/index.js +19 -7
- package/hydrate/index.mjs +19 -7
- package/package.json +14 -3
- package/dist/cjs/index-DlQ_5_Mv.js.map +0 -1
- package/dist/cjs/virtual-select-controller-CqriaZgm.js.map +0 -1
- package/dist/components/p-BEWIC0pC.js +0 -2
- package/dist/components/p-BEWIC0pC.js.map +0 -1
- package/dist/components/p-MWBNn6Lj.js +0 -2
- package/dist/components/p-MWBNn6Lj.js.map +0 -1
- package/dist/esm/index-DTaX19_O.js.map +0 -1
- package/dist/esm/virtual-select-controller-BEWIC0pC.js.map +0 -1
- package/dist/md3/p-04e97f5d.entry.js +0 -2
- package/dist/md3/p-19ee9c33.entry.js +0 -2
- package/dist/md3/p-21772851.entry.js +0 -2
- package/dist/md3/p-47af9819.entry.js +0 -2
- package/dist/md3/p-6b2871a0.entry.js +0 -2
- package/dist/md3/p-6c44cf13.entry.js +0 -2
- package/dist/md3/p-72457a85.entry.js +0 -2
- package/dist/md3/p-BEWIC0pC.js +0 -2
- package/dist/md3/p-BEWIC0pC.js.map +0 -1
- package/dist/md3/p-DTaX19_O.js +0 -3
- package/dist/md3/p-DTaX19_O.js.map +0 -1
- package/dist/md3/p-a3308c40.entry.js +0 -2
- package/dist/md3/p-a803da99.entry.js +0 -2
- package/dist/md3/p-a986fd24.entry.js +0 -2
- package/dist/md3/p-aaec2698.entry.js +0 -2
- package/dist/md3/p-ba2ebde1.entry.js +0 -2
- package/dist/md3/p-cf07e761.entry.js +0 -2
- package/dist/md3/p-e7dc5a32.entry.js +0 -2
- package/dist/md3/p-f31ab454.entry.js +0 -2
- package/dist/md3/p-fb61868c.entry.js +0 -2
- /package/dist/{components/p-DXXUoRSH.js.map → components-csr/p--OUYjgKN.js.map} +0 -0
- /package/dist/{components/p-Dp-w93ot.js.map → components-csr/p--TCJgZnE.js.map} +0 -0
- /package/dist/{components/p-UdGDg2oJ.js.map → components-csr/p-Bmu7RqHM.js.map} +0 -0
- /package/dist/{components/p-uTEkf0sE.js.map → components-csr/p-C0DlKmRg.js.map} +0 -0
- /package/dist/{components/p-Ch2-tttM.js.map → components-csr/p-C4_7YnHT.js.map} +0 -0
- /package/dist/{components/p-BwXpiUsu.js.map → components-csr/p-CG6FaRlt.js.map} +0 -0
- /package/dist/{components/p-B0Opn6dK.js.map → components-csr/p-CSrxeWwL.js.map} +0 -0
- /package/dist/{components/p-B3MWYEEJ.js.map → components-csr/p-CrbzXk64.js.map} +0 -0
- /package/dist/{components/p-7fN_yCXW.js.map → components-csr/p-DF19mmLl.js.map} +0 -0
- /package/dist/{components/p-e2HRV63Y.js.map → components-csr/p-DfcpeJAu.js.map} +0 -0
- /package/dist/{components/p-C8EP4S21.js.map → components-csr/p-DvXQXhgu.js.map} +0 -0
- /package/dist/{components/p-stybaFzj.js.map → components-csr/p-Hm3X1iai.js.map} +0 -0
- /package/dist/{components/p-6wZSqm_2.js.map → components-csr/p-IWA0yIjJ.js.map} +0 -0
- /package/dist/{components/p-Ddiw2Kjw.js.map → components-csr/p-uZbtHo-A.js.map} +0 -0
- /package/dist/md3/{p-2e9503d7.entry.js.map → p-0a599351.entry.js.map} +0 -0
- /package/dist/md3/{p-396089fd.entry.js.map → p-1edb5a0d.entry.js.map} +0 -0
- /package/dist/md3/{p-c00f7514.entry.js.map → p-21c89d1d.entry.js.map} +0 -0
- /package/dist/md3/{p-2e09a7b7.entry.js.map → p-27135a6b.entry.js.map} +0 -0
- /package/dist/md3/{p-c063c823.entry.js.map → p-2befc42c.entry.js.map} +0 -0
- /package/dist/md3/{p-b34d385b.entry.js.map → p-35b05b45.entry.js.map} +0 -0
- /package/dist/md3/{p-c2dd8c8c.entry.js.map → p-38e9a583.entry.js.map} +0 -0
- /package/dist/md3/{p-3cce1de3.entry.js.map → p-38f82d34.entry.js.map} +0 -0
- /package/dist/md3/{p-be02624e.entry.js.map → p-3c0469aa.entry.js.map} +0 -0
- /package/dist/md3/{p-63b8c8d1.entry.js.map → p-408ee4be.entry.js.map} +0 -0
- /package/dist/md3/{p-3015c7e3.entry.js.map → p-4770b534.entry.js.map} +0 -0
- /package/dist/md3/{p-c5af701b.entry.js.map → p-4ba3623e.entry.js.map} +0 -0
- /package/dist/md3/{p-7b463fbe.entry.js.map → p-4f2e82cb.entry.js.map} +0 -0
- /package/dist/md3/{p-be412e3f.entry.js.map → p-501bf161.entry.js.map} +0 -0
- /package/dist/md3/{p-81843ff7.entry.js.map → p-5929e59c.entry.js.map} +0 -0
- /package/dist/md3/{p-32bdd439.entry.js.map → p-5c35f916.entry.js.map} +0 -0
- /package/dist/md3/{p-ac35ac5f.entry.js.map → p-5db87a9d.entry.js.map} +0 -0
- /package/dist/md3/{p-6038b907.entry.js.map → p-5f39b49d.entry.js.map} +0 -0
- /package/dist/md3/{p-05ae91b6.entry.js.map → p-6bf632c7.entry.js.map} +0 -0
- /package/dist/md3/{p-4e3d6e40.entry.js.map → p-6ea7117d.entry.js.map} +0 -0
- /package/dist/md3/{p-9ddbf247.entry.js.map → p-7112374d.entry.js.map} +0 -0
- /package/dist/md3/{p-1a8ec5bc.entry.js.map → p-7858833e.entry.js.map} +0 -0
- /package/dist/md3/{p-4d82132d.entry.js.map → p-7f53a423.entry.js.map} +0 -0
- /package/dist/md3/{p-b0431a5c.entry.js.map → p-8135c606.entry.js.map} +0 -0
- /package/dist/md3/{p-4dda4cb0.entry.js.map → p-845ca9cc.entry.js.map} +0 -0
- /package/dist/md3/{p-5b74694e.entry.js.map → p-89d47130.entry.js.map} +0 -0
- /package/dist/md3/{p-e3124e1e.entry.js.map → p-8b1ea5dc.entry.js.map} +0 -0
- /package/dist/md3/{p-c10a33c2.entry.js.map → p-8e7df348.entry.js.map} +0 -0
- /package/dist/md3/{p-65195996.entry.js.map → p-925768ac.entry.js.map} +0 -0
- /package/dist/md3/{p-ac8762e5.entry.js.map → p-96c06b24.entry.js.map} +0 -0
- /package/dist/md3/{p-a5fee424.entry.js.map → p-a49df43d.entry.js.map} +0 -0
- /package/dist/md3/{p-da4e27d4.entry.js.map → p-a4d4cfed.entry.js.map} +0 -0
- /package/dist/md3/{p-5394254f.entry.js.map → p-a976498b.entry.js.map} +0 -0
- /package/dist/md3/{p-bf7842f8.entry.js.map → p-adf8a415.entry.js.map} +0 -0
- /package/dist/md3/{p-c861d774.entry.js.map → p-ae360663.entry.js.map} +0 -0
- /package/dist/md3/{p-8eb0b6a4.entry.js.map → p-b243284b.entry.js.map} +0 -0
- /package/dist/md3/{p-45280bf4.entry.js.map → p-b2d88292.entry.js.map} +0 -0
- /package/dist/md3/{p-796f79f8.entry.js.map → p-b3b5247b.entry.js.map} +0 -0
- /package/dist/md3/{p-5b799707.entry.js.map → p-b4266f6b.entry.js.map} +0 -0
- /package/dist/md3/{p-a7ffb779.entry.js.map → p-b7602557.entry.js.map} +0 -0
- /package/dist/md3/{p-6ba63c73.entry.js.map → p-bc24f0c9.entry.js.map} +0 -0
- /package/dist/md3/{p-edb34a6d.entry.js.map → p-bed8dfec.entry.js.map} +0 -0
- /package/dist/md3/{p-50555bb7.entry.js.map → p-c0476406.entry.js.map} +0 -0
- /package/dist/md3/{p-0c2e824d.entry.js.map → p-c20fbb9e.entry.js.map} +0 -0
- /package/dist/md3/{p-4e45b2ff.entry.js.map → p-c58c68d0.entry.js.map} +0 -0
- /package/dist/md3/{p-fc0b325d.entry.js.map → p-cdcea99f.entry.js.map} +0 -0
- /package/dist/md3/{p-0f764a1e.entry.js.map → p-d2e39c6e.entry.js.map} +0 -0
- /package/dist/md3/{p-c1ca6f6c.entry.js.map → p-da0c36d9.entry.js.map} +0 -0
- /package/dist/md3/{p-77a01bcc.entry.js.map → p-e3c37222.entry.js.map} +0 -0
- /package/dist/md3/{p-39cb7c24.entry.js.map → p-e6b09e71.entry.js.map} +0 -0
- /package/dist/md3/{p-b4631a55.entry.js.map → p-eddae19a.entry.js.map} +0 -0
- /package/dist/md3/{p-c6a12344.entry.js.map → p-ef7b1826.entry.js.map} +0 -0
- /package/dist/md3/{p-e6d7f0ff.entry.js.map → p-f403ad20.entry.js.map} +0 -0
- /package/dist/md3/{p-708a9313.entry.js.map → p-f5fd9a0b.entry.js.map} +0 -0
- /package/dist/md3/{p-aa0e7d4d.entry.js.map → p-f71af38f.entry.js.map} +0 -0
- /package/dist/md3/{p-757e3aaf.entry.js.map → p-fac6da4c.entry.js.map} +0 -0
- /package/dist/md3/{p-134b670a.entry.js.map → p-fc864f96.entry.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,c as s,h as e,H as i,g as a}from"./p-WmvQpZnM.js";import{B as r}from"./p-Bx6--dQF.js";import{d as o,a as n,b as h,p as c}from"./p-DvOKnoqK.js";import{n as d,b as l,a as m}from"./p-C_ogF68H.js";import"./p-DzPKu-Ma.js";const b=()=>`:host{--_block-size:var(--md-bar-chart-block-size, auto);--_min-block-size:var(--md-bar-chart-min-block-size, max(120px, calc(160px + var(--md-sys-density-scale, 0) * 8px)));--_aspect-ratio:var(--md-bar-chart-aspect-ratio, 16 / 9);--_background:var(--md-bar-chart-background, var(--md-sys-color-surface-container-low, #F7F2FA));--_padding:var(--md-bar-chart-padding, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));--_shape:var(--md-bar-chart-shape, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));--_empty-color:var(--md-bar-chart-empty-color, var(--md-sys-color-on-surface-variant, #49454F));--_empty-background:var(--md-bar-chart-empty-background, var(--_background));--_empty-font:var(--md-bar-chart-empty-font, var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif));--_empty-font-size:var(--md-bar-chart-empty-font-size, var(--md-sys-typescale-body-medium-font-size, 14px));--_empty-icon-size:var(--md-bar-chart-empty-icon-size, 40px);--_zoom-size:var(--md-bar-chart-zoom-size, 28px);--_zoom-track-color:var(--md-bar-chart-zoom-track-color, var(--md-sys-color-surface-container-highest, #E6E0E9));--_zoom-window-color:var(--md-bar-chart-zoom-window-color, var(--md-sys-color-secondary-container, #E8DEF8));--_zoom-handle-color:var(--md-bar-chart-zoom-handle-color, var(--md-sys-color-primary, #6750A4));--_zoom-band-color:var(--md-bar-chart-zoom-band-color, color-mix(in srgb, var(--md-sys-color-primary, #6750A4) 16%, transparent));--_zoom-pan-inset:10px;display:block;position:relative;inline-size:100%;block-size:var(--_block-size);min-block-size:var(--_min-block-size);background:var(--_background);padding:var(--_padding);border-radius:var(--_shape);box-sizing:border-box;aspect-ratio:var(--_aspect-ratio)}.md-bar-chart__header,.md-bar-chart__footer{display:contents}.md-bar-chart__header>slot[name='header']::slotted(*),.md-bar-chart__footer>slot[name='footer']::slotted(*){display:block;margin-block:8px}.md-bar-chart__canvas{position:absolute;inset:var(--_padding);min-block-size:0;min-inline-size:0}:host(.md-bar-chart--zoom-slider) .md-bar-chart__canvas{bottom:calc(var(--_padding) + var(--_zoom-size))}:host(.md-bar-chart--zoom-drag) .md-bar-chart__canvas{cursor:ew-resize}.md-bar-chart__zoom{position:absolute;inset-inline:var(--_padding);bottom:var(--_padding);block-size:var(--_zoom-size);display:flex;align-items:center}.md-bar-chart__zoom-slider{--md-slider-active-color:var(--_zoom-window-color);--md-slider-inactive-color:var(--_zoom-track-color);--md-slider-thumb-color:var(--_zoom-handle-color);--md-slider-thumb-height:var(--_zoom-size);--md-slider-track-height:12px}.md-bar-chart__zoom-pan{position:absolute;inset-block:0;z-index:1;cursor:grab;touch-action:none}.md-bar-chart__zoom-pan:active{cursor:grabbing}.md-bar-chart__zoom-band{position:absolute;background:var(--_zoom-band-color);border-inline:1px solid var(--_zoom-handle-color);pointer-events:none}.md-bar-chart__empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;box-sizing:border-box;padding:24px;background:var(--_empty-background);border-radius:var(--_shape);color:var(--_empty-color);font-family:var(--_empty-font);font-size:var(--_empty-font-size);line-height:var(--md-sys-typescale-body-medium-line-height, 20px);pointer-events:none;text-align:center}.md-bar-chart__loading{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;box-sizing:border-box;padding:24px;background:var(--_empty-background);border-radius:var(--_shape);color:var(--_empty-color);font-family:var(--_empty-font);font-size:var(--_empty-font-size);text-align:center}.md-bar-chart__spinner{inline-size:var(--_empty-icon-size);block-size:var(--_empty-icon-size)}.md-bar-chart__empty ::slotted(.material-symbols-outlined),.md-bar-chart__empty ::slotted(.material-symbols-rounded),.md-bar-chart__empty ::slotted(.material-symbols-sharp),.md-bar-chart__empty ::slotted(.material-icons){font-size:var(--_empty-icon-size) !important;line-height:1;opacity:0.55}.md-bar-chart__a11y-table{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media (forced-colors: active){:host{forced-color-adjust:auto}}.md-bar-chart__live{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}[part='legend'] button:focus-visible{outline:3px solid var(--md-sys-color-secondary, #625B71);outline-offset:2px;border-radius:6px}.md-bar-chart__canvas:focus-visible{outline:3px solid var(--md-sys-color-secondary, #625B71);outline-offset:-3px;border-radius:4px}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;const p=class{constructor(e){t(this,e);this.mdBarClick=s(this,"mdBarClick",7);this.mdLegendClick=s(this,"mdLegendClick",7);this.mdHover=s(this,"mdHover",7);this.mdReady=s(this,"mdReady",7);this.mdZoom=s(this,"mdZoom",7);this.label="";this.titleAlign="start";this.series=[];this.layout="vertical";this.stack="none";this.categoryGap="30%";this.barGap="20%";this.cornerRadius=6;this.legend="top-end";this.tooltip="axis";this.zoom="none";this.locale="";this.noAnimation=false;this.animation="expressive";this.showLabels=false;this.showTotals=false;this.chevron=false;this.polar=false;this.axisTicks=false;this.clickable=false;this.labelZoomStart="Zoom range start";this.labelZoomEnd="Zoom range end";this.labelPlot="Chart data. Use the arrow keys to move between points, Home and End for the first and last, Escape to leave.";this.labelPoint="%x%: %values%";this.loading=false;this.loadingLabel="Loading chart…";this.density=0;this.mounted=false;this.kbIndex=-1;this.announcement="";this.zoomWin=null;this.dragBand=null;this.grab=null;this.engine=null;this.applyQueued=false;this.ro=null;this.legendHidden=new Map;this.bindChartHost=t=>{this.chartHost=t};this.bindA11yTableHost=t=>{this.a11yTableHost=t};this.onPlotPointerDown=t=>{if(!this.zoomInside||t.button!==0||this.grab)return;if(!this.insidePlot(t))return;const s=this.hostX(t);this.grab={id:t.pointerId,kind:"band",x:s,win:this.win()};this.dragBand={x1:s,x2:s};const e=t.composedPath?.()[0]??t.target;e.setPointerCapture?.(t.pointerId)};this.onPointerMove=t=>{const s=this.grab;if(!s||s.id!==t.pointerId)return;if(s.kind==="band"){const e=this.plotRect();if(!e)return;this.dragBand={x1:s.x,x2:Math.min(Math.max(this.hostX(t),e.x),e.x+e.width)};return}const e=this.trackFrac(t.clientX);const i=this.trackFrac(s.x);if(e==null||i==null)return;const a=Math.max(1,this.dataLength()-1);const r=s.win.end-s.win.start;const o=Math.round((e-i)*a);const n=Math.min(Math.max(0,s.win.start+o),a-r);this.applyZoom(n,n+r)};this.onPointerUp=t=>{const s=this.grab;if(!s||s.id!==t.pointerId)return;this.grab=null;const e=this.dragBand;this.dragBand=null;if(s.kind!=="band"||!e)return;if(Math.abs(e.x2-e.x1)<8)return;const[i,a]=[this.indexAtX(e.x1),this.indexAtX(e.x2)].sort(((t,s)=>t-s));if(a-i>=1)this.applyZoom(i,a)};this.onPlotDblClick=t=>{if(this.zoomInside&&this.zoomWin&&this.insidePlot(t))this.resetZoom()};this.onZoomPanDown=t=>{if(t.button!==0)return;t.stopPropagation();t.preventDefault();this.grab={id:t.pointerId,kind:"pan",x:t.clientX,win:this.win()};t.target.setPointerCapture?.(t.pointerId)};this.onZoomSliderInput=t=>{t.stopPropagation();const{valueStart:s,valueEnd:e}=t.detail??{};if(s==null||e==null)return;this.applyZoom(s,e)};this.onZoomSliderEvent=t=>t.stopPropagation();this.onPlotKeyDown=t=>{const s=this.engine?.getScene();const e=Math.max(0,(s?.xPositions.length??0)-1);if(!s||e<0)return;const i=typeof getComputedStyle==="function"&&getComputedStyle(this.el).direction==="rtl";const a=i?"ArrowLeft":"ArrowRight";const r=i?"ArrowRight":"ArrowLeft";let o=this.kbIndex;switch(t.key){case a:o=this.kbIndex<0?0:Math.min(e,this.kbIndex+1);break;case r:o=this.kbIndex<0?e:Math.max(0,this.kbIndex-1);break;case"Home":o=0;break;case"End":o=e;break;case"Escape":if(this.kbIndex<0)return;o=-1;break;case"Enter":case" ":case"Spacebar":if(this.kbIndex<0)return;t.preventDefault();this.emitBarClickForCategory(this.kbIndex,t);return;default:return}t.preventDefault();this.moveKeyboardCursor(o)};this.onPlotBlur=()=>{if(this.kbIndex>=0)this.moveKeyboardCursor(-1)}}seriesKeys(){const t=new Map;return this.series.map(((s,e)=>{const i=s.id!=null?`id:${s.id}`:s.label!=null?`label:${s.label}`:`pos:${e}`;const a=t.get(i)??0;t.set(i,a+1);return a===0?i:`${i}#${a}`}))}rememberLegendToggle(t,s){const e=this.seriesKeys()[t];if(e==null)return;this.legendHidden.set(e,s);if(this.legendHidden.size>256){const t=this.legendHidden.keys().next().value;this.legendHidden.delete(t)}}componentDidLoad(){this.initChart();if(typeof window!=="undefined"&&window.matchMedia){this.themeMql=window.matchMedia("(prefers-color-scheme: dark)");this.themeListener=()=>this.applyEngine();this.themeMql.addEventListener?.("change",this.themeListener)}}disconnectedCallback(){this.ro?.disconnect();this.ro=null;this.engine?.dispose();this.engine=null;if(this.themeMql&&this.themeListener){this.themeMql.removeEventListener?.("change",this.themeListener);this.themeListener=undefined;this.themeMql=undefined}}onAnyPropChange(){if(this.applyQueued)return;this.applyQueued=true;queueMicrotask((()=>{this.applyQueued=false;this.applyEngine();this.rebuildA11yTable()}))}async resize(){this.engine?.resize()}onLoadingChange(t,s){if(s&&!t)this.engine?.replay()}async replay(){this.engine?.replay()}async drill(t,s="down"){this.engine?.drill(t,s)}async toDataURL(){return this.engine?.toDataURL("image/png")??""}async getInstance(){return this.engine}initChart(){this.makeEngine();this.applyEngine();this.rebuildA11yTable();this.mounted=true;this.mdReady.emit()}makeEngine(){if(!this.chartHost)return;this.ro?.disconnect();this.ro=null;this.engine?.dispose();try{this.engine=new r(this.chartHost)}catch{this.engine=null}if(this.engine&&typeof ResizeObserver!=="undefined"){this.ro=new ResizeObserver((()=>this.engine?.resize()));this.ro.observe(this.chartHost)}}parseRatio(t,s){if(typeof t==="number")return Number.isFinite(t)?t>1?t/100:t:s;const e=parseFloat(t);if(!Number.isFinite(e))return s;return t.trim().endsWith("%")||e>1?e/100:e}buildEngineTheme(t){return{background:t.background,textColor:t.textColor,textColorMuted:t.textColorMuted,axisLineColor:t.axisLineColor,gridLineColor:t.gridColor,surface:t.surface,fontFamily:t.fontFamily,labelSize:t.labelSize,titleSize:t.titleSize}}get zoomInside(){return!this.polar&&(this.zoom==="inside"||this.zoom==="both")}get zoomSliderOn(){return!this.polar&&(this.zoom==="slider"||this.zoom==="both")}dataLength(){const t=(this.series??[]).reduce(((t,s)=>Math.max(t,s?.data?.length??0)),0);return Math.max(t,this.xAxis?.data?.length??0)}winStart(){return this.zoomWin&&!this.polar?this.win().start:0}win(){const t=Math.max(0,this.dataLength()-1);const s=this.zoomWin;if(!s)return{start:0,end:t};const e=Math.min(Math.max(0,s.start),Math.max(0,t-1));return{start:e,end:Math.min(Math.max(e+1,s.end),t)}}applyZoom(t,s,e=false){const i=Math.max(0,this.dataLength()-1);const a=Math.min(Math.max(0,Math.round(t)),Math.max(0,i-1));const r=Math.min(Math.max(a+1,Math.round(s)),i);this.zoomWin=e?null:{start:a,end:r};this.applyEngine(true);this.rebuildA11yTable();this.mdZoom.emit({startIndex:e?0:a,endIndex:e?i:r,reset:e})}async setZoom(t,s){this.applyZoom(t,s)}async resetZoom(){this.applyZoom(0,0,true)}plotRect(){const t=this.engine?.getScene()?.plot;return t?{x:t.x,y:t.y,width:t.width,height:t.height}:null}canvasOffset(){const t=this.chartHost;if(!t)return{x:0,y:0};const s=this.el.getBoundingClientRect();const e=t.getBoundingClientRect();return{x:e.left-s.left,y:e.top-s.top}}zoomBandStyle(){const t=this.plotRect();if(!this.dragBand||!t)return undefined;const s=this.canvasOffset();const{x1:e,x2:i}=this.dragBand;return{left:`${s.x+Math.min(e,i)}px`,width:`${Math.abs(i-e)}px`,top:`${s.y+t.y}px`,height:`${t.height}px`}}hostX(t){return t.clientX-(this.chartHost??this.el).getBoundingClientRect().left}indexAtX(t){const s=this.engine?.getScene();const e=this.win();const i=s?.xPositions;if(!i?.length)return e.start;let a=0;let r=Infinity;i.forEach(((s,e)=>{const i=Math.abs(s-t);if(i<r){r=i;a=e}}));return e.start+a}insidePlot(t){const s=this.plotRect();if(!s)return false;const e=(this.chartHost??this.el).getBoundingClientRect();const i=t.clientX-e.left;const a=t.clientY-e.top;return i>=s.x&&i<=s.x+s.width&&a>=s.y&&a<=s.y+s.height}sliderTrackRect(){const t=this.el.shadowRoot?.querySelector(".md-bar-chart__zoom-slider");if(!t)return null;const s=t.getBoundingClientRect();if(!s.width)return null;return{left:s.left,width:s.width,rtl:getComputedStyle(this.el).direction==="rtl"}}trackFrac(t){const s=this.sliderTrackRect();if(!s)return null;const e=(t-s.left)/s.width;return Math.min(Math.max(s.rtl?1-e:e,0),1)}renderZoomSlider(){const t=Math.max(1,this.dataLength()-1);const s=this.win();const i=s=>s/t*100;const a=t=>String(this.xAxis?.data?.[t]??t);return e("div",{class:"md-bar-chart__zoom",part:"zoom"},e("md-slider",{class:"md-bar-chart__zoom-slider",part:"zoom-slider",exportparts:"track: zoom-track, track-active: zoom-window, thumb-knob: zoom-handle",range:true,controlled:true,min:0,max:t,step:1,valueStart:s.start,valueEnd:s.end,ariaLabelStart:this.labelZoomStart,ariaLabelEnd:this.labelZoomEnd,valueStartText:a(s.start),valueEndText:a(s.end),onMdInput:this.onZoomSliderInput,onMdChange:this.onZoomSliderEvent,onMdDragStart:this.onZoomSliderEvent,onMdDragEnd:this.onZoomSliderEvent,onMdFocus:this.onZoomSliderEvent,onMdBlur:this.onZoomSliderEvent}),e("div",{class:"md-bar-chart__zoom-pan",part:"zoom-pan",style:{insetInlineStart:`calc(${i(s.start)}% + var(--_zoom-pan-inset))`,inlineSize:`max(0px, calc(${i(s.end)-i(s.start)}% - 2 * var(--_zoom-pan-inset)))`},onPointerDown:this.onZoomPanDown}))}buildSpec(t){const s=this.stack==="percentage";const e=t=>this.valueFormatter?this.valueFormatter(t):t.toLocaleString(this.locale||undefined);const i=this.seriesKeys();const a=this.zoomWin&&!this.polar?this.win():null;const r=t=>t?a?t.slice(a.start,a.end+1):t.slice():undefined;const h=t=>{if(!t||!a)return t;const s={};for(const[e,i]of Object.entries(t)){const t=Number(e)-a.start;if(t>=0&&t<=a.end-a.start)s[t]=i}return s};return{series:this.series.map(((s,e)=>{let a;if(s.pointColors){const i={};for(const[a,r]of Object.entries(s.pointColors))i[Number(a)]=n(this.el,r,c(t.palette,e));a=h(i)}return{label:s.label??`Series ${e+1}`,color:n(this.el,s.color,c(t.palette,e)),data:r(s.data)??[],hidden:s.hidden??this.legendHidden.get(i[e])??false,stack:s.stack,axisIndex:s.yAxisIndex,overlay:s.overlay,widthRatio:s.widthRatio,pointWidths:h(s.pointWidths),range:r(s.range)?.map(d),pointColors:a}})),title:this.label||undefined,subtitle:this.subtitle||undefined,titleAlign:this.titleAlign,categories:r(this.xAxis?.data)??[],categoryFormatter:this.xAxis?.valueFormatter??o,categoryLabelRotation:this.xAxis?.labelRotation,categoryLabelsMirrored:this.xAxis?.mirrorLabels,valueAxis2:this.yAxis2?{min:this.yAxis2.min,max:this.yAxis2.max,label:this.yAxis2.label,formatter:this.yAxis2.valueFormatter?t=>String(this.yAxis2.valueFormatter(t)):undefined,hidden:this.yAxis2.hidden}:undefined,valueTickFormatter:this.yAxis?.valueFormatter?t=>String(this.yAxis.valueFormatter(t)):undefined,categoryLabel:this.xAxis?.label,categoryHidden:this.xAxis?.hidden,categoryHideTicks:this.xAxis?.hideTicks,categoryAxisLine:this.xAxis?.axisLine,categoryDash:this.xAxis?.dash,valueScale:this.yAxis?.scale??"value",valueBreaks:(this.layout==="horizontal"?this.xAxis:this.yAxis)?.breaks,valueMin:s?0:this.yAxis?.min,valueMax:s?100:this.yAxis?.max,valueFormatter:s?t=>`${Math.round(t)}%`:e,valueLabel:this.yAxis?.label,valueHidden:this.yAxis?.hidden,valueHideTicks:this.yAxis?.hideTicks,valueAxisLine:this.yAxis?.axisLine,valueDash:this.yAxis?.dash,valueGridDash:this.yAxis?.gridDash,stack:this.stack,horizontal:this.layout==="horizontal",categoryGapRatio:this.parseRatio(this.categoryGap,.3),barGapRatio:this.parseRatio(this.barGap,.2),barWidth:this.barWidth,cornerRadius:this.cornerRadius,showLabels:this.showLabels,showTotals:this.showTotals,chevron:this.chevron,polar:this.polar,polarHole:this.polarHole,polarSweep:this.polarSweep,legend:this.legend,axisTicks:this.axisTicks,animation:this.noAnimation?"none":this.animation,animationDuration:this.animationDuration}}applyEngine(t=false){if(!this.engine)return;const s=h(this.el);this.engine.setSpec(this.buildSpec(s),this.buildEngineTheme(s),{onHover:t=>{if(t<0)return;const s=t+this.winStart();this.mdHover.emit({dataIndex:s,axisValue:this.xAxis?.data?.[s],seriesIndices:this.visibleSeriesIndices()})},onLegendClick:t=>{this.rememberLegendToggle(t.seriesIndex,!!t.hidden);this.mdLegendClick.emit({seriesIndex:t.seriesIndex,seriesId:this.series[t.seriesIndex]?.id,selected:!t.hidden})},onPointClick:(t,s,e)=>{const i=this.series[t];if(!i)return;const a=s+this.winStart();this.mdBarClick.emit({seriesIndex:t,seriesId:i.id,dataIndex:a,value:i.data?.[a]??null,axisValue:this.xAxis?.data?.[a],nativeEvent:e,series:i})}},{animate:!t});this.engine.setHoverEnabled(this.tooltip!=="none");this.engine.setClickable(this.clickable);this.engine.setTooltip({render:this.tooltipRenderer,missingFormatter:this.valueFormatter})}visibleSeriesIndices(){const t=this.engine?.getScene()?.hoverPoints;if(t)return t.map((t=>t.seriesIndex));return this.series.map(((t,s)=>s)).filter((t=>!this.series[t].hidden))}rebuildA11yTable(){if(!this.a11yTableHost)return;this.a11yTableHost.innerHTML=l({title:this.label,xAxisLabel:this.xAxis?.label,xAxisData:this.xAxis?.data,xValueFormatter:this.xAxis?.valueFormatter??(t=>o(t,this.locale)),locale:this.locale,series:this.series,valueFormatter:this.valueFormatter})}emitBarClickForCategory(t,s){const e=this.visibleSeriesIndices()[0]??0;const i=this.series[e];if(!i)return;const a=t+this.winStart();this.mdBarClick.emit({seriesIndex:e,seriesId:i.id,dataIndex:a,value:i.data?.[a]??null,axisValue:this.xAxis?.data?.[a],nativeEvent:s,series:i})}moveKeyboardCursor(t){this.kbIndex=t;this.engine?.focusIndex(t);if(t<0){this.announcement="";return}const s=this.engine?.getScene();const e=s?.xLabels?.[t]??String(t+1);const i=t=>this.valueFormatter?this.valueFormatter(t):t.toLocaleString(this.locale||undefined);const a=(s?.hoverPoints??[]).map((s=>{const e=s.byIndex[t];return e?`${s.label} ${i(e.value)}`:null})).filter(Boolean).join(", ");this.announcement=this.labelPoint.replace("%x%",e).replace("%values%",a)}render(){const t=this.xAxis?.data??[];const s=m({title:this.label,chartType:"bar",seriesCount:this.series.length,xMin:t[0],xMax:t[t.length-1]});const a=this.series.length===0&&!this.loading;return e(i,{key:"e155582d9ff9e0d8cf87e7b05e8632a27b8a73c3",class:{"md-bar-chart":true,"md-bar-chart--empty":a,"md-bar-chart--loading":this.loading,"md-bar-chart--mounted":this.mounted,"md-bar-chart--zoom-slider":this.zoomSliderOn,"md-bar-chart--zoom-drag":this.zoomInside,[`md-bar-chart--${this.layout}`]:true},role:"figure","aria-label":s,"aria-busy":this.loading?"true":null,style:this.heightProp?{blockSize:this.heightProp}:undefined,onPointerDown:this.onPlotPointerDown,onPointerMove:this.onPointerMove,onPointerUp:this.onPointerUp,onPointerCancel:this.onPointerUp,onDblClick:this.onPlotDblClick},e("header",{key:"c3d8bb7c3ec9f82fa757d95a77f8ca7bf02f1bf9",class:"md-bar-chart__header",part:"header"},e("slot",{key:"c48b20369d3aceb5f5b3cfebeaec42bf745e5b36",name:"header"})),e("div",{key:"68a52073ff664265f87f427110dd4bb091ab274b",class:"md-bar-chart__canvas",part:"canvas",ref:t=>this.bindChartHost(t),tabindex:a?undefined:"0",role:a?undefined:"application","aria-label":a?undefined:this.labelPlot,onKeyDown:this.onPlotKeyDown,onBlur:this.onPlotBlur}),a&&e("div",{key:"2477f2824bba08ff626f5523b6d34c986dd86f56",class:"md-bar-chart__empty",part:"empty"},e("slot",{key:"11862b82c1baf5309abfa9ce67fa586df130c4a1",name:"empty"},"No data to display")),this.loading&&e("div",{key:"c9486cc7ceb63e39e86f8d041d35e2b8bb6b5876",class:"md-bar-chart__loading",part:"loading",role:"status"},e("slot",{key:"6984426167cc5e5393d8ca01754cd53c7ac170fb",name:"loader"},e("slot",{key:"71ee31df2d4a0359c130fe8f7a6c5a4656055290",name:"loading"},e("md-progress-indicator",{key:"1ee2036ed0dbc533b0bebd0f0d71c0c544d135cf",class:"md-bar-chart__spinner",variant:"circular",indeterminate:true,label:this.loadingLabel}),e("span",{key:"302bf82125dafd91375155a50fe082dd44d800a2",class:"md-bar-chart__loading-text"},this.loadingLabel)))),this.dragBand&&Math.abs(this.dragBand.x2-this.dragBand.x1)>1&&e("div",{key:"6893ef9fcd3e7e2d54d95f9850497de9c6188ffe",class:"md-bar-chart__zoom-band",part:"zoom-band",style:this.zoomBandStyle()}),this.zoomSliderOn&&this.renderZoomSlider(),e("footer",{key:"885e368d60144c82afdc6e2f1ed0066f3915e7c8",class:"md-bar-chart__footer",part:"footer"},e("slot",{key:"21e5f868257837f6371a55f2d56fbc76867af2da",name:"footer"})),e("div",{key:"dbc0fc3578b302a5fd1dbe08966c4000636099e6",class:"md-bar-chart__a11y-table",ref:t=>this.bindA11yTableHost(t)}),e("div",{key:"bfab9fd9c80b333b3770ceaa0fc7b4f6c1dccf93",class:"md-bar-chart__live",role:"status","aria-live":"polite","aria-atomic":"true"},this.announcement))}get el(){return a(this)}static get watchers(){return{series:[{onAnyPropChange:0}],xAxis:[{onAnyPropChange:0}],yAxis:[{onAnyPropChange:0}],yAxis2:[{onAnyPropChange:0}],layout:[{onAnyPropChange:0}],stack:[{onAnyPropChange:0}],categoryGap:[{onAnyPropChange:0}],barGap:[{onAnyPropChange:0}],barWidth:[{onAnyPropChange:0}],cornerRadius:[{onAnyPropChange:0}],legend:[{onAnyPropChange:0}],tooltip:[{onAnyPropChange:0}],zoom:[{onAnyPropChange:0}],label:[{onAnyPropChange:0}],subtitle:[{onAnyPropChange:0}],titleAlign:[{onAnyPropChange:0}],showLabels:[{onAnyPropChange:0}],showTotals:[{onAnyPropChange:0}],chevron:[{onAnyPropChange:0}],polar:[{onAnyPropChange:0}],polarHole:[{onAnyPropChange:0}],polarSweep:[{onAnyPropChange:0}],axisTicks:[{onAnyPropChange:0}],animation:[{onAnyPropChange:0}],animationDuration:[{onAnyPropChange:0}],tooltipRenderer:[{onAnyPropChange:0}],valueFormatter:[{onAnyPropChange:0}],locale:[{onAnyPropChange:0}],noAnimation:[{onAnyPropChange:0}],clickable:[{onAnyPropChange:0}],loading:[{onLoadingChange:0}]}}};p.style=b();export{p as md_bar_chart};
|
|
2
|
+
//# sourceMappingURL=p-1e85b8a8.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["mdBarChartCss","MdBarChart","constructor","hostRef","this","label","titleAlign","series","layout","stack","categoryGap","barGap","cornerRadius","legend","tooltip","zoom","locale","noAnimation","animation","showLabels","showTotals","chevron","polar","axisTicks","clickable","labelZoomStart","labelZoomEnd","labelPlot","labelPoint","loading","loadingLabel","density","mounted","kbIndex","announcement","zoomWin","dragBand","grab","engine","applyQueued","ro","legendHidden","Map","bindChartHost","el","chartHost","bindA11yTableHost","a11yTableHost","onPlotPointerDown","e","zoomInside","button","insidePlot","x","hostX","id","pointerId","kind","win","x1","x2","target","composedPath","setPointerCapture","onPointerMove","g","plot","plotRect","Math","min","max","width","frac","trackFrac","clientX","originFrac","last","dataLength","span","end","start","delta","round","s","applyZoom","onPointerUp","band","abs","a","b","indexAtX","sort","m","n","onPlotDblClick","resetZoom","onZoomPanDown","stopPropagation","preventDefault","onZoomSliderInput","valueStart","valueEnd","detail","onZoomSliderEvent","onPlotKeyDown","scene","getScene","xPositions","length","rtl","getComputedStyle","direction","forward","back","next","key","emitBarClickForCategory","moveKeyboardCursor","onPlotBlur","seriesKeys","seen","map","i","base","get","set","rememberLegendToggle","seriesIndex","hidden","size","oldest","keys","value","delete","componentDidLoad","initChart","window","matchMedia","themeMql","themeListener","applyEngine","addEventListener","disconnectedCallback","disconnect","dispose","removeEventListener","undefined","onAnyPropChange","queueMicrotask","rebuildA11yTable","resize","onLoadingChange","now","before","replay","drill","index","toDataURL","getInstance","makeEngine","mdReady","emit","BarChartEngine","ResizeObserver","observe","parseRatio","v","fallback","Number","isFinite","parseFloat","trim","endsWith","buildEngineTheme","t","background","textColor","textColorMuted","axisLineColor","gridLineColor","gridColor","surface","fontFamily","labelSize","titleSize","zoomSliderOn","reduce","acc","d","data","xAxis","winStart","w","reset","mdZoom","startIndex","endIndex","setZoom","p","y","height","canvasOffset","canvas","host","getBoundingClientRect","box","left","top","zoomBandStyle","off","xs","best","bestD","Infinity","forEach","px","clientY","sliderTrackRect","slider","shadowRoot","querySelector","r","track","raw","renderZoomSlider","pct","fmt","String","h","class","part","exportparts","range","controlled","step","ariaLabelStart","ariaLabelEnd","valueStartText","valueEndText","onMdInput","onMdChange","onMdDragStart","onMdDragEnd","onMdFocus","onMdBlur","style","insetInlineStart","inlineSize","onPointerDown","buildSpec","percentage","vFmt","valueFormatter","toLocaleString","zw","cut","arr","slice","rebaseMap","rec","out","k","Object","entries","pointColors","resolved","c","resolveSeriesColor","pickPaletteColor","palette","color","axisIndex","yAxisIndex","overlay","widthRatio","pointWidths","normalizeRange","title","subtitle","categories","categoryFormatter","defaultValueFormatter","categoryLabelRotation","labelRotation","categoryLabelsMirrored","mirrorLabels","valueAxis2","yAxis2","formatter","valueTickFormatter","yAxis","categoryLabel","categoryHidden","categoryHideTicks","hideTicks","categoryAxisLine","axisLine","categoryDash","dash","valueScale","scale","valueBreaks","breaks","valueMin","valueMax","valueLabel","valueHidden","valueHideTicks","valueAxisLine","valueDash","valueGridDash","gridDash","horizontal","categoryGapRatio","barGapRatio","barWidth","polarHole","polarSweep","animationDuration","snap","readMdChartTheme","setSpec","onHover","idx","mdHover","dataIndex","axisValue","seriesIndices","visibleSeriesIndices","onLegendClick","item","mdLegendClick","seriesId","selected","onPointClick","si","di","mdBarClick","nativeEvent","animate","setHoverEnabled","setClickable","setTooltip","render","tooltipRenderer","missingFormatter","hp","hoverPoints","_","filter","innerHTML","buildDataTableHtml","xAxisLabel","xAxisData","xValueFormatter","focusIndex","xText","xLabels","yFmt","values","pt","byIndex","Boolean","join","replace","xValues","summary","buildChartSummary","chartType","seriesCount","xMin","xMax","empty","Host","role","heightProp","blockSize","onPointerCancel","onDblClick","name","ref","tabindex","onKeyDown","onBlur","variant","indeterminate"],"sources":["src/components/md-bar-chart/md-bar-chart.css?tag=md-bar-chart&encapsulation=shadow","src/components/md-bar-chart/md-bar-chart.tsx"],"sourcesContent":["/* ==========================================================\n md-bar-chart — Material Design 3 Expressive bar chart\n\n PUBLIC CSS CUSTOM PROPERTIES:\n --md-bar-chart-block-size Explicit chart height, overriding the aspect ratio (default: auto)\n --md-bar-chart-min-block-size Floor the chart height never drops below (density-aware)\n --md-bar-chart-aspect-ratio Width:height ratio used when no block-size is set (default: 16 / 9)\n --md-bar-chart-background Chart surface fill (default: surface-container-low)\n --md-bar-chart-padding Inset between the host edge and the plot canvas (density-aware)\n --md-bar-chart-shape Corner radius of the chart surface (density-aware)\n --md-bar-chart-empty-color Empty-state text colour (default: on-surface-variant)\n --md-bar-chart-empty-background Empty-state overlay fill (defaults to the chart background)\n --md-bar-chart-empty-font Empty-state font family (default: body-medium)\n --md-bar-chart-empty-font-size Empty-state font size (default: body-medium, 14px)\n --md-bar-chart-empty-icon-size Size of an icon slotted into the empty state (default: 40px)\n --md-bar-chart-zoom-size Height reserved for the zoom slider (default: 28px)\n --md-bar-chart-zoom-track-color Zoom slider track colour\n --md-bar-chart-zoom-window-color Zoom slider selected-window colour\n --md-bar-chart-zoom-handle-color Zoom slider thumb + drag-band edge colour\n --md-bar-chart-zoom-band-color Drag-to-zoom selection fill\n (the zoom slider is an md-slider — its own --md-slider-* variables also\n apply, scoped to .md-bar-chart__zoom-slider)\n\n CSS PARTS:\n header Header row above the plot (hosts the `header` slot)\n canvas The plot surface the chart draws into\n empty Empty-state overlay, shown when there is no data\n footer Footer row below the plot (hosts the `footer` slot)\n zoom Wrapper around the zoom slider\n zoom-slider The zoom range slider itself\n zoom-track Zoom slider's inactive track (forwarded from md-slider)\n zoom-window Zoom slider's selected window (forwarded from md-slider)\n zoom-handle Zoom slider's thumbs (forwarded from md-slider)\n zoom-pan Grip that drags the whole zoom window along the track\n zoom-band Live selection band drawn while dragging across the plot\n tooltip The hover card, including one built by `tooltipRenderer`\n\n SLOTS:\n header Content for the header row, replacing the default title block\n empty Replaces the empty-state message when there is no data\n footer Content for the footer row below the plot\n ========================================================== */\n\n:host {\n --_block-size: var(--md-bar-chart-block-size, auto);\n --_min-block-size: var(--md-bar-chart-min-block-size, max(120px, calc(160px + var(--md-sys-density-scale, 0) * 8px)));\n --_aspect-ratio: var(--md-bar-chart-aspect-ratio, 16 / 9);\n --_background: var(--md-bar-chart-background, var(--md-sys-color-surface-container-low, #F7F2FA));\n --_padding: var(--md-bar-chart-padding, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));\n --_shape: var(--md-bar-chart-shape, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));\n --_empty-color: var(--md-bar-chart-empty-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_empty-background: var(--md-bar-chart-empty-background, var(--_background));\n --_empty-font: var(--md-bar-chart-empty-font, var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif));\n --_empty-font-size: var(--md-bar-chart-empty-font-size, var(--md-sys-typescale-body-medium-font-size, 14px));\n --_empty-icon-size: var(--md-bar-chart-empty-icon-size, 40px);\n --_zoom-size: var(--md-bar-chart-zoom-size, 28px);\n --_zoom-track-color: var(--md-bar-chart-zoom-track-color, var(--md-sys-color-surface-container-highest, #E6E0E9));\n --_zoom-window-color: var(--md-bar-chart-zoom-window-color, var(--md-sys-color-secondary-container, #E8DEF8));\n --_zoom-handle-color: var(--md-bar-chart-zoom-handle-color, var(--md-sys-color-primary, #6750A4));\n --_zoom-band-color: var(--md-bar-chart-zoom-band-color, color-mix(in srgb, var(--md-sys-color-primary, #6750A4) 16%, transparent));\n /* Clearance kept at each end of the pan grip so the thumbs stay grabbable. */\n --_zoom-pan-inset: 10px;\n\n display: block;\n position: relative;\n inline-size: 100%;\n block-size: var(--_block-size);\n min-block-size: var(--_min-block-size);\n background: var(--_background);\n padding: var(--_padding);\n border-radius: var(--_shape);\n box-sizing: border-box;\n aspect-ratio: var(--_aspect-ratio);\n}\n\n.md-bar-chart__header,\n.md-bar-chart__footer { display: contents; }\n\n.md-bar-chart__header > slot[name='header']::slotted(*),\n.md-bar-chart__footer > slot[name='footer']::slotted(*) {\n display: block;\n margin-block: 8px;\n}\n\n.md-bar-chart__canvas {\n position: absolute;\n inset: var(--_padding);\n min-block-size: 0;\n min-inline-size: 0;\n}\n\n/* Reserve the slider band under the plot: lift the canvas bottom by exactly the\n slider's height so the two never overlap. */\n:host(.md-bar-chart--zoom-slider) .md-bar-chart__canvas {\n bottom: calc(var(--_padding) + var(--_zoom-size));\n}\n\n:host(.md-bar-chart--zoom-drag) .md-bar-chart__canvas {\n /* Signals the plot is draggable; the band itself is pointer-transparent. */\n cursor: ew-resize;\n}\n\n.md-bar-chart__zoom {\n position: absolute;\n inset-inline: var(--_padding);\n bottom: var(--_padding);\n block-size: var(--_zoom-size);\n display: flex;\n align-items: center;\n}\n\n/* The house slider draws the track and thumbs; the chart only maps its own\n public zoom tokens onto the slider's and sizes it to the reserved band. */\n.md-bar-chart__zoom-slider {\n --md-slider-active-color: var(--_zoom-window-color);\n --md-slider-inactive-color: var(--_zoom-track-color);\n --md-slider-thumb-color: var(--_zoom-handle-color);\n /* Full-height thumbs in a band shorter than the MD3 default (44px), so the\n slider never overflows into the plot. */\n --md-slider-thumb-height: var(--_zoom-size);\n --md-slider-track-height: 12px;\n}\n\n/* Pan grip over the selected window: drag it to move the window without\n resizing. Inset at both ends (see renderZoomSlider) so a press near a thumb\n still reaches the slider's rail and resizes. */\n.md-bar-chart__zoom-pan {\n position: absolute;\n inset-block: 0;\n z-index: 1;\n cursor: grab;\n touch-action: none;\n}\n\n.md-bar-chart__zoom-pan:active {\n cursor: grabbing;\n}\n\n/* Live drag selection over the plot. */\n.md-bar-chart__zoom-band {\n position: absolute;\n background: var(--_zoom-band-color);\n border-inline: 1px solid var(--_zoom-handle-color);\n pointer-events: none;\n}\n\n.md-bar-chart__empty {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-sizing: border-box;\n padding: 24px;\n /* Mirrors the chart's own container — same surface and corner radius. The\n engine still draws a phantom 0-1 axis for an empty series, so an OPAQUE\n surface here masks that ghost grid instead of letting it show through\n behind the message. Column layout stacks a slotted icon above the text. */\n background: var(--_empty-background);\n border-radius: var(--_shape);\n color: var(--_empty-color);\n font-family: var(--_empty-font);\n font-size: var(--_empty-font-size);\n line-height: var(--md-sys-typescale-body-medium-line-height, 20px);\n pointer-events: none;\n text-align: center;\n}\n\n/* Same opaque surface as the empty state — the engine keeps drawing a phantom\n 0-1 axis while data is absent, and a translucent loader would let that ghost\n grid read as real. z-index keeps it over the canvas and the zoom band. */\n.md-bar-chart__loading {\n position: absolute;\n inset: 0;\n z-index: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-sizing: border-box;\n padding: 24px;\n background: var(--_empty-background);\n border-radius: var(--_shape);\n color: var(--_empty-color);\n font-family: var(--_empty-font);\n font-size: var(--_empty-font-size);\n text-align: center;\n}\n\n.md-bar-chart__spinner {\n /* Sized against the empty-state icon so a loading chart and an empty one\n read as the same family. */\n inline-size: var(--_empty-icon-size);\n block-size: var(--_empty-icon-size);\n}\n\n/* A slotted icon (e.g. a Material Symbols span) gets a sensible size and the\n muted empty-state colour without the consumer restyling it. */\n.md-bar-chart__empty ::slotted(.material-symbols-outlined),\n.md-bar-chart__empty ::slotted(.material-symbols-rounded),\n.md-bar-chart__empty ::slotted(.material-symbols-sharp),\n.md-bar-chart__empty ::slotted(.material-icons) {\n /* Document-level .material-symbols rules outrank ::slotted() in the cascade,\n so the size needs !important to win (same reason md-icon-button does it). */\n font-size: var(--_empty-icon-size) !important;\n line-height: 1;\n opacity: 0.55;\n}\n\n.md-bar-chart__a11y-table {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n@media (forced-colors: active) { :host { forced-color-adjust: auto; } }\n\n.md-bar-chart__live {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n/* Focus ring for keyboard navigation — neutral outline, inset so the canvas\n box doesn't clip it. */\n/* The legend chips are engine-created buttons styled inline, and inline styles\n can't express :focus-visible — so their focus ring comes from here. Same\n neutral outline as the plot's, rather than the browser's blue default. */\n[part='legend'] button:focus-visible {\n /* Same ring md-button uses, so focus looks the same wherever it lands. */\n outline: 3px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: 2px;\n border-radius: 6px;\n}\n\n.md-bar-chart__canvas:focus-visible {\n outline: 3px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: -3px;\n border-radius: 4px;\n}\n\n/* ==========================================================\n DENSITY (local override)\n Maps the local `density` prop onto the same --md-sys-density-scale signal a\n global `data-density` ancestor sets. Declared on :host, so a local rung wins\n over the inherited global one. Every density-sensitive value in this file\n derives from that single signal by calc — never add a fixed per-rung ladder.\n ========================================================== */\n:host([density='-1']) { --md-sys-density-scale: -1; }\n:host([density='-2']) { --md-sys-density-scale: -2; }\n:host([density='-3']) { --md-sys-density-scale: -3; }\n:host([density='-4']) { --md-sys-density-scale: -4; }\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\n Watch,\n} from '@stencil/core';\nimport {\n buildChartSummary,\n buildDataTableHtml,\n defaultValueFormatter,\n normalizeRange,\n pickPaletteColor,\n readMdChartTheme,\n resolveSeriesColor,\n BarChartEngine,\n type BarChartSpec,\n type EngineTheme,\n type MdChartAnimation,\n type MdChartAxis,\n type MdChartAxisValue,\n type MdChartBarLayout,\n type MdChartClickDetail,\n type MdChartHoverDetail,\n type MdChartLegendPosition,\n type MdChartSeries,\n type MdChartStackMode,\n type MdChartTitleAlign,\n type MdChartTooltipRenderer,\n type MdChartTooltipTrigger,\n} from '../../utils/charts';\n\n/**\n * md-bar-chart — Material Design 3 Expressive bar chart, rendered\n * by the in-house engine (Canvas2D + a DOM text overlay). No\n * ECharts.\n *\n * • vertical (default) and horizontal layouts\n * • grouped / stacked / percentage modes\n * • category + bar gap configuration\n * • rounded outer corners (top for vertical, end for horizontal)\n * • legend toggle, hover tooltip, click events\n * • role=\"figure\" + screen-reader-only data table\n */\n@Component({\n tag: 'md-bar-chart',\n styleUrl: 'md-bar-chart.css',\n shadow: true,\n})\nexport class MdBarChart {\n @Element() el!: HTMLElement;\n\n @Prop() label: string = '';\n /**\n * A quieter line under the title — a source, a unit, the caveat a title\n * should not have to carry.\n */\n @Prop() subtitle: string | undefined;\n /** Title alignment over the plot: `start` (left), `center`, or `end` (right). */\n @Prop({ attribute: 'title-align' }) titleAlign: MdChartTitleAlign = 'start';\n @Prop() series: MdChartSeries[] = [];\n\n /** Category axis configuration. */\n @Prop() xAxis: MdChartAxis | undefined;\n /** Value axis configuration. */\n @Prop() yAxis: MdChartAxis | undefined;\n /**\n * A SECOND value axis, drawn in the opposite gutter and used by any series\n * whose `yAxisIndex` is 1 — two quantities on one category axis that share no\n * scale, like a count and a rate. Vertical charts.\n *\n * It draws no gridlines of its own: two sets at two spacings turn the plot\n * into a mesh nobody can read a value off.\n */\n @Prop() yAxis2: MdChartAxis | undefined;\n\n /** Bar layout — `'horizontal'` swaps categories onto the y axis. */\n @Prop({ reflect: true }) layout: MdChartBarLayout = 'vertical';\n\n /** Stacking strategy: none (grouped) / normal / percentage. */\n @Prop() stack: MdChartStackMode = 'none';\n\n /** Category gap as a percentage of the band width (`\"30%\"` or `30`). */\n @Prop({ attribute: 'category-gap' }) categoryGap: string | number = '30%';\n\n /** Bar gap between sibling grouped bars (`\"20%\"` or `20`). */\n @Prop({ attribute: 'bar-gap' }) barGap: string | number = '20%';\n\n /** Fixed bar WIDTH in px, centred in each slot. Default: auto — the bar fills\n * its slot (the band minus the category/bar gaps). Clamped to the slot so it\n * can't overrun a neighbour. */\n @Prop({ attribute: 'bar-width' }) barWidth?: number;\n\n /** Bar corner radius in pixels. */\n @Prop({ attribute: 'corner-radius' }) cornerRadius: number = 6;\n\n @Prop({ reflect: true }) legend: MdChartLegendPosition | 'none' = 'top-end';\n @Prop() tooltip: MdChartTooltipTrigger = 'axis';\n /**\n * Interactive zoom over the CATEGORY range — the same \"zoom is a view\" model\n * as `md-line-chart`:\n * • `inside` — drag horizontally across the plot to zoom into that span of\n * bars; double-click the plot to reset.\n * • `slider` — a range slider under the plot; drag its thumbs to resize the\n * window, or the grip between them to pan it.\n * • `both` — both gestures.\n *\n * `series` / `xAxis` are never mutated: the engine is simply fed the sliced\n * window, and hover / click / keyboard indices are rebased so consumers still\n * see ABSOLUTE data indices. Ignored on a `polar` chart (a ring has no span to\n * zoom). For a *value*-range zoom, set `yAxis.min` / `yAxis.max`.\n */\n @Prop() zoom: 'none' | 'inside' | 'slider' | 'both' = 'none';\n /**\n * Format raw values for tooltips / a11y table. The tooltip also asks it about\n * series with NO value at the hovered category — `null` for a null datum,\n * `undefined` for no datum at all — and shows a row for one when it returns a\n * non-empty string.\n */\n /**\n * BCP-47 locale for the DEFAULT number / date formatting (axis ticks,\n * tooltip values, screen-reader table). Empty follows the browser; an\n * explicit `valueFormatter` always wins.\n */\n @Prop() locale: string = '';\n\n @Prop() valueFormatter?: (value: number | null | undefined) => string;\n\n /** Replace the tooltip's content. See `md-line-chart`'s `tooltipRenderer`. */\n @Prop() tooltipRenderer?: MdChartTooltipRenderer;\n @Prop({ attribute: 'height' }) heightProp?: string;\n /** Disable all animation (shorthand for `animation=\"none\"`). */\n @Prop({ attribute: 'no-animation' }) noAnimation: boolean = false;\n /** Entry-animation variant: `expressive` (default), `grow`, `fade`, `draw`, or `none`. */\n @Prop() animation: MdChartAnimation = 'expressive';\n /** Entry-animation duration override in ms (≤ 0 disables). */\n @Prop({ attribute: 'animation-duration' }) animationDuration?: number;\n\n /** Show numeric data labels on each bar. */\n @Prop({ attribute: 'show-labels' }) showLabels: boolean = false;\n /**\n * Print each stack's TOTAL past the end of the column, alongside the\n * per-segment values `show-labels` prints inside it. Stacked charts only —\n * an unstacked bar already IS its total.\n */\n @Prop({ attribute: 'show-totals' }) showTotals: boolean = false;\n /**\n * Draw the bars as CHEVRONS pointing away from the baseline instead of as\n * rectangles. Along a stack they interlock, each segment's point sitting in\n * the next one's notch — a force diagram, where the contributions are handed\n * along in a direction rather than merely piled up.\n */\n @Prop({ attribute: 'chevron' }) chevron: boolean = false;\n /**\n * Wrap the bars around a circle: one concentric RING per category, with the\n * value axis running as an ANGLE instead of a length. A radial (polar) bar\n * chart.\n *\n * Stacking, legend hiding and percentage normalisation all work unchanged —\n * only the step from a value to geometry differs, and the value axis\n * deliberately spans less than the full circle, since a ring that closes on\n * itself has no readable start or end. The quarter it gives up is where the\n * category names go; `polar-sweep` changes how much that is.\n */\n @Prop({ reflect: true }) polar: boolean = false;\n /** Radius of the hole at the centre of a polar chart, 0..0.9. Default 0.22. */\n @Prop({ attribute: 'polar-hole' }) polarHole?: number;\n /** Fraction of the circle the value axis spans on a polar chart. Default 0.75. */\n @Prop({ attribute: 'polar-sweep' }) polarSweep?: number;\n\n /** Draw small perpendicular tick marks on the axes. */\n @Prop({ attribute: 'axis-ticks' }) axisTicks: boolean = false;\n\n /**\n * Show a hand (`pointer`) cursor over the bars, signalling they're actionable —\n * e.g. clickable to drill into. The chart can't know an interaction is wired,\n * so set this when a `mdBarClick` handler does something (like `drill`). The\n * cursor tracks the bar itself (hit-tested like a click), not the empty column\n * above a short bar.\n */\n @Prop({ attribute: 'clickable' }) clickable: boolean = false;\n\n @Event() mdBarClick!: EventEmitter<MdChartClickDetail<MdChartSeries>>;\n @Event() mdLegendClick!: EventEmitter<{ seriesIndex: number; seriesId?: string; selected: boolean }>;\n @Event() mdHover!: EventEmitter<MdChartHoverDetail>;\n @Event() mdReady!: EventEmitter<void>;\n /** Fires when the zoom window changes (drag, slider, or `setZoom`/`resetZoom`). */\n @Event() mdZoom!: EventEmitter<{ startIndex: number; endIndex: number; reset: boolean }>;\n\n /** Accessible label for the zoom slider's start thumb. */\n @Prop({ attribute: 'label-zoom-start' }) labelZoomStart: string = 'Zoom range start';\n /** Accessible label for the zoom slider's end thumb. */\n @Prop({ attribute: 'label-zoom-end' }) labelZoomEnd: string = 'Zoom range end';\n\n /**\n * Instructions announced when the plot receives keyboard focus. The plot is\n * focusable so a keyboard user can walk the data with the arrow keys; this\n * is what tells them so.\n */\n @Prop({ attribute: 'label-plot' }) labelPlot: string =\n 'Chart data. Use the arrow keys to move between points, Home and End for the first and last, Escape to leave.';\n\n /** Template for the live announcement as keyboard focus moves. `%x%` is the\n * axis value, `%values%` the series readings at it. */\n @Prop({ attribute: 'label-point' }) labelPoint: string = '%x%: %values%';\n\n /**\n * Data is still on its way — the chart covers the plot with a loader instead\n * of drawing an empty (or stale) axis, and marks itself `aria-busy`.\n *\n * Set it while the fetch is in flight and clear it when `series` arrives; the\n * entry animation replays on the way out, so the bars draw themselves in\n * rather than appearing fully formed. Slot `loading` to replace the default\n * indicator with your own skeleton.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /** Accessible + visible text under the loader. */\n @Prop({ attribute: 'loading-label' }) loadingLabel: string = 'Loading chart…';\n\n /**\n * Local density rung. Drives the same `--md-sys-density-scale` signal that a\n * global `data-density` ancestor sets, so a local value simply overrides the\n * inherited one. 0 = default, -4 = ultra-compact.\n */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n @State() private mounted = false;\n /** Index the keyboard cursor sits on, or -1 when the plot isn't focused. */\n @State() private kbIndex = -1;\n /** Text for the aria-live region — what a screen reader speaks on move. */\n @State() private announcement = '';\n\n /** Visible category window, or null for the full range. */\n @State() private zoomWin: { start: number; end: number } | null = null;\n\n /** Live drag rectangle (host-relative px) while selecting a range to zoom. */\n @State() private dragBand: { x1: number; x2: number } | null = null;\n\n /**\n * Pointer id + origin of an in-progress gesture: `band` is a drag across the\n * plot, `pan` is a drag of the zoom window. (Resizing the window is the\n * slider's own gesture — see `renderZoomSlider`.)\n */\n private grab: { id: number; kind: 'band' | 'pan'; x: number; win: { start: number; end: number } } | null = null;\n\n private engine: BarChartEngine | null = null;\n /** True while a prop-change rebuild is queued for the next microtask (batches\n * a burst of prop assignments into one render — see onAnyPropChange). */\n private applyQueued = false;\n private ro: ResizeObserver | null = null;\n private chartHost?: HTMLDivElement;\n private a11yTableHost?: HTMLDivElement;\n private themeMql?: MediaQueryList;\n private themeListener?: () => void;\n\n /**\n * Legend toggles the USER made, kept across data updates.\n *\n * The engine self-toggles a series on legend click, but that lives on the\n * spec — and the next `series` assignment rebuilds the spec from the prop and\n * takes the toggle with it. A chart re-fed live (a race, a poll) would\n * un-hide whatever the reader had just hidden. Remembered here and re-applied\n * in `buildSpec`, keyed by series identity, so the toggle survives the refeed\n * while an explicit `series[i].hidden` still wins.\n */\n private legendHidden = new Map<string, boolean>();\n\n /** A stable key per series — id, else label, else position. Suffixed on\n * collision so two series sharing a label do not share a toggle. */\n private seriesKeys(): string[] {\n const seen = new Map<string, number>();\n return this.series.map((s, i) => {\n const base = s.id != null ? `id:${s.id}` : s.label != null ? `label:${s.label}` : `pos:${i}`;\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n return n === 0 ? base : `${base}#${n}`;\n });\n }\n\n /** Record a legend toggle so `buildSpec` re-applies it across series re-feeds. */\n private rememberLegendToggle(seriesIndex: number, hidden: boolean): void {\n const key = this.seriesKeys()[seriesIndex];\n if (key == null) return;\n this.legendHidden.set(key, hidden);\n // Backstop against unbounded growth (only legend clicks add entries, so this\n // realistically never trips): evict the oldest toggle.\n if (this.legendHidden.size > 256) {\n const oldest = this.legendHidden.keys().next().value as string;\n this.legendHidden.delete(oldest);\n }\n }\n\n componentDidLoad() {\n this.initChart();\n if (typeof window !== 'undefined' && window.matchMedia) {\n this.themeMql = window.matchMedia('(prefers-color-scheme: dark)');\n this.themeListener = () => this.applyEngine();\n this.themeMql.addEventListener?.('change', this.themeListener);\n }\n }\n disconnectedCallback() {\n this.ro?.disconnect();\n this.ro = null;\n this.engine?.dispose();\n this.engine = null;\n if (this.themeMql && this.themeListener) {\n this.themeMql.removeEventListener?.('change', this.themeListener);\n this.themeListener = undefined;\n this.themeMql = undefined;\n }\n }\n\n @Watch('series') @Watch('xAxis') @Watch('yAxis') @Watch('yAxis2') @Watch('layout')\n @Watch('stack') @Watch('categoryGap') @Watch('barGap') @Watch('barWidth') @Watch('cornerRadius')\n @Watch('legend') @Watch('tooltip') @Watch('zoom') @Watch('label') @Watch('subtitle') @Watch('titleAlign') @Watch('showLabels') @Watch('showTotals') @Watch('chevron') @Watch('polar') @Watch('polarHole') @Watch('polarSweep') @Watch('axisTicks')\n @Watch('animation') @Watch('animationDuration') @Watch('tooltipRenderer') @Watch('valueFormatter') @Watch('locale') @Watch('noAnimation') @Watch('clickable')\n onAnyPropChange() {\n // Coalesce a burst of prop assignments (a data swap sets series + xAxis +\n // yAxis, a race re-feeds several per frame) into ONE rebuild + render per\n // microtask, instead of a full computeBarLayout + canvas clear + repaint per\n // property.\n if (this.applyQueued) return;\n this.applyQueued = true;\n queueMicrotask(() => {\n this.applyQueued = false;\n this.applyEngine();\n this.rebuildA11yTable();\n });\n }\n\n @Method()\n async resize(): Promise<void> {\n this.engine?.resize();\n }\n\n /**\n * Coming OUT of the loading state, replay the entry motion so the data that\n * just arrived draws itself in instead of appearing fully formed behind the\n * fading loader. (Going in needs nothing — the loader covers the plot.)\n */\n @Watch('loading')\n onLoadingChange(now: boolean, before: boolean) {\n if (before && !now) this.engine?.replay();\n }\n\n /** Replay the entry animation from the start (uses the current `animation`). */\n @Method()\n async replay(): Promise<void> {\n this.engine?.replay();\n }\n\n /**\n * Animate the next data change as a drill through one column, so the levels\n * of a hierarchy read as connected rather than as unrelated charts.\n *\n * AWAIT it, then assign the new `series` / `xAxis`. Like every Stencil\n * `@Method` this one resolves through a microtask, so a bare call lands AFTER\n * an assignment on the next line — the swap renders un-animated and the drill\n * arms itself for whatever change comes after.\n *\n * ```ts\n * await chart.drill(e.detail.dataIndex); // descend into the clicked column\n * chart.series = childrenOf(clicked);\n *\n * await chart.drill(0, 'up'); // …and back out\n * chart.series = parentLevel;\n * ```\n *\n * Descending, the incoming columns unfold out of the band the named column\n * occupies right now. `'up'` pivots on the whole plot instead, which is the\n * same motion run inside out — the level being returned to opens out of\n * everything the level being left was filling. Falls back to a plain swap\n * when the index doesn't resolve, or under `prefers-reduced-motion`.\n */\n @Method()\n async drill(index: number, direction: 'down' | 'up' = 'down'): Promise<void> {\n this.engine?.drill(index, direction);\n }\n\n @Method()\n async toDataURL(): Promise<string> {\n return this.engine?.toDataURL('image/png') ?? '';\n }\n\n @Method()\n async getInstance(): Promise<BarChartEngine | null> {\n return this.engine;\n }\n\n private bindChartHost = (el?: HTMLDivElement) => { this.chartHost = el; };\n private bindA11yTableHost = (el?: HTMLDivElement) => { this.a11yTableHost = el; };\n\n private initChart() {\n this.makeEngine();\n this.applyEngine();\n this.rebuildA11yTable();\n this.mounted = true;\n this.mdReady.emit();\n }\n\n /** (Re)create the engine on the selected backend + wire its ResizeObserver. */\n private makeEngine() {\n if (!this.chartHost) return;\n this.ro?.disconnect();\n this.ro = null;\n this.engine?.dispose();\n try {\n this.engine = new BarChartEngine(this.chartHost);\n } catch {\n this.engine = null;\n }\n if (this.engine && typeof ResizeObserver !== 'undefined') {\n this.ro = new ResizeObserver(() => this.engine?.resize());\n this.ro.observe(this.chartHost);\n }\n }\n\n\n /** `\"30%\"` / `30` / `0.3` → `0.3`. */\n private parseRatio(v: string | number, fallback: number): number {\n if (typeof v === 'number') return Number.isFinite(v) ? (v > 1 ? v / 100 : v) : fallback;\n const n = parseFloat(v);\n if (!Number.isFinite(n)) return fallback;\n return v.trim().endsWith('%') || n > 1 ? n / 100 : n;\n }\n\n private buildEngineTheme(t: ReturnType<typeof readMdChartTheme>): EngineTheme {\n return {\n background: t.background,\n textColor: t.textColor,\n textColorMuted: t.textColorMuted,\n axisLineColor: t.axisLineColor,\n gridLineColor: t.gridColor,\n surface: t.surface,\n fontFamily: t.fontFamily,\n labelSize: t.labelSize,\n titleSize: t.titleSize,\n };\n }\n\n // ─────────────────── zoom ───────────────────\n // Zoom is a *view* over the categories: the engine is fed a sliced window,\n // `series`/`xAxis` are untouched, and every index the engine reports (hover,\n // click, keyboard) is rebased by `winStart()` so consumers see absolute\n // indices. A polar chart has no linear span, so gestures are disabled on it.\n\n private get zoomInside(): boolean {\n return !this.polar && (this.zoom === 'inside' || this.zoom === 'both');\n }\n\n private get zoomSliderOn(): boolean {\n return !this.polar && (this.zoom === 'slider' || this.zoom === 'both');\n }\n\n /** Number of categories — the longest series, or the category axis if longer. */\n private dataLength(): number {\n const s = (this.series ?? []).reduce((acc, d) => Math.max(acc, d?.data?.length ?? 0), 0);\n return Math.max(s, this.xAxis?.data?.length ?? 0);\n }\n\n /** Absolute index of the window's first visible category (0 when unzoomed). */\n private winStart(): number {\n return this.zoomWin && !this.polar ? this.win().start : 0;\n }\n\n /** Current window, defaulted to the full range and clamped to the data. */\n private win(): { start: number; end: number } {\n const last = Math.max(0, this.dataLength() - 1);\n const w = this.zoomWin;\n if (!w) return { start: 0, end: last };\n // Keep at least two categories visible, else the slider range collapses.\n const start = Math.min(Math.max(0, w.start), Math.max(0, last - 1));\n return { start, end: Math.min(Math.max(start + 1, w.end), last) };\n }\n\n private applyZoom(start: number, end: number, reset = false): void {\n const last = Math.max(0, this.dataLength() - 1);\n const s = Math.min(Math.max(0, Math.round(start)), Math.max(0, last - 1));\n const e = Math.min(Math.max(s + 1, Math.round(end)), last);\n this.zoomWin = reset ? null : { start: s, end: e };\n // Snap to the new window: a zoom is direct manipulation, so easing the bars\n // across the changed layout (the follow loop) would read as them sliding\n // together instead of tracking the gesture.\n this.applyEngine(true);\n this.rebuildA11yTable();\n this.mdZoom.emit({ startIndex: reset ? 0 : s, endIndex: reset ? last : e, reset });\n }\n\n /** Zoom to an absolute category range. */\n @Method()\n async setZoom(startIndex: number, endIndex: number): Promise<void> {\n this.applyZoom(startIndex, endIndex);\n }\n\n /** Drop the zoom window and show the full range. */\n @Method()\n async resetZoom(): Promise<void> {\n this.applyZoom(0, 0, true);\n }\n\n /**\n * Plot rect in CANVAS coordinates, from the live scene.\n *\n * The engine lays the scene out relative to the canvas box, which the host's\n * padding insets from the host box — so canvas and host space differ by that\n * padding. Everything that compares against the scene (`indexAtX` reads\n * `scene.xPositions`, which is canvas-space too) converts the pointer INTO\n * this space via `hostX`; only the drag band, positioned against the host,\n * converts back out.\n */\n private plotRect(): { x: number; y: number; width: number; height: number } | null {\n const p = this.engine?.getScene()?.plot;\n return p ? { x: p.x, y: p.y, width: p.width, height: p.height } : null;\n }\n\n /** Offset of the canvas box inside the host box — canvas space → host space. */\n private canvasOffset(): { x: number; y: number } {\n const canvas = this.chartHost;\n if (!canvas) return { x: 0, y: 0 };\n const host = this.el.getBoundingClientRect();\n const box = canvas.getBoundingClientRect();\n return { x: box.left - host.left, y: box.top - host.top };\n }\n\n /** Drag-band geometry, converted from canvas space back out to host space. */\n private zoomBandStyle(): { [key: string]: string } | undefined {\n const plot = this.plotRect();\n if (!this.dragBand || !plot) return undefined;\n const off = this.canvasOffset();\n const { x1, x2 } = this.dragBand;\n return {\n left: `${off.x + Math.min(x1, x2)}px`,\n width: `${Math.abs(x2 - x1)}px`,\n top: `${off.y + plot.y}px`,\n height: `${plot.height}px`,\n };\n }\n\n /** Pointer x in CANVAS coordinates — the space `plotRect`/`xPositions` use. */\n private hostX(e: MouseEvent): number {\n return e.clientX - (this.chartHost ?? this.el).getBoundingClientRect().left;\n }\n\n /** Map a canvas-relative x to the nearest ABSOLUTE category index. */\n private indexAtX(hostX: number): number {\n const scene = this.engine?.getScene();\n const w = this.win();\n const xs = scene?.xPositions;\n if (!xs?.length) return w.start;\n let best = 0;\n let bestD = Infinity;\n xs.forEach((px, i) => {\n const d = Math.abs(px - hostX);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n });\n return w.start + best;\n }\n\n /** Is the event over the plot itself (not the header, zoom slider, footer)? */\n private insidePlot(e: MouseEvent): boolean {\n const plot = this.plotRect();\n if (!plot) return false;\n const box = (this.chartHost ?? this.el).getBoundingClientRect();\n const x = e.clientX - box.left;\n const y = e.clientY - box.top;\n return x >= plot.x && x <= plot.x + plot.width && y >= plot.y && y <= plot.y + plot.height;\n }\n\n private onPlotPointerDown = (e: PointerEvent) => {\n if (!this.zoomInside || e.button !== 0 || this.grab) return;\n if (!this.insidePlot(e)) return;\n const x = this.hostX(e);\n this.grab = { id: e.pointerId, kind: 'band', x, win: this.win() };\n this.dragBand = { x1: x, x2: x };\n // Capture on the element really under the pointer (the shadow canvas), NOT\n // `e.target` — a host-level listener retargets to the host, and capturing\n // there would route the closing `click` to the host where the engine's\n // canvas never sees it, silently killing every bar click while zoom is on.\n const target = (e.composedPath?.()[0] as HTMLElement | undefined) ?? (e.target as HTMLElement);\n target.setPointerCapture?.(e.pointerId);\n };\n\n private onPointerMove = (e: PointerEvent) => {\n const g = this.grab;\n if (!g || g.id !== e.pointerId) return;\n if (g.kind === 'band') {\n const plot = this.plotRect();\n if (!plot) return;\n this.dragBand = { x1: g.x, x2: Math.min(Math.max(this.hostX(e), plot.x), plot.x + plot.width) };\n return;\n }\n // Pan: shift the window by the pointer's travel along the slider track,\n // keeping its span (fractions of the full range, so it tracks the thumbs).\n const frac = this.trackFrac(e.clientX);\n const originFrac = this.trackFrac(g.x);\n if (frac == null || originFrac == null) return;\n const last = Math.max(1, this.dataLength() - 1);\n const span = g.win.end - g.win.start;\n const delta = Math.round((frac - originFrac) * last);\n const s = Math.min(Math.max(0, g.win.start + delta), last - span);\n this.applyZoom(s, s + span);\n };\n\n private onPointerUp = (e: PointerEvent) => {\n const g = this.grab;\n if (!g || g.id !== e.pointerId) return;\n this.grab = null;\n const band = this.dragBand;\n this.dragBand = null;\n if (g.kind !== 'band' || !band) return;\n // A tiny drag is a click, not a zoom — leave the view alone so bar clicks\n // and tooltips keep working.\n if (Math.abs(band.x2 - band.x1) < 8) return;\n // In RTL the plot is mirrored, so order by index, not by pixel, or the\n // window comes out reversed.\n const [a, b] = [this.indexAtX(band.x1), this.indexAtX(band.x2)].sort((m, n) => m - n);\n if (b - a >= 1) this.applyZoom(a, b);\n };\n\n private onPlotDblClick = (e: MouseEvent) => {\n // Plot only: a double-click on the zoom slider is two track clicks, not a\n // request to throw the window away.\n if (this.zoomInside && this.zoomWin && this.insidePlot(e)) this.resetZoom();\n };\n\n /**\n * The zoom slider's track box. `md-slider` maps 0→100% across its own host\n * box, so the host rect *is* the track — measuring it keeps the pan gesture\n * in step with the thumbs.\n */\n private sliderTrackRect(): { left: number; width: number; rtl: boolean } | null {\n const slider = this.el.shadowRoot?.querySelector('.md-bar-chart__zoom-slider');\n if (!slider) return null;\n const r = slider.getBoundingClientRect();\n if (!r.width) return null;\n return { left: r.left, width: r.width, rtl: getComputedStyle(this.el).direction === 'rtl' };\n }\n\n /** Client x → fraction along the zoom track (RTL-aware, as md-slider is). */\n private trackFrac(clientX: number): number | null {\n const track = this.sliderTrackRect();\n if (!track) return null;\n const raw = (clientX - track.left) / track.width;\n return Math.min(Math.max(track.rtl ? 1 - raw : raw, 0), 1);\n }\n\n private onZoomPanDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n // Keep it away from the plot-drag handler on the host, and from the\n // slider's own rail (which would resize instead of pan).\n e.stopPropagation();\n e.preventDefault();\n this.grab = { id: e.pointerId, kind: 'pan', x: e.clientX, win: this.win() };\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n };\n\n /** md-slider drives the window while a thumb moves (continuous). */\n private onZoomSliderInput = (e: CustomEvent<{ valueStart?: number; valueEnd?: number }>) => {\n // md-slider's events are composed, so they would surface on the chart's own\n // host and look like chart events to a consumer. Stop them here.\n e.stopPropagation();\n const { valueStart, valueEnd } = e.detail ?? {};\n if (valueStart == null || valueEnd == null) return;\n this.applyZoom(valueStart, valueEnd);\n };\n\n /** Swallow the slider's remaining composed events (see above). mdInput has\n * already applied the window, so the commit needs no second applyZoom. */\n private onZoomSliderEvent = (e: Event) => e.stopPropagation();\n\n private renderZoomSlider() {\n const last = Math.max(1, this.dataLength() - 1);\n const w = this.win();\n const pct = (i: number) => (i / last) * 100;\n const fmt = (i: number) => String(this.xAxis?.data?.[i] ?? i);\n return (\n <div class=\"md-bar-chart__zoom\" part=\"zoom\">\n <md-slider\n class=\"md-bar-chart__zoom-slider\"\n part=\"zoom-slider\"\n exportparts=\"track: zoom-track, track-active: zoom-window, thumb-knob: zoom-handle\"\n range\n controlled\n min={0}\n max={last}\n step={1}\n valueStart={w.start}\n valueEnd={w.end}\n ariaLabelStart={this.labelZoomStart}\n ariaLabelEnd={this.labelZoomEnd}\n valueStartText={fmt(w.start)}\n valueEndText={fmt(w.end)}\n onMdInput={this.onZoomSliderInput}\n onMdChange={this.onZoomSliderEvent}\n onMdDragStart={this.onZoomSliderEvent}\n onMdDragEnd={this.onZoomSliderEvent}\n onMdFocus={this.onZoomSliderEvent}\n onMdBlur={this.onZoomSliderEvent}\n ></md-slider>\n\n {/* Pan grip over the selected window. Inset at both ends so the thumbs\n stay grabbable, and it collapses to nothing on a narrow window. */}\n <div\n class=\"md-bar-chart__zoom-pan\"\n part=\"zoom-pan\"\n style={{\n insetInlineStart: `calc(${pct(w.start)}% + var(--_zoom-pan-inset))`,\n inlineSize: `max(0px, calc(${pct(w.end) - pct(w.start)}% - 2 * var(--_zoom-pan-inset)))`,\n }}\n onPointerDown={this.onZoomPanDown}\n ></div>\n </div>\n );\n }\n\n private buildSpec(t: ReturnType<typeof readMdChartTheme>): BarChartSpec {\n const percentage = this.stack === 'percentage';\n const vFmt = (v: number) => (this.valueFormatter ? this.valueFormatter(v) : v.toLocaleString(this.locale || undefined));\n const keys = this.seriesKeys();\n // Zoom is a view: slice what the engine draws, leave `this.series` alone.\n // Per-category options (`data`, `range`) are sliced; index-keyed maps\n // (`pointWidths`, `pointColors`) are rebased into window coordinates and\n // anything outside the window is dropped.\n const zw = this.zoomWin && !this.polar ? this.win() : null;\n const cut = <T,>(arr: readonly T[] | undefined): T[] | undefined =>\n arr ? (zw ? arr.slice(zw.start, zw.end + 1) : arr.slice()) : undefined;\n const rebaseMap = <T,>(rec: Record<number, T> | undefined): Record<number, T> | undefined => {\n if (!rec || !zw) return rec;\n const out: Record<number, T> = {};\n for (const [k, v] of Object.entries(rec)) {\n const i = Number(k) - zw.start;\n if (i >= 0 && i <= zw.end - zw.start) out[i] = v;\n }\n return out;\n };\n return {\n series: this.series.map((s, i) => {\n let pointColors: Record<number, string> | undefined;\n if (s.pointColors) {\n const resolved: Record<number, string> = {};\n for (const [k, c] of Object.entries(s.pointColors)) resolved[Number(k)] = resolveSeriesColor(this.el, c, pickPaletteColor(t.palette, i));\n pointColors = rebaseMap(resolved);\n }\n return {\n label: s.label ?? `Series ${i + 1}`,\n color: resolveSeriesColor(this.el, s.color, pickPaletteColor(t.palette, i)),\n data: cut(s.data) ?? [],\n hidden: s.hidden ?? this.legendHidden.get(keys[i]) ?? false,\n stack: s.stack,\n axisIndex: s.yAxisIndex,\n overlay: s.overlay,\n widthRatio: s.widthRatio,\n pointWidths: rebaseMap(s.pointWidths),\n range: cut(s.range)?.map(normalizeRange),\n pointColors,\n };\n }),\n title: this.label || undefined,\n subtitle: this.subtitle || undefined,\n titleAlign: this.titleAlign,\n categories: cut(this.xAxis?.data) ?? [],\n categoryFormatter: this.xAxis?.valueFormatter ?? defaultValueFormatter,\n categoryLabelRotation: this.xAxis?.labelRotation,\n categoryLabelsMirrored: this.xAxis?.mirrorLabels,\n // `yAxis` IS the value axis whichever way the bars run, so its formatter\n // is the one that shapes the value ticks. It was declared on the type and\n // read for the category axis but never for this one, so a chart asking\n // for `300k` on the axis silently got `300,000`.\n valueAxis2: this.yAxis2\n ? {\n min: this.yAxis2.min,\n max: this.yAxis2.max,\n label: this.yAxis2.label,\n formatter: this.yAxis2.valueFormatter ? (v: number) => String(this.yAxis2!.valueFormatter!(v)) : undefined,\n hidden: this.yAxis2.hidden,\n }\n : undefined,\n valueTickFormatter: this.yAxis?.valueFormatter\n ? (v: number) => String(this.yAxis!.valueFormatter!(v))\n : undefined,\n categoryLabel: this.xAxis?.label,\n categoryHidden: this.xAxis?.hidden,\n categoryHideTicks: this.xAxis?.hideTicks,\n categoryAxisLine: this.xAxis?.axisLine,\n categoryDash: this.xAxis?.dash,\n valueScale: this.yAxis?.scale ?? 'value',\n // The value axis is y for vertical bars and x for horizontal ones, so\n // read breaks from whichever axis config carries the values.\n valueBreaks: (this.layout === 'horizontal' ? this.xAxis : this.yAxis)?.breaks,\n valueMin: percentage ? 0 : this.yAxis?.min,\n valueMax: percentage ? 100 : this.yAxis?.max,\n valueFormatter: percentage ? (v: number) => `${Math.round(v)}%` : vFmt,\n valueLabel: this.yAxis?.label,\n valueHidden: this.yAxis?.hidden,\n valueHideTicks: this.yAxis?.hideTicks,\n valueAxisLine: this.yAxis?.axisLine,\n valueDash: this.yAxis?.dash,\n valueGridDash: this.yAxis?.gridDash,\n stack: this.stack,\n horizontal: this.layout === 'horizontal',\n categoryGapRatio: this.parseRatio(this.categoryGap, 0.3),\n barGapRatio: this.parseRatio(this.barGap, 0.2),\n barWidth: this.barWidth,\n cornerRadius: this.cornerRadius,\n showLabels: this.showLabels,\n showTotals: this.showTotals,\n chevron: this.chevron,\n polar: this.polar,\n polarHole: this.polarHole,\n polarSweep: this.polarSweep,\n legend: this.legend,\n axisTicks: this.axisTicks,\n animation: this.noAnimation ? 'none' : this.animation,\n animationDuration: this.animationDuration,\n };\n }\n\n private applyEngine(snap = false) {\n if (!this.engine) return;\n const t = readMdChartTheme(this.el);\n this.engine.setSpec(this.buildSpec(t), this.buildEngineTheme(t), {\n onHover: (idx) => {\n if (idx < 0) return;\n // The engine reports indices into what it DREW (the zoom window), so\n // rebase to an absolute index before reporting / indexing full arrays.\n const abs = idx + this.winStart();\n this.mdHover.emit({\n dataIndex: abs,\n axisValue: this.xAxis?.data?.[abs],\n seriesIndices: this.visibleSeriesIndices(),\n });\n },\n onLegendClick: (item) => {\n this.rememberLegendToggle(item.seriesIndex, !!item.hidden);\n this.mdLegendClick.emit({\n seriesIndex: item.seriesIndex,\n seriesId: this.series[item.seriesIndex]?.id,\n selected: !item.hidden,\n });\n },\n onPointClick: (si, di, e) => {\n const s = this.series[si];\n if (!s) return;\n const abs = di + this.winStart(); // windowed → absolute (see onHover)\n this.mdBarClick.emit({\n seriesIndex: si,\n seriesId: s.id,\n dataIndex: abs,\n value: s.data?.[abs] ?? null,\n axisValue: this.xAxis?.data?.[abs],\n nativeEvent: e,\n series: s,\n });\n },\n }, { animate: !snap });\n this.engine.setHoverEnabled(this.tooltip !== 'none');\n this.engine.setClickable(this.clickable);\n this.engine.setTooltip({ render: this.tooltipRenderer, missingFormatter: this.valueFormatter });\n }\n\n private visibleSeriesIndices(): number[] {\n const hp = this.engine?.getScene()?.hoverPoints;\n if (hp) return hp.map((h) => h.seriesIndex);\n return this.series.map((_, i) => i).filter((i) => !this.series[i].hidden);\n }\n\n private rebuildA11yTable() {\n if (!this.a11yTableHost) return;\n this.a11yTableHost.innerHTML = buildDataTableHtml({\n title: this.label,\n xAxisLabel: this.xAxis?.label,\n xAxisData: this.xAxis?.data,\n xValueFormatter: this.xAxis?.valueFormatter ?? ((v: MdChartAxisValue) => defaultValueFormatter(v, this.locale)),\n locale: this.locale,\n series: this.series,\n valueFormatter: this.valueFormatter,\n });\n }\n\n\n /**\n * Walk the data with the keyboard. Without this the readings are reachable\n * only by hovering, which no keyboard or screen-reader user can do.\n * Arrows follow the READING direction, so in RTL, Left advances.\n */\n private onPlotKeyDown = (e: KeyboardEvent) => {\n const scene = this.engine?.getScene();\n const last = Math.max(0, (scene?.xPositions.length ?? 0) - 1);\n if (!scene || last < 0) return;\n const rtl = typeof getComputedStyle === 'function' && getComputedStyle(this.el).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const back = rtl ? 'ArrowRight' : 'ArrowLeft';\n let next = this.kbIndex;\n switch (e.key) {\n case forward:\n next = this.kbIndex < 0 ? 0 : Math.min(last, this.kbIndex + 1);\n break;\n case back:\n next = this.kbIndex < 0 ? last : Math.max(0, this.kbIndex - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = last;\n break;\n case 'Escape':\n if (this.kbIndex < 0) return;\n next = -1;\n break;\n case 'Enter':\n case ' ':\n case 'Spacebar': // legacy key name\n if (this.kbIndex < 0) return;\n e.preventDefault();\n this.emitBarClickForCategory(this.kbIndex, e);\n return;\n default:\n return;\n }\n e.preventDefault();\n this.moveKeyboardCursor(next);\n };\n\n /** Fire `mdBarClick` for the focused category so a keyboard user can activate a\n * bar (e.g. to drill), matching the pointer click. Picks the first visible\n * series present at that category. */\n private emitBarClickForCategory(dataIndex: number, nativeEvent: KeyboardEvent): void {\n const si = this.visibleSeriesIndices()[0] ?? 0;\n const s = this.series[si];\n if (!s) return;\n // `dataIndex` is the keyboard cursor, which walks the windowed scene —\n // rebase to absolute before reporting / indexing the full series.\n const abs = dataIndex + this.winStart();\n this.mdBarClick.emit({\n seriesIndex: si,\n seriesId: s.id,\n dataIndex: abs,\n value: s.data?.[abs] ?? null,\n axisValue: this.xAxis?.data?.[abs],\n nativeEvent,\n series: s,\n });\n }\n\n private onPlotBlur = () => {\n if (this.kbIndex >= 0) this.moveKeyboardCursor(-1);\n };\n\n /** Move the keyboard cursor, mirroring it into the hover UI and live region. */\n private moveKeyboardCursor(next: number) {\n this.kbIndex = next;\n this.engine?.focusIndex(next);\n if (next < 0) {\n this.announcement = '';\n return;\n }\n const scene = this.engine?.getScene();\n const xText = scene?.xLabels?.[next] ?? String(next + 1);\n const yFmt = (v: number) =>\n this.valueFormatter ? this.valueFormatter(v) : v.toLocaleString(this.locale || undefined);\n const values = (scene?.hoverPoints ?? [])\n .map((hp) => {\n const pt = hp.byIndex[next];\n return pt ? `${hp.label} ${yFmt(pt.value)}` : null;\n })\n .filter(Boolean)\n .join(', ');\n this.announcement = this.labelPoint.replace('%x%', xText).replace('%values%', values);\n }\n\n render() {\n const xValues = this.xAxis?.data ?? [];\n const summary = buildChartSummary({\n title: this.label, chartType: 'bar', seriesCount: this.series.length,\n xMin: xValues[0] as MdChartAxisValue | undefined,\n xMax: xValues[xValues.length - 1] as MdChartAxisValue | undefined,\n });\n // While loading, the loader owns the box — an empty-state message under it\n // answers \"no data\" to a question nobody asked yet.\n const empty = this.series.length === 0 && !this.loading;\n return (\n <Host\n class={{\n 'md-bar-chart': true,\n 'md-bar-chart--empty': empty,\n 'md-bar-chart--loading': this.loading,\n 'md-bar-chart--mounted': this.mounted,\n 'md-bar-chart--zoom-slider': this.zoomSliderOn,\n 'md-bar-chart--zoom-drag': this.zoomInside,\n [`md-bar-chart--${this.layout}`]: true,\n }}\n role=\"figure\"\n aria-label={summary}\n aria-busy={this.loading ? 'true' : null}\n style={this.heightProp ? { blockSize: this.heightProp } : undefined}\n onPointerDown={this.onPlotPointerDown}\n onPointerMove={this.onPointerMove}\n onPointerUp={this.onPointerUp}\n onPointerCancel={this.onPointerUp}\n onDblClick={this.onPlotDblClick}\n >\n <header class=\"md-bar-chart__header\" part=\"header\"><slot name=\"header\"></slot></header>\n <div\n class=\"md-bar-chart__canvas\"\n part=\"canvas\"\n ref={el => this.bindChartHost(el as HTMLDivElement)}\n tabindex={empty ? undefined : '0'}\n role={empty ? undefined : 'application'}\n aria-label={empty ? undefined : this.labelPlot}\n onKeyDown={this.onPlotKeyDown}\n onBlur={this.onPlotBlur}\n ></div>\n {empty && (\n <div class=\"md-bar-chart__empty\" part=\"empty\">\n <slot name=\"empty\">No data to display</slot>\n </div>\n )}\n\n {this.loading && (\n <div class=\"md-bar-chart__loading\" part=\"loading\" role=\"status\">\n {/* `loader` is the library-wide name for \"swap the loading affordance\";\n `loading` is kept as the older alias. Nesting them means either\n works — the outer slot falls back to the inner one, which falls\n back to the default below — and `loader` wins if both are given. */}\n <slot name=\"loader\">\n <slot name=\"loading\">\n <md-progress-indicator\n class=\"md-bar-chart__spinner\"\n variant=\"circular\"\n indeterminate\n label={this.loadingLabel}\n ></md-progress-indicator>\n <span class=\"md-bar-chart__loading-text\">{this.loadingLabel}</span>\n </slot>\n </slot>\n </div>\n )}\n\n {/* Drag-to-zoom band — purely visual, so it never eats pointer events. */}\n {this.dragBand && Math.abs(this.dragBand.x2 - this.dragBand.x1) > 1 && (\n <div\n class=\"md-bar-chart__zoom-band\"\n part=\"zoom-band\"\n style={this.zoomBandStyle()}\n ></div>\n )}\n\n {this.zoomSliderOn && this.renderZoomSlider()}\n\n <footer class=\"md-bar-chart__footer\" part=\"footer\"><slot name=\"footer\"></slot></footer>\n <div class=\"md-bar-chart__a11y-table\" ref={el => this.bindA11yTableHost(el as HTMLDivElement)}></div>\n\n {/* Narrates the keyboard cursor, politely. */}\n <div class=\"md-bar-chart__live\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {this.announcement}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["mdBarChartCss","MdBarChart","constructor","hostRef","this","label","titleAlign","series","layout","stack","categoryGap","barGap","cornerRadius","legend","tooltip","zoom","locale","noAnimation","animation","showLabels","showTotals","chevron","polar","axisTicks","clickable","labelZoomStart","labelZoomEnd","labelPlot","labelPoint","loading","loadingLabel","density","mounted","kbIndex","announcement","zoomWin","dragBand","grab","engine","applyQueued","ro","legendHidden","Map","bindChartHost","el","chartHost","bindA11yTableHost","a11yTableHost","onPlotPointerDown","e","zoomInside","button","insidePlot","x","hostX","id","pointerId","kind","win","x1","x2","target","composedPath","setPointerCapture","onPointerMove","g","plot","plotRect","Math","min","max","width","frac","trackFrac","clientX","originFrac","last","dataLength","span","end","start","delta","round","s","applyZoom","onPointerUp","band","abs","a","b","indexAtX","sort","m","n","onPlotDblClick","resetZoom","onZoomPanDown","stopPropagation","preventDefault","onZoomSliderInput","valueStart","valueEnd","detail","onZoomSliderEvent","onPlotKeyDown","scene","getScene","xPositions","length","rtl","getComputedStyle","direction","forward","back","next","key","emitBarClickForCategory","moveKeyboardCursor","onPlotBlur","seriesKeys","seen","map","i","base","get","set","rememberLegendToggle","seriesIndex","hidden","size","oldest","keys","value","delete","componentDidLoad","initChart","window","matchMedia","themeMql","themeListener","applyEngine","addEventListener","disconnectedCallback","disconnect","dispose","removeEventListener","undefined","onAnyPropChange","queueMicrotask","rebuildA11yTable","resize","onLoadingChange","now","before","replay","drill","index","toDataURL","getInstance","makeEngine","mdReady","emit","BarChartEngine","ResizeObserver","observe","parseRatio","v","fallback","Number","isFinite","parseFloat","trim","endsWith","buildEngineTheme","t","background","textColor","textColorMuted","axisLineColor","gridLineColor","gridColor","surface","fontFamily","labelSize","titleSize","zoomSliderOn","reduce","acc","d","data","xAxis","winStart","w","reset","mdZoom","startIndex","endIndex","setZoom","p","y","height","canvasOffset","canvas","host","getBoundingClientRect","box","left","top","zoomBandStyle","off","xs","best","bestD","Infinity","forEach","px","clientY","sliderTrackRect","slider","shadowRoot","querySelector","r","track","raw","renderZoomSlider","pct","fmt","String","h","class","part","exportparts","range","controlled","step","ariaLabelStart","ariaLabelEnd","valueStartText","valueEndText","onMdInput","onMdChange","onMdDragStart","onMdDragEnd","onMdFocus","onMdBlur","style","insetInlineStart","inlineSize","onPointerDown","buildSpec","percentage","vFmt","valueFormatter","toLocaleString","zw","cut","arr","slice","rebaseMap","rec","out","k","Object","entries","pointColors","resolved","c","resolveSeriesColor","pickPaletteColor","palette","color","axisIndex","yAxisIndex","overlay","widthRatio","pointWidths","normalizeRange","title","subtitle","categories","categoryFormatter","defaultValueFormatter","categoryLabelRotation","labelRotation","categoryLabelsMirrored","mirrorLabels","valueAxis2","yAxis2","formatter","valueTickFormatter","yAxis","categoryLabel","categoryHidden","categoryHideTicks","hideTicks","categoryAxisLine","axisLine","categoryDash","dash","valueScale","scale","valueBreaks","breaks","valueMin","valueMax","valueLabel","valueHidden","valueHideTicks","valueAxisLine","valueDash","valueGridDash","gridDash","horizontal","categoryGapRatio","barGapRatio","barWidth","polarHole","polarSweep","animationDuration","snap","readMdChartTheme","setSpec","onHover","idx","mdHover","dataIndex","axisValue","seriesIndices","visibleSeriesIndices","onLegendClick","item","mdLegendClick","seriesId","selected","onPointClick","si","di","mdBarClick","nativeEvent","animate","setHoverEnabled","setClickable","setTooltip","render","tooltipRenderer","missingFormatter","hp","hoverPoints","_","filter","innerHTML","buildDataTableHtml","xAxisLabel","xAxisData","xValueFormatter","focusIndex","xText","xLabels","yFmt","values","pt","byIndex","Boolean","join","replace","xValues","summary","buildChartSummary","chartType","seriesCount","xMin","xMax","empty","Host","role","heightProp","blockSize","onPointerCancel","onDblClick","name","ref","tabindex","onKeyDown","onBlur","variant","indeterminate"],"sources":["src/components/md-bar-chart/md-bar-chart.css?tag=md-bar-chart&encapsulation=shadow","src/components/md-bar-chart/md-bar-chart.tsx"],"sourcesContent":["/* ==========================================================\n md-bar-chart — Material Design 3 Expressive bar chart\n\n PUBLIC CSS CUSTOM PROPERTIES:\n --md-bar-chart-block-size Explicit chart height, overriding the aspect ratio (default: auto)\n --md-bar-chart-min-block-size Floor the chart height never drops below (density-aware)\n --md-bar-chart-aspect-ratio Width:height ratio used when no block-size is set (default: 16 / 9)\n --md-bar-chart-background Chart surface fill (default: surface-container-low)\n --md-bar-chart-padding Inset between the host edge and the plot canvas (density-aware)\n --md-bar-chart-shape Corner radius of the chart surface (density-aware)\n --md-bar-chart-empty-color Empty-state text colour (default: on-surface-variant)\n --md-bar-chart-empty-background Empty-state overlay fill (defaults to the chart background)\n --md-bar-chart-empty-font Empty-state font family (default: body-medium)\n --md-bar-chart-empty-font-size Empty-state font size (default: body-medium, 14px)\n --md-bar-chart-empty-icon-size Size of an icon slotted into the empty state (default: 40px)\n --md-bar-chart-zoom-size Height reserved for the zoom slider (default: 28px)\n --md-bar-chart-zoom-track-color Zoom slider track colour\n --md-bar-chart-zoom-window-color Zoom slider selected-window colour\n --md-bar-chart-zoom-handle-color Zoom slider thumb + drag-band edge colour\n --md-bar-chart-zoom-band-color Drag-to-zoom selection fill\n (the zoom slider is an md-slider — its own --md-slider-* variables also\n apply, scoped to .md-bar-chart__zoom-slider)\n\n CSS PARTS:\n header Header row above the plot (hosts the `header` slot)\n canvas The plot surface the chart draws into\n empty Empty-state overlay, shown when there is no data\n footer Footer row below the plot (hosts the `footer` slot)\n zoom Wrapper around the zoom slider\n zoom-slider The zoom range slider itself\n zoom-track Zoom slider's inactive track (forwarded from md-slider)\n zoom-window Zoom slider's selected window (forwarded from md-slider)\n zoom-handle Zoom slider's thumbs (forwarded from md-slider)\n zoom-pan Grip that drags the whole zoom window along the track\n zoom-band Live selection band drawn while dragging across the plot\n tooltip The hover card, including one built by `tooltipRenderer`\n\n SLOTS:\n header Content for the header row, replacing the default title block\n empty Replaces the empty-state message when there is no data\n footer Content for the footer row below the plot\n ========================================================== */\n\n:host {\n --_block-size: var(--md-bar-chart-block-size, auto);\n --_min-block-size: var(--md-bar-chart-min-block-size, max(120px, calc(160px + var(--md-sys-density-scale, 0) * 8px)));\n --_aspect-ratio: var(--md-bar-chart-aspect-ratio, 16 / 9);\n --_background: var(--md-bar-chart-background, var(--md-sys-color-surface-container-low, #F7F2FA));\n --_padding: var(--md-bar-chart-padding, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));\n --_shape: var(--md-bar-chart-shape, max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px)));\n --_empty-color: var(--md-bar-chart-empty-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_empty-background: var(--md-bar-chart-empty-background, var(--_background));\n --_empty-font: var(--md-bar-chart-empty-font, var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif));\n --_empty-font-size: var(--md-bar-chart-empty-font-size, var(--md-sys-typescale-body-medium-font-size, 14px));\n --_empty-icon-size: var(--md-bar-chart-empty-icon-size, 40px);\n --_zoom-size: var(--md-bar-chart-zoom-size, 28px);\n --_zoom-track-color: var(--md-bar-chart-zoom-track-color, var(--md-sys-color-surface-container-highest, #E6E0E9));\n --_zoom-window-color: var(--md-bar-chart-zoom-window-color, var(--md-sys-color-secondary-container, #E8DEF8));\n --_zoom-handle-color: var(--md-bar-chart-zoom-handle-color, var(--md-sys-color-primary, #6750A4));\n --_zoom-band-color: var(--md-bar-chart-zoom-band-color, color-mix(in srgb, var(--md-sys-color-primary, #6750A4) 16%, transparent));\n /* Clearance kept at each end of the pan grip so the thumbs stay grabbable. */\n --_zoom-pan-inset: 10px;\n\n display: block;\n position: relative;\n inline-size: 100%;\n block-size: var(--_block-size);\n min-block-size: var(--_min-block-size);\n background: var(--_background);\n padding: var(--_padding);\n border-radius: var(--_shape);\n box-sizing: border-box;\n aspect-ratio: var(--_aspect-ratio);\n}\n\n.md-bar-chart__header,\n.md-bar-chart__footer { display: contents; }\n\n.md-bar-chart__header > slot[name='header']::slotted(*),\n.md-bar-chart__footer > slot[name='footer']::slotted(*) {\n display: block;\n margin-block: 8px;\n}\n\n.md-bar-chart__canvas {\n position: absolute;\n inset: var(--_padding);\n min-block-size: 0;\n min-inline-size: 0;\n}\n\n/* Reserve the slider band under the plot: lift the canvas bottom by exactly the\n slider's height so the two never overlap. */\n:host(.md-bar-chart--zoom-slider) .md-bar-chart__canvas {\n bottom: calc(var(--_padding) + var(--_zoom-size));\n}\n\n:host(.md-bar-chart--zoom-drag) .md-bar-chart__canvas {\n /* Signals the plot is draggable; the band itself is pointer-transparent. */\n cursor: ew-resize;\n}\n\n.md-bar-chart__zoom {\n position: absolute;\n inset-inline: var(--_padding);\n bottom: var(--_padding);\n block-size: var(--_zoom-size);\n display: flex;\n align-items: center;\n}\n\n/* The house slider draws the track and thumbs; the chart only maps its own\n public zoom tokens onto the slider's and sizes it to the reserved band. */\n.md-bar-chart__zoom-slider {\n --md-slider-active-color: var(--_zoom-window-color);\n --md-slider-inactive-color: var(--_zoom-track-color);\n --md-slider-thumb-color: var(--_zoom-handle-color);\n /* Full-height thumbs in a band shorter than the MD3 default (44px), so the\n slider never overflows into the plot. */\n --md-slider-thumb-height: var(--_zoom-size);\n --md-slider-track-height: 12px;\n}\n\n/* Pan grip over the selected window: drag it to move the window without\n resizing. Inset at both ends (see renderZoomSlider) so a press near a thumb\n still reaches the slider's rail and resizes. */\n.md-bar-chart__zoom-pan {\n position: absolute;\n inset-block: 0;\n z-index: 1;\n cursor: grab;\n touch-action: none;\n}\n\n.md-bar-chart__zoom-pan:active {\n cursor: grabbing;\n}\n\n/* Live drag selection over the plot. */\n.md-bar-chart__zoom-band {\n position: absolute;\n background: var(--_zoom-band-color);\n border-inline: 1px solid var(--_zoom-handle-color);\n pointer-events: none;\n}\n\n.md-bar-chart__empty {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-sizing: border-box;\n padding: 24px;\n /* Mirrors the chart's own container — same surface and corner radius. The\n engine still draws a phantom 0-1 axis for an empty series, so an OPAQUE\n surface here masks that ghost grid instead of letting it show through\n behind the message. Column layout stacks a slotted icon above the text. */\n background: var(--_empty-background);\n border-radius: var(--_shape);\n color: var(--_empty-color);\n font-family: var(--_empty-font);\n font-size: var(--_empty-font-size);\n line-height: var(--md-sys-typescale-body-medium-line-height, 20px);\n pointer-events: none;\n text-align: center;\n}\n\n/* Same opaque surface as the empty state — the engine keeps drawing a phantom\n 0-1 axis while data is absent, and a translucent loader would let that ghost\n grid read as real. z-index keeps it over the canvas and the zoom band. */\n.md-bar-chart__loading {\n position: absolute;\n inset: 0;\n z-index: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-sizing: border-box;\n padding: 24px;\n background: var(--_empty-background);\n border-radius: var(--_shape);\n color: var(--_empty-color);\n font-family: var(--_empty-font);\n font-size: var(--_empty-font-size);\n text-align: center;\n}\n\n.md-bar-chart__spinner {\n /* Sized against the empty-state icon so a loading chart and an empty one\n read as the same family. */\n inline-size: var(--_empty-icon-size);\n block-size: var(--_empty-icon-size);\n}\n\n/* A slotted icon (e.g. a Material Symbols span) gets a sensible size and the\n muted empty-state colour without the consumer restyling it. */\n.md-bar-chart__empty ::slotted(.material-symbols-outlined),\n.md-bar-chart__empty ::slotted(.material-symbols-rounded),\n.md-bar-chart__empty ::slotted(.material-symbols-sharp),\n.md-bar-chart__empty ::slotted(.material-icons) {\n /* Document-level .material-symbols rules outrank ::slotted() in the cascade,\n so the size needs !important to win (same reason md-icon-button does it). */\n font-size: var(--_empty-icon-size) !important;\n line-height: 1;\n opacity: 0.55;\n}\n\n.md-bar-chart__a11y-table {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n@media (forced-colors: active) { :host { forced-color-adjust: auto; } }\n\n.md-bar-chart__live {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n/* Focus ring for keyboard navigation — neutral outline, inset so the canvas\n box doesn't clip it. */\n/* The legend chips are engine-created buttons styled inline, and inline styles\n can't express :focus-visible — so their focus ring comes from here. Same\n neutral outline as the plot's, rather than the browser's blue default. */\n[part='legend'] button:focus-visible {\n /* Same ring md-button uses, so focus looks the same wherever it lands. */\n outline: 3px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: 2px;\n border-radius: 6px;\n}\n\n.md-bar-chart__canvas:focus-visible {\n outline: 3px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: -3px;\n border-radius: 4px;\n}\n\n/* ==========================================================\n DENSITY (local override)\n Maps the local `density` prop onto the same --md-sys-density-scale signal a\n global `data-density` ancestor sets. Declared on :host, so a local rung wins\n over the inherited global one. Every density-sensitive value in this file\n derives from that single signal by calc — never add a fixed per-rung ladder.\n ========================================================== */\n:host([density='-1']) { --md-sys-density-scale: -1; }\n:host([density='-2']) { --md-sys-density-scale: -2; }\n:host([density='-3']) { --md-sys-density-scale: -3; }\n:host([density='-4']) { --md-sys-density-scale: -4; }\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\n Watch,\n} from '@stencil/core';\nimport {\n buildChartSummary,\n buildDataTableHtml,\n defaultValueFormatter,\n normalizeRange,\n pickPaletteColor,\n readMdChartTheme,\n resolveSeriesColor,\n BarChartEngine,\n type BarChartSpec,\n type EngineTheme,\n type MdChartAnimation,\n type MdChartAxis,\n type MdChartAxisValue,\n type MdChartBarLayout,\n type MdChartClickDetail,\n type MdChartHoverDetail,\n type MdChartLegendPosition,\n type MdChartSeries,\n type MdChartStackMode,\n type MdChartTitleAlign,\n type MdChartTooltipRenderer,\n type MdChartTooltipTrigger,\n} from '../../utils/charts';\n\n/**\n * md-bar-chart — Material Design 3 Expressive bar chart, rendered\n * by the in-house engine (Canvas2D + a DOM text overlay). No\n * ECharts.\n *\n * • vertical (default) and horizontal layouts\n * • grouped / stacked / percentage modes\n * • category + bar gap configuration\n * • rounded outer corners (top for vertical, end for horizontal)\n * • legend toggle, hover tooltip, click events\n * • role=\"figure\" + screen-reader-only data table\n */\n@Component({\n tag: 'md-bar-chart',\n styleUrl: 'md-bar-chart.css',\n shadow: true,\n})\nexport class MdBarChart {\n @Element() el!: HTMLElement;\n\n @Prop() label: string = '';\n /**\n * A quieter line under the title — a source, a unit, the caveat a title\n * should not have to carry.\n */\n @Prop() subtitle: string | undefined;\n /** Title alignment over the plot: `start` (left), `center`, or `end` (right). */\n @Prop({ attribute: 'title-align' }) titleAlign: MdChartTitleAlign = 'start';\n @Prop() series: MdChartSeries[] = [];\n\n /** Category axis configuration. */\n @Prop() xAxis: MdChartAxis | undefined;\n /** Value axis configuration. */\n @Prop() yAxis: MdChartAxis | undefined;\n /**\n * A SECOND value axis, drawn in the opposite gutter and used by any series\n * whose `yAxisIndex` is 1 — two quantities on one category axis that share no\n * scale, like a count and a rate. Vertical charts.\n *\n * It draws no gridlines of its own: two sets at two spacings turn the plot\n * into a mesh nobody can read a value off.\n */\n @Prop() yAxis2: MdChartAxis | undefined;\n\n /** Bar layout — `'horizontal'` swaps categories onto the y axis. */\n @Prop({ reflect: true }) layout: MdChartBarLayout = 'vertical';\n\n /** Stacking strategy: none (grouped) / normal / percentage. */\n @Prop() stack: MdChartStackMode = 'none';\n\n /** Category gap as a percentage of the band width (`\"30%\"` or `30`). */\n @Prop({ attribute: 'category-gap' }) categoryGap: string | number = '30%';\n\n /** Bar gap between sibling grouped bars (`\"20%\"` or `20`). */\n @Prop({ attribute: 'bar-gap' }) barGap: string | number = '20%';\n\n /** Fixed bar WIDTH in px, centred in each slot. Default: auto — the bar fills\n * its slot (the band minus the category/bar gaps). Clamped to the slot so it\n * can't overrun a neighbour. */\n @Prop({ attribute: 'bar-width' }) barWidth?: number;\n\n /** Bar corner radius in pixels. */\n @Prop({ attribute: 'corner-radius' }) cornerRadius: number = 6;\n\n @Prop({ reflect: true }) legend: MdChartLegendPosition | 'none' = 'top-end';\n @Prop() tooltip: MdChartTooltipTrigger = 'axis';\n /**\n * Interactive zoom over the CATEGORY range — the same \"zoom is a view\" model\n * as `md-line-chart`:\n * • `inside` — drag horizontally across the plot to zoom into that span of\n * bars; double-click the plot to reset.\n * • `slider` — a range slider under the plot; drag its thumbs to resize the\n * window, or the grip between them to pan it.\n * • `both` — both gestures.\n *\n * `series` / `xAxis` are never mutated: the engine is simply fed the sliced\n * window, and hover / click / keyboard indices are rebased so consumers still\n * see ABSOLUTE data indices. Ignored on a `polar` chart (a ring has no span to\n * zoom). For a *value*-range zoom, set `yAxis.min` / `yAxis.max`.\n */\n @Prop() zoom: 'none' | 'inside' | 'slider' | 'both' = 'none';\n /**\n * Format raw values for tooltips / a11y table. The tooltip also asks it about\n * series with NO value at the hovered category — `null` for a null datum,\n * `undefined` for no datum at all — and shows a row for one when it returns a\n * non-empty string.\n */\n /**\n * BCP-47 locale for the DEFAULT number / date formatting (axis ticks,\n * tooltip values, screen-reader table). Empty follows the browser; an\n * explicit `valueFormatter` always wins.\n */\n @Prop() locale: string = '';\n\n @Prop() valueFormatter?: (value: number | null | undefined) => string;\n\n /** Replace the tooltip's content. See `md-line-chart`'s `tooltipRenderer`. */\n @Prop() tooltipRenderer?: MdChartTooltipRenderer;\n @Prop({ attribute: 'height' }) heightProp?: string;\n /** Disable all animation (shorthand for `animation=\"none\"`). */\n @Prop({ attribute: 'no-animation' }) noAnimation: boolean = false;\n /** Entry-animation variant: `expressive` (default), `grow`, `fade`, `draw`, or `none`. */\n @Prop() animation: MdChartAnimation = 'expressive';\n /** Entry-animation duration override in ms (≤ 0 disables). */\n @Prop({ attribute: 'animation-duration' }) animationDuration?: number;\n\n /** Show numeric data labels on each bar. */\n @Prop({ attribute: 'show-labels' }) showLabels: boolean = false;\n /**\n * Print each stack's TOTAL past the end of the column, alongside the\n * per-segment values `show-labels` prints inside it. Stacked charts only —\n * an unstacked bar already IS its total.\n */\n @Prop({ attribute: 'show-totals' }) showTotals: boolean = false;\n /**\n * Draw the bars as CHEVRONS pointing away from the baseline instead of as\n * rectangles. Along a stack they interlock, each segment's point sitting in\n * the next one's notch — a force diagram, where the contributions are handed\n * along in a direction rather than merely piled up.\n */\n @Prop({ attribute: 'chevron' }) chevron: boolean = false;\n /**\n * Wrap the bars around a circle: one concentric RING per category, with the\n * value axis running as an ANGLE instead of a length. A radial (polar) bar\n * chart.\n *\n * Stacking, legend hiding and percentage normalisation all work unchanged —\n * only the step from a value to geometry differs, and the value axis\n * deliberately spans less than the full circle, since a ring that closes on\n * itself has no readable start or end. The quarter it gives up is where the\n * category names go; `polar-sweep` changes how much that is.\n */\n @Prop({ reflect: true }) polar: boolean = false;\n /** Radius of the hole at the centre of a polar chart, 0..0.9. Default 0.22. */\n @Prop({ attribute: 'polar-hole' }) polarHole?: number;\n /** Fraction of the circle the value axis spans on a polar chart. Default 0.75. */\n @Prop({ attribute: 'polar-sweep' }) polarSweep?: number;\n\n /** Draw small perpendicular tick marks on the axes. */\n @Prop({ attribute: 'axis-ticks' }) axisTicks: boolean = false;\n\n /**\n * Show a hand (`pointer`) cursor over the bars, signalling they're actionable —\n * e.g. clickable to drill into. The chart can't know an interaction is wired,\n * so set this when a `mdBarClick` handler does something (like `drill`). The\n * cursor tracks the bar itself (hit-tested like a click), not the empty column\n * above a short bar.\n */\n @Prop({ attribute: 'clickable' }) clickable: boolean = false;\n\n @Event() mdBarClick!: EventEmitter<MdChartClickDetail<MdChartSeries>>;\n @Event() mdLegendClick!: EventEmitter<{ seriesIndex: number; seriesId?: string; selected: boolean }>;\n @Event() mdHover!: EventEmitter<MdChartHoverDetail>;\n @Event() mdReady!: EventEmitter<void>;\n /** Fires when the zoom window changes (drag, slider, or `setZoom`/`resetZoom`). */\n @Event() mdZoom!: EventEmitter<{ startIndex: number; endIndex: number; reset: boolean }>;\n\n /** Accessible label for the zoom slider's start thumb. */\n @Prop({ attribute: 'label-zoom-start' }) labelZoomStart: string = 'Zoom range start';\n /** Accessible label for the zoom slider's end thumb. */\n @Prop({ attribute: 'label-zoom-end' }) labelZoomEnd: string = 'Zoom range end';\n\n /**\n * Instructions announced when the plot receives keyboard focus. The plot is\n * focusable so a keyboard user can walk the data with the arrow keys; this\n * is what tells them so.\n */\n @Prop({ attribute: 'label-plot' }) labelPlot: string =\n 'Chart data. Use the arrow keys to move between points, Home and End for the first and last, Escape to leave.';\n\n /** Template for the live announcement as keyboard focus moves. `%x%` is the\n * axis value, `%values%` the series readings at it. */\n @Prop({ attribute: 'label-point' }) labelPoint: string = '%x%: %values%';\n\n /**\n * Data is still on its way — the chart covers the plot with a loader instead\n * of drawing an empty (or stale) axis, and marks itself `aria-busy`.\n *\n * Set it while the fetch is in flight and clear it when `series` arrives; the\n * entry animation replays on the way out, so the bars draw themselves in\n * rather than appearing fully formed. Slot `loading` to replace the default\n * indicator with your own skeleton.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /** Accessible + visible text under the loader. */\n @Prop({ attribute: 'loading-label' }) loadingLabel: string = 'Loading chart…';\n\n /**\n * Local density rung. Drives the same `--md-sys-density-scale` signal that a\n * global `data-density` ancestor sets, so a local value simply overrides the\n * inherited one. 0 = default, -4 = ultra-compact.\n */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n @State() private mounted = false;\n /** Index the keyboard cursor sits on, or -1 when the plot isn't focused. */\n @State() private kbIndex = -1;\n /** Text for the aria-live region — what a screen reader speaks on move. */\n @State() private announcement = '';\n\n /** Visible category window, or null for the full range. */\n @State() private zoomWin: { start: number; end: number } | null = null;\n\n /** Live drag rectangle (host-relative px) while selecting a range to zoom. */\n @State() private dragBand: { x1: number; x2: number } | null = null;\n\n /**\n * Pointer id + origin of an in-progress gesture: `band` is a drag across the\n * plot, `pan` is a drag of the zoom window. (Resizing the window is the\n * slider's own gesture — see `renderZoomSlider`.)\n */\n private grab: { id: number; kind: 'band' | 'pan'; x: number; win: { start: number; end: number } } | null = null;\n\n private engine: BarChartEngine | null = null;\n /** True while a prop-change rebuild is queued for the next microtask (batches\n * a burst of prop assignments into one render — see onAnyPropChange). */\n private applyQueued = false;\n private ro: ResizeObserver | null = null;\n private chartHost?: HTMLDivElement;\n private a11yTableHost?: HTMLDivElement;\n private themeMql?: MediaQueryList;\n private themeListener?: () => void;\n\n /**\n * Legend toggles the USER made, kept across data updates.\n *\n * The engine self-toggles a series on legend click, but that lives on the\n * spec — and the next `series` assignment rebuilds the spec from the prop and\n * takes the toggle with it. A chart re-fed live (a race, a poll) would\n * un-hide whatever the reader had just hidden. Remembered here and re-applied\n * in `buildSpec`, keyed by series identity, so the toggle survives the refeed\n * while an explicit `series[i].hidden` still wins.\n */\n private legendHidden = new Map<string, boolean>();\n\n /** A stable key per series — id, else label, else position. Suffixed on\n * collision so two series sharing a label do not share a toggle. */\n private seriesKeys(): string[] {\n const seen = new Map<string, number>();\n return this.series.map((s, i) => {\n const base = s.id != null ? `id:${s.id}` : s.label != null ? `label:${s.label}` : `pos:${i}`;\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n return n === 0 ? base : `${base}#${n}`;\n });\n }\n\n /** Record a legend toggle so `buildSpec` re-applies it across series re-feeds. */\n private rememberLegendToggle(seriesIndex: number, hidden: boolean): void {\n const key = this.seriesKeys()[seriesIndex];\n if (key == null) return;\n this.legendHidden.set(key, hidden);\n // Backstop against unbounded growth (only legend clicks add entries, so this\n // realistically never trips): evict the oldest toggle.\n if (this.legendHidden.size > 256) {\n const oldest = this.legendHidden.keys().next().value as string;\n this.legendHidden.delete(oldest);\n }\n }\n\n componentDidLoad() {\n this.initChart();\n if (typeof window !== 'undefined' && window.matchMedia) {\n this.themeMql = window.matchMedia('(prefers-color-scheme: dark)');\n this.themeListener = () => this.applyEngine();\n this.themeMql.addEventListener?.('change', this.themeListener);\n }\n }\n disconnectedCallback() {\n this.ro?.disconnect();\n this.ro = null;\n this.engine?.dispose();\n this.engine = null;\n if (this.themeMql && this.themeListener) {\n this.themeMql.removeEventListener?.('change', this.themeListener);\n this.themeListener = undefined;\n this.themeMql = undefined;\n }\n }\n\n @Watch('series') @Watch('xAxis') @Watch('yAxis') @Watch('yAxis2') @Watch('layout')\n @Watch('stack') @Watch('categoryGap') @Watch('barGap') @Watch('barWidth') @Watch('cornerRadius')\n @Watch('legend') @Watch('tooltip') @Watch('zoom') @Watch('label') @Watch('subtitle') @Watch('titleAlign') @Watch('showLabels') @Watch('showTotals') @Watch('chevron') @Watch('polar') @Watch('polarHole') @Watch('polarSweep') @Watch('axisTicks')\n @Watch('animation') @Watch('animationDuration') @Watch('tooltipRenderer') @Watch('valueFormatter') @Watch('locale') @Watch('noAnimation') @Watch('clickable')\n onAnyPropChange() {\n // Coalesce a burst of prop assignments (a data swap sets series + xAxis +\n // yAxis, a race re-feeds several per frame) into ONE rebuild + render per\n // microtask, instead of a full computeBarLayout + canvas clear + repaint per\n // property.\n if (this.applyQueued) return;\n this.applyQueued = true;\n queueMicrotask(() => {\n this.applyQueued = false;\n this.applyEngine();\n this.rebuildA11yTable();\n });\n }\n\n @Method()\n async resize(): Promise<void> {\n this.engine?.resize();\n }\n\n /**\n * Coming OUT of the loading state, replay the entry motion so the data that\n * just arrived draws itself in instead of appearing fully formed behind the\n * fading loader. (Going in needs nothing — the loader covers the plot.)\n */\n @Watch('loading')\n onLoadingChange(now: boolean, before: boolean) {\n if (before && !now) this.engine?.replay();\n }\n\n /** Replay the entry animation from the start (uses the current `animation`). */\n @Method()\n async replay(): Promise<void> {\n this.engine?.replay();\n }\n\n /**\n * Animate the next data change as a drill through one column, so the levels\n * of a hierarchy read as connected rather than as unrelated charts.\n *\n * AWAIT it, then assign the new `series` / `xAxis`. Like every Stencil\n * `@Method` this one resolves through a microtask, so a bare call lands AFTER\n * an assignment on the next line — the swap renders un-animated and the drill\n * arms itself for whatever change comes after.\n *\n * ```ts\n * await chart.drill(e.detail.dataIndex); // descend into the clicked column\n * chart.series = childrenOf(clicked);\n *\n * await chart.drill(0, 'up'); // …and back out\n * chart.series = parentLevel;\n * ```\n *\n * Descending, the incoming columns unfold out of the band the named column\n * occupies right now. `'up'` pivots on the whole plot instead, which is the\n * same motion run inside out — the level being returned to opens out of\n * everything the level being left was filling. Falls back to a plain swap\n * when the index doesn't resolve, or under `prefers-reduced-motion`.\n */\n @Method()\n async drill(index: number, direction: 'down' | 'up' = 'down'): Promise<void> {\n this.engine?.drill(index, direction);\n }\n\n @Method()\n async toDataURL(): Promise<string> {\n return this.engine?.toDataURL('image/png') ?? '';\n }\n\n @Method()\n async getInstance(): Promise<BarChartEngine | null> {\n return this.engine;\n }\n\n private bindChartHost = (el?: HTMLDivElement) => { this.chartHost = el; };\n private bindA11yTableHost = (el?: HTMLDivElement) => { this.a11yTableHost = el; };\n\n private initChart() {\n this.makeEngine();\n this.applyEngine();\n this.rebuildA11yTable();\n this.mounted = true;\n this.mdReady.emit();\n }\n\n /** (Re)create the engine on the selected backend + wire its ResizeObserver. */\n private makeEngine() {\n if (!this.chartHost) return;\n this.ro?.disconnect();\n this.ro = null;\n this.engine?.dispose();\n try {\n this.engine = new BarChartEngine(this.chartHost);\n } catch {\n this.engine = null;\n }\n if (this.engine && typeof ResizeObserver !== 'undefined') {\n this.ro = new ResizeObserver(() => this.engine?.resize());\n this.ro.observe(this.chartHost);\n }\n }\n\n\n /** `\"30%\"` / `30` / `0.3` → `0.3`. */\n private parseRatio(v: string | number, fallback: number): number {\n if (typeof v === 'number') return Number.isFinite(v) ? (v > 1 ? v / 100 : v) : fallback;\n const n = parseFloat(v);\n if (!Number.isFinite(n)) return fallback;\n return v.trim().endsWith('%') || n > 1 ? n / 100 : n;\n }\n\n private buildEngineTheme(t: ReturnType<typeof readMdChartTheme>): EngineTheme {\n return {\n background: t.background,\n textColor: t.textColor,\n textColorMuted: t.textColorMuted,\n axisLineColor: t.axisLineColor,\n gridLineColor: t.gridColor,\n surface: t.surface,\n fontFamily: t.fontFamily,\n labelSize: t.labelSize,\n titleSize: t.titleSize,\n };\n }\n\n // ─────────────────── zoom ───────────────────\n // Zoom is a *view* over the categories: the engine is fed a sliced window,\n // `series`/`xAxis` are untouched, and every index the engine reports (hover,\n // click, keyboard) is rebased by `winStart()` so consumers see absolute\n // indices. A polar chart has no linear span, so gestures are disabled on it.\n\n private get zoomInside(): boolean {\n return !this.polar && (this.zoom === 'inside' || this.zoom === 'both');\n }\n\n private get zoomSliderOn(): boolean {\n return !this.polar && (this.zoom === 'slider' || this.zoom === 'both');\n }\n\n /** Number of categories — the longest series, or the category axis if longer. */\n private dataLength(): number {\n const s = (this.series ?? []).reduce((acc, d) => Math.max(acc, d?.data?.length ?? 0), 0);\n return Math.max(s, this.xAxis?.data?.length ?? 0);\n }\n\n /** Absolute index of the window's first visible category (0 when unzoomed). */\n private winStart(): number {\n return this.zoomWin && !this.polar ? this.win().start : 0;\n }\n\n /** Current window, defaulted to the full range and clamped to the data. */\n private win(): { start: number; end: number } {\n const last = Math.max(0, this.dataLength() - 1);\n const w = this.zoomWin;\n if (!w) return { start: 0, end: last };\n // Keep at least two categories visible, else the slider range collapses.\n const start = Math.min(Math.max(0, w.start), Math.max(0, last - 1));\n return { start, end: Math.min(Math.max(start + 1, w.end), last) };\n }\n\n private applyZoom(start: number, end: number, reset = false): void {\n const last = Math.max(0, this.dataLength() - 1);\n const s = Math.min(Math.max(0, Math.round(start)), Math.max(0, last - 1));\n const e = Math.min(Math.max(s + 1, Math.round(end)), last);\n this.zoomWin = reset ? null : { start: s, end: e };\n // Snap to the new window: a zoom is direct manipulation, so easing the bars\n // across the changed layout (the follow loop) would read as them sliding\n // together instead of tracking the gesture.\n this.applyEngine(true);\n this.rebuildA11yTable();\n this.mdZoom.emit({ startIndex: reset ? 0 : s, endIndex: reset ? last : e, reset });\n }\n\n /** Zoom to an absolute category range. */\n @Method()\n async setZoom(startIndex: number, endIndex: number): Promise<void> {\n this.applyZoom(startIndex, endIndex);\n }\n\n /** Drop the zoom window and show the full range. */\n @Method()\n async resetZoom(): Promise<void> {\n this.applyZoom(0, 0, true);\n }\n\n /**\n * Plot rect in CANVAS coordinates, from the live scene.\n *\n * The engine lays the scene out relative to the canvas box, which the host's\n * padding insets from the host box — so canvas and host space differ by that\n * padding. Everything that compares against the scene (`indexAtX` reads\n * `scene.xPositions`, which is canvas-space too) converts the pointer INTO\n * this space via `hostX`; only the drag band, positioned against the host,\n * converts back out.\n */\n private plotRect(): { x: number; y: number; width: number; height: number } | null {\n const p = this.engine?.getScene()?.plot;\n return p ? { x: p.x, y: p.y, width: p.width, height: p.height } : null;\n }\n\n /** Offset of the canvas box inside the host box — canvas space → host space. */\n private canvasOffset(): { x: number; y: number } {\n const canvas = this.chartHost;\n if (!canvas) return { x: 0, y: 0 };\n const host = this.el.getBoundingClientRect();\n const box = canvas.getBoundingClientRect();\n return { x: box.left - host.left, y: box.top - host.top };\n }\n\n /** Drag-band geometry, converted from canvas space back out to host space. */\n private zoomBandStyle(): { [key: string]: string } | undefined {\n const plot = this.plotRect();\n if (!this.dragBand || !plot) return undefined;\n const off = this.canvasOffset();\n const { x1, x2 } = this.dragBand;\n return {\n left: `${off.x + Math.min(x1, x2)}px`,\n width: `${Math.abs(x2 - x1)}px`,\n top: `${off.y + plot.y}px`,\n height: `${plot.height}px`,\n };\n }\n\n /** Pointer x in CANVAS coordinates — the space `plotRect`/`xPositions` use. */\n private hostX(e: MouseEvent): number {\n return e.clientX - (this.chartHost ?? this.el).getBoundingClientRect().left;\n }\n\n /** Map a canvas-relative x to the nearest ABSOLUTE category index. */\n private indexAtX(hostX: number): number {\n const scene = this.engine?.getScene();\n const w = this.win();\n const xs = scene?.xPositions;\n if (!xs?.length) return w.start;\n let best = 0;\n let bestD = Infinity;\n xs.forEach((px, i) => {\n const d = Math.abs(px - hostX);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n });\n return w.start + best;\n }\n\n /** Is the event over the plot itself (not the header, zoom slider, footer)? */\n private insidePlot(e: MouseEvent): boolean {\n const plot = this.plotRect();\n if (!plot) return false;\n const box = (this.chartHost ?? this.el).getBoundingClientRect();\n const x = e.clientX - box.left;\n const y = e.clientY - box.top;\n return x >= plot.x && x <= plot.x + plot.width && y >= plot.y && y <= plot.y + plot.height;\n }\n\n private onPlotPointerDown = (e: PointerEvent) => {\n if (!this.zoomInside || e.button !== 0 || this.grab) return;\n if (!this.insidePlot(e)) return;\n const x = this.hostX(e);\n this.grab = { id: e.pointerId, kind: 'band', x, win: this.win() };\n this.dragBand = { x1: x, x2: x };\n // Capture on the element really under the pointer (the shadow canvas), NOT\n // `e.target` — a host-level listener retargets to the host, and capturing\n // there would route the closing `click` to the host where the engine's\n // canvas never sees it, silently killing every bar click while zoom is on.\n const target = (e.composedPath?.()[0] as HTMLElement | undefined) ?? (e.target as HTMLElement);\n target.setPointerCapture?.(e.pointerId);\n };\n\n private onPointerMove = (e: PointerEvent) => {\n const g = this.grab;\n if (!g || g.id !== e.pointerId) return;\n if (g.kind === 'band') {\n const plot = this.plotRect();\n if (!plot) return;\n this.dragBand = { x1: g.x, x2: Math.min(Math.max(this.hostX(e), plot.x), plot.x + plot.width) };\n return;\n }\n // Pan: shift the window by the pointer's travel along the slider track,\n // keeping its span (fractions of the full range, so it tracks the thumbs).\n const frac = this.trackFrac(e.clientX);\n const originFrac = this.trackFrac(g.x);\n if (frac == null || originFrac == null) return;\n const last = Math.max(1, this.dataLength() - 1);\n const span = g.win.end - g.win.start;\n const delta = Math.round((frac - originFrac) * last);\n const s = Math.min(Math.max(0, g.win.start + delta), last - span);\n this.applyZoom(s, s + span);\n };\n\n private onPointerUp = (e: PointerEvent) => {\n const g = this.grab;\n if (!g || g.id !== e.pointerId) return;\n this.grab = null;\n const band = this.dragBand;\n this.dragBand = null;\n if (g.kind !== 'band' || !band) return;\n // A tiny drag is a click, not a zoom — leave the view alone so bar clicks\n // and tooltips keep working.\n if (Math.abs(band.x2 - band.x1) < 8) return;\n // In RTL the plot is mirrored, so order by index, not by pixel, or the\n // window comes out reversed.\n const [a, b] = [this.indexAtX(band.x1), this.indexAtX(band.x2)].sort((m, n) => m - n);\n if (b - a >= 1) this.applyZoom(a, b);\n };\n\n private onPlotDblClick = (e: MouseEvent) => {\n // Plot only: a double-click on the zoom slider is two track clicks, not a\n // request to throw the window away.\n if (this.zoomInside && this.zoomWin && this.insidePlot(e)) this.resetZoom();\n };\n\n /**\n * The zoom slider's track box. `md-slider` maps 0→100% across its own host\n * box, so the host rect *is* the track — measuring it keeps the pan gesture\n * in step with the thumbs.\n */\n private sliderTrackRect(): { left: number; width: number; rtl: boolean } | null {\n const slider = this.el.shadowRoot?.querySelector('.md-bar-chart__zoom-slider');\n if (!slider) return null;\n const r = slider.getBoundingClientRect();\n if (!r.width) return null;\n return { left: r.left, width: r.width, rtl: getComputedStyle(this.el).direction === 'rtl' };\n }\n\n /** Client x → fraction along the zoom track (RTL-aware, as md-slider is). */\n private trackFrac(clientX: number): number | null {\n const track = this.sliderTrackRect();\n if (!track) return null;\n const raw = (clientX - track.left) / track.width;\n return Math.min(Math.max(track.rtl ? 1 - raw : raw, 0), 1);\n }\n\n private onZoomPanDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n // Keep it away from the plot-drag handler on the host, and from the\n // slider's own rail (which would resize instead of pan).\n e.stopPropagation();\n e.preventDefault();\n this.grab = { id: e.pointerId, kind: 'pan', x: e.clientX, win: this.win() };\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n };\n\n /** md-slider drives the window while a thumb moves (continuous). */\n private onZoomSliderInput = (e: CustomEvent<{ valueStart?: number; valueEnd?: number }>) => {\n // md-slider's events are composed, so they would surface on the chart's own\n // host and look like chart events to a consumer. Stop them here.\n e.stopPropagation();\n const { valueStart, valueEnd } = e.detail ?? {};\n if (valueStart == null || valueEnd == null) return;\n this.applyZoom(valueStart, valueEnd);\n };\n\n /** Swallow the slider's remaining composed events (see above). mdInput has\n * already applied the window, so the commit needs no second applyZoom. */\n private onZoomSliderEvent = (e: Event) => e.stopPropagation();\n\n private renderZoomSlider() {\n const last = Math.max(1, this.dataLength() - 1);\n const w = this.win();\n const pct = (i: number) => (i / last) * 100;\n const fmt = (i: number) => String(this.xAxis?.data?.[i] ?? i);\n return (\n <div class=\"md-bar-chart__zoom\" part=\"zoom\">\n <md-slider\n class=\"md-bar-chart__zoom-slider\"\n part=\"zoom-slider\"\n exportparts=\"track: zoom-track, track-active: zoom-window, thumb-knob: zoom-handle\"\n range\n controlled\n min={0}\n max={last}\n step={1}\n valueStart={w.start}\n valueEnd={w.end}\n ariaLabelStart={this.labelZoomStart}\n ariaLabelEnd={this.labelZoomEnd}\n valueStartText={fmt(w.start)}\n valueEndText={fmt(w.end)}\n onMdInput={this.onZoomSliderInput}\n onMdChange={this.onZoomSliderEvent}\n onMdDragStart={this.onZoomSliderEvent}\n onMdDragEnd={this.onZoomSliderEvent}\n onMdFocus={this.onZoomSliderEvent}\n onMdBlur={this.onZoomSliderEvent}\n ></md-slider>\n\n {/* Pan grip over the selected window. Inset at both ends so the thumbs\n stay grabbable, and it collapses to nothing on a narrow window. */}\n <div\n class=\"md-bar-chart__zoom-pan\"\n part=\"zoom-pan\"\n style={{\n insetInlineStart: `calc(${pct(w.start)}% + var(--_zoom-pan-inset))`,\n inlineSize: `max(0px, calc(${pct(w.end) - pct(w.start)}% - 2 * var(--_zoom-pan-inset)))`,\n }}\n onPointerDown={this.onZoomPanDown}\n ></div>\n </div>\n );\n }\n\n private buildSpec(t: ReturnType<typeof readMdChartTheme>): BarChartSpec {\n const percentage = this.stack === 'percentage';\n const vFmt = (v: number) => (this.valueFormatter ? this.valueFormatter(v) : v.toLocaleString(this.locale || undefined));\n const keys = this.seriesKeys();\n // Zoom is a view: slice what the engine draws, leave `this.series` alone.\n // Per-category options (`data`, `range`) are sliced; index-keyed maps\n // (`pointWidths`, `pointColors`) are rebased into window coordinates and\n // anything outside the window is dropped.\n const zw = this.zoomWin && !this.polar ? this.win() : null;\n const cut = <T,>(arr: readonly T[] | undefined): T[] | undefined =>\n arr ? (zw ? arr.slice(zw.start, zw.end + 1) : arr.slice()) : undefined;\n const rebaseMap = <T,>(rec: Record<number, T> | undefined): Record<number, T> | undefined => {\n if (!rec || !zw) return rec;\n const out: Record<number, T> = {};\n for (const [k, v] of Object.entries(rec)) {\n const i = Number(k) - zw.start;\n if (i >= 0 && i <= zw.end - zw.start) out[i] = v;\n }\n return out;\n };\n return {\n series: this.series.map((s, i) => {\n let pointColors: Record<number, string> | undefined;\n if (s.pointColors) {\n const resolved: Record<number, string> = {};\n for (const [k, c] of Object.entries(s.pointColors)) resolved[Number(k)] = resolveSeriesColor(this.el, c, pickPaletteColor(t.palette, i));\n pointColors = rebaseMap(resolved);\n }\n return {\n label: s.label ?? `Series ${i + 1}`,\n color: resolveSeriesColor(this.el, s.color, pickPaletteColor(t.palette, i)),\n data: cut(s.data) ?? [],\n hidden: s.hidden ?? this.legendHidden.get(keys[i]) ?? false,\n stack: s.stack,\n axisIndex: s.yAxisIndex,\n overlay: s.overlay,\n widthRatio: s.widthRatio,\n pointWidths: rebaseMap(s.pointWidths),\n range: cut(s.range)?.map(normalizeRange),\n pointColors,\n };\n }),\n title: this.label || undefined,\n subtitle: this.subtitle || undefined,\n titleAlign: this.titleAlign,\n categories: cut(this.xAxis?.data) ?? [],\n categoryFormatter: this.xAxis?.valueFormatter ?? defaultValueFormatter,\n categoryLabelRotation: this.xAxis?.labelRotation,\n categoryLabelsMirrored: this.xAxis?.mirrorLabels,\n // `yAxis` IS the value axis whichever way the bars run, so its formatter\n // is the one that shapes the value ticks. It was declared on the type and\n // read for the category axis but never for this one, so a chart asking\n // for `300k` on the axis silently got `300,000`.\n valueAxis2: this.yAxis2\n ? {\n min: this.yAxis2.min,\n max: this.yAxis2.max,\n label: this.yAxis2.label,\n formatter: this.yAxis2.valueFormatter ? (v: number) => String(this.yAxis2!.valueFormatter!(v)) : undefined,\n hidden: this.yAxis2.hidden,\n }\n : undefined,\n valueTickFormatter: this.yAxis?.valueFormatter\n ? (v: number) => String(this.yAxis!.valueFormatter!(v))\n : undefined,\n categoryLabel: this.xAxis?.label,\n categoryHidden: this.xAxis?.hidden,\n categoryHideTicks: this.xAxis?.hideTicks,\n categoryAxisLine: this.xAxis?.axisLine,\n categoryDash: this.xAxis?.dash,\n valueScale: this.yAxis?.scale ?? 'value',\n // The value axis is y for vertical bars and x for horizontal ones, so\n // read breaks from whichever axis config carries the values.\n valueBreaks: (this.layout === 'horizontal' ? this.xAxis : this.yAxis)?.breaks,\n valueMin: percentage ? 0 : this.yAxis?.min,\n valueMax: percentage ? 100 : this.yAxis?.max,\n valueFormatter: percentage ? (v: number) => `${Math.round(v)}%` : vFmt,\n valueLabel: this.yAxis?.label,\n valueHidden: this.yAxis?.hidden,\n valueHideTicks: this.yAxis?.hideTicks,\n valueAxisLine: this.yAxis?.axisLine,\n valueDash: this.yAxis?.dash,\n valueGridDash: this.yAxis?.gridDash,\n stack: this.stack,\n horizontal: this.layout === 'horizontal',\n categoryGapRatio: this.parseRatio(this.categoryGap, 0.3),\n barGapRatio: this.parseRatio(this.barGap, 0.2),\n barWidth: this.barWidth,\n cornerRadius: this.cornerRadius,\n showLabels: this.showLabels,\n showTotals: this.showTotals,\n chevron: this.chevron,\n polar: this.polar,\n polarHole: this.polarHole,\n polarSweep: this.polarSweep,\n legend: this.legend,\n axisTicks: this.axisTicks,\n animation: this.noAnimation ? 'none' : this.animation,\n animationDuration: this.animationDuration,\n };\n }\n\n private applyEngine(snap = false) {\n if (!this.engine) return;\n const t = readMdChartTheme(this.el);\n this.engine.setSpec(this.buildSpec(t), this.buildEngineTheme(t), {\n onHover: (idx) => {\n if (idx < 0) return;\n // The engine reports indices into what it DREW (the zoom window), so\n // rebase to an absolute index before reporting / indexing full arrays.\n const abs = idx + this.winStart();\n this.mdHover.emit({\n dataIndex: abs,\n axisValue: this.xAxis?.data?.[abs],\n seriesIndices: this.visibleSeriesIndices(),\n });\n },\n onLegendClick: (item) => {\n this.rememberLegendToggle(item.seriesIndex, !!item.hidden);\n this.mdLegendClick.emit({\n seriesIndex: item.seriesIndex,\n seriesId: this.series[item.seriesIndex]?.id,\n selected: !item.hidden,\n });\n },\n onPointClick: (si, di, e) => {\n const s = this.series[si];\n if (!s) return;\n const abs = di + this.winStart(); // windowed → absolute (see onHover)\n this.mdBarClick.emit({\n seriesIndex: si,\n seriesId: s.id,\n dataIndex: abs,\n value: s.data?.[abs] ?? null,\n axisValue: this.xAxis?.data?.[abs],\n nativeEvent: e,\n series: s,\n });\n },\n }, { animate: !snap });\n this.engine.setHoverEnabled(this.tooltip !== 'none');\n this.engine.setClickable(this.clickable);\n this.engine.setTooltip({ render: this.tooltipRenderer, missingFormatter: this.valueFormatter });\n }\n\n private visibleSeriesIndices(): number[] {\n const hp = this.engine?.getScene()?.hoverPoints;\n if (hp) return hp.map((h) => h.seriesIndex);\n return this.series.map((_, i) => i).filter((i) => !this.series[i].hidden);\n }\n\n private rebuildA11yTable() {\n if (!this.a11yTableHost) return;\n this.a11yTableHost.innerHTML = buildDataTableHtml({\n title: this.label,\n xAxisLabel: this.xAxis?.label,\n xAxisData: this.xAxis?.data,\n xValueFormatter: this.xAxis?.valueFormatter ?? ((v: MdChartAxisValue) => defaultValueFormatter(v, this.locale)),\n locale: this.locale,\n series: this.series,\n valueFormatter: this.valueFormatter,\n });\n }\n\n\n /**\n * Walk the data with the keyboard. Without this the readings are reachable\n * only by hovering, which no keyboard or screen-reader user can do.\n * Arrows follow the READING direction, so in RTL, Left advances.\n */\n private onPlotKeyDown = (e: KeyboardEvent) => {\n const scene = this.engine?.getScene();\n const last = Math.max(0, (scene?.xPositions.length ?? 0) - 1);\n if (!scene || last < 0) return;\n const rtl = typeof getComputedStyle === 'function' && getComputedStyle(this.el).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const back = rtl ? 'ArrowRight' : 'ArrowLeft';\n let next = this.kbIndex;\n switch (e.key) {\n case forward:\n next = this.kbIndex < 0 ? 0 : Math.min(last, this.kbIndex + 1);\n break;\n case back:\n next = this.kbIndex < 0 ? last : Math.max(0, this.kbIndex - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = last;\n break;\n case 'Escape':\n if (this.kbIndex < 0) return;\n next = -1;\n break;\n case 'Enter':\n case ' ':\n case 'Spacebar': // legacy key name\n if (this.kbIndex < 0) return;\n e.preventDefault();\n this.emitBarClickForCategory(this.kbIndex, e);\n return;\n default:\n return;\n }\n e.preventDefault();\n this.moveKeyboardCursor(next);\n };\n\n /** Fire `mdBarClick` for the focused category so a keyboard user can activate a\n * bar (e.g. to drill), matching the pointer click. Picks the first visible\n * series present at that category. */\n private emitBarClickForCategory(dataIndex: number, nativeEvent: KeyboardEvent): void {\n const si = this.visibleSeriesIndices()[0] ?? 0;\n const s = this.series[si];\n if (!s) return;\n // `dataIndex` is the keyboard cursor, which walks the windowed scene —\n // rebase to absolute before reporting / indexing the full series.\n const abs = dataIndex + this.winStart();\n this.mdBarClick.emit({\n seriesIndex: si,\n seriesId: s.id,\n dataIndex: abs,\n value: s.data?.[abs] ?? null,\n axisValue: this.xAxis?.data?.[abs],\n nativeEvent,\n series: s,\n });\n }\n\n private onPlotBlur = () => {\n if (this.kbIndex >= 0) this.moveKeyboardCursor(-1);\n };\n\n /** Move the keyboard cursor, mirroring it into the hover UI and live region. */\n private moveKeyboardCursor(next: number) {\n this.kbIndex = next;\n this.engine?.focusIndex(next);\n if (next < 0) {\n this.announcement = '';\n return;\n }\n const scene = this.engine?.getScene();\n const xText = scene?.xLabels?.[next] ?? String(next + 1);\n const yFmt = (v: number) =>\n this.valueFormatter ? this.valueFormatter(v) : v.toLocaleString(this.locale || undefined);\n const values = (scene?.hoverPoints ?? [])\n .map((hp) => {\n const pt = hp.byIndex[next];\n return pt ? `${hp.label} ${yFmt(pt.value)}` : null;\n })\n .filter(Boolean)\n .join(', ');\n this.announcement = this.labelPoint.replace('%x%', xText).replace('%values%', values);\n }\n\n render() {\n const xValues = this.xAxis?.data ?? [];\n const summary = buildChartSummary({\n title: this.label, chartType: 'bar', seriesCount: this.series.length,\n xMin: xValues[0] as MdChartAxisValue | undefined,\n xMax: xValues[xValues.length - 1] as MdChartAxisValue | undefined,\n });\n // While loading, the loader owns the box — an empty-state message under it\n // answers \"no data\" to a question nobody asked yet.\n const empty = this.series.length === 0 && !this.loading;\n return (\n <Host\n class={{\n 'md-bar-chart': true,\n 'md-bar-chart--empty': empty,\n 'md-bar-chart--loading': this.loading,\n 'md-bar-chart--mounted': this.mounted,\n 'md-bar-chart--zoom-slider': this.zoomSliderOn,\n 'md-bar-chart--zoom-drag': this.zoomInside,\n [`md-bar-chart--${this.layout}`]: true,\n }}\n role=\"figure\"\n aria-label={summary}\n aria-busy={this.loading ? 'true' : null}\n style={this.heightProp ? { blockSize: this.heightProp } : undefined}\n onPointerDown={this.onPlotPointerDown}\n onPointerMove={this.onPointerMove}\n onPointerUp={this.onPointerUp}\n onPointerCancel={this.onPointerUp}\n onDblClick={this.onPlotDblClick}\n >\n <header class=\"md-bar-chart__header\" part=\"header\"><slot name=\"header\"></slot></header>\n <div\n class=\"md-bar-chart__canvas\"\n part=\"canvas\"\n ref={el => this.bindChartHost(el as HTMLDivElement)}\n tabindex={empty ? undefined : '0'}\n role={empty ? undefined : 'application'}\n aria-label={empty ? undefined : this.labelPlot}\n onKeyDown={this.onPlotKeyDown}\n onBlur={this.onPlotBlur}\n ></div>\n {empty && (\n <div class=\"md-bar-chart__empty\" part=\"empty\">\n <slot name=\"empty\">No data to display</slot>\n </div>\n )}\n\n {this.loading && (\n <div class=\"md-bar-chart__loading\" part=\"loading\" role=\"status\">\n {/* `loader` is the library-wide name for \"swap the loading affordance\";\n `loading` is kept as the older alias. Nesting them means either\n works — the outer slot falls back to the inner one, which falls\n back to the default below — and `loader` wins if both are given. */}\n <slot name=\"loader\">\n <slot name=\"loading\">\n <md-progress-indicator\n class=\"md-bar-chart__spinner\"\n variant=\"circular\"\n indeterminate\n label={this.loadingLabel}\n ></md-progress-indicator>\n <span class=\"md-bar-chart__loading-text\">{this.loadingLabel}</span>\n </slot>\n </slot>\n </div>\n )}\n\n {/* Drag-to-zoom band — purely visual, so it never eats pointer events. */}\n {this.dragBand && Math.abs(this.dragBand.x2 - this.dragBand.x1) > 1 && (\n <div\n class=\"md-bar-chart__zoom-band\"\n part=\"zoom-band\"\n style={this.zoomBandStyle()}\n ></div>\n )}\n\n {this.zoomSliderOn && this.renderZoomSlider()}\n\n <footer class=\"md-bar-chart__footer\" part=\"footer\"><slot name=\"footer\"></slot></footer>\n <div class=\"md-bar-chart__a11y-table\" ref={el => this.bindA11yTableHost(el as HTMLDivElement)}></div>\n\n {/* Narrates the keyboard cursor, politely. */}\n <div class=\"md-bar-chart__live\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {this.announcement}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as t,c as e,h as s,H as a,a as i}from"./p-DTaX19_O.js";import{t as r}from"./p-DYBUr7K_.js";const o=()=>`:host{--_size:var(--md-step-indicator-size, max(24px, calc(32px + var(--md-sys-density-scale, 0) * 2px)));--_indicator-h:var(--_size);--_indicator-ring:var(--md-step-indicator-ring, max(4px, calc(8px + var(--md-sys-density-scale, 0) * 1px)));--_color:var(--md-step-indicator-color, var(--md-sys-color-surface-container-highest, #E6E0E9));--_text:var(--md-step-indicator-text, var(--md-sys-color-on-surface-variant, #49454F));--_active-color:var(--md-step-active-color, var(--md-sys-color-primary, #6750A4));--_active-text:var(--md-step-active-text, var(--md-sys-color-on-primary, #FFFFFF));--_active-halo:var(--md-step-active-halo-color, var(--md-sys-color-primary, #6750A4));--_completed-color:var(--md-step-completed-color, var(--md-sys-color-primary, #6750A4));--_completed-text:var(--md-step-completed-text, var(--md-sys-color-on-primary, #FFFFFF));--_error-color:var(--md-step-error-color, var(--md-sys-color-error, #B3261E));--_error-text:var(--md-step-error-text, var(--md-sys-color-on-error, #FFFFFF));--_connector:var(--md-step-connector-color, var(--md-sys-color-outline-variant, #CAC4D0));--_connector-filled:var(--md-step-connector-filled-color, var(--md-sys-color-primary, #6750A4));--_connector-thickness:var(--md-step-connector-thickness, max(2px, calc(4px + var(--md-sys-density-scale, 0) * 0.5px)));--_label-color:var(--md-step-label-color, var(--md-sys-color-on-surface-variant, #49454F));--_label-active-color:var(--md-step-label-active-color, var(--md-sys-color-on-surface, #1C1B1F));--_description-color:var(--md-step-description-color, var(--md-sys-color-on-surface-variant, #49454F));--_state-layer-color:var(--md-step-state-layer-color, var(--md-sys-color-on-surface, #1C1B1F));--_spring-duration:var(--md-sys-motion-spring-spatial-default-duration, 500ms);--_spring-easing:var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1.00));--_state-duration:var(--md-sys-motion-spring-effects-default-duration, 200ms);--_state-easing:var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.80, 0.34, 1.00));--_expand-duration:var(--md-step-expand-duration, var(--md-sys-motion-spring-spatial-default-duration, 500ms));--_expand-easing:var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1.00));--_collapse-duration:var(--md-step-collapse-duration, var(--md-sys-motion-duration-short4, 200ms));--_collapse-easing:var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15));--_connector-duration:var(--md-step-connector-duration, var(--md-sys-motion-duration-medium3, 350ms));--_connector-easing:linear;--_active-halo-size:3px;display:flex;box-sizing:border-box;position:relative;font-family:var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif);animation:md-step-enter var(--md-sys-motion-spring-effects-slow-duration, 300ms) var(--_state-easing) backwards;animation-delay:calc(var(--md-step-idx, 0) * 40ms)}@keyframes md-step-enter{from{opacity:0}}:host(.md-step--indicator-dot){--_indicator-h:10px;--_color:var(--md-step-indicator-color, var(--md-sys-color-outline, #79747E))}:host(.md-step--horizontal){--_indicator-pad:max(0px, calc(4px + var(--md-sys-density-scale, 0) * 1px));--_connector-gap:max(4px, calc(10px + var(--md-sys-density-scale, 0) * 1px));flex:1 1 0;min-inline-size:0;justify-content:center;align-items:flex-start}:host(.md-step--horizontal.md-step--panel-step){display:contents}:host(.md-step--horizontal.md-step--panel-step) .md-step__header{grid-row:1;display:flex;flex:1 1 0;min-inline-size:0;justify-content:center;align-items:flex-start;position:relative}:host(.md-step--horizontal.md-step--panel-step) .md-step__content{grid-row:2;grid-column:1 / -1}:host(.md-step--vertical){flex:initial;flex-direction:row;align-items:flex-start;flex-wrap:wrap;--_connector-gap:6px;padding-block-end:var(--md-sys-spacing-inset-lg, 16px)}:host(.md-step--vertical.md-step--last){padding-block-end:0}.md-step__inner{position:relative;display:inline-flex;align-items:center;gap:var(--md-sys-spacing-gap-md, 12px);padding:0;background:transparent;border:none;cursor:pointer;text-align:start;color:inherit;font:inherit;-webkit-tap-highlight-color:transparent}:host(.md-step--horizontal) .md-step__inner{flex-direction:column;align-items:center;gap:max(2px, calc(6px + var(--md-sys-density-scale, 0) * 1px));padding-block-start:var(--_indicator-pad);padding-inline:var(--md-sys-spacing-inset-sm, 8px);max-inline-size:100%;min-inline-size:0;z-index:1}:host(.md-step--vertical) .md-step__inner{padding-inline-start:8px;z-index:1}.md-step__indicator{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--_indicator-h) + 2 * var(--_indicator-ring));block-size:calc(var(--_indicator-h) + 2 * var(--_indicator-ring));border-radius:50%;flex-shrink:0;color:var(--_state-layer-color)}.md-step__indicator md-ripple{border-radius:50%}.md-step__state-layer{position:absolute;inset:0;border-radius:50%;background-color:var(--_state-layer-color);opacity:0;pointer-events:none;transition:opacity var(--_state-duration) var(--_state-easing)}.md-step__inner:hover:not([aria-disabled="true"]) .md-step__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}.md-step__inner:focus-visible .md-step__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}.md-step__inner:active:not([aria-disabled="true"]) .md-step__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}.md-step__inner:focus-visible{outline:none}.md-step__inner:focus-visible .md-step__indicator{box-shadow:0 0 0 2px var(--md-sys-color-surface, #FEF7FF), 0 0 0 5px var(--md-sys-color-secondary, #625B71)}:host(.md-step--disabled) .md-step__inner{cursor:not-allowed}:host(.md-step--disabled) .md-step__indicator{opacity:0.38}:host(.md-step--disabled) md-ripple,:host(.md-step--disabled) .md-step__state-layer{display:none}.md-step__bubble{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_size);block-size:var(--_size);border-radius:var(--md-sys-shape-corner-full, 9999px);background-color:var(--_color);color:var(--_text);font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-label-large-font-size, 14px);font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:var(--md-sys-typescale-label-large-line-height, 20px);flex-shrink:0;transition:background-color var(--_state-duration) var(--_state-easing), color var(--_state-duration) var(--_state-easing), transform var(--_spring-duration) var(--_spring-easing), box-shadow var(--_spring-duration) var(--_spring-easing)}.md-step__bubble .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:calc(var(--_size) * 0.56);line-height:1;font-weight:normal;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 24}:host(.md-step--active) .md-step__bubble .material-symbols-outlined,:host(.md-step--completed) .md-step__bubble .material-symbols-outlined,:host(.md-step--error) .md-step__bubble .material-symbols-outlined{font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}@keyframes md-step-glyph-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.18);opacity:1}100%{transform:scale(1);opacity:1}}:host(.md-step--completed) .md-step__bubble .material-symbols-outlined,:host(.md-step--error) .md-step__bubble .material-symbols-outlined{animation:md-step-glyph-in var(--_spring-duration) var(--_spring-easing) both}:host(.md-step--active) .md-step__bubble{background-color:var(--_active-color);color:var(--_active-text);transform:scale(1.12);box-shadow:0 0 0 var(--_active-halo-size) color-mix(in srgb, var(--_active-halo) 14%, transparent)}:host(.md-step--completed) .md-step__bubble{background-color:var(--_completed-color);color:var(--_completed-text)}:host(.md-step--error) .md-step__bubble{background-color:var(--_error-color);color:var(--_error-text);animation:md-step-error-pulse var(--md-sys-motion-duration-medium2, 300ms) var(--_state-easing) both}@keyframes md-step-error-pulse{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1)}}.md-step__dot{display:inline-block;inline-size:var(--_indicator-h);block-size:var(--_indicator-h);border-radius:var(--md-sys-shape-corner-full, 9999px);background-color:var(--_color);flex-shrink:0;transition:background-color var(--_state-duration) var(--_state-easing), box-shadow var(--_spring-duration) var(--_spring-easing), transform var(--_spring-duration) var(--_spring-easing)}:host(.md-step--active) .md-step__dot{background-color:var(--_active-color);transform:scale(1.4);box-shadow:0 0 0 var(--_active-halo-size) color-mix(in srgb, var(--_active-halo) 18%, transparent)}:host(.md-step--completed) .md-step__dot{background-color:var(--_completed-color)}:host(.md-step--error) .md-step__dot{background-color:var(--_error-color)}.md-step__text{display:flex;flex-direction:column;gap:2px;min-inline-size:0}:host(.md-step--horizontal) .md-step__text{align-items:center;text-align:center;max-inline-size:100%}.md-step__label{color:var(--_label-color);font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:max(11px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));transition:color var(--_state-duration) var(--_state-easing), font-variation-settings var(--_state-duration) var(--_state-easing)}:host(.md-step--horizontal) .md-step__label{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}:host(.md-step--active) .md-step__label{color:var(--_label-active-color);font-weight:600;font-variation-settings:'wght' 600}:host(.md-step--error) .md-step__label{color:var(--_error-color)}:host(.md-step--disabled) .md-step__text{opacity:0.38}.md-step__optional,.md-step__description{color:var(--_description-color);font-family:var(--md-sys-typescale-body-small-font-family, Roboto, sans-serif);font-size:max(10px, calc(12px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-body-small-font-weight, 400);line-height:max(14px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px))}.md-step__optional{font-style:italic}:host(.md-step--error) .md-step__description{color:var(--_error-color)}.md-step__connector{position:relative;flex:1;align-self:center;background-color:var(--_connector);overflow:hidden;border-radius:var(--md-sys-shape-corner-full, 9999px)}.md-step__connector::after{content:'';position:absolute;inset:0;background-color:var(--_connector-filled);border-radius:inherit;transform-origin:left center;transform:scaleX(0);transition:transform var(--_connector-duration) var(--_connector-easing)}.md-step__connector--filled::after{transform:scaleX(1)}:host([dir="rtl"]) .md-step__connector::after,:host-context([dir="rtl"]) .md-step__connector::after{transform-origin:right center}:host(.md-step--horizontal) .md-step__connector--trailing{position:absolute;inset-block-start:calc(var(--_indicator-pad) + var(--_indicator-ring) + var(--_indicator-h) / 2);transform:translateY(-50%);block-size:var(--_connector-thickness);inset-inline-start:calc(50% + var(--_indicator-h) / 2 + var(--_connector-gap));inline-size:calc(100% - var(--_indicator-h) - 2 * var(--_connector-gap));flex:none;align-self:auto;z-index:0}:host(.md-step--vertical) .md-step__connector{position:absolute;flex:none;align-self:auto;z-index:0;inline-size:var(--_connector-thickness);inset-inline-start:calc(8px + var(--_indicator-ring) + (var(--_indicator-h) - var(--_connector-thickness)) / 2)}:host(.md-step--vertical) .md-step__connector--leading{display:none}:host(.md-step--vertical) .md-step__connector--trailing{inset-block-start:calc(var(--_indicator-ring) + var(--_indicator-h) + var(--_connector-gap));inset-block-end:calc(var(--_connector-gap) - var(--_indicator-ring))}:host(.md-step--vertical) .md-step__connector::after{transform-origin:center top;transform:scaleY(0)}:host(.md-step--vertical) .md-step__connector--filled::after{transform:scaleY(1)}.md-step__content{flex:1 1 100%;display:grid;grid-template-rows:0fr;opacity:0;visibility:hidden;margin-inline-start:calc(8px + var(--_indicator-h) + 2 * var(--_indicator-ring) + var(--md-sys-spacing-gap-md, 12px));color:var(--md-sys-color-on-surface, #1C1B1F);transition:grid-template-rows var(--_collapse-duration) var(--_collapse-easing), opacity var(--_collapse-duration) var(--_collapse-easing), visibility 0s linear var(--_collapse-duration)}.md-step__content--open{grid-template-rows:1fr;opacity:1;visibility:visible;transition:grid-template-rows var(--_expand-duration) var(--_expand-easing), opacity var(--_state-duration) var(--_state-easing), visibility 0s}.md-step__content-sizer{min-block-size:0;overflow:hidden}.md-step__content-inner{padding-block-start:var(--md-sys-spacing-inset-xs, 4px);padding-block-end:var(--md-sys-spacing-inset-lg, 16px)}.md-step__content--lazy{display:block;grid-template-rows:none;opacity:1;visibility:visible;transition:none;animation:md-step-content-enter var(--_expand-duration) var(--_expand-easing) both}.md-step__content--lazy .md-step__content-sizer{overflow:visible}@keyframes md-step-content-enter{from{opacity:0;transform:translateY(-6px)}}.md-step__actions{display:flex;gap:var(--md-sys-spacing-gap-sm, 8px);margin-block-start:var(--md-sys-spacing-gap-lg, 16px)}@media (max-width: 599px){:host(.md-step--horizontal){--_size:var(--md-step-indicator-size, 28px);--_connector-gap:8px}:host(.md-step--horizontal) .md-step__inner{gap:var(--md-sys-spacing-gap-xs, 4px);padding-inline:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-step--horizontal) .md-step__label{font-size:var(--md-sys-typescale-label-medium-font-size, 12px);line-height:var(--md-sys-typescale-label-medium-line-height, 16px)}:host(.md-step--horizontal) .md-step__optional,:host(.md-step--horizontal) .md-step__description{display:none}}@media (prefers-reduced-motion: reduce){:host{animation:none !important}.md-step__bubble,.md-step__dot,.md-step__connector,.md-step__connector::after,.md-step__state-layer,.md-step__label,.md-step__content,.md-step__bubble .material-symbols-outlined{transition-duration:0.01ms !important;transition-delay:0s !important;animation:none !important}:host(.md-step--active) .md-step__bubble,:host(.md-step--active) .md-step__dot{transform:none;box-shadow:0 0 0 3px color-mix(in srgb, var(--_active-halo) 25%, transparent)}}@media (forced-colors: active){.md-step__bubble,.md-step__dot{background-color:Canvas;border:2px solid CanvasText;forced-color-adjust:none}:host(.md-step--active) .md-step__bubble,:host(.md-step--completed) .md-step__bubble{background-color:Highlight;color:HighlightText}.md-step__connector{background-color:GrayText;forced-color-adjust:none}.md-step__connector::after{background-color:Highlight}.md-step__state-layer{display:none}.md-step__inner:focus-visible .md-step__indicator{box-shadow:0 0 0 3px Highlight}}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;const n=class{constructor(s){t(this,s);this.mdStepClick=e(this,"mdStepClick",5);this.mdStepNext=e(this,"mdStepNext",5);this.mdStepBack=e(this,"mdStepBack",5);this.label="";this.description="";this.completed=false;this.active=false;this.error=false;this.errorText="";this.disabled=false;this.optional=false;this.editable=false;this.icon="";this.completedIcon="check";this.errorIcon="priority_high";this.hideActions=false;this.density=0;this.hasSlottedContent=false;this.handleClick=t=>{if(this.effectivelyDisabled)return;t.preventDefault();this.mdStepClick.emit({index:this.index})};this.handleKeyDown=t=>{if(this.effectivelyDisabled)return;if(t.key==="Enter"||t.key===" "){t.preventDefault();r(this.el);this.mdStepClick.emit({index:this.index})}};this.emitNext=()=>this.mdStepNext.emit({index:this.index});this.emitBack=()=>this.mdStepBack.emit({index:this.index})}attr(t,e=""){const s=this.el.getAttribute(t);return s!=null&&s!==""?s:e}get index(){return Number(this.attr("data-index","0"))}get total(){return Number(this.attr("data-total","0"))}get activeIndex(){return Number(this.attr("data-active","0"))}get position(){return this.el.getAttribute("data-position")??"first"}get orientation(){return this.el.getAttribute("data-orientation")??"horizontal"}get indicatorKind(){return this.el.getAttribute("data-indicator")??"numbered"}get linearMode(){return this.el.getAttribute("data-mode")==="linear"}connectedCallback(){this.computeSlottedContent();if(typeof MutationObserver!=="undefined"){this.contentObserver=new MutationObserver((()=>this.computeSlottedContent()));this.contentObserver.observe(this.el,{childList:true})}}disconnectedCallback(){this.contentObserver?.disconnect();this.contentObserver=undefined}computeSlottedContent(){this.hasSlottedContent=Array.from(this.el.childNodes).some((t=>t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.TEXT_NODE&&(t.textContent??"").trim()!==""))}stepSiblings(){const t=this.el.parentElement;if(!t)return[];return Array.from(t.children).filter((t=>t.tagName.toLowerCase()==="md-step"))}allPriorPassable(){const t=this.stepSiblings();for(let e=0;e<this.index;e++){const s=t[e];if(!s?.completed&&!s?.optional)return false}return true}get reachable(){if(!this.linearMode)return true;return this.index<=this.activeIndex||this.completed||this.allPriorPassable()}get effectivelyDisabled(){return this.disabled||!this.reachable}onInternalMdClick(t){if(t.target===this.el)t.stopPropagation()}glyph(t){return s("span",{class:"md-step__bubble",part:"bubble","aria-hidden":"true"},s("span",{class:"material-symbols-outlined"},t))}renderIndicator(){if(this.indicatorKind==="dot"){return s("span",{class:"md-step__dot",part:"dot","aria-hidden":"true"})}if(this.error)return this.glyph(this.errorIcon);if(this.icon)return this.glyph(this.icon);if(this.completed)return this.glyph(this.editable?"edit":this.completedIcon);return s("span",{class:"md-step__bubble",part:"bubble","aria-hidden":"true"},this.index+1)}composeA11yLabel(){if(this.accessibleName?.trim())return this.accessibleName;const t=(t,e)=>this.attr(t,e);let e=`${t("data-step-word","Step")} ${this.index+1} ${t("data-of-word","of")} ${this.total}`;if(this.label)e+=`: ${this.label}`;if(this.optional)e+=`, ${t("data-optional-word","optional")}`;if(this.completed)e+=`, ${t("data-completed-word","completed")}`;if(this.active)e+=`, ${t("data-current-word","current")}`;if(this.error)e+=`, ${t("data-error-word","error")}${this.errorText?`: ${this.errorText}`:""}`;return e}render(){const t=this.position==="first";const e=this.position==="last";const i=this.orientation==="vertical";const r=this.effectivelyDisabled;const o=this.error&&this.errorText?this.errorText:this.description;const n=this.optional?this.attr("data-optional-word","Optional"):"";const d=this.attr("data-nav","true")!=="false"&&!this.hideActions;const l=this.attr("data-loading","false")==="true";const c=this.attr("data-next-disabled","false")==="true";const p=this.attr("data-lazy","false")==="true";const m=this.attr("data-panel-mode","shared");const _=i?this.hasSlottedContent||d:m==="step"&&this.hasSlottedContent;const h=_&&(!p||this.active);const v=[!t&&i&&s("span",{key:"b9c426379a0b93f5e11228abcf7e20b4e7747b55",class:{"md-step__connector":true,"md-step__connector--leading":true,"md-step__connector--filled":this.index<=this.activeIndex},part:"connector connector-leading","aria-hidden":"true"}),s("div",{key:"a1781fd31e21f529e0ae2fc2c89fb2d316ee4e95",class:"md-step__inner",part:"inner",tabindex:r?-1:0,role:"button","aria-label":this.composeA11yLabel(),"aria-disabled":r?"true":undefined,"aria-current":this.active?"step":undefined,"aria-expanded":_?this.active?"true":"false":undefined,"aria-controls":h?"md-step-panel":undefined,onClick:this.handleClick,onKeyDown:this.handleKeyDown},s("span",{key:"68e747e207d64017daf2f5a663a82f1313989ce7",class:"md-step__indicator",part:"indicator"},s("md-ripple",{key:"410fae4067b4580e504213a3c9ba55f0b7b426ef",disabled:r}),s("span",{key:"d9bc7670f045f59349ba02875da18207fb82960c",class:"md-step__state-layer",part:"state-layer","aria-hidden":"true"}),this.renderIndicator()),(this.label||o||n)&&s("span",{key:"cd9a62c315c5d9f52b004997c4c43cdbdcf91153",class:"md-step__text",part:"text"},this.label&&s("span",{key:"c9dbe5b735dca4223e7767552450032ed7ae3e25",class:"md-step__label",part:"label"},this.label),n&&s("span",{key:"cc8b6e152d85e5f89cff9fd50c13c46b8240e298",class:"md-step__optional",part:"optional"},n),o&&s("span",{key:"487a0ab33b8cb7d7460a90862bb28189d968d90d",class:"md-step__description",part:"description"},o))),!e&&s("span",{key:"a83514bed44e127955c50fb60e85806fa1f7f625",class:{"md-step__connector":true,"md-step__connector--trailing":true,"md-step__connector--filled":this.index<this.activeIndex},part:"connector connector-trailing","aria-hidden":"true"})];const b=!i&&_;return s(a,{key:"ca97c2c2fc69d2133107e123bd711c630b7defa3",class:{"md-step":true,[`md-step--${this.orientation}`]:true,[`md-step--indicator-${this.indicatorKind}`]:true,"md-step--active":this.active,"md-step--completed":this.completed,"md-step--error":this.error,"md-step--optional":this.optional,"md-step--editable":this.editable,"md-step--disabled":r,"md-step--first":t,"md-step--last":e,"md-step--panel-step":!i&&_},role:"listitem","aria-current":this.active?"step":undefined,"aria-disabled":r?"true":undefined},b?s("div",{class:"md-step__header"},v):v,h&&s("div",{key:"c426594775bec461d2c8625405bc499b9cc57e1c",id:"md-step-panel",class:{"md-step__content":true,"md-step__content--open":this.active,"md-step__content--lazy":p},part:"content",role:"region","aria-label":this.label||this.composeA11yLabel()},s("div",{key:"0824ab55aa7df5de067d243d56b8ab5dc650c845",class:"md-step__content-sizer"},s("div",{key:"4b8dd2c44d3a5ef871310745bdf3494636a444b6",class:"md-step__content-inner"},s("slot",{key:"24ac93aef3dd171fc921762535ac8c7ccde9e7f6"}),d&&i&&s("div",{key:"9e2e763ee01da8b936102dbd028c538dca347370",class:"md-step__actions",part:"actions"},s("md-button",{key:"808cfb7c0307404baa4714ad7a0968ea023ace21",variant:"text",size:"sm",disabled:t||l,onClick:this.emitBack},this.attr("data-back-label","Back")),s("md-button",{key:"66b958c5174cf1044a0b0e174146918cb061a675",variant:"filled",size:"sm",loading:l,disabled:c||l,onClick:this.emitNext},e?this.attr("data-finish-label","Finish"):this.attr("data-next-label","Continue")))))))}get el(){return i(this)}};n.style=o();export{n as md_step};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as t,c as e,h as s,H as a,g as i}from"./p-WmvQpZnM.js";import{t as r}from"./p-DYBUr7K_.js";const o=()=>`:host{--_size:var(--md-step-indicator-size, max(24px, calc(32px + var(--md-sys-density-scale, 0) * 2px)));--_indicator-h:var(--_size);--_indicator-ring:var(--md-step-indicator-ring, max(4px, calc(8px + var(--md-sys-density-scale, 0) * 1px)));--_color:var(--md-step-indicator-color, var(--md-sys-color-surface-container-highest, #E6E0E9));--_text:var(--md-step-indicator-text, var(--md-sys-color-on-surface-variant, #49454F));--_active-color:var(--md-step-active-color, var(--md-sys-color-primary, #6750A4));--_active-text:var(--md-step-active-text, var(--md-sys-color-on-primary, #FFFFFF));--_active-halo:var(--md-step-active-halo-color, var(--md-sys-color-primary, #6750A4));--_completed-color:var(--md-step-completed-color, var(--md-sys-color-primary, #6750A4));--_completed-text:var(--md-step-completed-text, var(--md-sys-color-on-primary, #FFFFFF));--_error-color:var(--md-step-error-color, var(--md-sys-color-error, #B3261E));--_error-text:var(--md-step-error-text, var(--md-sys-color-on-error, #FFFFFF));--_connector:var(--md-step-connector-color, var(--md-sys-color-outline-variant, #CAC4D0));--_connector-filled:var(--md-step-connector-filled-color, var(--md-sys-color-primary, #6750A4));--_connector-thickness:var(--md-step-connector-thickness, max(2px, calc(4px + var(--md-sys-density-scale, 0) * 0.5px)));--_label-color:var(--md-step-label-color, var(--md-sys-color-on-surface-variant, #49454F));--_label-active-color:var(--md-step-label-active-color, var(--md-sys-color-on-surface, #1C1B1F));--_description-color:var(--md-step-description-color, var(--md-sys-color-on-surface-variant, #49454F));--_state-layer-color:var(--md-step-state-layer-color, var(--md-sys-color-on-surface, #1C1B1F));--_spring-duration:var(--md-sys-motion-spring-spatial-default-duration, 500ms);--_spring-easing:var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1.00));--_state-duration:var(--md-sys-motion-spring-effects-default-duration, 200ms);--_state-easing:var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.80, 0.34, 1.00));--_expand-duration:var(--md-step-expand-duration, var(--md-sys-motion-spring-spatial-default-duration, 500ms));--_expand-easing:var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1.00));--_collapse-duration:var(--md-step-collapse-duration, var(--md-sys-motion-duration-short4, 200ms));--_collapse-easing:var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15));--_connector-duration:var(--md-step-connector-duration, var(--md-sys-motion-duration-medium3, 350ms));--_connector-easing:linear;--_active-halo-size:3px;display:flex;box-sizing:border-box;position:relative;font-family:var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif);animation:md-step-enter var(--md-sys-motion-spring-effects-slow-duration, 300ms) var(--_state-easing) backwards;animation-delay:calc(var(--md-step-idx, 0) * 40ms)}@keyframes md-step-enter{from{opacity:0}}:host(.md-step--indicator-dot){--_indicator-h:10px;--_color:var(--md-step-indicator-color, var(--md-sys-color-outline, #79747E))}:host(.md-step--horizontal){--_indicator-pad:max(0px, calc(4px + var(--md-sys-density-scale, 0) * 1px));--_connector-gap:max(4px, calc(10px + var(--md-sys-density-scale, 0) * 1px));flex:1 1 0;min-inline-size:0;justify-content:center;align-items:flex-start}:host(.md-step--horizontal.md-step--panel-step){display:contents}:host(.md-step--horizontal.md-step--panel-step) .md-step__header{grid-row:1;display:flex;flex:1 1 0;min-inline-size:0;justify-content:center;align-items:flex-start;position:relative}:host(.md-step--horizontal.md-step--panel-step) .md-step__content{grid-row:2;grid-column:1 / -1}:host(.md-step--vertical){flex:initial;flex-direction:row;align-items:flex-start;flex-wrap:wrap;--_connector-gap:6px;padding-block-end:var(--md-sys-spacing-inset-lg, 16px)}:host(.md-step--vertical.md-step--last){padding-block-end:0}.md-step__inner{position:relative;display:inline-flex;align-items:center;gap:var(--md-sys-spacing-gap-md, 12px);padding:0;background:transparent;border:none;cursor:pointer;text-align:start;color:inherit;font:inherit;-webkit-tap-highlight-color:transparent}:host(.md-step--horizontal) .md-step__inner{flex-direction:column;align-items:center;gap:max(2px, calc(6px + var(--md-sys-density-scale, 0) * 1px));padding-block-start:var(--_indicator-pad);padding-inline:var(--md-sys-spacing-inset-sm, 8px);max-inline-size:100%;min-inline-size:0;z-index:1}:host(.md-step--vertical) .md-step__inner{padding-inline-start:8px;z-index:1}.md-step__indicator{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--_indicator-h) + 2 * var(--_indicator-ring));block-size:calc(var(--_indicator-h) + 2 * var(--_indicator-ring));border-radius:50%;flex-shrink:0;color:var(--_state-layer-color)}.md-step__indicator md-ripple{border-radius:50%}.md-step__state-layer{position:absolute;inset:0;border-radius:50%;background-color:var(--_state-layer-color);opacity:0;pointer-events:none;transition:opacity var(--_state-duration) var(--_state-easing)}.md-step__inner:hover:not([aria-disabled="true"]) .md-step__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}.md-step__inner:focus-visible .md-step__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}.md-step__inner:active:not([aria-disabled="true"]) .md-step__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}.md-step__inner:focus-visible{outline:none}.md-step__inner:focus-visible .md-step__indicator{box-shadow:0 0 0 2px var(--md-sys-color-surface, #FEF7FF), 0 0 0 5px var(--md-sys-color-secondary, #625B71)}:host(.md-step--disabled) .md-step__inner{cursor:not-allowed}:host(.md-step--disabled) .md-step__indicator{opacity:0.38}:host(.md-step--disabled) md-ripple,:host(.md-step--disabled) .md-step__state-layer{display:none}.md-step__bubble{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_size);block-size:var(--_size);border-radius:var(--md-sys-shape-corner-full, 9999px);background-color:var(--_color);color:var(--_text);font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-label-large-font-size, 14px);font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:var(--md-sys-typescale-label-large-line-height, 20px);flex-shrink:0;transition:background-color var(--_state-duration) var(--_state-easing), color var(--_state-duration) var(--_state-easing), transform var(--_spring-duration) var(--_spring-easing), box-shadow var(--_spring-duration) var(--_spring-easing)}.md-step__bubble .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:calc(var(--_size) * 0.56);line-height:1;font-weight:normal;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 24}:host(.md-step--active) .md-step__bubble .material-symbols-outlined,:host(.md-step--completed) .md-step__bubble .material-symbols-outlined,:host(.md-step--error) .md-step__bubble .material-symbols-outlined{font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}@keyframes md-step-glyph-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.18);opacity:1}100%{transform:scale(1);opacity:1}}:host(.md-step--completed) .md-step__bubble .material-symbols-outlined,:host(.md-step--error) .md-step__bubble .material-symbols-outlined{animation:md-step-glyph-in var(--_spring-duration) var(--_spring-easing) both}:host(.md-step--active) .md-step__bubble{background-color:var(--_active-color);color:var(--_active-text);transform:scale(1.12);box-shadow:0 0 0 var(--_active-halo-size) color-mix(in srgb, var(--_active-halo) 14%, transparent)}:host(.md-step--completed) .md-step__bubble{background-color:var(--_completed-color);color:var(--_completed-text)}:host(.md-step--error) .md-step__bubble{background-color:var(--_error-color);color:var(--_error-text);animation:md-step-error-pulse var(--md-sys-motion-duration-medium2, 300ms) var(--_state-easing) both}@keyframes md-step-error-pulse{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1)}}.md-step__dot{display:inline-block;inline-size:var(--_indicator-h);block-size:var(--_indicator-h);border-radius:var(--md-sys-shape-corner-full, 9999px);background-color:var(--_color);flex-shrink:0;transition:background-color var(--_state-duration) var(--_state-easing), box-shadow var(--_spring-duration) var(--_spring-easing), transform var(--_spring-duration) var(--_spring-easing)}:host(.md-step--active) .md-step__dot{background-color:var(--_active-color);transform:scale(1.4);box-shadow:0 0 0 var(--_active-halo-size) color-mix(in srgb, var(--_active-halo) 18%, transparent)}:host(.md-step--completed) .md-step__dot{background-color:var(--_completed-color)}:host(.md-step--error) .md-step__dot{background-color:var(--_error-color)}.md-step__text{display:flex;flex-direction:column;gap:2px;min-inline-size:0}:host(.md-step--horizontal) .md-step__text{align-items:center;text-align:center;max-inline-size:100%}.md-step__label{color:var(--_label-color);font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:max(11px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));transition:color var(--_state-duration) var(--_state-easing), font-variation-settings var(--_state-duration) var(--_state-easing)}:host(.md-step--horizontal) .md-step__label{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}:host(.md-step--active) .md-step__label{color:var(--_label-active-color);font-weight:600;font-variation-settings:'wght' 600}:host(.md-step--error) .md-step__label{color:var(--_error-color)}:host(.md-step--disabled) .md-step__text{opacity:0.38}.md-step__optional,.md-step__description{color:var(--_description-color);font-family:var(--md-sys-typescale-body-small-font-family, Roboto, sans-serif);font-size:max(10px, calc(12px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-body-small-font-weight, 400);line-height:max(14px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px))}.md-step__optional{font-style:italic}:host(.md-step--error) .md-step__description{color:var(--_error-color)}.md-step__connector{position:relative;flex:1;align-self:center;background-color:var(--_connector);overflow:hidden;border-radius:var(--md-sys-shape-corner-full, 9999px)}.md-step__connector::after{content:'';position:absolute;inset:0;background-color:var(--_connector-filled);border-radius:inherit;transform-origin:left center;transform:scaleX(0);transition:transform var(--_connector-duration) var(--_connector-easing)}.md-step__connector--filled::after{transform:scaleX(1)}:host([dir="rtl"]) .md-step__connector::after,:host-context([dir="rtl"]) .md-step__connector::after{transform-origin:right center}:host(.md-step--horizontal) .md-step__connector--trailing{position:absolute;inset-block-start:calc(var(--_indicator-pad) + var(--_indicator-ring) + var(--_indicator-h) / 2);transform:translateY(-50%);block-size:var(--_connector-thickness);inset-inline-start:calc(50% + var(--_indicator-h) / 2 + var(--_connector-gap));inline-size:calc(100% - var(--_indicator-h) - 2 * var(--_connector-gap));flex:none;align-self:auto;z-index:0}:host(.md-step--vertical) .md-step__connector{position:absolute;flex:none;align-self:auto;z-index:0;inline-size:var(--_connector-thickness);inset-inline-start:calc(8px + var(--_indicator-ring) + (var(--_indicator-h) - var(--_connector-thickness)) / 2)}:host(.md-step--vertical) .md-step__connector--leading{display:none}:host(.md-step--vertical) .md-step__connector--trailing{inset-block-start:calc(var(--_indicator-ring) + var(--_indicator-h) + var(--_connector-gap));inset-block-end:calc(var(--_connector-gap) - var(--_indicator-ring))}:host(.md-step--vertical) .md-step__connector::after{transform-origin:center top;transform:scaleY(0)}:host(.md-step--vertical) .md-step__connector--filled::after{transform:scaleY(1)}.md-step__content{flex:1 1 100%;display:grid;grid-template-rows:0fr;opacity:0;visibility:hidden;margin-inline-start:calc(8px + var(--_indicator-h) + 2 * var(--_indicator-ring) + var(--md-sys-spacing-gap-md, 12px));color:var(--md-sys-color-on-surface, #1C1B1F);transition:grid-template-rows var(--_collapse-duration) var(--_collapse-easing), opacity var(--_collapse-duration) var(--_collapse-easing), visibility 0s linear var(--_collapse-duration)}.md-step__content--open{grid-template-rows:1fr;opacity:1;visibility:visible;transition:grid-template-rows var(--_expand-duration) var(--_expand-easing), opacity var(--_state-duration) var(--_state-easing), visibility 0s}.md-step__content-sizer{min-block-size:0;overflow:hidden}.md-step__content-inner{padding-block-start:var(--md-sys-spacing-inset-xs, 4px);padding-block-end:var(--md-sys-spacing-inset-lg, 16px)}.md-step__content--lazy{display:block;grid-template-rows:none;opacity:1;visibility:visible;transition:none;animation:md-step-content-enter var(--_expand-duration) var(--_expand-easing) both}.md-step__content--lazy .md-step__content-sizer{overflow:visible}@keyframes md-step-content-enter{from{opacity:0;transform:translateY(-6px)}}.md-step__actions{display:flex;gap:var(--md-sys-spacing-gap-sm, 8px);margin-block-start:var(--md-sys-spacing-gap-lg, 16px)}@media (max-width: 599px){:host(.md-step--horizontal){--_size:var(--md-step-indicator-size, 28px);--_connector-gap:8px}:host(.md-step--horizontal) .md-step__inner{gap:var(--md-sys-spacing-gap-xs, 4px);padding-inline:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-step--horizontal) .md-step__label{font-size:var(--md-sys-typescale-label-medium-font-size, 12px);line-height:var(--md-sys-typescale-label-medium-line-height, 16px)}:host(.md-step--horizontal) .md-step__optional,:host(.md-step--horizontal) .md-step__description{display:none}}@media (prefers-reduced-motion: reduce){:host{animation:none !important}.md-step__bubble,.md-step__dot,.md-step__connector,.md-step__connector::after,.md-step__state-layer,.md-step__label,.md-step__content,.md-step__bubble .material-symbols-outlined{transition-duration:0.01ms !important;transition-delay:0s !important;animation:none !important}:host(.md-step--active) .md-step__bubble,:host(.md-step--active) .md-step__dot{transform:none;box-shadow:0 0 0 3px color-mix(in srgb, var(--_active-halo) 25%, transparent)}}@media (forced-colors: active){.md-step__bubble,.md-step__dot{background-color:Canvas;border:2px solid CanvasText;forced-color-adjust:none}:host(.md-step--active) .md-step__bubble,:host(.md-step--completed) .md-step__bubble{background-color:Highlight;color:HighlightText}.md-step__connector{background-color:GrayText;forced-color-adjust:none}.md-step__connector::after{background-color:Highlight}.md-step__state-layer{display:none}.md-step__inner:focus-visible .md-step__indicator{box-shadow:0 0 0 3px Highlight}}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;const n=class{constructor(s){t(this,s);this.mdStepClick=e(this,"mdStepClick",5);this.mdStepNext=e(this,"mdStepNext",5);this.mdStepBack=e(this,"mdStepBack",5);this.label="";this.description="";this.completed=false;this.active=false;this.error=false;this.errorText="";this.disabled=false;this.optional=false;this.editable=false;this.icon="";this.completedIcon="check";this.errorIcon="priority_high";this.hideActions=false;this.density=0;this.hasSlottedContent=false;this.handleClick=t=>{if(this.effectivelyDisabled)return;t.preventDefault();this.mdStepClick.emit({index:this.index})};this.handleKeyDown=t=>{if(this.effectivelyDisabled)return;if(t.key==="Enter"||t.key===" "){t.preventDefault();r(this.el);this.mdStepClick.emit({index:this.index})}};this.emitNext=()=>this.mdStepNext.emit({index:this.index});this.emitBack=()=>this.mdStepBack.emit({index:this.index})}attr(t,e=""){const s=this.el.getAttribute(t);return s!=null&&s!==""?s:e}get index(){return Number(this.attr("data-index","0"))}get total(){return Number(this.attr("data-total","0"))}get activeIndex(){return Number(this.attr("data-active","0"))}get position(){return this.el.getAttribute("data-position")??"first"}get orientation(){return this.el.getAttribute("data-orientation")??"horizontal"}get indicatorKind(){return this.el.getAttribute("data-indicator")??"numbered"}get linearMode(){return this.el.getAttribute("data-mode")==="linear"}connectedCallback(){this.computeSlottedContent();if(typeof MutationObserver!=="undefined"){this.contentObserver=new MutationObserver((()=>this.computeSlottedContent()));this.contentObserver.observe(this.el,{childList:true})}}disconnectedCallback(){this.contentObserver?.disconnect();this.contentObserver=undefined}computeSlottedContent(){this.hasSlottedContent=Array.from(this.el.childNodes).some((t=>t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.TEXT_NODE&&(t.textContent??"").trim()!==""))}stepSiblings(){const t=this.el.parentElement;if(!t)return[];return Array.from(t.children).filter((t=>t.tagName.toLowerCase()==="md-step"))}allPriorPassable(){const t=this.stepSiblings();for(let e=0;e<this.index;e++){const s=t[e];if(!s?.completed&&!s?.optional)return false}return true}get reachable(){if(!this.linearMode)return true;return this.index<=this.activeIndex||this.completed||this.allPriorPassable()}get effectivelyDisabled(){return this.disabled||!this.reachable}onInternalMdClick(t){if(t.target===this.el)t.stopPropagation()}glyph(t){return s("span",{class:"md-step__bubble",part:"bubble","aria-hidden":"true"},s("span",{class:"material-symbols-outlined"},t))}renderIndicator(){if(this.indicatorKind==="dot"){return s("span",{class:"md-step__dot",part:"dot","aria-hidden":"true"})}if(this.error)return this.glyph(this.errorIcon);if(this.icon)return this.glyph(this.icon);if(this.completed)return this.glyph(this.editable?"edit":this.completedIcon);return s("span",{class:"md-step__bubble",part:"bubble","aria-hidden":"true"},this.index+1)}composeA11yLabel(){if(this.accessibleName?.trim())return this.accessibleName;const t=(t,e)=>this.attr(t,e);let e=`${t("data-step-word","Step")} ${this.index+1} ${t("data-of-word","of")} ${this.total}`;if(this.label)e+=`: ${this.label}`;if(this.optional)e+=`, ${t("data-optional-word","optional")}`;if(this.completed)e+=`, ${t("data-completed-word","completed")}`;if(this.active)e+=`, ${t("data-current-word","current")}`;if(this.error)e+=`, ${t("data-error-word","error")}${this.errorText?`: ${this.errorText}`:""}`;return e}render(){const t=this.position==="first";const e=this.position==="last";const i=this.orientation==="vertical";const r=this.effectivelyDisabled;const o=this.error&&this.errorText?this.errorText:this.description;const n=this.optional?this.attr("data-optional-word","Optional"):"";const d=this.attr("data-nav","true")!=="false"&&!this.hideActions;const l=this.attr("data-loading","false")==="true";const c=this.attr("data-next-disabled","false")==="true";const p=this.attr("data-lazy","false")==="true";const m=this.attr("data-panel-mode","shared");const _=i?this.hasSlottedContent||d:m==="step"&&this.hasSlottedContent;const h=_&&(!p||this.active);const v=[!t&&i&&s("span",{key:"b9c426379a0b93f5e11228abcf7e20b4e7747b55",class:{"md-step__connector":true,"md-step__connector--leading":true,"md-step__connector--filled":this.index<=this.activeIndex},part:"connector connector-leading","aria-hidden":"true"}),s("div",{key:"a1781fd31e21f529e0ae2fc2c89fb2d316ee4e95",class:"md-step__inner",part:"inner",tabindex:r?-1:0,role:"button","aria-label":this.composeA11yLabel(),"aria-disabled":r?"true":undefined,"aria-current":this.active?"step":undefined,"aria-expanded":_?this.active?"true":"false":undefined,"aria-controls":h?"md-step-panel":undefined,onClick:this.handleClick,onKeyDown:this.handleKeyDown},s("span",{key:"68e747e207d64017daf2f5a663a82f1313989ce7",class:"md-step__indicator",part:"indicator"},s("md-ripple",{key:"410fae4067b4580e504213a3c9ba55f0b7b426ef",disabled:r}),s("span",{key:"d9bc7670f045f59349ba02875da18207fb82960c",class:"md-step__state-layer",part:"state-layer","aria-hidden":"true"}),this.renderIndicator()),(this.label||o||n)&&s("span",{key:"cd9a62c315c5d9f52b004997c4c43cdbdcf91153",class:"md-step__text",part:"text"},this.label&&s("span",{key:"c9dbe5b735dca4223e7767552450032ed7ae3e25",class:"md-step__label",part:"label"},this.label),n&&s("span",{key:"cc8b6e152d85e5f89cff9fd50c13c46b8240e298",class:"md-step__optional",part:"optional"},n),o&&s("span",{key:"487a0ab33b8cb7d7460a90862bb28189d968d90d",class:"md-step__description",part:"description"},o))),!e&&s("span",{key:"a83514bed44e127955c50fb60e85806fa1f7f625",class:{"md-step__connector":true,"md-step__connector--trailing":true,"md-step__connector--filled":this.index<this.activeIndex},part:"connector connector-trailing","aria-hidden":"true"})];const b=!i&&_;return s(a,{key:"ca97c2c2fc69d2133107e123bd711c630b7defa3",class:{"md-step":true,[`md-step--${this.orientation}`]:true,[`md-step--indicator-${this.indicatorKind}`]:true,"md-step--active":this.active,"md-step--completed":this.completed,"md-step--error":this.error,"md-step--optional":this.optional,"md-step--editable":this.editable,"md-step--disabled":r,"md-step--first":t,"md-step--last":e,"md-step--panel-step":!i&&_},role:"listitem","aria-current":this.active?"step":undefined,"aria-disabled":r?"true":undefined},b?s("div",{class:"md-step__header"},v):v,h&&s("div",{key:"c426594775bec461d2c8625405bc499b9cc57e1c",id:"md-step-panel",class:{"md-step__content":true,"md-step__content--open":this.active,"md-step__content--lazy":p},part:"content",role:"region","aria-label":this.label||this.composeA11yLabel()},s("div",{key:"0824ab55aa7df5de067d243d56b8ab5dc650c845",class:"md-step__content-sizer"},s("div",{key:"4b8dd2c44d3a5ef871310745bdf3494636a444b6",class:"md-step__content-inner"},s("slot",{key:"24ac93aef3dd171fc921762535ac8c7ccde9e7f6"}),d&&i&&s("div",{key:"9e2e763ee01da8b936102dbd028c538dca347370",class:"md-step__actions",part:"actions"},s("md-button",{key:"808cfb7c0307404baa4714ad7a0968ea023ace21",variant:"text",size:"sm",disabled:t||l,onClick:this.emitBack},this.attr("data-back-label","Back")),s("md-button",{key:"66b958c5174cf1044a0b0e174146918cb061a675",variant:"filled",size:"sm",loading:l,disabled:c||l,onClick:this.emitNext},e?this.attr("data-finish-label","Finish"):this.attr("data-next-label","Continue")))))))}get el(){return i(this)}};n.style=o();export{n as md_step};
|
|
2
|
+
//# sourceMappingURL=p-1edb5a0d.entry.js.map
|