@awc-ui/core 1.0.0-beta.2 → 1.0.0-beta.4
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/lazy-loading-indicator-CoC-_DMs.js +69 -0
- package/dist/cjs/lazy-loading-indicator-CoC-_DMs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +4 -3
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/md-accordion-item.cjs.entry.js +4 -4
- package/dist/cjs/md-accordion.cjs.entry.js +1 -1
- package/dist/cjs/md-app-bar.cjs.entry.js +2 -2
- package/dist/cjs/md-area-chart.cjs.entry.js +3 -3
- package/dist/cjs/md-autocomplete.cjs.entry.js +6 -5
- package/dist/cjs/md-autocomplete.cjs.entry.js.map +1 -1
- package/dist/cjs/md-avatar_2.cjs.entry.js +4 -4
- package/dist/cjs/md-badge.cjs.entry.js +3 -3
- package/dist/cjs/md-bar-chart.cjs.entry.js +3 -3
- package/dist/cjs/md-bottom-sheet.cjs.entry.js +5 -5
- package/dist/cjs/md-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/md-breadcrumbs.cjs.entry.js +3 -3
- package/dist/cjs/md-button-group.cjs.entry.js +3 -3
- package/dist/cjs/{md-button_7.cjs.entry.js → md-button_6.cjs.entry.js} +14 -39
- package/dist/cjs/md-button_6.cjs.entry.js.map +1 -0
- package/dist/cjs/md-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/md-chip.cjs.entry.js +3 -3
- package/dist/cjs/md-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/md-date-picker.cjs.entry.js +2 -2
- package/dist/cjs/md-dialog.cjs.entry.js +3 -3
- package/dist/cjs/md-divider.cjs.entry.js +3 -3
- package/dist/cjs/md-fab-menu-item.cjs.entry.js +3 -3
- package/dist/cjs/md-fab-menu.cjs.entry.js +3 -3
- package/dist/cjs/md-fab.cjs.entry.js +3 -3
- package/dist/cjs/md-line-chart.cjs.entry.js +3 -3
- package/dist/cjs/md-list-item.cjs.entry.js +4 -4
- package/dist/cjs/md-list.cjs.entry.js +4 -4
- package/dist/cjs/md-loading-indicator-CmzdcYLR.js +33 -0
- package/dist/cjs/md-loading-indicator-CmzdcYLR.js.map +1 -0
- package/dist/cjs/md-loading-indicator.cjs.entry.js +11 -0
- package/dist/cjs/md-loading-indicator.cjs.entry.js.map +1 -0
- package/dist/cjs/md-menu-item-group.cjs.entry.js +1 -1
- package/dist/cjs/md-menu_2.cjs.entry.js +6 -6
- package/dist/cjs/md-meter.cjs.entry.js +1 -1
- package/dist/cjs/md-multi-select.cjs.entry.js +7 -6
- package/dist/cjs/md-multi-select.cjs.entry.js.map +1 -1
- package/dist/cjs/md-navigation-bar.cjs.entry.js +2 -2
- 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 +3 -3
- package/dist/cjs/md-number-field.cjs.entry.js +3 -3
- package/dist/cjs/md-organization-chart.cjs.entry.js +3 -3
- package/dist/cjs/md-otp-field.cjs.entry.js +4 -4
- 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 +8 -7
- package/dist/cjs/md-search.cjs.entry.js.map +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 +2 -2
- package/dist/cjs/md-select.cjs.entry.js +7 -6
- package/dist/cjs/md-select.cjs.entry.js.map +1 -1
- 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 +3 -3
- package/dist/cjs/md-sparkline.cjs.entry.js +3 -3
- package/dist/cjs/md-split-button.cjs.entry.js +1 -1
- package/dist/cjs/md-status-dot.cjs.entry.js +2 -2
- 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 +4 -4
- package/dist/cjs/md-tabs.cjs.entry.js +1 -1
- package/dist/cjs/md-text-field.cjs.entry.js +8 -8
- package/dist/cjs/md-time-picker.cjs.entry.js +2 -2
- package/dist/cjs/md-toolbar.cjs.entry.js +1 -1
- package/dist/cjs/md-transfer-list.cjs.entry.js +2 -2
- package/dist/cjs/md3.cjs.js +4 -3
- 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/collection-manifest.json +1 -1
- package/dist/collection/components/md-accordion-item/md-accordion-item.js +3 -3
- package/dist/collection/components/md-app-bar/md-app-bar.js +1 -1
- package/dist/collection/components/md-area-chart/md-area-chart.js +2 -2
- package/dist/collection/components/md-autocomplete/md-autocomplete.js +4 -3
- package/dist/collection/components/md-autocomplete/md-autocomplete.js.map +1 -1
- package/dist/collection/components/md-avatar/md-avatar.js +2 -2
- package/dist/collection/components/md-badge/md-badge.js +2 -2
- package/dist/collection/components/md-bar-chart/md-bar-chart.js +2 -2
- package/dist/collection/components/md-bottom-sheet/md-bottom-sheet.js +4 -4
- package/dist/collection/components/md-breadcrumbs/md-breadcrumbs.js +2 -2
- package/dist/collection/components/md-button/md-button.js +4 -3
- package/dist/collection/components/md-button/md-button.js.map +1 -1
- package/dist/collection/components/md-button-group/md-button-group.js +2 -2
- package/dist/collection/components/md-card/md-card.js +2 -2
- package/dist/collection/components/md-checkbox/md-checkbox.js +2 -2
- package/dist/collection/components/md-chip/md-chip.js +2 -2
- package/dist/collection/components/md-date-picker/md-date-picker.js +1 -1
- package/dist/collection/components/md-dialog/md-dialog.js +2 -2
- package/dist/collection/components/md-divider/md-divider.js +2 -2
- package/dist/collection/components/md-fab/md-fab.js +2 -2
- package/dist/collection/components/md-fab-menu/md-fab-menu.js +2 -2
- package/dist/collection/components/md-fab-menu-item/md-fab-menu-item.js +2 -2
- package/dist/collection/components/md-icon-button/md-icon-button.js +4 -4
- package/dist/collection/components/md-line-chart/md-line-chart.js +2 -2
- package/dist/collection/components/md-list/md-list.js +3 -3
- package/dist/collection/components/md-list-item/md-list-item.js +3 -3
- package/dist/collection/components/md-loading-indicator/md-loading-indicator.js +2 -2
- package/dist/collection/components/md-menu/md-menu.js +3 -3
- package/dist/collection/components/md-menu-item/md-menu-item.js +2 -2
- package/dist/collection/components/md-multi-select/md-multi-select.js +5 -4
- package/dist/collection/components/md-multi-select/md-multi-select.js.map +1 -1
- package/dist/collection/components/md-navigation-bar/md-navigation-bar.js +1 -1
- package/dist/collection/components/md-navigation-tab/md-navigation-tab.js +2 -2
- package/dist/collection/components/md-number-field/md-number-field.js +2 -2
- package/dist/collection/components/md-organization-chart/md-organization-chart.js +2 -2
- package/dist/collection/components/md-otp-field/md-otp-field.js +3 -3
- package/dist/collection/components/md-ripple/md-ripple.js +1 -1
- package/dist/collection/components/md-search/md-search.js +7 -6
- package/dist/collection/components/md-search/md-search.js.map +1 -1
- package/dist/collection/components/md-select/md-select.js +5 -4
- package/dist/collection/components/md-select/md-select.js.map +1 -1
- package/dist/collection/components/md-select-option/md-select-option.js +1 -1
- package/dist/collection/components/md-slider/md-slider.js +2 -2
- package/dist/collection/components/md-sparkline/md-sparkline.js +2 -2
- package/dist/collection/components/md-status-dot/md-status-dot.js +1 -1
- package/dist/collection/components/md-table/md-table.js +3 -3
- package/dist/collection/components/md-text-field/md-text-field.js +7 -7
- package/dist/collection/components/md-time-picker/md-time-picker.js +1 -1
- package/dist/collection/components/md-tooltip/md-tooltip.js +1 -1
- package/dist/collection/components/md-transfer-list/md-transfer-list.js +1 -1
- package/dist/collection/utils/lazy-loading-indicator.js +62 -0
- package/dist/collection/utils/lazy-loading-indicator.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-autocomplete.js +1 -1
- package/dist/components/md-autocomplete.js.map +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-date-picker.js.map +1 -1
- package/dist/components/md-dialog.js +1 -1
- package/dist/components/md-dialog.js.map +1 -1
- package/dist/components/md-divider.js +1 -1
- package/dist/components/md-divider.js.map +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-line-chart.js.map +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-multi-select.js.map +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-search.js.map +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-snackbar.js.map +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-step.js.map +1 -1
- package/dist/components/md-stepper.js +1 -1
- package/dist/components/md-stepper.js.map +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-pagination.js.map +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-time-picker.js.map +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-1RSrsLOs.js +2 -0
- package/dist/components/p-1RSrsLOs.js.map +1 -0
- package/dist/components/p-2HV152w7.js +2 -0
- package/dist/components/p-2HV152w7.js.map +1 -0
- package/dist/components/p-6ZDAcEKN.js +2 -0
- package/dist/components/p-6ZDAcEKN.js.map +1 -0
- package/dist/components/p-B2fYoYe9.js +2 -0
- package/dist/components/p-B2fYoYe9.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-C77M30dm.js +2 -0
- package/dist/components/p-C77M30dm.js.map +1 -0
- package/dist/components/p-CNgkGl_1.js +2 -0
- package/dist/components/p-CNgkGl_1.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-D5Ht729E.js +2 -0
- package/dist/components/p-D5Ht729E.js.map +1 -0
- package/dist/components/p-DPqGg8C1.js +2 -0
- package/dist/components/p-DPqGg8C1.js.map +1 -0
- package/dist/components/p-De3E5Q8v.js +2 -0
- package/dist/components/p-De3E5Q8v.js.map +1 -0
- package/dist/components/p-Dm_7DA1f.js +2 -0
- package/dist/components/p-Dm_7DA1f.js.map +1 -0
- package/dist/components/p-Dz3R-2Wn.js +2 -0
- package/dist/components/p-Dz3R-2Wn.js.map +1 -0
- package/dist/components/p-Zjf9uhOr.js +2 -0
- package/dist/components/p-Zjf9uhOr.js.map +1 -0
- package/dist/components/p-ssLobpGS.js +2 -0
- package/dist/components/p-ssLobpGS.js.map +1 -0
- package/dist/components/p-tSoecrcz.js +2 -0
- package/dist/components/p-tSoecrcz.js.map +1 -0
- package/dist/components/p-zMR3UIR_.js +2 -0
- package/dist/components/p-zMR3UIR_.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-csr/p-6WgHjhDg.js +2 -0
- package/dist/components-csr/p-6WgHjhDg.js.map +1 -0
- package/dist/{components/p-uTEkf0sE.js → components-csr/p-BEmwDSzw.js} +2 -2
- package/dist/{components/p-C8EP4S21.js → components-csr/p-BQKzjYcY.js} +2 -2
- package/dist/{components/p-BwXpiUsu.js → components-csr/p-BWMwewtY.js} +2 -2
- package/dist/{components/p-DXXUoRSH.js → components-csr/p-BZakoRau.js} +2 -2
- package/dist/components-csr/p-BZakoRau.js.map +1 -0
- package/dist/{md3/p-BjYKc1Ge.js → components-csr/p-BdEoSBtL.js} +2 -2
- package/dist/components-csr/p-BdEoSBtL.js.map +1 -0
- package/dist/{components/p-B0Opn6dK.js → components-csr/p-Bkt_X-6v.js} +2 -2
- 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-stybaFzj.js → components-csr/p-C3vB0Hd9.js} +2 -2
- package/dist/{components/p-B3MWYEEJ.js → components-csr/p-CF7mq5T7.js} +2 -2
- package/dist/{components/p-7fN_yCXW.js → components-csr/p-CVMM-tdC.js} +2 -2
- 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-csr/p-CxhZdOPw.js +2 -0
- package/dist/components-csr/p-CxhZdOPw.js.map +1 -0
- package/dist/{components/p-Ch2-tttM.js → components-csr/p-DMQ-6aj8.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/p-Dp-w93ot.js → components-csr/p-DjKPc5EU.js} +2 -2
- package/dist/components-csr/p-DvOKnoqK.js.map +1 -0
- package/dist/components-csr/p-DzPKu-Ma.js.map +1 -0
- package/dist/{components/p-UdGDg2oJ.js → components-csr/p-If0JHsYV.js} +2 -2
- package/dist/components-csr/p-If0JHsYV.js.map +1 -0
- package/dist/components-csr/p-RLxbNqRv.js.map +1 -0
- package/dist/{components/p-6wZSqm_2.js → components-csr/p-R_guULjT.js} +2 -2
- package/dist/components-csr/p-bSpXNc5J.js +2 -0
- package/dist/components-csr/p-bSpXNc5J.js.map +1 -0
- package/dist/{components/p-Ddiw2Kjw.js → components-csr/p-uSMrgqAy.js} +2 -2
- package/dist/components-csr/package.json +3 -0
- package/dist/esm/{a11y-C6CRqodW.js → a11y-BckJ95d7.js} +3 -3
- package/dist/esm/{a11y-C6CRqodW.js.map → a11y-BckJ95d7.js.map} +1 -1
- package/dist/esm/app-globals-DQuL1Twl.js +6 -0
- package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
- package/dist/esm/{bar-chart-ZZrajEkM.js → bar-chart-BuTyuCbt.js} +4 -4
- package/dist/esm/{bar-chart-ZZrajEkM.js.map → bar-chart-BuTyuCbt.js.map} +1 -1
- package/dist/esm/{chart-32olae06.js → chart-ByIhkqsG.js} +4 -4
- package/dist/esm/{chart-32olae06.js.map → chart-ByIhkqsG.js.map} +1 -1
- package/dist/esm/engine.wasm-CfBPnYW7.js +10 -0
- package/dist/esm/engine.wasm-CfBPnYW7.js.map +1 -0
- package/dist/esm/{hit-test-DHldf5Lm.js → hit-test-c_hI-yCX.js} +3 -3
- package/dist/esm/{hit-test-DHldf5Lm.js.map → hit-test-c_hI-yCX.js.map} +1 -1
- package/dist/esm/{index-DTaX19_O.js → index-WmvQpZnM.js} +5 -15
- package/dist/esm/index-WmvQpZnM.js.map +1 -0
- package/dist/esm/lazy-loading-indicator-BWFcjJiK.js +67 -0
- package/dist/esm/lazy-loading-indicator-BWFcjJiK.js.map +1 -0
- package/dist/esm/loader.js +4 -3
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/md-accordion-item.entry.js +4 -4
- package/dist/esm/md-accordion.entry.js +1 -1
- package/dist/esm/md-app-bar.entry.js +2 -2
- package/dist/esm/md-area-chart.entry.js +7 -7
- package/dist/esm/md-autocomplete.entry.js +6 -5
- package/dist/esm/md-autocomplete.entry.js.map +1 -1
- package/dist/esm/md-avatar_2.entry.js +4 -4
- package/dist/esm/md-badge.entry.js +3 -3
- package/dist/esm/md-bar-chart.entry.js +7 -7
- package/dist/esm/md-bottom-sheet.entry.js +5 -5
- package/dist/esm/md-breadcrumb-item.entry.js +2 -2
- package/dist/esm/md-breadcrumbs.entry.js +3 -3
- package/dist/esm/md-button-group.entry.js +3 -3
- package/dist/esm/{md-button_7.entry.js → md-button_6.entry.js} +16 -40
- package/dist/esm/md-button_6.entry.js.map +1 -0
- package/dist/esm/md-checkbox.entry.js +3 -3
- package/dist/esm/md-chip.entry.js +3 -3
- package/dist/esm/md-color-picker.entry.js +1 -1
- package/dist/esm/md-date-picker.entry.js +2 -2
- package/dist/esm/md-dialog.entry.js +3 -3
- package/dist/esm/md-divider.entry.js +3 -3
- package/dist/esm/md-fab-menu-item.entry.js +3 -3
- package/dist/esm/md-fab-menu.entry.js +3 -3
- package/dist/esm/md-fab.entry.js +3 -3
- package/dist/esm/md-line-chart.entry.js +7 -7
- package/dist/esm/md-list-item.entry.js +5 -5
- package/dist/esm/md-list.entry.js +4 -4
- package/dist/esm/md-loading-indicator-Bf-Pt29l.js +31 -0
- package/dist/esm/md-loading-indicator-Bf-Pt29l.js.map +1 -0
- package/dist/esm/md-loading-indicator.entry.js +5 -0
- package/dist/esm/md-loading-indicator.entry.js.map +1 -0
- package/dist/esm/md-menu-item-group.entry.js +1 -1
- package/dist/esm/md-menu_2.entry.js +6 -6
- package/dist/esm/md-meter.entry.js +1 -1
- package/dist/esm/md-multi-select.entry.js +7 -6
- package/dist/esm/md-multi-select.entry.js.map +1 -1
- package/dist/esm/md-navigation-bar.entry.js +2 -2
- package/dist/esm/md-navigation-rail-tab.entry.js +2 -2
- package/dist/esm/md-navigation-rail.entry.js +1 -1
- package/dist/esm/md-navigation-tab.entry.js +4 -4
- package/dist/esm/md-number-field.entry.js +3 -3
- package/dist/esm/md-organization-chart.entry.js +3 -3
- package/dist/esm/md-otp-field.entry.js +4 -4
- package/dist/esm/md-pie-chart.entry.js +3 -3
- 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 +8 -7
- package/dist/esm/md-search.entry.js.map +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 +2 -2
- package/dist/esm/md-select.entry.js +7 -6
- package/dist/esm/md-select.entry.js.map +1 -1
- 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 +3 -3
- package/dist/esm/md-sparkline.entry.js +7 -7
- package/dist/esm/md-split-button.entry.js +1 -1
- package/dist/esm/md-status-dot.entry.js +2 -2
- 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 +4 -4
- package/dist/esm/md-tabs.entry.js +1 -1
- package/dist/esm/md-text-field.entry.js +8 -8
- package/dist/esm/md-time-picker.entry.js +2 -2
- package/dist/esm/md-toolbar.entry.js +1 -1
- package/dist/esm/md-transfer-list.entry.js +2 -2
- package/dist/esm/md3.js +4 -3
- package/dist/esm/md3.js.map +1 -1
- package/dist/esm/{rtl-DvOKnoqK.js → rtl-CVFH1DkU.js} +3 -3
- package/dist/esm/{rtl-DvOKnoqK.js.map → rtl-CVFH1DkU.js.map} +1 -1
- package/dist/esm/{url-BjYKc1Ge.js → url-BdEoSBtL.js} +3 -3
- package/dist/esm/{url-BjYKc1Ge.js.map → url-BdEoSBtL.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-08f1c469.entry.js +2 -0
- package/dist/md3/{p-4d82132d.entry.js.map → p-08f1c469.entry.js.map} +1 -1
- package/dist/md3/{p-9ddbf247.entry.js → p-108f89d7.entry.js} +2 -2
- package/dist/md3/p-1112bffc.entry.js +2 -0
- package/dist/md3/{p-cf07e761.entry.js.map → p-1112bffc.entry.js.map} +1 -1
- package/dist/md3/{p-c6a12344.entry.js → p-114c270b.entry.js} +2 -2
- package/dist/md3/p-1835fe36.entry.js +2 -0
- package/dist/md3/{p-a3308c40.entry.js.map → p-1835fe36.entry.js.map} +1 -1
- package/dist/md3/{p-396089fd.entry.js → p-1edb5a0d.entry.js} +2 -2
- package/dist/md3/p-2ba2db3b.entry.js +2 -0
- package/dist/md3/{p-6b2871a0.entry.js.map → p-2ba2db3b.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-be02624e.entry.js → p-3c0469aa.entry.js} +2 -2
- package/dist/md3/p-3f64a27d.entry.js +2 -0
- package/dist/md3/{p-fb61868c.entry.js.map → p-3f64a27d.entry.js.map} +1 -1
- package/dist/md3/{p-63b8c8d1.entry.js → p-408ee4be.entry.js} +2 -2
- package/dist/md3/{p-edb34a6d.entry.js → p-43c708ad.entry.js} +2 -2
- package/dist/md3/{p-3015c7e3.entry.js → p-4770b534.entry.js} +2 -2
- package/dist/md3/{p-c861d774.entry.js → p-4b7cf934.entry.js} +2 -2
- package/dist/md3/{p-2e09a7b7.entry.js → p-4f26bd60.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-c063c823.entry.js → p-56c7c570.entry.js} +2 -2
- package/dist/md3/{p-2e9503d7.entry.js → p-56ca0c3c.entry.js} +2 -2
- package/dist/md3/{p-ac8762e5.entry.js → p-5b63149a.entry.js} +2 -2
- package/dist/md3/{p-c5af701b.entry.js → p-5f668b0a.entry.js} +2 -2
- package/dist/md3/p-6237ddac.entry.js +2 -0
- package/dist/md3/{p-e7dc5a32.entry.js.map → p-6237ddac.entry.js.map} +1 -1
- package/dist/md3/{p-8eb0b6a4.entry.js → p-6d65fc6a.entry.js} +2 -2
- package/dist/md3/{p-e3124e1e.entry.js → p-707b6d7c.entry.js} +2 -2
- package/dist/md3/{p-a5fee424.entry.js → p-71f1660b.entry.js} +2 -2
- package/dist/md3/{p-1a8ec5bc.entry.js → p-7501170f.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-4e3d6e40.entry.js → p-7d1686a7.entry.js} +2 -2
- package/dist/md3/p-7e7f0e45.entry.js +2 -0
- package/dist/md3/p-7e7f0e45.entry.js.map +1 -0
- package/dist/md3/p-80379565.entry.js +2 -0
- package/dist/md3/{p-6c44cf13.entry.js.map → p-80379565.entry.js.map} +1 -1
- package/dist/md3/p-830724e4.entry.js +2 -0
- package/dist/md3/p-830724e4.entry.js.map +1 -0
- package/dist/md3/{p-4dda4cb0.entry.js → p-845ca9cc.entry.js} +2 -2
- package/dist/md3/{p-77a01bcc.entry.js → p-87f88d62.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-8a7e0297.entry.js +2 -0
- package/dist/md3/p-8a7e0297.entry.js.map +1 -0
- package/dist/md3/{p-b0431a5c.entry.js → p-8bdcda53.entry.js} +2 -2
- package/dist/md3/{p-c10a33c2.entry.js → p-8e7df348.entry.js} +2 -2
- package/dist/md3/p-9003a7d4.entry.js +2 -0
- package/dist/md3/p-9003a7d4.entry.js.map +1 -0
- package/dist/md3/{p-05ae91b6.entry.js → p-90ccf4c3.entry.js} +2 -2
- package/dist/md3/p-BdEoSBtL.js +2 -0
- package/dist/md3/{p-BjYKc1Ge.js.map → p-BdEoSBtL.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-CGqeEMjY.js +2 -0
- package/dist/md3/{p-DzPKu-Ma.js.map → p-CGqeEMjY.js.map} +1 -1
- package/dist/md3/p-CVFH1DkU.js +2 -0
- package/dist/md3/{p-DvOKnoqK.js.map → p-CVFH1DkU.js.map} +1 -1
- package/dist/md3/p-Cch92tDM.js +2 -0
- package/dist/md3/{p-RLxbNqRv.js.map → p-Cch92tDM.js.map} +1 -1
- package/dist/md3/p-CfBPnYW7.js +2 -0
- package/dist/md3/p-CfBPnYW7.js.map +1 -0
- package/dist/md3/p-D17cVKxS.js +2 -0
- package/dist/md3/p-D17cVKxS.js.map +1 -0
- package/dist/md3/p-DGtztV3K.js +2 -0
- package/dist/md3/{p-Bx6--dQF.js.map → p-DGtztV3K.js.map} +1 -1
- package/dist/md3/p-DQuL1Twl.js +2 -0
- package/dist/md3/p-DQuL1Twl.js.map +1 -0
- package/dist/md3/p-DnKDoE8K.js +2 -0
- package/dist/md3/p-DnKDoE8K.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-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-6038b907.entry.js → p-ab568d1c.entry.js} +2 -2
- package/dist/md3/{p-bf7842f8.entry.js → p-adf8a415.entry.js} +2 -2
- package/dist/md3/p-ae30e899.entry.js +2 -0
- package/dist/md3/p-ae30e899.entry.js.map +1 -0
- 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-b54bbf88.entry.js +2 -0
- package/dist/md3/p-b54bbf88.entry.js.map +1 -0
- package/dist/md3/{p-c00f7514.entry.js → p-ba011453.entry.js} +2 -2
- package/dist/md3/{p-6ba63c73.entry.js → p-bc24f0c9.entry.js} +2 -2
- package/dist/md3/{p-0c2e824d.entry.js → p-c20fbb9e.entry.js} +2 -2
- package/dist/md3/{p-fc0b325d.entry.js → p-c2944c87.entry.js} +2 -2
- package/dist/md3/{p-4e45b2ff.entry.js → p-c58c68d0.entry.js} +2 -2
- package/dist/md3/p-cc6e8afd.entry.js +2 -0
- package/dist/md3/{p-72457a85.entry.js.map → p-cc6e8afd.entry.js.map} +1 -1
- package/dist/md3/{p-0f764a1e.entry.js → p-d2e39c6e.entry.js} +2 -2
- package/dist/md3/{p-50555bb7.entry.js → p-d8885f53.entry.js} +2 -2
- package/dist/md3/{p-c1ca6f6c.entry.js → p-db6fb4e1.entry.js} +2 -2
- package/dist/md3/{p-81843ff7.entry.js → p-dcba2857.entry.js} +2 -2
- package/dist/md3/{p-65195996.entry.js → p-e357e8ac.entry.js} +2 -2
- package/dist/md3/{p-39cb7c24.entry.js → p-e5c6795e.entry.js} +2 -2
- package/dist/md3/p-e871663b.entry.js +2 -0
- package/dist/md3/{p-aaec2698.entry.js.map → p-e871663b.entry.js.map} +1 -1
- 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-f297d786.entry.js +2 -0
- package/dist/md3/{p-3cce1de3.entry.js.map → p-f297d786.entry.js.map} +1 -1
- package/dist/md3/{p-e6d7f0ff.entry.js → p-f403ad20.entry.js} +2 -2
- package/dist/md3/p-f5399b73.entry.js +2 -0
- package/dist/md3/{p-04e97f5d.entry.js.map → p-f5399b73.entry.js.map} +1 -1
- 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/md3/{p-32bdd439.entry.js → p-fd686966.entry.js} +2 -2
- package/dist/md3/p-nhfFYWzy.js +2 -0
- package/dist/md3/{p-C_ogF68H.js.map → p-nhfFYWzy.js.map} +1 -1
- package/dist/types/utils/lazy-loading-indicator.d.ts +7 -0
- package/dist/types/wasm/engine-abi.d.ts +14 -0
- package/hydrate/index.js +191 -113
- package/hydrate/index.mjs +191 -113
- package/package.json +30 -5
- package/dist/cjs/index-DlQ_5_Mv.js.map +0 -1
- package/dist/cjs/md-button_7.cjs.entry.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-DXXUoRSH.js.map +0 -1
- package/dist/components/p-MWBNn6Lj.js +0 -2
- package/dist/components/p-MWBNn6Lj.js.map +0 -1
- package/dist/components/p-UdGDg2oJ.js.map +0 -1
- package/dist/esm/index-DTaX19_O.js.map +0 -1
- package/dist/esm/md-button_7.entry.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-21772851.entry.js.map +0 -1
- package/dist/md3/p-3cce1de3.entry.js +0 -2
- package/dist/md3/p-47af9819.entry.js +0 -2
- package/dist/md3/p-47af9819.entry.js.map +0 -1
- package/dist/md3/p-4d82132d.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-a7ffb779.entry.js +0 -2
- package/dist/md3/p-a7ffb779.entry.js.map +0 -1
- 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-ac35ac5f.entry.js +0 -2
- package/dist/md3/p-ac35ac5f.entry.js.map +0 -1
- package/dist/md3/p-b4631a55.entry.js +0 -2
- package/dist/md3/p-b4631a55.entry.js.map +0 -1
- 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-uTEkf0sE.js.map → components-csr/p-BEmwDSzw.js.map} +0 -0
- /package/dist/{components/p-C8EP4S21.js.map → components-csr/p-BQKzjYcY.js.map} +0 -0
- /package/dist/{components/p-BwXpiUsu.js.map → components-csr/p-BWMwewtY.js.map} +0 -0
- /package/dist/{components/p-B0Opn6dK.js.map → components-csr/p-Bkt_X-6v.js.map} +0 -0
- /package/dist/{md3 → components-csr}/p-Bx6--dQF.js +0 -0
- /package/dist/{components/p-stybaFzj.js.map → components-csr/p-C3vB0Hd9.js.map} +0 -0
- /package/dist/{components/p-B3MWYEEJ.js.map → components-csr/p-CF7mq5T7.js.map} +0 -0
- /package/dist/{components/p-7fN_yCXW.js.map → components-csr/p-CVMM-tdC.js.map} +0 -0
- /package/dist/{md3 → components-csr}/p-C_ogF68H.js +0 -0
- /package/dist/{components/p-Ch2-tttM.js.map → components-csr/p-DMQ-6aj8.js.map} +0 -0
- /package/dist/{components/p-e2HRV63Y.js.map → components-csr/p-DfcpeJAu.js.map} +0 -0
- /package/dist/{components/p-Dp-w93ot.js.map → components-csr/p-DjKPc5EU.js.map} +0 -0
- /package/dist/{md3 → components-csr}/p-DvOKnoqK.js +0 -0
- /package/dist/{md3 → components-csr}/p-DzPKu-Ma.js +0 -0
- /package/dist/{md3 → components-csr}/p-RLxbNqRv.js +0 -0
- /package/dist/{components/p-6wZSqm_2.js.map → components-csr/p-R_guULjT.js.map} +0 -0
- /package/dist/{components/p-Ddiw2Kjw.js.map → components-csr/p-uSMrgqAy.js.map} +0 -0
- /package/dist/md3/{p-9ddbf247.entry.js.map → p-108f89d7.entry.js.map} +0 -0
- /package/dist/md3/{p-c6a12344.entry.js.map → p-114c270b.entry.js.map} +0 -0
- /package/dist/md3/{p-396089fd.entry.js.map → p-1edb5a0d.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-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-edb34a6d.entry.js.map → p-43c708ad.entry.js.map} +0 -0
- /package/dist/md3/{p-3015c7e3.entry.js.map → p-4770b534.entry.js.map} +0 -0
- /package/dist/md3/{p-c861d774.entry.js.map → p-4b7cf934.entry.js.map} +0 -0
- /package/dist/md3/{p-2e09a7b7.entry.js.map → p-4f26bd60.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-c063c823.entry.js.map → p-56c7c570.entry.js.map} +0 -0
- /package/dist/md3/{p-2e9503d7.entry.js.map → p-56ca0c3c.entry.js.map} +0 -0
- /package/dist/md3/{p-ac8762e5.entry.js.map → p-5b63149a.entry.js.map} +0 -0
- /package/dist/md3/{p-c5af701b.entry.js.map → p-5f668b0a.entry.js.map} +0 -0
- /package/dist/md3/{p-8eb0b6a4.entry.js.map → p-6d65fc6a.entry.js.map} +0 -0
- /package/dist/md3/{p-e3124e1e.entry.js.map → p-707b6d7c.entry.js.map} +0 -0
- /package/dist/md3/{p-a5fee424.entry.js.map → p-71f1660b.entry.js.map} +0 -0
- /package/dist/md3/{p-1a8ec5bc.entry.js.map → p-7501170f.entry.js.map} +0 -0
- /package/dist/md3/{p-4e3d6e40.entry.js.map → p-7d1686a7.entry.js.map} +0 -0
- /package/dist/md3/{p-4dda4cb0.entry.js.map → p-845ca9cc.entry.js.map} +0 -0
- /package/dist/md3/{p-77a01bcc.entry.js.map → p-87f88d62.entry.js.map} +0 -0
- /package/dist/md3/{p-5b74694e.entry.js.map → p-89d47130.entry.js.map} +0 -0
- /package/dist/md3/{p-b0431a5c.entry.js.map → p-8bdcda53.entry.js.map} +0 -0
- /package/dist/md3/{p-c10a33c2.entry.js.map → p-8e7df348.entry.js.map} +0 -0
- /package/dist/md3/{p-05ae91b6.entry.js.map → p-90ccf4c3.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-6038b907.entry.js.map → p-ab568d1c.entry.js.map} +0 -0
- /package/dist/md3/{p-bf7842f8.entry.js.map → p-adf8a415.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-c00f7514.entry.js.map → p-ba011453.entry.js.map} +0 -0
- /package/dist/md3/{p-6ba63c73.entry.js.map → p-bc24f0c9.entry.js.map} +0 -0
- /package/dist/md3/{p-0c2e824d.entry.js.map → p-c20fbb9e.entry.js.map} +0 -0
- /package/dist/md3/{p-fc0b325d.entry.js.map → p-c2944c87.entry.js.map} +0 -0
- /package/dist/md3/{p-4e45b2ff.entry.js.map → p-c58c68d0.entry.js.map} +0 -0
- /package/dist/md3/{p-0f764a1e.entry.js.map → p-d2e39c6e.entry.js.map} +0 -0
- /package/dist/md3/{p-50555bb7.entry.js.map → p-d8885f53.entry.js.map} +0 -0
- /package/dist/md3/{p-c1ca6f6c.entry.js.map → p-db6fb4e1.entry.js.map} +0 -0
- /package/dist/md3/{p-81843ff7.entry.js.map → p-dcba2857.entry.js.map} +0 -0
- /package/dist/md3/{p-65195996.entry.js.map → p-e357e8ac.entry.js.map} +0 -0
- /package/dist/md3/{p-39cb7c24.entry.js.map → p-e5c6795e.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
- /package/dist/md3/{p-32bdd439.entry.js.map → p-fd686966.entry.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mdTableRowCss","MdTableRow","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","rowgroup","selected","disabled","selectable","clickable","value","expandable","expanded","highlight","_hasExpandedSlot","handleClick","e","target","closest","mdRowClick","emit","row","el","handleKeyDown","key","preventDefault","componentDidLoad","slot","shadowRoot","querySelector","addEventListener","assignedElements","length","onSelectedChange","newVal","oldVal","mdRowSelectionChange","onExpandedChange","mdRowExpandedChange","toggle","render","h","Host","class","role","tabindex","onClick","onKeyDown","onSlotchange","dispatchEvent","CustomEvent","bubbles","part","String","Array","from","children","filter","c","tagName","inert","name"],"sources":["src/components/md-table-row/md-table-row.css?tag=md-table-row&encapsulation=shadow","src/components/md-table-row/md-table-row.tsx"],"sourcesContent":["/* ==========================================================\n md-table-row — a REAL grid box on the table's shared tracks.\n\n The host spans all of the parent grid's tracks and subgrids its cells\n onto them, so the row itself paints hover / stripe / selection /\n dividers and can be sticky and focusable.\n\n Context (from md-table via inherited custom properties):\n --_row-h / --_head-h row heights\n --_head-bg / --_head-color header surface\n --_foot-bg footer surface\n --_divider divider color (transparent when off)\n --_hover-layer hover state-layer color (transparent when off)\n --_stripe-color stripe overlay color\n --_row-selected-bg / --_row-selected-color\n --_fx-fast / --_fx-default effects springs\n\n The row CASTS cell context down via ::slotted() custom properties —\n cells have no observers and no :host-context().\n\n PARTS: expanded\n ========================================================== */\n\n:host {\n position: relative;\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: subgrid;\n align-items: stretch;\n border-block-end: 1px solid var(--_divider, transparent);\n background-color: transparent;\n /* Match the sticky cells' background transition (--_fx-fast) AND the ::before\n hover overlay so a row's selection/stripe/hover tint animates at ONE speed\n across fixed and unfixed columns — otherwise the row bg (unfixed) and the\n sticky cell bg (fixed) finish at different times and flicker column-first. */\n transition: background-color var(--_fx-fast, 150ms cubic-bezier(0.31, 0.94, 0.34, 1));\n}\n\n/* Fixed (sticky) cells need an OPAQUE background, but it must match the row's\n effective background — otherwise the pinned column ignores the row's stripe /\n selection / hover tint (a visible mismatch). Recompute the opaque sticky\n background per state and cast it to the cells via --md-table-cell-sticky-bg.\n Source order = precedence: base → stripe → selected; hover blends on top. */\n:host {\n --_sticky-base: var(--md-table-surface, var(--md-sys-color-surface, #FEF7FF));\n --md-table-cell-sticky-bg: var(--_sticky-base);\n}\n:host([data-stripe]) {\n --_sticky-base: color-mix(\n in srgb,\n var(--md-sys-color-on-surface, #1C1B1F) calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 50%),\n var(--md-table-surface, var(--md-sys-color-surface, #FEF7FF))\n );\n --md-table-cell-sticky-bg: var(--_sticky-base);\n}\n:host(.md-table-row--selected) {\n --_sticky-base: var(--_row-selected-bg, var(--md-sys-color-secondary-container, #E8DEF8));\n --md-table-cell-sticky-bg: var(--_sticky-base);\n}\n:host(.md-table-row--body:hover:not(.md-table-row--disabled)) {\n --md-table-cell-sticky-bg: color-mix(\n in srgb,\n var(--md-table-row-hover-color, var(--md-sys-color-on-surface, #1C1B1F))\n calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 100%),\n var(--_sticky-base)\n );\n}\n/* Head / foot rows have their own surface — pinned cells there must match it,\n not the body table surface. */\n:host(.md-table-row--head) {\n --md-table-cell-sticky-bg: var(--_head-bg, var(--md-sys-color-surface-container, #F3EDF7));\n /* Static bg — don't animate it (a re-render on selection would flash white). */\n --md-table-cell-sticky-transition: 0s;\n}\n:host(.md-table-row--foot) {\n --md-table-cell-sticky-bg: var(--_foot-bg, var(--md-sys-color-surface-container-low, #F7F2FA));\n --md-table-cell-sticky-transition: 0s;\n}\n\n/* Hover state layer — an overlay so it composes over stripe/selection. */\n:host::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-color: var(--_hover-layer, transparent);\n opacity: 0;\n transition: opacity var(--_fx-fast, 150ms cubic-bezier(0.31, 0.94, 0.34, 1));\n}\n\n:host(.md-table-row--body:hover:not(.md-table-row--disabled))::before {\n opacity: 1;\n}\n\n/* ── Rowgroups ────────────────────────────────────────────── */\n:host(.md-table-row--head) {\n background-color: var(--_head-bg, var(--md-sys-color-surface-container, #F3EDF7));\n}\n:host(.md-table-row--head)::before {\n background-color: transparent;\n}\n:host(.md-table-row--foot) {\n background-color: var(--_foot-bg, var(--md-sys-color-surface-container-low, #F7F2FA));\n border-block-end: none;\n border-block-start: 1px solid var(--_divider, transparent);\n}\n\n/* The final row (stamped `data-last` by md-table) sits at the container's\n rounded bottom edge. Its 1px bottom divider would draw a straight line\n across the rounded corner — a visible overlap. Suppress it; dividers between\n all other rows are unaffected. */\n:host([data-last]) {\n border-block-end: none;\n}\n\n/* The last body row before a footer drops its bottom divider — the foot row's\n border-block-start is the single divider between body and footer (otherwise\n the two 1px borders stack into a thick/overlapping line). */\n:host([data-adjacent-foot]) {\n border-block-end: none;\n}\n\n/* The pin indicator is a COLUMN-header affordance: body rows (including\n rowheader cells like a sticky Name column) suppress it via the cast var —\n otherwise every data row would repeat the pin icon. */\n:host(.md-table-row--body) ::slotted(md-table-cell) {\n --md-table-cell-pin-display: none;\n}\n\n/* Cast header cell context (typography + color + height). */\n:host(.md-table-row--head) ::slotted(md-table-cell) {\n --_cell-min-h: var(--_head-h, 56px);\n --_cell-color: var(--_head-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_cell-weight: var(--md-sys-typescale-title-small-font-weight, 500);\n --_cell-letter-spacing: var(--md-sys-typescale-title-small-letter-spacing, 0.1px);\n}\n:host(.md-table-row--foot) ::slotted(md-table-cell) {\n --_cell-weight: var(--md-sys-typescale-title-small-font-weight, 500);\n}\n\n/* ── Stripes (stamped by md-table as data-stripe) ─────────── */\n:host([data-stripe]) {\n background-color: var(--_stripe-color, transparent);\n}\n\n/* ── Selection / highlight ────────────────────────────────── */\n:host(.md-table-row--selected) {\n background-color: var(--_row-selected-bg, var(--md-sys-color-secondary-container, #E8DEF8));\n}\n:host(.md-table-row--selected) ::slotted(md-table-cell) {\n --_cell-color: var(--_row-selected-color, var(--md-sys-color-on-secondary-container, #1E192B));\n}\n:host(.md-table-row--highlight) {\n background-color: var(--md-sys-color-primary-container, #EADDFF);\n}\n:host(.md-table-row--highlight) ::slotted(md-table-cell) {\n --_cell-color: var(--md-sys-color-on-primary-container, #21005D);\n}\n\n/* ── Disabled ─────────────────────────────────────────────── */\n:host(.md-table-row--disabled) ::slotted(md-table-cell) {\n --_cell-color: color-mix(\n in srgb,\n var(--md-sys-color-on-surface, #1C1B1F) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%),\n transparent\n );\n}\n:host(.md-table-row--disabled) {\n pointer-events: none;\n}\n\n/* ── Clickable rows (real box → visible focus ring) ───────── */\n:host(.md-table-row--clickable) {\n cursor: pointer;\n}\n:host(:focus-visible) {\n outline: 2px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: -2px;\n z-index: 1;\n}\n\n/* ── Sticky rows (stamped by md-table as data-sticky) ─────── */\n:host([data-sticky].md-table-row--head) {\n position: sticky;\n inset-block-start: 0;\n z-index: 2;\n}\n:host([data-sticky].md-table-row--foot) {\n position: sticky;\n inset-block-end: 0;\n z-index: 2;\n}\n\n/* ── Expandable detail zone — accordion grid-rows spring ──── */\n.md-table-row__expanded {\n grid-column: 1 / -1;\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n transition:\n grid-template-rows var(--md-sys-motion-duration-short4, 200ms)\n var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)),\n opacity var(--md-sys-motion-duration-short4, 200ms)\n var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)),\n visibility 0s linear var(--md-sys-motion-duration-short4, 200ms);\n}\n.md-table-row__expanded--open {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n transition:\n grid-template-rows var(--md-sys-motion-spring-spatial-default-duration, 500ms)\n var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1)),\n opacity var(--_fx-default, 200ms cubic-bezier(0.34, 0.8, 0.34, 1)),\n visibility 0s;\n}\n.md-table-row__expanded-sizer {\n /* The grid item must have NO block padding/border, or its intrinsic\n min-size defeats the 0fr collapse. */\n min-block-size: 0;\n overflow: hidden;\n}\n/* Expressive content choreography: the PANEL leads (grid-rows spring above)\n and the CONTENT follows — fading in while rising from under the row on a\n spatial spring with a slight overshoot, ~60ms behind the panel. The fr\n interpolation itself can't overshoot (it clamps at the content height), so\n without this the expansion reads as a flat clip-reveal. */\n.md-table-row__expanded-inner {\n padding: 12px var(--_cell-pad-inline, 16px) 16px;\n opacity: 0;\n transform: translateY(-10px);\n transition:\n transform var(--md-sys-motion-duration-short3, 150ms)\n var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)),\n opacity var(--md-sys-motion-duration-short2, 100ms) linear;\n}\n.md-table-row__expanded--open .md-table-row__expanded-inner {\n opacity: 1;\n transform: translateY(0);\n transition:\n transform var(--md-sys-motion-spring-spatial-fast-duration, 350ms)\n var(--md-sys-motion-spring-spatial-default-easing, cubic-bezier(0.38, 1.21, 0.22, 1)),\n opacity var(--_fx-default, 200ms cubic-bezier(0.34, 0.8, 0.34, 1));\n transition-delay: 60ms;\n}\n\n/* ── Reduced motion / forced colors ───────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n :host,\n :host::before,\n .md-table-row__expanded,\n .md-table-row__expanded-inner {\n transition-duration: 0.01ms !important;\n transition-delay: 0s !important;\n }\n}\n\n@media (forced-colors: active) {\n :host {\n border-block-end-color: CanvasText;\n }\n :host(.md-table-row--selected) {\n background-color: Highlight;\n }\n :host(.md-table-row--selected) ::slotted(md-table-cell) {\n --_cell-color: HighlightText;\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n Watch,\n Method,\n State,\n} from '@stencil/core';\n\n/**\n * Material Design 3 — Table Row.\n *\n * A row inside a `<md-table>` that contains `<md-table-cell>` children.\n * The host is a REAL grid box that spans the table's tracks and lays its\n * cells on them via `grid-template-columns: subgrid` — so row hover,\n * stripes, dividers, selection tint, sticky rows and focus rings all work\n * on the row itself, and a wrong cell count skews one row, never the table.\n *\n * The parent `<md-table>` stamps context (`rowgroup`, stripe parity,\n * stickiness) onto the row; the row casts typography/color context down to\n * its cells with `::slotted()` custom properties — no observers.\n *\n * Behaviors:\n * - `selected` — selection state (visual + ARIA)\n * - `disabled` — non-interactive\n * - `clickable` — adds keyboard activation (Enter / Space) + emits `mdRowClick`\n * - `expandable` — toggles an \"expanded details\" zone (use the `expanded` slot),\n * spring-animated via the grid-rows height pattern\n */\n@Component({\n tag: 'md-table-row',\n styleUrl: 'md-table-row.css',\n shadow: true,\n})\nexport class MdTableRow {\n @Element() el!: HTMLElement;\n\n /**\n * Which rowgroup this row belongs to. Stamped automatically by the parent\n * `<md-table>` (head / body / foot) — set it manually only when using rows\n * outside a table.\n */\n @Prop({ reflect: true }) rowgroup: 'head' | 'body' | 'foot' = 'body';\n\n /** Selected (highlighted) state. Reflected. */\n @Prop({ mutable: true, reflect: true }) selected: boolean = false;\n\n /** Disabled — row receives no hover/click handlers. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Whether this row counts as selectable (used by `<md-table>` selection coordination). */\n @Prop() selectable: boolean = true;\n\n /** When true, treat the entire row as a button (Enter/Space activates `mdRowClick`). */\n @Prop({ reflect: true }) clickable: boolean = false;\n\n /** Identifier attached to selection / click events. Defaults to row index. */\n @Prop() value: string = '';\n\n /** Render an \"expandable details\" zone toggleable via `toggle()`. */\n @Prop({ reflect: true }) expandable: boolean = false;\n\n /** Whether the expandable zone is open. */\n @Prop({ mutable: true, reflect: true }) expanded: boolean = false;\n\n /** Highlights the row using primary-container (e.g. for the focused row). */\n @Prop({ reflect: true, attribute: 'highlight' }) highlight: boolean = false;\n\n /** Fired when the user clicks (or Enter/Space-activates) the row. */\n @Event() mdRowClick: EventEmitter<{ value: string; row: HTMLElement }>;\n\n /**\n * Fired when the `selected` state changes (used by `<md-table>` for\n * selection coordination).\n */\n @Event() mdRowSelectionChange: EventEmitter<{ selected: boolean; value: string }>;\n\n /** Fired when the row's expanded state changes. */\n @Event() mdRowExpandedChange: EventEmitter<{ expanded: boolean }>;\n\n @State() private _hasExpandedSlot = false;\n\n componentDidLoad() {\n const slot = this.el.shadowRoot?.querySelector('slot[name=\"expanded\"]') as HTMLSlotElement | null;\n slot?.addEventListener('slotchange', () => {\n this._hasExpandedSlot = slot.assignedElements().length > 0;\n });\n this._hasExpandedSlot = !!slot && slot.assignedElements().length > 0;\n }\n\n @Watch('selected')\n onSelectedChange(newVal: boolean, oldVal: boolean) {\n if (newVal === oldVal) return;\n this.mdRowSelectionChange.emit({ selected: newVal, value: this.value });\n }\n\n @Watch('expanded')\n onExpandedChange(newVal: boolean, oldVal: boolean) {\n if (newVal === oldVal) return;\n this.mdRowExpandedChange.emit({ expanded: newVal });\n }\n\n /** Toggle the expanded zone. */\n @Method()\n async toggle(): Promise<void> {\n if (!this.expandable) return;\n this.expanded = !this.expanded;\n }\n\n private handleClick = (e: MouseEvent) => {\n if (this.disabled) return;\n // Don't fire row click for clicks on interactive descendants (checkboxes, buttons, links)\n const target = e.target as HTMLElement;\n if (\n target.closest(\n 'md-checkbox, md-radio, md-button, md-icon-button, md-switch, md-fab, md-chip, button, a, input, select, textarea',\n )\n ) {\n return;\n }\n if (this.clickable) {\n this.mdRowClick.emit({ value: this.value, row: this.el });\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.disabled || !this.clickable) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.mdRowClick.emit({ value: this.value, row: this.el });\n }\n };\n\n render() {\n return (\n <Host\n class={{\n 'md-table-row': true,\n [`md-table-row--${this.rowgroup}`]: true,\n 'md-table-row--selected': this.selected,\n 'md-table-row--disabled': this.disabled,\n 'md-table-row--clickable': this.clickable,\n 'md-table-row--highlight': this.highlight,\n 'md-table-row--expandable': this.expandable,\n 'md-table-row--expanded': this.expanded,\n }}\n role=\"row\"\n // aria-selected is stamped by md-table (syncRows/syncSelectionUI) ONLY\n // on selectable body rows in a selection-enabled table — rendering it\n // unconditionally made SRs announce \"not selected\" on read-only tables\n // and header rows (WAI tables audit).\n aria-disabled={this.disabled ? 'true' : null}\n // aria-expanded is a CONDITIONAL row property: valid only on a row\n // inside a treegrid, invalid on a plain table row (axe\n // aria-conditional-attr). The owning md-table promotes its structural\n // role from table -> treegrid whenever it has any expandable row, so\n // this attribute is always exposed under a treegrid ancestor. The\n // disclosure button (md-table-expand-toggle) mirrors the same state on\n // its role=\"button\", where aria-expanded is unconditionally valid.\n aria-expanded={this.expandable ? (this.expanded ? 'true' : 'false') : null}\n tabindex={this.clickable && !this.disabled ? '0' : null}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n >\n <slot\n onSlotchange={() =>\n // Cells slot into the ROW's shadow — cell additions/removals (e.g.\n // a checkbox column appearing when selection turns on) are\n // invisible to md-table without this relay (same non-composed\n // slotchange rule as the rowgroups).\n this.el.dispatchEvent(new CustomEvent('mdRowgroupSlotChange', { bubbles: true }))\n }\n ></slot>\n {this.expandable && (\n <div\n class={{\n 'md-table-row__expanded': true,\n 'md-table-row__expanded--open': this.expanded,\n }}\n part=\"expanded\"\n // A row may only own cells/headers — expose the detail panel as a\n // full-width CELL (role=region here was an axe-confirmed content\n // model violation once the panel opened).\n role=\"cell\"\n aria-colspan={String(\n Array.from(this.el.children).filter((c) => c.tagName === 'MD-TABLE-CELL').length || 1,\n )}\n aria-hidden={!this.expanded ? 'true' : null}\n // inert while collapsed: the height animation only clips the\n // panel visually — without inert, focusable content inside stays\n // tab-reachable while invisible.\n inert={!this.expanded}\n >\n <div class=\"md-table-row__expanded-sizer\">\n <div class=\"md-table-row__expanded-inner\">\n <slot name=\"expanded\" />\n </div>\n </div>\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAgB,IAAM,wvL,MCsCfC,EAAUC,EAAA,MAAAD,UAAAE,EALvB,WAAAC,CAAAC,G,6NAa2BC,KAAAC,SAAqC,OAGtBD,KAAAE,SAAoB,MAGnCF,KAAAG,SAAoB,MAGrCH,KAAAI,WAAsB,KAGLJ,KAAAK,UAAqB,MAGtCL,KAAAM,MAAgB,GAGCN,KAAAO,WAAsB,MAGPP,KAAAQ,SAAoB,MAGXR,KAAAS,UAAqB,MAcrDT,KAAAU,iBAAmB,MA6B5BV,KAAAW,YAAeC,IACrB,GAAIZ,KAAKG,SAAU,OAEnB,MAAMU,EAASD,EAAEC,OACjB,GACEA,EAAOC,QACL,oHAEF,CACA,M,CAEF,GAAId,KAAKK,UAAW,CAClBL,KAAKe,WAAWC,KAAK,CAAEV,MAAON,KAAKM,MAAOW,IAAKjB,KAAKkB,I,GAIhDlB,KAAAmB,cAAiBP,IACvB,GAAIZ,KAAKG,WAAaH,KAAKK,UAAW,OACtC,GAAIO,EAAEQ,MAAQ,SAAWR,EAAEQ,MAAQ,IAAK,CACtCR,EAAES,iBACFrB,KAAKe,WAAWC,KAAK,CAAEV,MAAON,KAAKM,MAAOW,IAAKjB,KAAKkB,I,EA0EzD,CAzHC,gBAAAI,GACE,MAAMC,EAAOvB,KAAKkB,GAAGM,YAAYC,cAAc,yBAC/CF,GAAMG,iBAAiB,cAAc,KACnC1B,KAAKU,iBAAmBa,EAAKI,mBAAmBC,OAAS,CAAC,IAE5D5B,KAAKU,mBAAqBa,GAAQA,EAAKI,mBAAmBC,OAAS,C,CAIrE,gBAAAC,CAAiBC,EAAiBC,GAChC,GAAID,IAAWC,EAAQ,OACvB/B,KAAKgC,qBAAqBhB,KAAK,CAAEd,SAAU4B,EAAQxB,MAAON,KAAKM,O,CAIjE,gBAAA2B,CAAiBH,EAAiBC,GAChC,GAAID,IAAWC,EAAQ,OACvB/B,KAAKkC,oBAAoBlB,KAAK,CAAER,SAAUsB,G,CAK5C,YAAMK,GACJ,IAAKnC,KAAKO,WAAY,OACtBP,KAAKQ,UAAYR,KAAKQ,Q,CA2BxB,MAAA4B,GACE,OACEC,EAACC,EAAI,CAAAlB,IAAA,2CACHmB,MAAO,CACL,eAAgB,KAChB,CAAC,iBAAiBvC,KAAKC,YAAa,KACpC,yBAA0BD,KAAKE,SAC/B,yBAA0BF,KAAKG,SAC/B,0BAA2BH,KAAKK,UAChC,0BAA2BL,KAAKS,UAChC,2BAA4BT,KAAKO,WACjC,yBAA0BP,KAAKQ,UAEjCgC,KAAK,MAAK,gBAKKxC,KAAKG,SAAW,OAAS,KAAI,gBAQ7BH,KAAKO,WAAcP,KAAKQ,SAAW,OAAS,QAAW,KACtEiC,SAAUzC,KAAKK,YAAcL,KAAKG,SAAW,IAAM,KACnDuC,QAAS1C,KAAKW,YACdgC,UAAW3C,KAAKmB,eAEhBkB,EAAA,QAAAjB,IAAA,2CACEwB,aAAc,IAKZ5C,KAAKkB,GAAG2B,cAAc,IAAIC,YAAY,uBAAwB,CAAEC,QAAS,UAG5E/C,KAAKO,YACJ8B,EAAA,OAAAjB,IAAA,2CACEmB,MAAO,CACL,yBAA0B,KAC1B,+BAAgCvC,KAAKQ,UAEvCwC,KAAK,WAILR,KAAK,OAAM,eACGS,OACZC,MAAMC,KAAKnD,KAAKkB,GAAGkC,UAAUC,QAAQC,GAAMA,EAAEC,UAAY,kBAAiB3B,QAAU,GACrF,eACa5B,KAAKQ,SAAW,OAAS,KAIvCgD,OAAQxD,KAAKQ,UAEb6B,EAAA,OAAAjB,IAAA,2CAAKmB,MAAM,gCACTF,EAAA,OAAAjB,IAAA,2CAAKmB,MAAM,gCACTF,EAAA,QAAAjB,IAAA,2CAAMqC,KAAK,gB","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as t,H as e,c as s,h as a,d as i,t as o}from"./p-bSpXNc5J.js";const l=()=>`:host{--_color:var(--md-table-sort-label-color, var(--md-sys-color-on-surface, #1C1B1F));--_active-color:var(--md-table-sort-label-active-color, var(--md-sys-color-primary, #6750A4));--_icon-size:var(--md-table-sort-label-icon-size, 18px);--_gap:var(--md-table-sort-label-gap, var(--md-sys-spacing-gap-xs, 4px));--_spring-spatial:var(--md-sys-motion-spring-spatial-fast-duration, 350ms) var(--md-sys-motion-spring-spatial-fast-easing, cubic-bezier(0.42, 1.67, 0.21, 0.9));--_spring-effects:var(--md-sys-motion-spring-effects-fast-duration, 150ms) var(--md-sys-motion-spring-effects-fast-easing, cubic-bezier(0.31, 0.94, 0.34, 1));--_hover-opacity:0.6;display:inline-flex;align-items:center;gap:var(--_gap);cursor:pointer;user-select:none;outline:none;color:var(--_color);-webkit-tap-highlight-color:transparent;border-radius:4px;padding-block:2px;padding-inline:4px;margin-inline:-4px;transition:color var(--_spring-effects)}:host(:hover:not(.md-table-sort-label--disabled)){color:var(--_active-color)}:host(:focus-visible){outline:3px solid var(--md-sys-color-secondary, #625B71);outline-offset:2px}:host(.md-table-sort-label--active){color:var(--_active-color)}:host(.md-table-sort-label--disabled){cursor:default;pointer-events:none;opacity:0.6}.md-table-sort-label__icon{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_icon-size);block-size:var(--_icon-size);opacity:0;transform:rotate(0deg);transition:transform var(--_spring-spatial), opacity var(--_spring-effects);flex:0 0 auto}.md-table-sort-label__icon--desc{transform:rotate(180deg)}:host(:hover:not(.md-table-sort-label--disabled)) .md-table-sort-label__icon,:host(:focus-visible) .md-table-sort-label__icon{opacity:var(--_hover-opacity)}:host(.md-table-sort-label--active) .md-table-sort-label__icon,.md-table-sort-label__icon--active{opacity:1}.md-table-sort-label__text{display:inline-flex;align-items:center;white-space:nowrap}.md-table-sort-label__sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media (prefers-reduced-motion: reduce){:host,.md-table-sort-label__icon{transition:none}}@media (forced-colors: active){:host(.md-table-sort-label--active){color:Highlight}}.md-table-sort-label__icon-glyph{font-size:18px;line-height:1}.material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-weight:normal;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;overflow-wrap:normal;direction:ltr;font-feature-settings:'liga';-webkit-font-smoothing:antialiased}: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 r="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z";const n=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.mdSortRequest=s(this,"mdSortRequest",7);this.column="";this.disabled=false;this.defaultOrder="asc";this.iconPosition="end";this.icon="";this.active=false;this.order="none";this.density=0;this.handleClick=()=>{if(this.disabled||!this.column)return;this.mdSortRequest.emit({column:this.column,defaultOrder:this.defaultOrder})};this.handleKeyDown=t=>{if(this.disabled)return;if(t.key==="Enter"||t.key===" "){t.preventDefault();this.handleClick()}}}renderArrow(){return a("span",{class:{"md-table-sort-label__icon":true,"md-table-sort-label__icon--active":this.active,"md-table-sort-label__icon--desc":this.active&&this.order==="desc"},part:"icon","aria-hidden":"true"},this.icon?a("span",{class:"material-symbols-outlined md-table-sort-label__icon-glyph"},this.icon):a("svg",{viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor"},a("path",{d:r})))}render(){return a(i,{key:"3ed860b4237354cb86fd9c55c0283239cb0be68c",class:{"md-table-sort-label":true,"md-table-sort-label--active":this.active,"md-table-sort-label--disabled":this.disabled},role:"button",tabindex:this.disabled?"-1":"0","aria-disabled":this.disabled?"true":null,onClick:this.handleClick,onKeyDown:this.handleKeyDown},this.iconPosition==="start"&&this.renderArrow(),a("span",{key:"a3c2fc948a5782b28768994bf6a8d180a44af9d0",class:"md-table-sort-label__text",part:"label"},a("slot",{key:"7bd3a5fb7a38b3e70afa8d8bdfe9b4a0391d15d3"})),this.iconPosition==="end"&&this.renderArrow(),a("span",{key:"9505e249df722fc15cc5ae08331c439585a9db7f",class:"md-table-sort-label__sr","aria-live":"polite"},this.active?this.order==="desc"?"sorted descending":"sorted ascending":""))}static get style(){return l()}},[257,"md-table-sort-label",{column:[1],disabled:[516],defaultOrder:[1,"default-order"],iconPosition:[513,"icon-position"],icon:[1],active:[1540],order:[1537],density:[514]}]);function c(){if(typeof customElements==="undefined"){return}const t=["md-table-sort-label"];t.forEach((t=>{switch(t){case"md-table-sort-label":if(!customElements.get(o(t))){customElements.define(o(t),n)}break}}))}c();const d=n;const b=c;export{d as MdTableSortLabel,b as defineCustomElement};
|
|
2
|
+
//# sourceMappingURL=md-table-sort-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mdTableSortLabelCss","ICON_ARROW","MdTableSortLabel","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","column","disabled","defaultOrder","iconPosition","icon","active","order","density","handleClick","mdSortRequest","emit","handleKeyDown","e","key","preventDefault","renderArrow","h","class","part","viewBox","width","height","fill","d","render","Host","role","tabindex","onClick","onKeyDown"],"sources":["src/components/md-table-sort-label/md-table-sort-label.css?tag=md-table-sort-label&encapsulation=shadow","src/components/md-table-sort-label/md-table-sort-label.tsx"],"sourcesContent":["/* ==========================================================\n md-table-sort-label — sortable column label\n\n PUBLIC CSS CUSTOM PROPERTIES:\n --md-table-sort-label-color Inactive color\n --md-table-sort-label-active-color Active color\n --md-table-sort-label-icon-size Icon size (default 18px)\n --md-table-sort-label-gap Gap between text and icon\n\n CSS PARTS:\n icon The arrow indicator\n label The text label\n ========================================================== */\n:host {\n --_color: var(--md-table-sort-label-color, var(--md-sys-color-on-surface, #1C1B1F));\n --_active-color: var(--md-table-sort-label-active-color, var(--md-sys-color-primary, #6750A4));\n --_icon-size: var(--md-table-sort-label-icon-size, 18px);\n --_gap: var(--md-table-sort-label-gap, var(--md-sys-spacing-gap-xs, 4px));\n\n /* House pairing: spatial spring for the arrow's rotate, effects spring for\n colour/opacity. */\n --_spring-spatial: var(--md-sys-motion-spring-spatial-fast-duration, 350ms)\n var(--md-sys-motion-spring-spatial-fast-easing, cubic-bezier(0.42, 1.67, 0.21, 0.9));\n --_spring-effects: var(--md-sys-motion-spring-effects-fast-duration, 150ms)\n var(--md-sys-motion-spring-effects-fast-easing, cubic-bezier(0.31, 0.94, 0.34, 1));\n /* Opacity of the arrow when previewed on hover/focus of an unsorted column. */\n --_hover-opacity: 0.6;\n\n display: inline-flex;\n align-items: center;\n gap: var(--_gap);\n cursor: pointer;\n user-select: none;\n outline: none;\n color: var(--_color);\n -webkit-tap-highlight-color: transparent;\n border-radius: 4px;\n padding-block: 2px;\n padding-inline: 4px;\n margin-inline: -4px;\n transition: color var(--_spring-effects);\n}\n\n:host(:hover:not(.md-table-sort-label--disabled)) {\n color: var(--_active-color);\n}\n\n:host(:focus-visible) {\n outline: 3px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: 2px;\n}\n\n:host(.md-table-sort-label--active) {\n color: var(--_active-color);\n}\n\n:host(.md-table-sort-label--disabled) {\n cursor: default;\n pointer-events: none;\n opacity: 0.6;\n}\n\n/* The sort arrow — hidden at rest, revealed on hover/focus of a sortable\n column, and kept visible + highlighted once the column is the active sort.\n Descending rotates the arrow 180° to point down (animated on the spatial\n spring); colour/opacity run on the effects spring. */\n.md-table-sort-label__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--_icon-size);\n block-size: var(--_icon-size);\n opacity: 0;\n transform: rotate(0deg);\n transition:\n transform var(--_spring-spatial),\n opacity var(--_spring-effects);\n flex: 0 0 auto;\n}\n\n/* Descending rotates the arrow to point down (kept animated). */\n.md-table-sort-label__icon--desc {\n transform: rotate(180deg);\n}\n\n/* Reveal the arrow on hover / keyboard focus of an unsorted column (MUI parity). */\n:host(:hover:not(.md-table-sort-label--disabled)) .md-table-sort-label__icon,\n:host(:focus-visible) .md-table-sort-label__icon {\n opacity: var(--_hover-opacity);\n}\n\n/* Active column: kept visible + highlighted (inherits --_active-color via\n currentColor), regardless of hover. */\n:host(.md-table-sort-label--active) .md-table-sort-label__icon,\n.md-table-sort-label__icon--active {\n opacity: 1;\n}\n\n.md-table-sort-label__text {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n}\n\n/* Visually-hidden live region announcing the sort direction (MUI parity). */\n.md-table-sort-label__sr {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host,\n .md-table-sort-label__icon {\n transition: none;\n }\n}\n\n@media (forced-colors: active) {\n :host(.md-table-sort-label--active) {\n color: Highlight;\n }\n}\n\n/* Custom ligature icon (icon prop) matches the built-in SVG footprint. */\n.md-table-sort-label__icon-glyph {\n font-size: 18px;\n line-height: 1;\n}\n\n/* Material Symbols ligature font must be declared INSIDE the shadow root —\n the document-level class can't cross the boundary (glyph names rendered\n as plain text otherwise). */\n.material-symbols-outlined {\n font-family: var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');\n font-weight: normal;\n font-style: normal;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n overflow-wrap: normal;\n direction: ltr;\n font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\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 { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n/** Material Symbols 24px `arrow_upward` glyph. */\nconst ICON_ARROW = 'M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z';\n\n/**\n * Material Design 3 — Table Sort Label.\n *\n * A clickable header label with a sort indicator that reflects the current\n * sort state. Place inside a `<md-table-cell head>`.\n *\n * Wiring:\n * 1. Set `column=\"<id>\"`\n * 2. The parent `<md-table>` listens for `mdSortRequest` (auto-bubbled),\n * updates its `sort-by` / `sort-order`, and PUSHES the resulting\n * `active` / `order` back into every sort label — no observers.\n *\n * The arrow is hidden at rest and fades in at 60% opacity on hover or keyboard\n * focus, so an unsorted column advertises sorting only when it is pointed at.\n * Once the column is the sort key the arrow stays fully opaque, tinted with the\n * active colour, and rotates 180° to point down for descending. The rotation\n * runs on the spatial spring, the colour/opacity on the effects spring.\n */\n@Component({\n tag: 'md-table-sort-label',\n styleUrl: 'md-table-sort-label.css',\n shadow: true,\n})\nexport class MdTableSortLabel {\n /**\n * Column id — matched against the `<md-table>`'s `sort-by` value.\n * Required.\n */\n @Prop() column: string = '';\n\n /** Disabled — non-interactive. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Direction the arrow points by default (the value used when this column\n * becomes the active sort for the first time).\n */\n @Prop() defaultOrder: 'asc' | 'desc' = 'asc';\n\n /**\n * Visual position of the arrow icon relative to the label.\n * - `end` — after the label (default)\n * - `start` — before the label\n */\n @Prop({ reflect: true }) iconPosition: 'start' | 'end' = 'end';\n\n /**\n * Custom sort-arrow icon: a Material Symbols ligature name (e.g. \"north\",\n * \"expand_less\"). Empty = the built-in SVG arrow. The icon still rotates\n * 180deg for descending via the same CSS, so pick an \"ascending-pointing\"\n * glyph.\n */\n @Prop() icon: string = '';\n\n /** Whether this column is the active sort. Pushed by the parent `<md-table>`. */\n @Prop({ mutable: true, reflect: true }) active: boolean = false;\n\n /** Active sort direction. Pushed by the parent `<md-table>`. */\n @Prop({ mutable: true, reflect: true }) order: 'asc' | 'desc' | 'none' = 'none';\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 /** Fired when the user requests to sort by this column. */\n @Event() mdSortRequest: EventEmitter<{ column: string; defaultOrder: 'asc' | 'desc' }>;\n\n private handleClick = () => {\n if (this.disabled || !this.column) return;\n this.mdSortRequest.emit({ column: this.column, defaultOrder: this.defaultOrder });\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleClick();\n }\n };\n\n private renderArrow() {\n return (\n <span\n class={{\n 'md-table-sort-label__icon': true,\n 'md-table-sort-label__icon--active': this.active,\n 'md-table-sort-label__icon--desc': this.active && this.order === 'desc',\n }}\n part=\"icon\"\n aria-hidden=\"true\"\n >\n {this.icon ? (\n <span class=\"material-symbols-outlined md-table-sort-label__icon-glyph\">{this.icon}</span>\n ) : (\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\">\n <path d={ICON_ARROW} />\n </svg>\n )}\n </span>\n );\n }\n\n render() {\n\n // aria-sort actually belongs on the parent columnheader cell (md-table-cell head),\n // but we surface it on the host as well so it's present regardless of how the\n // header is composed.\n return (\n <Host\n class={{\n 'md-table-sort-label': true,\n 'md-table-sort-label--active': this.active,\n 'md-table-sort-label--disabled': this.disabled,\n }}\n role=\"button\"\n tabindex={this.disabled ? '-1' : '0'}\n aria-disabled={this.disabled ? 'true' : null}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n >\n {this.iconPosition === 'start' && this.renderArrow()}\n <span class=\"md-table-sort-label__text\" part=\"label\">\n <slot />\n </span>\n {this.iconPosition === 'end' && this.renderArrow()}\n <span class=\"md-table-sort-label__sr\" aria-live=\"polite\">\n {this.active ? (this.order === 'desc' ? 'sorted descending' : 'sorted ascending') : ''}\n </span>\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAsB,IAAM,qzFCGlC,MAAMC,EAAa,8D,MAyBNC,EAAgBC,EAAA,MAAAD,UAAAE,EAL7B,WAAAC,CAAAC,G,+GAUUC,KAAAC,OAAiB,GAGAD,KAAAE,SAAoB,MAMrCF,KAAAG,aAA+B,MAOdH,KAAAI,aAAgC,MAQjDJ,KAAAK,KAAe,GAGiBL,KAAAM,OAAkB,MAGlBN,KAAAO,MAAiC,OAOhDP,KAAAQ,QAAiC,EAKlDR,KAAAS,YAAc,KACpB,GAAIT,KAAKE,WAAaF,KAAKC,OAAQ,OACnCD,KAAKU,cAAcC,KAAK,CAAEV,OAAQD,KAAKC,OAAQE,aAAcH,KAAKG,cAAe,EAG3EH,KAAAY,cAAiBC,IACvB,GAAIb,KAAKE,SAAU,OACnB,GAAIW,EAAEC,MAAQ,SAAWD,EAAEC,MAAQ,IAAK,CACtCD,EAAEE,iBACFf,KAAKS,a,EAuDV,CAnDS,WAAAO,GACN,OACEC,EAAA,QACEC,MAAO,CACL,4BAA6B,KAC7B,oCAAqClB,KAAKM,OAC1C,kCAAmCN,KAAKM,QAAUN,KAAKO,QAAU,QAEnEY,KAAK,OAAM,cACC,QAEXnB,KAAKK,KACJY,EAAA,QAAMC,MAAM,6DAA6DlB,KAAKK,MAE9EY,EAAA,OAAKG,QAAQ,YAAYC,MAAM,KAAKC,OAAO,KAAKC,KAAK,gBACnDN,EAAA,QAAMO,EAAG9B,K,CAOnB,MAAA+B,GAKE,OACER,EAACS,EAAI,CAAAZ,IAAA,2CACHI,MAAO,CACL,sBAAuB,KACvB,8BAA+BlB,KAAKM,OACpC,gCAAiCN,KAAKE,UAExCyB,KAAK,SACLC,SAAU5B,KAAKE,SAAW,KAAO,IAAG,gBACrBF,KAAKE,SAAW,OAAS,KACxC2B,QAAS7B,KAAKS,YACdqB,UAAW9B,KAAKY,eAEfZ,KAAKI,eAAiB,SAAWJ,KAAKgB,cACvCC,EAAA,QAAAH,IAAA,2CAAMI,MAAM,4BAA4BC,KAAK,SAC3CF,EAAA,QAAAH,IAAA,8CAEDd,KAAKI,eAAiB,OAASJ,KAAKgB,cACrCC,EAAA,QAAAH,IAAA,2CAAMI,MAAM,0BAAyB,YAAW,UAC7ClB,KAAKM,OAAUN,KAAKO,QAAU,OAAS,oBAAsB,mBAAsB,I","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as t,H as e,h as a,d as s,t as o}from"./p-bSpXNc5J.js";const i=()=>`:host{--_color:var(--md-table-toolbar-color, var(--md-sys-color-on-surface, #1C1B1F));--_bg:var(--md-table-toolbar-bg, transparent);--_sel-bg:var(--md-table-toolbar-selection-bg, var(--md-sys-color-secondary-container, #E8DEF8));--_sel-color:var(--md-table-toolbar-selection-color, var(--md-sys-color-on-secondary-container, #1E192B));--_pad-block:var(--md-table-toolbar-padding-block, var(--md-sys-spacing-inset-md, 12px));--_pad-inline:var(--md-table-toolbar-padding-inline, 24px);--_min-h:var(--md-table-toolbar-min-height, calc(64px + var(--md-sys-density-scale, 0) * 4px));--_motion-duration:var(--md-sys-motion-spring-effects-default-duration, 200ms);--_motion-easing:var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.8, 0.34, 1));display:flex;align-items:center;gap:max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px));padding-block:var(--_pad-block);padding-inline:max(12px, calc(24px + var(--md-sys-density-scale, 0) * 2px));min-block-size:var(--_min-h);background-color:var(--_bg);color:var(--_color);position:relative;isolation:isolate;transition:background-color var(--_motion-duration) var(--_motion-easing), color var(--_motion-duration) var(--_motion-easing)}:host(.md-table-toolbar--compact){--_pad-block:6px;--_min-h:48px}:host(.md-table-toolbar--selection-mode){background-color:var(--_sel-bg);color:var(--_sel-color)}.md-table-toolbar__leading{display:inline-flex;align-items:center;gap:8px;flex:0 0 auto}.md-table-toolbar__leading[hidden]{display:none}.md-table-toolbar__main{flex:1 1 auto;min-inline-size:0}.md-table-toolbar__actions{display:inline-flex;align-items:center;gap:max(0px, calc(4px + var(--md-sys-density-scale, 0) * 1px));flex:0 0 auto;--md-icon-button-container-width:max(32px, calc(40px + var(--md-sys-density-scale, 0) * 4px));--md-icon-button-container-height:max(32px, calc(40px + var(--md-sys-density-scale, 0) * 4px));--md-icon-button-icon-size:max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px))}.md-table-toolbar__titles{display:flex;flex-direction:column;gap:2px}.md-table-toolbar__headline{margin:0;font-family:var(--md-sys-typescale-title-large-font-family, Roboto, sans-serif);font-size:max(16px, calc(22px + var(--md-sys-density-scale, 0) * 1px));font-weight:var(--md-sys-typescale-title-large-font-weight, 400);line-height:max(22px, calc(28px + var(--md-sys-density-scale, 0) * 1px));letter-spacing:0;color:inherit}:host(.md-table-toolbar--compact) .md-table-toolbar__headline{font-size:var(--md-sys-typescale-title-medium-font-size, 16px);line-height:var(--md-sys-typescale-title-medium-line-height, 24px)}.md-table-toolbar__supporting{margin:0;font-family:var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-body-medium-font-size, 14px);line-height:var(--md-sys-typescale-body-medium-line-height, 20px);color:var(--md-sys-color-on-surface-variant, #49454F)}:host(.md-table-toolbar--selection-mode) .md-table-toolbar__supporting{color:inherit;opacity:0.85}.md-table-toolbar__selection-caption{font-family:var(--md-sys-typescale-title-medium-font-family, Roboto, sans-serif);font-size:max(13px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:500;line-height:max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px));animation:md-table-toolbar-fade var(--_motion-duration) var(--_motion-easing)}@keyframes md-table-toolbar-fade{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){:host{transition:none}.md-table-toolbar__selection-caption{animation:none}}: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 l=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.headline="";this.supportingText="";this.numSelected=0;this.autoBind=false;this.labelSelected="%count% selected";this.compact=false;this.density=0;this.hasSelectionActions=false;this.hasActions=false;this.hasLeading=false;this.parentTable=null;this.boundListener=null}componentDidLoad(){const t=this.el.shadowRoot;if(!t)return;this.bindSlotChanges(t);if(this.autoBind){this.parentTable=this.el.closest("md-table-container")?.querySelector("md-table")??null;if(!this.parentTable)return;this.boundListener=t=>{const e=t.detail;this.numSelected=e?.count??0};this.parentTable.addEventListener("mdSelectionChange",this.boundListener)}}disconnectedCallback(){if(this.parentTable&&this.boundListener){this.parentTable.removeEventListener("mdSelectionChange",this.boundListener)}this.parentTable=null;this.boundListener=null}bindSlotChanges(t){const e=t.querySelector('slot[name="leading"]');const a=t.querySelector('slot[name="actions"]');const s=t.querySelector('slot[name="selection-actions"]');e?.addEventListener("slotchange",(()=>{this.hasLeading=e.assignedElements().length>0}));a?.addEventListener("slotchange",(()=>{this.hasActions=a.assignedElements().length>0}));s?.addEventListener("slotchange",(()=>{this.hasSelectionActions=s.assignedElements().length>0}));this.hasLeading=!!e&&e.assignedElements().length>0;this.hasActions=!!a&&a.assignedElements().length>0;this.hasSelectionActions=!!s&&s.assignedElements().length>0}get inSelectionMode(){return this.numSelected>0}get selectionLabel(){return this.labelSelected.replace("%count%",this.numSelected.toLocaleString())}render(){return a(s,{key:"d509dc8677829b9eabc1ab09e3f200eee2940013",class:{"md-table-toolbar":true,"md-table-toolbar--compact":this.compact,"md-table-toolbar--selection-mode":this.inSelectionMode},role:"toolbar","aria-label":this.headline||"Table toolbar"},a("div",{key:"795bd82dc57564b7f67867abfba4c3242e082052",class:"md-table-toolbar__leading",part:"leading",hidden:!this.hasLeading&&!this.inSelectionMode},!this.inSelectionMode&&a("slot",{key:"e7c3c5d8a10c25fd87deb60a55b5df54fcb87615",name:"leading"})),a("div",{key:"3fe66dd47ee8bb78e590b13c3c09e70043f7ec65",class:"md-table-toolbar__main",part:"main"},this.inSelectionMode?a("span",{class:"md-table-toolbar__selection-caption",part:"selection-caption","aria-live":"polite"},this.selectionLabel):a("div",{class:"md-table-toolbar__titles"},this.headline&&a("h2",{class:"md-table-toolbar__headline",part:"headline"},a("slot",{name:"headline"},this.headline)),this.supportingText&&a("p",{class:"md-table-toolbar__supporting",part:"supporting-text"},a("slot",{name:"supporting-text"},this.supportingText)),!this.headline&&!this.supportingText&&a("slot",{name:"title-area"}))),a("div",{key:"8aec03944525b513de402ae00b06371b715fabc8",class:"md-table-toolbar__actions",part:"actions"},this.inSelectionMode?a("slot",{name:"selection-actions"}):a("slot",{name:"actions"})))}get el(){return this}static get style(){return i()}},[257,"md-table-toolbar",{headline:[1],supportingText:[1,"supporting-text"],numSelected:[1538,"num-selected"],autoBind:[4,"auto-bind"],labelSelected:[1,"label-selected"],compact:[516],density:[514],hasSelectionActions:[32],hasActions:[32],hasLeading:[32]}]);function n(){if(typeof customElements==="undefined"){return}const t=["md-table-toolbar"];t.forEach((t=>{switch(t){case"md-table-toolbar":if(!customElements.get(o(t))){customElements.define(o(t),l)}break}}))}n();const r=l;const c=n;export{r as MdTableToolbar,c as defineCustomElement};
|
|
2
|
+
//# sourceMappingURL=md-table-toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mdTableToolbarCss","MdTableToolbar","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","headline","supportingText","numSelected","autoBind","labelSelected","compact","density","hasSelectionActions","hasActions","hasLeading","parentTable","boundListener","componentDidLoad","shadow","el","shadowRoot","bindSlotChanges","closest","querySelector","e","detail","count","addEventListener","disconnectedCallback","removeEventListener","leadingSlot","actionsSlot","selSlot","assignedElements","length","inSelectionMode","selectionLabel","replace","toLocaleString","render","h","Host","key","class","role","part","hidden","name"],"sources":["src/components/md-table-toolbar/md-table-toolbar.css?tag=md-table-toolbar&encapsulation=shadow","src/components/md-table-toolbar/md-table-toolbar.tsx"],"sourcesContent":["/* ==========================================================\n md-table-toolbar — toolbar above a <md-table>\n\n PUBLIC CSS CUSTOM PROPERTIES:\n --md-table-toolbar-color Foreground color\n --md-table-toolbar-bg Background color (default mode)\n --md-table-toolbar-selection-bg Background color (selection mode)\n --md-table-toolbar-selection-color Foreground color (selection mode)\n --md-table-toolbar-padding-block Top/bottom padding\n --md-table-toolbar-padding-inline Left/right padding\n --md-table-toolbar-min-height Minimum height (default: 64px)\n\n CSS PARTS:\n leading Container for the `leading` slot\n main Container for headline / supporting text\n headline <h2> element\n supporting-text <p> element\n selection-caption \"%count% selected\" caption (selection mode)\n actions Container for actions / selection-actions slots\n ========================================================== */\n:host {\n --_color: var(--md-table-toolbar-color, var(--md-sys-color-on-surface, #1C1B1F));\n --_bg: var(--md-table-toolbar-bg, transparent);\n --_sel-bg: var(--md-table-toolbar-selection-bg, var(--md-sys-color-secondary-container, #E8DEF8));\n --_sel-color: var(--md-table-toolbar-selection-color, var(--md-sys-color-on-secondary-container, #1E192B));\n /* Follow a global `data-density` ancestor (padding + height tighten with the\n scale; unchanged at density 0). The `compact` boolean still force-overrides. */\n --_pad-block: var(--md-table-toolbar-padding-block, var(--md-sys-spacing-inset-md, 12px));\n --_pad-inline: var(--md-table-toolbar-padding-inline, 24px);\n --_min-h: var(--md-table-toolbar-min-height, calc(64px + var(--md-sys-density-scale, 0) * 4px));\n\n /* Effects spring for the selection-mode color swap (house pairing rule). */\n --_motion-duration: var(--md-sys-motion-spring-effects-default-duration, 200ms);\n --_motion-easing: var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.8, 0.34, 1));\n\n display: flex;\n align-items: center;\n gap: max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px));\n padding-block: var(--_pad-block);\n padding-inline: max(12px, calc(24px + var(--md-sys-density-scale, 0) * 2px));\n min-block-size: var(--_min-h);\n background-color: var(--_bg);\n color: var(--_color);\n position: relative;\n isolation: isolate;\n transition:\n background-color var(--_motion-duration) var(--_motion-easing),\n color var(--_motion-duration) var(--_motion-easing);\n}\n\n:host(.md-table-toolbar--compact) {\n --_pad-block: 6px;\n --_min-h: 48px;\n}\n\n/* MD3 Expressive: smooth color transition into selection-mode */\n:host(.md-table-toolbar--selection-mode) {\n background-color: var(--_sel-bg);\n color: var(--_sel-color);\n}\n\n/* Layout slots */\n.md-table-toolbar__leading {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex: 0 0 auto;\n}\n.md-table-toolbar__leading[hidden] { display: none; }\n\n.md-table-toolbar__main {\n flex: 1 1 auto;\n min-inline-size: 0;\n}\n\n.md-table-toolbar__actions {\n display: inline-flex;\n align-items: center;\n gap: max(0px, calc(4px + var(--md-sys-density-scale, 0) * 1px));\n flex: 0 0 auto;\n --md-icon-button-container-width: max(32px, calc(40px + var(--md-sys-density-scale, 0) * 4px));\n --md-icon-button-container-height: max(32px, calc(40px + var(--md-sys-density-scale, 0) * 4px));\n --md-icon-button-icon-size: max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px));\n}\n\n/* ----------- Titles ----------- */\n.md-table-toolbar__titles {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.md-table-toolbar__headline {\n margin: 0;\n font-family: var(--md-sys-typescale-title-large-font-family, Roboto, sans-serif);\n font-size: max(16px, calc(22px + var(--md-sys-density-scale, 0) * 1px));\n font-weight: var(--md-sys-typescale-title-large-font-weight, 400);\n line-height: max(22px, calc(28px + var(--md-sys-density-scale, 0) * 1px));\n letter-spacing: 0;\n color: inherit;\n}\n\n:host(.md-table-toolbar--compact) .md-table-toolbar__headline {\n font-size: var(--md-sys-typescale-title-medium-font-size, 16px);\n line-height: var(--md-sys-typescale-title-medium-line-height, 24px);\n}\n\n.md-table-toolbar__supporting {\n margin: 0;\n font-family: var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);\n font-size: var(--md-sys-typescale-body-medium-font-size, 14px);\n line-height: var(--md-sys-typescale-body-medium-line-height, 20px);\n color: var(--md-sys-color-on-surface-variant, #49454F);\n}\n\n:host(.md-table-toolbar--selection-mode) .md-table-toolbar__supporting {\n color: inherit;\n opacity: 0.85;\n}\n\n/* ----------- Selection caption ----------- */\n.md-table-toolbar__selection-caption {\n font-family: var(--md-sys-typescale-title-medium-font-family, Roboto, sans-serif);\n font-size: max(13px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));\n font-weight: 500;\n line-height: max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px));\n animation: md-table-toolbar-fade var(--_motion-duration) var(--_motion-easing);\n}\n\n@keyframes md-table-toolbar-fade {\n from { opacity: 0; transform: translateX(-8px); }\n to { opacity: 1; transform: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host { transition: none; }\n .md-table-toolbar__selection-caption { animation: none; }\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 { Component, Host, h, Prop, Element, State } from '@stencil/core';\n\n/**\n * Material Design 3 — Table Toolbar.\n *\n * The header bar above a `<md-table>` (typically dropped into a\n * `<md-table-container slot=\"top\">`). Shows a title + supporting text and\n * a row of action items. Switches into a \"selection\" mode when one or more\n * rows are selected (matching the MUI / MD3 data-table pattern).\n *\n * Two modes:\n * - Default — shows the headline + supporting text + actions\n * - Selection — shows \"%count% selected\" + selection-actions (when\n * `num-selected > 0`)\n *\n * The toolbar can listen to its closest `<md-table>`'s `mdSelectionChange`\n * event automatically (via `auto-bind`) — set `auto-bind` on the toolbar\n * and selection state will track the table without any glue code.\n */\n@Component({\n tag: 'md-table-toolbar',\n styleUrl: 'md-table-toolbar.css',\n shadow: true,\n})\nexport class MdTableToolbar {\n @Element() el!: HTMLElement;\n\n /** Title displayed when no rows are selected. */\n @Prop() headline: string = '';\n\n /** Optional supporting text under the headline. */\n @Prop({ attribute: 'supporting-text' }) supportingText: string = '';\n\n /** Number of selected rows (controlled). */\n @Prop({ mutable: true, reflect: true, attribute: 'num-selected' })\n numSelected: number = 0;\n\n /**\n * Auto-bind to the closest `<md-table>`'s `mdSelectionChange`\n * event so `numSelected` updates with no glue code.\n */\n @Prop({ attribute: 'auto-bind' }) autoBind: boolean = false;\n\n /**\n * Custom label for the selection-mode caption.\n * Tokens: `%count%`.\n */\n @Prop({ attribute: 'label-selected' }) labelSelected: string = '%count% selected';\n\n /** Compact density for the toolbar (smaller padding / type). */\n @Prop({ reflect: true }) compact: boolean = false;\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 hasSelectionActions: boolean = false;\n @State() private hasActions: boolean = false;\n @State() private hasLeading: boolean = false;\n\n private parentTable: HTMLElement | null = null;\n private boundListener: ((e: Event) => void) | null = null;\n\n componentDidLoad() {\n const shadow = this.el.shadowRoot;\n if (!shadow) return;\n this.bindSlotChanges(shadow);\n\n if (this.autoBind) {\n this.parentTable = this.el.closest('md-table-container')?.querySelector('md-table') ?? null;\n if (!this.parentTable) return;\n this.boundListener = (e: Event) => {\n const detail = (e as CustomEvent).detail as { count: number };\n this.numSelected = detail?.count ?? 0;\n };\n this.parentTable.addEventListener('mdSelectionChange', this.boundListener);\n }\n }\n\n disconnectedCallback() {\n if (this.parentTable && this.boundListener) {\n this.parentTable.removeEventListener('mdSelectionChange', this.boundListener);\n }\n this.parentTable = null;\n this.boundListener = null;\n }\n\n private bindSlotChanges(shadow: ShadowRoot) {\n const leadingSlot = shadow.querySelector('slot[name=\"leading\"]') as HTMLSlotElement | null;\n const actionsSlot = shadow.querySelector('slot[name=\"actions\"]') as HTMLSlotElement | null;\n const selSlot = shadow.querySelector('slot[name=\"selection-actions\"]') as HTMLSlotElement | null;\n\n leadingSlot?.addEventListener('slotchange', () => {\n this.hasLeading = leadingSlot.assignedElements().length > 0;\n });\n actionsSlot?.addEventListener('slotchange', () => {\n this.hasActions = actionsSlot.assignedElements().length > 0;\n });\n selSlot?.addEventListener('slotchange', () => {\n this.hasSelectionActions = selSlot.assignedElements().length > 0;\n });\n\n this.hasLeading = !!leadingSlot && leadingSlot.assignedElements().length > 0;\n this.hasActions = !!actionsSlot && actionsSlot.assignedElements().length > 0;\n this.hasSelectionActions = !!selSlot && selSlot.assignedElements().length > 0;\n }\n\n private get inSelectionMode(): boolean {\n return this.numSelected > 0;\n }\n\n private get selectionLabel(): string {\n // Group digits (e.g. \"10,000,000 selected\") so large selection counts read\n // cleanly. Locale-aware via toLocaleString.\n return this.labelSelected.replace('%count%', this.numSelected.toLocaleString());\n }\n\n render() {\n return (\n <Host\n class={{\n 'md-table-toolbar': true,\n 'md-table-toolbar--compact': this.compact,\n 'md-table-toolbar--selection-mode': this.inSelectionMode,\n }}\n role=\"toolbar\"\n aria-label={this.headline || 'Table toolbar'}\n >\n <div class=\"md-table-toolbar__leading\" part=\"leading\" hidden={!this.hasLeading && !this.inSelectionMode}>\n {!this.inSelectionMode && <slot name=\"leading\" />}\n </div>\n\n <div class=\"md-table-toolbar__main\" part=\"main\">\n {this.inSelectionMode ? (\n <span class=\"md-table-toolbar__selection-caption\" part=\"selection-caption\" aria-live=\"polite\">\n {this.selectionLabel}\n </span>\n ) : (\n <div class=\"md-table-toolbar__titles\">\n {this.headline && (\n <h2 class=\"md-table-toolbar__headline\" part=\"headline\">\n <slot name=\"headline\">{this.headline}</slot>\n </h2>\n )}\n {this.supportingText && (\n <p class=\"md-table-toolbar__supporting\" part=\"supporting-text\">\n <slot name=\"supporting-text\">{this.supportingText}</slot>\n </p>\n )}\n {!this.headline && !this.supportingText && (\n <slot name=\"title-area\" />\n )}\n </div>\n )}\n </div>\n\n <div class=\"md-table-toolbar__actions\" part=\"actions\">\n {this.inSelectionMode ? (\n <slot name=\"selection-actions\" />\n ) : (\n <slot name=\"actions\" />\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as t,H as e,c as s,h as i,d as o,t as n}from"./p-bSpXNc5J.js";import{c as a}from"./p-Cch_V1vi.js";import{d as r}from"./p-DfcpeJAu.js";const l=()=>`:host{--_fx-fast:var(--md-sys-motion-spring-effects-fast-duration, 150ms) var(--md-sys-motion-spring-effects-fast-easing, cubic-bezier(0.31, 0.94, 0.34, 1));--_fx-default:var(--md-sys-motion-spring-effects-default-duration, 200ms) var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.8, 0.34, 1));--_row-h-compact:var(--md-table-row-height-compact, max(28px, calc(36px + var(--md-sys-density-scale, 0) * 4px)));--_row-h-standard:var(--md-table-row-height-standard, calc(52px + var(--md-sys-density-scale, 0) * 4px));--_row-h-comfortable:var(--md-table-row-height-comfortable, max(40px, calc(60px + var(--md-sys-density-scale, 0) * 4px)));--_row-h:var(--_row-h-standard);--_head-h:var(--md-table-header-height, max(40px, calc(56px + var(--md-sys-density-scale, 0) * 4px)));--_cell-pad-inline:var(--md-table-cell-padding-inline, var(--md-sys-spacing-inset-lg, 16px));--_cell-pad-block:var(--md-table-cell-padding-block, var(--md-sys-spacing-inset-sm, 8px));--_divider-color:var(--md-table-divider-color, var(--md-sys-color-outline-variant, #CAC4D0));--_divider:var(--_divider-color);--_stripe-color:var( --md-table-stripe-color, color-mix( in srgb, var(--md-sys-color-on-surface, #1C1B1F) calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 50%), transparent ) );--_head-bg:var(--md-table-head-bg, var(--md-sys-color-surface-container, #F3EDF7));--_head-color:var(--md-table-head-color, var(--md-sys-color-on-surface-variant, #49454F));--_foot-bg:var(--md-table-foot-bg, var(--md-sys-color-surface-container-low, #F7F2FA));--_hover-layer:color-mix( in srgb, var(--md-table-row-hover-color, var(--md-sys-color-on-surface, #1C1B1F)) calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 100%), transparent );--_row-selected-bg:var(--md-table-row-selected-bg, var(--md-sys-color-secondary-container, #E8DEF8));--_row-selected-color:var( --md-table-row-selected-color, var(--md-sys-color-on-secondary-container, #1E192B) );display:block;inline-size:100%;position:relative;isolation:isolate;color:var(--md-sys-color-on-surface, #1C1B1F);font-family:var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);font-size:max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));line-height:max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));letter-spacing:var(--md-sys-typescale-body-medium-letter-spacing, 0.25px)}:host(.md-table--density-compact){--_row-h:var(--_row-h-compact);--_cell-pad-inline:var(--md-table-cell-padding-inline, 12px);--_cell-pad-block:var(--md-table-cell-padding-block, 4px);--md-checkbox-touch-target-size:32px}:host(.md-table--density-comfortable){--_row-h:var(--_row-h-comfortable);--_cell-pad-inline:var(--md-table-cell-padding-inline, 20px)}:host(.md-table--no-dividers){--_divider:transparent}:host(:not(.md-table--hoverable)){--_hover-layer:transparent}.md-table__caption{padding:12px var(--_cell-pad-inline);font-family:var(--md-sys-typescale-title-small-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-title-small-font-size, 14px);font-weight:var(--md-sys-typescale-title-small-font-weight, 500);line-height:var(--md-sys-typescale-title-small-line-height, 20px);color:var(--md-sys-color-on-surface-variant, #49454F)}.md-table__grid{display:grid;grid-template-columns:var( --_columns-template, var(--md-table-columns-template, var(--_derived-template, none)) );align-items:stretch;min-inline-size:var(--_min-width, var(--md-table-min-width, max-content))}.md-table__frozen{display:flex;flex-direction:column;min-block-size:0;inline-size:100%;position:relative}.md-table__head-scroll{flex:0 0 auto;inline-size:100%;overflow:hidden;background-color:var(--_head-bg, var(--md-sys-color-surface-container, #F3EDF7));box-shadow:inset 0 -1px var(--_divider, transparent)}.md-table__body-scroll{flex:1 1 auto;inline-size:100%;min-block-size:0;max-block-size:var(--md-table-body-max-h, none);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}:host(:not([scrollbar='gutter'])) .md-table__body-scroll{scrollbar-width:none}.md-table__body-scroll:focus-visible{outline:2px solid var(--md-sys-color-secondary, #625B71);outline-offset:-2px}:host(:not([scrollbar='gutter'])) .md-table__body-scroll::-webkit-scrollbar{display:none}:host([scrollbar='gutter']) .md-table__body-scroll{scrollbar-gutter:stable}:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar{width:10px}:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar-thumb{background:var(--md-sys-color-outline, #79747E);border-radius:999px;border:2px solid transparent;background-clip:content-box}:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar-thumb:hover{background:var(--md-sys-color-on-surface-variant, #49454F);background-clip:content-box}:host([scrollbar='gutter']) .md-table__vscroll{display:none !important}.md-table__vscroll{position:absolute;inset-inline-end:3px;inline-size:8px;display:none;z-index:3;pointer-events:none}.md-table__vscroll-thumb{position:absolute;inset-inline:0;border-radius:999px;background:color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 50%, transparent);pointer-events:auto;touch-action:none}.md-table__vscroll-thumb:hover,.md-table__vscroll-thumb:active{background:color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 60%, transparent)}.md-table__hscroll{display:none;position:relative;flex:0 0 auto;block-size:10px;margin-inline:8px;margin-block:2px}.md-table__hscroll-thumb{position:absolute;inset-block:1px;inline-size:40px;min-inline-size:24px;background:var(--md-sys-color-outline, #79747E);border-radius:999px;cursor:grab;touch-action:none;transition:background-color var(--_fx-fast, 150ms ease)}.md-table__hscroll-thumb:hover{background:var(--md-sys-color-outline, #79747E)}.md-table__hscroll-thumb:active{cursor:grabbing;background:var(--md-sys-color-on-surface-variant, #49454F)}.md-table__grid--head{min-inline-size:max(100%, var(--_min-width, var(--md-table-min-width, 0px)));inline-size:max-content}.md-table__grid--body{min-inline-size:max(100%, var(--_min-width, var(--md-table-min-width, 0px)))}.md-table__bar{block-size:16px;border-radius:var(--md-sys-shape-corner-full, 9999px);background:linear-gradient( 90deg, var(--md-sys-color-surface-container-high, #ECE6F0) 25%, var(--md-sys-color-surface-container, #F3EDF7) 37%, var(--md-sys-color-surface-container-high, #ECE6F0) 63% );background-size:400% 100%;animation:md-table-shimmer 1.4s ease infinite}@keyframes md-table-shimmer{0%{background-position:100% 50%}100%{background-position:0 50%}}:host(.md-table--loading-skeleton) ::slotted(md-table-body),:host(.md-table--loading-skeleton) ::slotted(md-table-foot){display:none}.md-table__skeleton-row{grid-column:1 / -1;display:grid;grid-template-columns:subgrid;align-items:center;min-block-size:var(--_row-h);border-block-end:1px solid var(--_divider)}.md-table__skeleton-row:last-child{border-block-end:none}.md-table__skeleton-row .md-table__bar{margin-inline:var(--_cell-pad-inline)}.md-table__loading{position:absolute;inset:0;z-index:3;pointer-events:none}.md-table__scrim{position:absolute;inset-block-start:var(--_head-h);inset-block-end:0;inset-inline:0;background:color-mix(in srgb, var(--md-sys-color-surface, #FEF7FF) 55%, transparent);pointer-events:auto}.md-table__progress{position:absolute;inset-block-start:var(--_head-h);inset-inline:0}.md-table__progress md-progress-indicator{display:block;inline-size:100%}.md-table__empty{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;min-block-size:var(--md-table-empty-min-height, 160px);padding:32px var(--_cell-pad-inline);text-align:center;color:var(--md-sys-color-on-surface-variant, #49454F)}:host(.md-table--empty){display:flex;flex-direction:column;min-block-size:100%}:host(.md-table--empty) .md-table__grid{flex:0 0 auto}:host(.md-table--empty) .md-table__empty{flex:1 1 auto}.md-table__body-scroll{display:flex;flex-direction:column}.md-table__body-scroll .md-table__empty{flex:1 1 auto}@media (prefers-reduced-motion: reduce){.md-table__bar{animation:none}}@media (forced-colors: active){.md-table__vscroll-thumb,.md-table__hscroll-thumb{background:ButtonText;border:1px solid ButtonText;forced-color-adjust:none}}@media (forced-colors: active){:host{--_divider:CanvasText}}.md-table__sr-status{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}: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 d=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.mdSortChange=s(this,"mdSortChange",7);this.mdSelectionChange=s(this,"mdSelectionChange",7);this.mdPinChange=s(this,"mdPinChange",7);this.mdColumnVisibilityChange=s(this,"mdColumnVisibilityChange",7);this.mdScroll=s(this,"mdScroll",7);this.density="standard";this.columnTemplate="";this.columns=0;this.minWidth="";this.stickyHeader=false;this.frozenHeader=false;this.keepHeight=true;this.scrollbar="overlay";this.pinMode="stack";this.pinIcon="";this.stickyFooter=false;this.striped=false;this.noDividers=false;this.hoverable=true;this.motion="expressive";this.selection="none";this.sortBy="";this.sortOrder="asc";this.loading=false;this.loadingMode="overlay";this.loadingRows=4;this.empty=false;this.label="";this.caption="";this.summary="";this.rowOffset=0;this.rowCount=0;this.selectionCache={count:0,total:0,values:[],all:false,indeterminate:false};this.bulkSelecting=false;this.hDragging=false;this.hDragStartX=0;this.hDragStartScroll=0;this.vDragging=false;this.vDragStartY=0;this.vDragStartScroll=0;this.updateHScroll=()=>{const t=this.bodyScrollEl;const e=this.hTrackEl;const s=this.hThumbEl;if(!t||!e||!s)return;const i=t.scrollWidth-t.clientWidth;if(i<=1){e.style.display="none";return}e.style.display="block";const o=e.clientWidth;const n=Math.max(24,t.clientWidth/t.scrollWidth*o);const a=o-n;const r=Math.min(1,Math.abs(t.scrollLeft)/i);const l=(this.isRtl?1-r:r)*a;s.style.inlineSize=`${n}px`;s.style.transform=`translateX(${l}px)`};this.onHThumbPointerDown=t=>{if(!this.bodyScrollEl)return;this.hDragging=true;this.hDragStartX=t.clientX;this.hDragStartScroll=this.bodyScrollEl.scrollLeft;t.target.setPointerCapture?.(t.pointerId);t.preventDefault()};this.onHThumbPointerMove=t=>{if(!this.hDragging||!this.bodyScrollEl||!this.hTrackEl||!this.hThumbEl)return;const e=this.bodyScrollEl;const s=this.hTrackEl.clientWidth-this.hThumbEl.offsetWidth;const i=e.scrollWidth-e.clientWidth;const o=s>0?i/s:0;e.scrollLeft=this.hDragStartScroll+(t.clientX-this.hDragStartX)*o};this.onHThumbPointerUp=t=>{this.hDragging=false;try{t.target.releasePointerCapture?.(t.pointerId)}catch{}};this.updateVScroll=()=>{const t=this.bodyScrollEl;const e=this.vTrackEl;const s=this.vThumbEl;if(!t||!e||!s)return;if(this.scrollbar==="gutter"){e.style.display="none";return}const i=t.scrollHeight-t.clientHeight;if(i<=1){e.style.display="none";return}e.style.display="block";e.style.insetBlockStart=`${t.offsetTop}px`;e.style.blockSize=`${t.clientHeight}px`;const o=t.clientHeight;const n=Math.max(24,t.clientHeight/t.scrollHeight*o);const a=o-n;const r=t.scrollTop/i*a;s.style.blockSize=`${n}px`;s.style.transform=`translateY(${r}px)`};this.onVThumbPointerDown=t=>{if(!this.bodyScrollEl)return;this.vDragging=true;this.vDragStartY=t.clientY;this.vDragStartScroll=this.bodyScrollEl.scrollTop;t.target.setPointerCapture?.(t.pointerId);t.preventDefault()};this.onVThumbPointerMove=t=>{if(!this.vDragging||!this.bodyScrollEl||!this.vTrackEl||!this.vThumbEl)return;const e=this.bodyScrollEl;const s=this.vTrackEl.clientHeight-this.vThumbEl.offsetHeight;const i=e.scrollHeight-e.clientHeight;const o=s>0?i/s:0;e.scrollTop=this.vDragStartScroll+(t.clientY-this.vDragStartY)*o};this.onVThumbPointerUp=t=>{this.vDragging=false;try{t.target.releasePointerCapture?.(t.pointerId)}catch{}};this.srAnnouncement="";this.hasExpandableRow=false;this.onBodyScroll=()=>{if(this.headScrollEl&&this.bodyScrollEl){this.headScrollEl.scrollLeft=this.bodyScrollEl.scrollLeft}this.updateHScroll();this.updateVScroll();if(!this.scrollEmitQueued&&typeof requestAnimationFrame!=="undefined"){this.scrollEmitQueued=true;requestAnimationFrame((()=>{this.scrollEmitQueued=false;const t=this.bodyScrollEl;if(t)this.mdScroll.emit({scrollLeft:t.scrollLeft,scrollTop:t.scrollTop})}))}};this.onBodyKeyDown=t=>{const e=this.bodyScrollEl;if(!e||t.target!==e)return;const s=e.scrollWidth-e.clientWidth;if(s<=0)return;const i=48;let o=0;if(t.key==="ArrowRight")o=this.isRtl?-i:i;else if(t.key==="ArrowLeft")o=this.isRtl?i:-i;else if(t.key==="Home"&&(t.ctrlKey||t.metaKey))o=-Infinity;else if(t.key==="End"&&(t.ctrlKey||t.metaKey))o=Infinity;else return;t.preventDefault();const n=this.isRtl?-s:0;const a=this.isRtl?0:s;e.scrollLeft=Math.max(n,Math.min(a,o===-Infinity?n:o===Infinity?a:e.scrollLeft+o))};this.onBodyWheel=t=>{const e=this.bodyScrollEl;if(!e||e.scrollWidth<=e.clientWidth+1)return;const s=Math.abs(t.deltaX)>Math.abs(t.deltaY)?t.deltaX:t.shiftKey?t.deltaY:0;if(!s)return;const i=e.scrollWidth-e.clientWidth;const o=this.isRtl?-i:0;const n=this.isRtl?0:i;const a=Math.max(o,Math.min(n,e.scrollLeft+s));if(a!==e.scrollLeft){e.scrollLeft=a;t.preventDefault()}};this.pinnedColumns=new Map;this.hiddenColumns=new Set;this.scrollEmitQueued=false;this.pinBaseTracks=null;this.handleSlotChange=()=>{this.syncRows();this.syncSortLabels();this.recomputeSelection(false)}}onPinIconChange(){this.syncRows()}onPinModeChange(){this.syncStickyOffsets()}syncStickyOffsets(){const t=Array.from(this.el.querySelectorAll("md-table-row"));if(!t.length)return;const e=()=>t.forEach((t=>Array.from(t.children).forEach((t=>t.style.removeProperty("--_sticky-offset")))));if(this.pinMode!=="static"){e();return}const s=this.frozenHeader?this.bodyGridEl:this.el.shadowRoot?.querySelector(".md-table__grid");if(!s)return;const i=getComputedStyle(s).gridTemplateColumns.split(" ").map((t=>parseFloat(t))).filter((t=>!Number.isNaN(t)));if(!i.length)return;t.forEach((t=>{const e=Array.from(t.children).filter((t=>t.tagName==="MD-TABLE-CELL"&&!t.hasAttribute("data-md-col-hidden")));let s=0;e.forEach(((t,e)=>{if(t.getAttribute("sticky")==="start"){t.style.setProperty("--_sticky-offset",`${s}px`);s+=i[e]??0}}));let o=0;for(let t=e.length-1;t>=0;t--){if(e[t].getAttribute("sticky")==="end"){e[t].style.setProperty("--_sticky-offset",`${o}px`);o+=i[t]??0}}}))}get isRtl(){return getComputedStyle(this.el).direction==="rtl"}componentDidLoad(){this.syncRows();this.syncSortLabels();this.recomputeSelection(false);this.setupFrozenHeader();requestAnimationFrame((()=>this.scheduleHeaderFloors()));requestAnimationFrame((()=>requestAnimationFrame((()=>{if(!this.keepHeight)return;const t=this.frozenHeader&&this.bodyScrollEl?this.bodyScrollEl:this.el;const e=t.getBoundingClientRect().height;if(e>1)t.style.minBlockSize=`${Math.round(e)}px`}))))}componentDidRender(){this.syncFrozenColumns();this.updateHScroll();this.updateVScroll();this.syncStickyOffsets()}disconnectedCallback(){this.frozenObserver?.disconnect();this.frozenObserver=undefined}onSelectionModeChange(){let t=false;if(this.selection==="single"){const e=this.getSelectableRows().filter((t=>t.selected));if(e.length>1){this.bulkSelecting=true;try{e.slice(1).forEach((t=>t.selected=false))}finally{this.bulkSelecting=false}t=true}}this.syncRows();this.recomputeSelection(t)}onEmptyChange(){this.srAnnouncement=this.empty?"No data":""}onStickyHeaderChange(){this.syncRows();this.frozenObserver?.disconnect();this.frozenObserver=undefined;const t=(e=0)=>{if(!this.frozenHeader)return;if(this.bodyGridEl){this.setupFrozenHeader();return}if(e<30)requestAnimationFrame((()=>t(e+1)))};requestAnimationFrame((()=>t()))}setupFrozenHeader(){if(!this.frozenHeader||!this.bodyGridEl||typeof ResizeObserver==="undefined")return;this.frozenObserver?.disconnect();this.frozenObserver=new ResizeObserver((()=>{this.syncFrozenColumns();this.updateHScroll();this.updateVScroll();this.syncStickyOffsets()}));this.frozenObserver.observe(this.bodyGridEl);this.syncFrozenColumns();this.updateHScroll();this.updateVScroll()}syncFrozenColumns(){if(!this.frozenHeader||!this.bodyGridEl||!this.headGridEl)return;const t=Array.from(this.el.querySelectorAll("md-table-body md-table-row")).some((t=>t.getBoundingClientRect().height>0));if(!t)return;const e=getComputedStyle(this.bodyGridEl).gridTemplateColumns;if(e&&e!=="none"){const t=`${e} minmax(0, 1fr)`;if(this.headGridEl.style.gridTemplateColumns!==t){this.headGridEl.style.gridTemplateColumns=t}}}onLayoutChange(){this.syncRows()}onSortStateChange(){this.syncSortLabels()}async getSelection(){this.recomputeSelection(false);return this.selectionCache}async selectAll(){if(this.selection!=="multiple")return;this.bulkSelecting=true;try{this.getSelectableRows().forEach((t=>{if(!t.disabled)t.selected=true}))}finally{this.bulkSelecting=false}this.recomputeSelection()}async deselectAll(){this.bulkSelecting=true;try{this.getSelectableRows().forEach((t=>t.selected=false))}finally{this.bulkSelecting=false}this.recomputeSelection()}async toggleSelectAll(){if(this.selectionCache.all)await this.deselectAll();else await this.selectAll()}async setSort(t,e){this.sortBy=t;this.sortOrder=e;const s=this.armMotion();this.mdSortChange.emit({column:t,order:e});s?.()}static splitTracks(t){const e=[];let s=0;let i="";for(const o of t.trim()){if(o==="(")s++;else if(o===")")s--;if(/\s/.test(o)&&s===0){if(i){e.push(i);i=""}}else{i+=o}}if(i)e.push(i);return e}static directChildren(t,e){return Array.from(t.children).filter(e)}static isTag(t){return e=>e.tagName.toLowerCase()===t}ensurePinBase(e=false){if(this.pinBaseTracks)return true;const s=t=>{if(!e)console.warn(`[md-table] ${t}`)};if(!this.columnTemplate||this.columnTemplate.includes("repeat(")){s("pinColumn needs an explicit column-template without repeat().");return false}const i=this.constructor.splitTracks(this.columnTemplate);const o=Array.from(this.el.querySelectorAll("md-table-row"));for(const e of o){const o=t.directChildren(e,t.isTag("md-table-cell"));if(o.some((t=>t.hasAttribute("colspan")&&t.getAttribute("colspan")!=="1"))){s("pinColumn does not support colspan cells.");return false}if(o.length!==i.length){s("pinColumn needs every row to have one cell per column.");return false}o.forEach(((t,e)=>t.setAttribute("data-md-col",String(e))))}const n=this.el.querySelector("md-table-head md-table-row");const a=n?t.directChildren(n,t.isTag("md-table-cell")):[];a.forEach(((t,e)=>{const s=t.getAttribute("sticky");if(s==="start"||s==="end")this.pinnedColumns.set(e,s)}));this.pinBaseTracks=i;return true}async pinColumn(t,e){if(!this.ensurePinBase())return null;if(e==="none"||this.pinnedColumns.get(t)===e){this.pinnedColumns.delete(t)}else{this.pinnedColumns.set(t,e)}this.applyPinLayout();const s=this.pinnedColumns.get(t)??null;this.mdPinChange.emit({column:t,side:s});return s}async setColumnVisibility(t,e){if(!this.ensurePinBase())return true;if(t<0||t>=(this.pinBaseTracks?.length??0))return true;if(!e&&this.hiddenColumns.size>=this.pinBaseTracks.length-1&&!this.hiddenColumns.has(t)){console.warn("[md-table] setColumnVisibility: refusing to hide the last visible column.");return true}if(e)this.hiddenColumns.delete(t);else this.hiddenColumns.add(t);this.applyPinLayout();const s=!this.hiddenColumns.has(t);this.mdColumnVisibilityChange.emit({column:t,visible:s,hidden:Array.from(this.hiddenColumns).sort(((t,e)=>t-e))});return s}applyPinLayout(){const e=this.pinBaseTracks;const s=e.map(((t,e)=>e));const i=s.filter((t=>this.pinnedColumns.get(t)==="start"));const o=s.filter((t=>this.pinnedColumns.get(t)==="end"));const n=s.filter((t=>!this.pinnedColumns.has(t)));const a=[...i,...n,...o];this.el.querySelectorAll("md-table-row").forEach((e=>{a.forEach((s=>{const i=t.directChildren(e,(t=>t.getAttribute("data-md-col")===String(s)))[0]??null;if(!i)return;e.appendChild(i);const o=this.pinnedColumns.get(s);if(o)i.setAttribute("sticky",o);else i.removeAttribute("sticky");if(this.hiddenColumns.has(s))i.setAttribute("data-md-col-hidden","");else i.removeAttribute("data-md-col-hidden")}))}));const r=a.filter((t=>!this.hiddenColumns.has(t)));this.el.setAttribute("column-template",r.map((t=>e[t])).join(" "));this.syncHeaderContentFloors(r)}syncHeaderContentFloors(e){if(!this.frozenHeader||!this.pinBaseTracks)return;const s=this.pinBaseTracks;const i=e??s.map(((t,e)=>e));requestAnimationFrame((()=>{const e=this.el.querySelector("md-table-head md-table-row");if(!e)return;const o=i.map((i=>{const o=s[i];const n=t.directChildren(e,(t=>t.getAttribute("data-md-col")===String(i)))[0]??null;if(!n||n.getAttribute("padding")==="checkbox")return o;const a=Array.from(n.children);if(!a.length)return o;const r=Math.min(...a.map((t=>t.getBoundingClientRect().left)));const l=Math.max(...a.map((t=>t.getBoundingClientRect().right)));const d=l-r;if(d<=1)return o;const c=getComputedStyle(n);const h=(parseFloat(c.paddingInlineStart)||0)+(parseFloat(c.paddingInlineEnd)||0);const m=this.pinnedColumns.has(i)&&!n.hasAttribute("no-pin-indicator")?20:0;return`minmax(${Math.ceil(d+h+m)}px, ${o})`}));this.el.setAttribute("column-template",o.join(" "))}))}scheduleHeaderFloors(t=0){if(!this.frozenHeader||!this.columnTemplate)return;const e=this.el.querySelector("md-table-head md-table-sort-label");if(!e)return;const s=e.getBoundingClientRect().width>1;if(!s&&t<=30){requestAnimationFrame((()=>this.scheduleHeaderFloors(t+1)));return}if(this.ensurePinBase(true))this.syncHeaderContentFloors()}async animateNextChange(){this.armMotion()?.()}handleMotionArm(t){t.stopPropagation();this.armMotion()?.()}armMotion(){if(this.motion==="none")return null;const t=this.el.querySelector("md-table-body");if(!t)return null;return a(t,{enter:true,stagger:18,staggerCap:6,spring:"fast"})}handleSortRequest(t){t.stopPropagation();const e=t.detail.column;if(!e)return;const s=t.detail.defaultOrder==="desc"?"desc":"asc";let i=s;if(this.sortBy===e){const t=s==="asc"?"desc":"asc";i=this.sortOrder===s?t:this.sortOrder===t?"none":s}this.sortBy=i==="none"?"":e;this.sortOrder=i==="none"?"asc":i;const o=this.armMotion();this.mdSortChange.emit({column:this.sortBy,order:i});o?.()}handleSlottedCheckboxChange(t){if(this.selection==="none")return;const e=t.target;if(e.tagName!=="MD-CHECKBOX")return;const s=!!t.detail?.checked;queueMicrotask((()=>{if(e.closest("md-table-head")){if(this.selection!=="multiple")return;if(s)void this.selectAll();else void this.deselectAll();return}const t=e.closest("md-table-row");if(t&&t.closest("md-table-body")&&!t.disabled&&t.selectable!==false){t.selected=s}}))}handleRowgroupSlotChange(){this.syncRows();this.recomputeSelection(false);this.syncFrozenColumns();this.updateHScroll();this.updateVScroll()}handleRowSelectionChange(t){if(this.bulkSelecting)return;if(this.selection==="single"&&t.detail.selected){const e=t.target;this.bulkSelecting=true;try{this.getSelectableRows().forEach((t=>{if(t!==e)t.selected=false}))}finally{this.bulkSelecting=false}}this.recomputeSelection()}getSelectableRows(){return Array.from(this.el.querySelectorAll("md-table-row")).filter((t=>(t.closest("md-table-head")||t.closest("md-table-foot"))==null))}recomputeSelection(t=true){const e=this.getSelectableRows();const s=e.filter((t=>!t.disabled&&t.selectable!==false));const i=s.filter((t=>t.selected));const o=s.length>0&&i.length===s.length;const n=i.length>0&&!o;this.selectionCache={count:i.length,total:s.length,values:i.map(((t,e)=>t.value||String(e))),all:o,indeterminate:n};this.syncSelectionUI(e,o,n);if(t)this.mdSelectionChange.emit(this.selectionCache)}syncSelectionUI(t,e,s){if(this.selection!=="none"){for(const e of t){const t=e;if(t.closest("md-table-body")==null)continue;if(e.selectable===false||e.disabled)t.removeAttribute("aria-selected");else t.setAttribute("aria-selected",String(!!e.selected))}}if(this.selection==="none"){const t=this.el.querySelector("md-table-head md-checkbox");if(t){t.disabled=false;t.checked=false;t.indeterminate=false}return}for(const e of t){const t=e.querySelector("md-checkbox");if(!t)continue;if(t.checked!==e.selected)t.checked=e.selected;if(t.disabled!==!!e.disabled)t.disabled=!!e.disabled}const i=this.el.querySelector("md-table-head md-checkbox");if(i){if(this.selection==="single"){if(!i.disabled)i.disabled=true;if(i.checked)i.checked=false;if(i.indeterminate)i.indeterminate=false}else{if(i.disabled)i.disabled=false;if(i.indeterminate!==s)i.indeterminate=s;if(i.checked!==e)i.checked=e}}}syncRows(){const e=this.el.querySelector("md-table-head");if(e){if(this.frozenHeader)e.setAttribute("slot","head");else if(e.getAttribute("slot")==="head")e.removeAttribute("slot")}Array.from(this.el.querySelectorAll("md-table-body, md-table-foot")).forEach((t=>{if(this.frozenHeader)t.setAttribute("presentational","");else t.removeAttribute("presentational")}));const s=Array.from(this.el.querySelectorAll("md-table-row"));const i=s.length-1;const o=s.some((t=>t.hasAttribute("expandable")));if(this.hasExpandableRow!==o)this.hasExpandableRow=o;const n=this.el.closest("md-table-container");const a=!!n&&t.directChildren(n,(t=>t.getAttribute("slot")==="bottom")).length>0;const r=!!n&&!a;const l=s.some((t=>t.closest("md-table-foot")!=null));let d=-1;s.forEach(((t,e)=>{if(t.closest("md-table-head")==null&&t.closest("md-table-foot")==null)d=e}));const c=s.filter((t=>t.closest("md-table-head")!=null)).length;let h=0;let m=0;let b=0;s.forEach(((t,e)=>{const s=t.closest("md-table-head")!=null;const o=t.closest("md-table-foot")!=null;const n=s?"head":o?"foot":"body";const a=(e,s)=>{if(s===null){if(t.hasAttribute(e))t.removeAttribute(e)}else if(t.getAttribute(e)!==s){t.setAttribute(e,s)}};a("rowgroup",n);a("data-stripe",n==="body"&&this.striped&&h%2===1?"true":null);a("data-sticky",s&&this.stickyHeader||o&&this.stickyFooter?"true":null);a("data-last",r&&e===i?"true":null);a("data-adjacent-foot",l&&e===d?"true":null);if(this.rowCount>0){if(s)a("aria-rowindex",String(m+1));else if(!o)a("aria-rowindex",String(c+this.rowOffset+h+1));else a("aria-rowindex",String(c+this.rowCount+b+1))}else{a("aria-rowindex",null)}if(o)b++;if(n==="body"&&this.selection!=="none"){const e=t;a("aria-selected",e.selectable===false||e.disabled?null:String(!!e.selected))}else{a("aria-selected",null)}if(n==="body")h++;if(s)m++;if(s){Array.from(t.children).forEach((t=>{const e=t.getAttribute("sticky");if(t.tagName!=="MD-TABLE-CELL"||e!=="start"&&e!=="end")return;const s=t.getAttribute("data-pin-icon-cast");const i=t.getAttribute("pin-icon");if(i!==null&&i!==s)return;if(this.pinIcon){if(i!==this.pinIcon){t.setAttribute("pin-icon",this.pinIcon);t.setAttribute("data-pin-icon-cast",this.pinIcon)}}else if(s!==null){t.removeAttribute("pin-icon");t.removeAttribute("data-pin-icon-cast")}}))}}))}syncSortLabels(){const t=Array.from(this.el.querySelectorAll("md-table-sort-label"));for(const e of t){const t=e.getAttribute("column")||"";const s=!!t&&t===this.sortBy;if(e.active!==s)e.active=s;const i=s?this.sortOrder:"none";if(e.order!==i)e.order=i;const o=e.closest("md-table-cell");if(o){const t=!s||i==="none"?"none":i==="asc"?"ascending":"descending";if(o.getAttribute("aria-sort")!==t)o.setAttribute("aria-sort",t)}}}get columnCount(){if(this.columns>0)return this.columns;if(this.columnTemplate){const t=this.columnTemplate.trim();const e=t.match(/repeat\(\s*(\d+)/);if(e)return parseInt(e[1],10);return t.split(/\s+/).filter(Boolean).length||1}const t=this.el.querySelector("md-table-row");return t?t.querySelectorAll("md-table-cell").length||1:1}renderSkeletonRows(){const t=Math.max(1,this.columnCount);return Array.from({length:Math.max(1,this.loadingRows)}).map(((e,s)=>i("div",{class:"md-table__skeleton-row",part:"skeleton-row","aria-hidden":"true",key:`sk-${s}`},Array.from({length:t}).map(((t,e)=>i("span",{class:"md-table__bar",key:`sk-${s}-${e}`}))))))}renderEmpty(){return i("div",{class:"md-table__empty",part:"empty"},i("slot",{name:"empty"},i("span",{class:"md-table__empty-text"},"No data")))}render(){const t={};if(this.columnTemplate){t["--_columns-template"]=this.columnTemplate}else if(this.columns>0){t["--_columns-template"]=`repeat(${this.columns}, minmax(0, 1fr))`}else{const e=this.el.querySelector("md-table-row");const s=e?e.querySelectorAll("md-table-cell").length:0;if(s>0)t["--_derived-template"]=`repeat(${s}, minmax(0, 1fr))`}if(this.minWidth)t["--_min-width"]=this.minWidth;const e={role:this.hasExpandableRow?"treegrid":"table","aria-label":this.label||this.caption||"Data table","aria-description":this.summary||null,"aria-busy":this.loading?"true":null,"aria-rowcount":this.rowCount>0?String(this.rowCount+this.el.querySelectorAll("md-table-head md-table-row, md-table-foot md-table-row").length):null};return i(o,{key:"1bd9291845eace76f528c806fa5b64e1e09d27d8",class:{"md-table":true,[`md-table--density-${this.density}`]:typeof this.density==="string","md-table--sticky-header":this.stickyHeader,"md-table--sticky-footer":this.stickyFooter,"md-table--striped":this.striped,"md-table--no-dividers":this.noDividers,"md-table--hoverable":this.hoverable,"md-table--loading":this.loading,[`md-table--loading-${this.loadingMode}`]:this.loading,"md-table--empty":this.empty},style:t},i("span",{key:"0f88e97df668f7330c332c1309886c0e718fc4aa",class:"md-table__sr-status","aria-live":"polite"},this.srAnnouncement),this.caption&&i("div",{key:"20ce99947f9e1649a116b6b4e2c42910cf1c5f0d",class:"md-table__caption",part:"caption","aria-hidden":"true"},this.caption),this.frozenHeader?i("div",{class:"md-table__frozen",...e},i("div",{class:"md-table__head-scroll",role:"presentation",ref:t=>this.headScrollEl=t},i("div",{class:"md-table__grid md-table__grid--head",part:"header-grid",ref:t=>this.headGridEl=t},i("slot",{name:"head",onSlotchange:this.handleSlotChange}))),i("div",{class:"md-table__body-scroll",role:"rowgroup",tabindex:"0",ref:t=>this.bodyScrollEl=t,onScroll:this.onBodyScroll,onWheel:this.onBodyWheel,onKeyDown:this.onBodyKeyDown},i("div",{class:"md-table__grid md-table__grid--body",part:"grid",role:"presentation",ref:t=>this.bodyGridEl=t},i("slot",{onSlotchange:this.handleSlotChange}),this.loading&&this.loadingMode==="skeleton"&&this.renderSkeletonRows()),this.empty&&!this.loading&&this.renderEmpty()),i("div",{class:"md-table__hscroll",part:"hscrollbar","aria-hidden":"true",ref:t=>this.hTrackEl=t},i("div",{class:"md-table__hscroll-thumb",part:"hscrollbar-thumb",ref:t=>this.hThumbEl=t,onPointerDown:this.onHThumbPointerDown,onPointerMove:this.onHThumbPointerMove,onPointerUp:this.onHThumbPointerUp,onPointerCancel:this.onHThumbPointerUp})),i("div",{class:"md-table__vscroll",part:"vscrollbar","aria-hidden":"true",ref:t=>this.vTrackEl=t},i("div",{class:"md-table__vscroll-thumb",part:"vscrollbar-thumb",ref:t=>this.vThumbEl=t,onPointerDown:this.onVThumbPointerDown,onPointerMove:this.onVThumbPointerMove,onPointerUp:this.onVThumbPointerUp,onPointerCancel:this.onVThumbPointerUp}))):i("div",{class:"md-table__grid",part:"grid",...e},i("slot",{onSlotchange:this.handleSlotChange}),this.loading&&this.loadingMode==="skeleton"&&this.renderSkeletonRows()),this.loading&&this.loadingMode==="overlay"&&i("div",{key:"e1db4477aeb27e7b00f43f17e5301c1e19686573",class:"md-table__loading",part:"loading","aria-hidden":"true"},i("slot",{key:"3d3e9a37b2975d16c9cdda79f256a020cfd534cd",name:"loader"},i("slot",{key:"8f3868dff5dda03bb847cb2e34574b2bf1258b58",name:"loading"},i("div",{key:"d0f55e862b869ea79262e5c806cc50a354a9806a",class:"md-table__progress",part:"progress"},i("md-progress-indicator",{key:"3d1c5ab8a8559ce1f8970e722f9f7843cc368c1a",variant:"linear",indeterminate:true,"aria-label":"Loading"})),i("div",{key:"c06240e496d216d338561d375fc6bdb2be52e3fc",class:"md-table__scrim"})))),this.empty&&!this.loading&&!this.frozenHeader&&this.renderEmpty())}get el(){return this}static get watchers(){return{pinIcon:[{onPinIconChange:0}],pinMode:[{onPinModeChange:0}],selection:[{onSelectionModeChange:0}],empty:[{onEmptyChange:0}],frozenHeader:[{onStickyHeaderChange:0}],stickyHeader:[{onStickyHeaderChange:0},{onLayoutChange:0}],density:[{onLayoutChange:0}],striped:[{onLayoutChange:0}],stickyFooter:[{onLayoutChange:0}],columns:[{onLayoutChange:0}],columnTemplate:[{onLayoutChange:0}],sortBy:[{onSortStateChange:0}],sortOrder:[{onSortStateChange:0}]}}static get style(){return l()}},[257,"md-table",{density:[520],columnTemplate:[1,"column-template"],columns:[2],minWidth:[1,"min-width"],stickyHeader:[516,"sticky-header"],frozenHeader:[516,"frozen-header"],keepHeight:[516,"keep-height"],scrollbar:[513],pinMode:[513,"pin-mode"],pinIcon:[1,"pin-icon"],stickyFooter:[516,"sticky-footer"],striped:[516],noDividers:[516,"no-dividers"],hoverable:[516],motion:[513],selection:[513],sortBy:[1537,"sort-by"],sortOrder:[1537,"sort-order"],loading:[516],loadingMode:[513,"loading-mode"],loadingRows:[2,"loading-rows"],empty:[516],label:[1],caption:[1],summary:[1],rowOffset:[2,"row-offset"],rowCount:[2,"row-count"],srAnnouncement:[32],hasExpandableRow:[32],getSelection:[64],selectAll:[64],deselectAll:[64],toggleSelectAll:[64],setSort:[64],pinColumn:[64],setColumnVisibility:[64],animateNextChange:[64]},[[0,"mdMotionArm","handleMotionArm"],[0,"mdSortRequest","handleSortRequest"],[0,"mdChange","handleSlottedCheckboxChange"],[0,"mdRowgroupSlotChange","handleRowgroupSlotChange"],[0,"mdRowSelectionChange","handleRowSelectionChange"]],{pinIcon:[{onPinIconChange:0}],pinMode:[{onPinModeChange:0}],selection:[{onSelectionModeChange:0}],empty:[{onEmptyChange:0}],frozenHeader:[{onStickyHeaderChange:0}],stickyHeader:[{onStickyHeaderChange:0},{onLayoutChange:0}],density:[{onLayoutChange:0}],striped:[{onLayoutChange:0}],stickyFooter:[{onLayoutChange:0}],columns:[{onLayoutChange:0}],columnTemplate:[{onLayoutChange:0}],sortBy:[{onSortStateChange:0}],sortOrder:[{onSortStateChange:0}]}]);function c(){if(typeof customElements==="undefined"){return}const t=["md-table","md-progress-indicator"];t.forEach((t=>{switch(t){case"md-table":if(!customElements.get(n(t))){customElements.define(n(t),d)}break;case"md-progress-indicator":if(!customElements.get(n(t))){r()}break}}))}c();const h=d;const m=c;export{h as MdTable,m as defineCustomElement};
|
|
2
|
+
//# sourceMappingURL=md-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mdTableCss","MdTable","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","density","columnTemplate","columns","minWidth","stickyHeader","frozenHeader","keepHeight","scrollbar","pinMode","pinIcon","stickyFooter","striped","noDividers","hoverable","motion","selection","sortBy","sortOrder","loading","loadingMode","loadingRows","empty","label","caption","summary","rowOffset","rowCount","selectionCache","count","total","values","all","indeterminate","bulkSelecting","hDragging","hDragStartX","hDragStartScroll","vDragging","vDragStartY","vDragStartScroll","updateHScroll","sc","bodyScrollEl","track","hTrackEl","thumb","hThumbEl","overflow","scrollWidth","clientWidth","style","display","trackW","thumbW","Math","max","maxThumbLeft","progress","min","abs","scrollLeft","left","isRtl","inlineSize","transform","onHThumbPointerDown","e","clientX","target","setPointerCapture","pointerId","preventDefault","onHThumbPointerMove","offsetWidth","perPx","onHThumbPointerUp","releasePointerCapture","updateVScroll","vTrackEl","vThumbEl","scrollHeight","clientHeight","insetBlockStart","offsetTop","blockSize","trackH","thumbH","maxThumbTop","top","scrollTop","onVThumbPointerDown","clientY","onVThumbPointerMove","offsetHeight","onVThumbPointerUp","srAnnouncement","hasExpandableRow","onBodyScroll","headScrollEl","scrollEmitQueued","requestAnimationFrame","mdScroll","emit","onBodyKeyDown","step","dx","key","ctrlKey","metaKey","Infinity","lo","hi","onBodyWheel","deltaX","deltaY","shiftKey","next","pinnedColumns","Map","hiddenColumns","Set","pinBaseTracks","handleSlotChange","syncRows","syncSortLabels","recomputeSelection","onPinIconChange","onPinModeChange","syncStickyOffsets","rows","Array","from","el","querySelectorAll","length","clear","forEach","row","children","c","removeProperty","gridEl","bodyGridEl","shadowRoot","querySelector","tracks","getComputedStyle","gridTemplateColumns","split","map","t","parseFloat","filter","n","Number","isNaN","cells","tagName","hasAttribute","startCum","cell","i","getAttribute","setProperty","endCum","direction","componentDidLoad","setupFrozenHeader","scheduleHeaderFloors","h","getBoundingClientRect","height","minBlockSize","round","componentDidRender","syncFrozenColumns","disconnectedCallback","frozenObserver","disconnect","undefined","onSelectionModeChange","trimmed","sel","getSelectableRows","r","selected","slice","onEmptyChange","onStickyHeaderChange","attach","tries","ResizeObserver","observe","headGridEl","hasVisibleRow","some","headTracks","onLayoutChange","onSortStateChange","getSelection","selectAll","disabled","deselectAll","toggleSelectAll","setSort","column","order","play","armMotion","mdSortChange","splitTracks","template","out","depth","cur","ch","trim","test","push","directChildren","parent","match","isTag","tag","toLowerCase","ensurePinBase","silent","warn","msg","console","includes","setAttribute","String","headRow","headCells","s","set","pinColumn","side","get","delete","applyPinLayout","effective","mdPinChange","setColumnVisibility","visible","size","has","add","mdColumnVisibilityChange","hidden","sort","a","b","_","start","end","mid","k","appendChild","removeAttribute","visibleOrder","join","syncHeaderContentFloors","seq","tpl","base","kids","right","span","cs","pad","paddingInlineStart","paddingInlineEnd","pin","ceil","attempt","probe","ready","width","animateNextChange","handleMotionArm","stopPropagation","body","captureFlip","enter","stagger","staggerCap","spring","handleSortRequest","col","detail","first","defaultOrder","second","handleSlottedCheckboxChange","checked","queueMicrotask","closest","selectable","handleRowgroupSlotChange","handleRowSelectionChange","value","syncSelectionUI","mdSelectionChange","host","staleHead","cb","headCb","headEl","rg","lastIndex","hasExpandable","container","hasBottomBar","suppressLastDivider","footExists","lastBodyIdx","nHead","bodyIndex","headIndex","footIndex","inHead","inFoot","group","v","cast","own","labels","l","active","ariaSort","columnCount","m","parseInt","Boolean","firstRow","renderSkeletonRows","cols","class","part","__","renderEmpty","name","render","tableAria","role","Host","ref","onSlotchange","tabindex","onScroll","onWheel","onKeyDown","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","variant"],"sources":["src/components/md-table/md-table.css?tag=md-table&encapsulation=shadow","src/components/md-table/md-table.tsx"],"sourcesContent":["/* ==========================================================\n md-table — MD3 Expressive table (composable primitive)\n\n Layout: the shadow `.md-table__grid` owns the column tracks; every\n slotted `md-table-row` is a REAL grid item spanning all tracks that\n lays its cells on the shared tracks via `grid-template-columns:\n subgrid`. Rows being real boxes is what makes row hover, stripes,\n dividers, sticky rows and focus rings work.\n\n PUBLIC CSS CUSTOM PROPERTIES (override per-instance):\n --md-table-row-height-compact 36px (dense)\n --md-table-row-height-standard 52px\n --md-table-row-height-comfortable 60px\n --md-table-header-height 56px\n --md-table-cell-padding-inline per-density default\n --md-table-divider-color between rows\n --md-table-stripe-color every-other-row overlay color\n --md-table-head-bg background for thead rows\n --md-table-head-color text color for thead\n --md-table-foot-bg background for tfoot rows\n --md-table-row-hover-color row hover state-layer color\n --md-table-row-selected-bg selected row background\n --md-table-row-selected-color selected row text\n --md-table-columns-template grid-template-columns override\n\n CSS PARTS:\n caption The optional caption above the head\n grid The grid container holding all rows\n loading The loading overlay (when `loading`)\n empty The empty-state region (when `empty`)\n ========================================================== */\n\n:host {\n /* Motion: effects springs for color/opacity (house pairing rule). */\n --_fx-fast: var(--md-sys-motion-spring-effects-fast-duration, 150ms)\n var(--md-sys-motion-spring-effects-fast-easing, cubic-bezier(0.31, 0.94, 0.34, 1));\n --_fx-default: var(--md-sys-motion-spring-effects-default-duration, 200ms)\n var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.8, 0.34, 1));\n\n /* Density → row heights. Compact is a genuinely dense 36px data row (tighten\n further via --md-table-row-height-compact); the header is 56px regardless\n of body density (data-table idiom). */\n --_row-h-compact: var(--md-table-row-height-compact, max(28px, calc(36px + var(--md-sys-density-scale, 0) * 4px)));\n /* Standard (default) rows follow a global `data-density` ancestor (0…-4,\n 4px/rung); density-scale is 0 by default so 52px is unchanged. The explicit\n `density=\"compact|comfortable\"` prop overrides via the blocks below. */\n --_row-h-standard: var(--md-table-row-height-standard, calc(52px + var(--md-sys-density-scale, 0) * 4px));\n --_row-h-comfortable: var(--md-table-row-height-comfortable, max(40px, calc(60px + var(--md-sys-density-scale, 0) * 4px)));\n --_row-h: var(--_row-h-standard);\n --_head-h: var(--md-table-header-height, max(40px, calc(56px + var(--md-sys-density-scale, 0) * 4px)));\n /* Standard cell padding rides the spacing tokens (16/8 at density 0), so it\n tightens with global density; compact/comfortable pin their own below. */\n --_cell-pad-inline: var(--md-table-cell-padding-inline, var(--md-sys-spacing-inset-lg, 16px));\n --_cell-pad-block: var(--md-table-cell-padding-block, var(--md-sys-spacing-inset-sm, 8px));\n\n --_divider-color: var(--md-table-divider-color, var(--md-sys-color-outline-variant, #CAC4D0));\n --_divider: var(--_divider-color);\n --_stripe-color: var(\n --md-table-stripe-color,\n color-mix(\n in srgb,\n var(--md-sys-color-on-surface, #1C1B1F) calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 50%),\n transparent\n )\n );\n --_head-bg: var(--md-table-head-bg, var(--md-sys-color-surface-container, #F3EDF7));\n --_head-color: var(--md-table-head-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_foot-bg: var(--md-table-foot-bg, var(--md-sys-color-surface-container-low, #F7F2FA));\n\n /* Row hover state layer — derived from the M3 state opacity token; zeroed\n when `hoverable` is off (rows consume the var unconditionally). */\n --_hover-layer: color-mix(\n in srgb,\n var(--md-table-row-hover-color, var(--md-sys-color-on-surface, #1C1B1F))\n calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 100%),\n transparent\n );\n --_row-selected-bg: var(--md-table-row-selected-bg, var(--md-sys-color-secondary-container, #E8DEF8));\n --_row-selected-color: var(\n --md-table-row-selected-color,\n var(--md-sys-color-on-secondary-container, #1E192B)\n );\n\n display: block;\n inline-size: 100%;\n position: relative;\n isolation: isolate;\n color: var(--md-sys-color-on-surface, #1C1B1F);\n font-family: var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);\n font-size: max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));\n line-height: max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));\n letter-spacing: var(--md-sys-typescale-body-medium-letter-spacing, 0.25px);\n}\n\n:host(.md-table--density-compact) {\n --_row-h: var(--_row-h-compact);\n --_cell-pad-inline: var(--md-table-cell-padding-inline, 12px);\n --_cell-pad-block: var(--md-table-cell-padding-block, 4px);\n /* Shrink slotted checkboxes to the compact row height so their 48px touch\n target doesn't force the row taller (inherits to the light-DOM cells). */\n --md-checkbox-touch-target-size: 32px;\n}\n:host(.md-table--density-comfortable) {\n --_row-h: var(--_row-h-comfortable);\n --_cell-pad-inline: var(--md-table-cell-padding-inline, 20px);\n}\n\n:host(.md-table--no-dividers) {\n --_divider: transparent;\n}\n:host(:not(.md-table--hoverable)) {\n --_hover-layer: transparent;\n}\n\n.md-table__caption {\n padding: 12px var(--_cell-pad-inline);\n font-family: var(--md-sys-typescale-title-small-font-family, Roboto, sans-serif);\n font-size: var(--md-sys-typescale-title-small-font-size, 14px);\n font-weight: var(--md-sys-typescale-title-small-font-weight, 500);\n line-height: var(--md-sys-typescale-title-small-line-height, 20px);\n color: var(--md-sys-color-on-surface-variant, #49454F);\n}\n\n/* The single grid every row subgrids into. Template resolution:\n explicit prop (inline --_columns-template) → public override var →\n derived-from-first-row count (inline --_derived-template). */\n.md-table__grid {\n display: grid;\n grid-template-columns: var(\n --_columns-template,\n var(--md-table-columns-template, var(--_derived-template, none))\n );\n align-items: stretch;\n /* Never squish OR wrap columns to fit: keep at least `min-width` if set,\n otherwise the grid's natural (unwrapped) max-content width. When the\n container is narrower the grid overflows and the scroll wrapper shows a\n horizontal scrollbar (spreadsheet-style) instead of collapsing. */\n min-inline-size: var(--_min-width, var(--md-table-min-width, max-content));\n}\n\n/* ── Frozen header (sticky-header): header grid pinned above a vertically\n scrolling body grid, so the scrollbar spans only the body. ───────────── */\n.md-table__frozen {\n display: flex;\n flex-direction: column;\n min-block-size: 0;\n inline-size: 100%;\n /* Containing block for the custom overlay scrollbars. */\n position: relative;\n}\n.md-table__head-scroll {\n flex: 0 0 auto;\n inline-size: 100%;\n /* Clipped; horizontal position is mirrored from the body (see onBodyScroll). */\n overflow: hidden;\n /* Paint the header band on the WRAPPER: the header grid is synced to the\n body's tracks, which stop a scrollbar-gutter short of the full width —\n without this the last ~10px of the header showed the container surface\n through. The inset hairline continues the header divider across that\n gutter zone (it coincides with the row's own divider elsewhere). */\n background-color: var(--_head-bg, var(--md-sys-color-surface-container, #F3EDF7));\n box-shadow: inset 0 -1px var(--_divider, transparent);\n}\n.md-table__body-scroll {\n flex: 1 1 auto;\n inline-size: 100%;\n min-block-size: 0;\n max-block-size: var(--md-table-body-max-h, none);\n /* Vertical scrolls natively; horizontal is fully owned by the custom bar\n (.md-table__hscroll) — overflow-x:hidden kills the native horizontal bar\n (so it never doubles with the custom one) while programmatic scrollLeft +\n the wheel handler still scroll it. */\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n/* Default `scrollbar=\"overlay\"`: the native vertical bar is fully hidden —\n the custom overlay bar (.md-table__vscroll) floats over the rows' right\n edge instead, so NO gutter is reserved: row backgrounds and dividers run\n the full width and a bar can never take space or shift content. */\n:host(:not([scrollbar='gutter'])) .md-table__body-scroll {\n scrollbar-width: none;\n}\n.md-table__body-scroll:focus-visible {\n /* Inset ring: an outer outline would be clipped by the container's\n overflow/border-radius. */\n outline: 2px solid var(--md-sys-color-secondary, #625B71);\n outline-offset: -2px;\n}\n/* Scoped to OVERLAY mode only — an unscoped display:none here once killed\n the gutter mode's native bar (its width rule won, but nothing re-declared\n display). */\n:host(:not([scrollbar='gutter'])) .md-table__body-scroll::-webkit-scrollbar {\n display: none;\n}\n/* `scrollbar=\"gutter\"`: classic inset bar in a reserved strip INSIDE the\n table — rows stop short of the edge and the native bar crosses the row\n borders. NB: no `scrollbar-width` here — modern Chrome ignores the styled\n ::-webkit-scrollbar when it's set (see project memory). */\n:host([scrollbar='gutter']) .md-table__body-scroll {\n scrollbar-gutter: stable;\n}\n:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar {\n width: 10px;\n}\n:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar-thumb {\n /* >= 3:1 non-text contrast (surface-container-highest measured ~1.25:1). */\n background: var(--md-sys-color-outline, #79747E);\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: content-box;\n}\n:host([scrollbar='gutter']) .md-table__body-scroll::-webkit-scrollbar-thumb:hover {\n background: var(--md-sys-color-on-surface-variant, #49454F);\n background-clip: content-box;\n}\n:host([scrollbar='gutter']) .md-table__vscroll {\n display: none !important;\n}\n\n/* ── Custom horizontal scrollbar (frozen mode) ─────────────── */\n/* Custom vertical OVERLAY scrollbar (frozen mode): floats over the rows near\n the body's right edge. Always visible while the body overflows — unlike the\n auto-hiding macOS overlay bar — and takes NO layout space. */\n.md-table__vscroll {\n position: absolute;\n inset-inline-end: 3px;\n inline-size: 8px;\n display: none;\n z-index: 3;\n pointer-events: none;\n}\n.md-table__vscroll-thumb {\n position: absolute;\n inset-inline: 0;\n border-radius: 999px;\n /* WCAG 1.4.11 non-text contrast: 50% alpha of on-surface computes >=3.2:1\n over every light surface in the family (45% measured 2.81-2.86:1 — just\n UNDER the 3:1 line; the minimum passing alpha is 48%). */\n background: color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 50%, transparent);\n pointer-events: auto;\n touch-action: none;\n}\n.md-table__vscroll-thumb:hover,\n.md-table__vscroll-thumb:active {\n background: color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 60%, transparent);\n}\n\n.md-table__hscroll {\n display: none; /* JS shows it (block) only when the body overflows */\n position: relative;\n flex: 0 0 auto;\n block-size: 10px;\n margin-inline: 8px;\n margin-block: 2px;\n}\n.md-table__hscroll-thumb {\n position: absolute;\n inset-block: 1px;\n inline-size: 40px;\n min-inline-size: 24px;\n background: var(--md-sys-color-outline, #79747E); /* >= 3:1 (was outline-variant ~1.6:1) */\n border-radius: 999px;\n cursor: grab;\n touch-action: none;\n transition: background-color var(--_fx-fast, 150ms ease);\n}\n.md-table__hscroll-thumb:hover {\n background: var(--md-sys-color-outline, #79747E);\n}\n.md-table__hscroll-thumb:active {\n cursor: grabbing;\n background: var(--md-sys-color-on-surface-variant, #49454F);\n}\n/* The header grid's tracks are set to the body's resolved pixel widths by JS;\n its width still fills the row so the leftover (scrollbar gutter) sits at the\n end, keeping the columns aligned with the body. */\n.md-table__grid--head {\n min-inline-size: max(100%, var(--_min-width, var(--md-table-min-width, 0px)));\n inline-size: max-content;\n}\n.md-table__grid--body {\n min-inline-size: max(100%, var(--_min-width, var(--md-table-min-width, 0px)));\n}\n\n/* ── Loading: shared shimmer bar ──────────────────────────── */\n.md-table__bar {\n block-size: 16px;\n border-radius: var(--md-sys-shape-corner-full, 9999px);\n background: linear-gradient(\n 90deg,\n var(--md-sys-color-surface-container-high, #ECE6F0) 25%,\n var(--md-sys-color-surface-container, #F3EDF7) 37%,\n var(--md-sys-color-surface-container-high, #ECE6F0) 63%\n );\n background-size: 400% 100%;\n animation: md-table-shimmer 1.4s ease infinite;\n}\n\n@keyframes md-table-shimmer {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n}\n\n/* ── Loading: SKELETON mode ───────────────────────────────────\n Body (and footer) are hidden and replaced by shimmer rows; the header stays.\n md-table-head/body/foot are the slot assignees, so display:none on them hides\n their whole subtree. */\n:host(.md-table--loading-skeleton) ::slotted(md-table-body),\n:host(.md-table--loading-skeleton) ::slotted(md-table-foot) {\n display: none;\n}\n\n.md-table__skeleton-row {\n grid-column: 1 / -1;\n display: grid;\n grid-template-columns: subgrid;\n align-items: center;\n min-block-size: var(--_row-h);\n border-block-end: 1px solid var(--_divider);\n}\n.md-table__skeleton-row:last-child {\n border-block-end: none;\n}\n/* One bar per column, inset by the cell padding — fills the row. */\n.md-table__skeleton-row .md-table__bar {\n margin-inline: var(--_cell-pad-inline);\n}\n\n/* ── Loading: OVERLAY mode ────────────────────────────────────\n An indeterminate progress line just under the header + a scrim that dims and\n blocks the body. Header/footer are untouched (the scrim starts below the\n header). */\n.md-table__loading {\n position: absolute;\n inset: 0;\n z-index: 3;\n pointer-events: none;\n}\n\n.md-table__scrim {\n position: absolute;\n inset-block-start: var(--_head-h);\n inset-block-end: 0;\n inset-inline: 0;\n background: color-mix(in srgb, var(--md-sys-color-surface, #FEF7FF) 55%, transparent);\n /* Block interaction with the (loading) body. */\n pointer-events: auto;\n}\n\n/* The library's own linear indeterminate indicator, pinned under the header. */\n.md-table__progress {\n position: absolute;\n inset-block-start: var(--_head-h);\n inset-inline: 0;\n}\n.md-table__progress md-progress-indicator {\n display: block;\n inline-size: 100%;\n}\n\n/* ── Empty state ──────────────────────────────────────────── */\n.md-table__empty {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n /* Fallback height when there's no bounded container to fill (a plain,\n auto-height table). Override with --md-table-empty-min-height. */\n min-block-size: var(--md-table-empty-min-height, 160px);\n padding: 32px var(--_cell-pad-inline);\n text-align: center;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n}\n\n/* When the table is empty, fill the scroll viewport as a flex column so the\n empty region takes exactly the height left below the header — its content\n centers on both axes with NO extra height / scrollbar. box-sizing:border-box\n above keeps the padding inside that flexed height. */\n:host(.md-table--empty) {\n display: flex;\n flex-direction: column;\n min-block-size: 100%;\n}\n:host(.md-table--empty) .md-table__grid {\n flex: 0 0 auto;\n}\n:host(.md-table--empty) .md-table__empty {\n flex: 1 1 auto;\n}\n\n/* Frozen mode: the empty message lives inside the body scroll area — fill it so\n the content centers below the header. */\n.md-table__body-scroll {\n display: flex;\n flex-direction: column;\n}\n.md-table__body-scroll .md-table__empty {\n flex: 1 1 auto;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .md-table__bar {\n animation: none;\n }\n}\n\n@media (forced-colors: active) {\n /* WHCM strips background colors — without this the custom thumbs vanish\n while the native bars stay suppressed (no scrollbar at all). */\n .md-table__vscroll-thumb,\n .md-table__hscroll-thumb {\n background: ButtonText;\n border: 1px solid ButtonText;\n forced-color-adjust: none;\n }\n}\n\n@media (forced-colors: active) {\n :host {\n --_divider: CanvasText;\n }\n}\n\n/* Visually hidden, AT-audible (empty-state announcements). */\n.md-table__sr-status {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n/* ==========================================================\n DENSITY (numeric rungs — local override)\n `density` here accepts two vocabularies: the semantic sizes\n (compact/standard/comfortable, handled by the .md-table--density-* classes\n above) and the library-wide numeric scale. A numeric rung maps onto the same\n --md-sys-density-scale signal a global `data-density` ancestor sets, so a\n local value overrides the inherited one and every scale-driven value in this\n file (row height, header height, type) follows.\n\n The semantic sizes are scale-aware too — their row heights are calcs, not\n literals — so `density=\"compact\"` nested in a `data-density=\"-2\"` region\n condenses further instead of pinning 36px.\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 Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Watch,\n} from '@stencil/core';\nimport { captureFlip } from '../../utils/flip';\n\nexport type MdTableSortOrder = 'asc' | 'desc' | 'none';\n\nexport interface MdTableSortState {\n /** Column id of the active sort, or empty for \"no sort\". */\n column: string;\n /** Sort direction. */\n order: MdTableSortOrder;\n}\n\nexport interface MdTableSelectionState {\n /** Number of selected rows. */\n count: number;\n /** Total number of selectable rows (rendered). */\n total: number;\n /** Selected row \"value\" or id (or row index) for each selected row. */\n values: string[];\n /** Whether all visible rows are selected. */\n all: boolean;\n /** Whether some (but not all) rows are selected. */\n indeterminate: boolean;\n}\n\ninterface SelectableRow extends HTMLElement {\n selected: boolean;\n disabled: boolean;\n value: string;\n selectable: boolean;\n}\n\n/**\n * Material Design 3 — Table\n *\n * The core composable table primitive for hand-authored tables.\n *\n * Layout architecture: the shadow `.md-table__grid` owns the column tracks\n * (`grid-template-columns`), and every slotted `md-table-row` is a REAL grid\n * item spanning all tracks that lays its cells on the shared tracks via\n * `grid-template-columns: subgrid`. Rows being real boxes is what makes row\n * hover, stripes, dividers, sticky headers and focus rings actually work —\n * and a wrong cell count skews one row, never the whole table.\n *\n * Coordination is push-based (the house pattern): the table stamps context\n * onto its rows (`rowgroup`, stripe parity, stickiness) and pushes sort state\n * into `md-table-sort-label`s — no MutationObservers, no `:host-context()`.\n *\n * High-level features:\n * - Density: `compact` | `standard` | `comfortable`\n * - Sticky header / footer (pair with `md-table-container` for the scroll box)\n * - Sticky first / last column via cell `sticky=\"start\" | \"end\"`\n * - Sortable columns via `<md-table-sort-label>` (3-state asc → desc → none)\n * - Selection coordination — emits `mdSelectionChange`; `selectAll()` /\n * `deselectAll()` / `toggleSelectAll()` for the select-all checkbox\n * - Horizontal scroll when the content is wider than the container\n * - Loading + empty-state slots, striped rows, configurable dividers\n */\n@Component({\n tag: 'md-table',\n styleUrl: 'md-table.css',\n shadow: true,\n})\nexport class MdTable {\n @Element() el!: HTMLElement;\n\n /**\n * Layout density. Accepts BOTH vocabularies:\n *\n * - the semantic sizes `'compact' | 'standard' | 'comfortable'` (row heights\n * 36 / 52 / 60px), which is this component's original API, and\n * - a numeric rung `0 | -1 | -2 | -3 | -4`, the scale every other component in\n * the library uses.\n *\n * A numeric value drives `--md-sys-density-scale` on the host (see the DENSITY\n * block in the CSS) exactly as a global `data-density` ancestor would, and\n * takes the `standard` row-height base. The two are not exclusive: the\n * semantic sizes are themselves scale-aware, so `density=\"compact\"` inside a\n * `data-density=\"-2\"` region condenses further.\n */\n @Prop({ reflect: true }) density:\n | 'compact'\n | 'standard'\n | 'comfortable'\n | 0\n | -1\n | -2\n | -3\n | -4 = 'standard';\n\n /**\n * CSS `grid-template-columns` value (e.g. `\"auto 1fr 120px\"`).\n * Takes precedence over the `columns` prop. Use this for fine control,\n * including using `minmax()`, `fr` units and `auto`.\n */\n @Prop({ attribute: 'column-template' }) columnTemplate: string = '';\n\n /**\n * Number of columns when no `column-template` is provided. The grid uses\n * `repeat(<columns>, minmax(0, 1fr))`. When neither is set, the column\n * count is derived from the first row's cells.\n */\n @Prop() columns: number = 0;\n\n /**\n * Minimum table width (e.g. `\"640px\"`). When the container is narrower, the\n * grid keeps this width and the container shows a horizontal scrollbar\n * instead of squishing the columns. Also settable via\n * `--md-table-min-width`.\n */\n @Prop({ attribute: 'min-width' }) minWidth: string = '';\n\n /** Stick the head row(s) to the top of the scroll container. */\n @Prop({ reflect: true, attribute: 'sticky-header' }) stickyHeader: boolean = false;\n\n /**\n * Frozen-header architecture: the header is rendered OUTSIDE the vertical\n * scroll area, so the scrollbar spans only the body and runs UNDER the head\n * Pair with `md-table-container[max-height]` to cap\n * the body — max-height controls the SIZE, this prop controls the\n * ARCHITECTURE. Without it, a max-height container scrolls the whole table\n * (use `sticky-header` there for the classic in-flow pinned header).\n */\n @Prop({ reflect: true, attribute: 'frozen-header' }) frozenHeader: boolean = false;\n\n /**\n * Height ratchet (default ON): once the table has rendered, it never\n * shrinks below that initial height. Paging, filtering to fewer/zero rows,\n * or an async refetch that momentarily empties the body keep the table (and\n * therefore the page) geometrically stable — no content below jumps up, and\n * no scrollbar can flash from a transient collapse (async rebuilds have a\n * few frames where fresh rows haven't hydrated and measure 0). Set\n * `keep-height=\"false\"` for tables that intentionally resize (e.g. a\n * density-toggle demo).\n */\n @Prop({ reflect: true, attribute: 'keep-height' }) keepHeight: boolean = true;\n\n /**\n * Vertical scrollbar presentation (frozen mode):\n * - `overlay` (default) — a custom always-visible thumb FLOATS over the\n * rows' right edge; no gutter is reserved, so row backgrounds and\n * dividers run the full width and the bar never takes layout space.\n * - `gutter` — classic inset bar in a reserved gap: `scrollbar-gutter:\n * stable` keeps a fixed strip inside the table (rows stop short of the\n * edge) and the native bar renders in it, crossing the row borders.\n */\n @Prop({ reflect: true }) scrollbar: 'overlay' | 'gutter' = 'overlay';\n\n /**\n * How MULTIPLE pinned columns on the same side behave during horizontal\n * scroll:\n * - `stack` (default) — every pinned column sticks at the same edge, so\n * later ones slide OVER earlier ones while scrolling (a deck-of-cards\n * effect; only the top one stays fully visible).\n * - `static` — each pinned column gets a cumulative inset equal to the\n * widths of the pinned columns before it, so ALL of them stay visible\n * side-by-side (spreadsheet-style).\n */\n @Prop({ reflect: true, attribute: 'pin-mode' }) pinMode: 'stack' | 'static' = 'stack';\n\n /**\n * Table-wide custom pin-indicator icon (Material Symbols ligature, e.g.\n * \"anchor\"). Cast to every pinned header cell so consumers set it once;\n * a cell's own `pin-icon` attribute wins over the cast. Empty = built-in\n * push-pin SVG.\n */\n @Prop({ attribute: 'pin-icon' }) pinIcon: string = '';\n\n @Watch('pinIcon')\n onPinIconChange() {\n this.syncRows();\n }\n\n @Watch('pinMode')\n onPinModeChange() {\n this.syncStickyOffsets();\n }\n\n /**\n * Stamp cumulative sticky offsets on pinned cells (pin-mode=\"static\").\n * Widths come from the resolved grid tracks; in stack mode the vars are\n * cleared so cells fall back to inset 0.\n */\n private syncStickyOffsets() {\n const rows = Array.from(this.el.querySelectorAll('md-table-row')) as HTMLElement[];\n if (!rows.length) return;\n const clear = () =>\n rows.forEach((row) =>\n (Array.from(row.children) as HTMLElement[]).forEach((c) => c.style.removeProperty('--_sticky-offset')),\n );\n if (this.pinMode !== 'static') {\n clear();\n return;\n }\n const gridEl = this.frozenHeader ? this.bodyGridEl : (this.el.shadowRoot?.querySelector('.md-table__grid') as HTMLElement | null);\n if (!gridEl) return;\n const tracks = getComputedStyle(gridEl)\n .gridTemplateColumns.split(' ')\n .map((t) => parseFloat(t))\n .filter((n) => !Number.isNaN(n));\n if (!tracks.length) return;\n rows.forEach((row) => {\n const cells = (Array.from(row.children) as HTMLElement[]).filter(\n (c) => c.tagName === 'MD-TABLE-CELL' && !c.hasAttribute('data-md-col-hidden'),\n );\n let startCum = 0;\n cells.forEach((cell, i) => {\n if (cell.getAttribute('sticky') === 'start') {\n cell.style.setProperty('--_sticky-offset', `${startCum}px`);\n startCum += tracks[i] ?? 0;\n }\n });\n let endCum = 0;\n for (let i = cells.length - 1; i >= 0; i--) {\n if (cells[i].getAttribute('sticky') === 'end') {\n cells[i].style.setProperty('--_sticky-offset', `${endCum}px`);\n endCum += tracks[i] ?? 0;\n }\n }\n });\n }\n\n /** Stick the foot row(s) to the bottom of the scroll container. */\n @Prop({ reflect: true, attribute: 'sticky-footer' }) stickyFooter: boolean = false;\n\n /** Show alternating row colors. */\n @Prop({ reflect: true }) striped: boolean = false;\n\n /** Hide the dividers between rows. */\n @Prop({ reflect: true, attribute: 'no-dividers' }) noDividers: boolean = false;\n\n /** Hover surface on rows. */\n @Prop({ reflect: true }) hoverable: boolean = true;\n\n /**\n * Built-in expressive motion. With `expressive` (the default) the table\n * FLIP-animates its rows around sort and page changes: it snapshots the row\n * boxes when the triggering event fires (`mdSortRequest`, or a pagination\n * event heard by the surrounding `md-table-container`), lets the consumer's\n * synchronous handler mutate the rows, then glides survivors to their new\n * positions and fades + rises entrants. Async mutations settle as a clean\n * no-op. `prefers-reduced-motion` always wins; set `none` to opt out —\n * e.g. when driving your own `flipRows` wiring around the same events.\n */\n @Prop({ reflect: true }) motion: 'expressive' | 'none' = 'expressive';\n\n /**\n * Selection mode.\n * - `none` — no selection (default)\n * - `single` — radio-like: selecting a row DESELECTS every other row;\n * `selectAll()`/the select-all checkbox are inert (disabled)\n * - `multiple` — checkbox-like; select-all checkbox + selectAll() available\n */\n @Prop({ reflect: true }) selection: 'none' | 'single' | 'multiple' = 'none';\n\n /**\n * Currently active sort column id. Read by `<md-table-sort-label column=\"…\">`\n * to render its arrow. Empty = no sort.\n */\n @Prop({ mutable: true, reflect: true, attribute: 'sort-by' })\n sortBy: string = '';\n\n /** Currently active sort direction. */\n @Prop({ mutable: true, reflect: true, attribute: 'sort-order' })\n sortOrder: MdTableSortOrder = 'asc';\n\n /** Show the loading state. */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /**\n * Loading presentation:\n * - `overlay` (default) — an indeterminate progress line under the header\n * plus a scrim that dims/disables the body while the header/footer stay put.\n * - `skeleton` — the body is replaced by shimmering skeleton rows; the\n * header and footer are untouched.\n */\n @Prop({ reflect: true, attribute: 'loading-mode' }) loadingMode: 'overlay' | 'skeleton' = 'overlay';\n\n /** Number of skeleton rows rendered in `loading-mode=\"skeleton\"`. */\n @Prop({ attribute: 'loading-rows' }) loadingRows: number = 4;\n\n /** Render the empty-state slot when true. */\n @Prop({ reflect: true }) empty: boolean = false;\n\n /**\n * Accessible name for the `role=\"table\"`. When omitted, the `caption` text\n * names the table (WAI: a caption identifies the table for screen-reader\n * users browsing in tables mode); the generic \"Data table\" is the last\n * resort. IDREFs cannot cross the shadow boundary, so the caption text is\n * mirrored into `aria-label` rather than referenced via `aria-labelledby`.\n */\n @Prop() label: string = '';\n\n /** Optional caption rendered above the table head. */\n @Prop() caption: string = '';\n\n /**\n * Long description of a COMPLEX table's structure (WAI caption & summary\n * pattern) — e.g. \"Columns are grouped under Profile and Employment\".\n * Exposed as `aria-description` on the table; invisible otherwise.\n */\n @Prop() summary: string = '';\n\n /**\n * Absolute 0-based index of the FIRST rendered body row within the full\n * dataset (WAI/ARIA pagination): with `row-count` set, each row gets an\n * `aria-rowindex` so AT reports \"row 42 of 5000\" instead of a position\n * within the rendered page. Update it on every page change.\n */\n @Prop({ attribute: 'row-offset' }) rowOffset: number = 0;\n\n /** Total row count for assistive tech when only a subset is rendered\n * (pagination / virtualization). 0 = use the rendered count. */\n @Prop({ attribute: 'row-count' }) rowCount: number = 0;\n\n /** Emitted when sort changes (after a `md-table-sort-label` is clicked). */\n @Event() mdSortChange: EventEmitter<MdTableSortState>;\n\n /** Emitted whenever the row selection state changes. */\n @Event() mdSelectionChange: EventEmitter<MdTableSelectionState>;\n\n /** Emits when a column is pinned/unpinned via `pinColumn`. */\n @Event() mdPinChange: EventEmitter<{ column: number; side: 'start' | 'end' | null }>;\n\n /** Emits when a column is hidden/shown via `setColumnVisibility`. */\n @Event() mdColumnVisibilityChange: EventEmitter<{ column: number; visible: boolean; hidden: number[] }>;\n\n /** rAF-throttled scroll position of the frozen body scroller. */\n @Event() mdScroll: EventEmitter<{ scrollLeft: number; scrollTop: number }>;\n\n private selectionCache: MdTableSelectionState = {\n count: 0,\n total: 0,\n values: [],\n all: false,\n indeterminate: false,\n };\n\n /** Guards against the O(n²) event storm during bulk selection changes. */\n private bulkSelecting = false;\n\n // Frozen-header refs + observer.\n private headScrollEl?: HTMLElement;\n private bodyScrollEl?: HTMLElement;\n private headGridEl?: HTMLElement;\n private bodyGridEl?: HTMLElement;\n private frozenObserver?: ResizeObserver;\n\n // Custom horizontal scrollbar (frozen mode) — native overlay scrollbars are\n // invisible at rest on macOS, so we draw our own always-visible, draggable\n // bar that works identically on every OS.\n private hTrackEl?: HTMLElement;\n private hThumbEl?: HTMLElement;\n private hDragging = false;\n private hDragStartX = 0;\n private hDragStartScroll = 0;\n\n // Custom vertical OVERLAY scrollbar (frozen mode): floats over the rows'\n // right edge instead of reserving a gutter, so row backgrounds and dividers\n // run the full width and no space-taking bar can ever shift the content.\n private vTrackEl?: HTMLElement;\n private vThumbEl?: HTMLElement;\n private vDragging = false;\n private vDragStartY = 0;\n private vDragStartScroll = 0;\n\n /** RTL flips the scrollLeft convention: 0 at the inline start (right edge)\n * running NEGATIVE toward the end. All custom-hscroll math normalizes\n * through |scrollLeft| plus this direction check. */\n private get isRtl(): boolean {\n return getComputedStyle(this.el).direction === 'rtl';\n }\n\n /** Size + position the custom horizontal scroll thumb from the body scroll. */\n private updateHScroll = () => {\n const sc = this.bodyScrollEl;\n const track = this.hTrackEl;\n const thumb = this.hThumbEl;\n if (!sc || !track || !thumb) return;\n const overflow = sc.scrollWidth - sc.clientWidth;\n if (overflow <= 1) {\n track.style.display = 'none';\n return;\n }\n track.style.display = 'block';\n const trackW = track.clientWidth;\n const thumbW = Math.max(24, (sc.clientWidth / sc.scrollWidth) * trackW);\n const maxThumbLeft = trackW - thumbW;\n // 0..1 progress from the inline START of the content, direction-agnostic.\n const progress = Math.min(1, Math.abs(sc.scrollLeft) / overflow);\n // In RTL the content start sits at the RIGHT, so the thumb starts at the\n // track's right end and travels left as the user scrolls toward the end.\n const left = (this.isRtl ? 1 - progress : progress) * maxThumbLeft;\n thumb.style.inlineSize = `${thumbW}px`;\n thumb.style.transform = `translateX(${left}px)`;\n };\n\n private onHThumbPointerDown = (e: PointerEvent) => {\n if (!this.bodyScrollEl) return;\n this.hDragging = true;\n this.hDragStartX = e.clientX;\n this.hDragStartScroll = this.bodyScrollEl.scrollLeft;\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n e.preventDefault();\n };\n private onHThumbPointerMove = (e: PointerEvent) => {\n if (!this.hDragging || !this.bodyScrollEl || !this.hTrackEl || !this.hThumbEl) return;\n const sc = this.bodyScrollEl;\n const maxThumbLeft = this.hTrackEl.clientWidth - this.hThumbEl.offsetWidth;\n const overflow = sc.scrollWidth - sc.clientWidth;\n const perPx = maxThumbLeft > 0 ? overflow / maxThumbLeft : 0;\n sc.scrollLeft = this.hDragStartScroll + (e.clientX - this.hDragStartX) * perPx;\n };\n private onHThumbPointerUp = (e: PointerEvent) => {\n this.hDragging = false;\n try {\n (e.target as HTMLElement).releasePointerCapture?.(e.pointerId);\n } catch {\n /* no capture to release */\n }\n };\n\n /** Size + position the vertical overlay thumb from the body scroll. */\n private updateVScroll = () => {\n const sc = this.bodyScrollEl;\n const track = this.vTrackEl;\n const thumb = this.vThumbEl;\n if (!sc || !track || !thumb) return;\n if (this.scrollbar === 'gutter') {\n track.style.display = 'none';\n return;\n }\n const overflow = sc.scrollHeight - sc.clientHeight;\n if (overflow <= 1) {\n track.style.display = 'none';\n return;\n }\n track.style.display = 'block';\n // Track spans exactly the body area inside the frozen wrapper.\n track.style.insetBlockStart = `${sc.offsetTop}px`;\n track.style.blockSize = `${sc.clientHeight}px`;\n const trackH = sc.clientHeight;\n const thumbH = Math.max(24, (sc.clientHeight / sc.scrollHeight) * trackH);\n const maxThumbTop = trackH - thumbH;\n const top = (sc.scrollTop / overflow) * maxThumbTop;\n thumb.style.blockSize = `${thumbH}px`;\n thumb.style.transform = `translateY(${top}px)`;\n };\n\n private onVThumbPointerDown = (e: PointerEvent) => {\n if (!this.bodyScrollEl) return;\n this.vDragging = true;\n this.vDragStartY = e.clientY;\n this.vDragStartScroll = this.bodyScrollEl.scrollTop;\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n e.preventDefault();\n };\n private onVThumbPointerMove = (e: PointerEvent) => {\n if (!this.vDragging || !this.bodyScrollEl || !this.vTrackEl || !this.vThumbEl) return;\n const sc = this.bodyScrollEl;\n const maxThumbTop = this.vTrackEl.clientHeight - this.vThumbEl.offsetHeight;\n const overflow = sc.scrollHeight - sc.clientHeight;\n const perPx = maxThumbTop > 0 ? overflow / maxThumbTop : 0;\n sc.scrollTop = this.vDragStartScroll + (e.clientY - this.vDragStartY) * perPx;\n };\n private onVThumbPointerUp = (e: PointerEvent) => {\n this.vDragging = false;\n try {\n (e.target as HTMLElement).releasePointerCapture?.(e.pointerId);\n } catch {\n /* no capture to release */\n }\n };\n\n componentDidLoad() {\n this.syncRows();\n this.syncSortLabels();\n this.recomputeSelection(false);\n this.setupFrozenHeader();\n // Frozen tables floor their header tracks to the header CONTENT (sort\n // arrows are wider than short body values — without this they cram into\n // the next column).\n requestAnimationFrame(() => this.scheduleHeaderFloors());\n // Height ratchet: after the first laid-out frame, floor the table at its\n // initial height so it never shrinks (see keepHeight). In frozen mode the\n // floor goes on the BODY SCROLL AREA, not the host: flooring the host\n // would leave the extra space BELOW the frozen flex column, stranding the\n // custom horizontal scrollbar mid-table — flooring the body keeps rows /\n // empty state absorbing the height and the bar pinned at the bottom.\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n if (!this.keepHeight) return;\n const target = this.frozenHeader && this.bodyScrollEl ? this.bodyScrollEl : this.el;\n const h = target.getBoundingClientRect().height;\n if (h > 1) target.style.minBlockSize = `${Math.round(h)}px`;\n }),\n );\n }\n\n componentDidRender() {\n // Keep the frozen header's tracks aligned after every render (data/columns\n // can change). Cheap: a single getComputedStyle read + string compare.\n this.syncFrozenColumns();\n this.updateHScroll();\n this.updateVScroll();\n this.syncStickyOffsets();\n }\n\n disconnectedCallback() {\n this.frozenObserver?.disconnect();\n this.frozenObserver = undefined;\n }\n\n @Watch('selection')\n onSelectionModeChange() {\n // Mode switches must re-run the selection machinery WITHOUT a re-mount:\n // the select-all checkbox keeps its element across renders, so single-mode's\n // disabled state stuck when switching back to multiple (dead checkbox),\n // and entering single never disabled it until some selection event fired.\n let trimmed = false;\n if (this.selection === 'single') {\n // Entering radio-like mode with several rows selected: keep the first.\n const sel = this.getSelectableRows().filter((r) => r.selected);\n if (sel.length > 1) {\n this.bulkSelecting = true;\n try {\n sel.slice(1).forEach((r) => (r.selected = false));\n } finally {\n this.bulkSelecting = false;\n }\n trimmed = true;\n }\n }\n this.syncRows(); // aria-selected stamping is mode-dependent\n // Sync checkbox enabled/checked states; emit only if the switch actually\n // changed the selection (the trim), so consumers hear about it.\n this.recomputeSelection(trimmed);\n }\n\n @Watch('empty')\n onEmptyChange() {\n // SRs don't announce a swapped-in empty state on their own.\n this.srAnnouncement = this.empty ? 'No data' : '';\n }\n\n @State() private srAnnouncement = '';\n\n /**\n * True when at least one slotted row is `expandable`. Such rows carry\n * `aria-expanded`, which is only a valid property on a ROW inside a\n * `treegrid` — on a plain `table` row it is a conditional-attribute\n * violation (axe `aria-conditional-attr`). So the structural element\n * promotes from `role=\"table\"` to `role=\"treegrid\"` whenever this is set;\n * treegrid is a superset of table for every other property we expose\n * (rowcount/rowindex, colspan, aria-sort, aria-selected). Recomputed in\n * `syncRows()` (runs on load + every slot change), so the role tracks rows\n * appearing / disappearing / toggling `expandable`.\n */\n @State() private hasExpandableRow = false;\n\n @Watch('frozenHeader')\n @Watch('stickyHeader')\n onStickyHeaderChange() {\n this.syncRows();\n // Refs are recreated on the next render; re-attach the observer then.\n // RETRY across frames: a single rAF can fire before Stencil commits the\n // re-render (the audit's plausible race) — poll until the body grid ref\n // exists or ~half a second passes.\n this.frozenObserver?.disconnect();\n this.frozenObserver = undefined;\n const attach = (tries = 0) => {\n if (!this.frozenHeader) return;\n if (this.bodyGridEl) {\n this.setupFrozenHeader();\n return;\n }\n if (tries < 30) requestAnimationFrame(() => attach(tries + 1));\n };\n requestAnimationFrame(() => attach());\n }\n\n /** Observe the body grid so the header tracks re-sync on any size change. */\n private setupFrozenHeader() {\n if (!this.frozenHeader || !this.bodyGridEl || typeof ResizeObserver === 'undefined') return;\n this.frozenObserver?.disconnect();\n this.frozenObserver = new ResizeObserver(() => {\n this.syncFrozenColumns();\n this.updateHScroll();\n // Row show/hide (pagination, filters) resizes the grid WITHOUT a table\n // re-render — the overlay thumb must follow here, not just on scroll.\n this.updateVScroll();\n this.syncStickyOffsets(); // track widths may have changed\n });\n this.frozenObserver.observe(this.bodyGridEl);\n this.syncFrozenColumns();\n this.updateHScroll();\n this.updateVScroll();\n }\n\n /** Copy the body grid's RESOLVED pixel tracks onto the header grid so columns\n * align exactly (and the header naturally reserves the body's scrollbar\n * gutter, since its tracks sum to less than its full width). */\n private syncFrozenColumns() {\n if (!this.frozenHeader || !this.bodyGridEl || !this.headGridEl) return;\n // When the body has no laid-out rows (all filtered out / a page transition\n // that momentarily hides everything), its `auto` and content-sized tracks\n // collapse to 0 — copying those onto the header would squash the columns.\n // RETAIN the last-applied tracks instead of clearing: transient all-hidden\n // states (display-toggle paging, animated swaps) must not flap the header\n // widths every transition. A table that STARTS empty simply has no inline\n // override yet, so the header keeps the template's real widths.\n const hasVisibleRow = Array.from(this.el.querySelectorAll('md-table-body md-table-row')).some(\n (r) => (r as HTMLElement).getBoundingClientRect().height > 0,\n );\n if (!hasVisibleRow) return;\n const tracks = getComputedStyle(this.bodyGridEl).gridTemplateColumns;\n if (tracks && tracks !== 'none') {\n // Append a filler track that absorbs the head wrapper's leftover width\n // (the body's scrollbar gutter): header rows span 1/-1, so their\n // background AND dividers stretch edge-to-edge instead of stopping a\n // gutter short. No cell ever places into it (cells auto-place into the\n // real tracks), and it collapses to 0 when the grid h-overflows.\n const headTracks = `${tracks} minmax(0, 1fr)`;\n if (this.headGridEl.style.gridTemplateColumns !== headTracks) {\n this.headGridEl.style.gridTemplateColumns = headTracks;\n }\n }\n }\n\n /** Mirror the body's horizontal scroll onto the (clipped) header + thumb. */\n private onBodyScroll = () => {\n if (this.headScrollEl && this.bodyScrollEl) {\n this.headScrollEl.scrollLeft = this.bodyScrollEl.scrollLeft;\n }\n this.updateHScroll();\n this.updateVScroll();\n // one mdScroll per frame, not per native scroll event\n if (!this.scrollEmitQueued && typeof requestAnimationFrame !== 'undefined') {\n this.scrollEmitQueued = true;\n requestAnimationFrame(() => {\n this.scrollEmitQueued = false;\n const sc = this.bodyScrollEl;\n if (sc) this.mdScroll.emit({ scrollLeft: sc.scrollLeft, scrollTop: sc.scrollTop });\n });\n }\n };\n\n /** overflow-x is hidden (no native horizontal bar), so translate horizontal\n * wheel / trackpad (and shift+wheel) into programmatic horizontal scroll. */\n /**\n * Keyboard horizontal scrolling (WCAG 2.1.1): overflow-x is hidden (the\n * custom bar owns the axis) and the custom thumbs are pointer-only, so\n * without this a keyboard user could never reach off-screen columns.\n * Vertical arrows/PageUp/Down stay native (overflow-y: auto).\n */\n private onBodyKeyDown = (e: KeyboardEvent) => {\n const sc = this.bodyScrollEl;\n if (!sc || e.target !== sc) return;\n const max = sc.scrollWidth - sc.clientWidth;\n if (max <= 0) return;\n const step = 48;\n let dx = 0;\n if (e.key === 'ArrowRight') dx = this.isRtl ? -step : step;\n else if (e.key === 'ArrowLeft') dx = this.isRtl ? step : -step;\n else if (e.key === 'Home' && (e.ctrlKey || e.metaKey)) dx = -Infinity;\n else if (e.key === 'End' && (e.ctrlKey || e.metaKey)) dx = Infinity;\n else return;\n e.preventDefault();\n // RTL scrollLeft runs [-max, 0]; LTR [0, max] — same clamp as onBodyWheel.\n const lo = this.isRtl ? -max : 0;\n const hi = this.isRtl ? 0 : max;\n sc.scrollLeft = Math.max(lo, Math.min(hi, dx === -Infinity ? lo : dx === Infinity ? hi : sc.scrollLeft + dx));\n };\n\n private onBodyWheel = (e: WheelEvent) => {\n const sc = this.bodyScrollEl;\n if (!sc || sc.scrollWidth <= sc.clientWidth + 1) return;\n const dx = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.shiftKey ? e.deltaY : 0;\n if (!dx) return;\n const max = sc.scrollWidth - sc.clientWidth;\n // Valid scrollLeft range flips with direction: [0, max] in LTR, [-max, 0]\n // in RTL (scrollLeft runs negative from the right-hand content start).\n const lo = this.isRtl ? -max : 0;\n const hi = this.isRtl ? 0 : max;\n const next = Math.max(lo, Math.min(hi, sc.scrollLeft + dx));\n if (next !== sc.scrollLeft) {\n sc.scrollLeft = next;\n e.preventDefault();\n }\n };\n\n @Watch('density')\n @Watch('striped')\n @Watch('stickyHeader')\n @Watch('stickyFooter')\n @Watch('columns')\n @Watch('columnTemplate')\n onLayoutChange() {\n this.syncRows();\n }\n\n @Watch('sortBy')\n @Watch('sortOrder')\n onSortStateChange() {\n this.syncSortLabels();\n }\n\n // ------------------------------------------------------------------\n // Public API\n // ------------------------------------------------------------------\n\n /** Returns the current selection state (synchronous snapshot). */\n @Method()\n async getSelection(): Promise<MdTableSelectionState> {\n this.recomputeSelection(false);\n return this.selectionCache;\n }\n\n /** Programmatically select all selectable body rows (no-op when selection=\"none\"). */\n @Method()\n async selectAll(): Promise<void> {\n // Select-all is a MULTIPLE-mode concept: in single (radio-like) mode a\n // bulk select would violate the one-row invariant — the select-all checkbox\n // previously behaved identically in both modes, making them\n // indistinguishable.\n if (this.selection !== 'multiple') return;\n this.bulkSelecting = true;\n try {\n this.getSelectableRows().forEach((r) => {\n if (!r.disabled) r.selected = true;\n });\n } finally {\n this.bulkSelecting = false;\n }\n this.recomputeSelection();\n }\n\n /** Programmatically deselect every row. */\n @Method()\n async deselectAll(): Promise<void> {\n this.bulkSelecting = true;\n try {\n this.getSelectableRows().forEach((r) => (r.selected = false));\n } finally {\n this.bulkSelecting = false;\n }\n this.recomputeSelection();\n }\n\n /** Toggle the \"all selected\" state (used by the select-all checkbox). */\n @Method()\n async toggleSelectAll(): Promise<void> {\n if (this.selectionCache.all) await this.deselectAll();\n else await this.selectAll();\n }\n\n /** Set the active sort column / order programmatically. */\n @Method()\n async setSort(column: string, order: MdTableSortOrder): Promise<void> {\n this.sortBy = column;\n this.sortOrder = order;\n const play = this.armMotion();\n this.mdSortChange.emit({ column, order });\n play?.();\n }\n\n // ------------------------------------------------------------------\n // Column pinning — core-owned cell reorder + sticky attrs + template\n // ------------------------------------------------------------------\n\n /** Pinned columns by ORIGINAL column index (their position before any\n * pinning). Initialized from markup `sticky` attributes on first use, so a\n * hard-coded sticky checkbox column keeps its place at the front. */\n private pinnedColumns = new Map<number, 'start' | 'end'>();\n private hiddenColumns = new Set<number>();\n private scrollEmitQueued = false;\n /** The ORIGINAL column tracks, parsed once — permutations and minmax floors\n * are always derived from these, never from the rewritten attribute. */\n private pinBaseTracks: string[] | null = null;\n\n /** Split a grid template into top-level tracks (minmax(a, b) stays one). */\n private static splitTracks(template: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let cur = '';\n for (const ch of template.trim()) {\n if (ch === '(') depth++;\n else if (ch === ')') depth--;\n if (/\\s/.test(ch) && depth === 0) {\n if (cur) {\n out.push(cur);\n cur = '';\n }\n } else {\n cur += ch;\n }\n }\n if (cur) out.push(cur);\n return out;\n }\n\n /** Stamp every cell with its original column index + parse the base tracks.\n * Returns false when the table can't support pinning — warning unless\n * `silent` (the mount-time header-floor pass probes speculatively; e.g. a\n * legit grouped-header table with colspans must not spam the console). */\n /**\n * Direct element children matching a tag / attribute predicate.\n *\n * Deliberately NOT `:scope >` — Stencil's mock-doc selector engine throws\n * outright on `:scope` (\"jQuery does not support the :scope selector\"), which\n * made pinColumn and setColumnVisibility unrunnable in a spec. Every other\n * component in this library already avoids it for the same reason (see\n * md-accordion, md-dialog, md-tooltip, md-breadcrumbs, utils/select-options).\n */\n private static directChildren(parent: Element, match: (el: HTMLElement) => boolean): HTMLElement[] {\n return (Array.from(parent.children) as HTMLElement[]).filter(match);\n }\n\n private static isTag(tag: string) {\n return (el: HTMLElement) => el.tagName.toLowerCase() === tag;\n }\n\n private ensurePinBase(silent = false): boolean {\n if (this.pinBaseTracks) return true;\n const warn = (msg: string) => {\n if (!silent) console.warn(`[md-table] ${msg}`);\n };\n if (!this.columnTemplate || this.columnTemplate.includes('repeat(')) {\n warn('pinColumn needs an explicit column-template without repeat().');\n return false;\n }\n const tracks = (this.constructor as typeof MdTable).splitTracks(this.columnTemplate);\n const rows = Array.from(this.el.querySelectorAll('md-table-row'));\n for (const row of rows) {\n const cells = MdTable.directChildren(row, MdTable.isTag('md-table-cell'));\n if (cells.some((c) => c.hasAttribute('colspan') && c.getAttribute('colspan') !== '1')) {\n warn('pinColumn does not support colspan cells.');\n return false;\n }\n if (cells.length !== tracks.length) {\n warn('pinColumn needs every row to have one cell per column.');\n return false;\n }\n cells.forEach((c, i) => c.setAttribute('data-md-col', String(i)));\n }\n // Seed pins from markup sticky attributes (head row = source of truth), so\n // e.g. a sticky checkbox column stays first among the pinned-start group.\n const headRow = this.el.querySelector('md-table-head md-table-row');\n const headCells = headRow\n ? MdTable.directChildren(headRow, MdTable.isTag('md-table-cell'))\n : [];\n headCells.forEach((c, i) => {\n const s = c.getAttribute('sticky');\n if (s === 'start' || s === 'end') this.pinnedColumns.set(i, s);\n });\n this.pinBaseTracks = tracks;\n return true;\n }\n\n /**\n * Pin a column to an edge (or unpin with `'none'`). `column` is the ORIGINAL\n * 0-based column index (its position before any pinning). The table owns the\n * whole mechanic: it physically re-sequences every row's cells (selection and\n * expansion state survive — the elements just move), maintains `sticky`\n * attributes, permutes the column template, and re-floors the header tracks\n * so pin icons / sort arrows never clip in frozen mode. The move itself is an\n * intentional SNAP (no FLIP) — the frozen header re-measures its tracks over\n * the next frames, and animating against that settling would jitter.\n * Resolves to the column's effective side after the call.\n */\n @Method()\n async pinColumn(column: number, side: 'start' | 'end' | 'none'): Promise<'start' | 'end' | null> {\n if (!this.ensurePinBase()) return null;\n if (side === 'none' || this.pinnedColumns.get(column) === side) {\n this.pinnedColumns.delete(column);\n } else {\n this.pinnedColumns.set(column, side);\n }\n this.applyPinLayout();\n const effective = this.pinnedColumns.get(column) ?? null;\n this.mdPinChange.emit({ column, side: effective });\n return effective;\n }\n\n /**\n * Hide or show a column. `column` is the ORIGINAL 0-based index (same\n * addressing as `pinColumn`). Hidden cells stay in the DOM (state\n * survives — they just stop displaying) and their track leaves the\n * template. The last visible column cannot be hidden. Resolves to the\n * column's effective visibility.\n */\n @Method()\n async setColumnVisibility(column: number, visible: boolean): Promise<boolean> {\n if (!this.ensurePinBase()) return true;\n if (column < 0 || column >= (this.pinBaseTracks?.length ?? 0)) return true;\n if (!visible && this.hiddenColumns.size >= (this.pinBaseTracks!.length - 1) && !this.hiddenColumns.has(column)) {\n console.warn('[md-table] setColumnVisibility: refusing to hide the last visible column.');\n return true;\n }\n if (visible) this.hiddenColumns.delete(column);\n else this.hiddenColumns.add(column);\n this.applyPinLayout();\n const effective = !this.hiddenColumns.has(column);\n this.mdColumnVisibilityChange.emit({\n column,\n visible: effective,\n hidden: Array.from(this.hiddenColumns).sort((a, b) => a - b),\n });\n return effective;\n }\n\n /** Re-sequence cells + sticky attrs + template for the current pin state. */\n private applyPinLayout() {\n const tracks = this.pinBaseTracks!;\n const all = tracks.map((_, i) => i);\n const start = all.filter((i) => this.pinnedColumns.get(i) === 'start');\n const end = all.filter((i) => this.pinnedColumns.get(i) === 'end');\n const mid = all.filter((i) => !this.pinnedColumns.has(i));\n const order = [...start, ...mid, ...end];\n\n this.el.querySelectorAll('md-table-row').forEach((row) => {\n order.forEach((k) => {\n const cell =\n MdTable.directChildren(row, (c) => c.getAttribute('data-md-col') === String(k))[0] ?? null;\n if (!cell) return;\n row.appendChild(cell); // appending in `order` re-sequences the cells\n const side = this.pinnedColumns.get(k);\n if (side) cell.setAttribute('sticky', side);\n else cell.removeAttribute('sticky');\n // hidden columns: cells stay in the DOM (state survives), just\n // undisplayed — their track leaves the template below\n if (this.hiddenColumns.has(k)) cell.setAttribute('data-md-col-hidden', '');\n else cell.removeAttribute('data-md-col-hidden');\n });\n });\n const visibleOrder = order.filter((k) => !this.hiddenColumns.has(k));\n this.el.setAttribute('column-template', visibleOrder.map((k) => tracks[k]).join(' '));\n this.syncHeaderContentFloors(visibleOrder);\n }\n\n /**\n * Content-driven header floors: in frozen mode each header track is forced\n * to its BODY cell's width, so header content that is wider than the body\n * values — a sort arrow, a pin icon — would spill into the next column.\n * Measure every header cell's light-DOM content span and floor its track\n * with minmax(need, base). The pin icon renders asynchronously in the cell's\n * shadow root, so pinned headers get a fixed allowance for it instead of\n * waiting on that render (16px icon + 4px gap).\n */\n private syncHeaderContentFloors(order?: number[]) {\n if (!this.frozenHeader || !this.pinBaseTracks) return;\n const tracks = this.pinBaseTracks;\n const seq = order ?? tracks.map((_, i) => i);\n requestAnimationFrame(() => {\n const headRow = this.el.querySelector('md-table-head md-table-row');\n if (!headRow) return;\n const tpl = seq.map((k) => {\n const base = tracks[k];\n const cell =\n MdTable.directChildren(headRow, (c) => c.getAttribute('data-md-col') === String(k))[0] ?? null;\n if (!cell || cell.getAttribute('padding') === 'checkbox') return base;\n const kids = Array.from(cell.children) as HTMLElement[];\n if (!kids.length) return base;\n const left = Math.min(...kids.map((el) => el.getBoundingClientRect().left));\n const right = Math.max(...kids.map((el) => el.getBoundingClientRect().right));\n const span = right - left;\n if (span <= 1) return base; // not laid out yet — no bogus floor\n const cs = getComputedStyle(cell);\n const pad = (parseFloat(cs.paddingInlineStart) || 0) + (parseFloat(cs.paddingInlineEnd) || 0);\n const pin =\n this.pinnedColumns.has(k) && !cell.hasAttribute('no-pin-indicator') ? 20 : 0;\n return `minmax(${Math.ceil(span + pad + pin)}px, ${base})`;\n });\n this.el.setAttribute('column-template', tpl.join(' '));\n });\n }\n\n /** Mount-time floors: a frozen table with sort labels needs its header\n * content floored even before any pinning (the always-reserved sort arrow\n * is wider than a short body value). Retries until the labels lay out. */\n private scheduleHeaderFloors(attempt = 0) {\n if (!this.frozenHeader || !this.columnTemplate) return;\n const probe = this.el.querySelector('md-table-head md-table-sort-label') as HTMLElement | null;\n if (!probe) return; // no sort labels — nothing wider than the body values\n const ready = probe.getBoundingClientRect().width > 1;\n if (!ready && attempt <= 30) {\n requestAnimationFrame(() => this.scheduleHeaderFloors(attempt + 1));\n return;\n }\n if (this.ensurePinBase(true)) this.syncHeaderContentFloors();\n }\n\n // ------------------------------------------------------------------\n // Built-in expressive motion (FLIP bracketing around sort / page events)\n // ------------------------------------------------------------------\n\n /**\n * Snapshot the current row boxes and FLIP-animate whatever the next\n * SYNCHRONOUS DOM mutation does to them. Call it right before you reorder /\n * show-hide rows outside the table's own events (custom filters, async\n * refetch completion, …); sort and pagination are bracketed automatically.\n */\n @Method()\n async animateNextChange(): Promise<void> {\n this.armMotion()?.();\n }\n\n /** Internal, synchronous arm signal — dispatched by md-table-container when\n * it hears a pagination event in the CAPTURE phase (a cross-shadow @Method\n * call would resolve on a microtask, after the consumer already mutated). */\n @Listen('mdMotionArm')\n handleMotionArm(e: CustomEvent) {\n e.stopPropagation();\n this.armMotion()?.();\n }\n\n /** Capture FIRST rects of the slotted body rows; returns the rAF-deferred\n * play(), or null when motion is off / there is nothing to animate. */\n private armMotion(): (() => void) | null {\n if (this.motion === 'none') return null;\n const body = this.el.querySelector('md-table-body') as HTMLElement | null;\n if (!body) return null;\n return captureFlip(body, { enter: true, stagger: 18, staggerCap: 6, spring: 'fast' });\n }\n\n // ------------------------------------------------------------------\n // Sort / selection event coordination\n // ------------------------------------------------------------------\n\n @Listen('mdSortRequest')\n handleSortRequest(e: CustomEvent<{ column: string; defaultOrder?: 'asc' | 'desc' }>) {\n e.stopPropagation();\n const col = e.detail.column;\n if (!col) return;\n\n // First activation starts at the label's default-order; subsequent clicks\n // cycle from there (desc-first columns cycle desc -> asc -> none).\n const first: MdTableSortOrder = e.detail.defaultOrder === 'desc' ? 'desc' : 'asc';\n let order: MdTableSortOrder = first;\n if (this.sortBy === col) {\n const second: MdTableSortOrder = first === 'asc' ? 'desc' : 'asc';\n order = this.sortOrder === first ? second : this.sortOrder === second ? 'none' : first;\n }\n this.sortBy = order === 'none' ? '' : col;\n this.sortOrder = order === 'none' ? 'asc' : order;\n // Bracket the consumer's reorder: capture rows now, emit (handlers run\n // synchronously during emit), then play — the rAF-deferred FLIP glides\n // survivors and fades in rows the new order revealed.\n const play = this.armMotion();\n this.mdSortChange.emit({ column: this.sortBy, order });\n play?.();\n }\n\n /**\n * AUTO-WIRED selection checkboxes: the table already keeps slotted\n * md-checkboxes in sync (syncSelectionUI) — it now also HANDLES them, so\n * plain markup works with zero consumer wiring. Deliberately DECLARATIVE\n * (set state to the checkbox's checked value, never toggle): consumers that\n * wired their own handlers apply the same end state, so double-handling is\n * idempotent instead of self-cancelling.\n */\n @Listen('mdChange')\n handleSlottedCheckboxChange(e: CustomEvent<{ checked?: boolean }>) {\n if (this.selection === 'none') return;\n const target = e.target as HTMLElement;\n if (target.tagName !== 'MD-CHECKBOX') return;\n const checked = !!e.detail?.checked;\n // DEFER one microtask. Consumer handlers run earlier in the dispatch\n // (target phase) but their table calls go through Stencil @Method\n // proxies, whose bodies also run on a microtask — queued BEFORE this one\n // (FIFO). Acting synchronously here inverted stateful consumer wiring:\n // auto-wire selected all during bubble, then the consumer's deferred\n // toggleSelectAll() read all=true and DESELECTED — the click net-reverted\n // (proven with an event trace). Deferred, the consumer's toggle executes\n // against the pre-click state and this declarative set converges last.\n queueMicrotask(() => {\n if (target.closest('md-table-head')) {\n if (this.selection !== 'multiple') return; // select-all box is inert in single mode\n if (checked) void this.selectAll();\n else void this.deselectAll();\n return;\n }\n const row = target.closest('md-table-row') as SelectableRow | null;\n if (row && row.closest('md-table-body') && !row.disabled && row.selectable !== false) {\n row.selected = checked;\n }\n });\n }\n\n /** Rowgroups relay their internal slot changes (row reorders/additions\n * never cross their shadow boundary as slotchange) — re-stamp context. */\n @Listen('mdRowgroupSlotChange')\n handleRowgroupSlotChange() {\n this.syncRows();\n // Covers checkbox columns appearing with a mode switch: the select-all box\n // must pick up its single-mode disabled state even though it was\n // inserted AFTER the selection watch ran.\n this.recomputeSelection(false);\n // Cell-count changes alter the resolved body tracks — the frozen header\n // held stale tracks (8 vs the body's 6 after Playground none->single)\n // until the next unrelated resize.\n this.syncFrozenColumns();\n this.updateHScroll();\n this.updateVScroll();\n }\n\n @Listen('mdRowSelectionChange')\n handleRowSelectionChange(e: CustomEvent<{ selected: boolean; value: string }>) {\n if (this.bulkSelecting) return; // one recompute at the end of the bulk op\n if (this.selection === 'single' && e.detail.selected) {\n // Enforce single-selection: deselect all OTHER rows\n const target = e.target as HTMLElement;\n this.bulkSelecting = true;\n try {\n this.getSelectableRows().forEach((r) => {\n if (r !== target) r.selected = false;\n });\n } finally {\n this.bulkSelecting = false;\n }\n }\n this.recomputeSelection();\n }\n\n // ------------------------------------------------------------------\n // Internal helpers\n // ------------------------------------------------------------------\n\n /** Body rows only — header/footer rows must never join selection math. */\n private getSelectableRows(): SelectableRow[] {\n return (Array.from(this.el.querySelectorAll('md-table-row')) as unknown as SelectableRow[]).filter(\n (r) => (r.closest('md-table-head') || r.closest('md-table-foot')) == null,\n );\n }\n\n private recomputeSelection(emit: boolean = true) {\n const rows = this.getSelectableRows();\n const selectable = rows.filter((r) => !r.disabled && r.selectable !== false);\n const selected = selectable.filter((r) => r.selected);\n const all = selectable.length > 0 && selected.length === selectable.length;\n const indeterminate = selected.length > 0 && !all;\n\n this.selectionCache = {\n count: selected.length,\n total: selectable.length,\n values: selected.map((r, i) => r.value || String(i)),\n all,\n indeterminate,\n };\n\n this.syncSelectionUI(rows, all, indeterminate);\n\n if (emit) this.mdSelectionChange.emit(this.selectionCache);\n }\n\n /**\n * Push the selection MODEL back into the slotted checkboxes (the missing half\n * of the two-way sync): each body row's checkbox mirrors `row.selected`, and\n * the header checkbox reflects all / indeterminate. Row `selected` is the\n * source of truth; a checkbox is just its view. `md-checkbox` only emits\n * `mdChange` on user interaction (not on programmatic `.checked`), and the\n * value-equality guards make this a no-op once in sync — so no event loops.\n */\n private syncSelectionUI(rows: SelectableRow[], all: boolean, indeterminate: boolean) {\n // Keep the ARIA selected state in lockstep with the visual one.\n if (this.selection !== 'none') {\n for (const r of rows) {\n const host = r as unknown as HTMLElement;\n if (host.closest('md-table-body') == null) continue;\n if (r.selectable === false || r.disabled) host.removeAttribute('aria-selected');\n else host.setAttribute('aria-selected', String(!!r.selected));\n }\n }\n\n if (this.selection === 'none') {\n // Clear any residue a previous mode left on the select-all checkbox.\n const staleHead = this.el.querySelector('md-table-head md-checkbox') as\n | (HTMLElement & { checked: boolean; disabled: boolean; indeterminate: boolean })\n | null;\n if (staleHead) {\n staleHead.disabled = false;\n staleHead.checked = false;\n staleHead.indeterminate = false;\n }\n return;\n }\n for (const r of rows) {\n const cb = (r as unknown as HTMLElement).querySelector('md-checkbox') as\n | (HTMLElement & { checked: boolean; disabled: boolean })\n | null;\n if (!cb) continue;\n if (cb.checked !== r.selected) cb.checked = r.selected;\n if (cb.disabled !== !!r.disabled) cb.disabled = !!r.disabled;\n }\n const headCb = this.el.querySelector('md-table-head md-checkbox') as\n | (HTMLElement & { checked: boolean; indeterminate: boolean; disabled: boolean })\n | null;\n if (headCb) {\n if (this.selection === 'single') {\n // No select-all in radio-like mode: the affordance is disabled and\n // cleared so single visibly differs from multiple.\n if (!headCb.disabled) headCb.disabled = true;\n if (headCb.checked) headCb.checked = false;\n if (headCb.indeterminate) headCb.indeterminate = false;\n } else {\n if (headCb.disabled) headCb.disabled = false;\n if (headCb.indeterminate !== indeterminate) headCb.indeterminate = indeterminate;\n if (headCb.checked !== all) headCb.checked = all;\n }\n }\n }\n\n /**\n * Stamp layout context onto slotted rows (the stepper-style push pattern):\n * rowgroup (head/body/foot), stripe parity, sticky flags. Rows/cells style\n * themselves from these attributes — no `:host-context()`, no observers.\n */\n private syncRows() {\n // Frozen header: project md-table-head into the dedicated header grid via\n // the `head` slot (only when sticky-header, else it stays in the main grid).\n const headEl = this.el.querySelector('md-table-head');\n if (headEl) {\n if (this.frozenHeader) headEl.setAttribute('slot', 'head');\n else if (headEl.getAttribute('slot') === 'head') headEl.removeAttribute('slot');\n }\n\n // Rowgroup role coordination for the frozen split. The body/foot render\n // inside `.md-table__body-scroll`, which is itself role=\"rowgroup\" (it must\n // be a valid child of role=\"table\" despite being a focusable scroll tab\n // stop). Their own rowgroup role would then nest inside that wrapper\n // rowgroup (axe aria-required-children: a rowgroup may only own rows), so\n // they drop to presentation and their rows promote to the wrapper. The head\n // sits in a presentational header wrapper, so it keeps its own rowgroup\n // role. Pushed as a reflected prop (not an imperative role override) so the\n // child decides its own role on render — no race with its first paint.\n (Array.from(this.el.querySelectorAll('md-table-body, md-table-foot')) as HTMLElement[]).forEach((rg) => {\n if (this.frozenHeader) rg.setAttribute('presentational', '');\n else rg.removeAttribute('presentational');\n });\n\n const rows = Array.from(this.el.querySelectorAll('md-table-row')) as HTMLElement[];\n const lastIndex = rows.length - 1;\n // A treegrid is the only table-family container whose rows may carry\n // aria-expanded (the disclosure state md-table-row stamps when expandable).\n // Recompute here so the structural role in render() promotes to treegrid\n // exactly when such a row exists, and drops back to table when none do.\n const hasExpandable = rows.some((r) => r.hasAttribute('expandable'));\n if (this.hasExpandableRow !== hasExpandable) this.hasExpandableRow = hasExpandable;\n // Suppress the final row's divider ONLY when that row actually sits at the\n // container's rounded bottom corner: i.e. the table is inside an\n // md-table-container AND nothing is slotted below it (a `slot=\"bottom\"`\n // pagination bar owns the corner instead, and needs the divider above it\n // kept). A bare md-table has no rounded corner, so its bottom border stays.\n const container = this.el.closest('md-table-container');\n const hasBottomBar =\n !!container &&\n MdTable.directChildren(container, (c) => c.getAttribute('slot') === 'bottom').length > 0;\n const suppressLastDivider = !!container && !hasBottomBar;\n // The foot row carries its own top divider (border-block-start); the last\n // body row before it must drop its bottom divider or the two double up.\n const footExists = rows.some((r) => r.closest('md-table-foot') != null);\n let lastBodyIdx = -1;\n rows.forEach((r, i) => {\n if (r.closest('md-table-head') == null && r.closest('md-table-foot') == null) lastBodyIdx = i;\n });\n const nHead = rows.filter((r) => r.closest('md-table-head') != null).length;\n let bodyIndex = 0;\n let headIndex = 0;\n let footIndex = 0;\n rows.forEach((row, i) => {\n const inHead = row.closest('md-table-head') != null;\n const inFoot = row.closest('md-table-foot') != null;\n const group = inHead ? 'head' : inFoot ? 'foot' : 'body';\n const set = (k: string, v: string | null) => {\n if (v === null) {\n if (row.hasAttribute(k)) row.removeAttribute(k);\n } else if (row.getAttribute(k) !== v) {\n row.setAttribute(k, v);\n }\n };\n set('rowgroup', group);\n set('data-stripe', group === 'body' && this.striped && bodyIndex % 2 === 1 ? 'true' : null);\n set('data-sticky', (inHead && this.stickyHeader) || (inFoot && this.stickyFooter) ? 'true' : null);\n // Stamp the final row only when it truly meets the container's rounded\n // bottom (see suppressLastDivider). `:host([data-last])` in\n // md-table-row.css drops just that row's divider; all others are kept.\n set('data-last', suppressLastDivider && i === lastIndex ? 'true' : null);\n // Drop the last body row's bottom divider when a footer follows (the foot\n // supplies the single body/foot divider via border-block-start).\n set('data-adjacent-foot', footExists && i === lastBodyIdx ? 'true' : null);\n // ARIA pagination positions: with row-count set only a subset is in the\n // DOM, so every row needs aria-rowindex (1-based, headers first, body\n // offset by row-offset). Foot rows have no well-defined absolute index.\n if (this.rowCount > 0) {\n if (inHead) set('aria-rowindex', String(headIndex + 1));\n else if (!inFoot) set('aria-rowindex', String(nHead + this.rowOffset + bodyIndex + 1));\n // Foot rows sit AFTER the full dataset in reading order.\n else set('aria-rowindex', String(nHead + this.rowCount + footIndex + 1));\n } else {\n set('aria-rowindex', null);\n }\n if (inFoot) footIndex++;\n // aria-selected belongs ONLY on selectable body rows of a\n // selection-enabled table (never head/foot, never selection=\"none\").\n if (group === 'body' && this.selection !== 'none') {\n const r = row as unknown as SelectableRow;\n set('aria-selected', r.selectable === false || r.disabled ? null : String(!!r.selected));\n } else {\n set('aria-selected', null);\n }\n if (group === 'body') bodyIndex++;\n if (inHead) headIndex++;\n // Cast the table-wide pin icon to pinned header cells (author-set\n // values win; our previous casts are tracked and replaceable).\n if (inHead) {\n (Array.from(row.children) as HTMLElement[]).forEach((cell) => {\n const side = cell.getAttribute('sticky');\n if (cell.tagName !== 'MD-TABLE-CELL' || (side !== 'start' && side !== 'end')) return;\n const cast = cell.getAttribute('data-pin-icon-cast');\n const own = cell.getAttribute('pin-icon');\n if (own !== null && own !== cast) return; // author override — hands off\n if (this.pinIcon) {\n if (own !== this.pinIcon) {\n cell.setAttribute('pin-icon', this.pinIcon);\n cell.setAttribute('data-pin-icon-cast', this.pinIcon);\n }\n } else if (cast !== null) {\n cell.removeAttribute('pin-icon');\n cell.removeAttribute('data-pin-icon-cast');\n }\n });\n }\n });\n }\n\n /** Push the active sort state into every slotted sort label. */\n private syncSortLabels() {\n const labels = Array.from(this.el.querySelectorAll('md-table-sort-label')) as Array<\n HTMLElement & { active: boolean; order: MdTableSortOrder }\n >;\n for (const l of labels) {\n const col = l.getAttribute('column') || '';\n const active = !!col && col === this.sortBy;\n if (l.active !== active) l.active = active;\n const order = active ? this.sortOrder : 'none';\n if (l.order !== order) l.order = order;\n // aria-sort lives on the columnheader CELL (it is ignored on the sort\n // label's role=\"button\"); sortable-but-inactive columns expose \"none\".\n const cell = l.closest('md-table-cell');\n if (cell) {\n const ariaSort = !active || order === 'none' ? 'none' : order === 'asc' ? 'ascending' : 'descending';\n if (cell.getAttribute('aria-sort') !== ariaSort) cell.setAttribute('aria-sort', ariaSort);\n }\n }\n }\n\n private handleSlotChange = () => {\n this.syncRows();\n this.syncSortLabels();\n this.recomputeSelection(false);\n };\n\n /** Best-effort column count for the skeleton loader. */\n private get columnCount(): number {\n if (this.columns > 0) return this.columns;\n if (this.columnTemplate) {\n const t = this.columnTemplate.trim();\n const m = t.match(/repeat\\(\\s*(\\d+)/);\n if (m) return parseInt(m[1], 10);\n return t.split(/\\s+/).filter(Boolean).length || 1;\n }\n const firstRow = this.el.querySelector('md-table-row');\n return firstRow ? firstRow.querySelectorAll('md-table-cell').length || 1 : 1;\n }\n\n /** Skeleton body rows: one shimmer bar PER COLUMN (fills the row, on the\n * shared subgrid tracks), varied widths for a natural look. */\n private renderSkeletonRows() {\n const cols = Math.max(1, this.columnCount);\n return Array.from({ length: Math.max(1, this.loadingRows) }).map((_, r) => (\n <div class=\"md-table__skeleton-row\" part=\"skeleton-row\" aria-hidden=\"true\" key={`sk-${r}`}>\n {Array.from({ length: cols }).map((__, c) => (\n <span class=\"md-table__bar\" key={`sk-${r}-${c}`} />\n ))}\n </div>\n ));\n }\n\n private renderEmpty() {\n return (\n <div class=\"md-table__empty\" part=\"empty\">\n <slot name=\"empty\">\n <span class=\"md-table__empty-text\">No data</span>\n </slot>\n </div>\n );\n }\n\n render() {\n // Template resolution: explicit prop → public CSS var (in stylesheet\n // fallback chain) → derived-from-first-row count.\n const style: { [k: string]: string } = {};\n if (this.columnTemplate) {\n style['--_columns-template'] = this.columnTemplate;\n } else if (this.columns > 0) {\n style['--_columns-template'] = `repeat(${this.columns}, minmax(0, 1fr))`;\n } else {\n const firstRow = this.el.querySelector('md-table-row');\n const count = firstRow ? firstRow.querySelectorAll('md-table-cell').length : 0;\n if (count > 0) style['--_derived-template'] = `repeat(${count}, minmax(0, 1fr))`;\n }\n if (this.minWidth) style['--_min-width'] = this.minWidth;\n // ARIA for the structural table element (see host comment). When any row\n // is expandable the container is a `treegrid` rather than a plain `table`\n // so those rows' `aria-expanded` is valid (aria-conditional-attr); every\n // other property below is shared by both roles.\n const tableAria = {\n role: this.hasExpandableRow ? 'treegrid' : 'table',\n 'aria-label': this.label || this.caption || 'Data table',\n 'aria-description': this.summary || null,\n 'aria-busy': this.loading ? 'true' : null,\n // Header + foot rows count toward the ARIA row total.\n 'aria-rowcount':\n this.rowCount > 0\n ? String(\n this.rowCount +\n this.el.querySelectorAll('md-table-head md-table-row, md-table-foot md-table-row').length,\n )\n : null,\n };\n\n return (\n <Host\n class={{\n 'md-table': true,\n [`md-table--density-${this.density}`]: typeof this.density === 'string',\n 'md-table--sticky-header': this.stickyHeader,\n 'md-table--sticky-footer': this.stickyFooter,\n 'md-table--striped': this.striped,\n 'md-table--no-dividers': this.noDividers,\n 'md-table--hoverable': this.hoverable,\n 'md-table--loading': this.loading,\n [`md-table--loading-${this.loadingMode}`]: this.loading,\n 'md-table--empty': this.empty,\n }}\n // The table / treegrid role lives on the inner STRUCTURAL wrapper, not\n // the host: the table content model admits only rowgroups/rows, and the\n // host also hosts the caption, live region, loading overlay and empty\n // state (axe aria-required-children).\n style={style}\n >\n {/* Persistent polite live region: announces the empty state appearing.\n NO role=\"status\" — an explicit status role is an invalid child of\n role=\"table\" (axe aria-required-children); a bare aria-live span\n announces identically without entering the table content model. */}\n <span class=\"md-table__sr-status\" aria-live=\"polite\">\n {this.srAnnouncement}\n </span>\n {/* Caption is VISUAL only: its text names the table via aria-label\n (IDREFs can't cross the shadow boundary, and axe rejects\n role=\"caption\" as a table child) — aria-hidden avoids the name\n being announced twice. */}\n {this.caption && (\n <div class=\"md-table__caption\" part=\"caption\" aria-hidden=\"true\">\n {this.caption}\n </div>\n )}\n\n {this.frozenHeader ? (\n // Frozen header: the header grid sits above a vertically-scrolling\n // body grid, so the scrollbar spans only the body. Both grids share\n // the column tracks (syncFrozenColumns copies the body's resolved\n // pixel tracks onto the header, which also reserves the body's\n // scrollbar gutter on the header). Horizontal scroll is mirrored.\n <div class=\"md-table__frozen\" {...tableAria}>\n <div\n class=\"md-table__head-scroll\"\n role=\"presentation\"\n ref={(el) => (this.headScrollEl = el as HTMLElement)}\n >\n <div\n class=\"md-table__grid md-table__grid--head\"\n part=\"header-grid\"\n ref={(el) => (this.headGridEl = el as HTMLElement)}\n >\n <slot name=\"head\" onSlotchange={this.handleSlotChange}></slot>\n </div>\n </div>\n <div\n class=\"md-table__body-scroll\"\n // Keyboard users must be able to scroll the capped body without\n // a pointer (WAI: scrollable region), hence the tab stop. A\n // focusable element may not sit as a bare child of role=\"table\"\n // (axe aria-required-children — only rowgroup/row are allowed),\n // so this wrapper IS the body's rowgroup: role=\"rowgroup\" is a\n // required child of table, so axe walks THROUGH it to the rows\n // even though it is a scroll tab stop. The slotted md-table-body/\n // md-table-foot inside drop to presentation (see syncRows) so\n // their rows promote here instead of nesting a second rowgroup.\n role=\"rowgroup\"\n tabindex=\"0\"\n ref={(el) => (this.bodyScrollEl = el as HTMLElement)}\n onScroll={this.onBodyScroll}\n onWheel={this.onBodyWheel}\n onKeyDown={this.onBodyKeyDown}\n >\n <div\n class=\"md-table__grid md-table__grid--body\"\n part=\"grid\"\n // Layout-only grid between the rowgroup wrapper and the rows.\n role=\"presentation\"\n ref={(el) => (this.bodyGridEl = el as HTMLElement)}\n >\n <slot onSlotchange={this.handleSlotChange}></slot>\n {this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows()}\n </div>\n {/* Frozen mode: empty message lives inside the body scroll area so\n it sits directly under the header and fills the body. */}\n {this.empty && !this.loading && this.renderEmpty()}\n </div>\n {/* Custom, always-visible horizontal scrollbar (JS-toggled when the\n body overflows) — replaces the invisible native overlay bar. */}\n <div\n class=\"md-table__hscroll\"\n part=\"hscrollbar\"\n aria-hidden=\"true\"\n ref={(el) => (this.hTrackEl = el as HTMLElement)}\n >\n <div\n class=\"md-table__hscroll-thumb\"\n part=\"hscrollbar-thumb\"\n ref={(el) => (this.hThumbEl = el as HTMLElement)}\n onPointerDown={this.onHThumbPointerDown}\n onPointerMove={this.onHThumbPointerMove}\n onPointerUp={this.onHThumbPointerUp}\n onPointerCancel={this.onHThumbPointerUp}\n ></div>\n </div>\n {/* Custom vertical OVERLAY scrollbar — floats over the rows' right\n edge (no reserved gutter, rows stay full width). */}\n <div\n class=\"md-table__vscroll\"\n part=\"vscrollbar\"\n aria-hidden=\"true\"\n ref={(el) => (this.vTrackEl = el as HTMLElement)}\n >\n <div\n class=\"md-table__vscroll-thumb\"\n part=\"vscrollbar-thumb\"\n ref={(el) => (this.vThumbEl = el as HTMLElement)}\n onPointerDown={this.onVThumbPointerDown}\n onPointerMove={this.onVThumbPointerMove}\n onPointerUp={this.onVThumbPointerUp}\n onPointerCancel={this.onVThumbPointerUp}\n ></div>\n </div>\n </div>\n ) : (\n <div class=\"md-table__grid\" part=\"grid\" {...tableAria}>\n <slot onSlotchange={this.handleSlotChange}></slot>\n {this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows()}\n </div>\n )}\n\n {this.loading && this.loadingMode === 'overlay' && (\n <div class=\"md-table__loading\" part=\"loading\" aria-hidden=\"true\">\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 <div class=\"md-table__progress\" part=\"progress\">\n <md-progress-indicator variant=\"linear\" indeterminate aria-label=\"Loading\"></md-progress-indicator>\n </div>\n <div class=\"md-table__scrim\" />\n </slot>\n </slot>\n </div>\n )}\n\n {/* Non-frozen: empty message is a sibling that flex-fills below the grid. */}\n {this.empty && !this.loading && !this.frozenHeader && this.renderEmpty()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|