@aurelia-mdc-web/all 9.3.3-au2 → 9.3.5-au2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alert/alert-configuration.js +5 -9
- package/dist/alert/alert-configuration.js.map +1 -1
- package/dist/alert/alert-modal/alert-modal.js +8 -11
- package/dist/alert/alert-modal/alert-modal.js.map +1 -1
- package/dist/alert/alert-modal/alert-modal.scss +10 -0
- package/dist/alert/alert-modal/i-alert-modal-payload.js +8 -7
- package/dist/alert/alert-modal/i-alert-modal-payload.js.map +1 -1
- package/dist/alert/alert-service.js +52 -37
- package/dist/alert/alert-service.js.map +1 -1
- package/dist/alert/decorators/confirm-action.js +1 -4
- package/dist/alert/decorators/confirm-action.js.map +1 -1
- package/dist/alert/decorators/using-progress.js +1 -4
- package/dist/alert/decorators/using-progress.js.map +1 -1
- package/dist/alert/exceptions-tracker.js +1 -5
- package/dist/alert/exceptions-tracker.js.map +1 -1
- package/dist/alert/global-progress/global-progress.js +24 -27
- package/dist/alert/global-progress/global-progress.js.map +1 -1
- package/dist/alert/global-progress/global-progress.scss +38 -0
- package/dist/alert/prompt-dialog/prompt-dialog.js +9 -12
- package/dist/alert/prompt-dialog/prompt-dialog.js.map +1 -1
- package/dist/banner/mdc-banner.js +42 -45
- package/dist/banner/mdc-banner.js.map +1 -1
- package/dist/base/attributes/mdc-focus-trap.js +22 -25
- package/dist/base/attributes/mdc-focus-trap.js.map +1 -1
- package/dist/base/elements/i-validated-element.js +1 -2
- package/dist/base/elements/mdc-promisify-reference.js +13 -16
- package/dist/base/elements/mdc-promisify-reference.js.map +1 -1
- package/dist/base/index.js +9 -21
- package/dist/base/index.js.map +1 -1
- package/dist/base/interceptors.js +5 -12
- package/dist/base/interceptors.js.map +1 -1
- package/dist/base/material-palette.js +1 -4
- package/dist/base/material-palette.js.map +1 -1
- package/dist/base/mdc-component.js +1 -5
- package/dist/base/mdc-component.js.map +1 -1
- package/dist/base/next-element.js +1 -4
- package/dist/base/next-element.js.map +1 -1
- package/dist/button/enhance-mdc-button.js +6 -9
- package/dist/button/enhance-mdc-button.js.map +1 -1
- package/dist/button/mdc-button-label.js +6 -9
- package/dist/button/mdc-button-label.js.map +1 -1
- package/dist/button/mdc-button.js +27 -30
- package/dist/button/mdc-button.js.map +1 -1
- package/dist/card/mdc-card-action-buttons.js +6 -9
- package/dist/card/mdc-card-action-buttons.js.map +1 -1
- package/dist/card/mdc-card-action-icons.js +6 -9
- package/dist/card/mdc-card-action-icons.js.map +1 -1
- package/dist/card/mdc-card-actions/mdc-card-actions.js +12 -15
- package/dist/card/mdc-card-actions/mdc-card-actions.js.map +1 -1
- package/dist/card/mdc-card-media/mdc-card-media.js +15 -18
- package/dist/card/mdc-card-media/mdc-card-media.js.map +1 -1
- package/dist/card/mdc-card-primary-action.js +12 -15
- package/dist/card/mdc-card-primary-action.js.map +1 -1
- package/dist/card/mdc-card.js +12 -15
- package/dist/card/mdc-card.js.map +1 -1
- package/dist/checkbox/mdc-checkbox.js +35 -38
- package/dist/checkbox/mdc-checkbox.js.map +1 -1
- package/dist/chips/mdc-chip/mdc-chip.js +34 -37
- package/dist/chips/mdc-chip/mdc-chip.js.map +1 -1
- package/dist/chips/mdc-chip-action/enhance-mdc-chip-action.js +6 -9
- package/dist/chips/mdc-chip-action/enhance-mdc-chip-action.js.map +1 -1
- package/dist/chips/mdc-chip-action/mdc-chip-action.js +37 -40
- package/dist/chips/mdc-chip-action/mdc-chip-action.js.map +1 -1
- package/dist/chips/mdc-chip-set/mdc-chip-set.js +24 -27
- package/dist/chips/mdc-chip-set/mdc-chip-set.js.map +1 -1
- package/dist/chips/styles/_index.scss +1 -0
- package/dist/chips/styles/mdc-chips.import.scss +1 -0
- package/dist/chips/styles/mdc-chips.scss +11 -0
- package/dist/circular-progress/mdc-circular-progress.js +22 -25
- package/dist/circular-progress/mdc-circular-progress.js.map +1 -1
- package/dist/circular-progress/styles/_index.scss +1 -0
- package/dist/circular-progress/styles/mdc-circular-progress.import.scss +1 -0
- package/dist/circular-progress/styles/mdc-circular-progress.scss +14 -0
- package/dist/data-table/mdc-data-table-row.js +10 -13
- package/dist/data-table/mdc-data-table-row.js.map +1 -1
- package/dist/data-table/mdc-data-table.js +88 -91
- package/dist/data-table/mdc-data-table.js.map +1 -1
- package/dist/data-table/styles/_index.scss +1 -0
- package/dist/data-table/styles/mdc-data-table.import.scss +1 -0
- package/dist/data-table/styles/mdc-data-table.scss +64 -0
- package/dist/dialog/mdc-dialog-actions.js +10 -13
- package/dist/dialog/mdc-dialog-actions.js.map +1 -1
- package/dist/dialog/mdc-dialog-content.js +6 -9
- package/dist/dialog/mdc-dialog-content.js.map +1 -1
- package/dist/dialog/mdc-dialog-service.js +13 -17
- package/dist/dialog/mdc-dialog-service.js.map +1 -1
- package/dist/dialog/mdc-dialog-title.js +6 -9
- package/dist/dialog/mdc-dialog-title.js.map +1 -1
- package/dist/dialog/mdc-dialog.js +46 -49
- package/dist/dialog/mdc-dialog.js.map +1 -1
- package/dist/drawer/mdc-drawer-app-content.js +6 -9
- package/dist/drawer/mdc-drawer-app-content.js.map +1 -1
- package/dist/drawer/mdc-drawer-content.js +6 -9
- package/dist/drawer/mdc-drawer-content.js.map +1 -1
- package/dist/drawer/mdc-drawer-header/mdc-drawer-header.js +14 -17
- package/dist/drawer/mdc-drawer-header/mdc-drawer-header.js.map +1 -1
- package/dist/drawer/mdc-drawer.js +21 -24
- package/dist/drawer/mdc-drawer.js.map +1 -1
- package/dist/drawer/styles/_index.scss +1 -0
- package/dist/drawer/styles/mdc-drawer.import.scss +1 -0
- package/dist/drawer/styles/mdc-drawer.scss +0 -0
- package/dist/elevation/mdc-elevation.js +6 -9
- package/dist/elevation/mdc-elevation.js.map +1 -1
- package/dist/expandable/mdc-expandable.js +17 -20
- package/dist/expandable/mdc-expandable.js.map +1 -1
- package/dist/expandable/styles/_icon-variables.scss +3 -0
- package/dist/expandable/styles/_index.scss +1 -0
- package/dist/expandable/styles/_mixins.scss +287 -0
- package/dist/expandable/styles/_variables.scss +17 -0
- package/dist/expandable/styles/mdc-expandable.import.scss +1 -0
- package/dist/expandable/styles/mdc-expandable.scss +3 -0
- package/dist/fab/enhance-mdc-fab.js +6 -9
- package/dist/fab/enhance-mdc-fab.js.map +1 -1
- package/dist/fab/mdc-fab-icon.js +6 -9
- package/dist/fab/mdc-fab-icon.js.map +1 -1
- package/dist/fab/mdc-fab.js +30 -33
- package/dist/fab/mdc-fab.js.map +1 -1
- package/dist/floating-label/mdc-floating-label.js +13 -16
- package/dist/floating-label/mdc-floating-label.js.map +1 -1
- package/dist/form-field/mdc-form-field.js +24 -27
- package/dist/form-field/mdc-form-field.js.map +1 -1
- package/dist/icon/mdc-icon.js +7 -10
- package/dist/icon/mdc-icon.js.map +1 -1
- package/dist/icon-button/enhance-mdc-icon-button.js +6 -9
- package/dist/icon-button/enhance-mdc-icon-button.js.map +1 -1
- package/dist/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.js +15 -18
- package/dist/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.js.map +1 -1
- package/dist/icon-button/mdc-icon-button.js +25 -28
- package/dist/icon-button/mdc-icon-button.js.map +1 -1
- package/dist/image-list/mdc-image-list-item/mdc-image-list-item.js +19 -22
- package/dist/image-list/mdc-image-list-item/mdc-image-list-item.js.map +1 -1
- package/dist/image-list/mdc-image-list.js +18 -21
- package/dist/image-list/mdc-image-list.js.map +1 -1
- package/dist/image-list/styles/_index.scss +1 -0
- package/dist/image-list/styles/mdc-image-list.import.scss +1 -0
- package/dist/image-list/styles/mdc-image-list.scss +7 -0
- package/dist/index.js +151 -297
- package/dist/index.js.map +1 -1
- package/dist/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.js +33 -36
- package/dist/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.js.map +1 -1
- package/dist/layout-grid/mdc-layout-grid-inner.js +6 -9
- package/dist/layout-grid/mdc-layout-grid-inner.js.map +1 -1
- package/dist/layout-grid/mdc-layout-grid.js +30 -33
- package/dist/layout-grid/mdc-layout-grid.js.map +1 -1
- package/dist/layout-grid/styles/_index.scss +1 -0
- package/dist/layout-grid/styles/mdc-layout-grid.import.scss +1 -0
- package/dist/layout-grid/styles/mdc-layout-grid.scss +11 -0
- package/dist/line-ripple/mdc-line-ripple.js +10 -13
- package/dist/line-ripple/mdc-line-ripple.js.map +1 -1
- package/dist/linear-progress/mdc-linear-progress.js +23 -26
- package/dist/linear-progress/mdc-linear-progress.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-divider/mdc-deprecated-list-divider.js +15 -18
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-divider/mdc-deprecated-list-divider.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-group.js +14 -17
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-group.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/enhance-mdc-deprecated-list-item.js +6 -9
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/enhance-mdc-deprecated-list-item.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-graphic.js +6 -9
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-graphic.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-meta.js +6 -9
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-meta.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item.js +25 -28
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item-primary-text.js +6 -9
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item-primary-text.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item-secondary-text.js +6 -9
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item-secondary-text.js.map +1 -1
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list.js +75 -78
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list.js.map +1 -1
- package/dist/list/mdc-list-divider/mdc-list-divider.js +18 -21
- package/dist/list/mdc-list-divider/mdc-list-divider.js.map +1 -1
- package/dist/list/mdc-list-group.js +14 -17
- package/dist/list/mdc-list-group.js.map +1 -1
- package/dist/list/mdc-list-item/enhance-mdc-list-item.js +6 -9
- package/dist/list/mdc-list-item/enhance-mdc-list-item.js.map +1 -1
- package/dist/list/mdc-list-item/mdc-list-item-leading.js +6 -9
- package/dist/list/mdc-list-item/mdc-list-item-leading.js.map +1 -1
- package/dist/list/mdc-list-item/mdc-list-item-trailing.js +6 -9
- package/dist/list/mdc-list-item/mdc-list-item-trailing.js.map +1 -1
- package/dist/list/mdc-list-item/mdc-list-item.js +37 -40
- package/dist/list/mdc-list-item/mdc-list-item.js.map +1 -1
- package/dist/list/mdc-list-item-overline-text.js +6 -9
- package/dist/list/mdc-list-item-overline-text.js.map +1 -1
- package/dist/list/mdc-list-item-primary-text.js +6 -9
- package/dist/list/mdc-list-item-primary-text.js.map +1 -1
- package/dist/list/mdc-list-item-secondary-text.js +6 -9
- package/dist/list/mdc-list-item-secondary-text.js.map +1 -1
- package/dist/list/mdc-list.js +55 -58
- package/dist/list/mdc-list.js.map +1 -1
- package/dist/list/styles/_index.scss +1 -0
- package/dist/list/styles/mdc-list.import.scss +1 -0
- package/dist/list/styles/mdc-list.scss +6 -0
- package/dist/lookup/discardable-promise.js +1 -5
- package/dist/lookup/discardable-promise.js.map +1 -1
- package/dist/lookup/mdc-lookup-configuration.js +1 -5
- package/dist/lookup/mdc-lookup-configuration.js.map +1 -1
- package/dist/lookup/mdc-lookup.js +66 -69
- package/dist/lookup/mdc-lookup.js.map +1 -1
- package/dist/mdc-configuration.js +11 -15
- package/dist/mdc-configuration.js.map +1 -1
- package/dist/menu/mdc-menu-selection-group-icon.js +6 -9
- package/dist/menu/mdc-menu-selection-group-icon.js.map +1 -1
- package/dist/menu/mdc-menu-selection-group.js +6 -9
- package/dist/menu/mdc-menu-selection-group.js.map +1 -1
- package/dist/menu/mdc-menu.js +68 -71
- package/dist/menu/mdc-menu.js.map +1 -1
- package/dist/menu-surface/mdc-menu-surface-anchor.js +8 -11
- package/dist/menu-surface/mdc-menu-surface-anchor.js.map +1 -1
- package/dist/menu-surface/mdc-menu-surface.js +58 -61
- package/dist/menu-surface/mdc-menu-surface.js.map +1 -1
- package/dist/notched-outline/mdc-notched-outline.js +17 -20
- package/dist/notched-outline/mdc-notched-outline.js.map +1 -1
- package/dist/radio/mdc-radio.js +24 -27
- package/dist/radio/mdc-radio.js.map +1 -1
- package/dist/ripple/mdc-ripple.js +48 -51
- package/dist/ripple/mdc-ripple.js.map +1 -1
- package/dist/ripple/styles/_index.scss +1 -0
- package/dist/ripple/styles/mdc-ripple.import.scss +1 -0
- package/dist/ripple/styles/mdc-ripple.scss +10 -0
- package/dist/segmented-button/mdc-segmented-button-segment/enhance-mdc-segmented-button-segment.js +6 -9
- package/dist/segmented-button/mdc-segmented-button-segment/enhance-mdc-segmented-button-segment.js.map +1 -1
- package/dist/segmented-button/mdc-segmented-button-segment/mdc-segmented-button-segment.js +24 -27
- package/dist/segmented-button/mdc-segmented-button-segment/mdc-segmented-button-segment.js.map +1 -1
- package/dist/segmented-button/mdc-segmented-button.js +21 -24
- package/dist/segmented-button/mdc-segmented-button.js.map +1 -1
- package/dist/select/mdc-default-select-configuration.js +1 -5
- package/dist/select/mdc-default-select-configuration.js.map +1 -1
- package/dist/select/mdc-select-adapter-aurelia.js +1 -2
- package/dist/select/mdc-select-adapter-aurelia.js.map +1 -1
- package/dist/select/mdc-select-foundation-aurelia.js +43 -47
- package/dist/select/mdc-select-foundation-aurelia.js.map +1 -1
- package/dist/select/mdc-select-helper-text/mdc-select-helper-text.js +24 -27
- package/dist/select/mdc-select-helper-text/mdc-select-helper-text.js.map +1 -1
- package/dist/select/mdc-select-icon.js +13 -16
- package/dist/select/mdc-select-icon.js.map +1 -1
- package/dist/select/mdc-select-value-observer.js +11 -14
- package/dist/select/mdc-select-value-observer.js.map +1 -1
- package/dist/select/mdc-select.js +64 -67
- package/dist/select/mdc-select.js.map +1 -1
- package/dist/slider/mdc-slider-foundation-aurelia.js +2 -6
- package/dist/slider/mdc-slider-foundation-aurelia.js.map +1 -1
- package/dist/slider/mdc-slider.js +76 -79
- package/dist/slider/mdc-slider.js.map +1 -1
- package/dist/slider/styles/_index.scss +1 -0
- package/dist/slider/styles/mdc-slider.import.scss +1 -0
- package/dist/slider/styles/mdc-slider.scss +8 -0
- package/dist/snackbar/mdc-snackbar-service.js +4 -8
- package/dist/snackbar/mdc-snackbar-service.js.map +1 -1
- package/dist/snackbar/mdc-snackbar.js +52 -55
- package/dist/snackbar/mdc-snackbar.js.map +1 -1
- package/dist/switch/enhance-mdc-switch.js +6 -9
- package/dist/switch/enhance-mdc-switch.js.map +1 -1
- package/dist/switch/mdc-switch.js +13 -16
- package/dist/switch/mdc-switch.js.map +1 -1
- package/dist/tab-bar/indicator/mdc-tab-indicator.js +23 -26
- package/dist/tab-bar/indicator/mdc-tab-indicator.js.map +1 -1
- package/dist/tab-bar/mdc-tab-bar.js +26 -29
- package/dist/tab-bar/mdc-tab-bar.js.map +1 -1
- package/dist/tab-bar/scroller/mdc-tab-scroller.js +22 -25
- package/dist/tab-bar/scroller/mdc-tab-scroller.js.map +1 -1
- package/dist/tab-bar/tab/mdc-tab.js +41 -44
- package/dist/tab-bar/tab/mdc-tab.js.map +1 -1
- package/dist/text-field/enhance-mdc-text-field.js +6 -9
- package/dist/text-field/enhance-mdc-text-field.js.map +1 -1
- package/dist/text-field/mdc-default-text-field-configuration.js +1 -5
- package/dist/text-field/mdc-default-text-field-configuration.js.map +1 -1
- package/dist/text-field/mdc-inputmask.js +12 -15
- package/dist/text-field/mdc-inputmask.js.map +1 -1
- package/dist/text-field/mdc-text-field-character-counter.js +10 -13
- package/dist/text-field/mdc-text-field-character-counter.js.map +1 -1
- package/dist/text-field/mdc-text-field-helper-line/mdc-text-field-helper-line.js +11 -14
- package/dist/text-field/mdc-text-field-helper-line/mdc-text-field-helper-line.js.map +1 -1
- package/dist/text-field/mdc-text-field-helper-text/mdc-text-field-helper-text.js +19 -22
- package/dist/text-field/mdc-text-field-helper-text/mdc-text-field-helper-text.js.map +1 -1
- package/dist/text-field/mdc-text-field-icon.js +19 -22
- package/dist/text-field/mdc-text-field-icon.js.map +1 -1
- package/dist/text-field/mdc-text-field.js +109 -112
- package/dist/text-field/mdc-text-field.js.map +1 -1
- package/dist/text-field/styles/_index.scss +1 -0
- package/dist/text-field/styles/mdc-text-field.import.scss +1 -0
- package/dist/text-field/styles/mdc-text-field.scss +8 -0
- package/dist/tooltip/mdc-default-tooltip-configuration.js +1 -5
- package/dist/tooltip/mdc-default-tooltip-configuration.js.map +1 -1
- package/dist/tooltip/mdc-tooltip-attribute.js +36 -39
- package/dist/tooltip/mdc-tooltip-attribute.js.map +1 -1
- package/dist/tooltip/mdc-tooltip.js +57 -60
- package/dist/tooltip/mdc-tooltip.js.map +1 -1
- package/dist/top-app-bar/enhance-top-app-bar-actions.js +6 -9
- package/dist/top-app-bar/enhance-top-app-bar-actions.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-action-item.js +6 -9
- package/dist/top-app-bar/mdc-top-app-bar-action-item.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-fixed-adjust.js +6 -9
- package/dist/top-app-bar/mdc-top-app-bar-fixed-adjust.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-nav-icon.js +6 -9
- package/dist/top-app-bar/mdc-top-app-bar-nav-icon.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-row.js +6 -9
- package/dist/top-app-bar/mdc-top-app-bar-row.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-section/mdc-top-app-bar-section.js +12 -15
- package/dist/top-app-bar/mdc-top-app-bar-section/mdc-top-app-bar-section.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar-title.js +6 -9
- package/dist/top-app-bar/mdc-top-app-bar-title.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar.js +40 -43
- package/dist/top-app-bar/mdc-top-app-bar.js.map +1 -1
- package/dist/tree-view/i-tree-node.js +1 -2
- package/dist/tree-view/mdc-tree-node-meta.js +6 -9
- package/dist/tree-view/mdc-tree-node-meta.js.map +1 -1
- package/dist/tree-view/mdc-tree-node.js +6 -9
- package/dist/tree-view/mdc-tree-node.js.map +1 -1
- package/dist/tree-view/mdc-tree-view.js +25 -29
- package/dist/tree-view/mdc-tree-view.js.map +1 -1
- package/dist/tree-view/node-filter.js +6 -9
- package/dist/tree-view/node-filter.js.map +1 -1
- package/dist/tree-view/styles/_index.scss +1 -0
- package/dist/tree-view/styles/_mixins.scss +145 -0
- package/dist/tree-view/styles/_variables.scss +8 -0
- package/dist/tree-view/styles/mdc-tree-view.import.scss +1 -0
- package/dist/tree-view/styles/mdc-tree-view.scss +3 -0
- package/dist/types/alert/alert-modal/i-alert-modal-payload.d.ts +7 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/typography/mdc-typography.js +57 -60
- package/dist/typography/mdc-typography.js.map +1 -1
- package/dist/validation/mdc-validation-controller-factory.js +6 -10
- package/dist/validation/mdc-validation-controller-factory.js.map +1 -1
- package/dist/validation/mdc-validation-result-presenter.js +1 -5
- package/dist/validation/mdc-validation-result-presenter.js.map +1 -1
- package/dist/validation/validate.js +1 -4
- package/dist/validation/validate.js.map +1 -1
- package/package.json +2 -2
- package/src/alert/alert-modal/i-alert-modal-payload.ts +14 -9
- package/src/alert/alert-service.ts +29 -10
- package/src/index.ts +1 -0
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const runtime_1 = require("@aurelia/runtime");
|
|
6
|
-
const runtime_html_1 = require("@aurelia/runtime-html");
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { subscriberCollection, AccessorType, } from '@aurelia/runtime';
|
|
3
|
+
import { CustomElement } from '@aurelia/runtime-html';
|
|
7
4
|
// const hasOwn = Object.prototype.hasOwnProperty;
|
|
8
5
|
const childObserverOptions = {
|
|
9
6
|
childList: true,
|
|
@@ -11,7 +8,7 @@ const childObserverOptions = {
|
|
|
11
8
|
characterData: true
|
|
12
9
|
};
|
|
13
10
|
let MdcSelectValueObserver = (() => {
|
|
14
|
-
let _classDecorators = [
|
|
11
|
+
let _classDecorators = [subscriberCollection()];
|
|
15
12
|
let _classDescriptor;
|
|
16
13
|
let _classExtraInitializers = [];
|
|
17
14
|
let _classThis;
|
|
@@ -19,10 +16,10 @@ let MdcSelectValueObserver = (() => {
|
|
|
19
16
|
static { _classThis = this; }
|
|
20
17
|
static {
|
|
21
18
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
22
|
-
|
|
19
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
23
20
|
MdcSelectValueObserver = _classThis = _classDescriptor.value;
|
|
24
21
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
25
|
-
|
|
22
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
26
23
|
}
|
|
27
24
|
currentValue = void 0;
|
|
28
25
|
oldValue = void 0;
|
|
@@ -31,7 +28,7 @@ let MdcSelectValueObserver = (() => {
|
|
|
31
28
|
hasChanges = false;
|
|
32
29
|
// ObserverType.Layout is not always true
|
|
33
30
|
// but for simplicity, always treat as such
|
|
34
|
-
type = (
|
|
31
|
+
type = (AccessorType.Node | AccessorType.Observer | AccessorType.Layout);
|
|
35
32
|
arrayObserver = void 0;
|
|
36
33
|
nodeObserver = void 0;
|
|
37
34
|
observing = false;
|
|
@@ -47,7 +44,7 @@ let MdcSelectValueObserver = (() => {
|
|
|
47
44
|
// do not pass the value to the element if options has never been set
|
|
48
45
|
// the value will be passed on when options do arrive
|
|
49
46
|
if (this.optionsWereSet) {
|
|
50
|
-
|
|
47
|
+
CustomElement.for(this.obj).viewModel.setValue(this.currentValue, skipNotify);
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
50
|
getValue() {
|
|
@@ -135,7 +132,7 @@ let MdcSelectValueObserver = (() => {
|
|
|
135
132
|
// 3. assign `value` to `this.currentValue`
|
|
136
133
|
// 4. return `true` to signal value has changed
|
|
137
134
|
const obj = this.obj;
|
|
138
|
-
const options =
|
|
135
|
+
const options = CustomElement.for(obj).viewModel.items ?? [];
|
|
139
136
|
const len = options.length;
|
|
140
137
|
// const currentValue = this.currentValue;
|
|
141
138
|
let i = 0;
|
|
@@ -207,7 +204,7 @@ let MdcSelectValueObserver = (() => {
|
|
|
207
204
|
return true;
|
|
208
205
|
}
|
|
209
206
|
start() {
|
|
210
|
-
const vm =
|
|
207
|
+
const vm = CustomElement.for(this.obj).viewModel;
|
|
211
208
|
vm.initialised.then(() => {
|
|
212
209
|
(this.nodeObserver = new this.obj.ownerDocument.defaultView.MutationObserver(records => this.handleNodeChange(records)))
|
|
213
210
|
.observe(vm.menu.root, childObserverOptions);
|
|
@@ -283,5 +280,5 @@ let MdcSelectValueObserver = (() => {
|
|
|
283
280
|
};
|
|
284
281
|
return MdcSelectValueObserver = _classThis;
|
|
285
282
|
})();
|
|
286
|
-
|
|
283
|
+
export { MdcSelectValueObserver };
|
|
287
284
|
//# sourceMappingURL=mdc-select-value-observer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdc-select-value-observer.js","sourceRoot":"","sources":["../../src/select/mdc-select-value-observer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n subscriberCollection,\n AccessorType,\n} from '@aurelia/runtime';\n\nimport type {\n ICollectionObserver,\n IndexMap,\n IObserver,\n IObserverLocator,\n ISubscriber,\n ISubscriberCollection,\n} from '@aurelia/runtime';\n\nimport { INode, CustomElement } from '@aurelia/runtime-html';\nimport { IMdcSelectElement, MdcSelect } from './mdc-select';\n\n// const hasOwn = Object.prototype.hasOwnProperty;\nconst childObserverOptions = {\n childList: true,\n subtree: true,\n characterData: true\n};\n\n// function defaultMatcher(a: unknown, b: unknown): boolean {\n// return a === b;\n// }\n\nexport interface IOptionElement extends HTMLOptionElement {\n model?: unknown;\n}\n\nexport interface MdcSelectValueObserver extends\n ISubscriberCollection { }\n\nexport interface INodeObserverConfigBase {\n /**\n * Indicates the list of events can be used to observe a particular property\n */\n readonly events: string[];\n /**\n * Indicates whether this property is readonly, so observer wont attempt to assign value\n * example: input.files\n */\n readonly readonly?: boolean;\n /**\n * A default value to assign to the corresponding property if the incoming value is null/undefined\n */\n readonly default?: unknown;\n}\n\n\nexport interface INodeObserver extends IObserver {\n /**\n * Instruct this node observer event observation behavior\n */\n useConfig(config: INodeObserverConfigBase): void;\n}\n\n@subscriberCollection()\nexport class MdcSelectValueObserver implements INodeObserver {\n public currentValue: unknown = void 0;\n public oldValue: unknown = void 0;\n\n public readonly obj: IMdcSelectElement;\n public config: INodeObserverConfigBase;\n\n public hasChanges: boolean = false;\n // ObserverType.Layout is not always true\n // but for simplicity, always treat as such\n public type: AccessorType = (AccessorType.Node | AccessorType.Observer | AccessorType.Layout) as AccessorType;\n\n public arrayObserver?: ICollectionObserver<'array'> = void 0;\n public nodeObserver?: MutationObserver = void 0;\n\n private observing: boolean = false;\n private listened: boolean = false;\n\n public constructor(\n obj: INode,\n // deepscan-disable-next-line\n _key: PropertyKey,\n config: INodeObserverConfigBase,\n _: IObserverLocator\n ) {\n this.obj = obj as unknown as IMdcSelectElement;\n this.config = config;\n }\n\n optionsWereSet: boolean;\n\n setElementValue(skipNotify: boolean) {\n // do not pass the value to the element if options has never been set\n // the value will be passed on when options do arrive\n if (this.optionsWereSet) {\n CustomElement.for<MdcSelect>(this.obj).viewModel.setValue(this.currentValue, skipNotify);\n }\n }\n\n public getValue(): unknown {\n // is it safe to assume the observer has the latest value?\n // todo: ability to turn on/off cache based on type\n return this.observing\n ? this.currentValue\n // : this.obj.multiple\n // ? Array.from(this.obj.options).map(o => o.value)\n : this.obj.value;\n }\n\n public setValue(newValue: unknown): void {\n this.oldValue = this.currentValue;\n this.currentValue = newValue;\n this.hasChanges = newValue !== this.oldValue;\n // this.observeArray(newValue instanceof Array ? newValue : null);\n if (this.optionsWereSet) {\n this.flushChanges();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public flushChanges(): void {\n if (this.hasChanges) {\n this.hasChanges = false;\n this.synchronizeOptions();\n }\n }\n\n public handleCollectionChange(): void {\n // always sync \"selected\" property of <options/>\n // immediately whenever the array notifies its mutation\n this.synchronizeOptions();\n }\n\n public notify(): void {\n const oldValue = this.oldValue;\n const newValue = this.currentValue;\n if (newValue === oldValue) {\n return;\n }\n this.subs.notify(newValue, oldValue);\n }\n\n public handleEvent(): void {\n const shouldNotify = this.synchronizeValue();\n if (shouldNotify) {\n this.subs.notify(this.currentValue, this.oldValue);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public synchronizeOptions(_indexMap?: IndexMap): void {\n this.setElementValue(true);\n // const { currentValue, obj } = this;\n // // const isArray = Array.isArray(currentValue);\n // // const matcher = obj.matcher !== void 0 ? obj.matcher : defaultMatcher;\n // // const matcher = defaultMatcher;\n // const options = CustomElement.for<MdcSelect>(obj).viewModel.items;\n // let i = options.length;\n\n // while (i-- > 0) {\n // // const option = options[i];\n // // const optionValue = hasOwn.call(option, 'model') ? option.model : option.value;\n // // const optionValue = option.value;\n // // if (isArray) {\n // // option.selected = (currentValue as unknown[]).findIndex(item => !!matcher(optionValue, item)) !== -1;\n // // continue;\n // // }\n // if (!this.optionsWereSet) {\n // this.optionsWereSet = true;\n // this.setElementValue(true);\n // }\n // // option.selected = !!matcher(optionValue, currentValue);\n // }\n }\n\n public synchronizeValue(): boolean {\n // Spec for synchronizing value from `<select/>` to `SelectObserver`\n // When synchronizing value to observed <select/> element, do the following steps:\n // A. If `<select/>` is multiple\n // 1. Check if current value, called `currentValue` is an array\n // a. If not an array, return true to signal value has changed\n // b. If is an array:\n // i. gather all current selected <option/>, in to array called `values`\n // ii. loop through the `currentValue` array and remove items that are nolonger selected based on matcher\n // iii. loop through the `values` array and add items that are selected based on matcher\n // iv. Return false to signal value hasn't changed\n // B. If the select is single\n // 1. Let `value` equal the first selected option, if no option selected, then `value` is `null`\n // 2. assign `this.currentValue` to `this.oldValue`\n // 3. assign `value` to `this.currentValue`\n // 4. return `true` to signal value has changed\n const obj = this.obj;\n const options = CustomElement.for<MdcSelect>(obj).viewModel.items ?? [];\n const len = options.length;\n // const currentValue = this.currentValue;\n let i = 0;\n\n /*\n if (obj.multiple) {\n // A.\n if (!(currentValue instanceof Array)) {\n // A.1.a\n return true;\n }\n // A.1.b\n // multi select\n let option: IOptionElement;\n const matcher = obj.matcher ?? defaultMatcher;\n // A.1.b.i\n const values: unknown[] = [];\n while (i < len) {\n option = options[i];\n if (option.selected) {\n values.push(hasOwn.call(option, 'model')\n ? option.model\n : option.value\n );\n }\n ++i;\n }\n // A.1.b.ii\n i = 0;\n while (i < currentValue.length) {\n const a = currentValue[i];\n // Todo: remove arrow fn\n if (values.findIndex(b => !!matcher(a, b)) === -1) {\n currentValue.splice(i, 1);\n } else {\n ++i;\n }\n }\n // A.1.b.iii\n i = 0;\n while (i < values.length) {\n const a = values[i];\n // Todo: remove arrow fn\n if (currentValue.findIndex(b => !!matcher(a, b)) === -1) {\n currentValue.push(a);\n }\n ++i;\n }\n // A.1.b.iv\n return false;\n }\n */\n // B. single select\n // B.1\n let value: unknown = undefined;\n while (i < len) {\n const option = options[i];\n if (option.value === this.obj.value) {\n // value = hasOwn.call(option, 'model') ? option.model : option.value;\n value = option.value;\n break;\n }\n ++i;\n }\n // B.2\n this.oldValue = this.currentValue;\n // B.3\n this.currentValue = value;\n // B.4\n return true;\n }\n\n private start(): void {\n const vm = CustomElement.for<MdcSelect>(this.obj).viewModel;\n vm.initialised.then(() => {\n (this.nodeObserver = new this.obj.ownerDocument.defaultView!.MutationObserver(records => this.handleNodeChange(records)))\n .observe(vm.menu.root, childObserverOptions);\n // this.observeArray(this.currentValue instanceof Array ? this.currentValue : null);\n this.observing = true;\n if (vm.items?.length) {\n this.optionsWereSet = true;\n this.synchronizeOptions();\n }\n });\n }\n\n private stop(): void {\n this.optionsWereSet = false;\n this.nodeObserver?.disconnect();\n this.arrayObserver?.unsubscribe(this);\n this.nodeObserver\n = this.arrayObserver\n = void 0;\n this.observing = false;\n }\n\n // todo: observe all kind of collection\n // private observeArray(array: unknown[] | null): void {\n // this.arrayObserver?.unsubscribe(this);\n // this.arrayObserver = void 0;\n // if (array !== null) {\n // if (!this.obj.multiple) {\n // throw new Error('Only null or Array instances can be bound to a multi-select.');\n // }\n // (this.arrayObserver = this.observerLocator.getArrayObserver(array)).subscribe(this);\n // }\n // }\n\n public handleNodeChange(records: MutationRecord[]): void {\n if (records.find(x => x.type === 'childList'\n && (Array.from(x.addedNodes).find(y => (y as HTMLElement).tagName === 'MDC-LIST-ITEM')\n || Array.from(x.removedNodes).find(y => (y as HTMLElement).tagName === 'MDC-LIST-ITEM'))\n )) {\n this.optionsWereSet = true;\n this.synchronizeOptions();\n const shouldNotify = this.synchronizeValue();\n if (shouldNotify) {\n this.notify();\n }\n }\n }\n\n public subscribe(subscriber: ISubscriber): void {\n if (this.subs.add(subscriber) && this.subs.count === 1) {\n for (const e of this.config.events) {\n this.obj.addEventListener(e, this);\n }\n this.listened = true;\n this.start();\n }\n }\n\n public unsubscribe(subscriber: ISubscriber): void {\n if (this.subs.remove(subscriber) && this.subs.count === 0) {\n for (const e of this.config.events) {\n this.obj.removeEventListener(e, this);\n }\n this.listened = false;\n this.stop();\n }\n }\n\n useConfig(config: INodeObserverConfigBase): void {\n this.config = config;\n if (this.listened) {\n for (const e of this.config.events) {\n this.obj.removeEventListener(e, this);\n }\n for (const e of this.config.events) {\n this.obj.addEventListener(e, this);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mdc-select-value-observer.js","sourceRoot":"","sources":["../../src/select/mdc-select-value-observer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n subscriberCollection,\n AccessorType,\n} from '@aurelia/runtime';\n\nimport type {\n ICollectionObserver,\n IndexMap,\n IObserver,\n IObserverLocator,\n ISubscriber,\n ISubscriberCollection,\n} from '@aurelia/runtime';\n\nimport { INode, CustomElement } from '@aurelia/runtime-html';\nimport { IMdcSelectElement, MdcSelect } from './mdc-select';\n\n// const hasOwn = Object.prototype.hasOwnProperty;\nconst childObserverOptions = {\n childList: true,\n subtree: true,\n characterData: true\n};\n\n// function defaultMatcher(a: unknown, b: unknown): boolean {\n// return a === b;\n// }\n\nexport interface IOptionElement extends HTMLOptionElement {\n model?: unknown;\n}\n\nexport interface MdcSelectValueObserver extends\n ISubscriberCollection { }\n\nexport interface INodeObserverConfigBase {\n /**\n * Indicates the list of events can be used to observe a particular property\n */\n readonly events: string[];\n /**\n * Indicates whether this property is readonly, so observer wont attempt to assign value\n * example: input.files\n */\n readonly readonly?: boolean;\n /**\n * A default value to assign to the corresponding property if the incoming value is null/undefined\n */\n readonly default?: unknown;\n}\n\n\nexport interface INodeObserver extends IObserver {\n /**\n * Instruct this node observer event observation behavior\n */\n useConfig(config: INodeObserverConfigBase): void;\n}\n\n@subscriberCollection()\nexport class MdcSelectValueObserver implements INodeObserver {\n public currentValue: unknown = void 0;\n public oldValue: unknown = void 0;\n\n public readonly obj: IMdcSelectElement;\n public config: INodeObserverConfigBase;\n\n public hasChanges: boolean = false;\n // ObserverType.Layout is not always true\n // but for simplicity, always treat as such\n public type: AccessorType = (AccessorType.Node | AccessorType.Observer | AccessorType.Layout) as AccessorType;\n\n public arrayObserver?: ICollectionObserver<'array'> = void 0;\n public nodeObserver?: MutationObserver = void 0;\n\n private observing: boolean = false;\n private listened: boolean = false;\n\n public constructor(\n obj: INode,\n // deepscan-disable-next-line\n _key: PropertyKey,\n config: INodeObserverConfigBase,\n _: IObserverLocator\n ) {\n this.obj = obj as unknown as IMdcSelectElement;\n this.config = config;\n }\n\n optionsWereSet: boolean;\n\n setElementValue(skipNotify: boolean) {\n // do not pass the value to the element if options has never been set\n // the value will be passed on when options do arrive\n if (this.optionsWereSet) {\n CustomElement.for<MdcSelect>(this.obj).viewModel.setValue(this.currentValue, skipNotify);\n }\n }\n\n public getValue(): unknown {\n // is it safe to assume the observer has the latest value?\n // todo: ability to turn on/off cache based on type\n return this.observing\n ? this.currentValue\n // : this.obj.multiple\n // ? Array.from(this.obj.options).map(o => o.value)\n : this.obj.value;\n }\n\n public setValue(newValue: unknown): void {\n this.oldValue = this.currentValue;\n this.currentValue = newValue;\n this.hasChanges = newValue !== this.oldValue;\n // this.observeArray(newValue instanceof Array ? newValue : null);\n if (this.optionsWereSet) {\n this.flushChanges();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public flushChanges(): void {\n if (this.hasChanges) {\n this.hasChanges = false;\n this.synchronizeOptions();\n }\n }\n\n public handleCollectionChange(): void {\n // always sync \"selected\" property of <options/>\n // immediately whenever the array notifies its mutation\n this.synchronizeOptions();\n }\n\n public notify(): void {\n const oldValue = this.oldValue;\n const newValue = this.currentValue;\n if (newValue === oldValue) {\n return;\n }\n this.subs.notify(newValue, oldValue);\n }\n\n public handleEvent(): void {\n const shouldNotify = this.synchronizeValue();\n if (shouldNotify) {\n this.subs.notify(this.currentValue, this.oldValue);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public synchronizeOptions(_indexMap?: IndexMap): void {\n this.setElementValue(true);\n // const { currentValue, obj } = this;\n // // const isArray = Array.isArray(currentValue);\n // // const matcher = obj.matcher !== void 0 ? obj.matcher : defaultMatcher;\n // // const matcher = defaultMatcher;\n // const options = CustomElement.for<MdcSelect>(obj).viewModel.items;\n // let i = options.length;\n\n // while (i-- > 0) {\n // // const option = options[i];\n // // const optionValue = hasOwn.call(option, 'model') ? option.model : option.value;\n // // const optionValue = option.value;\n // // if (isArray) {\n // // option.selected = (currentValue as unknown[]).findIndex(item => !!matcher(optionValue, item)) !== -1;\n // // continue;\n // // }\n // if (!this.optionsWereSet) {\n // this.optionsWereSet = true;\n // this.setElementValue(true);\n // }\n // // option.selected = !!matcher(optionValue, currentValue);\n // }\n }\n\n public synchronizeValue(): boolean {\n // Spec for synchronizing value from `<select/>` to `SelectObserver`\n // When synchronizing value to observed <select/> element, do the following steps:\n // A. If `<select/>` is multiple\n // 1. Check if current value, called `currentValue` is an array\n // a. If not an array, return true to signal value has changed\n // b. If is an array:\n // i. gather all current selected <option/>, in to array called `values`\n // ii. loop through the `currentValue` array and remove items that are nolonger selected based on matcher\n // iii. loop through the `values` array and add items that are selected based on matcher\n // iv. Return false to signal value hasn't changed\n // B. If the select is single\n // 1. Let `value` equal the first selected option, if no option selected, then `value` is `null`\n // 2. assign `this.currentValue` to `this.oldValue`\n // 3. assign `value` to `this.currentValue`\n // 4. return `true` to signal value has changed\n const obj = this.obj;\n const options = CustomElement.for<MdcSelect>(obj).viewModel.items ?? [];\n const len = options.length;\n // const currentValue = this.currentValue;\n let i = 0;\n\n /*\n if (obj.multiple) {\n // A.\n if (!(currentValue instanceof Array)) {\n // A.1.a\n return true;\n }\n // A.1.b\n // multi select\n let option: IOptionElement;\n const matcher = obj.matcher ?? defaultMatcher;\n // A.1.b.i\n const values: unknown[] = [];\n while (i < len) {\n option = options[i];\n if (option.selected) {\n values.push(hasOwn.call(option, 'model')\n ? option.model\n : option.value\n );\n }\n ++i;\n }\n // A.1.b.ii\n i = 0;\n while (i < currentValue.length) {\n const a = currentValue[i];\n // Todo: remove arrow fn\n if (values.findIndex(b => !!matcher(a, b)) === -1) {\n currentValue.splice(i, 1);\n } else {\n ++i;\n }\n }\n // A.1.b.iii\n i = 0;\n while (i < values.length) {\n const a = values[i];\n // Todo: remove arrow fn\n if (currentValue.findIndex(b => !!matcher(a, b)) === -1) {\n currentValue.push(a);\n }\n ++i;\n }\n // A.1.b.iv\n return false;\n }\n */\n // B. single select\n // B.1\n let value: unknown = undefined;\n while (i < len) {\n const option = options[i];\n if (option.value === this.obj.value) {\n // value = hasOwn.call(option, 'model') ? option.model : option.value;\n value = option.value;\n break;\n }\n ++i;\n }\n // B.2\n this.oldValue = this.currentValue;\n // B.3\n this.currentValue = value;\n // B.4\n return true;\n }\n\n private start(): void {\n const vm = CustomElement.for<MdcSelect>(this.obj).viewModel;\n vm.initialised.then(() => {\n (this.nodeObserver = new this.obj.ownerDocument.defaultView!.MutationObserver(records => this.handleNodeChange(records)))\n .observe(vm.menu.root, childObserverOptions);\n // this.observeArray(this.currentValue instanceof Array ? this.currentValue : null);\n this.observing = true;\n if (vm.items?.length) {\n this.optionsWereSet = true;\n this.synchronizeOptions();\n }\n });\n }\n\n private stop(): void {\n this.optionsWereSet = false;\n this.nodeObserver?.disconnect();\n this.arrayObserver?.unsubscribe(this);\n this.nodeObserver\n = this.arrayObserver\n = void 0;\n this.observing = false;\n }\n\n // todo: observe all kind of collection\n // private observeArray(array: unknown[] | null): void {\n // this.arrayObserver?.unsubscribe(this);\n // this.arrayObserver = void 0;\n // if (array !== null) {\n // if (!this.obj.multiple) {\n // throw new Error('Only null or Array instances can be bound to a multi-select.');\n // }\n // (this.arrayObserver = this.observerLocator.getArrayObserver(array)).subscribe(this);\n // }\n // }\n\n public handleNodeChange(records: MutationRecord[]): void {\n if (records.find(x => x.type === 'childList'\n && (Array.from(x.addedNodes).find(y => (y as HTMLElement).tagName === 'MDC-LIST-ITEM')\n || Array.from(x.removedNodes).find(y => (y as HTMLElement).tagName === 'MDC-LIST-ITEM'))\n )) {\n this.optionsWereSet = true;\n this.synchronizeOptions();\n const shouldNotify = this.synchronizeValue();\n if (shouldNotify) {\n this.notify();\n }\n }\n }\n\n public subscribe(subscriber: ISubscriber): void {\n if (this.subs.add(subscriber) && this.subs.count === 1) {\n for (const e of this.config.events) {\n this.obj.addEventListener(e, this);\n }\n this.listened = true;\n this.start();\n }\n }\n\n public unsubscribe(subscriber: ISubscriber): void {\n if (this.subs.remove(subscriber) && this.subs.count === 0) {\n for (const e of this.config.events) {\n this.obj.removeEventListener(e, this);\n }\n this.listened = false;\n this.stop();\n }\n }\n\n useConfig(config: INodeObserverConfigBase): void {\n this.config = config;\n if (this.listened) {\n for (const e of this.config.events) {\n this.obj.removeEventListener(e, this);\n }\n for (const e of this.config.events) {\n this.obj.addEventListener(e, this);\n }\n }\n }\n}\n"]}
|
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const mdc_select_html_raw_1 = tslib_1.__importDefault(require("./mdc-select.html?raw"));
|
|
13
|
-
const mdc_configuration_1 = require("../mdc-configuration");
|
|
14
|
-
select_1.strings.CHANGE_EVENT = select_1.strings.CHANGE_EVENT.toLowerCase();
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { MdcComponent, booleanAttr } from '../base';
|
|
3
|
+
import { cssClasses, strings } from '@material/select';
|
|
4
|
+
import { inject, customElement, IPlatform, bindable } from 'aurelia';
|
|
5
|
+
import { mdcIconStrings } from './mdc-select-icon';
|
|
6
|
+
import { mdcHelperTextCssClasses } from './mdc-select-helper-text/mdc-select-helper-text';
|
|
7
|
+
import { MDCSelectFoundationAurelia } from './mdc-select-foundation-aurelia';
|
|
8
|
+
import { processContent, BindingMode, CustomElement, CustomAttribute } from '@aurelia/runtime-html';
|
|
9
|
+
import template from './mdc-select.html?raw';
|
|
10
|
+
import { MdcConfiguration } from '../mdc-configuration';
|
|
11
|
+
strings.CHANGE_EVENT = strings.CHANGE_EVENT.toLowerCase();
|
|
15
12
|
let selectId = 0;
|
|
16
13
|
/**
|
|
17
14
|
* @selector mdc-select
|
|
18
15
|
* @emits mdcselect:change | Emitted if user changed the value
|
|
19
16
|
*/
|
|
20
17
|
let MdcSelect = (() => {
|
|
21
|
-
let _classDecorators = [
|
|
18
|
+
let _classDecorators = [inject(Element, IPlatform, MdcConfiguration), customElement({ name: 'mdc-select', template }), processContent(function processContent(node, platform) {
|
|
22
19
|
const el = node;
|
|
23
|
-
const leadingIcon = el.querySelector(`[${
|
|
20
|
+
const leadingIcon = el.querySelector(`[${mdcIconStrings.ATTRIBUTE}]`);
|
|
24
21
|
leadingIcon?.remove();
|
|
25
22
|
const template = platform.document.createElement('template');
|
|
26
23
|
template.setAttribute('au-slot', '');
|
|
@@ -40,7 +37,7 @@ let MdcSelect = (() => {
|
|
|
40
37
|
let _classDescriptor;
|
|
41
38
|
let _classExtraInitializers = [];
|
|
42
39
|
let _classThis;
|
|
43
|
-
let _classSuper =
|
|
40
|
+
let _classSuper = MdcComponent;
|
|
44
41
|
let _label_decorators;
|
|
45
42
|
let _label_initializers = [];
|
|
46
43
|
let _label_extraInitializers = [];
|
|
@@ -69,26 +66,26 @@ let MdcSelect = (() => {
|
|
|
69
66
|
static { _classThis = this; }
|
|
70
67
|
static {
|
|
71
68
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
72
|
-
_label_decorators = [
|
|
73
|
-
_outlined_decorators = [
|
|
74
|
-
_required_decorators = [
|
|
75
|
-
_disabled_decorators = [
|
|
76
|
-
_hoistToBody_decorators = [
|
|
77
|
-
_fixed_decorators = [
|
|
78
|
-
_anchorMargin_decorators = [
|
|
79
|
-
_naturalWidth_decorators = [
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
_label_decorators = [bindable()];
|
|
70
|
+
_outlined_decorators = [bindable({ set: booleanAttr })];
|
|
71
|
+
_required_decorators = [bindable({ set: booleanAttr })];
|
|
72
|
+
_disabled_decorators = [bindable({ set: booleanAttr })];
|
|
73
|
+
_hoistToBody_decorators = [bindable({ set: booleanAttr, mode: BindingMode.oneTime })];
|
|
74
|
+
_fixed_decorators = [bindable({ set: booleanAttr, mode: BindingMode.oneTime })];
|
|
75
|
+
_anchorMargin_decorators = [bindable()];
|
|
76
|
+
_naturalWidth_decorators = [bindable({ set: booleanAttr })];
|
|
77
|
+
__esDecorate(null, null, _label_decorators, { kind: "field", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
|
|
78
|
+
__esDecorate(null, null, _outlined_decorators, { kind: "field", name: "outlined", static: false, private: false, access: { has: obj => "outlined" in obj, get: obj => obj.outlined, set: (obj, value) => { obj.outlined = value; } }, metadata: _metadata }, _outlined_initializers, _outlined_extraInitializers);
|
|
79
|
+
__esDecorate(null, null, _required_decorators, { kind: "field", name: "required", static: false, private: false, access: { has: obj => "required" in obj, get: obj => obj.required, set: (obj, value) => { obj.required = value; } }, metadata: _metadata }, _required_initializers, _required_extraInitializers);
|
|
80
|
+
__esDecorate(null, null, _disabled_decorators, { kind: "field", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
|
|
81
|
+
__esDecorate(null, null, _hoistToBody_decorators, { kind: "field", name: "hoistToBody", static: false, private: false, access: { has: obj => "hoistToBody" in obj, get: obj => obj.hoistToBody, set: (obj, value) => { obj.hoistToBody = value; } }, metadata: _metadata }, _hoistToBody_initializers, _hoistToBody_extraInitializers);
|
|
82
|
+
__esDecorate(null, null, _fixed_decorators, { kind: "field", name: "fixed", static: false, private: false, access: { has: obj => "fixed" in obj, get: obj => obj.fixed, set: (obj, value) => { obj.fixed = value; } }, metadata: _metadata }, _fixed_initializers, _fixed_extraInitializers);
|
|
83
|
+
__esDecorate(null, null, _anchorMargin_decorators, { kind: "field", name: "anchorMargin", static: false, private: false, access: { has: obj => "anchorMargin" in obj, get: obj => obj.anchorMargin, set: (obj, value) => { obj.anchorMargin = value; } }, metadata: _metadata }, _anchorMargin_initializers, _anchorMargin_extraInitializers);
|
|
84
|
+
__esDecorate(null, null, _naturalWidth_decorators, { kind: "field", name: "naturalWidth", static: false, private: false, access: { has: obj => "naturalWidth" in obj, get: obj => obj.naturalWidth, set: (obj, value) => { obj.naturalWidth = value; } }, metadata: _metadata }, _naturalWidth_initializers, _naturalWidth_extraInitializers);
|
|
85
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
89
86
|
MdcSelect = _classThis = _classDescriptor.value;
|
|
90
87
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
91
|
-
|
|
88
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
92
89
|
}
|
|
93
90
|
platform;
|
|
94
91
|
configuration;
|
|
@@ -115,17 +112,17 @@ let MdcSelect = (() => {
|
|
|
115
112
|
outline;
|
|
116
113
|
errors = new Map();
|
|
117
114
|
/** Sets the select label */
|
|
118
|
-
label =
|
|
115
|
+
label = __runInitializers(this, _label_initializers, void 0);
|
|
119
116
|
labelChanged() {
|
|
120
117
|
this.platform.domQueue.queueTask(() => this.foundation?.layout());
|
|
121
118
|
}
|
|
122
119
|
/** Styles the select as an outlined select */
|
|
123
|
-
outlined = (
|
|
120
|
+
outlined = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _outlined_initializers, void 0));
|
|
124
121
|
outlinedChanged() {
|
|
125
122
|
this.platform.domQueue.queueTask(() => this.foundation?.layout());
|
|
126
123
|
}
|
|
127
124
|
/** Makes the value required */
|
|
128
|
-
required = (
|
|
125
|
+
required = (__runInitializers(this, _outlined_extraInitializers), __runInitializers(this, _required_initializers, void 0));
|
|
129
126
|
requiredChanged() {
|
|
130
127
|
if (this.required) {
|
|
131
128
|
this.selectAnchor?.setAttribute('aria-required', 'true');
|
|
@@ -137,21 +134,21 @@ let MdcSelect = (() => {
|
|
|
137
134
|
this.platform.domWriteQueue.queueTask(() => this.foundation?.layout());
|
|
138
135
|
}
|
|
139
136
|
/** Enables/disables the select */
|
|
140
|
-
disabled = (
|
|
137
|
+
disabled = (__runInitializers(this, _required_extraInitializers), __runInitializers(this, _disabled_initializers, void 0));
|
|
141
138
|
disabledChanged() {
|
|
142
139
|
if (this.disabled !== undefined) {
|
|
143
140
|
this.foundation?.setDisabled(this.disabled);
|
|
144
141
|
}
|
|
145
142
|
}
|
|
146
143
|
/** Hoists the select DOM to document.body */
|
|
147
|
-
hoistToBody = (
|
|
144
|
+
hoistToBody = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _hoistToBody_initializers, void 0));
|
|
148
145
|
/** Sets the select DOM position to fixed */
|
|
149
|
-
fixed = (
|
|
146
|
+
fixed = (__runInitializers(this, _hoistToBody_extraInitializers), __runInitializers(this, _fixed_initializers, void 0));
|
|
150
147
|
/** Sets the margin between the select input and the dropdown */
|
|
151
|
-
anchorMargin = (
|
|
148
|
+
anchorMargin = (__runInitializers(this, _fixed_extraInitializers), __runInitializers(this, _anchorMargin_initializers, void 0));
|
|
152
149
|
/** Sets the select dropdown width to match content */
|
|
153
|
-
naturalWidth = (
|
|
154
|
-
_value =
|
|
150
|
+
naturalWidth = (__runInitializers(this, _anchorMargin_extraInitializers), __runInitializers(this, _naturalWidth_initializers, void 0));
|
|
151
|
+
_value = __runInitializers(this, _naturalWidth_extraInitializers);
|
|
155
152
|
get value() {
|
|
156
153
|
if (this.foundation) {
|
|
157
154
|
return this.foundation.getValue();
|
|
@@ -197,15 +194,15 @@ let MdcSelect = (() => {
|
|
|
197
194
|
}
|
|
198
195
|
async attaching() {
|
|
199
196
|
const nextSibling = this.root.nextElementSibling;
|
|
200
|
-
if (nextSibling?.tagName ===
|
|
201
|
-
this.helperText =
|
|
197
|
+
if (nextSibling?.tagName === mdcHelperTextCssClasses.ROOT.toUpperCase()) {
|
|
198
|
+
this.helperText = CustomElement.for(nextSibling).viewModel;
|
|
202
199
|
await this.helperText.initialised;
|
|
203
200
|
}
|
|
204
201
|
}
|
|
205
202
|
beforeFoundationCreated() {
|
|
206
|
-
const leadingIconEl = this.root.querySelector(`${
|
|
203
|
+
const leadingIconEl = this.root.querySelector(`${strings.LEADING_ICON_SELECTOR}`);
|
|
207
204
|
if (leadingIconEl) {
|
|
208
|
-
this.leadingIcon =
|
|
205
|
+
this.leadingIcon = CustomAttribute.for(leadingIconEl, mdcIconStrings.ATTRIBUTE)?.viewModel;
|
|
209
206
|
}
|
|
210
207
|
this.menu.list_.singleSelection = true;
|
|
211
208
|
}
|
|
@@ -229,7 +226,7 @@ let MdcSelect = (() => {
|
|
|
229
226
|
...this.getOutlineAdapterMethods(),
|
|
230
227
|
...this.getLabelAdapterMethods(),
|
|
231
228
|
};
|
|
232
|
-
return new
|
|
229
|
+
return new MDCSelectFoundationAurelia(adapter, this.getFoundationMap());
|
|
233
230
|
}
|
|
234
231
|
getSelectAdapterMethods() {
|
|
235
232
|
return {
|
|
@@ -257,7 +254,7 @@ let MdcSelect = (() => {
|
|
|
257
254
|
: '';
|
|
258
255
|
},
|
|
259
256
|
closeMenu: () => { this.menu.open = false; },
|
|
260
|
-
getAnchorElement: () => this.root.querySelector(
|
|
257
|
+
getAnchorElement: () => this.root.querySelector(strings.SELECT_ANCHOR_SELECTOR),
|
|
261
258
|
setMenuAnchorElement: (anchorEl) => {
|
|
262
259
|
this.menu.anchor = anchorEl;
|
|
263
260
|
},
|
|
@@ -281,7 +278,7 @@ let MdcSelect = (() => {
|
|
|
281
278
|
this.menu.items[index].focus();
|
|
282
279
|
},
|
|
283
280
|
getMenuItemCount: () => this.menu.items.length,
|
|
284
|
-
getMenuItemValues: () => this.menu.items.map(x =>
|
|
281
|
+
getMenuItemValues: () => this.menu.items.map(x => CustomElement.for(x).viewModel.value),
|
|
285
282
|
getMenuItemTextAtIndex: (index) => this.menu.getPrimaryTextAtIndex(index),
|
|
286
283
|
isTypeaheadInProgress: () => this.menu.typeaheadInProgress,
|
|
287
284
|
typeaheadMatchItem: (nextChar, startingIndex) => this.menu.typeaheadMatchItem(nextChar, startingIndex),
|
|
@@ -301,7 +298,7 @@ let MdcSelect = (() => {
|
|
|
301
298
|
deactivateBottomLine: () => this.lineRipple?.deactivate(),
|
|
302
299
|
notifyChange: (value) => {
|
|
303
300
|
const index = this.selectedIndex;
|
|
304
|
-
this.emit(
|
|
301
|
+
this.emit(strings.CHANGE_EVENT, { value, index }, true /* shouldBubble */);
|
|
305
302
|
this.emit('change', { value, index }, true /* shouldBubble */);
|
|
306
303
|
},
|
|
307
304
|
};
|
|
@@ -332,7 +329,7 @@ let MdcSelect = (() => {
|
|
|
332
329
|
this.foundation?.handleBlur();
|
|
333
330
|
// if class is set it means the menu is open,
|
|
334
331
|
// do not emit blur since "conceptually" the element is still active
|
|
335
|
-
if (!this.root.classList.contains(
|
|
332
|
+
if (!this.root.classList.contains(cssClasses.FOCUSED)) {
|
|
336
333
|
this.emit('blur', {}, true);
|
|
337
334
|
}
|
|
338
335
|
}
|
|
@@ -352,7 +349,7 @@ let MdcSelect = (() => {
|
|
|
352
349
|
}
|
|
353
350
|
handleMenuClosed() {
|
|
354
351
|
this.foundation?.handleMenuClosed();
|
|
355
|
-
if (!this.root.classList.contains(
|
|
352
|
+
if (!this.root.classList.contains(cssClasses.FOCUSED)) {
|
|
356
353
|
this.emit('blur', {}, true);
|
|
357
354
|
}
|
|
358
355
|
}
|
|
@@ -391,71 +388,71 @@ let MdcSelect = (() => {
|
|
|
391
388
|
};
|
|
392
389
|
return MdcSelect = _classThis;
|
|
393
390
|
})();
|
|
394
|
-
|
|
391
|
+
export { MdcSelect };
|
|
395
392
|
function defineMdcSelectElementApis(element) {
|
|
396
393
|
Object.defineProperties(element, {
|
|
397
394
|
value: {
|
|
398
395
|
get() {
|
|
399
|
-
return
|
|
396
|
+
return CustomElement.for(this).viewModel.value;
|
|
400
397
|
},
|
|
401
398
|
set(value) {
|
|
402
399
|
// aurelia binding converts "undefined" and "null" into empty string
|
|
403
400
|
// this does not translate well into "empty" menu items when several selects are bound to the same field
|
|
404
|
-
|
|
401
|
+
CustomElement.for(this).viewModel.value = value === '' ? undefined : value;
|
|
405
402
|
},
|
|
406
403
|
configurable: true
|
|
407
404
|
},
|
|
408
405
|
options: {
|
|
409
406
|
get() {
|
|
410
|
-
return
|
|
407
|
+
return CustomElement.for(this).viewModel.root.querySelectorAll('.mdc-list-item');
|
|
411
408
|
},
|
|
412
409
|
configurable: true
|
|
413
410
|
},
|
|
414
411
|
selectedIndex: {
|
|
415
412
|
get() {
|
|
416
|
-
return
|
|
413
|
+
return CustomElement.for(this).viewModel.selectedIndex;
|
|
417
414
|
},
|
|
418
415
|
set(value) {
|
|
419
|
-
|
|
416
|
+
CustomElement.for(this).viewModel.selectedIndex = value;
|
|
420
417
|
},
|
|
421
418
|
configurable: true
|
|
422
419
|
},
|
|
423
420
|
valid: {
|
|
424
421
|
get() {
|
|
425
|
-
return
|
|
422
|
+
return CustomElement.for(this).viewModel.valid;
|
|
426
423
|
},
|
|
427
424
|
set(value) {
|
|
428
|
-
|
|
425
|
+
CustomElement.for(this).viewModel.valid = value;
|
|
429
426
|
},
|
|
430
427
|
configurable: true
|
|
431
428
|
},
|
|
432
429
|
addError: {
|
|
433
430
|
value(error) {
|
|
434
|
-
|
|
431
|
+
CustomElement.for(this).viewModel.addError(error);
|
|
435
432
|
},
|
|
436
433
|
configurable: true
|
|
437
434
|
},
|
|
438
435
|
removeError: {
|
|
439
436
|
value(error) {
|
|
440
|
-
|
|
437
|
+
CustomElement.for(this).viewModel.removeError(error);
|
|
441
438
|
},
|
|
442
439
|
configurable: true
|
|
443
440
|
},
|
|
444
441
|
renderErrors: {
|
|
445
442
|
value() {
|
|
446
|
-
|
|
443
|
+
CustomElement.for(this).viewModel.renderErrors();
|
|
447
444
|
},
|
|
448
445
|
configurable: true
|
|
449
446
|
},
|
|
450
447
|
focus: {
|
|
451
448
|
value() {
|
|
452
|
-
|
|
449
|
+
CustomElement.for(this).viewModel.focus();
|
|
453
450
|
},
|
|
454
451
|
configurable: true
|
|
455
452
|
},
|
|
456
453
|
blur: {
|
|
457
454
|
value() {
|
|
458
|
-
|
|
455
|
+
CustomElement.for(this).viewModel.blur();
|
|
459
456
|
},
|
|
460
457
|
configurable: true
|
|
461
458
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdc-select.js","sourceRoot":"","sources":["../../src/select/mdc-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { MdcComponent, IValidatedElement, IError, booleanAttr } from '../base';\nimport { cssClasses, MDCSelectFoundationMap, MDCSelectEventDetail, strings } from '@material/select';\nimport { inject, customElement, INode, IPlatform, bindable } from 'aurelia';\nimport { MdcSelectIcon, IMdcSelectIconElement, mdcIconStrings } from './mdc-select-icon';\nimport { MdcSelectHelperText, mdcHelperTextCssClasses } from './mdc-select-helper-text/mdc-select-helper-text';\nimport { MDCNotchedOutline } from '@material/notched-outline';\nimport { MDCMenuItemEvent, Corner } from '@material/menu';\nimport { MDCSelectFoundationAurelia } from './mdc-select-foundation-aurelia';\nimport { MDCSelectAdapterAurelia } from './mdc-select-adapter-aurelia';\nimport { MDCMenuDistance } from '@material/menu-surface';\nimport { processContent, BindingMode, CustomElement, CustomAttribute } from '@aurelia/runtime-html';\nimport template from './mdc-select.html?raw';\nimport { MdcFloatingLabel } from '../floating-label/mdc-floating-label';\nimport { MdcLineRipple } from '../line-ripple/mdc-line-ripple';\nimport { MdcListItem } from '../list/mdc-list-item/mdc-list-item';\nimport { MdcMenu } from '../menu/mdc-menu';\nimport { MdcConfiguration } from '../mdc-configuration';\n\nstrings.CHANGE_EVENT = strings.CHANGE_EVENT.toLowerCase();\n\nlet selectId = 0;\n\n/**\n * @selector mdc-select\n * @emits mdcselect:change | Emitted if user changed the value\n */\n@inject(Element, IPlatform, MdcConfiguration)\n@customElement({ name: 'mdc-select', template })\n@processContent(function processContent(node: INode, platform: IPlatform) {\n const el = node as Element;\n\n const leadingIcon = el.querySelector(`[${mdcIconStrings.ATTRIBUTE}]`);\n leadingIcon?.remove();\n\n const template = platform.document.createElement('template');\n template.setAttribute('au-slot', '');\n template.innerHTML = el.innerHTML;\n el.innerHTML = '';\n el.appendChild(template);\n\n // move icon to the slot - this allows omitting slot specification\n if (leadingIcon) {\n const div = platform.document.createElement('div');\n div.appendChild(leadingIcon);\n const iconTemplate = platform.document.createElement('template');\n iconTemplate.setAttribute('au-slot', 'leading-icon');\n iconTemplate.innerHTML = div.innerHTML;\n el.appendChild(iconTemplate);\n }\n}\n)\nexport class MdcSelect extends MdcComponent<MDCSelectFoundationAurelia> {\n constructor(root: HTMLElement, private platform: IPlatform, private configuration: MdcConfiguration) {\n super(root);\n this.outlined = this.configuration.select.outlined;\n defineMdcSelectElementApis(this.root);\n this.root.id = this.id;\n }\n\n id: string = `mdc-select-${++selectId}`;\n public menu: MdcMenu;\n private selectAnchor: HTMLElement;\n private selectedText: HTMLElement;\n\n private menuElement?: Element;\n\n get items(): MdcListItem[] | undefined {\n return this.menu.list_?.items;\n }\n\n private leadingIcon?: MdcSelectIcon;\n\n private helperText?: MdcSelectHelperText;\n private lineRipple?: MdcLineRipple;\n private mdcLabel: MdcFloatingLabel;\n private outline?: MDCNotchedOutline;\n errors = new Map<IError, boolean>();\n\n /** Sets the select label */\n @bindable()\n label: string;\n labelChanged() {\n this.platform.domQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Styles the select as an outlined select */\n @bindable({ set: booleanAttr })\n outlined?: boolean;\n outlinedChanged() {\n this.platform.domQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Makes the value required */\n @bindable({ set: booleanAttr })\n required: boolean;\n requiredChanged() {\n if (this.required) {\n this.selectAnchor?.setAttribute('aria-required', 'true');\n } else {\n this.selectAnchor?.removeAttribute('aria-required');\n }\n this.foundation?.setRequired(this.required ?? false);\n this.platform.domWriteQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Enables/disables the select */\n @bindable({ set: booleanAttr })\n disabled?: boolean;\n disabledChanged() {\n if (this.disabled !== undefined) {\n this.foundation?.setDisabled(this.disabled);\n }\n }\n\n /** Hoists the select DOM to document.body */\n @bindable({ set: booleanAttr, mode: BindingMode.oneTime })\n hoistToBody: boolean;\n\n /** Sets the select DOM position to fixed */\n @bindable({ set: booleanAttr, mode: BindingMode.oneTime })\n fixed: boolean;\n\n /** Sets the margin between the select input and the dropdown */\n @bindable()\n anchorMargin: Partial<MDCMenuDistance>;\n\n /** Sets the select dropdown width to match content */\n @bindable({ set: booleanAttr })\n naturalWidth: boolean;\n\n private _value: unknown;\n get value(): unknown {\n if (this.foundation) {\n return this.foundation.getValue();\n } else {\n return this._value;\n }\n }\n\n set value(value: unknown) {\n this.setValue(value);\n }\n\n setValue(value: unknown, skipNotify: boolean = false) {\n this._value = value;\n if (this.foundation) {\n this.foundation.setValue(value, skipNotify);\n this.foundation.layout();\n }\n }\n\n get valid(): boolean {\n return this.foundation?.isValid() ?? true;\n }\n\n set valid(value: boolean) {\n this.foundation?.setValid(value);\n }\n\n get selectedIndex(): number {\n return this.foundation!.getSelectedIndex();\n }\n\n set selectedIndex(selectedIndex: number) {\n this.foundation?.setSelectedIndex(selectedIndex, /** closeMenu */ true);\n }\n\n addError(error: IError) {\n this.errors.set(error, true);\n this.valid = false;\n }\n\n removeError(error: IError) {\n this.errors.delete(error);\n this.valid = this.errors.size === 0;\n }\n\n renderErrors() {\n if (this.helperText) {\n this.helperText.errors = Array.from(this.errors.keys()).filter(x => x.message !== null).map(x => x.message!);\n }\n }\n\n async attaching() {\n const nextSibling = this.root.nextElementSibling;\n if (nextSibling?.tagName === mdcHelperTextCssClasses.ROOT.toUpperCase()) {\n this.helperText = CustomElement.for<MdcSelectHelperText>(nextSibling).viewModel;\n await this.helperText.initialised;\n }\n }\n\n beforeFoundationCreated() {\n const leadingIconEl = this.root.querySelector<IMdcSelectIconElement>(`${strings.LEADING_ICON_SELECTOR}`);\n if (leadingIconEl) {\n this.leadingIcon = CustomAttribute.for<MdcSelectIcon>(leadingIconEl, mdcIconStrings.ATTRIBUTE)?.viewModel;\n }\n this.menu.list_!.singleSelection = true;\n }\n\n initialSyncWithDOM() {\n // set initial value without emitting change events\n this.foundation?.setValue(this._value, true);\n this.foundation?.layout();\n this.errors = new Map<IError, boolean>();\n this.valid = true;\n\n this.labelChanged();\n this.disabledChanged();\n this.outlinedChanged();\n this.requiredChanged();\n }\n\n getDefaultFoundation() {\n // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n const adapter: MDCSelectAdapterAurelia = {\n ...this.getSelectAdapterMethods(),\n ...this.getCommonAdapterMethods(),\n ...this.getOutlineAdapterMethods(),\n ...this.getLabelAdapterMethods(),\n };\n return new MDCSelectFoundationAurelia(adapter, this.getFoundationMap());\n }\n\n private getSelectAdapterMethods() {\n return {\n setSelectedText: (text: string) => {\n this.selectedText.textContent = text;\n },\n isSelectAnchorFocused: () => document.activeElement === this.selectAnchor,\n getSelectAnchorAttr: (attr: string) => this.selectAnchor.getAttribute(attr),\n setSelectAnchorAttr: (attr: string, value: string) => {\n this.selectAnchor.setAttribute(attr, value);\n },\n removeSelectAnchorAttr: (attr: string) => {\n this.selectAnchor.removeAttribute(attr);\n },\n addMenuClass: (className: string) => {\n this.menuElement?.classList.add(className);\n },\n removeMenuClass: (className: string) => {\n this.menuElement?.classList.remove(className);\n },\n openMenu: () => {\n this.menu.open = true;\n this.menu.root.style.minWidth = this.menu.root.style.maxWidth = (this.hoistToBody || this.fixed) && !this.naturalWidth\n ? `${this.root.clientWidth}px`\n : '';\n },\n closeMenu: () => { this.menu.open = false; },\n getAnchorElement: () => this.root.querySelector(strings.SELECT_ANCHOR_SELECTOR)!,\n setMenuAnchorElement: (anchorEl: HTMLElement) => {\n this.menu.anchor = anchorEl;\n },\n setMenuAnchorCorner: (anchorCorner: Corner) => {\n this.menu.setAnchorCorner(anchorCorner);\n },\n setMenuWrapFocus: (wrapFocus: boolean) => {\n this.menu.wrapFocus = wrapFocus;\n },\n getSelectedIndex: () => {\n const index = this.menu.selectedIndex;\n return index instanceof Array ? index[0] : index;\n },\n setSelectedIndex: (index: number) => {\n this.menu.selectedIndex = index;\n },\n removeAttributeAtIndex: (index: number, attributeName: string) => {\n this.menu.items[index].removeAttribute(attributeName);\n },\n focusMenuItemAtIndex: (index: number) => {\n (this.menu.items[index] as HTMLElement).focus();\n },\n getMenuItemCount: () => this.menu.items.length,\n getMenuItemValues: () => this.menu.items.map(x => CustomElement.for<MdcListItem>(x).viewModel.value),\n getMenuItemTextAtIndex: (index: number) => this.menu.getPrimaryTextAtIndex(index),\n isTypeaheadInProgress: () => this.menu.typeaheadInProgress,\n typeaheadMatchItem: (nextChar: string, startingIndex: number) => this.menu.typeaheadMatchItem(nextChar, startingIndex),\n };\n }\n\n private getCommonAdapterMethods() {\n return {\n addClass: (className: string) => {\n this.root.classList.add(className);\n },\n removeClass: (className: string) => {\n this.root.classList.remove(className);\n },\n hasClass: (className: string) => this.root.classList.contains(className),\n setRippleCenter: (normalizedX: number) => this.lineRipple?.setRippleCenter(normalizedX),\n activateBottomLine: () => this.lineRipple?.activate(),\n deactivateBottomLine: () => this.lineRipple?.deactivate(),\n notifyChange: (value: string) => {\n const index = this.selectedIndex;\n this.emit<MDCSelectEventDetail>(strings.CHANGE_EVENT, { value, index }, true /* shouldBubble */);\n this.emit<MDCSelectEventDetail>('change', { value, index }, true /* shouldBubble */);\n },\n };\n }\n\n private getOutlineAdapterMethods() {\n return {\n hasOutline: () => Boolean(this.outline),\n notchOutline: (labelWidth: number) => this.outline?.notch(labelWidth),\n closeOutline: () => this.outline?.closeNotch(),\n };\n }\n\n private getLabelAdapterMethods() {\n return {\n hasLabel: () => !!this.mdcLabel,\n floatLabel: (shouldFloat: boolean) => this.mdcLabel?.float(shouldFloat),\n getLabelWidth: () => this.mdcLabel ? this.mdcLabel.getWidth() : 0,\n setLabelRequired: (isRequired: boolean) => this.mdcLabel?.setRequired(isRequired),\n };\n }\n\n handleChange() {\n this.foundation?.handleChange();\n this.emit('change', {}, true);\n }\n\n handleFocus() {\n this.foundation?.handleFocus();\n }\n\n handleBlur() {\n this.foundation?.handleBlur();\n // if class is set it means the menu is open,\n // do not emit blur since \"conceptually\" the element is still active\n if (!this.root.classList.contains(cssClasses.FOCUSED)) {\n this.emit('blur', {}, true);\n }\n }\n\n handleClick(evt: MouseEvent) {\n this.selectAnchor.focus();\n this.foundation?.handleClick(this.getNormalizedXCoordinate(evt));\n }\n\n handleKeydown(evt: KeyboardEvent) {\n this.foundation?.handleKeydown(evt);\n return true;\n }\n\n handleMenuItemAction(evt: MDCMenuItemEvent) {\n this.foundation?.handleMenuItemAction(evt.detail.index);\n }\n\n handleMenuOpened() {\n this.foundation?.handleMenuOpened();\n }\n\n handleMenuClosed() {\n this.foundation?.handleMenuClosed();\n if (!this.root.classList.contains(cssClasses.FOCUSED)) {\n this.emit('blur', {}, true);\n }\n }\n\n handleItemsChanged() {\n this.foundation?.layoutOptions();\n this.foundation?.layout();\n }\n\n focus() {\n this.selectAnchor.focus();\n }\n\n blur() {\n this.selectAnchor.blur();\n }\n\n /**\n * @hidden\n * Calculates where the line ripple should start based on the x coordinate within the component.\n */\n private getNormalizedXCoordinate(evt: MouseEvent | TouchEvent): number {\n const targetClientRect = (evt.target as Element).getBoundingClientRect();\n const xCoordinate =\n this.isTouchEvent(evt) ? evt.touches[0].clientX : evt.clientX;\n return xCoordinate - targetClientRect.left;\n }\n\n private isTouchEvent(evt: MouseEvent | TouchEvent): evt is TouchEvent {\n return Boolean((evt as TouchEvent).touches);\n }\n\n /**\n * @hidden\n * Returns a map of all subcomponents to subfoundations.\n */\n private getFoundationMap(): Partial<MDCSelectFoundationMap> {\n return {\n helperText: this.helperText?.foundation,\n leadingIcon: this.leadingIcon?.foundation\n };\n }\n}\n\n/** @hidden */\nexport interface IMdcSelectElement extends IValidatedElement {\n $au: {\n 'au:resource:custom-element': {\n viewModel: MdcSelect;\n };\n };\n value: unknown;\n}\n\nfunction defineMdcSelectElementApis(element: HTMLElement) {\n Object.defineProperties(element, {\n value: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.value;\n },\n set(this: IMdcSelectElement, value: unknown) {\n // aurelia binding converts \"undefined\" and \"null\" into empty string\n // this does not translate well into \"empty\" menu items when several selects are bound to the same field\n CustomElement.for<MdcSelect>(this).viewModel.value = value === '' ? undefined : value;\n },\n configurable: true\n },\n options: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.root.querySelectorAll('.mdc-list-item');\n },\n configurable: true\n },\n selectedIndex: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.selectedIndex;\n },\n set(this: IMdcSelectElement, value: number) {\n CustomElement.for<MdcSelect>(this).viewModel.selectedIndex = value;\n },\n configurable: true\n },\n valid: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.valid;\n },\n set(this: IMdcSelectElement, value: boolean) {\n CustomElement.for<MdcSelect>(this).viewModel.valid = value;\n },\n configurable: true\n },\n addError: {\n value(this: IMdcSelectElement, error: IError) {\n CustomElement.for<MdcSelect>(this).viewModel.addError(error);\n },\n configurable: true\n },\n removeError: {\n value(this: IMdcSelectElement, error: IError) {\n CustomElement.for<MdcSelect>(this).viewModel.removeError(error);\n },\n configurable: true\n },\n renderErrors: {\n value(this: IMdcSelectElement): void {\n CustomElement.for<MdcSelect>(this).viewModel.renderErrors();\n },\n configurable: true\n },\n focus: {\n value(this: IMdcSelectElement) {\n CustomElement.for<MdcSelect>(this).viewModel.focus();\n },\n configurable: true\n },\n blur: {\n value(this: IMdcSelectElement) {\n CustomElement.for<MdcSelect>(this).viewModel.blur();\n },\n configurable: true\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mdc-select.js","sourceRoot":"","sources":["../../src/select/mdc-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { MdcComponent, IValidatedElement, IError, booleanAttr } from '../base';\nimport { cssClasses, MDCSelectFoundationMap, MDCSelectEventDetail, strings } from '@material/select';\nimport { inject, customElement, INode, IPlatform, bindable } from 'aurelia';\nimport { MdcSelectIcon, IMdcSelectIconElement, mdcIconStrings } from './mdc-select-icon';\nimport { MdcSelectHelperText, mdcHelperTextCssClasses } from './mdc-select-helper-text/mdc-select-helper-text';\nimport { MDCNotchedOutline } from '@material/notched-outline';\nimport { MDCMenuItemEvent, Corner } from '@material/menu';\nimport { MDCSelectFoundationAurelia } from './mdc-select-foundation-aurelia';\nimport { MDCSelectAdapterAurelia } from './mdc-select-adapter-aurelia';\nimport { MDCMenuDistance } from '@material/menu-surface';\nimport { processContent, BindingMode, CustomElement, CustomAttribute } from '@aurelia/runtime-html';\nimport template from './mdc-select.html?raw';\nimport { MdcFloatingLabel } from '../floating-label/mdc-floating-label';\nimport { MdcLineRipple } from '../line-ripple/mdc-line-ripple';\nimport { MdcListItem } from '../list/mdc-list-item/mdc-list-item';\nimport { MdcMenu } from '../menu/mdc-menu';\nimport { MdcConfiguration } from '../mdc-configuration';\n\nstrings.CHANGE_EVENT = strings.CHANGE_EVENT.toLowerCase();\n\nlet selectId = 0;\n\n/**\n * @selector mdc-select\n * @emits mdcselect:change | Emitted if user changed the value\n */\n@inject(Element, IPlatform, MdcConfiguration)\n@customElement({ name: 'mdc-select', template })\n@processContent(function processContent(node: INode, platform: IPlatform) {\n const el = node as Element;\n\n const leadingIcon = el.querySelector(`[${mdcIconStrings.ATTRIBUTE}]`);\n leadingIcon?.remove();\n\n const template = platform.document.createElement('template');\n template.setAttribute('au-slot', '');\n template.innerHTML = el.innerHTML;\n el.innerHTML = '';\n el.appendChild(template);\n\n // move icon to the slot - this allows omitting slot specification\n if (leadingIcon) {\n const div = platform.document.createElement('div');\n div.appendChild(leadingIcon);\n const iconTemplate = platform.document.createElement('template');\n iconTemplate.setAttribute('au-slot', 'leading-icon');\n iconTemplate.innerHTML = div.innerHTML;\n el.appendChild(iconTemplate);\n }\n}\n)\nexport class MdcSelect extends MdcComponent<MDCSelectFoundationAurelia> {\n constructor(root: HTMLElement, private platform: IPlatform, private configuration: MdcConfiguration) {\n super(root);\n this.outlined = this.configuration.select.outlined;\n defineMdcSelectElementApis(this.root);\n this.root.id = this.id;\n }\n\n id: string = `mdc-select-${++selectId}`;\n public menu: MdcMenu;\n private selectAnchor: HTMLElement;\n private selectedText: HTMLElement;\n\n private menuElement?: Element;\n\n get items(): MdcListItem[] | undefined {\n return this.menu.list_?.items;\n }\n\n private leadingIcon?: MdcSelectIcon;\n\n private helperText?: MdcSelectHelperText;\n private lineRipple?: MdcLineRipple;\n private mdcLabel: MdcFloatingLabel;\n private outline?: MDCNotchedOutline;\n errors = new Map<IError, boolean>();\n\n /** Sets the select label */\n @bindable()\n label: string;\n labelChanged() {\n this.platform.domQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Styles the select as an outlined select */\n @bindable({ set: booleanAttr })\n outlined?: boolean;\n outlinedChanged() {\n this.platform.domQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Makes the value required */\n @bindable({ set: booleanAttr })\n required: boolean;\n requiredChanged() {\n if (this.required) {\n this.selectAnchor?.setAttribute('aria-required', 'true');\n } else {\n this.selectAnchor?.removeAttribute('aria-required');\n }\n this.foundation?.setRequired(this.required ?? false);\n this.platform.domWriteQueue.queueTask(() => this.foundation?.layout());\n }\n\n /** Enables/disables the select */\n @bindable({ set: booleanAttr })\n disabled?: boolean;\n disabledChanged() {\n if (this.disabled !== undefined) {\n this.foundation?.setDisabled(this.disabled);\n }\n }\n\n /** Hoists the select DOM to document.body */\n @bindable({ set: booleanAttr, mode: BindingMode.oneTime })\n hoistToBody: boolean;\n\n /** Sets the select DOM position to fixed */\n @bindable({ set: booleanAttr, mode: BindingMode.oneTime })\n fixed: boolean;\n\n /** Sets the margin between the select input and the dropdown */\n @bindable()\n anchorMargin: Partial<MDCMenuDistance>;\n\n /** Sets the select dropdown width to match content */\n @bindable({ set: booleanAttr })\n naturalWidth: boolean;\n\n private _value: unknown;\n get value(): unknown {\n if (this.foundation) {\n return this.foundation.getValue();\n } else {\n return this._value;\n }\n }\n\n set value(value: unknown) {\n this.setValue(value);\n }\n\n setValue(value: unknown, skipNotify: boolean = false) {\n this._value = value;\n if (this.foundation) {\n this.foundation.setValue(value, skipNotify);\n this.foundation.layout();\n }\n }\n\n get valid(): boolean {\n return this.foundation?.isValid() ?? true;\n }\n\n set valid(value: boolean) {\n this.foundation?.setValid(value);\n }\n\n get selectedIndex(): number {\n return this.foundation!.getSelectedIndex();\n }\n\n set selectedIndex(selectedIndex: number) {\n this.foundation?.setSelectedIndex(selectedIndex, /** closeMenu */ true);\n }\n\n addError(error: IError) {\n this.errors.set(error, true);\n this.valid = false;\n }\n\n removeError(error: IError) {\n this.errors.delete(error);\n this.valid = this.errors.size === 0;\n }\n\n renderErrors() {\n if (this.helperText) {\n this.helperText.errors = Array.from(this.errors.keys()).filter(x => x.message !== null).map(x => x.message!);\n }\n }\n\n async attaching() {\n const nextSibling = this.root.nextElementSibling;\n if (nextSibling?.tagName === mdcHelperTextCssClasses.ROOT.toUpperCase()) {\n this.helperText = CustomElement.for<MdcSelectHelperText>(nextSibling).viewModel;\n await this.helperText.initialised;\n }\n }\n\n beforeFoundationCreated() {\n const leadingIconEl = this.root.querySelector<IMdcSelectIconElement>(`${strings.LEADING_ICON_SELECTOR}`);\n if (leadingIconEl) {\n this.leadingIcon = CustomAttribute.for<MdcSelectIcon>(leadingIconEl, mdcIconStrings.ATTRIBUTE)?.viewModel;\n }\n this.menu.list_!.singleSelection = true;\n }\n\n initialSyncWithDOM() {\n // set initial value without emitting change events\n this.foundation?.setValue(this._value, true);\n this.foundation?.layout();\n this.errors = new Map<IError, boolean>();\n this.valid = true;\n\n this.labelChanged();\n this.disabledChanged();\n this.outlinedChanged();\n this.requiredChanged();\n }\n\n getDefaultFoundation() {\n // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n const adapter: MDCSelectAdapterAurelia = {\n ...this.getSelectAdapterMethods(),\n ...this.getCommonAdapterMethods(),\n ...this.getOutlineAdapterMethods(),\n ...this.getLabelAdapterMethods(),\n };\n return new MDCSelectFoundationAurelia(adapter, this.getFoundationMap());\n }\n\n private getSelectAdapterMethods() {\n return {\n setSelectedText: (text: string) => {\n this.selectedText.textContent = text;\n },\n isSelectAnchorFocused: () => document.activeElement === this.selectAnchor,\n getSelectAnchorAttr: (attr: string) => this.selectAnchor.getAttribute(attr),\n setSelectAnchorAttr: (attr: string, value: string) => {\n this.selectAnchor.setAttribute(attr, value);\n },\n removeSelectAnchorAttr: (attr: string) => {\n this.selectAnchor.removeAttribute(attr);\n },\n addMenuClass: (className: string) => {\n this.menuElement?.classList.add(className);\n },\n removeMenuClass: (className: string) => {\n this.menuElement?.classList.remove(className);\n },\n openMenu: () => {\n this.menu.open = true;\n this.menu.root.style.minWidth = this.menu.root.style.maxWidth = (this.hoistToBody || this.fixed) && !this.naturalWidth\n ? `${this.root.clientWidth}px`\n : '';\n },\n closeMenu: () => { this.menu.open = false; },\n getAnchorElement: () => this.root.querySelector(strings.SELECT_ANCHOR_SELECTOR)!,\n setMenuAnchorElement: (anchorEl: HTMLElement) => {\n this.menu.anchor = anchorEl;\n },\n setMenuAnchorCorner: (anchorCorner: Corner) => {\n this.menu.setAnchorCorner(anchorCorner);\n },\n setMenuWrapFocus: (wrapFocus: boolean) => {\n this.menu.wrapFocus = wrapFocus;\n },\n getSelectedIndex: () => {\n const index = this.menu.selectedIndex;\n return index instanceof Array ? index[0] : index;\n },\n setSelectedIndex: (index: number) => {\n this.menu.selectedIndex = index;\n },\n removeAttributeAtIndex: (index: number, attributeName: string) => {\n this.menu.items[index].removeAttribute(attributeName);\n },\n focusMenuItemAtIndex: (index: number) => {\n (this.menu.items[index] as HTMLElement).focus();\n },\n getMenuItemCount: () => this.menu.items.length,\n getMenuItemValues: () => this.menu.items.map(x => CustomElement.for<MdcListItem>(x).viewModel.value),\n getMenuItemTextAtIndex: (index: number) => this.menu.getPrimaryTextAtIndex(index),\n isTypeaheadInProgress: () => this.menu.typeaheadInProgress,\n typeaheadMatchItem: (nextChar: string, startingIndex: number) => this.menu.typeaheadMatchItem(nextChar, startingIndex),\n };\n }\n\n private getCommonAdapterMethods() {\n return {\n addClass: (className: string) => {\n this.root.classList.add(className);\n },\n removeClass: (className: string) => {\n this.root.classList.remove(className);\n },\n hasClass: (className: string) => this.root.classList.contains(className),\n setRippleCenter: (normalizedX: number) => this.lineRipple?.setRippleCenter(normalizedX),\n activateBottomLine: () => this.lineRipple?.activate(),\n deactivateBottomLine: () => this.lineRipple?.deactivate(),\n notifyChange: (value: string) => {\n const index = this.selectedIndex;\n this.emit<MDCSelectEventDetail>(strings.CHANGE_EVENT, { value, index }, true /* shouldBubble */);\n this.emit<MDCSelectEventDetail>('change', { value, index }, true /* shouldBubble */);\n },\n };\n }\n\n private getOutlineAdapterMethods() {\n return {\n hasOutline: () => Boolean(this.outline),\n notchOutline: (labelWidth: number) => this.outline?.notch(labelWidth),\n closeOutline: () => this.outline?.closeNotch(),\n };\n }\n\n private getLabelAdapterMethods() {\n return {\n hasLabel: () => !!this.mdcLabel,\n floatLabel: (shouldFloat: boolean) => this.mdcLabel?.float(shouldFloat),\n getLabelWidth: () => this.mdcLabel ? this.mdcLabel.getWidth() : 0,\n setLabelRequired: (isRequired: boolean) => this.mdcLabel?.setRequired(isRequired),\n };\n }\n\n handleChange() {\n this.foundation?.handleChange();\n this.emit('change', {}, true);\n }\n\n handleFocus() {\n this.foundation?.handleFocus();\n }\n\n handleBlur() {\n this.foundation?.handleBlur();\n // if class is set it means the menu is open,\n // do not emit blur since \"conceptually\" the element is still active\n if (!this.root.classList.contains(cssClasses.FOCUSED)) {\n this.emit('blur', {}, true);\n }\n }\n\n handleClick(evt: MouseEvent) {\n this.selectAnchor.focus();\n this.foundation?.handleClick(this.getNormalizedXCoordinate(evt));\n }\n\n handleKeydown(evt: KeyboardEvent) {\n this.foundation?.handleKeydown(evt);\n return true;\n }\n\n handleMenuItemAction(evt: MDCMenuItemEvent) {\n this.foundation?.handleMenuItemAction(evt.detail.index);\n }\n\n handleMenuOpened() {\n this.foundation?.handleMenuOpened();\n }\n\n handleMenuClosed() {\n this.foundation?.handleMenuClosed();\n if (!this.root.classList.contains(cssClasses.FOCUSED)) {\n this.emit('blur', {}, true);\n }\n }\n\n handleItemsChanged() {\n this.foundation?.layoutOptions();\n this.foundation?.layout();\n }\n\n focus() {\n this.selectAnchor.focus();\n }\n\n blur() {\n this.selectAnchor.blur();\n }\n\n /**\n * @hidden\n * Calculates where the line ripple should start based on the x coordinate within the component.\n */\n private getNormalizedXCoordinate(evt: MouseEvent | TouchEvent): number {\n const targetClientRect = (evt.target as Element).getBoundingClientRect();\n const xCoordinate =\n this.isTouchEvent(evt) ? evt.touches[0].clientX : evt.clientX;\n return xCoordinate - targetClientRect.left;\n }\n\n private isTouchEvent(evt: MouseEvent | TouchEvent): evt is TouchEvent {\n return Boolean((evt as TouchEvent).touches);\n }\n\n /**\n * @hidden\n * Returns a map of all subcomponents to subfoundations.\n */\n private getFoundationMap(): Partial<MDCSelectFoundationMap> {\n return {\n helperText: this.helperText?.foundation,\n leadingIcon: this.leadingIcon?.foundation\n };\n }\n}\n\n/** @hidden */\nexport interface IMdcSelectElement extends IValidatedElement {\n $au: {\n 'au:resource:custom-element': {\n viewModel: MdcSelect;\n };\n };\n value: unknown;\n}\n\nfunction defineMdcSelectElementApis(element: HTMLElement) {\n Object.defineProperties(element, {\n value: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.value;\n },\n set(this: IMdcSelectElement, value: unknown) {\n // aurelia binding converts \"undefined\" and \"null\" into empty string\n // this does not translate well into \"empty\" menu items when several selects are bound to the same field\n CustomElement.for<MdcSelect>(this).viewModel.value = value === '' ? undefined : value;\n },\n configurable: true\n },\n options: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.root.querySelectorAll('.mdc-list-item');\n },\n configurable: true\n },\n selectedIndex: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.selectedIndex;\n },\n set(this: IMdcSelectElement, value: number) {\n CustomElement.for<MdcSelect>(this).viewModel.selectedIndex = value;\n },\n configurable: true\n },\n valid: {\n get(this: IMdcSelectElement) {\n return CustomElement.for<MdcSelect>(this).viewModel.valid;\n },\n set(this: IMdcSelectElement, value: boolean) {\n CustomElement.for<MdcSelect>(this).viewModel.valid = value;\n },\n configurable: true\n },\n addError: {\n value(this: IMdcSelectElement, error: IError) {\n CustomElement.for<MdcSelect>(this).viewModel.addError(error);\n },\n configurable: true\n },\n removeError: {\n value(this: IMdcSelectElement, error: IError) {\n CustomElement.for<MdcSelect>(this).viewModel.removeError(error);\n },\n configurable: true\n },\n renderErrors: {\n value(this: IMdcSelectElement): void {\n CustomElement.for<MdcSelect>(this).viewModel.renderErrors();\n },\n configurable: true\n },\n focus: {\n value(this: IMdcSelectElement) {\n CustomElement.for<MdcSelect>(this).viewModel.focus();\n },\n configurable: true\n },\n blur: {\n value(this: IMdcSelectElement) {\n CustomElement.for<MdcSelect>(this).viewModel.blur();\n },\n configurable: true\n }\n });\n}\n"]}
|