@aurelia-mdc-web/all 9.3.1-au2 → 9.3.3-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 +15 -0
- package/dist/alert/alert-configuration.js.map +1 -0
- package/dist/alert/alert-modal/alert-modal.html +27 -0
- package/dist/alert/alert-modal/alert-modal.js +30 -0
- package/dist/alert/alert-modal/alert-modal.js.map +1 -0
- package/dist/alert/alert-modal/i-alert-modal-payload.js +14 -0
- package/dist/alert/alert-modal/i-alert-modal-payload.js.map +1 -0
- package/dist/alert/alert-service.js +106 -0
- package/dist/alert/alert-service.js.map +1 -0
- package/dist/alert/decorators/confirm-action.js +17 -0
- package/dist/alert/decorators/confirm-action.js.map +1 -0
- package/dist/alert/decorators/using-progress.js +27 -0
- package/dist/alert/decorators/using-progress.js.map +1 -0
- package/dist/alert/exceptions-tracker.js +8 -0
- package/dist/alert/exceptions-tracker.js.map +1 -0
- package/dist/alert/global-progress/global-progress.html +9 -0
- package/dist/alert/global-progress/global-progress.js +64 -0
- package/dist/alert/global-progress/global-progress.js.map +1 -0
- package/dist/alert/prompt-dialog/prompt-dialog.html +15 -0
- package/dist/alert/prompt-dialog/prompt-dialog.js +44 -0
- package/dist/alert/prompt-dialog/prompt-dialog.js.map +1 -0
- package/dist/banner/mdc-banner.html +21 -21
- package/dist/banner/mdc-banner.js +45 -42
- package/dist/banner/mdc-banner.js.map +1 -1
- package/dist/base/attributes/mdc-focus-trap.js +25 -22
- package/dist/base/attributes/mdc-focus-trap.js.map +1 -1
- package/dist/base/elements/i-validated-element.js +2 -1
- package/dist/base/elements/i-validated-element.js.map +1 -1
- package/dist/base/elements/mdc-promisify-reference.js +16 -13
- package/dist/base/elements/mdc-promisify-reference.js.map +1 -1
- package/dist/base/index.js +21 -9
- package/dist/base/index.js.map +1 -1
- package/dist/base/interceptors.js +12 -5
- package/dist/base/interceptors.js.map +1 -1
- package/dist/base/material-palette.js +4 -1
- package/dist/base/material-palette.js.map +1 -1
- package/dist/base/mdc-component.js +5 -1
- package/dist/base/mdc-component.js.map +1 -1
- package/dist/base/next-element.js +4 -1
- package/dist/base/next-element.js.map +1 -1
- package/dist/button/enhance-mdc-button.js +9 -6
- package/dist/button/enhance-mdc-button.js.map +1 -1
- package/dist/button/mdc-button-label.js +9 -6
- package/dist/button/mdc-button-label.js.map +1 -1
- package/dist/button/mdc-button.html +12 -12
- package/dist/button/mdc-button.js +30 -27
- package/dist/button/mdc-button.js.map +1 -1
- package/dist/card/mdc-card-action-buttons.js +9 -6
- package/dist/card/mdc-card-action-buttons.js.map +1 -1
- package/dist/card/mdc-card-action-icons.js +9 -6
- package/dist/card/mdc-card-action-icons.js.map +1 -1
- package/dist/card/mdc-card-actions/mdc-card-actions.html +3 -3
- package/dist/card/mdc-card-actions/mdc-card-actions.js +15 -12
- package/dist/card/mdc-card-actions/mdc-card-actions.js.map +1 -1
- package/dist/card/mdc-card-media/mdc-card-media.html +5 -5
- package/dist/card/mdc-card-media/mdc-card-media.js +18 -15
- package/dist/card/mdc-card-media/mdc-card-media.js.map +1 -1
- package/dist/card/mdc-card-primary-action.html +5 -5
- package/dist/card/mdc-card-primary-action.js +15 -12
- package/dist/card/mdc-card-primary-action.js.map +1 -1
- package/dist/card/mdc-card.html +3 -3
- package/dist/card/mdc-card.js +15 -12
- package/dist/card/mdc-card.js.map +1 -1
- package/dist/checkbox/mdc-checkbox.html +12 -12
- package/dist/checkbox/mdc-checkbox.js +38 -35
- package/dist/checkbox/mdc-checkbox.js.map +1 -1
- package/dist/chips/mdc-chip/mdc-chip.html +24 -24
- package/dist/chips/mdc-chip/mdc-chip.js +37 -34
- package/dist/chips/mdc-chip/mdc-chip.js.map +1 -1
- package/dist/chips/mdc-chip-action/enhance-mdc-chip-action.js +9 -6
- package/dist/chips/mdc-chip-action/enhance-mdc-chip-action.js.map +1 -1
- package/dist/chips/mdc-chip-action/mdc-chip-action.html +25 -25
- package/dist/chips/mdc-chip-action/mdc-chip-action.js +40 -37
- package/dist/chips/mdc-chip-action/mdc-chip-action.js.map +1 -1
- package/dist/chips/mdc-chip-set/mdc-chip-set.html +10 -10
- package/dist/chips/mdc-chip-set/mdc-chip-set.js +27 -24
- package/dist/chips/mdc-chip-set/mdc-chip-set.js.map +1 -1
- package/dist/circular-progress/mdc-circular-progress.html +38 -38
- package/dist/circular-progress/mdc-circular-progress.js +25 -22
- package/dist/circular-progress/mdc-circular-progress.js.map +1 -1
- package/dist/data-table/mdc-data-table-row.js +13 -10
- package/dist/data-table/mdc-data-table-row.js.map +1 -1
- package/dist/data-table/mdc-data-table.html +50 -49
- package/dist/data-table/mdc-data-table.js +183 -91
- package/dist/data-table/mdc-data-table.js.map +1 -1
- package/dist/dialog/mdc-dialog-actions.js +13 -10
- package/dist/dialog/mdc-dialog-actions.js.map +1 -1
- package/dist/dialog/mdc-dialog-content.js +9 -6
- package/dist/dialog/mdc-dialog-content.js.map +1 -1
- package/dist/dialog/mdc-dialog-service.js +20 -13
- package/dist/dialog/mdc-dialog-service.js.map +1 -1
- package/dist/dialog/mdc-dialog-title.js +9 -6
- package/dist/dialog/mdc-dialog-title.js.map +1 -1
- package/dist/dialog/mdc-dialog.html +14 -14
- package/dist/dialog/mdc-dialog.js +49 -46
- package/dist/dialog/mdc-dialog.js.map +1 -1
- package/dist/drawer/mdc-drawer-app-content.js +9 -6
- package/dist/drawer/mdc-drawer-app-content.js.map +1 -1
- package/dist/drawer/mdc-drawer-content.js +9 -6
- package/dist/drawer/mdc-drawer-content.js.map +1 -1
- package/dist/drawer/mdc-drawer-header/mdc-drawer-header.html +5 -5
- package/dist/drawer/mdc-drawer-header/mdc-drawer-header.js +17 -14
- package/dist/drawer/mdc-drawer-header/mdc-drawer-header.js.map +1 -1
- package/dist/drawer/mdc-drawer.html +6 -6
- package/dist/drawer/mdc-drawer.js +24 -21
- package/dist/drawer/mdc-drawer.js.map +1 -1
- package/dist/elevation/mdc-elevation.js +9 -6
- package/dist/elevation/mdc-elevation.js.map +1 -1
- package/dist/expandable/mdc-expandable.html +28 -28
- package/dist/expandable/mdc-expandable.js +20 -17
- package/dist/expandable/mdc-expandable.js.map +1 -1
- package/dist/fab/enhance-mdc-fab.js +9 -6
- package/dist/fab/enhance-mdc-fab.js.map +1 -1
- package/dist/fab/mdc-fab-icon.js +9 -6
- package/dist/fab/mdc-fab-icon.js.map +1 -1
- package/dist/fab/mdc-fab.html +13 -13
- package/dist/fab/mdc-fab.js +33 -30
- package/dist/fab/mdc-fab.js.map +1 -1
- package/dist/floating-label/mdc-floating-label.html +1 -1
- package/dist/floating-label/mdc-floating-label.js +16 -13
- package/dist/floating-label/mdc-floating-label.js.map +1 -1
- package/dist/form-field/mdc-form-field.html +6 -6
- package/dist/form-field/mdc-form-field.js +27 -24
- package/dist/form-field/mdc-form-field.js.map +1 -1
- package/dist/icon/mdc-icon.html +3 -3
- package/dist/icon/mdc-icon.js +10 -7
- package/dist/icon/mdc-icon.js.map +1 -1
- package/dist/icon-button/enhance-mdc-icon-button.js +9 -6
- package/dist/icon-button/enhance-mdc-icon-button.js.map +1 -1
- package/dist/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.html +4 -4
- package/dist/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.js +18 -15
- package/dist/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.js.map +1 -1
- package/dist/icon-button/mdc-icon-button.html +11 -11
- package/dist/icon-button/mdc-icon-button.js +28 -25
- package/dist/icon-button/mdc-icon-button.js.map +1 -1
- package/dist/image-list/mdc-image-list-item/mdc-image-list-item.html +9 -9
- package/dist/image-list/mdc-image-list-item/mdc-image-list-item.js +22 -19
- package/dist/image-list/mdc-image-list-item/mdc-image-list-item.js.map +1 -1
- package/dist/image-list/mdc-image-list.html +7 -7
- package/dist/image-list/mdc-image-list.js +35 -32
- package/dist/image-list/mdc-image-list.js.map +1 -1
- package/dist/index.js +297 -139
- package/dist/index.js.map +1 -1
- package/dist/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.html +12 -12
- package/dist/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.js +36 -33
- 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 +9 -6
- package/dist/layout-grid/mdc-layout-grid-inner.js.map +1 -1
- package/dist/layout-grid/mdc-layout-grid.html +8 -8
- package/dist/layout-grid/mdc-layout-grid.js +33 -30
- package/dist/layout-grid/mdc-layout-grid.js.map +1 -1
- package/dist/line-ripple/mdc-line-ripple.js +13 -10
- package/dist/line-ripple/mdc-line-ripple.js.map +1 -1
- package/dist/linear-progress/mdc-linear-progress.html +12 -12
- package/dist/linear-progress/mdc-linear-progress.js +26 -23
- 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.html +4 -4
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-divider/mdc-deprecated-list-divider.js +18 -15
- 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 +17 -14
- 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 +9 -6
- 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 +9 -6
- 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 +9 -6
- 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.html +8 -8
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item.js +28 -25
- 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 +9 -6
- 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 +9 -6
- 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.html +15 -15
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list.js +78 -75
- package/dist/list/mdc-deprecated-list/mdc-deprecated-list.js.map +1 -1
- package/dist/list/mdc-list-divider/mdc-list-divider.html +7 -7
- package/dist/list/mdc-list-divider/mdc-list-divider.js +21 -18
- package/dist/list/mdc-list-divider/mdc-list-divider.js.map +1 -1
- package/dist/list/mdc-list-group.js +17 -14
- package/dist/list/mdc-list-group.js.map +1 -1
- package/dist/list/mdc-list-item/enhance-mdc-list-item.js +9 -6
- 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 +9 -6
- 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 +9 -6
- package/dist/list/mdc-list-item/mdc-list-item-trailing.js.map +1 -1
- package/dist/list/mdc-list-item/mdc-list-item.html +13 -13
- package/dist/list/mdc-list-item/mdc-list-item.js +40 -37
- package/dist/list/mdc-list-item/mdc-list-item.js.map +1 -1
- package/dist/list/mdc-list-item-overline-text.js +9 -6
- package/dist/list/mdc-list-item-overline-text.js.map +1 -1
- package/dist/list/mdc-list-item-primary-text.js +9 -6
- package/dist/list/mdc-list-item-primary-text.js.map +1 -1
- package/dist/list/mdc-list-item-secondary-text.js +9 -6
- package/dist/list/mdc-list-item-secondary-text.js.map +1 -1
- package/dist/list/mdc-list.html +5 -5
- package/dist/list/mdc-list.js +58 -55
- package/dist/list/mdc-list.js.map +1 -1
- package/dist/lookup/discardable-promise.js +5 -1
- package/dist/lookup/discardable-promise.js.map +1 -1
- package/dist/lookup/mdc-lookup-configuration.js +5 -1
- package/dist/lookup/mdc-lookup-configuration.js.map +1 -1
- package/dist/lookup/mdc-lookup.html +27 -27
- package/dist/lookup/mdc-lookup.js +74 -71
- package/dist/lookup/mdc-lookup.js.map +1 -1
- package/dist/mdc-configuration.js +15 -9
- package/dist/mdc-configuration.js.map +1 -1
- package/dist/menu/mdc-menu-selection-group-icon.js +9 -6
- package/dist/menu/mdc-menu-selection-group-icon.js.map +1 -1
- package/dist/menu/mdc-menu-selection-group.js +9 -6
- package/dist/menu/mdc-menu-selection-group.js.map +1 -1
- package/dist/menu/mdc-menu.html +6 -6
- package/dist/menu/mdc-menu.js +71 -68
- package/dist/menu/mdc-menu.js.map +1 -1
- package/dist/menu-surface/mdc-menu-surface-anchor.js +11 -8
- package/dist/menu-surface/mdc-menu-surface-anchor.js.map +1 -1
- package/dist/menu-surface/mdc-menu-surface.js +61 -58
- package/dist/menu-surface/mdc-menu-surface.js.map +1 -1
- package/dist/notched-outline/mdc-notched-outline.html +7 -7
- package/dist/notched-outline/mdc-notched-outline.js +20 -17
- package/dist/notched-outline/mdc-notched-outline.js.map +1 -1
- package/dist/radio/mdc-radio.html +9 -9
- package/dist/radio/mdc-radio.js +27 -24
- package/dist/radio/mdc-radio.js.map +1 -1
- package/dist/ripple/mdc-ripple.js +51 -48
- package/dist/ripple/mdc-ripple.js.map +1 -1
- package/dist/segmented-button/mdc-segmented-button-segment/enhance-mdc-segmented-button-segment.js +9 -6
- 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.html +11 -11
- package/dist/segmented-button/mdc-segmented-button-segment/mdc-segmented-button-segment.js +27 -24
- package/dist/segmented-button/mdc-segmented-button-segment/mdc-segmented-button-segment.js.map +1 -1
- package/dist/segmented-button/mdc-segmented-button.html +3 -3
- package/dist/segmented-button/mdc-segmented-button.js +24 -21
- package/dist/segmented-button/mdc-segmented-button.js.map +1 -1
- package/dist/select/mdc-default-select-configuration.js +5 -1
- package/dist/select/mdc-default-select-configuration.js.map +1 -1
- package/dist/select/mdc-select-adapter-aurelia.js +2 -1
- package/dist/select/mdc-select-adapter-aurelia.js.map +1 -1
- package/dist/select/mdc-select-foundation-aurelia.js +47 -43
- package/dist/select/mdc-select-foundation-aurelia.js.map +1 -1
- package/dist/select/mdc-select-helper-text/mdc-select-helper-text.html +7 -7
- package/dist/select/mdc-select-helper-text/mdc-select-helper-text.js +27 -24
- package/dist/select/mdc-select-helper-text/mdc-select-helper-text.js.map +1 -1
- package/dist/select/mdc-select-icon.js +16 -13
- package/dist/select/mdc-select-icon.js.map +1 -1
- package/dist/select/mdc-select-value-observer.js +16 -12
- package/dist/select/mdc-select-value-observer.js.map +1 -1
- package/dist/select/mdc-select.html +38 -38
- package/dist/select/mdc-select.js +71 -68
- package/dist/select/mdc-select.js.map +1 -1
- package/dist/slider/mdc-slider-foundation-aurelia.js +6 -2
- package/dist/slider/mdc-slider-foundation-aurelia.js.map +1 -1
- package/dist/slider/mdc-slider.html +36 -36
- package/dist/slider/mdc-slider.js +79 -76
- package/dist/slider/mdc-slider.js.map +1 -1
- package/dist/snackbar/mdc-snackbar-service.js +8 -4
- package/dist/snackbar/mdc-snackbar-service.js.map +1 -1
- package/dist/snackbar/mdc-snackbar.html +14 -14
- package/dist/snackbar/mdc-snackbar.js +55 -52
- package/dist/snackbar/mdc-snackbar.js.map +1 -1
- package/dist/switch/enhance-mdc-switch.js +9 -6
- package/dist/switch/enhance-mdc-switch.js.map +1 -1
- package/dist/switch/mdc-switch.html +21 -21
- package/dist/switch/mdc-switch.js +16 -13
- package/dist/switch/mdc-switch.js.map +1 -1
- package/dist/tab-bar/indicator/mdc-tab-indicator.html +9 -9
- package/dist/tab-bar/indicator/mdc-tab-indicator.js +26 -23
- package/dist/tab-bar/indicator/mdc-tab-indicator.js.map +1 -1
- package/dist/tab-bar/mdc-tab-bar.html +6 -6
- package/dist/tab-bar/mdc-tab-bar.js +29 -26
- package/dist/tab-bar/mdc-tab-bar.js.map +1 -1
- package/dist/tab-bar/scroller/mdc-tab-scroller.html +11 -11
- package/dist/tab-bar/scroller/mdc-tab-scroller.js +25 -22
- package/dist/tab-bar/scroller/mdc-tab-scroller.js.map +1 -1
- package/dist/tab-bar/tab/mdc-tab.html +20 -20
- package/dist/tab-bar/tab/mdc-tab.js +44 -41
- package/dist/tab-bar/tab/mdc-tab.js.map +1 -1
- package/dist/text-field/enhance-mdc-text-field.js +9 -6
- package/dist/text-field/enhance-mdc-text-field.js.map +1 -1
- package/dist/text-field/mdc-default-text-field-configuration.js +5 -1
- package/dist/text-field/mdc-default-text-field-configuration.js.map +1 -1
- package/dist/text-field/mdc-inputmask.js +76 -0
- package/dist/text-field/mdc-inputmask.js.map +1 -0
- package/dist/text-field/mdc-text-field-character-counter.js +13 -10
- 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.html +7 -7
- package/dist/text-field/mdc-text-field-helper-line/mdc-text-field-helper-line.js +14 -11
- 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.html +6 -6
- package/dist/text-field/mdc-text-field-helper-text/mdc-text-field-helper-text.js +22 -19
- 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 +22 -19
- package/dist/text-field/mdc-text-field-icon.js.map +1 -1
- package/dist/text-field/mdc-text-field.html +29 -29
- package/dist/text-field/mdc-text-field.js +116 -113
- package/dist/text-field/mdc-text-field.js.map +1 -1
- package/dist/tooltip/mdc-default-tooltip-configuration.js +5 -1
- package/dist/tooltip/mdc-default-tooltip-configuration.js.map +1 -1
- package/dist/tooltip/mdc-tooltip-attribute.js +39 -36
- package/dist/tooltip/mdc-tooltip-attribute.js.map +1 -1
- package/dist/tooltip/mdc-tooltip.html +7 -7
- package/dist/tooltip/mdc-tooltip.js +66 -63
- package/dist/tooltip/mdc-tooltip.js.map +1 -1
- package/dist/top-app-bar/enhance-top-app-bar-actions.js +9 -6
- 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 +9 -6
- 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 +9 -6
- 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 +9 -6
- 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 +9 -6
- 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.html +3 -3
- package/dist/top-app-bar/mdc-top-app-bar-section/mdc-top-app-bar-section.js +15 -12
- 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 +9 -6
- package/dist/top-app-bar/mdc-top-app-bar-title.js.map +1 -1
- package/dist/top-app-bar/mdc-top-app-bar.html +9 -9
- package/dist/top-app-bar/mdc-top-app-bar.js +43 -40
- package/dist/top-app-bar/mdc-top-app-bar.js.map +1 -1
- package/dist/tree-view/i-tree-node.js +2 -1
- package/dist/tree-view/i-tree-node.js.map +1 -1
- package/dist/tree-view/mdc-tree-node-meta.js +9 -6
- package/dist/tree-view/mdc-tree-node-meta.js.map +1 -1
- package/dist/tree-view/mdc-tree-node.js +9 -6
- package/dist/tree-view/mdc-tree-node.js.map +1 -1
- package/dist/tree-view/mdc-tree-view.js +29 -25
- package/dist/tree-view/mdc-tree-view.js.map +1 -1
- package/dist/tree-view/node-filter.js +9 -6
- package/dist/tree-view/node-filter.js.map +1 -1
- package/dist/types/alert/alert-configuration.d.ts +8 -0
- package/dist/types/alert/alert-modal/alert-modal.d.ts +6 -0
- package/dist/types/alert/alert-modal/i-alert-modal-payload.d.ts +9 -0
- package/dist/types/alert/alert-service.d.ts +27 -0
- package/dist/types/alert/decorators/confirm-action.d.ts +3 -0
- package/dist/types/alert/decorators/using-progress.d.ts +6 -0
- package/dist/types/alert/exceptions-tracker.d.ts +3 -0
- package/dist/types/alert/global-progress/global-progress.d.ts +11 -0
- package/dist/types/alert/prompt-dialog/prompt-dialog.d.ts +21 -0
- package/dist/types/data-table/mdc-data-table.d.ts +16 -4
- package/dist/types/index.d.ts +11 -1
- package/dist/types/lookup/mdc-lookup.d.ts +3 -3
- package/dist/types/mdc-configuration.d.ts +2 -0
- package/dist/types/select/mdc-select.d.ts +3 -3
- package/dist/types/text-field/mdc-inputmask.d.ts +11 -0
- package/dist/types/text-field/mdc-text-field.d.ts +3 -3
- package/dist/types/tooltip/mdc-tooltip.d.ts +3 -3
- package/dist/types/validation/validate.d.ts +10 -0
- package/dist/typography/mdc-typography.js +60 -57
- package/dist/typography/mdc-typography.js.map +1 -1
- package/dist/validation/mdc-validation-controller-factory.js +10 -6
- package/dist/validation/mdc-validation-controller-factory.js.map +1 -1
- package/dist/validation/mdc-validation-result-presenter.js +5 -1
- package/dist/validation/mdc-validation-result-presenter.js.map +1 -1
- package/dist/validation/validate.js +27 -0
- package/dist/validation/validate.js.map +1 -0
- package/package.json +4 -2
- package/src/alert/alert-configuration.ts +11 -0
- package/src/alert/alert-modal/alert-modal.html +27 -0
- package/src/alert/alert-modal/alert-modal.scss +10 -0
- package/src/alert/alert-modal/alert-modal.ts +13 -0
- package/src/alert/alert-modal/i-alert-modal-payload.ts +9 -0
- package/src/alert/alert-service.ts +113 -0
- package/src/alert/decorators/confirm-action.ts +18 -0
- package/src/alert/decorators/using-progress.ts +30 -0
- package/src/alert/exceptions-tracker.ts +3 -0
- package/src/alert/global-progress/global-progress.html +9 -0
- package/src/alert/global-progress/global-progress.scss +38 -0
- package/src/alert/global-progress/global-progress.ts +27 -0
- package/src/alert/prompt-dialog/prompt-dialog.html +15 -0
- package/src/alert/prompt-dialog/prompt-dialog.ts +35 -0
- package/src/banner/mdc-banner.html +21 -21
- package/src/banner/mdc-banner.ts +116 -116
- package/src/base/attributes/mdc-focus-trap.ts +42 -42
- package/src/base/elements/i-validated-element.ts +12 -12
- package/src/base/elements/mdc-promisify-reference.ts +21 -21
- package/src/base/interceptors.ts +25 -25
- package/src/base/material-palette.md +7 -7
- package/src/base/material-palette.ts +22 -22
- package/src/base/mdc-component.ts +69 -69
- package/src/base/next-element.ts +39 -39
- package/src/button/enhance-mdc-button.ts +8 -8
- package/src/button/mdc-button-label.ts +15 -15
- package/src/button/mdc-button.html +12 -12
- package/src/button/mdc-button.ts +62 -62
- package/src/card/mdc-card-action-buttons.ts +19 -19
- package/src/card/mdc-card-action-icons.ts +19 -19
- package/src/card/mdc-card-actions/mdc-card-actions.html +3 -3
- package/src/card/mdc-card-actions/mdc-card-actions.ts +15 -15
- package/src/card/mdc-card-media/mdc-card-media.html +5 -5
- package/src/card/mdc-card-media/mdc-card-media.ts +21 -21
- package/src/card/mdc-card-primary-action.html +5 -5
- package/src/card/mdc-card-primary-action.ts +16 -16
- package/src/card/mdc-card.html +3 -3
- package/src/card/mdc-card.ts +16 -16
- package/src/checkbox/mdc-checkbox.html +12 -12
- package/src/checkbox/mdc-checkbox.ts +217 -217
- package/src/chips/mdc-chip/mdc-chip.html +24 -24
- package/src/chips/mdc-chip-action/enhance-mdc-chip-action.ts +8 -8
- package/src/chips/mdc-chip-action/mdc-chip-action.html +25 -25
- package/src/chips/mdc-chip-action/mdc-chip-action.ts +143 -143
- package/src/chips/mdc-chip-set/mdc-chip-set.html +10 -10
- package/src/chips/mdc-chip-set/mdc-chip-set.ts +117 -117
- package/src/circular-progress/mdc-circular-progress.html +38 -38
- package/src/circular-progress/mdc-circular-progress.ts +91 -91
- package/src/circular-progress/styles/_index.scss +1 -1
- package/src/circular-progress/styles/mdc-circular-progress.import.scss +1 -1
- package/src/circular-progress/styles/mdc-circular-progress.scss +14 -14
- package/src/data-table/mdc-data-table-row.ts +24 -24
- package/src/data-table/mdc-data-table.html +50 -49
- package/src/data-table/mdc-data-table.ts +111 -13
- package/src/data-table/styles/_index.scss +1 -0
- package/src/data-table/styles/mdc-data-table.import.scss +1 -0
- package/src/data-table/styles/mdc-data-table.scss +64 -0
- package/src/dialog/mdc-dialog-actions.ts +23 -23
- package/src/dialog/mdc-dialog-content.ts +11 -11
- package/src/dialog/mdc-dialog-service.ts +83 -80
- package/src/dialog/mdc-dialog-title.ts +8 -8
- package/src/dialog/mdc-dialog.html +14 -14
- package/src/dialog/mdc-dialog.ts +224 -224
- package/src/drawer/mdc-drawer-app-content.ts +11 -11
- package/src/drawer/mdc-drawer-content.ts +11 -11
- package/src/drawer/mdc-drawer-header/mdc-drawer-header.html +5 -5
- package/src/drawer/mdc-drawer-header/mdc-drawer-header.ts +18 -18
- package/src/drawer/mdc-drawer.html +6 -6
- package/src/drawer/mdc-drawer.ts +125 -125
- package/src/elevation/mdc-elevation.ts +23 -23
- package/src/expandable/mdc-expandable.html +28 -28
- package/src/expandable/styles/_icon-variables.scss +3 -3
- package/src/expandable/styles/_index.scss +1 -1
- package/src/expandable/styles/_mixins.scss +287 -287
- package/src/expandable/styles/_variables.scss +17 -17
- package/src/expandable/styles/mdc-expandable.import.scss +1 -1
- package/src/expandable/styles/mdc-expandable.scss +3 -3
- package/src/fab/enhance-mdc-fab.ts +8 -8
- package/src/fab/mdc-fab-icon.ts +15 -15
- package/src/fab/mdc-fab.html +13 -13
- package/src/fab/mdc-fab.ts +50 -50
- package/src/floating-label/mdc-floating-label.html +1 -1
- package/src/floating-label/mdc-floating-label.ts +44 -44
- package/src/form-field/mdc-form-field.html +6 -6
- package/src/icon/mdc-icon.html +3 -3
- package/src/icon/mdc-icon.ts +11 -11
- package/src/icon-button/enhance-mdc-icon-button.ts +8 -8
- package/src/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.html +4 -4
- package/src/icon-button/mdc-icon-button-icon/mdc-icon-button-icon.ts +29 -29
- package/src/icon-button/mdc-icon-button.html +11 -11
- package/src/icon-button/mdc-icon-button.ts +69 -69
- package/src/image-list/mdc-image-list-item/mdc-image-list-item.html +9 -9
- package/src/image-list/mdc-image-list-item/mdc-image-list-item.ts +31 -31
- package/src/image-list/mdc-image-list.html +7 -7
- package/src/image-list/mdc-image-list.ts +73 -73
- package/src/image-list/styles/_index.scss +1 -1
- package/src/image-list/styles/mdc-image-list.import.scss +1 -1
- package/src/image-list/styles/mdc-image-list.scss +7 -7
- package/src/index.ts +17 -3
- package/src/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.html +12 -12
- package/src/layout-grid/mdc-layout-grid-cell/mdc-layout-grid-cell.ts +49 -49
- package/src/layout-grid/mdc-layout-grid-inner.ts +8 -8
- package/src/layout-grid/mdc-layout-grid.html +8 -8
- package/src/layout-grid/mdc-layout-grid.ts +67 -67
- package/src/layout-grid/styles/_index.scss +1 -1
- package/src/layout-grid/styles/mdc-layout-grid.import.scss +1 -1
- package/src/layout-grid/styles/mdc-layout-grid.scss +11 -11
- package/src/line-ripple/mdc-line-ripple.ts +41 -41
- package/src/linear-progress/mdc-linear-progress.html +12 -12
- package/src/linear-progress/mdc-linear-progress.ts +103 -103
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-divider/mdc-deprecated-list-divider.html +4 -4
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-divider/mdc-deprecated-list-divider.ts +18 -18
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-group.ts +27 -27
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item/enhance-mdc-deprecated-list-item.ts +8 -8
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-graphic.ts +15 -15
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item-meta.ts +15 -15
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item/mdc-deprecated-list-item.html +8 -8
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item-primary-text.ts +11 -11
- package/src/list/mdc-deprecated-list/mdc-deprecated-list-item-secondary-text.ts +11 -11
- package/src/list/mdc-deprecated-list/mdc-deprecated-list.html +15 -15
- package/src/list/mdc-deprecated-list/mdc-deprecated-list.ts +331 -331
- package/src/list/mdc-list-divider/mdc-list-divider.html +7 -7
- package/src/list/mdc-list-divider/mdc-list-divider.ts +24 -24
- package/src/list/mdc-list-group.ts +27 -27
- package/src/list/mdc-list-item/enhance-mdc-list-item.ts +8 -8
- package/src/list/mdc-list-item/mdc-list-item-leading.ts +34 -34
- package/src/list/mdc-list-item/mdc-list-item-trailing.ts +36 -36
- package/src/list/mdc-list-item/mdc-list-item.html +13 -13
- package/src/list/mdc-list-item-overline-text.ts +8 -8
- package/src/list/mdc-list-item-primary-text.ts +11 -11
- package/src/list/mdc-list-item-secondary-text.ts +11 -11
- package/src/list/mdc-list.html +5 -5
- package/src/list/mdc-list.ts +300 -300
- package/src/lookup/discardable-promise.ts +24 -24
- package/src/lookup/mdc-lookup-configuration.ts +11 -11
- package/src/lookup/mdc-lookup.html +27 -27
- package/src/lookup/mdc-lookup.ts +5 -5
- package/src/mdc-configuration.ts +2 -0
- package/src/menu/mdc-menu-selection-group-icon.ts +11 -11
- package/src/menu/mdc-menu-selection-group.ts +4 -4
- package/src/menu/mdc-menu.html +6 -6
- package/src/menu-surface/mdc-menu-surface-anchor.ts +12 -12
- package/src/menu-surface/mdc-menu-surface.ts +275 -275
- package/src/notched-outline/mdc-notched-outline.html +7 -7
- package/src/notched-outline/mdc-notched-outline.ts +60 -60
- package/src/radio/mdc-radio.html +9 -9
- package/src/radio/mdc-radio.ts +162 -162
- package/src/resource.d.ts +22 -22
- package/src/ripple/mdc-ripple.ts +114 -114
- package/src/segmented-button/mdc-segmented-button-segment/enhance-mdc-segmented-button-segment.ts +8 -8
- package/src/segmented-button/mdc-segmented-button-segment/mdc-segmented-button-segment.html +11 -11
- package/src/segmented-button/mdc-segmented-button.html +3 -3
- package/src/segmented-button/mdc-segmented-button.ts +89 -89
- package/src/select/mdc-default-select-configuration.ts +3 -3
- package/src/select/mdc-select-adapter-aurelia.ts +213 -213
- package/src/select/mdc-select-foundation-aurelia.ts +484 -484
- package/src/select/mdc-select-helper-text/mdc-select-helper-text.html +7 -7
- package/src/select/mdc-select-helper-text/mdc-select-helper-text.ts +55 -55
- package/src/select/mdc-select-icon.ts +41 -41
- package/src/select/mdc-select-value-observer.ts +347 -346
- package/src/select/mdc-select.html +38 -38
- package/src/select/mdc-select.ts +480 -480
- package/src/slider/mdc-slider-foundation-aurelia.ts +13 -13
- package/src/slider/mdc-slider.html +36 -36
- package/src/slider/mdc-slider.ts +409 -409
- package/src/slider/styles/_index.scss +1 -1
- package/src/slider/styles/mdc-slider.import.scss +1 -1
- package/src/slider/styles/mdc-slider.scss +8 -8
- package/src/snackbar/mdc-snackbar-service.ts +48 -48
- package/src/snackbar/mdc-snackbar.html +14 -14
- package/src/snackbar/mdc-snackbar.ts +109 -109
- package/src/switch/enhance-mdc-switch.ts +8 -8
- package/src/switch/mdc-switch.html +21 -21
- package/src/switch/mdc-switch.ts +86 -86
- package/src/tab-bar/indicator/mdc-tab-indicator.html +9 -9
- package/src/tab-bar/indicator/mdc-tab-indicator.ts +51 -51
- package/src/tab-bar/mdc-tab-bar.html +6 -6
- package/src/tab-bar/mdc-tab-bar.ts +119 -119
- package/src/tab-bar/scroller/mdc-tab-scroller.html +11 -11
- package/src/tab-bar/scroller/mdc-tab-scroller.ts +85 -85
- package/src/tab-bar/tab/mdc-tab.html +20 -20
- package/src/tab-bar/tab/mdc-tab.ts +118 -118
- package/src/text-field/enhance-mdc-text-field.ts +12 -12
- package/src/text-field/mdc-default-text-field-configuration.ts +3 -3
- package/src/text-field/mdc-inputmask.ts +45 -0
- package/src/text-field/mdc-text-field-character-counter.ts +32 -32
- package/src/text-field/mdc-text-field-helper-line/mdc-text-field-helper-line.html +7 -7
- package/src/text-field/mdc-text-field-helper-line/mdc-text-field-helper-line.ts +37 -37
- package/src/text-field/mdc-text-field-helper-text/mdc-text-field-helper-text.html +6 -6
- package/src/text-field/mdc-text-field-helper-text/mdc-text-field-helper-text.ts +47 -47
- package/src/text-field/mdc-text-field-icon.ts +59 -59
- package/src/text-field/mdc-text-field.html +29 -29
- package/src/text-field/mdc-text-field.ts +535 -535
- package/src/tooltip/mdc-default-tooltip-configuration.ts +5 -5
- package/src/tooltip/mdc-tooltip-attribute.ts +118 -118
- package/src/tooltip/mdc-tooltip.html +7 -7
- package/src/tooltip/mdc-tooltip.ts +6 -6
- package/src/top-app-bar/enhance-top-app-bar-actions.ts +9 -9
- package/src/top-app-bar/mdc-top-app-bar-action-item.ts +12 -12
- package/src/top-app-bar/mdc-top-app-bar-fixed-adjust.ts +13 -13
- package/src/top-app-bar/mdc-top-app-bar-nav-icon.ts +12 -12
- package/src/top-app-bar/mdc-top-app-bar-row.ts +7 -7
- package/src/top-app-bar/mdc-top-app-bar-section/mdc-top-app-bar-section.html +3 -3
- package/src/top-app-bar/mdc-top-app-bar-section/mdc-top-app-bar-section.ts +9 -9
- package/src/top-app-bar/mdc-top-app-bar-title.ts +7 -7
- package/src/top-app-bar/mdc-top-app-bar.html +9 -9
- package/src/top-app-bar/mdc-top-app-bar.ts +93 -93
- package/src/tree-view/i-tree-node.ts +8 -8
- package/src/tree-view/mdc-tree-node-meta.ts +11 -11
- package/src/tree-view/mdc-tree-node.ts +4 -4
- package/src/tree-view/node-filter.ts +12 -12
- package/src/tree-view/styles/_index.scss +1 -1
- package/src/tree-view/styles/_mixins.scss +145 -145
- package/src/tree-view/styles/_variables.scss +8 -8
- package/src/tree-view/styles/mdc-tree-view.import.scss +1 -1
- package/src/tree-view/styles/mdc-tree-view.scss +3 -3
- package/src/typography/mdc-typography.ts +130 -130
- package/src/validation/mdc-validation-controller-factory.ts +20 -20
- package/src/validation/mdc-validation-result-presenter.ts +36 -36
- package/src/validation/validate.ts +32 -0
- package/styles/mdc-all.scss +53 -52
- package/src/banner/doc/api.json +0 -1106
- package/src/base/doc/api.json +0 -1408
- package/src/button/doc/api.json +0 -621
- package/src/card/doc/api.json +0 -214
- package/src/checkbox/doc/api.json +0 -1320
- package/src/chips/doc/api.json +0 -2533
- package/src/circular-progress/doc/api.json +0 -1085
- package/src/data-table/doc/api.json +0 -2064
- package/src/dialog/doc/api.json +0 -1667
- package/src/drawer/doc/api.json +0 -1416
- package/src/elevation/doc/api.json +0 -317
- package/src/expandable/doc/api.json +0 -677
- package/src/fab/doc/api.json +0 -396
- package/src/floating-label/doc/api.json +0 -914
- package/src/form-field/doc/api.json +0 -948
- package/src/icon/doc/api.json +0 -224
- package/src/icon-button/doc/api.json +0 -1109
- package/src/image-list/doc/api.json +0 -438
- package/src/layout-grid/doc/api.json +0 -600
- package/src/line-ripple/doc/api.json +0 -857
- package/src/linear-progress/doc/api.json +0 -949
- package/src/list/doc/api.json +0 -5725
- package/src/lookup/doc/api.json +0 -2370
- package/src/menu/doc/api.json +0 -2246
- package/src/menu-surface/doc/api.json +0 -1800
- package/src/notched-outline/doc/api.json +0 -943
- package/src/radio/doc/api.json +0 -1159
- package/src/ripple/doc/api.json +0 -1212
- package/src/segmented-button/doc/api.json +0 -1937
- package/src/select/doc/api.json +0 -4247
- package/src/slider/doc/api.json +0 -1954
- package/src/snackbar/doc/api.json +0 -1699
- package/src/switch/doc/api.json +0 -899
- package/src/tab-bar/doc/api.json +0 -4253
- package/src/text-field/doc/api.json +0 -3179
- package/src/tooltip/doc/api.json +0 -2531
- package/src/top-app-bar/doc/api.json +0 -1752
- package/src/tree-view/doc/api.json +0 -1710
- package/src/typography/doc/api.json +0 -3058
- package/src/validation/doc/api.json +0 -371
|
@@ -1,484 +1,484 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2016 Google Inc.
|
|
4
|
-
*
|
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
* in the Software without restriction, including without limitation the rights
|
|
8
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
* furnished to do so, subject to the following conditions:
|
|
11
|
-
*
|
|
12
|
-
* The above copyright notice and this permission notice shall be included in
|
|
13
|
-
* all copies or substantial portions of the Software.
|
|
14
|
-
*
|
|
15
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
* THE SOFTWARE.
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
import { MDCFoundation } from '@material/base/foundation';
|
|
25
|
-
import { KEY, normalizeKey } from '@material/dom/keyboard';
|
|
26
|
-
import { Corner } from '@material/menu-surface/constants';
|
|
27
|
-
|
|
28
|
-
import { MDCSelectAdapterAurelia } from './mdc-select-adapter-aurelia';
|
|
29
|
-
import { cssClasses, numbers, strings, MDCSelectIconFoundation, MDCSelectHelperTextFoundation, MDCSelectFoundationMap } from '@material/select';
|
|
30
|
-
|
|
31
|
-
// !!! MODIFIED FOR AURELIA !!!
|
|
32
|
-
export class MDCSelectFoundationAurelia extends MDCFoundation<MDCSelectAdapterAurelia> {
|
|
33
|
-
static get cssClasses() {
|
|
34
|
-
return cssClasses;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
static get numbers() {
|
|
38
|
-
return numbers;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
static get strings() {
|
|
42
|
-
return strings;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* See {@link MDCSelectAdapter} for typing information on parameters and return types.
|
|
47
|
-
*/
|
|
48
|
-
static get defaultAdapter(): MDCSelectAdapterAurelia {
|
|
49
|
-
// tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
|
|
50
|
-
return {
|
|
51
|
-
addClass: () => undefined,
|
|
52
|
-
removeClass: () => undefined,
|
|
53
|
-
hasClass: () => false,
|
|
54
|
-
activateBottomLine: () => undefined,
|
|
55
|
-
deactivateBottomLine: () => undefined,
|
|
56
|
-
getSelectedIndex: () => -1,
|
|
57
|
-
setSelectedIndex: () => undefined,
|
|
58
|
-
hasLabel: () => false,
|
|
59
|
-
floatLabel: () => undefined,
|
|
60
|
-
getLabelWidth: () => 0,
|
|
61
|
-
setLabelRequired: () => undefined,
|
|
62
|
-
hasOutline: () => false,
|
|
63
|
-
notchOutline: () => undefined,
|
|
64
|
-
closeOutline: () => undefined,
|
|
65
|
-
setRippleCenter: () => undefined,
|
|
66
|
-
notifyChange: () => undefined,
|
|
67
|
-
setSelectedText: () => undefined,
|
|
68
|
-
isSelectAnchorFocused: () => false,
|
|
69
|
-
getSelectAnchorAttr: () => '',
|
|
70
|
-
setSelectAnchorAttr: () => undefined,
|
|
71
|
-
removeSelectAnchorAttr: () => undefined,
|
|
72
|
-
addMenuClass: () => undefined,
|
|
73
|
-
removeMenuClass: () => undefined,
|
|
74
|
-
openMenu: () => undefined,
|
|
75
|
-
closeMenu: () => undefined,
|
|
76
|
-
getAnchorElement: () => null,
|
|
77
|
-
setMenuAnchorElement: () => undefined,
|
|
78
|
-
setMenuAnchorCorner: () => undefined,
|
|
79
|
-
setMenuWrapFocus: () => undefined,
|
|
80
|
-
focusMenuItemAtIndex: () => undefined,
|
|
81
|
-
getMenuItemCount: () => 0,
|
|
82
|
-
getMenuItemValues: () => [],
|
|
83
|
-
getMenuItemTextAtIndex: () => '',
|
|
84
|
-
isTypeaheadInProgress: () => false,
|
|
85
|
-
typeaheadMatchItem: () => -1,
|
|
86
|
-
};
|
|
87
|
-
// tslint:enable:object-literal-sort-keys
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
private readonly leadingIcon: MDCSelectIconFoundation | undefined;
|
|
91
|
-
private readonly helperText: MDCSelectHelperTextFoundation | undefined;
|
|
92
|
-
|
|
93
|
-
// Disabled state
|
|
94
|
-
private disabled = false;
|
|
95
|
-
// isMenuOpen is used to track the state of the menu by listening to the
|
|
96
|
-
// MDCMenuSurface:closed event For reference, menu.open will return false if
|
|
97
|
-
// the menu is still closing, but isMenuOpen returns false only after the menu
|
|
98
|
-
// has closed
|
|
99
|
-
private isMenuOpen = false;
|
|
100
|
-
// By default, select is invalid if it is required but no value is selected.
|
|
101
|
-
private useDefaultValidation = true;
|
|
102
|
-
private customValidity = true;
|
|
103
|
-
private lastSelectedIndex = numbers.UNSET_INDEX;
|
|
104
|
-
|
|
105
|
-
/* istanbul ignore next: optional argument is not a branch statement */
|
|
106
|
-
/**
|
|
107
|
-
* @param adapter
|
|
108
|
-
* @param foundationMap Map from subcomponent names to their subfoundations.
|
|
109
|
-
*/
|
|
110
|
-
constructor(adapter?: Partial<MDCSelectAdapterAurelia>, foundationMap: Partial<MDCSelectFoundationMap> = {}) {
|
|
111
|
-
super({ ...MDCSelectFoundationAurelia.defaultAdapter, ...adapter });
|
|
112
|
-
|
|
113
|
-
this.leadingIcon = foundationMap.leadingIcon;
|
|
114
|
-
this.helperText = foundationMap.helperText;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Returns the index of the currently selected menu item, or -1 if none. */
|
|
118
|
-
getSelectedIndex(): number {
|
|
119
|
-
return this.adapter.getSelectedIndex();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
setSelectedIndex(index: number, closeMenu = false, skipNotify = false) {
|
|
123
|
-
if (index >= this.adapter.getMenuItemCount()) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// !!! MODIFIED FOR AURELIA TO SUPPORT TEXT IN "EMPTY" ITEMS !!!
|
|
128
|
-
const menuItemValues = this.adapter.getMenuItemValues();
|
|
129
|
-
if (index === numbers.UNSET_INDEX || menuItemValues[index] === undefined || menuItemValues[index] === null) {
|
|
130
|
-
this.adapter.setSelectedText('');
|
|
131
|
-
} else {
|
|
132
|
-
this.adapter.setSelectedText(
|
|
133
|
-
this.adapter.getMenuItemTextAtIndex(index).trim());
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
this.adapter.setSelectedIndex(index);
|
|
137
|
-
|
|
138
|
-
if (closeMenu) {
|
|
139
|
-
this.adapter.closeMenu();
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (!skipNotify && this.lastSelectedIndex !== index) {
|
|
143
|
-
this.handleChange();
|
|
144
|
-
}
|
|
145
|
-
this.lastSelectedIndex = index;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// !!! MODIFIED FOR AURELIA !!!
|
|
149
|
-
setValue(value: unknown, skipNotify = false) {
|
|
150
|
-
const index = this.adapter.getMenuItemValues().indexOf(value);
|
|
151
|
-
this.setSelectedIndex(index, /** closeMenu */ false, skipNotify);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// !!! MODIFIED FOR AURELIA !!!
|
|
155
|
-
getValue() {
|
|
156
|
-
const index = this.adapter.getSelectedIndex();
|
|
157
|
-
const menuItemValues = this.adapter.getMenuItemValues();
|
|
158
|
-
return index !== numbers.UNSET_INDEX ? menuItemValues[index] : undefined;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
getDisabled() {
|
|
162
|
-
return this.disabled;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
setDisabled(isDisabled: boolean) {
|
|
166
|
-
this.disabled = isDisabled;
|
|
167
|
-
if (this.disabled) {
|
|
168
|
-
this.adapter.addClass(cssClasses.DISABLED);
|
|
169
|
-
this.adapter.closeMenu();
|
|
170
|
-
} else {
|
|
171
|
-
this.adapter.removeClass(cssClasses.DISABLED);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (this.leadingIcon) {
|
|
175
|
-
this.leadingIcon.setDisabled(this.disabled);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
if (this.disabled) {
|
|
179
|
-
// Prevent click events from focusing select. Simply pointer-events: none
|
|
180
|
-
// is not enough since screenreader clicks may bypass this.
|
|
181
|
-
this.adapter.removeSelectAnchorAttr('tabindex');
|
|
182
|
-
} else {
|
|
183
|
-
this.adapter.setSelectAnchorAttr('tabindex', '0');
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
this.adapter.setSelectAnchorAttr('aria-disabled', this.disabled.toString());
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/** Opens the menu. */
|
|
190
|
-
openMenu() {
|
|
191
|
-
this.adapter.addClass(cssClasses.ACTIVATED);
|
|
192
|
-
this.adapter.openMenu();
|
|
193
|
-
this.isMenuOpen = true;
|
|
194
|
-
this.adapter.setSelectAnchorAttr('aria-expanded', 'true');
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* @param content Sets the content of the helper text.
|
|
199
|
-
*/
|
|
200
|
-
setHelperTextContent(content: string) {
|
|
201
|
-
if (this.helperText) {
|
|
202
|
-
this.helperText.setContent(content);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Re-calculates if the notched outline should be notched and if the label
|
|
208
|
-
* should float.
|
|
209
|
-
*/
|
|
210
|
-
layout() {
|
|
211
|
-
if (this.adapter.hasLabel()) {
|
|
212
|
-
const optionHasValue = this.getValue() !== undefined; // !!! MODIFIED FOR AURELIA !!!
|
|
213
|
-
const isFocused = this.adapter.hasClass(cssClasses.FOCUSED);
|
|
214
|
-
const shouldFloatAndNotch = optionHasValue || isFocused;
|
|
215
|
-
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
216
|
-
|
|
217
|
-
this.notchOutline(shouldFloatAndNotch);
|
|
218
|
-
this.adapter.floatLabel(shouldFloatAndNotch);
|
|
219
|
-
this.adapter.setLabelRequired(isRequired);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Synchronizes the list of options with the state of the foundation. Call
|
|
225
|
-
* this whenever menu options are dynamically updated.
|
|
226
|
-
*/
|
|
227
|
-
layoutOptions() {
|
|
228
|
-
const menuItemValues = this.adapter.getMenuItemValues();
|
|
229
|
-
const selectedIndex = menuItemValues.indexOf(this.getValue());
|
|
230
|
-
this.setSelectedIndex(
|
|
231
|
-
selectedIndex, /** closeMenu */ false, /** skipNotify */ true);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
handleMenuOpened() {
|
|
235
|
-
if (this.adapter.getMenuItemValues().length === 0) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Menu should open to the last selected element, should open to first menu item otherwise.
|
|
240
|
-
const selectedIndex = this.getSelectedIndex();
|
|
241
|
-
const focusItemIndex = selectedIndex >= 0 ? selectedIndex : 0;
|
|
242
|
-
this.adapter.focusMenuItemAtIndex(focusItemIndex);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
handleMenuClosed() {
|
|
246
|
-
this.adapter.removeClass(cssClasses.ACTIVATED);
|
|
247
|
-
this.isMenuOpen = false;
|
|
248
|
-
this.adapter.setSelectAnchorAttr('aria-expanded', 'false');
|
|
249
|
-
|
|
250
|
-
// Unfocus the select if menu is closed without a selection
|
|
251
|
-
if (!this.adapter.isSelectAnchorFocused()) {
|
|
252
|
-
this.blur();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Handles value changes, via change event or programmatic updates.
|
|
258
|
-
*/
|
|
259
|
-
handleChange() {
|
|
260
|
-
this.layout();
|
|
261
|
-
this.adapter.notifyChange(this.getValue());
|
|
262
|
-
|
|
263
|
-
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
264
|
-
if (isRequired && this.useDefaultValidation) {
|
|
265
|
-
this.setValid(this.isValid());
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
handleMenuItemAction(index: number) {
|
|
270
|
-
this.setSelectedIndex(index, /** closeMenu */ true);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Handles focus events from select element.
|
|
275
|
-
*/
|
|
276
|
-
handleFocus() {
|
|
277
|
-
this.adapter.addClass(cssClasses.FOCUSED);
|
|
278
|
-
this.layout();
|
|
279
|
-
|
|
280
|
-
this.adapter.activateBottomLine();
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Handles blur events from select element.
|
|
285
|
-
*/
|
|
286
|
-
handleBlur() {
|
|
287
|
-
if (this.isMenuOpen) {
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
this.blur();
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
handleClick(normalizedX: number) {
|
|
294
|
-
if (this.disabled) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (this.isMenuOpen) {
|
|
299
|
-
this.adapter.closeMenu();
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
this.adapter.setRippleCenter(normalizedX);
|
|
304
|
-
|
|
305
|
-
this.openMenu();
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Handles keydown events on select element. Depending on the type of
|
|
310
|
-
* character typed, does typeahead matching or opens menu.
|
|
311
|
-
*/
|
|
312
|
-
handleKeydown(event: KeyboardEvent) {
|
|
313
|
-
if (this.isMenuOpen || !this.adapter.hasClass(cssClasses.FOCUSED)) {
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
const isEnter = normalizeKey(event) === KEY.ENTER;
|
|
318
|
-
const isSpace = normalizeKey(event) === KEY.SPACEBAR;
|
|
319
|
-
const arrowUp = normalizeKey(event) === KEY.ARROW_UP;
|
|
320
|
-
const arrowDown = normalizeKey(event) === KEY.ARROW_DOWN;
|
|
321
|
-
|
|
322
|
-
// Typeahead
|
|
323
|
-
if (!isSpace && event.key && event.key.length === 1 ||
|
|
324
|
-
isSpace && this.adapter.isTypeaheadInProgress()) {
|
|
325
|
-
const key = isSpace ? ' ' : event.key;
|
|
326
|
-
const typeaheadNextIndex =
|
|
327
|
-
this.adapter.typeaheadMatchItem(key, this.getSelectedIndex());
|
|
328
|
-
if (typeaheadNextIndex >= 0) {
|
|
329
|
-
this.setSelectedIndex(typeaheadNextIndex);
|
|
330
|
-
}
|
|
331
|
-
event.preventDefault();
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
if (!isEnter && !isSpace && !arrowUp && !arrowDown) {
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// Increment/decrement index as necessary and open menu.
|
|
340
|
-
if (arrowUp && this.getSelectedIndex() > 0) {
|
|
341
|
-
this.setSelectedIndex(this.getSelectedIndex() - 1);
|
|
342
|
-
} else if (
|
|
343
|
-
arrowDown &&
|
|
344
|
-
this.getSelectedIndex() < this.adapter.getMenuItemCount() - 1) {
|
|
345
|
-
this.setSelectedIndex(this.getSelectedIndex() + 1);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
this.openMenu();
|
|
349
|
-
event.preventDefault();
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/**
|
|
353
|
-
* Opens/closes the notched outline.
|
|
354
|
-
*/
|
|
355
|
-
notchOutline(openNotch: boolean) {
|
|
356
|
-
if (!this.adapter.hasOutline()) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
const isFocused = this.adapter.hasClass(cssClasses.FOCUSED);
|
|
360
|
-
|
|
361
|
-
if (openNotch) {
|
|
362
|
-
const labelScale = numbers.LABEL_SCALE;
|
|
363
|
-
const labelWidth = this.adapter.getLabelWidth() * labelScale;
|
|
364
|
-
this.adapter.notchOutline(labelWidth);
|
|
365
|
-
} else if (!isFocused) {
|
|
366
|
-
this.adapter.closeOutline();
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* Sets the aria label of the leading icon.
|
|
372
|
-
*/
|
|
373
|
-
setLeadingIconAriaLabel(label: string) {
|
|
374
|
-
if (this.leadingIcon) {
|
|
375
|
-
this.leadingIcon.setAriaLabel(label);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
* Sets the text content of the leading icon.
|
|
381
|
-
*/
|
|
382
|
-
setLeadingIconContent(content: string) {
|
|
383
|
-
if (this.leadingIcon) {
|
|
384
|
-
this.leadingIcon.setContent(content);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
setUseDefaultValidation(useDefaultValidation: boolean) {
|
|
389
|
-
this.useDefaultValidation = useDefaultValidation;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
setValid(isValid: boolean) {
|
|
393
|
-
if (!this.useDefaultValidation) {
|
|
394
|
-
this.customValidity = isValid;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
this.adapter.setSelectAnchorAttr('aria-invalid', (!isValid).toString());
|
|
398
|
-
if (isValid) {
|
|
399
|
-
this.adapter.removeClass(cssClasses.INVALID);
|
|
400
|
-
this.adapter.removeMenuClass(cssClasses.MENU_INVALID);
|
|
401
|
-
} else {
|
|
402
|
-
this.adapter.addClass(cssClasses.INVALID);
|
|
403
|
-
this.adapter.addMenuClass(cssClasses.MENU_INVALID);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
this.syncHelperTextValidity(isValid);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
isValid() {
|
|
410
|
-
if (this.useDefaultValidation &&
|
|
411
|
-
this.adapter.hasClass(cssClasses.REQUIRED) &&
|
|
412
|
-
!this.adapter.hasClass(cssClasses.DISABLED)) {
|
|
413
|
-
// See notes for required attribute under https://www.w3.org/TR/html52/sec-forms.html#the-select-element
|
|
414
|
-
// TL;DR: Invalid if no index is selected, or if the first index is selected and has an empty value.
|
|
415
|
-
return this.getSelectedIndex() !== numbers.UNSET_INDEX &&
|
|
416
|
-
(this.getSelectedIndex() !== 0 || Boolean(this.getValue()));
|
|
417
|
-
}
|
|
418
|
-
return this.customValidity;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
setRequired(isRequired: boolean) {
|
|
422
|
-
if (isRequired) {
|
|
423
|
-
this.adapter.addClass(cssClasses.REQUIRED);
|
|
424
|
-
} else {
|
|
425
|
-
this.adapter.removeClass(cssClasses.REQUIRED);
|
|
426
|
-
}
|
|
427
|
-
this.adapter.setSelectAnchorAttr('aria-required', isRequired.toString());
|
|
428
|
-
this.adapter.setLabelRequired(isRequired);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
getRequired() {
|
|
432
|
-
return this.adapter.getSelectAnchorAttr('aria-required') === 'true';
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
init() {
|
|
436
|
-
const anchorEl = this.adapter.getAnchorElement();
|
|
437
|
-
if (anchorEl) {
|
|
438
|
-
this.adapter.setMenuAnchorElement(anchorEl);
|
|
439
|
-
this.adapter.setMenuAnchorCorner(Corner.BOTTOM_START);
|
|
440
|
-
}
|
|
441
|
-
this.adapter.setMenuWrapFocus(false);
|
|
442
|
-
|
|
443
|
-
this.setDisabled(this.adapter.hasClass(cssClasses.DISABLED));
|
|
444
|
-
this.syncHelperTextValidity(!this.adapter.hasClass(cssClasses.INVALID));
|
|
445
|
-
this.layout();
|
|
446
|
-
this.layoutOptions();
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/**
|
|
450
|
-
* Unfocuses the select component.
|
|
451
|
-
*/
|
|
452
|
-
private blur() {
|
|
453
|
-
this.adapter.removeClass(cssClasses.FOCUSED);
|
|
454
|
-
this.layout();
|
|
455
|
-
this.adapter.deactivateBottomLine();
|
|
456
|
-
|
|
457
|
-
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
458
|
-
if (isRequired && this.useDefaultValidation) {
|
|
459
|
-
this.setValid(this.isValid());
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
private syncHelperTextValidity(isValid: boolean) {
|
|
464
|
-
if (!this.helperText) {
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
this.helperText.setValidity(isValid);
|
|
469
|
-
|
|
470
|
-
const helperTextVisible = this.helperText.isVisible();
|
|
471
|
-
const helperTextId = this.helperText.getId();
|
|
472
|
-
|
|
473
|
-
if (helperTextVisible && helperTextId) {
|
|
474
|
-
this.adapter.setSelectAnchorAttr(strings.ARIA_DESCRIBEDBY, helperTextId);
|
|
475
|
-
} else {
|
|
476
|
-
// Needed because screenreaders will read labels pointed to by
|
|
477
|
-
// `aria-describedby` even if they are `aria-hidden`.
|
|
478
|
-
this.adapter.removeSelectAnchorAttr(strings.ARIA_DESCRIBEDBY);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
|
|
484
|
-
export default MDCSelectFoundationAurelia;
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2016 Google Inc.
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
* furnished to do so, subject to the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice shall be included in
|
|
13
|
+
* all copies or substantial portions of the Software.
|
|
14
|
+
*
|
|
15
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
* THE SOFTWARE.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { MDCFoundation } from '@material/base/foundation';
|
|
25
|
+
import { KEY, normalizeKey } from '@material/dom/keyboard';
|
|
26
|
+
import { Corner } from '@material/menu-surface/constants';
|
|
27
|
+
|
|
28
|
+
import { MDCSelectAdapterAurelia } from './mdc-select-adapter-aurelia';
|
|
29
|
+
import { cssClasses, numbers, strings, MDCSelectIconFoundation, MDCSelectHelperTextFoundation, MDCSelectFoundationMap } from '@material/select';
|
|
30
|
+
|
|
31
|
+
// !!! MODIFIED FOR AURELIA !!!
|
|
32
|
+
export class MDCSelectFoundationAurelia extends MDCFoundation<MDCSelectAdapterAurelia> {
|
|
33
|
+
static get cssClasses() {
|
|
34
|
+
return cssClasses;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static get numbers() {
|
|
38
|
+
return numbers;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static get strings() {
|
|
42
|
+
return strings;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* See {@link MDCSelectAdapter} for typing information on parameters and return types.
|
|
47
|
+
*/
|
|
48
|
+
static get defaultAdapter(): MDCSelectAdapterAurelia {
|
|
49
|
+
// tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
|
|
50
|
+
return {
|
|
51
|
+
addClass: () => undefined,
|
|
52
|
+
removeClass: () => undefined,
|
|
53
|
+
hasClass: () => false,
|
|
54
|
+
activateBottomLine: () => undefined,
|
|
55
|
+
deactivateBottomLine: () => undefined,
|
|
56
|
+
getSelectedIndex: () => -1,
|
|
57
|
+
setSelectedIndex: () => undefined,
|
|
58
|
+
hasLabel: () => false,
|
|
59
|
+
floatLabel: () => undefined,
|
|
60
|
+
getLabelWidth: () => 0,
|
|
61
|
+
setLabelRequired: () => undefined,
|
|
62
|
+
hasOutline: () => false,
|
|
63
|
+
notchOutline: () => undefined,
|
|
64
|
+
closeOutline: () => undefined,
|
|
65
|
+
setRippleCenter: () => undefined,
|
|
66
|
+
notifyChange: () => undefined,
|
|
67
|
+
setSelectedText: () => undefined,
|
|
68
|
+
isSelectAnchorFocused: () => false,
|
|
69
|
+
getSelectAnchorAttr: () => '',
|
|
70
|
+
setSelectAnchorAttr: () => undefined,
|
|
71
|
+
removeSelectAnchorAttr: () => undefined,
|
|
72
|
+
addMenuClass: () => undefined,
|
|
73
|
+
removeMenuClass: () => undefined,
|
|
74
|
+
openMenu: () => undefined,
|
|
75
|
+
closeMenu: () => undefined,
|
|
76
|
+
getAnchorElement: () => null,
|
|
77
|
+
setMenuAnchorElement: () => undefined,
|
|
78
|
+
setMenuAnchorCorner: () => undefined,
|
|
79
|
+
setMenuWrapFocus: () => undefined,
|
|
80
|
+
focusMenuItemAtIndex: () => undefined,
|
|
81
|
+
getMenuItemCount: () => 0,
|
|
82
|
+
getMenuItemValues: () => [],
|
|
83
|
+
getMenuItemTextAtIndex: () => '',
|
|
84
|
+
isTypeaheadInProgress: () => false,
|
|
85
|
+
typeaheadMatchItem: () => -1,
|
|
86
|
+
};
|
|
87
|
+
// tslint:enable:object-literal-sort-keys
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private readonly leadingIcon: MDCSelectIconFoundation | undefined;
|
|
91
|
+
private readonly helperText: MDCSelectHelperTextFoundation | undefined;
|
|
92
|
+
|
|
93
|
+
// Disabled state
|
|
94
|
+
private disabled = false;
|
|
95
|
+
// isMenuOpen is used to track the state of the menu by listening to the
|
|
96
|
+
// MDCMenuSurface:closed event For reference, menu.open will return false if
|
|
97
|
+
// the menu is still closing, but isMenuOpen returns false only after the menu
|
|
98
|
+
// has closed
|
|
99
|
+
private isMenuOpen = false;
|
|
100
|
+
// By default, select is invalid if it is required but no value is selected.
|
|
101
|
+
private useDefaultValidation = true;
|
|
102
|
+
private customValidity = true;
|
|
103
|
+
private lastSelectedIndex = numbers.UNSET_INDEX;
|
|
104
|
+
|
|
105
|
+
/* istanbul ignore next: optional argument is not a branch statement */
|
|
106
|
+
/**
|
|
107
|
+
* @param adapter
|
|
108
|
+
* @param foundationMap Map from subcomponent names to their subfoundations.
|
|
109
|
+
*/
|
|
110
|
+
constructor(adapter?: Partial<MDCSelectAdapterAurelia>, foundationMap: Partial<MDCSelectFoundationMap> = {}) {
|
|
111
|
+
super({ ...MDCSelectFoundationAurelia.defaultAdapter, ...adapter });
|
|
112
|
+
|
|
113
|
+
this.leadingIcon = foundationMap.leadingIcon;
|
|
114
|
+
this.helperText = foundationMap.helperText;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Returns the index of the currently selected menu item, or -1 if none. */
|
|
118
|
+
getSelectedIndex(): number {
|
|
119
|
+
return this.adapter.getSelectedIndex();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
setSelectedIndex(index: number, closeMenu = false, skipNotify = false) {
|
|
123
|
+
if (index >= this.adapter.getMenuItemCount()) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// !!! MODIFIED FOR AURELIA TO SUPPORT TEXT IN "EMPTY" ITEMS !!!
|
|
128
|
+
const menuItemValues = this.adapter.getMenuItemValues();
|
|
129
|
+
if (index === numbers.UNSET_INDEX || menuItemValues[index] === undefined || menuItemValues[index] === null) {
|
|
130
|
+
this.adapter.setSelectedText('');
|
|
131
|
+
} else {
|
|
132
|
+
this.adapter.setSelectedText(
|
|
133
|
+
this.adapter.getMenuItemTextAtIndex(index).trim());
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
this.adapter.setSelectedIndex(index);
|
|
137
|
+
|
|
138
|
+
if (closeMenu) {
|
|
139
|
+
this.adapter.closeMenu();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (!skipNotify && this.lastSelectedIndex !== index) {
|
|
143
|
+
this.handleChange();
|
|
144
|
+
}
|
|
145
|
+
this.lastSelectedIndex = index;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// !!! MODIFIED FOR AURELIA !!!
|
|
149
|
+
setValue(value: unknown, skipNotify = false) {
|
|
150
|
+
const index = this.adapter.getMenuItemValues().indexOf(value);
|
|
151
|
+
this.setSelectedIndex(index, /** closeMenu */ false, skipNotify);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// !!! MODIFIED FOR AURELIA !!!
|
|
155
|
+
getValue() {
|
|
156
|
+
const index = this.adapter.getSelectedIndex();
|
|
157
|
+
const menuItemValues = this.adapter.getMenuItemValues();
|
|
158
|
+
return index !== numbers.UNSET_INDEX ? menuItemValues[index] : undefined;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
getDisabled() {
|
|
162
|
+
return this.disabled;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
setDisabled(isDisabled: boolean) {
|
|
166
|
+
this.disabled = isDisabled;
|
|
167
|
+
if (this.disabled) {
|
|
168
|
+
this.adapter.addClass(cssClasses.DISABLED);
|
|
169
|
+
this.adapter.closeMenu();
|
|
170
|
+
} else {
|
|
171
|
+
this.adapter.removeClass(cssClasses.DISABLED);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (this.leadingIcon) {
|
|
175
|
+
this.leadingIcon.setDisabled(this.disabled);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (this.disabled) {
|
|
179
|
+
// Prevent click events from focusing select. Simply pointer-events: none
|
|
180
|
+
// is not enough since screenreader clicks may bypass this.
|
|
181
|
+
this.adapter.removeSelectAnchorAttr('tabindex');
|
|
182
|
+
} else {
|
|
183
|
+
this.adapter.setSelectAnchorAttr('tabindex', '0');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
this.adapter.setSelectAnchorAttr('aria-disabled', this.disabled.toString());
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Opens the menu. */
|
|
190
|
+
openMenu() {
|
|
191
|
+
this.adapter.addClass(cssClasses.ACTIVATED);
|
|
192
|
+
this.adapter.openMenu();
|
|
193
|
+
this.isMenuOpen = true;
|
|
194
|
+
this.adapter.setSelectAnchorAttr('aria-expanded', 'true');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @param content Sets the content of the helper text.
|
|
199
|
+
*/
|
|
200
|
+
setHelperTextContent(content: string) {
|
|
201
|
+
if (this.helperText) {
|
|
202
|
+
this.helperText.setContent(content);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Re-calculates if the notched outline should be notched and if the label
|
|
208
|
+
* should float.
|
|
209
|
+
*/
|
|
210
|
+
layout() {
|
|
211
|
+
if (this.adapter.hasLabel()) {
|
|
212
|
+
const optionHasValue = this.getValue() !== undefined; // !!! MODIFIED FOR AURELIA !!!
|
|
213
|
+
const isFocused = this.adapter.hasClass(cssClasses.FOCUSED);
|
|
214
|
+
const shouldFloatAndNotch = optionHasValue || isFocused;
|
|
215
|
+
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
216
|
+
|
|
217
|
+
this.notchOutline(shouldFloatAndNotch);
|
|
218
|
+
this.adapter.floatLabel(shouldFloatAndNotch);
|
|
219
|
+
this.adapter.setLabelRequired(isRequired);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Synchronizes the list of options with the state of the foundation. Call
|
|
225
|
+
* this whenever menu options are dynamically updated.
|
|
226
|
+
*/
|
|
227
|
+
layoutOptions() {
|
|
228
|
+
const menuItemValues = this.adapter.getMenuItemValues();
|
|
229
|
+
const selectedIndex = menuItemValues.indexOf(this.getValue());
|
|
230
|
+
this.setSelectedIndex(
|
|
231
|
+
selectedIndex, /** closeMenu */ false, /** skipNotify */ true);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
handleMenuOpened() {
|
|
235
|
+
if (this.adapter.getMenuItemValues().length === 0) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Menu should open to the last selected element, should open to first menu item otherwise.
|
|
240
|
+
const selectedIndex = this.getSelectedIndex();
|
|
241
|
+
const focusItemIndex = selectedIndex >= 0 ? selectedIndex : 0;
|
|
242
|
+
this.adapter.focusMenuItemAtIndex(focusItemIndex);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
handleMenuClosed() {
|
|
246
|
+
this.adapter.removeClass(cssClasses.ACTIVATED);
|
|
247
|
+
this.isMenuOpen = false;
|
|
248
|
+
this.adapter.setSelectAnchorAttr('aria-expanded', 'false');
|
|
249
|
+
|
|
250
|
+
// Unfocus the select if menu is closed without a selection
|
|
251
|
+
if (!this.adapter.isSelectAnchorFocused()) {
|
|
252
|
+
this.blur();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Handles value changes, via change event or programmatic updates.
|
|
258
|
+
*/
|
|
259
|
+
handleChange() {
|
|
260
|
+
this.layout();
|
|
261
|
+
this.adapter.notifyChange(this.getValue());
|
|
262
|
+
|
|
263
|
+
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
264
|
+
if (isRequired && this.useDefaultValidation) {
|
|
265
|
+
this.setValid(this.isValid());
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
handleMenuItemAction(index: number) {
|
|
270
|
+
this.setSelectedIndex(index, /** closeMenu */ true);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Handles focus events from select element.
|
|
275
|
+
*/
|
|
276
|
+
handleFocus() {
|
|
277
|
+
this.adapter.addClass(cssClasses.FOCUSED);
|
|
278
|
+
this.layout();
|
|
279
|
+
|
|
280
|
+
this.adapter.activateBottomLine();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Handles blur events from select element.
|
|
285
|
+
*/
|
|
286
|
+
handleBlur() {
|
|
287
|
+
if (this.isMenuOpen) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
this.blur();
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
handleClick(normalizedX: number) {
|
|
294
|
+
if (this.disabled) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (this.isMenuOpen) {
|
|
299
|
+
this.adapter.closeMenu();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
this.adapter.setRippleCenter(normalizedX);
|
|
304
|
+
|
|
305
|
+
this.openMenu();
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Handles keydown events on select element. Depending on the type of
|
|
310
|
+
* character typed, does typeahead matching or opens menu.
|
|
311
|
+
*/
|
|
312
|
+
handleKeydown(event: KeyboardEvent) {
|
|
313
|
+
if (this.isMenuOpen || !this.adapter.hasClass(cssClasses.FOCUSED)) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const isEnter = normalizeKey(event) === KEY.ENTER;
|
|
318
|
+
const isSpace = normalizeKey(event) === KEY.SPACEBAR;
|
|
319
|
+
const arrowUp = normalizeKey(event) === KEY.ARROW_UP;
|
|
320
|
+
const arrowDown = normalizeKey(event) === KEY.ARROW_DOWN;
|
|
321
|
+
|
|
322
|
+
// Typeahead
|
|
323
|
+
if (!isSpace && event.key && event.key.length === 1 ||
|
|
324
|
+
isSpace && this.adapter.isTypeaheadInProgress()) {
|
|
325
|
+
const key = isSpace ? ' ' : event.key;
|
|
326
|
+
const typeaheadNextIndex =
|
|
327
|
+
this.adapter.typeaheadMatchItem(key, this.getSelectedIndex());
|
|
328
|
+
if (typeaheadNextIndex >= 0) {
|
|
329
|
+
this.setSelectedIndex(typeaheadNextIndex);
|
|
330
|
+
}
|
|
331
|
+
event.preventDefault();
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (!isEnter && !isSpace && !arrowUp && !arrowDown) {
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Increment/decrement index as necessary and open menu.
|
|
340
|
+
if (arrowUp && this.getSelectedIndex() > 0) {
|
|
341
|
+
this.setSelectedIndex(this.getSelectedIndex() - 1);
|
|
342
|
+
} else if (
|
|
343
|
+
arrowDown &&
|
|
344
|
+
this.getSelectedIndex() < this.adapter.getMenuItemCount() - 1) {
|
|
345
|
+
this.setSelectedIndex(this.getSelectedIndex() + 1);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
this.openMenu();
|
|
349
|
+
event.preventDefault();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Opens/closes the notched outline.
|
|
354
|
+
*/
|
|
355
|
+
notchOutline(openNotch: boolean) {
|
|
356
|
+
if (!this.adapter.hasOutline()) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
const isFocused = this.adapter.hasClass(cssClasses.FOCUSED);
|
|
360
|
+
|
|
361
|
+
if (openNotch) {
|
|
362
|
+
const labelScale = numbers.LABEL_SCALE;
|
|
363
|
+
const labelWidth = this.adapter.getLabelWidth() * labelScale;
|
|
364
|
+
this.adapter.notchOutline(labelWidth);
|
|
365
|
+
} else if (!isFocused) {
|
|
366
|
+
this.adapter.closeOutline();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Sets the aria label of the leading icon.
|
|
372
|
+
*/
|
|
373
|
+
setLeadingIconAriaLabel(label: string) {
|
|
374
|
+
if (this.leadingIcon) {
|
|
375
|
+
this.leadingIcon.setAriaLabel(label);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Sets the text content of the leading icon.
|
|
381
|
+
*/
|
|
382
|
+
setLeadingIconContent(content: string) {
|
|
383
|
+
if (this.leadingIcon) {
|
|
384
|
+
this.leadingIcon.setContent(content);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
setUseDefaultValidation(useDefaultValidation: boolean) {
|
|
389
|
+
this.useDefaultValidation = useDefaultValidation;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
setValid(isValid: boolean) {
|
|
393
|
+
if (!this.useDefaultValidation) {
|
|
394
|
+
this.customValidity = isValid;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
this.adapter.setSelectAnchorAttr('aria-invalid', (!isValid).toString());
|
|
398
|
+
if (isValid) {
|
|
399
|
+
this.adapter.removeClass(cssClasses.INVALID);
|
|
400
|
+
this.adapter.removeMenuClass(cssClasses.MENU_INVALID);
|
|
401
|
+
} else {
|
|
402
|
+
this.adapter.addClass(cssClasses.INVALID);
|
|
403
|
+
this.adapter.addMenuClass(cssClasses.MENU_INVALID);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
this.syncHelperTextValidity(isValid);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
isValid() {
|
|
410
|
+
if (this.useDefaultValidation &&
|
|
411
|
+
this.adapter.hasClass(cssClasses.REQUIRED) &&
|
|
412
|
+
!this.adapter.hasClass(cssClasses.DISABLED)) {
|
|
413
|
+
// See notes for required attribute under https://www.w3.org/TR/html52/sec-forms.html#the-select-element
|
|
414
|
+
// TL;DR: Invalid if no index is selected, or if the first index is selected and has an empty value.
|
|
415
|
+
return this.getSelectedIndex() !== numbers.UNSET_INDEX &&
|
|
416
|
+
(this.getSelectedIndex() !== 0 || Boolean(this.getValue()));
|
|
417
|
+
}
|
|
418
|
+
return this.customValidity;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
setRequired(isRequired: boolean) {
|
|
422
|
+
if (isRequired) {
|
|
423
|
+
this.adapter.addClass(cssClasses.REQUIRED);
|
|
424
|
+
} else {
|
|
425
|
+
this.adapter.removeClass(cssClasses.REQUIRED);
|
|
426
|
+
}
|
|
427
|
+
this.adapter.setSelectAnchorAttr('aria-required', isRequired.toString());
|
|
428
|
+
this.adapter.setLabelRequired(isRequired);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
getRequired() {
|
|
432
|
+
return this.adapter.getSelectAnchorAttr('aria-required') === 'true';
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
init() {
|
|
436
|
+
const anchorEl = this.adapter.getAnchorElement();
|
|
437
|
+
if (anchorEl) {
|
|
438
|
+
this.adapter.setMenuAnchorElement(anchorEl);
|
|
439
|
+
this.adapter.setMenuAnchorCorner(Corner.BOTTOM_START);
|
|
440
|
+
}
|
|
441
|
+
this.adapter.setMenuWrapFocus(false);
|
|
442
|
+
|
|
443
|
+
this.setDisabled(this.adapter.hasClass(cssClasses.DISABLED));
|
|
444
|
+
this.syncHelperTextValidity(!this.adapter.hasClass(cssClasses.INVALID));
|
|
445
|
+
this.layout();
|
|
446
|
+
this.layoutOptions();
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Unfocuses the select component.
|
|
451
|
+
*/
|
|
452
|
+
private blur() {
|
|
453
|
+
this.adapter.removeClass(cssClasses.FOCUSED);
|
|
454
|
+
this.layout();
|
|
455
|
+
this.adapter.deactivateBottomLine();
|
|
456
|
+
|
|
457
|
+
const isRequired = this.adapter.hasClass(cssClasses.REQUIRED);
|
|
458
|
+
if (isRequired && this.useDefaultValidation) {
|
|
459
|
+
this.setValid(this.isValid());
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
private syncHelperTextValidity(isValid: boolean) {
|
|
464
|
+
if (!this.helperText) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
this.helperText.setValidity(isValid);
|
|
469
|
+
|
|
470
|
+
const helperTextVisible = this.helperText.isVisible();
|
|
471
|
+
const helperTextId = this.helperText.getId();
|
|
472
|
+
|
|
473
|
+
if (helperTextVisible && helperTextId) {
|
|
474
|
+
this.adapter.setSelectAnchorAttr(strings.ARIA_DESCRIBEDBY, helperTextId);
|
|
475
|
+
} else {
|
|
476
|
+
// Needed because screenreaders will read labels pointed to by
|
|
477
|
+
// `aria-describedby` even if they are `aria-hidden`.
|
|
478
|
+
this.adapter.removeSelectAnchorAttr(strings.ARIA_DESCRIBEDBY);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
|
|
484
|
+
export default MDCSelectFoundationAurelia;
|