@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Host, forceUpdate, h } from "@stencil/core";
|
|
2
|
+
import { LazyLoadingIndicator } from "../../utils/lazy-loading-indicator";
|
|
2
3
|
import { collectOptions, labelFor, normalizeInits, rowsToArray, } from "../../utils/select-options";
|
|
3
4
|
import { setFormValue, setValidityState, checkValidityOf, reportValidityOf, getValidityOf, } from "../../utils/form";
|
|
4
5
|
import { VirtualSelectController } from "../../utils/virtual-select-controller";
|
|
@@ -577,7 +578,7 @@ export class MdSelect {
|
|
|
577
578
|
return (h("md-text-field", { ref: (el) => (this.fieldEl = el), id: this.triggerId, class: "md-select__field", part: "field", exportparts: "container:field-container", variant: this.variant, label: this.label, "aria-label": fieldAriaLabel, placeholder: hasValue ? '' : this.placeholder, value: display, readOnly: true, disabled: this.disabled, required: this.required, error: this.error, errorText: this.errorText, reserveSupportingSpace: this.reserveSupportingSpace, supportingText: this.supportingText, density: this.density, appearFocused: this.open, onClick: this.toggleOpen }, h("span", { slot: "trailing-icon", class: "md-select__trailing", part: "trailing", "aria-hidden": "true" }, this.loading ? (
|
|
578
579
|
// Busy state: a spinner replaces the caret/clear. Consumers can swap
|
|
579
580
|
// the spinner via the `loader` slot; the default is md-loading-indicator.
|
|
580
|
-
h("span", { class: "md-select__loader", part: "loading-spinner" }, h("slot", { name: "loader" }, h(
|
|
581
|
+
h("span", { class: "md-select__loader", part: "loading-spinner" }, h("slot", { name: "loader" }, h(LazyLoadingIndicator, { label: this.loadingText })))) : ([
|
|
581
582
|
showClear && (h("md-icon-button", { class: "md-select__clear", part: "clear", size: "xs", icon: this.clearIcon, "aria-label": this.clearLabel, shapeMorph: false,
|
|
582
583
|
// Keep it out of the tab order: the cluster is aria-hidden and
|
|
583
584
|
// the select trigger owns focus, matching the prior <button>.
|
|
@@ -642,7 +643,7 @@ export class MdSelect {
|
|
|
642
643
|
// (set by md-menu). aria-controls points at the listbox wrapper,
|
|
643
644
|
// which md-select renders in this same shadow root so the IDREF
|
|
644
645
|
// resolves (the menu surface is only role="presentation").
|
|
645
|
-
role: "combobox", "aria-haspopup": "listbox", "aria-expanded": String(this.open), "aria-controls": `${this.triggerId}-listbox`, "aria-autocomplete": "list", autocomplete: "off", placeholder: this.searchPlaceholder, "aria-label": this.filterLabel || (this.label ? `Filter ${this.label}` : 'Filter options'), onInput: this.onSearchInput, onClick: (e) => e.stopPropagation() }), this.searching && (h(
|
|
646
|
+
role: "combobox", "aria-haspopup": "listbox", "aria-expanded": String(this.open), "aria-controls": `${this.triggerId}-listbox`, "aria-autocomplete": "list", autocomplete: "off", placeholder: this.searchPlaceholder, "aria-label": this.filterLabel || (this.label ? `Filter ${this.label}` : 'Filter options'), onInput: this.onSearchInput, onClick: (e) => e.stopPropagation() }), this.searching && (h(LazyLoadingIndicator, { class: "md-select__search-spinner", part: "search-spinner", label: this.searchingLabel, "aria-hidden": "true" })))), this.loading ? (
|
|
646
647
|
// Busy state inside the menu: a wavy (M3 Expressive) indeterminate
|
|
647
648
|
// linear progress bar instead of "Loading…" text.
|
|
648
649
|
h("div", { class: "md-select__loading", part: "loading-bar", role: "status", "aria-label": this.loadingText }, h("md-progress-indicator", { variant: "linear", indeterminate: true, wave: true, part: "loading-progress", label: this.loadingText }))) : virtual ? (this.renderVirtualOptions()) : (
|
|
@@ -654,13 +655,13 @@ export class MdSelect {
|
|
|
654
655
|
h("div", { class: "md-select__listbox", role: "listbox", id: `${this.triggerId}-listbox`, "aria-label": this.accessibleName || 'Options' }, listOptions.map((opt) => (h("md-menu-item", { key: opt.value, id: `${this.triggerId}-opt-${opt.value}`, presentation: "option", type: "radio", "check-position": "start", "keep-open": true, part: opt.value === this.value ? 'option option-selected' : 'option', disabled: opt.disabled, selected: opt.value === this.value, headline: opt.label, "supporting-text": opt.supportingText || '', onMdClick: () => this.selectValue(opt.value) }, opt.icon ? (h("span", { slot: "leading-icon", part: "option-icon", class: "material-symbols-outlined md-select__option-icon", style: opt.iconColor ? { color: opt.iconColor } : undefined, "aria-hidden": "true" }, opt.icon)) : null)))))));
|
|
655
656
|
}
|
|
656
657
|
render() {
|
|
657
|
-
return (h(Host, { key: '
|
|
658
|
+
return (h(Host, { key: '80b4ba73a6076b553c86ecc8e1bfa2a32ca9eb1a', class: {
|
|
658
659
|
'md-select': true,
|
|
659
660
|
[`md-select--${this.variant}`]: true,
|
|
660
661
|
'md-select--open': this.open,
|
|
661
662
|
'md-select--disabled': this.disabled,
|
|
662
663
|
'md-select--loading': this.loading,
|
|
663
|
-
}, "aria-haspopup": "listbox", "aria-busy": this.loading ? 'true' : undefined }, this.renderTrigger(), this.renderMenu(), h("div", { key: '
|
|
664
|
+
}, "aria-haspopup": "listbox", "aria-busy": this.loading ? 'true' : undefined }, this.renderTrigger(), this.renderMenu(), h("div", { key: '3cb7f01eb33bd8025d26c0dffe52748a394d4091', class: "md-select__options", hidden: true }, h("slot", { key: '2cc921cc04dc87830ca2ee4456eccd6dee79315a', onSlotchange: () => this.refreshOptions() }))));
|
|
664
665
|
}
|
|
665
666
|
static get is() { return "md-select"; }
|
|
666
667
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"md-select.js","sourceRoot":"","sources":["../../../src/components/md-select/md-select.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Method, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\nimport {\n collectOptions,\n labelFor,\n normalizeInits,\n OptionRowSource,\n rowsToArray,\n SelectOptionData,\n SelectOptionInit,\n} from '../../utils/select-options';\nimport {\n setFormValue,\n setValidityState,\n checkValidityOf,\n reportValidityOf,\n getValidityOf,\n} from '../../utils/form';\nimport { VirtualSelectController } from '../../utils/virtual-select-controller';\nimport { isWasmSupported, FilterMode } from '../../utils/wasm-option-store';\nimport { VirtualMenuProvider } from '../../utils/types';\nimport { parseJsonArrayProp } from '../../utils/json-prop';\n\nlet selectIdCounter = 0;\n\n/** Above this many options, `virtualize=\"auto\"` switches to the WASM path. */\nconst VIRTUALIZE_THRESHOLD = 200;\n\n/** Idle time after a keystroke before the search query runs (debounce). */\nconst SEARCH_DEBOUNCE_MS = 180;\n\ntype VirtualMenuEl = HTMLElement & {\n show?: (opts?: { autoFocus?: boolean }) => Promise<void>;\n close?: () => Promise<void>;\n setVirtualProvider?: (p: VirtualMenuProvider | null) => Promise<void>;\n setComboboxElement?: (el: HTMLElement | null) => Promise<void>;\n getScrollViewport?: () => Promise<HTMLElement | null>;\n};\n\n/**\n * `md-select` — Material Design 3 single-select dropdown.\n *\n * Composes the library's own primitives instead of re-implementing them:\n * - `md-text-field` is the trigger surface, so the picker inherits the\n * full filled/outlined visuals, density scale, floating label, error\n * state, supporting text, and focus ring of every other input. It is\n * `readonly` (not editable) and `appear-focused` while the menu is open\n * so the field + menu read as one connected control.\n * - `md-menu` is the option surface, so the picker inherits open/close\n * motion, viewport-aware positioning, single-open coordination, roving\n * tabindex, type-ahead, and Escape/Home/End — for free.\n *\n * Options are authored either declaratively as slotted `<md-select-option>`\n * children (primary API) or via the programmatic `options` array. Each\n * becomes a `type=\"radio\"` `md-menu-item` so only one is ever selected.\n *\n * @slot - `md-select-option` children for the dropdown (primary authoring API).\n * @slot dropdown-icon - Replaces the caret glyph (e.g. a custom SVG). Rotates 180° when open.\n * @slot loader - Replaces the busy-state spinner shown in the trigger while `loading`.\n *\n * @part field - The inner `md-text-field` trigger surface.\n * @part field-container - The text-field's container box (border/fill).\n * @part trailing - The trailing cluster wrapping the clear + caret.\n * @part clear - The clear (✕) `md-icon-button`.\n * @part caret - The dropdown caret glyph.\n * @part loading-spinner - The busy-state spinner in the trigger (`loading`).\n * @part loading-bar - The busy-state container in the menu (`loading`).\n * @part loading-progress - The wavy progress indicator shown in the menu while `loading`.\n * @part menu - The `md-menu` option surface.\n * @part option - Each option row (`md-menu-item`).\n * @part option-selected - The currently selected option row.\n * @part option-icon - An option's leading icon.\n * @part search - The filter input (`filterable`).\n * @part search-spinner - The in-menu spinner shown while filtering.\n */\n@Component({\n tag: 'md-select',\n styleUrl: 'md-select.css',\n shadow: true,\n formAssociated: true,\n})\nexport class MdSelect {\n @Element() el!: HTMLElement;\n\n\n /**\n * Localized constraint-validation message shown when `required` is unmet.\n *\n * A prop rather than a hardcoded string, matching md-time-picker's\n * `value-missing-label`: components stay i18n-engine-agnostic and the\n * consumer localizes through its own dictionary. Native inputs get their\n * message from the browser's locale for free; a form-associated custom\n * element supplies its own, so leaving this hardcoded would ship an\n * English-only form to every locale.\n */\n @Prop({ attribute: 'value-missing-label' }) valueMissingLabel: string =\n 'Please select an item in the list.';\n\n\n /**\n * Always occupy the supporting-text line, even when there is no message, so a\n * validation error does not push the content below it down. Forwarded to the\n * embedded md-text-field. See that component for why it is opt-in.\n */\n @Prop({ attribute: 'reserve-supporting-space' }) reserveSupportingSpace: boolean = false;\n\n /** Message set via setCustomValidity(); non-empty wins over valueMissing. */\n private customValidityMessage = '';\n\n /**\n * Form-association handle. The select submits its `value` under the host's\n * `name` via `setFormValue`, so it participates in `<form>`/`FormData`\n * natively — a hidden `<input>` in the shadow root would be invisible to\n * `FormData`.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /** Visual variant — forwarded to the inner `md-text-field`. */\n @Prop({ reflect: true }) variant: 'filled' | 'outlined' = 'outlined';\n\n /** Floating label / accessible name. */\n @Prop() label: string = '';\n\n /** Placeholder shown when no value is selected. */\n @Prop() placeholder: string = '';\n\n /** Selected option value. Empty string = nothing selected. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /** Disabled — non-interactive. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Required (form validation parity). */\n @Prop({ reflect: true }) required: boolean = false;\n\n /** Error state — forwarded to the inner field. */\n @Prop({ reflect: true }) error: boolean = false;\n\n /** Error text rendered in place of supporting text when `error` is set. */\n @Prop({ attribute: 'error-text' }) errorText: string = '';\n\n /** Supporting / helper text rendered below the field. */\n @Prop({ attribute: 'supporting-text' }) supportingText: string = '';\n\n /** Density forwarded to the inner field (0 = comfortable … -3 = compact). */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n /** Show a clear (✕) button in the trigger when a value is selected. */\n @Prop({ reflect: true }) clearable: boolean = false;\n\n /**\n * Match the dropdown width to the trigger width. When `false` the menu\n * sizes to its content (down to its own min-width). Maps to `md-menu`'s\n * `match-anchor-width`. Default `true` — the expected select behaviour.\n */\n @Prop({ attribute: 'match-trigger-width', reflect: true })\n matchTriggerWidth: boolean = true;\n\n /** Menu placement relative to the trigger — forwarded to `md-menu`. */\n @Prop() placement: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' =\n 'bottom-start';\n\n /**\n * Cap the dropdown height. When the options exceed it the list scrolls\n * vertically with top/bottom edge shadows. A number is pixels; any CSS\n * length is passed through (e.g. `'50vh'`). Forwarded to `md-menu`'s\n * `max-height`.\n */\n @Prop({ attribute: 'max-height' }) maxHeight?: number | string;\n\n /** Programmatic options. Ignored when `<md-select-option>` children exist. */\n /**\n * Programmatic options. Slotted `md-select-option` children take precedence.\n *\n * Accepts the array (property) or a **JSON string** (attribute), so a\n * plain-HTML page can declare its data inline instead of reaching for a\n * script. Malformed JSON degrades to an empty list with a console warning.\n */\n @Prop() options: SelectOptionInit[] | string = [];\n\n /** `options` as an array, whether it arrived as one or as a JSON attribute. */\n private get optionList(): SelectOptionInit[] {\n return parseJsonArrayProp<SelectOptionInit>(this.options, 'md-select', 'options');\n }\n\n /**\n * Virtualization mode for large option lists (backed by a WASM data engine):\n * - `'auto'` (default): virtualize only above `VIRTUALIZE_THRESHOLD` rows.\n * - `'always'`: always virtualize the `options` / `loadOptions` dataset.\n * - `'never'`: keep the classic DOM rendering regardless of size.\n * Virtualized rows render label + selection only (no per-row icon /\n * supporting text) and assume a uniform row height.\n */\n @Prop() virtualize: 'auto' | 'always' | 'never' = 'auto';\n\n /**\n * Show a search field in the menu header.\n *\n * A plain list filters client-side on label / supporting text; a virtualized\n * one filters inside the WASM engine. Closing the menu clears the query.\n */\n @Prop() filterable: boolean = false;\n\n /** Filter strategy used by `filterable` / `setQuery`. */\n @Prop({ attribute: 'filter-mode' }) filterMode: FilterMode = 'substring';\n\n /** Fixed virtualized row height (px). Auto-measured from the first row if unset. */\n @Prop({ attribute: 'row-height' }) rowHeight?: number;\n\n /** Form field name. The selected value is submitted under this name. */\n @Prop({ reflect: true }) name: string = '';\n\n // ── Localizable UI strings ───────────────────────────────\n // Defaults are English; override per the page locale (see the date picker for\n // the same convention). Option labels themselves come from `options` data.\n\n /** Placeholder for the in-menu filter field (`filterable`). */\n @Prop({ attribute: 'search-placeholder' }) searchPlaceholder: string = 'Search…';\n /** Accessible name for the filter field. Falls back to `Filter <label>`. */\n @Prop({ attribute: 'filter-label' }) filterLabel: string = '';\n /** Empty-state text when a filter matches nothing. */\n @Prop({ attribute: 'no-results-text' }) noResultsText: string = 'No results';\n /** Empty-state text when there are no options at all. */\n @Prop({ attribute: 'no-options-text' }) noOptionsText: string = 'No options';\n /** Accessible label for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-label' }) clearLabel: string = 'Clear selection';\n /** Accessible label for the in-menu loading spinner while filtering. */\n @Prop({ attribute: 'searching-label' }) searchingLabel: string = 'Searching';\n /** Text shown in the trigger / menu while `loading` is true. */\n @Prop({ attribute: 'loading-text' }) loadingText: string = 'Loading…';\n\n // ── Icon customization (Material Symbols names; or use the slots below) ──\n\n /** Icon (Material Symbols name) for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-icon' }) clearIcon: string = 'close';\n /** Caret icon; rotates 180° when open. Slot `dropdown-icon` overrides it. */\n @Prop({ attribute: 'dropdown-icon' }) dropdownIcon: string = 'arrow_drop_down';\n\n /**\n * Show a busy state: the trigger shows a spinner instead of the caret and the\n * host is `aria-busy`. Use while an async dataset loads (e.g. before/around a\n * large `loadOptions`). Replace the spinner with the `loader` slot.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /**\n * Stretch the control to fill its parent's inline width (otherwise it sizes to\n * a sensible default). The dropdown follows when `match-trigger-width` is set.\n */\n @Prop({ attribute: 'full-width', reflect: true }) fullWidth: boolean = false;\n\n /** Open state of the dropdown. Reflected so `:host([open])` rules apply. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Emits the newly selected value whenever the selection changes. */\n @Event() mdChange!: EventEmitter<string>;\n\n /** Emits when the dropdown opens. */\n @Event() mdOpen!: EventEmitter<void>;\n\n /** Emits when the dropdown closes. */\n @Event() mdClose!: EventEmitter<void>;\n\n @State() private optionsData: SelectOptionData[] = [];\n\n @State() private triggerId = `md-select-${++selectIdCounter}`;\n\n private fieldEl?: HTMLElement & { focus?: () => void };\n private menuEl?: VirtualMenuEl;\n\n /** Shared virtualization engine (WASM store + window math + provider glue). */\n private vc = new VirtualSelectController({\n queryItem: (i) =>\n (this.el.shadowRoot?.querySelector(\n `md-menu-item[data-vindex=\"${i}\"]`,\n ) as HTMLElement | null) ?? null,\n requestRender: () => forceUpdate(this),\n });\n private providerSet = false;\n /** Trigger label for the selected value while virtualized (off-window safe). */\n private selectedLabel = '';\n private searchDebounce?: ReturnType<typeof setTimeout>;\n /** Client-side filter query for `filterable` on a NON-virtualized list. The\n * virtualized path filters inside the WASM engine via `vc.setQuery`. */\n @State() private query = '';\n\n /** True between a keystroke and the debounced query resolving (drives the spinner). */\n private searching = false;\n\n // ── Public API ───────────────────────────────────────────\n\n /** Open the dropdown programmatically. */\n @Method()\n async show() {\n if (this.disabled) return;\n this.open = true;\n }\n\n /** Close the dropdown programmatically. */\n @Method()\n async close() {\n this.open = false;\n }\n\n /** Move focus to the trigger field. */\n @Method()\n async focusTrigger() {\n this.fieldEl?.focus?.();\n }\n\n /** Clear the selection. */\n @Method()\n async reset() {\n if (!this.value) return;\n this.value = '';\n this.mdChange.emit('');\n }\n\n /**\n * Load a large dataset into the WASM-backed virtualized list (the high-scale\n * entry point). Accepts a materialised `SelectOptionInit[]` or a row factory\n * (`{ count, getRow }`) — the factory streams rows into WASM one at a time, so\n * tens of millions of options never exist as JS objects at once. Falls back to\n * plain DOM rendering when `virtualize=\"never\"` or WebAssembly is unavailable.\n */\n @Method()\n async loadOptions(source: SelectOptionInit[] | OptionRowSource) {\n if (this.virtualize === 'never' || !isWasmSupported()) {\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n return;\n }\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n const ok = await this.vc.load(source);\n if (!ok) {\n // The store declines an empty set (and a WASM failure). Without dropping\n // whatever it still holds, `loadOptions([])` after a populated load left\n // the PREVIOUS rows active and rendering — so a consumer could not clear\n // the list by handing over an empty one.\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n } else {\n this.updateSelectedLabel();\n }\n forceUpdate(this);\n }\n\n /**\n * Filter the menu exactly as typing into the in-menu search field would.\n *\n * The field is uncontrolled, so the text is mirrored into it as well —\n * otherwise the list narrows while the box still reads empty, which looks\n * like the call did nothing. The menu may be closed (no field rendered yet),\n * so the text is stashed and applied on the next render.\n */\n @Method()\n async setQuery(query: string) {\n this.vc.setQuery(query);\n if (!this.vc.active) this.query = query;\n this.queryText = query;\n this.syncSearchField();\n forceUpdate(this);\n }\n\n /** Text pushed by `setQuery()`, pending mirroring into the search field. */\n private queryText: string | null = null;\n\n private syncSearchField() {\n if (this.queryText === null) return;\n const input = this.el.shadowRoot?.querySelector(\n '.md-select__search',\n ) as HTMLInputElement | null;\n if (!input) return;\n input.value = this.queryText;\n this.queryText = null;\n }\n\n /** Resolve labels for values that may be outside the current filter/window. */\n @Method()\n async getLabels(values: string[]): Promise<Record<string, string>> {\n return Object.fromEntries(this.vc.getLabels(values));\n }\n\n // ── Lifecycle / reactivity ───────────────────────────────\n\n /** Initial value, restored on form reset. */\n private defaultValue = '';\n\n componentWillLoad() {\n this.refreshOptions();\n // Adopt an option-declared `selected` hint when no value was provided.\n if (!this.value) {\n const preselected = this.optionsData.find((o) => o.selected && !o.disabled);\n if (preselected) this.value = preselected.value;\n }\n this.defaultValue = this.value;\n this.syncFormValue();\n }\n\n /** Keep the submitted form value in sync with the selection. */\n @Watch('value')\n syncFormValue() {\n setFormValue(this.internals, this.value || null);\n this.updateSelectedLabel();\n this.syncValidity();\n }\n\n /**\n * Publish `required` to the owning form. Without this the select is\n * form-associated (its value reaches FormData) yet ALWAYS reports valid, so an\n * empty required control lets the form submit — `required` renders as a visual\n * hint and nothing more. Kept in the same place as the value sync so the two\n * can never drift.\n */\n @Watch('required')\n @Watch('valueMissingLabel')\n private syncValidity() {\n setValidityState(this.internals, {\n missing: this.required && !this.value,\n missingMessage: this.valueMissingLabel,\n customMessage: this.customValidityMessage,\n });\n this.emitValidityChange();\n }\n\n /** Current validity: boolean, message and flags. Mirrors md-text-field. */\n @Method()\n async getValidity(): Promise<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }> {\n return getValidityOf(this.internals);\n }\n\n /**\n * Fires when this control's validity CHANGES — never on every keystroke, and\n * never for a re-publish that lands on the same state.\n *\n * `composed: false` is deliberate. Composites like md-select embed an\n * md-text-field, and a composed event escapes that inner shadow root, so a\n * listener on md-select would receive the inner field's event as well as the\n * host's — two events, different payloads, for one logical control. Keeping\n * it uncomposed means each component reports only for itself, while\n * `bubbles: true` still lets a <form> or app root hear every control.\n */\n @Event({ bubbles: true, composed: false }) mdValidityChange: EventEmitter<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }>;\n\n /** Last emitted validity, so a re-publish that changes nothing stays silent. */\n private lastValidityKey: string | null = null;\n\n /**\n * Emit mdValidityChange if validity actually moved.\n *\n * The FIRST call only primes the baseline. Initial state is not a change, and\n * emitting on mount would fire once per control on every page load — noise a\n * consumer would have to filter out, and misleading for anything logging\n * \"field became invalid\".\n */\n private emitValidityChange() {\n const v = getValidityOf(this.internals);\n const key = `${v.valid}|${v.validationMessage}`;\n if (this.lastValidityKey === key) return;\n const primed = this.lastValidityKey !== null;\n this.lastValidityKey = key;\n if (primed) this.mdValidityChange.emit(v);\n }\n\n /** Constraint-validation API, matching md-text-field and the native contract. */\n @Method()\n async checkValidity(): Promise<boolean> {\n return checkValidityOf(this.internals);\n }\n\n /** Like checkValidity(), but also shows the browser's validation message. */\n @Method()\n async reportValidity(): Promise<boolean> {\n return reportValidityOf(this.internals);\n }\n\n /** App/server-side validation: a non-empty message marks the control invalid\n * for its form until cleared with an empty string. */\n @Method()\n async setCustomValidity(message: string) {\n this.customValidityMessage = message;\n this.syncValidity();\n }\n\n /** Restore the initial selection when the owning form is reset. */\n formResetCallback() {\n this.value = this.defaultValue;\n }\n\n @Watch('options')\n refreshOptions() {\n const data = collectOptions(this.el, this.optionList);\n const shouldVirtualize =\n this.virtualize === 'always' ||\n (this.virtualize === 'auto' && data.length > VIRTUALIZE_THRESHOLD);\n\n if (shouldVirtualize && isWasmSupported() && data.length > 0) {\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n void this.vc.load(data).then((ok) => {\n if (!ok) {\n this.optionsData = data;\n forceUpdate(this);\n } else {\n this.updateSelectedLabel();\n }\n });\n } else {\n this.vc.reset();\n this.optionsData = data;\n }\n }\n\n /** Refresh the cached trigger label for the current value (virtual mode). */\n private updateSelectedLabel() {\n if (!this.value) {\n this.selectedLabel = '';\n } else if (this.vc.active) {\n this.selectedLabel = this.vc.getLabels([this.value]).get(this.value) ?? this.selectedLabel;\n }\n forceUpdate(this);\n }\n\n /** Slotted `<md-select-option>` mount/unmount/data change → re-read. */\n @Listen('mdSelectOptionChange')\n onOptionChange(e: Event) {\n e.stopPropagation();\n this.refreshOptions();\n }\n\n // Prevents @Watch re-entrancy when handleMenuClose syncs this.open back.\n private _syncGuard = false;\n // Deduplicates mdOpen/mdClose: only emit when the state actually flips.\n private _lastEmit: 'open' | 'close' | null = null;\n\n @Watch('open')\n syncMenu(open: boolean) {\n if (this._syncGuard || !this.menuEl) return;\n if (open) {\n // A filterable virtual menu focuses its search field, not the first row.\n this.menuEl.show?.({ autoFocus: !(this.filterable && this.vc.active) });\n } else {\n this.menuEl.close?.();\n }\n }\n\n // ── Keyboard (trigger) ───────────────────────────────────\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.open && (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n this.open = true;\n } else if (this.open && e.key === 'Escape') {\n e.preventDefault();\n this.open = false;\n this.fieldEl?.focus?.();\n }\n }\n\n // ── Handlers ─────────────────────────────────────────────\n\n private toggleOpen = () => {\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private selectValue = (val: string) => {\n if (this.value === val) {\n this.open = false;\n return;\n }\n this.value = val;\n this.mdChange.emit(val);\n this.open = false;\n this.fieldEl?.focus?.();\n };\n\n private clearValue = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled || !this.value) return;\n this.value = '';\n this.mdChange.emit('');\n };\n\n /** True once the vc is wired to the menu's live scroll viewport. */\n private vpWired = false;\n\n /** Wire the vc to the menu scroll viewport; a null resolve (viewport not\n * rendered yet — e.g. the menu opened while the dataset was packing and\n * showed the uncapped busy bar) just returns, and componentDidRender\n * retries until the wiring lands. */\n private wireViewport() {\n void (async () => {\n const vp = (await this.menuEl?.getScrollViewport?.()) ?? null;\n if (!vp || this.vpWired) return;\n this.vpWired = true;\n await this.vc.attachViewport(async () => vp);\n })();\n }\n\n private handleMenuOpen = () => {\n this._syncGuard = true;\n this.open = true;\n this._syncGuard = false;\n if (this._lastEmit !== 'open') {\n this._lastEmit = 'open';\n this.mdOpen.emit();\n }\n if (this.vc.active) {\n this.wireViewport();\n if (this.filterable) {\n requestAnimationFrame(() => {\n const input = this.el.shadowRoot?.querySelector('.md-select__search') as HTMLElement | null;\n input?.focus();\n // Register the search input as the combobox so md-menu drives the\n // listbox via aria-activedescendant on it (focus stays here while the\n // user arrows through / filters the virtualized options).\n void this.menuEl?.setComboboxElement?.(input);\n });\n }\n }\n };\n\n private handleMenuClose = () => {\n this._syncGuard = true;\n this.open = false;\n this._syncGuard = false;\n // Reopening shows the full list: the search field is uncontrolled and\n // unmounts with the menu, so a stale query would filter an empty-looking box.\n if (this.query) this.query = '';\n if (this._lastEmit !== 'close') {\n this._lastEmit = 'close';\n this.mdClose.emit();\n }\n void this.menuEl?.setComboboxElement?.(null);\n this.vc.detachViewport();\n this.vpWired = false;\n };\n\n private onSearchInput = (e: Event) => {\n const q = (e.target as HTMLInputElement).value;\n this.queryText = null; // typing supersedes a pending programmatic query\n if (!this.vc.active) {\n // Plain (non-virtual) list: filter the rendered options client-side. It is\n // cheap, so it runs synchronously per keystroke — no spinner, no debounce.\n this.query = q;\n return;\n }\n // Show the spinner immediately, debounce the actual (expensive) query, then\n // clear the spinner once results are in — a smooth, intentional transition.\n if (!this.searching) {\n this.searching = true;\n forceUpdate(this);\n }\n clearTimeout(this.searchDebounce);\n this.searchDebounce = setTimeout(() => {\n this.vc.setQuery(q);\n this.searching = false;\n forceUpdate(this);\n }, SEARCH_DEBOUNCE_MS);\n };\n\n /** Register/clear the virtual provider on the menu once it's rendered, and\n * (re)try viewport wiring for menus opened mid-pack. */\n componentDidRender() {\n this.syncSearchField();\n if (!this.menuEl) return;\n if (this.vc.active && !this.providerSet) {\n void this.menuEl.setVirtualProvider?.(this.vc.provider);\n this.providerSet = true;\n } else if (!this.vc.active && this.providerSet) {\n void this.menuEl.setVirtualProvider?.(null);\n this.providerSet = false;\n }\n if (this.open && this.vc.active && !this.vpWired) this.wireViewport();\n }\n\n disconnectedCallback() {\n clearTimeout(this.searchDebounce);\n this.vc.detachViewport();\n }\n\n // ── Render ───────────────────────────────────────────────\n\n /**\n * Resolved accessible name for the control.\n *\n * A consumer names the select one of two ways: the visible `label` prop, or\n * `aria-label` / `aria-labelledby` on the host — the latter used when there\n * is no floating label, e.g. `md-table-pagination`'s rows-per-page select,\n * which has a *separate* visible label element next to it. The host is\n * role-less (generic), so a name set there is invisible to assistive tech,\n * and an `aria-labelledby` IDREF can't cross the shadow boundary into the\n * field's inner input. Resolve the name here (visible `label` wins, then\n * `aria-label`, then the flattened text of `aria-labelledby` targets) so it\n * can be forwarded onto the inner input (the real focus/accessible-name\n * target) and used to name the popup listbox — instead of the input having\n * no accessible name at all.\n */\n private get accessibleName(): string {\n if (this.label) return this.label;\n const ariaLabel = this.el.getAttribute('aria-label');\n if (ariaLabel && ariaLabel.trim()) return ariaLabel.trim();\n const labelledby = this.el.getAttribute('aria-labelledby');\n if (labelledby) {\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const text = labelledby\n .trim()\n .split(/\\s+/)\n .map((id) => root.getElementById?.(id)?.textContent?.trim() ?? '')\n .filter(Boolean)\n .join(' ');\n if (text) return text;\n }\n return '';\n }\n\n private renderTrigger() {\n const display = this.vc.active\n ? this.selectedLabel\n : labelFor(this.optionsData, this.value);\n const hasValue = !!this.value && !!display;\n const showClear = this.clearable && hasValue && !this.disabled;\n // When there's no visible `label`, forward the host's accessible name\n // (aria-label / aria-labelledby) onto the field so md-text-field mirrors it\n // as the inner input's accessible name. Skipped when `label` is set: the\n // `label` prop already names the input, and passing aria-label too would\n // both double-name and leave an aria-label on md-text-field's role-less host.\n const fieldAriaLabel = this.label ? undefined : this.accessibleName || undefined;\n\n return (\n <md-text-field\n ref={(el) => (this.fieldEl = el as HTMLElement)}\n id={this.triggerId}\n class=\"md-select__field\"\n part=\"field\"\n exportparts=\"container:field-container\"\n variant={this.variant}\n label={this.label}\n aria-label={fieldAriaLabel}\n placeholder={hasValue ? '' : this.placeholder}\n value={display}\n readOnly={true}\n disabled={this.disabled}\n required={this.required}\n error={this.error}\n errorText={this.errorText}\n reserveSupportingSpace={this.reserveSupportingSpace}\n supportingText={this.supportingText}\n density={this.density}\n appearFocused={this.open}\n onClick={this.toggleOpen}\n >\n <span\n slot=\"trailing-icon\"\n class=\"md-select__trailing\"\n part=\"trailing\"\n aria-hidden=\"true\"\n >\n {this.loading ? (\n // Busy state: a spinner replaces the caret/clear. Consumers can swap\n // the spinner via the `loader` slot; the default is md-loading-indicator.\n <span class=\"md-select__loader\" part=\"loading-spinner\">\n <slot name=\"loader\">\n <md-loading-indicator label={this.loadingText}></md-loading-indicator>\n </slot>\n </span>\n ) : (\n [\n showClear && (\n <md-icon-button\n class=\"md-select__clear\"\n part=\"clear\"\n size=\"xs\"\n icon={this.clearIcon}\n aria-label={this.clearLabel}\n shapeMorph={false}\n // Keep it out of the tab order: the cluster is aria-hidden and\n // the select trigger owns focus, matching the prior <button>.\n groupTabindex={-1}\n // Native click (not mdClick) so stopPropagation prevents the\n // field's toggle from also firing and opening the menu.\n onClick={this.clearValue}\n ></md-icon-button>\n ),\n <span class=\"md-select__caret material-symbols-outlined\" part=\"caret\">\n <slot name=\"dropdown-icon\">{this.dropdownIcon}</slot>\n </span>,\n ]\n )}\n </span>\n </md-text-field>\n );\n }\n\n private renderVirtualOptions() {\n // The listbox wrapper lives in md-select's shadow root (slotted into md-menu),\n // so the combobox input's aria-controls / aria-activedescendant IDREFs\n // resolve, and the listbox directly owns its role=\"option\" children (the\n // spacers are aria-hidden). This is the WAI-ARIA combobox/listbox structure.\n return (\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.topPad}px` }}\n aria-hidden=\"true\"\n ></div>\n {this.vc.windowRows.map((row, i) => {\n const filteredIndex = this.vc.windowStart + i;\n const selected = row.value === this.value;\n return (\n <md-menu-item\n key={row.index}\n // Stable id so md-menu can point aria-activedescendant here. Lives in\n // md-select's shadow root alongside the combobox input, so the IDREF\n // resolves. Keyed on the filtered index (its position in the list).\n id={`${this.triggerId}-opt-${filteredIndex}`}\n data-vindex={filteredIndex}\n // Exposes the row as a listbox option (role=\"option\" + aria-selected)\n // rather than a menuitemradio — the WAI-ARIA select/combobox pattern.\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={selected ? 'option option-selected' : 'option'}\n disabled={row.disabled}\n selected={selected}\n headline={row.label}\n supporting-text={row.supportingText || ''}\n aria-setsize={this.vc.filteredLength}\n aria-posinset={filteredIndex + 1}\n onMdClick={() => this.selectValue(row.value)}\n >\n {row.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n // Per-option `iconColor` is not carried on the virtualized (WASM)\n // path — the byte-packed row store has no colour column — so\n // virtual rows fall back to --md-select-option-icon-color.\n class=\"material-symbols-outlined md-select__option-icon\"\n aria-hidden=\"true\"\n >\n {row.icon}\n </span>\n ) : null}\n {row.label}\n </md-menu-item>\n );\n })}\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.bottomPad}px` }}\n aria-hidden=\"true\"\n ></div>\n </div>\n );\n }\n\n private renderMenu() {\n const virtual = this.vc.active;\n // Non-virtual `filterable`: narrow the rendered options by label / supporting\n // text (case-insensitive). Virtual filtering runs in the WASM engine instead.\n const q = this.filterable && !virtual ? this.query.trim().toLowerCase() : '';\n const listOptions = q\n ? this.optionsData.filter(\n (o) =>\n o.label.toLowerCase().includes(q) ||\n (o.supportingText || '').toLowerCase().includes(q),\n )\n : this.optionsData;\n // While loading we show a wavy progress bar in the menu (below), not text.\n const emptyText = this.loading\n ? ''\n : virtual\n ? this.vc.filteredLength === 0\n ? this.noResultsText\n : ''\n : this.optionsData.length === 0\n ? this.noOptionsText\n : q && listOptions.length === 0\n ? this.noResultsText\n : '';\n // Virtualization needs a bounded viewport to scroll within.\n const menuMaxHeight = virtual ? (this.maxHeight ?? 320) : this.maxHeight;\n\n return (\n <md-menu\n ref={(el) => (this.menuEl = el as VirtualMenuEl)}\n anchor={this.triggerId}\n placement={this.placement}\n match-anchor-width={this.matchTriggerWidth || this.fullWidth}\n max-height={menuMaxHeight}\n empty-text={emptyText}\n // Present the popup as a WAI-ARIA listbox (not a menu) for every select,\n // virtual or not, and name it.\n listbox\n list-label={this.accessibleName || 'Options'}\n part=\"menu\"\n onMdOpen={this.handleMenuOpen}\n onMdClose={this.handleMenuClose}\n >\n {this.filterable && !this.loading && (\n <div slot=\"header\" class=\"md-select__search-wrap\" part=\"search-wrap\">\n <input\n class=\"md-select__search\"\n part=\"search\"\n type=\"text\"\n // WAI-ARIA combobox: this input owns focus while the listbox is\n // open; the active option is conveyed via aria-activedescendant\n // (set by md-menu). aria-controls points at the listbox wrapper,\n // which md-select renders in this same shadow root so the IDREF\n // resolves (the menu surface is only role=\"presentation\").\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={String(this.open)}\n aria-controls={`${this.triggerId}-listbox`}\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n placeholder={this.searchPlaceholder}\n aria-label={this.filterLabel || (this.label ? `Filter ${this.label}` : 'Filter options')}\n onInput={this.onSearchInput}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n />\n {this.searching && (\n <md-loading-indicator\n class=\"md-select__search-spinner\"\n part=\"search-spinner\"\n label={this.searchingLabel}\n aria-hidden=\"true\"\n ></md-loading-indicator>\n )}\n </div>\n )}\n {this.loading ? (\n // Busy state inside the menu: a wavy (M3 Expressive) indeterminate\n // linear progress bar instead of \"Loading…\" text.\n <div\n class=\"md-select__loading\"\n part=\"loading-bar\"\n role=\"status\"\n aria-label={this.loadingText}\n >\n <md-progress-indicator\n variant=\"linear\"\n indeterminate\n wave\n part=\"loading-progress\"\n label={this.loadingText}\n ></md-progress-indicator>\n </div>\n ) : virtual ? (\n this.renderVirtualOptions()\n ) : (\n // Listbox wrapper in md-select's shadow root so aria-controls (from a\n // combobox consumer) resolves and the listbox directly owns its\n // role=\"option\" children — the WAI-ARIA select pattern, matching the\n // virtual path. Options carry aria-selected (presentation=\"option\")\n // rather than the menuitemradio/aria-checked of a menu.\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n {listOptions.map((opt) => (\n <md-menu-item\n key={opt.value}\n id={`${this.triggerId}-opt-${opt.value}`}\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={opt.value === this.value ? 'option option-selected' : 'option'}\n disabled={opt.disabled}\n selected={opt.value === this.value}\n headline={opt.label}\n supporting-text={opt.supportingText || ''}\n onMdClick={() => this.selectValue(opt.value)}\n >\n {opt.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n class=\"material-symbols-outlined md-select__option-icon\"\n style={opt.iconColor ? { color: opt.iconColor } : undefined}\n aria-hidden=\"true\"\n >\n {opt.icon}\n </span>\n ) : null}\n {/* No light-DOM label copy: md-menu-item renders `headline` in\n its shadow and has no default slot — the unslotted text\n still entered accname computation, doubling the option's\n accessible name (\"10 10\"). */}\n </md-menu-item>\n ))}\n </div>\n )}\n </md-menu>\n );\n }\n\n render() {\n return (\n <Host\n class={{\n 'md-select': true,\n [`md-select--${this.variant}`]: true,\n 'md-select--open': this.open,\n 'md-select--disabled': this.disabled,\n 'md-select--loading': this.loading,\n }}\n aria-haspopup=\"listbox\"\n // No aria-expanded on the host: it has no role, so a screen reader ignores\n // it there (axe flags it \"aria attribute may be ignored\"). The expanded\n // state lives where it works — the filterable search (role=combobox) — and\n // on open, focus moves into the menu (the search, or md-menu's active row).\n aria-busy={this.loading ? 'true' : undefined}\n >\n {this.renderTrigger()}\n {this.renderMenu()}\n {/* Keep the declarative options in the light DOM (hidden) so the\n slotchange/mutation reactivity has something to observe. */}\n <div class=\"md-select__options\" hidden>\n <slot onSlotchange={() => this.refreshOptions()} />\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"md-select.js","sourceRoot":"","sources":["../../../src/components/md-select/md-select.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Method, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\nimport { LazyLoadingIndicator } from '../../utils/lazy-loading-indicator';\nimport {\n collectOptions,\n labelFor,\n normalizeInits,\n OptionRowSource,\n rowsToArray,\n SelectOptionData,\n SelectOptionInit,\n} from '../../utils/select-options';\nimport {\n setFormValue,\n setValidityState,\n checkValidityOf,\n reportValidityOf,\n getValidityOf,\n} from '../../utils/form';\nimport { VirtualSelectController } from '../../utils/virtual-select-controller';\nimport { isWasmSupported, FilterMode } from '../../utils/wasm-option-store';\nimport { VirtualMenuProvider } from '../../utils/types';\nimport { parseJsonArrayProp } from '../../utils/json-prop';\n\nlet selectIdCounter = 0;\n\n/** Above this many options, `virtualize=\"auto\"` switches to the WASM path. */\nconst VIRTUALIZE_THRESHOLD = 200;\n\n/** Idle time after a keystroke before the search query runs (debounce). */\nconst SEARCH_DEBOUNCE_MS = 180;\n\ntype VirtualMenuEl = HTMLElement & {\n show?: (opts?: { autoFocus?: boolean }) => Promise<void>;\n close?: () => Promise<void>;\n setVirtualProvider?: (p: VirtualMenuProvider | null) => Promise<void>;\n setComboboxElement?: (el: HTMLElement | null) => Promise<void>;\n getScrollViewport?: () => Promise<HTMLElement | null>;\n};\n\n/**\n * `md-select` — Material Design 3 single-select dropdown.\n *\n * Composes the library's own primitives instead of re-implementing them:\n * - `md-text-field` is the trigger surface, so the picker inherits the\n * full filled/outlined visuals, density scale, floating label, error\n * state, supporting text, and focus ring of every other input. It is\n * `readonly` (not editable) and `appear-focused` while the menu is open\n * so the field + menu read as one connected control.\n * - `md-menu` is the option surface, so the picker inherits open/close\n * motion, viewport-aware positioning, single-open coordination, roving\n * tabindex, type-ahead, and Escape/Home/End — for free.\n *\n * Options are authored either declaratively as slotted `<md-select-option>`\n * children (primary API) or via the programmatic `options` array. Each\n * becomes a `type=\"radio\"` `md-menu-item` so only one is ever selected.\n *\n * @slot - `md-select-option` children for the dropdown (primary authoring API).\n * @slot dropdown-icon - Replaces the caret glyph (e.g. a custom SVG). Rotates 180° when open.\n * @slot loader - Replaces the busy-state spinner shown in the trigger while `loading`.\n *\n * @part field - The inner `md-text-field` trigger surface.\n * @part field-container - The text-field's container box (border/fill).\n * @part trailing - The trailing cluster wrapping the clear + caret.\n * @part clear - The clear (✕) `md-icon-button`.\n * @part caret - The dropdown caret glyph.\n * @part loading-spinner - The busy-state spinner in the trigger (`loading`).\n * @part loading-bar - The busy-state container in the menu (`loading`).\n * @part loading-progress - The wavy progress indicator shown in the menu while `loading`.\n * @part menu - The `md-menu` option surface.\n * @part option - Each option row (`md-menu-item`).\n * @part option-selected - The currently selected option row.\n * @part option-icon - An option's leading icon.\n * @part search - The filter input (`filterable`).\n * @part search-spinner - The in-menu spinner shown while filtering.\n */\n@Component({\n tag: 'md-select',\n styleUrl: 'md-select.css',\n shadow: true,\n formAssociated: true,\n})\nexport class MdSelect {\n @Element() el!: HTMLElement;\n\n\n /**\n * Localized constraint-validation message shown when `required` is unmet.\n *\n * A prop rather than a hardcoded string, matching md-time-picker's\n * `value-missing-label`: components stay i18n-engine-agnostic and the\n * consumer localizes through its own dictionary. Native inputs get their\n * message from the browser's locale for free; a form-associated custom\n * element supplies its own, so leaving this hardcoded would ship an\n * English-only form to every locale.\n */\n @Prop({ attribute: 'value-missing-label' }) valueMissingLabel: string =\n 'Please select an item in the list.';\n\n\n /**\n * Always occupy the supporting-text line, even when there is no message, so a\n * validation error does not push the content below it down. Forwarded to the\n * embedded md-text-field. See that component for why it is opt-in.\n */\n @Prop({ attribute: 'reserve-supporting-space' }) reserveSupportingSpace: boolean = false;\n\n /** Message set via setCustomValidity(); non-empty wins over valueMissing. */\n private customValidityMessage = '';\n\n /**\n * Form-association handle. The select submits its `value` under the host's\n * `name` via `setFormValue`, so it participates in `<form>`/`FormData`\n * natively — a hidden `<input>` in the shadow root would be invisible to\n * `FormData`.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /** Visual variant — forwarded to the inner `md-text-field`. */\n @Prop({ reflect: true }) variant: 'filled' | 'outlined' = 'outlined';\n\n /** Floating label / accessible name. */\n @Prop() label: string = '';\n\n /** Placeholder shown when no value is selected. */\n @Prop() placeholder: string = '';\n\n /** Selected option value. Empty string = nothing selected. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /** Disabled — non-interactive. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Required (form validation parity). */\n @Prop({ reflect: true }) required: boolean = false;\n\n /** Error state — forwarded to the inner field. */\n @Prop({ reflect: true }) error: boolean = false;\n\n /** Error text rendered in place of supporting text when `error` is set. */\n @Prop({ attribute: 'error-text' }) errorText: string = '';\n\n /** Supporting / helper text rendered below the field. */\n @Prop({ attribute: 'supporting-text' }) supportingText: string = '';\n\n /** Density forwarded to the inner field (0 = comfortable … -3 = compact). */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n /** Show a clear (✕) button in the trigger when a value is selected. */\n @Prop({ reflect: true }) clearable: boolean = false;\n\n /**\n * Match the dropdown width to the trigger width. When `false` the menu\n * sizes to its content (down to its own min-width). Maps to `md-menu`'s\n * `match-anchor-width`. Default `true` — the expected select behaviour.\n */\n @Prop({ attribute: 'match-trigger-width', reflect: true })\n matchTriggerWidth: boolean = true;\n\n /** Menu placement relative to the trigger — forwarded to `md-menu`. */\n @Prop() placement: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' =\n 'bottom-start';\n\n /**\n * Cap the dropdown height. When the options exceed it the list scrolls\n * vertically with top/bottom edge shadows. A number is pixels; any CSS\n * length is passed through (e.g. `'50vh'`). Forwarded to `md-menu`'s\n * `max-height`.\n */\n @Prop({ attribute: 'max-height' }) maxHeight?: number | string;\n\n /** Programmatic options. Ignored when `<md-select-option>` children exist. */\n /**\n * Programmatic options. Slotted `md-select-option` children take precedence.\n *\n * Accepts the array (property) or a **JSON string** (attribute), so a\n * plain-HTML page can declare its data inline instead of reaching for a\n * script. Malformed JSON degrades to an empty list with a console warning.\n */\n @Prop() options: SelectOptionInit[] | string = [];\n\n /** `options` as an array, whether it arrived as one or as a JSON attribute. */\n private get optionList(): SelectOptionInit[] {\n return parseJsonArrayProp<SelectOptionInit>(this.options, 'md-select', 'options');\n }\n\n /**\n * Virtualization mode for large option lists (backed by a WASM data engine):\n * - `'auto'` (default): virtualize only above `VIRTUALIZE_THRESHOLD` rows.\n * - `'always'`: always virtualize the `options` / `loadOptions` dataset.\n * - `'never'`: keep the classic DOM rendering regardless of size.\n * Virtualized rows render label + selection only (no per-row icon /\n * supporting text) and assume a uniform row height.\n */\n @Prop() virtualize: 'auto' | 'always' | 'never' = 'auto';\n\n /**\n * Show a search field in the menu header.\n *\n * A plain list filters client-side on label / supporting text; a virtualized\n * one filters inside the WASM engine. Closing the menu clears the query.\n */\n @Prop() filterable: boolean = false;\n\n /** Filter strategy used by `filterable` / `setQuery`. */\n @Prop({ attribute: 'filter-mode' }) filterMode: FilterMode = 'substring';\n\n /** Fixed virtualized row height (px). Auto-measured from the first row if unset. */\n @Prop({ attribute: 'row-height' }) rowHeight?: number;\n\n /** Form field name. The selected value is submitted under this name. */\n @Prop({ reflect: true }) name: string = '';\n\n // ── Localizable UI strings ───────────────────────────────\n // Defaults are English; override per the page locale (see the date picker for\n // the same convention). Option labels themselves come from `options` data.\n\n /** Placeholder for the in-menu filter field (`filterable`). */\n @Prop({ attribute: 'search-placeholder' }) searchPlaceholder: string = 'Search…';\n /** Accessible name for the filter field. Falls back to `Filter <label>`. */\n @Prop({ attribute: 'filter-label' }) filterLabel: string = '';\n /** Empty-state text when a filter matches nothing. */\n @Prop({ attribute: 'no-results-text' }) noResultsText: string = 'No results';\n /** Empty-state text when there are no options at all. */\n @Prop({ attribute: 'no-options-text' }) noOptionsText: string = 'No options';\n /** Accessible label for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-label' }) clearLabel: string = 'Clear selection';\n /** Accessible label for the in-menu loading spinner while filtering. */\n @Prop({ attribute: 'searching-label' }) searchingLabel: string = 'Searching';\n /** Text shown in the trigger / menu while `loading` is true. */\n @Prop({ attribute: 'loading-text' }) loadingText: string = 'Loading…';\n\n // ── Icon customization (Material Symbols names; or use the slots below) ──\n\n /** Icon (Material Symbols name) for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-icon' }) clearIcon: string = 'close';\n /** Caret icon; rotates 180° when open. Slot `dropdown-icon` overrides it. */\n @Prop({ attribute: 'dropdown-icon' }) dropdownIcon: string = 'arrow_drop_down';\n\n /**\n * Show a busy state: the trigger shows a spinner instead of the caret and the\n * host is `aria-busy`. Use while an async dataset loads (e.g. before/around a\n * large `loadOptions`). Replace the spinner with the `loader` slot.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /**\n * Stretch the control to fill its parent's inline width (otherwise it sizes to\n * a sensible default). The dropdown follows when `match-trigger-width` is set.\n */\n @Prop({ attribute: 'full-width', reflect: true }) fullWidth: boolean = false;\n\n /** Open state of the dropdown. Reflected so `:host([open])` rules apply. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Emits the newly selected value whenever the selection changes. */\n @Event() mdChange!: EventEmitter<string>;\n\n /** Emits when the dropdown opens. */\n @Event() mdOpen!: EventEmitter<void>;\n\n /** Emits when the dropdown closes. */\n @Event() mdClose!: EventEmitter<void>;\n\n @State() private optionsData: SelectOptionData[] = [];\n\n @State() private triggerId = `md-select-${++selectIdCounter}`;\n\n private fieldEl?: HTMLElement & { focus?: () => void };\n private menuEl?: VirtualMenuEl;\n\n /** Shared virtualization engine (WASM store + window math + provider glue). */\n private vc = new VirtualSelectController({\n queryItem: (i) =>\n (this.el.shadowRoot?.querySelector(\n `md-menu-item[data-vindex=\"${i}\"]`,\n ) as HTMLElement | null) ?? null,\n requestRender: () => forceUpdate(this),\n });\n private providerSet = false;\n /** Trigger label for the selected value while virtualized (off-window safe). */\n private selectedLabel = '';\n private searchDebounce?: ReturnType<typeof setTimeout>;\n /** Client-side filter query for `filterable` on a NON-virtualized list. The\n * virtualized path filters inside the WASM engine via `vc.setQuery`. */\n @State() private query = '';\n\n /** True between a keystroke and the debounced query resolving (drives the spinner). */\n private searching = false;\n\n // ── Public API ───────────────────────────────────────────\n\n /** Open the dropdown programmatically. */\n @Method()\n async show() {\n if (this.disabled) return;\n this.open = true;\n }\n\n /** Close the dropdown programmatically. */\n @Method()\n async close() {\n this.open = false;\n }\n\n /** Move focus to the trigger field. */\n @Method()\n async focusTrigger() {\n this.fieldEl?.focus?.();\n }\n\n /** Clear the selection. */\n @Method()\n async reset() {\n if (!this.value) return;\n this.value = '';\n this.mdChange.emit('');\n }\n\n /**\n * Load a large dataset into the WASM-backed virtualized list (the high-scale\n * entry point). Accepts a materialised `SelectOptionInit[]` or a row factory\n * (`{ count, getRow }`) — the factory streams rows into WASM one at a time, so\n * tens of millions of options never exist as JS objects at once. Falls back to\n * plain DOM rendering when `virtualize=\"never\"` or WebAssembly is unavailable.\n */\n @Method()\n async loadOptions(source: SelectOptionInit[] | OptionRowSource) {\n if (this.virtualize === 'never' || !isWasmSupported()) {\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n return;\n }\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n const ok = await this.vc.load(source);\n if (!ok) {\n // The store declines an empty set (and a WASM failure). Without dropping\n // whatever it still holds, `loadOptions([])` after a populated load left\n // the PREVIOUS rows active and rendering — so a consumer could not clear\n // the list by handing over an empty one.\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n } else {\n this.updateSelectedLabel();\n }\n forceUpdate(this);\n }\n\n /**\n * Filter the menu exactly as typing into the in-menu search field would.\n *\n * The field is uncontrolled, so the text is mirrored into it as well —\n * otherwise the list narrows while the box still reads empty, which looks\n * like the call did nothing. The menu may be closed (no field rendered yet),\n * so the text is stashed and applied on the next render.\n */\n @Method()\n async setQuery(query: string) {\n this.vc.setQuery(query);\n if (!this.vc.active) this.query = query;\n this.queryText = query;\n this.syncSearchField();\n forceUpdate(this);\n }\n\n /** Text pushed by `setQuery()`, pending mirroring into the search field. */\n private queryText: string | null = null;\n\n private syncSearchField() {\n if (this.queryText === null) return;\n const input = this.el.shadowRoot?.querySelector(\n '.md-select__search',\n ) as HTMLInputElement | null;\n if (!input) return;\n input.value = this.queryText;\n this.queryText = null;\n }\n\n /** Resolve labels for values that may be outside the current filter/window. */\n @Method()\n async getLabels(values: string[]): Promise<Record<string, string>> {\n return Object.fromEntries(this.vc.getLabels(values));\n }\n\n // ── Lifecycle / reactivity ───────────────────────────────\n\n /** Initial value, restored on form reset. */\n private defaultValue = '';\n\n componentWillLoad() {\n this.refreshOptions();\n // Adopt an option-declared `selected` hint when no value was provided.\n if (!this.value) {\n const preselected = this.optionsData.find((o) => o.selected && !o.disabled);\n if (preselected) this.value = preselected.value;\n }\n this.defaultValue = this.value;\n this.syncFormValue();\n }\n\n /** Keep the submitted form value in sync with the selection. */\n @Watch('value')\n syncFormValue() {\n setFormValue(this.internals, this.value || null);\n this.updateSelectedLabel();\n this.syncValidity();\n }\n\n /**\n * Publish `required` to the owning form. Without this the select is\n * form-associated (its value reaches FormData) yet ALWAYS reports valid, so an\n * empty required control lets the form submit — `required` renders as a visual\n * hint and nothing more. Kept in the same place as the value sync so the two\n * can never drift.\n */\n @Watch('required')\n @Watch('valueMissingLabel')\n private syncValidity() {\n setValidityState(this.internals, {\n missing: this.required && !this.value,\n missingMessage: this.valueMissingLabel,\n customMessage: this.customValidityMessage,\n });\n this.emitValidityChange();\n }\n\n /** Current validity: boolean, message and flags. Mirrors md-text-field. */\n @Method()\n async getValidity(): Promise<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }> {\n return getValidityOf(this.internals);\n }\n\n /**\n * Fires when this control's validity CHANGES — never on every keystroke, and\n * never for a re-publish that lands on the same state.\n *\n * `composed: false` is deliberate. Composites like md-select embed an\n * md-text-field, and a composed event escapes that inner shadow root, so a\n * listener on md-select would receive the inner field's event as well as the\n * host's — two events, different payloads, for one logical control. Keeping\n * it uncomposed means each component reports only for itself, while\n * `bubbles: true` still lets a <form> or app root hear every control.\n */\n @Event({ bubbles: true, composed: false }) mdValidityChange: EventEmitter<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }>;\n\n /** Last emitted validity, so a re-publish that changes nothing stays silent. */\n private lastValidityKey: string | null = null;\n\n /**\n * Emit mdValidityChange if validity actually moved.\n *\n * The FIRST call only primes the baseline. Initial state is not a change, and\n * emitting on mount would fire once per control on every page load — noise a\n * consumer would have to filter out, and misleading for anything logging\n * \"field became invalid\".\n */\n private emitValidityChange() {\n const v = getValidityOf(this.internals);\n const key = `${v.valid}|${v.validationMessage}`;\n if (this.lastValidityKey === key) return;\n const primed = this.lastValidityKey !== null;\n this.lastValidityKey = key;\n if (primed) this.mdValidityChange.emit(v);\n }\n\n /** Constraint-validation API, matching md-text-field and the native contract. */\n @Method()\n async checkValidity(): Promise<boolean> {\n return checkValidityOf(this.internals);\n }\n\n /** Like checkValidity(), but also shows the browser's validation message. */\n @Method()\n async reportValidity(): Promise<boolean> {\n return reportValidityOf(this.internals);\n }\n\n /** App/server-side validation: a non-empty message marks the control invalid\n * for its form until cleared with an empty string. */\n @Method()\n async setCustomValidity(message: string) {\n this.customValidityMessage = message;\n this.syncValidity();\n }\n\n /** Restore the initial selection when the owning form is reset. */\n formResetCallback() {\n this.value = this.defaultValue;\n }\n\n @Watch('options')\n refreshOptions() {\n const data = collectOptions(this.el, this.optionList);\n const shouldVirtualize =\n this.virtualize === 'always' ||\n (this.virtualize === 'auto' && data.length > VIRTUALIZE_THRESHOLD);\n\n if (shouldVirtualize && isWasmSupported() && data.length > 0) {\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n void this.vc.load(data).then((ok) => {\n if (!ok) {\n this.optionsData = data;\n forceUpdate(this);\n } else {\n this.updateSelectedLabel();\n }\n });\n } else {\n this.vc.reset();\n this.optionsData = data;\n }\n }\n\n /** Refresh the cached trigger label for the current value (virtual mode). */\n private updateSelectedLabel() {\n if (!this.value) {\n this.selectedLabel = '';\n } else if (this.vc.active) {\n this.selectedLabel = this.vc.getLabels([this.value]).get(this.value) ?? this.selectedLabel;\n }\n forceUpdate(this);\n }\n\n /** Slotted `<md-select-option>` mount/unmount/data change → re-read. */\n @Listen('mdSelectOptionChange')\n onOptionChange(e: Event) {\n e.stopPropagation();\n this.refreshOptions();\n }\n\n // Prevents @Watch re-entrancy when handleMenuClose syncs this.open back.\n private _syncGuard = false;\n // Deduplicates mdOpen/mdClose: only emit when the state actually flips.\n private _lastEmit: 'open' | 'close' | null = null;\n\n @Watch('open')\n syncMenu(open: boolean) {\n if (this._syncGuard || !this.menuEl) return;\n if (open) {\n // A filterable virtual menu focuses its search field, not the first row.\n this.menuEl.show?.({ autoFocus: !(this.filterable && this.vc.active) });\n } else {\n this.menuEl.close?.();\n }\n }\n\n // ── Keyboard (trigger) ───────────────────────────────────\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.open && (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n this.open = true;\n } else if (this.open && e.key === 'Escape') {\n e.preventDefault();\n this.open = false;\n this.fieldEl?.focus?.();\n }\n }\n\n // ── Handlers ─────────────────────────────────────────────\n\n private toggleOpen = () => {\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private selectValue = (val: string) => {\n if (this.value === val) {\n this.open = false;\n return;\n }\n this.value = val;\n this.mdChange.emit(val);\n this.open = false;\n this.fieldEl?.focus?.();\n };\n\n private clearValue = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled || !this.value) return;\n this.value = '';\n this.mdChange.emit('');\n };\n\n /** True once the vc is wired to the menu's live scroll viewport. */\n private vpWired = false;\n\n /** Wire the vc to the menu scroll viewport; a null resolve (viewport not\n * rendered yet — e.g. the menu opened while the dataset was packing and\n * showed the uncapped busy bar) just returns, and componentDidRender\n * retries until the wiring lands. */\n private wireViewport() {\n void (async () => {\n const vp = (await this.menuEl?.getScrollViewport?.()) ?? null;\n if (!vp || this.vpWired) return;\n this.vpWired = true;\n await this.vc.attachViewport(async () => vp);\n })();\n }\n\n private handleMenuOpen = () => {\n this._syncGuard = true;\n this.open = true;\n this._syncGuard = false;\n if (this._lastEmit !== 'open') {\n this._lastEmit = 'open';\n this.mdOpen.emit();\n }\n if (this.vc.active) {\n this.wireViewport();\n if (this.filterable) {\n requestAnimationFrame(() => {\n const input = this.el.shadowRoot?.querySelector('.md-select__search') as HTMLElement | null;\n input?.focus();\n // Register the search input as the combobox so md-menu drives the\n // listbox via aria-activedescendant on it (focus stays here while the\n // user arrows through / filters the virtualized options).\n void this.menuEl?.setComboboxElement?.(input);\n });\n }\n }\n };\n\n private handleMenuClose = () => {\n this._syncGuard = true;\n this.open = false;\n this._syncGuard = false;\n // Reopening shows the full list: the search field is uncontrolled and\n // unmounts with the menu, so a stale query would filter an empty-looking box.\n if (this.query) this.query = '';\n if (this._lastEmit !== 'close') {\n this._lastEmit = 'close';\n this.mdClose.emit();\n }\n void this.menuEl?.setComboboxElement?.(null);\n this.vc.detachViewport();\n this.vpWired = false;\n };\n\n private onSearchInput = (e: Event) => {\n const q = (e.target as HTMLInputElement).value;\n this.queryText = null; // typing supersedes a pending programmatic query\n if (!this.vc.active) {\n // Plain (non-virtual) list: filter the rendered options client-side. It is\n // cheap, so it runs synchronously per keystroke — no spinner, no debounce.\n this.query = q;\n return;\n }\n // Show the spinner immediately, debounce the actual (expensive) query, then\n // clear the spinner once results are in — a smooth, intentional transition.\n if (!this.searching) {\n this.searching = true;\n forceUpdate(this);\n }\n clearTimeout(this.searchDebounce);\n this.searchDebounce = setTimeout(() => {\n this.vc.setQuery(q);\n this.searching = false;\n forceUpdate(this);\n }, SEARCH_DEBOUNCE_MS);\n };\n\n /** Register/clear the virtual provider on the menu once it's rendered, and\n * (re)try viewport wiring for menus opened mid-pack. */\n componentDidRender() {\n this.syncSearchField();\n if (!this.menuEl) return;\n if (this.vc.active && !this.providerSet) {\n void this.menuEl.setVirtualProvider?.(this.vc.provider);\n this.providerSet = true;\n } else if (!this.vc.active && this.providerSet) {\n void this.menuEl.setVirtualProvider?.(null);\n this.providerSet = false;\n }\n if (this.open && this.vc.active && !this.vpWired) this.wireViewport();\n }\n\n disconnectedCallback() {\n clearTimeout(this.searchDebounce);\n this.vc.detachViewport();\n }\n\n // ── Render ───────────────────────────────────────────────\n\n /**\n * Resolved accessible name for the control.\n *\n * A consumer names the select one of two ways: the visible `label` prop, or\n * `aria-label` / `aria-labelledby` on the host — the latter used when there\n * is no floating label, e.g. `md-table-pagination`'s rows-per-page select,\n * which has a *separate* visible label element next to it. The host is\n * role-less (generic), so a name set there is invisible to assistive tech,\n * and an `aria-labelledby` IDREF can't cross the shadow boundary into the\n * field's inner input. Resolve the name here (visible `label` wins, then\n * `aria-label`, then the flattened text of `aria-labelledby` targets) so it\n * can be forwarded onto the inner input (the real focus/accessible-name\n * target) and used to name the popup listbox — instead of the input having\n * no accessible name at all.\n */\n private get accessibleName(): string {\n if (this.label) return this.label;\n const ariaLabel = this.el.getAttribute('aria-label');\n if (ariaLabel && ariaLabel.trim()) return ariaLabel.trim();\n const labelledby = this.el.getAttribute('aria-labelledby');\n if (labelledby) {\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const text = labelledby\n .trim()\n .split(/\\s+/)\n .map((id) => root.getElementById?.(id)?.textContent?.trim() ?? '')\n .filter(Boolean)\n .join(' ');\n if (text) return text;\n }\n return '';\n }\n\n private renderTrigger() {\n const display = this.vc.active\n ? this.selectedLabel\n : labelFor(this.optionsData, this.value);\n const hasValue = !!this.value && !!display;\n const showClear = this.clearable && hasValue && !this.disabled;\n // When there's no visible `label`, forward the host's accessible name\n // (aria-label / aria-labelledby) onto the field so md-text-field mirrors it\n // as the inner input's accessible name. Skipped when `label` is set: the\n // `label` prop already names the input, and passing aria-label too would\n // both double-name and leave an aria-label on md-text-field's role-less host.\n const fieldAriaLabel = this.label ? undefined : this.accessibleName || undefined;\n\n return (\n <md-text-field\n ref={(el) => (this.fieldEl = el as HTMLElement)}\n id={this.triggerId}\n class=\"md-select__field\"\n part=\"field\"\n exportparts=\"container:field-container\"\n variant={this.variant}\n label={this.label}\n aria-label={fieldAriaLabel}\n placeholder={hasValue ? '' : this.placeholder}\n value={display}\n readOnly={true}\n disabled={this.disabled}\n required={this.required}\n error={this.error}\n errorText={this.errorText}\n reserveSupportingSpace={this.reserveSupportingSpace}\n supportingText={this.supportingText}\n density={this.density}\n appearFocused={this.open}\n onClick={this.toggleOpen}\n >\n <span\n slot=\"trailing-icon\"\n class=\"md-select__trailing\"\n part=\"trailing\"\n aria-hidden=\"true\"\n >\n {this.loading ? (\n // Busy state: a spinner replaces the caret/clear. Consumers can swap\n // the spinner via the `loader` slot; the default is md-loading-indicator.\n <span class=\"md-select__loader\" part=\"loading-spinner\">\n <slot name=\"loader\">\n <LazyLoadingIndicator label={this.loadingText}></LazyLoadingIndicator>\n </slot>\n </span>\n ) : (\n [\n showClear && (\n <md-icon-button\n class=\"md-select__clear\"\n part=\"clear\"\n size=\"xs\"\n icon={this.clearIcon}\n aria-label={this.clearLabel}\n shapeMorph={false}\n // Keep it out of the tab order: the cluster is aria-hidden and\n // the select trigger owns focus, matching the prior <button>.\n groupTabindex={-1}\n // Native click (not mdClick) so stopPropagation prevents the\n // field's toggle from also firing and opening the menu.\n onClick={this.clearValue}\n ></md-icon-button>\n ),\n <span class=\"md-select__caret material-symbols-outlined\" part=\"caret\">\n <slot name=\"dropdown-icon\">{this.dropdownIcon}</slot>\n </span>,\n ]\n )}\n </span>\n </md-text-field>\n );\n }\n\n private renderVirtualOptions() {\n // The listbox wrapper lives in md-select's shadow root (slotted into md-menu),\n // so the combobox input's aria-controls / aria-activedescendant IDREFs\n // resolve, and the listbox directly owns its role=\"option\" children (the\n // spacers are aria-hidden). This is the WAI-ARIA combobox/listbox structure.\n return (\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.topPad}px` }}\n aria-hidden=\"true\"\n ></div>\n {this.vc.windowRows.map((row, i) => {\n const filteredIndex = this.vc.windowStart + i;\n const selected = row.value === this.value;\n return (\n <md-menu-item\n key={row.index}\n // Stable id so md-menu can point aria-activedescendant here. Lives in\n // md-select's shadow root alongside the combobox input, so the IDREF\n // resolves. Keyed on the filtered index (its position in the list).\n id={`${this.triggerId}-opt-${filteredIndex}`}\n data-vindex={filteredIndex}\n // Exposes the row as a listbox option (role=\"option\" + aria-selected)\n // rather than a menuitemradio — the WAI-ARIA select/combobox pattern.\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={selected ? 'option option-selected' : 'option'}\n disabled={row.disabled}\n selected={selected}\n headline={row.label}\n supporting-text={row.supportingText || ''}\n aria-setsize={this.vc.filteredLength}\n aria-posinset={filteredIndex + 1}\n onMdClick={() => this.selectValue(row.value)}\n >\n {row.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n // Per-option `iconColor` is not carried on the virtualized (WASM)\n // path — the byte-packed row store has no colour column — so\n // virtual rows fall back to --md-select-option-icon-color.\n class=\"material-symbols-outlined md-select__option-icon\"\n aria-hidden=\"true\"\n >\n {row.icon}\n </span>\n ) : null}\n {row.label}\n </md-menu-item>\n );\n })}\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.bottomPad}px` }}\n aria-hidden=\"true\"\n ></div>\n </div>\n );\n }\n\n private renderMenu() {\n const virtual = this.vc.active;\n // Non-virtual `filterable`: narrow the rendered options by label / supporting\n // text (case-insensitive). Virtual filtering runs in the WASM engine instead.\n const q = this.filterable && !virtual ? this.query.trim().toLowerCase() : '';\n const listOptions = q\n ? this.optionsData.filter(\n (o) =>\n o.label.toLowerCase().includes(q) ||\n (o.supportingText || '').toLowerCase().includes(q),\n )\n : this.optionsData;\n // While loading we show a wavy progress bar in the menu (below), not text.\n const emptyText = this.loading\n ? ''\n : virtual\n ? this.vc.filteredLength === 0\n ? this.noResultsText\n : ''\n : this.optionsData.length === 0\n ? this.noOptionsText\n : q && listOptions.length === 0\n ? this.noResultsText\n : '';\n // Virtualization needs a bounded viewport to scroll within.\n const menuMaxHeight = virtual ? (this.maxHeight ?? 320) : this.maxHeight;\n\n return (\n <md-menu\n ref={(el) => (this.menuEl = el as VirtualMenuEl)}\n anchor={this.triggerId}\n placement={this.placement}\n match-anchor-width={this.matchTriggerWidth || this.fullWidth}\n max-height={menuMaxHeight}\n empty-text={emptyText}\n // Present the popup as a WAI-ARIA listbox (not a menu) for every select,\n // virtual or not, and name it.\n listbox\n list-label={this.accessibleName || 'Options'}\n part=\"menu\"\n onMdOpen={this.handleMenuOpen}\n onMdClose={this.handleMenuClose}\n >\n {this.filterable && !this.loading && (\n <div slot=\"header\" class=\"md-select__search-wrap\" part=\"search-wrap\">\n <input\n class=\"md-select__search\"\n part=\"search\"\n type=\"text\"\n // WAI-ARIA combobox: this input owns focus while the listbox is\n // open; the active option is conveyed via aria-activedescendant\n // (set by md-menu). aria-controls points at the listbox wrapper,\n // which md-select renders in this same shadow root so the IDREF\n // resolves (the menu surface is only role=\"presentation\").\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={String(this.open)}\n aria-controls={`${this.triggerId}-listbox`}\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n placeholder={this.searchPlaceholder}\n aria-label={this.filterLabel || (this.label ? `Filter ${this.label}` : 'Filter options')}\n onInput={this.onSearchInput}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n />\n {this.searching && (\n <LazyLoadingIndicator\n class=\"md-select__search-spinner\"\n part=\"search-spinner\"\n label={this.searchingLabel}\n aria-hidden=\"true\"\n ></LazyLoadingIndicator>\n )}\n </div>\n )}\n {this.loading ? (\n // Busy state inside the menu: a wavy (M3 Expressive) indeterminate\n // linear progress bar instead of \"Loading…\" text.\n <div\n class=\"md-select__loading\"\n part=\"loading-bar\"\n role=\"status\"\n aria-label={this.loadingText}\n >\n <md-progress-indicator\n variant=\"linear\"\n indeterminate\n wave\n part=\"loading-progress\"\n label={this.loadingText}\n ></md-progress-indicator>\n </div>\n ) : virtual ? (\n this.renderVirtualOptions()\n ) : (\n // Listbox wrapper in md-select's shadow root so aria-controls (from a\n // combobox consumer) resolves and the listbox directly owns its\n // role=\"option\" children — the WAI-ARIA select pattern, matching the\n // virtual path. Options carry aria-selected (presentation=\"option\")\n // rather than the menuitemradio/aria-checked of a menu.\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n {listOptions.map((opt) => (\n <md-menu-item\n key={opt.value}\n id={`${this.triggerId}-opt-${opt.value}`}\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={opt.value === this.value ? 'option option-selected' : 'option'}\n disabled={opt.disabled}\n selected={opt.value === this.value}\n headline={opt.label}\n supporting-text={opt.supportingText || ''}\n onMdClick={() => this.selectValue(opt.value)}\n >\n {opt.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n class=\"material-symbols-outlined md-select__option-icon\"\n style={opt.iconColor ? { color: opt.iconColor } : undefined}\n aria-hidden=\"true\"\n >\n {opt.icon}\n </span>\n ) : null}\n {/* No light-DOM label copy: md-menu-item renders `headline` in\n its shadow and has no default slot — the unslotted text\n still entered accname computation, doubling the option's\n accessible name (\"10 10\"). */}\n </md-menu-item>\n ))}\n </div>\n )}\n </md-menu>\n );\n }\n\n render() {\n return (\n <Host\n class={{\n 'md-select': true,\n [`md-select--${this.variant}`]: true,\n 'md-select--open': this.open,\n 'md-select--disabled': this.disabled,\n 'md-select--loading': this.loading,\n }}\n aria-haspopup=\"listbox\"\n // No aria-expanded on the host: it has no role, so a screen reader ignores\n // it there (axe flags it \"aria attribute may be ignored\"). The expanded\n // state lives where it works — the filterable search (role=combobox) — and\n // on open, focus moves into the menu (the search, or md-menu's active row).\n aria-busy={this.loading ? 'true' : undefined}\n >\n {this.renderTrigger()}\n {this.renderMenu()}\n {/* Keep the declarative options in the light DOM (hidden) so the\n slotchange/mutation reactivity has something to observe. */}\n <div class=\"md-select__options\" hidden>\n <slot onSlotchange={() => this.refreshOptions()} />\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -50,7 +50,7 @@ export class MdSelectOption {
|
|
|
50
50
|
// but the element is visually hidden — the picker renders the real,
|
|
51
51
|
// interactive row inside its md-menu. aria-hidden avoids double
|
|
52
52
|
// announcement of the (hidden) carrier alongside the live menu item.
|
|
53
|
-
return (h(Host, { key: '
|
|
53
|
+
return (h(Host, { key: '0b425bb49e3918cd1be482c1ddcc76739bf58163', role: "option", "aria-hidden": "true", "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : 'false' }, h("slot", { key: '12e2c4ca36f605dbdf20c8324e197872f8009e25' })));
|
|
54
54
|
}
|
|
55
55
|
static get is() { return "md-select-option"; }
|
|
56
56
|
static get encapsulation() { return "shadow"; }
|
|
@@ -671,7 +671,7 @@ export class MdSlider {
|
|
|
671
671
|
const val = this.displayValue;
|
|
672
672
|
const vs = this.displayStart;
|
|
673
673
|
const ve = this.displayEnd;
|
|
674
|
-
return (h(Host, { key: '
|
|
674
|
+
return (h(Host, { key: 'e083d8312d9628f2ff406ce1431f1be7d5e4ec16', class: {
|
|
675
675
|
'md-slider': true,
|
|
676
676
|
[`md-slider--size-${this.size}`]: true,
|
|
677
677
|
'md-slider--vertical': vertical,
|
|
@@ -681,7 +681,7 @@ export class MdSlider {
|
|
|
681
681
|
'md-slider--stops': this.showStops,
|
|
682
682
|
'md-slider--inset': insetArea,
|
|
683
683
|
'md-slider--disabled': this.disabled,
|
|
684
|
-
}, "aria-orientation": vertical ? 'vertical' : 'horizontal' }, h("div", { key: '
|
|
684
|
+
}, "aria-orientation": vertical ? 'vertical' : 'horizontal' }, h("div", { key: 'a3e39c6f960d7c20019a7780984366b8bf6ed6ea', class: "md-slider__surface", part: "surface" }, h("div", { key: 'd6a85e9ae5b6ec29a6ca40c8b76d1f054bb6e994', class: "md-slider__rail", onPointerDown: this.range ? this.onRangeRailPointerDown : vertical ? this.onVerticalRailPointerDown : undefined, onPointerMove: this.range ? this.onRangeRailPointerMove : vertical ? this.onVerticalRailPointerMove : undefined, onPointerUp: this.range ? this.onRangeRailPointerUp : vertical ? this.onVerticalRailPointerUp : undefined, onPointerCancel: this.range ? this.onRangeRailPointerUp : vertical ? this.onVerticalRailPointerUp : undefined, onLostPointerCapture: this.range ? this.onRangeRailLostPointerCapture : vertical ? this.onVerticalRailLostPointerCapture : undefined }, h("div", { key: 'f2f38bd2557c276a92c169293ff1a0be4d09222a', class: "md-slider__track", part: "track" }, h("div", { key: '4f09b81bdeac65cb21b19a95ec34f795d2d4cf06', class: "md-slider__track-inactive", part: "track-inactive" }), h("div", { key: '2642c070960a6b33c6d44437af69dbbe21653af6', class: "md-slider__track-active", part: "track-active" }), this.showStops && h("div", { key: '6e3f6899c6f91480a592f71b1d96a457bbe351ac', class: "md-slider__ticks" }, this.getTickMarks()), insetArea && (h("span", { key: 'cc8cb71c31eb7db47946d38ae42c6156cc4a150e', class: { 'md-slider__inset': true, 'md-slider__inset--on-active': this.insetOnActive }, part: "inset", "aria-hidden": "true" }, h("slot", { key: '7b65cd157de7e2bd782a68a8100711f2843412e7', name: "inset-icon" }, this.icon ? (h("span", { class: "md-slider__inset-font material-symbols-outlined" }, this.icon)) : null)))), this.range
|
|
685
685
|
? [
|
|
686
686
|
h("div", { class: {
|
|
687
687
|
'md-slider__thumb': true,
|
|
@@ -230,11 +230,11 @@ export class MdSparkline {
|
|
|
230
230
|
const summary = finiteValues.length
|
|
231
231
|
? `Sparkline, latest ${fmt(last)}, range ${fmt(min)} to ${fmt(max)}.${refNote}`
|
|
232
232
|
: `Sparkline, no data.${refNote}`;
|
|
233
|
-
return (h(Host, { key: '
|
|
233
|
+
return (h(Host, { key: 'e58a06d3a132d5664464e6b80ce2ce1a62e4ac7b', class: {
|
|
234
234
|
'md-sparkline': true,
|
|
235
235
|
'md-sparkline--mounted': this.mounted,
|
|
236
236
|
[`md-sparkline--${this.variant}`]: true,
|
|
237
|
-
}, role: "img", "aria-label": summary, style: this.heightProp ? { blockSize: this.heightProp } : undefined }, h("div", { key: '
|
|
237
|
+
}, role: "img", "aria-label": summary, style: this.heightProp ? { blockSize: this.heightProp } : undefined }, h("div", { key: '8ecf08ace640efee79995edb6732580f0a766e88', class: "md-sparkline__canvas", part: "canvas", ref: el => this.bindChartHost(el) })));
|
|
238
238
|
}
|
|
239
239
|
static get is() { return "md-sparkline"; }
|
|
240
240
|
static get encapsulation() { return "shadow"; }
|
|
@@ -87,7 +87,7 @@ export class MdStatusDot {
|
|
|
87
87
|
// aria-live="polite", so static labels deliberately avoid it to prevent
|
|
88
88
|
// spurious announcements when the dot merely renders.
|
|
89
89
|
const role = labelled ? (this.live ? 'status' : 'img') : 'presentation';
|
|
90
|
-
return (h(Host, { key: '
|
|
90
|
+
return (h(Host, { key: '0f92384de5ace257aaeb5745ecd2937a1f876faa', class: {
|
|
91
91
|
'md-status-dot': true,
|
|
92
92
|
[`md-status-dot--${this.state}`]: true,
|
|
93
93
|
[`md-status-dot--${this.size}`]: true,
|
|
@@ -1302,7 +1302,7 @@ export class MdTable {
|
|
|
1302
1302
|
this.el.querySelectorAll('md-table-head md-table-row, md-table-foot md-table-row').length)
|
|
1303
1303
|
: null,
|
|
1304
1304
|
};
|
|
1305
|
-
return (h(Host, { key: '
|
|
1305
|
+
return (h(Host, { key: '1bd9291845eace76f528c806fa5b64e1e09d27d8', class: {
|
|
1306
1306
|
'md-table': true,
|
|
1307
1307
|
[`md-table--density-${this.density}`]: typeof this.density === 'string',
|
|
1308
1308
|
'md-table--sticky-header': this.stickyHeader,
|
|
@@ -1318,7 +1318,7 @@ export class MdTable {
|
|
|
1318
1318
|
// the host: the table content model admits only rowgroups/rows, and the
|
|
1319
1319
|
// host also hosts the caption, live region, loading overlay and empty
|
|
1320
1320
|
// state (axe aria-required-children).
|
|
1321
|
-
style: style }, h("span", { key: '
|
|
1321
|
+
style: style }, h("span", { key: '0f88e97df668f7330c332c1309886c0e718fc4aa', class: "md-table__sr-status", "aria-live": "polite" }, this.srAnnouncement), this.caption && (h("div", { key: '20ce99947f9e1649a116b6b4e2c42910cf1c5f0d', class: "md-table__caption", part: "caption", "aria-hidden": "true" }, this.caption)), this.frozenHeader ? (
|
|
1322
1322
|
// Frozen header: the header grid sits above a vertically-scrolling
|
|
1323
1323
|
// body grid, so the scrollbar spans only the body. Both grids share
|
|
1324
1324
|
// the column tracks (syncFrozenColumns copies the body's resolved
|
|
@@ -1336,7 +1336,7 @@ export class MdTable {
|
|
|
1336
1336
|
// their rows promote here instead of nesting a second rowgroup.
|
|
1337
1337
|
role: "rowgroup", tabindex: "0", ref: (el) => (this.bodyScrollEl = el), onScroll: this.onBodyScroll, onWheel: this.onBodyWheel, onKeyDown: this.onBodyKeyDown }, h("div", { class: "md-table__grid md-table__grid--body", part: "grid",
|
|
1338
1338
|
// Layout-only grid between the rowgroup wrapper and the rows.
|
|
1339
|
-
role: "presentation", ref: (el) => (this.bodyGridEl = el) }, h("slot", { onSlotchange: this.handleSlotChange }), this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows()), this.empty && !this.loading && this.renderEmpty()), h("div", { class: "md-table__hscroll", part: "hscrollbar", "aria-hidden": "true", ref: (el) => (this.hTrackEl = el) }, h("div", { class: "md-table__hscroll-thumb", part: "hscrollbar-thumb", ref: (el) => (this.hThumbEl = el), onPointerDown: this.onHThumbPointerDown, onPointerMove: this.onHThumbPointerMove, onPointerUp: this.onHThumbPointerUp, onPointerCancel: this.onHThumbPointerUp })), h("div", { class: "md-table__vscroll", part: "vscrollbar", "aria-hidden": "true", ref: (el) => (this.vTrackEl = el) }, h("div", { class: "md-table__vscroll-thumb", part: "vscrollbar-thumb", ref: (el) => (this.vThumbEl = el), onPointerDown: this.onVThumbPointerDown, onPointerMove: this.onVThumbPointerMove, onPointerUp: this.onVThumbPointerUp, onPointerCancel: this.onVThumbPointerUp })))) : (h("div", { class: "md-table__grid", part: "grid", ...tableAria }, h("slot", { onSlotchange: this.handleSlotChange }), this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows())), this.loading && this.loadingMode === 'overlay' && (h("div", { key: '
|
|
1339
|
+
role: "presentation", ref: (el) => (this.bodyGridEl = el) }, h("slot", { onSlotchange: this.handleSlotChange }), this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows()), this.empty && !this.loading && this.renderEmpty()), h("div", { class: "md-table__hscroll", part: "hscrollbar", "aria-hidden": "true", ref: (el) => (this.hTrackEl = el) }, h("div", { class: "md-table__hscroll-thumb", part: "hscrollbar-thumb", ref: (el) => (this.hThumbEl = el), onPointerDown: this.onHThumbPointerDown, onPointerMove: this.onHThumbPointerMove, onPointerUp: this.onHThumbPointerUp, onPointerCancel: this.onHThumbPointerUp })), h("div", { class: "md-table__vscroll", part: "vscrollbar", "aria-hidden": "true", ref: (el) => (this.vTrackEl = el) }, h("div", { class: "md-table__vscroll-thumb", part: "vscrollbar-thumb", ref: (el) => (this.vThumbEl = el), onPointerDown: this.onVThumbPointerDown, onPointerMove: this.onVThumbPointerMove, onPointerUp: this.onVThumbPointerUp, onPointerCancel: this.onVThumbPointerUp })))) : (h("div", { class: "md-table__grid", part: "grid", ...tableAria }, h("slot", { onSlotchange: this.handleSlotChange }), this.loading && this.loadingMode === 'skeleton' && this.renderSkeletonRows())), this.loading && this.loadingMode === 'overlay' && (h("div", { key: 'e1db4477aeb27e7b00f43f17e5301c1e19686573', class: "md-table__loading", part: "loading", "aria-hidden": "true" }, h("slot", { key: '3d3e9a37b2975d16c9cdda79f256a020cfd534cd', name: "loader" }, h("slot", { key: '8f3868dff5dda03bb847cb2e34574b2bf1258b58', name: "loading" }, h("div", { key: 'd0f55e862b869ea79262e5c806cc50a354a9806a', class: "md-table__progress", part: "progress" }, h("md-progress-indicator", { key: '3d1c5ab8a8559ce1f8970e722f9f7843cc368c1a', variant: "linear", indeterminate: true, "aria-label": "Loading" })), h("div", { key: 'c06240e496d216d338561d375fc6bdb2be52e3fc', class: "md-table__scrim" }))))), this.empty && !this.loading && !this.frozenHeader && this.renderEmpty()));
|
|
1340
1340
|
}
|
|
1341
1341
|
static get is() { return "md-table"; }
|
|
1342
1342
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1012,7 +1012,7 @@ export class MdTextField {
|
|
|
1012
1012
|
? this.passwordVisible
|
|
1013
1013
|
: this.type !== 'password';
|
|
1014
1014
|
const passwordIcon = isPasswordRevealed ? 'visibility_off' : 'visibility';
|
|
1015
|
-
return (h(Host, { key: '
|
|
1015
|
+
return (h(Host, { key: '6cbbe2bcaf6c34d30d8827e89aa323c1b5d9314e', class: {
|
|
1016
1016
|
'md-text-field': true,
|
|
1017
1017
|
[`md-text-field--${this.variant}`]: true,
|
|
1018
1018
|
'md-text-field--focused': this.focused || this.appearFocused,
|
|
@@ -1032,25 +1032,25 @@ export class MdTextField {
|
|
|
1032
1032
|
// made the documented custom properties dead (clobbered every render).
|
|
1033
1033
|
'--md-text-field-focus-border-width': `${Number(this.focusBorderWidth)}px`,
|
|
1034
1034
|
'--md-text-field-focus-inset': `${-(Number(this.focusBorderWidth) - 1)}px`,
|
|
1035
|
-
} : undefined }, h("div", { key: '
|
|
1035
|
+
} : undefined }, h("div", { key: '5bdb646e75bf62c1ed0379007b7b3b22db7d5886', class: "md-text-field__container", part: "container", onClick: this.handleContainerClick }, h("div", { key: 'f57cfb58fd26f34fd74adef8c75a38b9c6216e1f', class: "md-text-field__state-layer", "aria-hidden": "true" }), h("span", { key: '90ebb55e16dfda11b999cc03b9f221d9c4d77f4c', class: "md-text-field__icon md-text-field__icon--leading", "aria-hidden": "true", style: { display: hasLeading ? undefined : 'none' } }, h("slot", { key: 'b0ed2d7ffb99a500eb725f59de296a1918c628a8', name: "leading-icon" })), h("div", { key: 'f041d801dde559a376fd7a620b916f0149efa9e1', class: "md-text-field__input-wrap" }, this.label && (h("label", { key: '235d07b1a1c9259e4174cdf54edf902be369fc78', class: "md-text-field__label", part: "label", htmlFor: `${this.uid}-input` }, this.label)), h("div", { key: '92000c4f462faa01d25868b984bcff83b393f982', class: "md-text-field__input-row" }, h("span", { key: '0d6c0371556531f8fad881426eda0388915e43c8', class: "md-text-field__chips", part: "chips", style: { display: this.hasSlottedChips ? undefined : 'none' } }, h("slot", { key: 'b49c5ad937b4ddabc9d91c7d269f96da2a9a39e8', name: "chips" })), this.prefixText && this.isFloating && (h("span", { key: '3e81d28ec2408c5616f321960a4dba1ec4fc2646', class: "md-text-field__prefix" }, this.prefixText)), this.renderInputElement(), this.suffixText && this.isFloating && (h("span", { key: '6571a4c1e01543de58d4fdf21d5a53f1e15cd7b5', class: "md-text-field__suffix" }, this.suffixText)))), showClear && (h("button", { key: '85761281d21c6134ccad222ea0992c4e2ba9870b', type: "button", class: {
|
|
1036
1036
|
'md-text-field__clear': true,
|
|
1037
1037
|
'md-text-field__clear--disabled': clearDisabled,
|
|
1038
1038
|
'md-text-field__clear--empty': !this.value,
|
|
1039
|
-
}, disabled: clearDisabled, onClick: this.handleClear, "aria-label": "Clear" }, h("slot", { key: '
|
|
1039
|
+
}, disabled: clearDisabled, onClick: this.handleClear, "aria-label": "Clear" }, h("slot", { key: 'e02eb3263ba5642abb380903a2e2ecd06c09e263', name: "clear-icon" }, h("span", { key: '00017f708b0cff2b2ab745d58e8b1d01135e2458', class: "material-symbols-outlined", "aria-hidden": "true" }, "cancel")))), showPasswordToggle && (h("button", { key: '3a0a64d481cc0f0aa3d998258b50ae39c1f2647a', type: "button", class: {
|
|
1040
1040
|
'md-text-field__password-toggle': true,
|
|
1041
1041
|
'md-text-field__password-toggle--disabled': this.isDisabled,
|
|
1042
|
-
}, disabled: this.isDisabled, onClick: this.handlePasswordToggle, "aria-label": isPasswordRevealed ? 'Hide password' : 'Show password', "aria-pressed": isPasswordRevealed ? 'true' : 'false' }, h("slot", { key: '
|
|
1042
|
+
}, disabled: this.isDisabled, onClick: this.handlePasswordToggle, "aria-label": isPasswordRevealed ? 'Hide password' : 'Show password', "aria-pressed": isPasswordRevealed ? 'true' : 'false' }, h("slot", { key: '899e838a72dc7dd638b2e40184f8510f1346c870', name: "password-toggle-icon" }, h("span", { key: '58075bfb8af4f9b364b0315ed0326a1b82de0cd4', class: "material-symbols-outlined", "aria-hidden": "true" }, passwordIcon)))), showSpeech && (h("button", { key: '8e83a60479e56939e54ffb9545f70339f135d3b8', type: "button", class: {
|
|
1043
1043
|
'md-text-field__speech': true,
|
|
1044
1044
|
'md-text-field__speech--listening': this.listening,
|
|
1045
1045
|
'md-text-field__speech--disabled': this.isDisabled,
|
|
1046
|
-
}, disabled: this.isDisabled || this.readOnly, onClick: this.handleSpeechToggle, "aria-label": this.listening ? 'Stop listening' : 'Start voice input', "aria-pressed": this.listening ? 'true' : 'false' }, h("slot", { key: '
|
|
1046
|
+
}, disabled: this.isDisabled || this.readOnly, onClick: this.handleSpeechToggle, "aria-label": this.listening ? 'Stop listening' : 'Start voice input', "aria-pressed": this.listening ? 'true' : 'false' }, h("slot", { key: '70feffa1e5ed9eb6e20bcc6c6ffb5047e63ff641', name: "speech-icon" }, h("span", { key: '1b22447f4cef33cb9411be12bc0629d8e805383d', class: "material-symbols-outlined", "aria-hidden": "true" }, this.listening ? 'hearing' : 'mic')))), this.error && (h("span", { key: '6eae9694d74cb4cad1885874aed38da94bef8cb4', class: "md-text-field__error-icon", "aria-hidden": "true" }, h("slot", { key: '5d9559047404f51870c33b6245595e0f81b65237', name: "error-icon" }, h("span", { key: '6b1a1e213eeef03558ac817e9acc6cafd94cd1d3', class: "material-symbols-outlined", style: { fontVariationSettings: "'FILL' 1" } }, "error")))), h("span", { key: 'b7504d7f26f3561e50e0b260944e10b5831907fc', class: {
|
|
1047
1047
|
'md-text-field__icon': !this.hasTrailingIconButton,
|
|
1048
1048
|
'md-text-field__icon--trailing': !this.hasTrailingIconButton,
|
|
1049
1049
|
'md-text-field__trailing-icon-button': this.hasTrailingIconButton,
|
|
1050
|
-
}, "aria-hidden": this.hasTrailingIconButton ? null : 'true', style: { display: this.hasSlottedTrailing ? undefined : 'none' } }, h("slot", { key: '
|
|
1050
|
+
}, "aria-hidden": this.hasTrailingIconButton ? null : 'true', style: { display: this.hasSlottedTrailing ? undefined : 'none' } }, h("slot", { key: '3e49ea37c07daec2cd87e9868b7d019d619bd670', name: "trailing-icon" })), this.variant === 'filled' && h("div", { key: '4945e217ef49ef9193f2fa6d24f836d318f5f026', class: "md-text-field__indicator" }), this.variant === 'outlined' && (h("fieldset", { key: '3e5c4128a7f443cff23fad429b05def7ca1efbcf', class: "md-text-field__fieldset" }, h("legend", { key: '55e0c1bd976f8e3816a470862febb8ccf3bdf099', class: {
|
|
1051
1051
|
'md-text-field__legend': true,
|
|
1052
1052
|
'md-text-field__legend--active': this.isFloating && !!this.label,
|
|
1053
|
-
} }, h("span", { key: '
|
|
1053
|
+
} }, h("span", { key: '7758d3c094f73d57fd7cb1fcbfd3b0caa54574ca' }, this.label))))), (supportText || charCount || this.reserveSupportingSpace) && (h("div", { key: '8ed3ce21209aef15ab1ea826b048af01906209c5', class: "md-text-field__support-row" }, h("span", { key: '340954eb48fc72808e342fb49acd98183dd2d138', id: `${this.uid}-support`, part: "supporting-text", role: this.error ? 'alert' : undefined, class: { 'md-text-field__support-text': true, 'md-text-field__support-text--error': this.error } }, supportText || (this.reserveSupportingSpace ? '\u200B' : '')), charCount && h("span", { key: 'b081ffcf8b1be7f341f69d6fbea01519c7aeb30d', id: `${this.uid}-counter`, part: "counter", class: "md-text-field__counter" }, charCount)))));
|
|
1054
1054
|
}
|
|
1055
1055
|
static get is() { return "md-text-field"; }
|
|
1056
1056
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1922,7 +1922,7 @@ export class MdTimePicker {
|
|
|
1922
1922
|
}
|
|
1923
1923
|
// ───────────────────────────── RENDER ─────────────────────────────
|
|
1924
1924
|
render() {
|
|
1925
|
-
return (h(Host, { key: '
|
|
1925
|
+
return (h(Host, { key: 'a99a007239478e87fd5fc131f5d160df0d09b6e5', class: {
|
|
1926
1926
|
'md-time-picker': true,
|
|
1927
1927
|
[`md-time-picker--${this.variant}`]: true,
|
|
1928
1928
|
[`md-time-picker--format-${this.format}`]: true,
|
|
@@ -701,7 +701,7 @@ export class MdTooltip {
|
|
|
701
701
|
const isRich = this.variant === 'rich';
|
|
702
702
|
const hasSubhead = !!this.subhead || this.hasSlottedSubhead;
|
|
703
703
|
const hasActions = this.hasSlottedActions;
|
|
704
|
-
return (h(Host, { key: '
|
|
704
|
+
return (h(Host, { key: 'f3272da5fa2e3b6a4c621182a5d2572f71e1badb', class: "md-tooltip-wrapper" }, h("slot", { key: 'a97507419418ffab1abeb6980d212b1c83b7d8fb' }), h("div", { key: '047b14502bb2942b6934408a4e40e120d654f939', class: {
|
|
705
705
|
'md-tooltip__popup': true,
|
|
706
706
|
'md-tooltip__popup--plain': !isRich,
|
|
707
707
|
'md-tooltip__popup--rich': isRich,
|
|
@@ -263,7 +263,7 @@ export class MdTransferList {
|
|
|
263
263
|
return (h("div", { class: "md-transfer-list__controls", part: "controls" }, !this.singleStepOnly && (h("md-icon-button", { variant: "tonal", icon: this.moveAllRightIcon, disabled: this.disabled || !sourceAvailable, "aria-label": this.moveAllRightLabel, onClick: this.moveAllRight })), h("md-icon-button", { variant: "filled", icon: this.moveRightIcon, disabled: this.disabled || sourceCount === 0, "aria-label": this.moveRightLabel, onClick: this.moveRight }), h("md-icon-button", { variant: "filled", icon: this.moveLeftIcon, disabled: this.disabled || targetCount === 0, "aria-label": this.moveLeftLabel, onClick: this.moveLeft }), !this.singleStepOnly && (h("md-icon-button", { variant: "tonal", icon: this.moveAllLeftIcon, disabled: this.disabled || !targetAvailable, "aria-label": this.moveAllLeftLabel, onClick: this.moveAllLeft }))));
|
|
264
264
|
}
|
|
265
265
|
render() {
|
|
266
|
-
return (h(Host, { key: '
|
|
266
|
+
return (h(Host, { key: 'eede92cf0e9ab158aad634fb1b750e74f385100c', class: {
|
|
267
267
|
'md-transfer-list': true,
|
|
268
268
|
'md-transfer-list--disabled': this.disabled,
|
|
269
269
|
}, role: "group", "aria-disabled": this.disabled ? 'true' : 'false' }, this.renderColumn('source'), this.renderControls(), this.renderColumn('target')));
|