@material/web 1.0.0-pre.16 → 1.0.0-pre.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/all.d.ts +4 -2
- package/all.js +4 -2
- package/all.js.map +1 -1
- package/button/internal/_elevation.scss +4 -0
- package/button/internal/_shared.scss +5 -1
- package/button/internal/elevated-styles.css.js +1 -1
- package/button/internal/elevated-styles.css.js.map +1 -1
- package/button/internal/filled-styles.css.js +1 -1
- package/button/internal/filled-styles.css.js.map +1 -1
- package/button/internal/filled-tonal-styles.css.js +1 -1
- package/button/internal/filled-tonal-styles.css.js.map +1 -1
- package/button/internal/outlined-styles.css.js +1 -1
- package/button/internal/outlined-styles.css.js.map +1 -1
- package/button/internal/shared-elevation-styles.css.js +1 -1
- package/button/internal/shared-elevation-styles.css.js.map +1 -1
- package/button/internal/shared-styles.css.js +1 -1
- package/button/internal/shared-styles.css.js.map +1 -1
- package/button/internal/text-styles.css.js +1 -1
- package/button/internal/text-styles.css.js.map +1 -1
- package/checkbox/internal/_checkbox.scss +1 -1
- package/checkbox/internal/checkbox-styles.css.js +1 -1
- package/checkbox/internal/checkbox-styles.css.js.map +1 -1
- package/chips/internal/_elevated.scss +0 -4
- package/chips/internal/_shared.scss +10 -1
- package/chips/internal/assist-chip.d.ts +3 -1
- package/chips/internal/assist-chip.js +11 -8
- package/chips/internal/assist-chip.js.map +1 -1
- package/chips/internal/assist-styles.css.js +1 -1
- package/chips/internal/assist-styles.css.js.map +1 -1
- package/chips/internal/chip.d.ts +18 -10
- package/chips/internal/chip.js +38 -33
- package/chips/internal/chip.js.map +1 -1
- package/chips/internal/elevated-styles.css.js +1 -1
- package/chips/internal/elevated-styles.css.js.map +1 -1
- package/chips/internal/filter-chip.d.ts +6 -7
- package/chips/internal/filter-chip.js +13 -14
- package/chips/internal/filter-chip.js.map +1 -1
- package/chips/internal/filter-styles.css.js +1 -1
- package/chips/internal/filter-styles.css.js.map +1 -1
- package/chips/internal/input-chip.d.ts +4 -2
- package/chips/internal/input-chip.js +16 -12
- package/chips/internal/input-chip.js.map +1 -1
- package/chips/internal/input-styles.css.js +1 -1
- package/chips/internal/input-styles.css.js.map +1 -1
- package/chips/internal/multi-action-chip.d.ts +2 -3
- package/chips/internal/multi-action-chip.js +3 -3
- package/chips/internal/multi-action-chip.js.map +1 -1
- package/chips/internal/shared-styles.css.js +1 -1
- package/chips/internal/shared-styles.css.js.map +1 -1
- package/chips/internal/suggestion-styles.css.js +1 -1
- package/chips/internal/suggestion-styles.css.js.map +1 -1
- package/color/_color.scss +193 -0
- package/common.d.ts +2 -2
- package/common.js +2 -2
- package/common.js.map +1 -1
- package/dialog/internal/_dialog.scss +19 -4
- package/dialog/internal/dialog-styles.css.js +1 -1
- package/dialog/internal/dialog-styles.css.js.map +1 -1
- package/dialog/internal/dialog.d.ts +6 -0
- package/dialog/internal/dialog.js +36 -4
- package/dialog/internal/dialog.js.map +1 -1
- package/elevation/internal/elevation.d.ts +1 -0
- package/elevation/internal/elevation.js +6 -0
- package/elevation/internal/elevation.js.map +1 -1
- package/fab/internal/_shared.scss +4 -1
- package/fab/internal/fab-branded-styles.css.js +1 -1
- package/fab/internal/fab-branded-styles.css.js.map +1 -1
- package/fab/internal/fab-styles.css.js +1 -1
- package/fab/internal/fab-styles.css.js.map +1 -1
- package/fab/internal/shared-styles.css.js +1 -1
- package/fab/internal/shared-styles.css.js.map +1 -1
- package/field/internal/_content.scss +9 -1
- package/field/internal/_filled-field.scss +12 -0
- package/field/internal/_label.scss +4 -1
- package/field/internal/_outlined-field.scss +33 -0
- package/field/internal/_shared.scss +14 -6
- package/field/internal/_supporting-text.scss +4 -1
- package/field/internal/field.d.ts +2 -0
- package/field/internal/field.js +19 -0
- package/field/internal/field.js.map +1 -1
- package/field/internal/filled-styles.css.js +1 -1
- package/field/internal/filled-styles.css.js.map +1 -1
- package/field/internal/outlined-styles.css.js +1 -1
- package/field/internal/outlined-styles.css.js.map +1 -1
- package/field/internal/shared-styles.css.js +1 -1
- package/field/internal/shared-styles.css.js.map +1 -1
- package/focus/internal/focus-ring.d.ts +3 -1
- package/focus/internal/focus-ring.js +9 -0
- package/focus/internal/focus-ring.js.map +1 -1
- package/icon/internal/icon.js +4 -0
- package/icon/internal/icon.js.map +1 -1
- package/iconbutton/internal/_icon-button.scss +8 -0
- package/iconbutton/internal/icon-button.d.ts +3 -3
- package/iconbutton/internal/icon-button.js +4 -4
- package/iconbutton/internal/icon-button.js.map +1 -1
- package/iconbutton/internal/standard-styles.css.js +1 -1
- package/iconbutton/internal/standard-styles.css.js.map +1 -1
- package/internal/aria/aria.d.ts +52 -1
- package/internal/aria/aria.js +146 -0
- package/internal/aria/aria.js.map +1 -1
- package/internal/controller/attachable-controller.d.ts +5 -4
- package/internal/controller/attachable-controller.js +8 -0
- package/internal/controller/attachable-controller.js.map +1 -1
- package/labs/badge/internal/_badge.scss +5 -1
- package/labs/badge/internal/badge-styles.css.js +1 -1
- package/labs/badge/internal/badge-styles.css.js.map +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.css.js +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.css.js.map +1 -1
- package/labs/navigationtab/internal/_navigation-tab.scss +4 -1
- package/labs/navigationtab/internal/navigation-tab-styles.css.js +1 -1
- package/labs/navigationtab/internal/navigation-tab-styles.css.js.map +1 -1
- package/labs/segmentedbutton/internal/_shared.scss +4 -1
- package/labs/segmentedbutton/internal/outlined-styles.css.js +1 -1
- package/labs/segmentedbutton/internal/outlined-styles.css.js.map +1 -1
- package/labs/segmentedbutton/internal/shared-styles.css.js +1 -1
- package/labs/segmentedbutton/internal/shared-styles.css.js.map +1 -1
- package/labs/segmentedbuttonset/internal/outlined-styles.css.js +1 -1
- package/labs/segmentedbuttonset/internal/outlined-styles.css.js.map +1 -1
- package/list/harness.js +1 -1
- package/list/harness.js.map +1 -1
- package/list/internal/_list.scss +1 -4
- package/list/internal/list-styles.css.js +1 -1
- package/list/internal/list-styles.css.js.map +1 -1
- package/list/internal/list.d.ts +1 -2
- package/list/internal/list.js +4 -6
- package/list/internal/list.js.map +1 -1
- package/list/internal/listitem/_list-item.scss +17 -5
- package/list/internal/listitem/list-item-styles.css.js +1 -1
- package/list/internal/listitem/list-item-styles.css.js.map +1 -1
- package/menu/harness.d.ts +1 -1
- package/menu/harness.js +3 -4
- package/menu/harness.js.map +1 -1
- package/menu/internal/_menu.scss +32 -26
- package/menu/internal/menu-styles.css.js +1 -1
- package/menu/internal/menu-styles.css.js.map +1 -1
- package/menu/internal/menu.d.ts +15 -4
- package/menu/internal/menu.js +27 -4
- package/menu/internal/menu.js.map +1 -1
- package/menu/internal/menuitem/menu-item.js +1 -1
- package/menu/internal/menuitem/menu-item.js.map +1 -1
- package/menu/internal/submenuitem/sub-menu-item.d.ts +3 -0
- package/menu/internal/submenuitem/sub-menu-item.js +42 -12
- package/menu/internal/submenuitem/sub-menu-item.js.map +1 -1
- package/menu/internal/typeaheadController.js +2 -1
- package/menu/internal/typeaheadController.js.map +1 -1
- package/menu/menu.d.ts +12 -5
- package/menu/menu.js +12 -5
- package/menu/menu.js.map +1 -1
- package/menu/sub-menu-item.d.ts +3 -4
- package/menu/sub-menu-item.js +3 -4
- package/menu/sub-menu-item.js.map +1 -1
- package/package.json +10 -2
- package/progress/internal/_circular-progress.scss +4 -2
- package/progress/internal/_linear-progress.scss +2 -2
- package/progress/internal/circular-progress-styles.css.js +1 -1
- package/progress/internal/circular-progress-styles.css.js.map +1 -1
- package/radio/harness.d.ts +1 -1
- package/radio/harness.js +1 -1
- package/radio/harness.js.map +1 -1
- package/radio/internal/_radio.scss +4 -4
- package/radio/internal/radio-styles.css.js +1 -1
- package/radio/internal/radio-styles.css.js.map +1 -1
- package/radio/internal/radio.d.ts +3 -5
- package/radio/internal/radio.js +37 -32
- package/radio/internal/radio.js.map +1 -1
- package/radio/internal/single-selection-controller.js +4 -3
- package/radio/internal/single-selection-controller.js.map +1 -1
- package/ripple/internal/ripple.d.ts +3 -1
- package/ripple/internal/ripple.js +9 -0
- package/ripple/internal/ripple.js.map +1 -1
- package/select/harness.d.ts +1 -1
- package/select/harness.js +1 -3
- package/select/harness.js.map +1 -1
- package/select/internal/_filled-select.scss +13 -3
- package/select/internal/_outlined-select.scss +13 -3
- package/select/internal/filled-select-styles.css.js +1 -1
- package/select/internal/filled-select-styles.css.js.map +1 -1
- package/select/internal/outlined-select-styles.css.js +1 -1
- package/select/internal/outlined-select-styles.css.js.map +1 -1
- package/select/internal/select.d.ts +8 -2
- package/select/internal/select.js +21 -8
- package/select/internal/select.js.map +1 -1
- package/slider/internal/_slider.scss +9 -4
- package/slider/internal/forced-colors-styles.css.js +1 -1
- package/slider/internal/forced-colors-styles.css.js.map +1 -1
- package/slider/internal/forced-colors-styles.scss +31 -4
- package/slider/internal/slider-styles.css.js +1 -1
- package/slider/internal/slider-styles.css.js.map +1 -1
- package/switch/harness.d.ts +1 -1
- package/switch/harness.js +1 -1
- package/switch/harness.js.map +1 -1
- package/switch/internal/_handle.scss +22 -21
- package/switch/internal/_icon.scss +12 -12
- package/switch/internal/_switch.scss +11 -19
- package/switch/internal/_track.scss +12 -12
- package/switch/internal/forced-colors-styles.css.js +1 -1
- package/switch/internal/forced-colors-styles.css.js.map +1 -1
- package/switch/internal/forced-colors-styles.scss +1 -0
- package/switch/internal/switch-styles.css.js +1 -1
- package/switch/internal/switch-styles.css.js.map +1 -1
- package/switch/internal/switch.d.ts +72 -2
- package/switch/internal/switch.js +144 -30
- package/switch/internal/switch.js.map +1 -1
- package/tabs/{_tab.scss → _primary-tab.scss} +1 -1
- package/tabs/_secondary-tab.scss +6 -0
- package/tabs/harness.d.ts +2 -2
- package/tabs/harness.js +1 -2
- package/tabs/harness.js.map +1 -1
- package/tabs/internal/_primary-tab.scss +70 -0
- package/tabs/internal/_secondary-tab.scss +61 -0
- package/tabs/internal/_tab.scss +8 -157
- package/tabs/internal/_tabs.scss +9 -10
- package/tabs/internal/primary-tab-styles.css.d.ts +1 -0
- package/tabs/internal/primary-tab-styles.css.js +9 -0
- package/tabs/internal/primary-tab-styles.css.js.map +1 -0
- package/tabs/internal/primary-tab-styles.scss +10 -0
- package/tabs/internal/primary-tab.d.ts +20 -0
- package/tabs/internal/primary-tab.js +30 -0
- package/tabs/internal/primary-tab.js.map +1 -0
- package/tabs/internal/secondary-tab-styles.css.d.ts +1 -0
- package/tabs/internal/secondary-tab-styles.css.js +9 -0
- package/tabs/internal/secondary-tab-styles.css.js.map +1 -0
- package/tabs/internal/secondary-tab-styles.scss +10 -0
- package/tabs/internal/secondary-tab.d.ts +12 -0
- package/tabs/internal/secondary-tab.js +16 -0
- package/tabs/internal/secondary-tab.js.map +1 -0
- package/tabs/internal/tab-styles.css.js +1 -1
- package/tabs/internal/tab-styles.css.js.map +1 -1
- package/tabs/internal/tab.d.ts +16 -34
- package/tabs/internal/tab.js +81 -80
- package/tabs/internal/tab.js.map +1 -1
- package/tabs/internal/tabs-styles.css.js +1 -1
- package/tabs/internal/tabs-styles.css.js.map +1 -1
- package/tabs/internal/tabs.d.ts +6 -20
- package/tabs/internal/tabs.js +33 -66
- package/tabs/internal/tabs.js.map +1 -1
- package/tabs/{tab.d.ts → primary-tab.d.ts} +3 -4
- package/tabs/primary-tab.js +23 -0
- package/tabs/primary-tab.js.map +1 -0
- package/tabs/secondary-tab.d.ts +18 -0
- package/tabs/secondary-tab.js +23 -0
- package/tabs/secondary-tab.js.map +1 -0
- package/tabs/tabs.d.ts +0 -2
- package/tabs/tabs.js +0 -2
- package/tabs/tabs.js.map +1 -1
- package/textfield/internal/_filled-text-field.scss +12 -3
- package/textfield/internal/_outlined-text-field.scss +12 -3
- package/textfield/internal/filled-styles.css.js +1 -1
- package/textfield/internal/filled-styles.css.js.map +1 -1
- package/textfield/internal/outlined-styles.css.js +1 -1
- package/textfield/internal/outlined-styles.css.js.map +1 -1
- package/textfield/internal/text-field.d.ts +19 -0
- package/textfield/internal/text-field.js +20 -0
- package/textfield/internal/text-field.js.map +1 -1
- package/tokens/_index.scss +5 -6
- package/tokens/_md-comp-assist-chip.scss +6 -14
- package/tokens/_md-comp-badge.scss +1 -14
- package/tokens/{_md-comp-circular-progress-indicator.scss → _md-comp-circular-progress.scss} +3 -1
- package/tokens/_md-comp-dialog.scss +10 -17
- package/tokens/_md-comp-elevated-button.scss +5 -13
- package/tokens/_md-comp-fab-branded.scss +9 -10
- package/tokens/_md-comp-fab.scss +9 -10
- package/tokens/_md-comp-filled-button.scss +5 -13
- package/tokens/_md-comp-filled-field.scss +25 -6
- package/tokens/_md-comp-filled-select.scss +15 -15
- package/tokens/_md-comp-filled-text-field.scss +15 -19
- package/tokens/_md-comp-filled-tonal-button.scss +5 -13
- package/tokens/_md-comp-filter-chip.scss +5 -13
- package/tokens/_md-comp-input-chip.scss +5 -13
- package/tokens/_md-comp-list-item.scss +18 -37
- package/tokens/_md-comp-outlined-button.scss +5 -13
- package/tokens/_md-comp-outlined-field.scss +25 -6
- package/tokens/_md-comp-outlined-segmented-button.scss +5 -13
- package/tokens/_md-comp-outlined-select.scss +15 -15
- package/tokens/_md-comp-outlined-text-field.scss +15 -19
- package/tokens/_md-comp-primary-tab.scss +132 -0
- package/tokens/_md-comp-secondary-tab.scss +139 -0
- package/tokens/_md-comp-slider.scss +16 -16
- package/tokens/_md-comp-suggestion-chip.scss +5 -13
- package/tokens/_md-comp-test-table.scss +13 -2
- package/tokens/_md-comp-text-button.scss +5 -13
- package/tokens/_md-ref-palette.scss +101 -1
- package/tokens/_md-ref-typeface.scss +3 -0
- package/tokens/_md-sys-color.scss +57 -2
- package/tokens/_md-sys-typescale.scss +66 -5
- package/tabs/tab.js +0 -22
- package/tabs/tab.js.map +0 -1
- package/tokens/_md-comp-tab.scss +0 -285
- /package/tokens/{_md-comp-linear-progress-indicator.scss → _md-comp-linear-progress.scss} +0 -0
- /package/tokens/{_md-comp-radio-button.scss → _md-comp-radio.scss} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-styles.css.js","sourceRoot":"","sources":["shared-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{display:inline-flex}.field{display:flex;flex:1;flex-direction:column;writing-mode:horizontal-tb;max-width:100%}.container-overflow{border-start-start-radius:var(--_container-shape-start-start);border-start-end-radius:var(--_container-shape-start-end);border-end-end-radius:var(--_container-shape-end-end);border-end-start-radius:var(--_container-shape-end-start);display:flex;height:100%;position:relative}.container{align-items:center;border-radius:inherit;display:flex;flex:1;max-height:100%;min-height:100%;min-width:min-content;
|
|
1
|
+
{"version":3,"file":"shared-styles.css.js","sourceRoot":"","sources":["shared-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{display:inline-flex;resize:both}.field{display:flex;flex:1;flex-direction:column;writing-mode:horizontal-tb;max-width:100%}.container-overflow{border-start-start-radius:var(--_container-shape-start-start);border-start-end-radius:var(--_container-shape-start-end);border-end-end-radius:var(--_container-shape-end-end);border-end-start-radius:var(--_container-shape-end-start);display:flex;height:100%;position:relative}.container{align-items:center;border-radius:inherit;display:flex;flex:1;max-height:100%;min-height:100%;min-width:min-content;position:relative}.field,.container-overflow{resize:inherit}.resizable:not(.disabled) .container{resize:inherit;overflow:hidden}.disabled{pointer-events:none}.start,.middle,.end{display:flex;box-sizing:border-box;height:100%;position:relative}.start{color:var(--_leading-content-color)}.end{color:var(--_trailing-content-color)}.start,.end{align-items:center;justify-content:center}.with-start .start,.with-end .end{min-width:48px}.with-start .start{margin-inline-end:4px}.with-end .end{margin-inline-start:4px}.middle{align-items:stretch;align-self:baseline;flex:1}.content{color:var(--_content-color);display:flex;flex:1;opacity:0;transition:opacity 83ms cubic-bezier(0.2, 0, 0, 1)}.no-label .content,.focused .content,.populated .content{opacity:1;transition-delay:67ms}:is(.disabled,.disable-transitions) .content{transition:none}.content ::slotted(*){all:unset;color:currentColor;font-family:var(--_content-font);font-size:var(--_content-size);line-height:var(--_content-line-height);font-weight:var(--_content-weight);width:100%;white-space:pre-wrap}.content ::slotted(:not(textarea)){padding-top:var(--_top-space);padding-bottom:var(--_bottom-space)}.content ::slotted(textarea){margin-top:var(--_top-space);margin-bottom:var(--_bottom-space)}:hover .content{color:var(--_hover-content-color)}:hover .start{color:var(--_hover-leading-content-color)}:hover .end{color:var(--_hover-trailing-content-color)}.focused .content{color:var(--_focus-content-color)}.focused .start{color:var(--_focus-leading-content-color)}.focused .end{color:var(--_focus-trailing-content-color)}.disabled .content{color:var(--_disabled-content-color)}.disabled.no-label .content,.disabled.focused .content,.disabled.populated .content{opacity:var(--_disabled-content-opacity)}.disabled .start{color:var(--_disabled-leading-content-color);opacity:var(--_disabled-leading-content-opacity)}.disabled .end{color:var(--_disabled-trailing-content-color);opacity:var(--_disabled-trailing-content-opacity)}.error .content{color:var(--_error-content-color)}.error .start{color:var(--_error-leading-content-color)}.error .end{color:var(--_error-trailing-content-color)}.error:hover .content{color:var(--_error-hover-content-color)}.error:hover .start{color:var(--_error-hover-leading-content-color)}.error:hover .end{color:var(--_error-hover-trailing-content-color)}.error.focused .content{color:var(--_error-focus-content-color)}.error.focused .start{color:var(--_error-focus-leading-content-color)}.error.focused .end{color:var(--_error-focus-trailing-content-color)}.label{box-sizing:border-box;color:var(--_label-text-color);overflow:hidden;max-width:100%;text-overflow:ellipsis;white-space:nowrap;z-index:1;font-family:var(--_label-text-font);font-size:var(--_label-text-size);line-height:var(--_label-text-line-height);font-weight:var(--_label-text-weight);width:min-content}.label-wrapper{inset:0;pointer-events:none;position:absolute}.label.resting{position:absolute;top:var(--_top-space)}.label.floating{font-size:var(--_label-text-populated-size);line-height:var(--_label-text-populated-line-height);transform-origin:top left}.label.hidden{opacity:0}.no-label .label{display:none}.label-wrapper{inset:0;position:absolute;text-align:initial}:hover .label{color:var(--_hover-label-text-color)}.focused .label{color:var(--_focus-label-text-color)}.disabled .label{color:var(--_disabled-label-text-color)}.disabled .label:not(.hidden){opacity:var(--_disabled-label-text-opacity)}.error .label{color:var(--_error-label-text-color)}.error:hover .label{color:var(--_error-hover-label-text-color)}.error.focused .label{color:var(--_error-focus-label-text-color)}.supporting-text{color:var(--_supporting-text-color);display:flex;font-family:var(--_supporting-text-font);font-size:var(--_supporting-text-size);line-height:var(--_supporting-text-line-height);font-weight:var(--_supporting-text-weight);gap:16px;justify-content:space-between;padding-inline-start:var(--_supporting-text-leading-space);padding-inline-end:var(--_supporting-text-trailing-space);padding-top:var(--_supporting-text-top-space)}.supporting-text :nth-child(2){flex-shrink:0}:hover .supporting-text{color:var(--_hover-supporting-text-color)}.focus .supporting-text{color:var(--_focus-supporting-text-color)}.disabled .supporting-text{color:var(--_disabled-supporting-text-color);opacity:var(--_disabled-supporting-text-opacity)}.error .supporting-text{color:var(--_error-supporting-text-color)}.error:hover .supporting-text{color:var(--_error-hover-supporting-text-color)}.error.focus .supporting-text{color:var(--_error-focus-supporting-text-color)}/*# sourceMappingURL=shared-styles.css.map */\n`;\n "]}
|
|
@@ -19,10 +19,12 @@ export declare class FocusRing extends LitElement implements Attachable {
|
|
|
19
19
|
inward: boolean;
|
|
20
20
|
get htmlFor(): string | null;
|
|
21
21
|
set htmlFor(htmlFor: string | null);
|
|
22
|
-
get control(): HTMLElement;
|
|
22
|
+
get control(): HTMLElement | null;
|
|
23
|
+
set control(control: HTMLElement | null);
|
|
23
24
|
private readonly attachableController;
|
|
24
25
|
attach(control: HTMLElement): void;
|
|
25
26
|
detach(): void;
|
|
27
|
+
connectedCallback(): void;
|
|
26
28
|
/** @private */
|
|
27
29
|
handleEvent(event: FocusRingEvent): void;
|
|
28
30
|
private onControlChange;
|
|
@@ -38,12 +38,21 @@ export class FocusRing extends LitElement {
|
|
|
38
38
|
get control() {
|
|
39
39
|
return this.attachableController.control;
|
|
40
40
|
}
|
|
41
|
+
set control(control) {
|
|
42
|
+
this.attachableController.control = control;
|
|
43
|
+
}
|
|
41
44
|
attach(control) {
|
|
42
45
|
this.attachableController.attach(control);
|
|
43
46
|
}
|
|
44
47
|
detach() {
|
|
45
48
|
this.attachableController.detach();
|
|
46
49
|
}
|
|
50
|
+
connectedCallback() {
|
|
51
|
+
super.connectedCallback();
|
|
52
|
+
// Needed for VoiceOver, which will create a "group" if the element is a
|
|
53
|
+
// sibling to other content.
|
|
54
|
+
this.setAttribute('aria-hidden', 'true');
|
|
55
|
+
}
|
|
47
56
|
/** @private */
|
|
48
57
|
handleEvent(event) {
|
|
49
58
|
if (event[HANDLED_BY_FOCUS_RING]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-ring.js","sourceRoot":"","sources":["focus-ring.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAa,oBAAoB,EAAC,MAAM,oDAAoD,CAAC;AAEpG;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,UAAU;IAAzC;;QACE;;WAEG;QACuC,YAAO,GAAG,KAAK,CAAC;QAE1D;;WAEG;QACuC,WAAM,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"focus-ring.js","sourceRoot":"","sources":["focus-ring.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {LitElement, PropertyValues} from 'lit';\nimport {property} from 'lit/decorators.js';\n\nimport {Attachable, AttachableController} from '../../internal/controller/attachable-controller.js';\n\n/**\n * Events that the focus ring listens to.\n *\n * @fires visibility-changed Fired whenever `visible` changes.\n */\nconst EVENTS = ['focusin', 'focusout', 'pointerdown'];\n\n/**\n * A focus ring component.\n */\nexport class FocusRing extends LitElement implements Attachable {\n /**\n * Makes the focus ring visible.\n */\n @property({type: Boolean, reflect: true}) visible = false;\n\n /**\n * Makes the focus ring animate inwards instead of outwards.\n */\n @property({type: Boolean, reflect: true}) inward = false;\n\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n\n set htmlFor(htmlFor: string|null) {\n this.attachableController.htmlFor = htmlFor;\n }\n\n get control() {\n return this.attachableController.control;\n }\n set control(control: HTMLElement|null) {\n this.attachableController.control = control;\n }\n\n private readonly attachableController =\n new AttachableController(this, this.onControlChange.bind(this));\n\n attach(control: HTMLElement) {\n this.attachableController.attach(control);\n }\n\n detach() {\n this.attachableController.detach();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n\n /** @private */\n handleEvent(event: FocusRingEvent) {\n if (event[HANDLED_BY_FOCUS_RING]) {\n // This ensures the focus ring does not activate when multiple focus rings\n // are used within a single component.\n return;\n }\n\n switch (event.type) {\n default:\n return;\n case 'focusin':\n this.visible = this.control?.matches(':focus-visible') ?? false;\n break;\n case 'focusout':\n case 'pointerdown':\n this.visible = false;\n break;\n }\n\n event[HANDLED_BY_FOCUS_RING] = true;\n }\n\n private onControlChange(prev: HTMLElement|null, next: HTMLElement|null) {\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n\n override update(changed: PropertyValues<this>) {\n if (changed.has('visible')) {\n // This logic can be removed once the `:has` selector has been introduced\n // to Firefox. This is necessary to allow correct submenu styles.\n this.dispatchEvent(new Event('visibility-changed'));\n }\n super.update(changed);\n }\n}\n\nconst HANDLED_BY_FOCUS_RING = Symbol('handledByFocusRing');\n\ninterface FocusRingEvent extends Event {\n [HANDLED_BY_FOCUS_RING]: true;\n}\n"]}
|
package/icon/internal/icon.js
CHANGED
|
@@ -15,9 +15,13 @@ export class Icon extends LitElement {
|
|
|
15
15
|
super.connectedCallback();
|
|
16
16
|
const ariaHidden = this.getAttribute('aria-hidden');
|
|
17
17
|
if (ariaHidden === 'false') {
|
|
18
|
+
// Allow the user to set `aria-hidden="false"` to create an icon that is
|
|
19
|
+
// announced by screenreaders.
|
|
18
20
|
this.removeAttribute('aria-hidden');
|
|
19
21
|
return;
|
|
20
22
|
}
|
|
23
|
+
// Needed for VoiceOver, which will create a "group" if the element is a
|
|
24
|
+
// sibling to other content.
|
|
21
25
|
this.setAttribute('aria-hidden', 'true');
|
|
22
26
|
}
|
|
23
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.js","sourceRoot":"","sources":["icon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,IAAK,SAAQ,UAAU;IACf,MAAM;QACvB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO;SACR;QAED,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {html, LitElement} from 'lit';\n\n/**\n * TODO(b/265336902): add docs\n */\nexport class Icon extends LitElement {\n protected override render() {\n return html`<slot></slot>`;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n const ariaHidden = this.getAttribute('aria-hidden');\n if (ariaHidden === 'false') {\n this.removeAttribute('aria-hidden');\n return;\n }\n\n this.setAttribute('aria-hidden', 'true');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"icon.js","sourceRoot":"","sources":["icon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,IAAK,SAAQ,UAAU;IACf,MAAM;QACvB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,wEAAwE;YACxE,8BAA8B;YAC9B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO;SACR;QAED,wEAAwE;QACxE,4BAA4B;QAC5B,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {html, LitElement} from 'lit';\n\n/**\n * TODO(b/265336902): add docs\n */\nexport class Icon extends LitElement {\n protected override render() {\n return html`<slot></slot>`;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n const ariaHidden = this.getAttribute('aria-hidden');\n if (ariaHidden === 'false') {\n // Allow the user to set `aria-hidden=\"false\"` to create an icon that is\n // announced by screenreaders.\n this.removeAttribute('aria-hidden');\n return;\n }\n\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n}\n"]}
|
|
@@ -35,6 +35,14 @@
|
|
|
35
35
|
--_#{$token}: var(--md-icon-button-#{$token}, #{$value});
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
// These custom properties are not used, so set defaults so token tests pass
|
|
39
|
+
// for <md-icon-button>.
|
|
40
|
+
--_container-shape-start-start: 0;
|
|
41
|
+
--_container-shape-start-end: 0;
|
|
42
|
+
--_container-shape-end-end: 0;
|
|
43
|
+
--_container-shape-end-start: 0;
|
|
44
|
+
--_container-size: 0;
|
|
45
|
+
|
|
38
46
|
height: var(--_state-layer-size);
|
|
39
47
|
width: var(--_state-layer-size);
|
|
40
48
|
}
|
|
@@ -41,8 +41,8 @@ export declare class IconButton extends LitElement implements FormSubmitter {
|
|
|
41
41
|
toggle: boolean;
|
|
42
42
|
/**
|
|
43
43
|
* Sets the selected state. When false, displays the default icon. When true,
|
|
44
|
-
* displays the
|
|
45
|
-
* provided.
|
|
44
|
+
* displays the selected icon, or the default icon If no `slot="selected"`
|
|
45
|
+
* icon is provided.
|
|
46
46
|
*/
|
|
47
47
|
selected: boolean;
|
|
48
48
|
type: FormSubmitterType;
|
|
@@ -63,7 +63,7 @@ export declare class IconButton extends LitElement implements FormSubmitter {
|
|
|
63
63
|
/**
|
|
64
64
|
* Link buttons cannot be disabled.
|
|
65
65
|
*/
|
|
66
|
-
willUpdate(): void;
|
|
66
|
+
protected willUpdate(): void;
|
|
67
67
|
protected render(): import("lit-html").TemplateResult<2 | 1>;
|
|
68
68
|
private renderLink;
|
|
69
69
|
protected getRenderClasses(): {
|
|
@@ -46,8 +46,8 @@ export class IconButton extends LitElement {
|
|
|
46
46
|
this.toggle = false;
|
|
47
47
|
/**
|
|
48
48
|
* Sets the selected state. When false, displays the default icon. When true,
|
|
49
|
-
* displays the
|
|
50
|
-
* provided.
|
|
49
|
+
* displays the selected icon, or the default icon If no `slot="selected"`
|
|
50
|
+
* icon is provided.
|
|
51
51
|
*/
|
|
52
52
|
this.selected = false;
|
|
53
53
|
this.type = 'submit';
|
|
@@ -87,7 +87,7 @@ export class IconButton extends LitElement {
|
|
|
87
87
|
// Needed for closure conformance
|
|
88
88
|
const { ariaLabel, ariaHasPopup, ariaExpanded } = this;
|
|
89
89
|
const hasToggledAriaLabel = ariaLabel && this.ariaLabelSelected;
|
|
90
|
-
const ariaPressedValue =
|
|
90
|
+
const ariaPressedValue = !this.toggle ? nothing : this.selected;
|
|
91
91
|
let ariaLabelValue = nothing;
|
|
92
92
|
if (!this.href) {
|
|
93
93
|
ariaLabelValue = (hasToggledAriaLabel && this.selected) ?
|
|
@@ -134,7 +134,7 @@ export class IconButton extends LitElement {
|
|
|
134
134
|
}
|
|
135
135
|
renderSelectedIcon() {
|
|
136
136
|
// Use default slot as fallback to not require specifying multiple icons
|
|
137
|
-
return html `<span class="icon icon--selected"><slot name="
|
|
137
|
+
return html `<span class="icon icon--selected"><slot name="selected"><slot></slot></slot></span>`;
|
|
138
138
|
}
|
|
139
139
|
renderTouchTarget() {
|
|
140
140
|
return html `<span class="touch"></span>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-button.js","sourceRoot":"","sources":["icon-button.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, LitElement, nothing} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {html as staticHtml, literal} from 'lit/static-html.js';\n\nimport {ARIAMixinStrict} from '../../internal/aria/aria.js';\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {internals} from '../../internal/controller/element-internals.js';\nimport {FormSubmitter, FormSubmitterType, setupFormSubmitter} from '../../internal/controller/form-submitter.js';\nimport {isRtl} from '../../internal/controller/is-rtl.js';\n\ntype LinkTarget = '_blank'|'_parent'|'_self'|'_top';\n\n// tslint:disable-next-line:enforce-comments-on-exported-symbols\nexport class IconButton extends LitElement implements FormSubmitter {\n static {\n requestUpdateOnAriaChange(IconButton);\n setupFormSubmitter(IconButton);\n }\n\n /** @nocollapse */\n static readonly formAssociated = true;\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /**\n * Disables the icon button and makes it non-interactive.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * Flips the icon if it is in an RTL context at startup.\n */\n @property({type: Boolean, attribute: 'flip-icon-in-rtl'})\n flipIconInRtl = false;\n\n /**\n * Sets the underlying `HTMLAnchorElement`'s `href` resource attribute.\n */\n @property() href = '';\n\n /**\n * Sets the underlying `HTMLAnchorElement`'s `target` attribute.\n */\n @property() target: LinkTarget|'' = '';\n\n /**\n * The `aria-label` of the button when the button is toggleable and selected.\n */\n @property({attribute: 'aria-label-selected'}) ariaLabelSelected = '';\n\n /**\n * When true, the button will toggle between selected and unselected\n * states\n */\n @property({type: Boolean}) toggle = false;\n\n /**\n * Sets the selected state. When false, displays the default icon. When true,\n * displays the `selectedIcon`, or the default icon If no `selectedIcon` is\n * provided.\n */\n @property({type: Boolean, reflect: true}) selected = false;\n\n @property() type: FormSubmitterType = 'submit';\n\n @property() value = '';\n\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this[internals].form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this[internals].labels;\n }\n\n @state() private flipIcon = isRtl(this, this.flipIconInRtl);\n\n /** @private */\n [internals] =\n (this as HTMLElement /* needed for closure */).attachInternals();\n\n /**\n * Link buttons cannot be disabled.\n */\n override willUpdate() {\n if (this.href) {\n this.disabled = false;\n }\n }\n\n protected override render() {\n const tag = this.href ? literal`div` : literal`button`;\n // Needed for closure conformance\n const {ariaLabel, ariaHasPopup, ariaExpanded} = this as ARIAMixinStrict;\n const hasToggledAriaLabel = ariaLabel && this.ariaLabelSelected;\n const ariaPressedValue = hasToggledAriaLabel ? nothing : this.selected;\n let ariaLabelValue: string|null|typeof nothing = nothing;\n if (!this.href) {\n ariaLabelValue = (hasToggledAriaLabel && this.selected) ?\n this.ariaLabelSelected :\n ariaLabel;\n }\n return staticHtml`<${tag}\n class=\"icon-button ${classMap(this.getRenderClasses())}\"\n id=\"button\"\n aria-label=\"${ariaLabelValue || nothing}\"\n aria-haspopup=\"${!this.href && ariaHasPopup || nothing}\"\n aria-expanded=\"${!this.href && ariaExpanded || nothing}\"\n aria-pressed=\"${ariaPressedValue}\"\n ?disabled=\"${!this.href && this.disabled}\"\n @click=\"${this.handleClick}\">\n ${this.renderFocusRing()}\n ${this.renderRipple()}\n ${!this.selected ? this.renderIcon() : nothing}\n ${this.selected ? this.renderSelectedIcon() : nothing}\n ${this.renderTouchTarget()}\n ${this.href && this.renderLink()}\n </${tag}>`;\n }\n\n private renderLink() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n return html`\n <a class=\"link\"\n id=\"link\"\n href=\"${this.href}\"\n target=\"${this.target || nothing}\"\n aria-label=\"${ariaLabel || nothing}\"\n ></a>\n `;\n }\n\n protected getRenderClasses() {\n return {\n 'flip-icon': this.flipIcon,\n 'selected': this.toggle && this.selected,\n };\n }\n\n private renderIcon() {\n return html`<span class=\"icon\"><slot></slot></span>`;\n }\n\n private renderSelectedIcon() {\n // Use default slot as fallback to not require specifying multiple icons\n return html`<span class=\"icon icon--selected\"><slot name=\"selectedIcon\"><slot></slot></slot></span>`;\n }\n\n private renderTouchTarget() {\n return html`<span class=\"touch\"></span>`;\n }\n\n private renderFocusRing() {\n return html`<md-focus-ring part=\"focus-ring\" for=${\n this.href ? 'link' : 'button'}></md-focus-ring>`;\n }\n\n private renderRipple() {\n return html`<md-ripple\n for=${this.href ? 'link' : nothing}\n ?disabled=\"${!this.href && this.disabled}\"\n ></md-ripple>`;\n }\n\n override connectedCallback() {\n this.flipIcon = isRtl(this, this.flipIconInRtl);\n super.connectedCallback();\n }\n\n private handleClick() {\n if (!this.toggle || this.disabled) {\n return;\n }\n\n this.selected = !this.selected;\n this.dispatchEvent(\n new InputEvent('input', {bubbles: true, composed: true}));\n // Bubbles but does not compose to mimic native browser <input> & <select>\n // Additionally, native change event is not an InputEvent.\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"icon-button.js","sourceRoot":"","sources":["icon-button.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, LitElement, nothing} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {html as staticHtml, literal} from 'lit/static-html.js';\n\nimport {ARIAMixinStrict} from '../../internal/aria/aria.js';\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {internals} from '../../internal/controller/element-internals.js';\nimport {FormSubmitter, FormSubmitterType, setupFormSubmitter} from '../../internal/controller/form-submitter.js';\nimport {isRtl} from '../../internal/controller/is-rtl.js';\n\ntype LinkTarget = '_blank'|'_parent'|'_self'|'_top';\n\n// tslint:disable-next-line:enforce-comments-on-exported-symbols\nexport class IconButton extends LitElement implements FormSubmitter {\n static {\n requestUpdateOnAriaChange(IconButton);\n setupFormSubmitter(IconButton);\n }\n\n /** @nocollapse */\n static readonly formAssociated = true;\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /**\n * Disables the icon button and makes it non-interactive.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * Flips the icon if it is in an RTL context at startup.\n */\n @property({type: Boolean, attribute: 'flip-icon-in-rtl'})\n flipIconInRtl = false;\n\n /**\n * Sets the underlying `HTMLAnchorElement`'s `href` resource attribute.\n */\n @property() href = '';\n\n /**\n * Sets the underlying `HTMLAnchorElement`'s `target` attribute.\n */\n @property() target: LinkTarget|'' = '';\n\n /**\n * The `aria-label` of the button when the button is toggleable and selected.\n */\n @property({attribute: 'aria-label-selected'}) ariaLabelSelected = '';\n\n /**\n * When true, the button will toggle between selected and unselected\n * states\n */\n @property({type: Boolean}) toggle = false;\n\n /**\n * Sets the selected state. When false, displays the default icon. When true,\n * displays the selected icon, or the default icon If no `slot=\"selected\"`\n * icon is provided.\n */\n @property({type: Boolean, reflect: true}) selected = false;\n\n @property() type: FormSubmitterType = 'submit';\n\n @property() value = '';\n\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this[internals].form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this[internals].labels;\n }\n\n @state() private flipIcon = isRtl(this, this.flipIconInRtl);\n\n /** @private */\n [internals] =\n (this as HTMLElement /* needed for closure */).attachInternals();\n\n /**\n * Link buttons cannot be disabled.\n */\n protected override willUpdate() {\n if (this.href) {\n this.disabled = false;\n }\n }\n\n protected override render() {\n const tag = this.href ? literal`div` : literal`button`;\n // Needed for closure conformance\n const {ariaLabel, ariaHasPopup, ariaExpanded} = this as ARIAMixinStrict;\n const hasToggledAriaLabel = ariaLabel && this.ariaLabelSelected;\n const ariaPressedValue = !this.toggle ? nothing : this.selected;\n let ariaLabelValue: string|null|typeof nothing = nothing;\n if (!this.href) {\n ariaLabelValue = (hasToggledAriaLabel && this.selected) ?\n this.ariaLabelSelected :\n ariaLabel;\n }\n return staticHtml`<${tag}\n class=\"icon-button ${classMap(this.getRenderClasses())}\"\n id=\"button\"\n aria-label=\"${ariaLabelValue || nothing}\"\n aria-haspopup=\"${!this.href && ariaHasPopup || nothing}\"\n aria-expanded=\"${!this.href && ariaExpanded || nothing}\"\n aria-pressed=\"${ariaPressedValue}\"\n ?disabled=\"${!this.href && this.disabled}\"\n @click=\"${this.handleClick}\">\n ${this.renderFocusRing()}\n ${this.renderRipple()}\n ${!this.selected ? this.renderIcon() : nothing}\n ${this.selected ? this.renderSelectedIcon() : nothing}\n ${this.renderTouchTarget()}\n ${this.href && this.renderLink()}\n </${tag}>`;\n }\n\n private renderLink() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n return html`\n <a class=\"link\"\n id=\"link\"\n href=\"${this.href}\"\n target=\"${this.target || nothing}\"\n aria-label=\"${ariaLabel || nothing}\"\n ></a>\n `;\n }\n\n protected getRenderClasses() {\n return {\n 'flip-icon': this.flipIcon,\n 'selected': this.toggle && this.selected,\n };\n }\n\n private renderIcon() {\n return html`<span class=\"icon\"><slot></slot></span>`;\n }\n\n private renderSelectedIcon() {\n // Use default slot as fallback to not require specifying multiple icons\n return html`<span class=\"icon icon--selected\"><slot name=\"selected\"><slot></slot></slot></span>`;\n }\n\n private renderTouchTarget() {\n return html`<span class=\"touch\"></span>`;\n }\n\n private renderFocusRing() {\n return html`<md-focus-ring part=\"focus-ring\" for=${\n this.href ? 'link' : 'button'}></md-focus-ring>`;\n }\n\n private renderRipple() {\n return html`<md-ripple\n for=${this.href ? 'link' : nothing}\n ?disabled=\"${!this.href && this.disabled}\"\n ></md-ripple>`;\n }\n\n override connectedCallback() {\n this.flipIcon = isRtl(this, this.flipIconInRtl);\n super.connectedCallback();\n }\n\n private handleClick() {\n if (!this.toggle || this.disabled) {\n return;\n }\n\n this.selected = !this.selected;\n this.dispatchEvent(\n new InputEvent('input', {bubbles: true, composed: true}));\n // Bubbles but does not compose to mimic native browser <input> & <select>\n // Additionally, native change event is not an InputEvent.\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n}\n"]}
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { css } from 'lit';
|
|
7
|
-
export const styles = css `:host{--_disabled-icon-color: var(--md-icon-button-disabled-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-icon-opacity: var(--md-icon-button-disabled-icon-opacity, 0.38);--_icon-size: var(--md-icon-button-icon-size, 24px);--_selected-focus-icon-color: var(--md-icon-button-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-icon-color: var(--md-icon-button-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-color: var(--md-icon-button-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-icon-button-selected-hover-state-layer-opacity, 0.08);--_selected-icon-color: var(--md-icon-button-selected-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-icon-color: var(--md-icon-button-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-color: var(--md-icon-button-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-icon-button-selected-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-icon-button-state-layer-shape, 9999px);--_state-layer-size: var(--md-icon-button-state-layer-size, 40px);--_focus-icon-color: var(--md-icon-button-focus-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-icon-color: var(--md-icon-button-hover-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-color: var(--md-icon-button-hover-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-opacity: var(--md-icon-button-hover-state-layer-opacity, 0.08);--_icon-color: var(--md-icon-button-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-icon-color: var(--md-icon-button-pressed-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-color: var(--md-icon-button-pressed-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-opacity: var(--md-icon-button-pressed-state-layer-opacity, 0.12);height:var(--_state-layer-size);width:var(--_state-layer-size)}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--_state-layer-size))/2)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_state-layer-shape);--md-focus-ring-shape-start-end: var(--_state-layer-shape);--md-focus-ring-shape-end-end: var(--_state-layer-shape);--md-focus-ring-shape-end-start: var(--_state-layer-shape)}.standard{background-color:rgba(0,0,0,0);color:var(--_icon-color);--md-ripple-hover-color: var(--_hover-state-layer-color);--md-ripple-hover-opacity: var(--_hover-state-layer-opacity);--md-ripple-pressed-color: var(--_pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity)}.standard:hover{color:var(--_hover-icon-color)}.standard:focus{color:var(--_focus-icon-color)}.standard:active{color:var(--_pressed-icon-color)}.standard:disabled{color:var(--_disabled-icon-color)}md-ripple{border-radius:var(--_state-layer-shape)}.standard:disabled .icon{opacity:var(--_disabled-icon-opacity)}.selected{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.selected:not(:disabled){color:var(--_selected-icon-color)}.selected:not(:disabled):hover{color:var(--_selected-hover-icon-color)}.selected:not(:disabled):focus{color:var(--_selected-focus-icon-color)}.selected:not(:disabled):active{color:var(--_selected-pressed-icon-color)}/*# sourceMappingURL=standard-styles.css.map */
|
|
7
|
+
export const styles = css `:host{--_disabled-icon-color: var(--md-icon-button-disabled-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-icon-opacity: var(--md-icon-button-disabled-icon-opacity, 0.38);--_icon-size: var(--md-icon-button-icon-size, 24px);--_selected-focus-icon-color: var(--md-icon-button-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-icon-color: var(--md-icon-button-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-color: var(--md-icon-button-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-icon-button-selected-hover-state-layer-opacity, 0.08);--_selected-icon-color: var(--md-icon-button-selected-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-icon-color: var(--md-icon-button-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-color: var(--md-icon-button-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-icon-button-selected-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-icon-button-state-layer-shape, 9999px);--_state-layer-size: var(--md-icon-button-state-layer-size, 40px);--_focus-icon-color: var(--md-icon-button-focus-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-icon-color: var(--md-icon-button-hover-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-color: var(--md-icon-button-hover-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-opacity: var(--md-icon-button-hover-state-layer-opacity, 0.08);--_icon-color: var(--md-icon-button-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-icon-color: var(--md-icon-button-pressed-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-color: var(--md-icon-button-pressed-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-opacity: var(--md-icon-button-pressed-state-layer-opacity, 0.12);--_container-shape-start-start: 0;--_container-shape-start-end: 0;--_container-shape-end-end: 0;--_container-shape-end-start: 0;--_container-size: 0;height:var(--_state-layer-size);width:var(--_state-layer-size)}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--_state-layer-size))/2)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_state-layer-shape);--md-focus-ring-shape-start-end: var(--_state-layer-shape);--md-focus-ring-shape-end-end: var(--_state-layer-shape);--md-focus-ring-shape-end-start: var(--_state-layer-shape)}.standard{background-color:rgba(0,0,0,0);color:var(--_icon-color);--md-ripple-hover-color: var(--_hover-state-layer-color);--md-ripple-hover-opacity: var(--_hover-state-layer-opacity);--md-ripple-pressed-color: var(--_pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity)}.standard:hover{color:var(--_hover-icon-color)}.standard:focus{color:var(--_focus-icon-color)}.standard:active{color:var(--_pressed-icon-color)}.standard:disabled{color:var(--_disabled-icon-color)}md-ripple{border-radius:var(--_state-layer-shape)}.standard:disabled .icon{opacity:var(--_disabled-icon-opacity)}.selected{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.selected:not(:disabled){color:var(--_selected-icon-color)}.selected:not(:disabled):hover{color:var(--_selected-hover-icon-color)}.selected:not(:disabled):focus{color:var(--_selected-focus-icon-color)}.selected:not(:disabled):active{color:var(--_selected-pressed-icon-color)}/*# sourceMappingURL=standard-styles.css.map */
|
|
8
8
|
`;
|
|
9
9
|
//# sourceMappingURL=standard-styles.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-styles.css.js","sourceRoot":"","sources":["standard-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_disabled-icon-color: var(--md-icon-button-disabled-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-icon-opacity: var(--md-icon-button-disabled-icon-opacity, 0.38);--_icon-size: var(--md-icon-button-icon-size, 24px);--_selected-focus-icon-color: var(--md-icon-button-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-icon-color: var(--md-icon-button-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-color: var(--md-icon-button-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-icon-button-selected-hover-state-layer-opacity, 0.08);--_selected-icon-color: var(--md-icon-button-selected-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-icon-color: var(--md-icon-button-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-color: var(--md-icon-button-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-icon-button-selected-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-icon-button-state-layer-shape, 9999px);--_state-layer-size: var(--md-icon-button-state-layer-size, 40px);--_focus-icon-color: var(--md-icon-button-focus-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-icon-color: var(--md-icon-button-hover-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-color: var(--md-icon-button-hover-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-opacity: var(--md-icon-button-hover-state-layer-opacity, 0.08);--_icon-color: var(--md-icon-button-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-icon-color: var(--md-icon-button-pressed-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-color: var(--md-icon-button-pressed-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-opacity: var(--md-icon-button-pressed-state-layer-opacity, 0.12);height:var(--_state-layer-size);width:var(--_state-layer-size)}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--_state-layer-size))/2)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_state-layer-shape);--md-focus-ring-shape-start-end: var(--_state-layer-shape);--md-focus-ring-shape-end-end: var(--_state-layer-shape);--md-focus-ring-shape-end-start: var(--_state-layer-shape)}.standard{background-color:rgba(0,0,0,0);color:var(--_icon-color);--md-ripple-hover-color: var(--_hover-state-layer-color);--md-ripple-hover-opacity: var(--_hover-state-layer-opacity);--md-ripple-pressed-color: var(--_pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity)}.standard:hover{color:var(--_hover-icon-color)}.standard:focus{color:var(--_focus-icon-color)}.standard:active{color:var(--_pressed-icon-color)}.standard:disabled{color:var(--_disabled-icon-color)}md-ripple{border-radius:var(--_state-layer-shape)}.standard:disabled .icon{opacity:var(--_disabled-icon-opacity)}.selected{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.selected:not(:disabled){color:var(--_selected-icon-color)}.selected:not(:disabled):hover{color:var(--_selected-hover-icon-color)}.selected:not(:disabled):focus{color:var(--_selected-focus-icon-color)}.selected:not(:disabled):active{color:var(--_selected-pressed-icon-color)}/*# sourceMappingURL=standard-styles.css.map */\n`;\n "]}
|
|
1
|
+
{"version":3,"file":"standard-styles.css.js","sourceRoot":"","sources":["standard-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_disabled-icon-color: var(--md-icon-button-disabled-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-icon-opacity: var(--md-icon-button-disabled-icon-opacity, 0.38);--_icon-size: var(--md-icon-button-icon-size, 24px);--_selected-focus-icon-color: var(--md-icon-button-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-icon-color: var(--md-icon-button-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-color: var(--md-icon-button-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-icon-button-selected-hover-state-layer-opacity, 0.08);--_selected-icon-color: var(--md-icon-button-selected-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-icon-color: var(--md-icon-button-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-color: var(--md-icon-button-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-icon-button-selected-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-icon-button-state-layer-shape, 9999px);--_state-layer-size: var(--md-icon-button-state-layer-size, 40px);--_focus-icon-color: var(--md-icon-button-focus-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-icon-color: var(--md-icon-button-hover-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-color: var(--md-icon-button-hover-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-state-layer-opacity: var(--md-icon-button-hover-state-layer-opacity, 0.08);--_icon-color: var(--md-icon-button-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-icon-color: var(--md-icon-button-pressed-icon-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-color: var(--md-icon-button-pressed-state-layer-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-state-layer-opacity: var(--md-icon-button-pressed-state-layer-opacity, 0.12);--_container-shape-start-start: 0;--_container-shape-start-end: 0;--_container-shape-end-end: 0;--_container-shape-end-start: 0;--_container-size: 0;height:var(--_state-layer-size);width:var(--_state-layer-size)}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--_state-layer-size))/2)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_state-layer-shape);--md-focus-ring-shape-start-end: var(--_state-layer-shape);--md-focus-ring-shape-end-end: var(--_state-layer-shape);--md-focus-ring-shape-end-start: var(--_state-layer-shape)}.standard{background-color:rgba(0,0,0,0);color:var(--_icon-color);--md-ripple-hover-color: var(--_hover-state-layer-color);--md-ripple-hover-opacity: var(--_hover-state-layer-opacity);--md-ripple-pressed-color: var(--_pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity)}.standard:hover{color:var(--_hover-icon-color)}.standard:focus{color:var(--_focus-icon-color)}.standard:active{color:var(--_pressed-icon-color)}.standard:disabled{color:var(--_disabled-icon-color)}md-ripple{border-radius:var(--_state-layer-shape)}.standard:disabled .icon{opacity:var(--_disabled-icon-opacity)}.selected{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.selected:not(:disabled){color:var(--_selected-icon-color)}.selected:not(:disabled):hover{color:var(--_selected-hover-icon-color)}.selected:not(:disabled):focus{color:var(--_selected-focus-icon-color)}.selected:not(:disabled):active{color:var(--_selected-pressed-icon-color)}/*# sourceMappingURL=standard-styles.css.map */\n`;\n "]}
|
package/internal/aria/aria.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2023 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { ReactiveElement } from 'lit';
|
|
6
7
|
/**
|
|
7
8
|
* Accessibility Object Model reflective aria property name types.
|
|
8
9
|
*/
|
|
@@ -18,7 +19,7 @@ export type ARIAAttribute = ARIAPropertyToAttribute<ARIAProperty>;
|
|
|
18
19
|
/**
|
|
19
20
|
* Accessibility Object Model aria attributes.
|
|
20
21
|
*/
|
|
21
|
-
export declare const ARIA_ATTRIBUTES: ("aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-current" | "aria-disabled" | "aria-expanded" | "aria-haspopup" | "aria-
|
|
22
|
+
export declare const ARIA_ATTRIBUTES: ("aria-hidden" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-current" | "aria-disabled" | "aria-expanded" | "aria-haspopup" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext")[];
|
|
22
23
|
/**
|
|
23
24
|
* Checks if an attribute is one of the AOM aria attributes.
|
|
24
25
|
*
|
|
@@ -100,4 +101,54 @@ export interface ARIAMixinStrict extends ARIAMixin {
|
|
|
100
101
|
* Valid values for `role`.
|
|
101
102
|
*/
|
|
102
103
|
export type ARIARole = 'alert' | 'alertdialog' | 'button' | 'checkbox' | 'dialog' | 'gridcell' | 'link' | 'log' | 'marquee' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'option' | 'progressbar' | 'radio' | 'scrollbar' | 'searchbox' | 'slider' | 'spinbutton' | 'status' | 'switch' | 'tab' | 'tabpanel' | 'textbox' | 'timer' | 'tooltip' | 'treeitem' | 'combobox' | 'grid' | 'listbox' | 'menu' | 'menubar' | 'radiogroup' | 'tablist' | 'tree' | 'treegrid' | 'application' | 'article' | 'cell' | 'columnheader' | 'definition' | 'directory' | 'document' | 'feed' | 'figure' | 'group' | 'heading' | 'img' | 'list' | 'listitem' | 'math' | 'none' | 'note' | 'presentation' | 'region' | 'row' | 'rowgroup' | 'rowheader' | 'separator' | 'table' | 'term' | 'text' | 'toolbar' | 'banner' | 'complementary' | 'contentinfo' | 'form' | 'main' | 'navigation' | 'region' | 'search' | 'doc-abstract' | 'doc-acknowledgments' | 'doc-afterword' | 'doc-appendix' | 'doc-backlink' | 'doc-biblioentry' | 'doc-bibliography' | 'doc-biblioref' | 'doc-chapter' | 'doc-colophon' | 'doc-conclusion' | 'doc-cover' | 'doc-credit' | 'doc-credits' | 'doc-dedication' | 'doc-endnote' | 'doc-endnotes' | 'doc-epigraph' | 'doc-epilogue' | 'doc-errata' | 'doc-example' | 'doc-footnote' | 'doc-foreword' | 'doc-glossary' | 'doc-glossref' | 'doc-index' | 'doc-introduction' | 'doc-noteref' | 'doc-notice' | 'doc-pagebreak' | 'doc-pagelist' | 'doc-part' | 'doc-preface' | 'doc-prologue' | 'doc-pullquote' | 'doc-qna' | 'doc-subtitle' | 'doc-tip' | 'doc-toc';
|
|
104
|
+
/**
|
|
105
|
+
* Enables a host custom element to be the target for aria roles and attributes.
|
|
106
|
+
* Components should set the `elementInternals.role` property.
|
|
107
|
+
*
|
|
108
|
+
* By default, aria components are tab focusable. Provide a `focusable: false`
|
|
109
|
+
* option for components that should not be tab focusable, such as
|
|
110
|
+
* `role="listbox"`.
|
|
111
|
+
*
|
|
112
|
+
* This function will also polyfill aria `ElementInternals` properties for
|
|
113
|
+
* Firefox.
|
|
114
|
+
*
|
|
115
|
+
* @param ctor The `ReactiveElement` constructor to set up.
|
|
116
|
+
* @param options Options to configure the element's host aria.
|
|
117
|
+
*/
|
|
118
|
+
export declare function setupHostAria(ctor: typeof ReactiveElement, { focusable }?: SetupHostAriaOptions): void;
|
|
119
|
+
/**
|
|
120
|
+
* Options for setting up a host element as an aria target.
|
|
121
|
+
*/
|
|
122
|
+
export interface SetupHostAriaOptions {
|
|
123
|
+
/**
|
|
124
|
+
* Whether or not the element can be focused with the tab key. Defaults to
|
|
125
|
+
* true.
|
|
126
|
+
*
|
|
127
|
+
* Set this to false for aria roles that should not be tab focusable, such as
|
|
128
|
+
* `role="listbox"`.
|
|
129
|
+
*/
|
|
130
|
+
focusable?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Polyfills an element and its `ElementInternals` to support `ARIAMixin`
|
|
134
|
+
* properties on internals. This is needed for Firefox.
|
|
135
|
+
*
|
|
136
|
+
* `setupHostAria()` must be called for the element class.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* class XButton extends LitElement {
|
|
140
|
+
* static {
|
|
141
|
+
* setupHostAria(XButton);
|
|
142
|
+
* }
|
|
143
|
+
*
|
|
144
|
+
* private internals =
|
|
145
|
+
* polyfillElementInternalsAria(this, this.attachInternals());
|
|
146
|
+
*
|
|
147
|
+
* constructor() {
|
|
148
|
+
* super();
|
|
149
|
+
* this.internals.role = 'button';
|
|
150
|
+
* }
|
|
151
|
+
* }
|
|
152
|
+
*/
|
|
153
|
+
export declare function polyfillElementInternalsAria(host: ReactiveElement, internals: ElementInternals): ElementInternals;
|
|
103
154
|
export {};
|
package/internal/aria/aria.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2023 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { isServer } from 'lit';
|
|
6
7
|
/**
|
|
7
8
|
* Accessibility Object Model reflective aria properties.
|
|
8
9
|
*/
|
|
@@ -77,4 +78,149 @@ export function ariaPropertyToAttribute(property) {
|
|
|
77
78
|
.replace(/Elements?/g, '')
|
|
78
79
|
.toLowerCase();
|
|
79
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Enables a host custom element to be the target for aria roles and attributes.
|
|
83
|
+
* Components should set the `elementInternals.role` property.
|
|
84
|
+
*
|
|
85
|
+
* By default, aria components are tab focusable. Provide a `focusable: false`
|
|
86
|
+
* option for components that should not be tab focusable, such as
|
|
87
|
+
* `role="listbox"`.
|
|
88
|
+
*
|
|
89
|
+
* This function will also polyfill aria `ElementInternals` properties for
|
|
90
|
+
* Firefox.
|
|
91
|
+
*
|
|
92
|
+
* @param ctor The `ReactiveElement` constructor to set up.
|
|
93
|
+
* @param options Options to configure the element's host aria.
|
|
94
|
+
*/
|
|
95
|
+
export function setupHostAria(ctor, { focusable } = {}) {
|
|
96
|
+
if (focusable !== false) {
|
|
97
|
+
ctor.addInitializer(host => {
|
|
98
|
+
host.addController({
|
|
99
|
+
hostConnected() {
|
|
100
|
+
if (host.hasAttribute('tabindex')) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
host.tabIndex = 0;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (isServer || 'role' in Element.prototype) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Polyfill reflective aria properties for Firefox
|
|
112
|
+
for (const ariaProperty of ARIA_PROPERTIES) {
|
|
113
|
+
ctor.createProperty(ariaProperty, {
|
|
114
|
+
attribute: ariaPropertyToAttribute(ariaProperty),
|
|
115
|
+
reflect: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
ctor.createProperty('role', { reflect: true });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Polyfills an element and its `ElementInternals` to support `ARIAMixin`
|
|
122
|
+
* properties on internals. This is needed for Firefox.
|
|
123
|
+
*
|
|
124
|
+
* `setupHostAria()` must be called for the element class.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* class XButton extends LitElement {
|
|
128
|
+
* static {
|
|
129
|
+
* setupHostAria(XButton);
|
|
130
|
+
* }
|
|
131
|
+
*
|
|
132
|
+
* private internals =
|
|
133
|
+
* polyfillElementInternalsAria(this, this.attachInternals());
|
|
134
|
+
*
|
|
135
|
+
* constructor() {
|
|
136
|
+
* super();
|
|
137
|
+
* this.internals.role = 'button';
|
|
138
|
+
* }
|
|
139
|
+
* }
|
|
140
|
+
*/
|
|
141
|
+
export function polyfillElementInternalsAria(host, internals) {
|
|
142
|
+
if (checkIfElementInternalsSupportsAria(internals)) {
|
|
143
|
+
return internals;
|
|
144
|
+
}
|
|
145
|
+
if (!('role' in host)) {
|
|
146
|
+
throw new Error('Missing setupHostAria()');
|
|
147
|
+
}
|
|
148
|
+
let firstConnectedCallbacks = [];
|
|
149
|
+
let hasBeenConnected = false;
|
|
150
|
+
// Add support for Firefox, which has not yet implement ElementInternals aria
|
|
151
|
+
for (const ariaProperty of ARIA_PROPERTIES) {
|
|
152
|
+
let ariaValueBeforeConnected = null;
|
|
153
|
+
Object.defineProperty(internals, ariaProperty, {
|
|
154
|
+
enumerable: true,
|
|
155
|
+
configurable: true,
|
|
156
|
+
get() {
|
|
157
|
+
if (!hasBeenConnected) {
|
|
158
|
+
return ariaValueBeforeConnected;
|
|
159
|
+
}
|
|
160
|
+
// Dynamic lookup rather than hardcoding all properties.
|
|
161
|
+
// tslint:disable-next-line:no-dict-access-on-struct-type
|
|
162
|
+
return host[ariaProperty];
|
|
163
|
+
},
|
|
164
|
+
set(value) {
|
|
165
|
+
const setValue = () => {
|
|
166
|
+
// Dynamic lookup rather than hardcoding all properties.
|
|
167
|
+
// tslint:disable-next-line:no-dict-access-on-struct-type
|
|
168
|
+
host[ariaProperty] = value;
|
|
169
|
+
};
|
|
170
|
+
if (!hasBeenConnected) {
|
|
171
|
+
ariaValueBeforeConnected = value;
|
|
172
|
+
firstConnectedCallbacks.push(setValue);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
setValue();
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
let roleValueBeforeConnected = null;
|
|
180
|
+
Object.defineProperty(internals, 'role', {
|
|
181
|
+
enumerable: true,
|
|
182
|
+
configurable: true,
|
|
183
|
+
get() {
|
|
184
|
+
if (!hasBeenConnected) {
|
|
185
|
+
return roleValueBeforeConnected;
|
|
186
|
+
}
|
|
187
|
+
return host.getAttribute('role');
|
|
188
|
+
},
|
|
189
|
+
set(value) {
|
|
190
|
+
const setRole = () => {
|
|
191
|
+
if (value === null) {
|
|
192
|
+
host.removeAttribute('role');
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
host.setAttribute('role', value);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
if (!hasBeenConnected) {
|
|
199
|
+
roleValueBeforeConnected = value;
|
|
200
|
+
firstConnectedCallbacks.push(setRole);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
setRole();
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
host.addController({
|
|
207
|
+
hostConnected() {
|
|
208
|
+
if (hasBeenConnected) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
hasBeenConnected = true;
|
|
212
|
+
for (const callback of firstConnectedCallbacks) {
|
|
213
|
+
callback();
|
|
214
|
+
}
|
|
215
|
+
// Remove strong callback references
|
|
216
|
+
firstConnectedCallbacks = [];
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
return internals;
|
|
220
|
+
}
|
|
221
|
+
// Separate function so that typescript doesn't complain about internals being
|
|
222
|
+
// "never".
|
|
223
|
+
function checkIfElementInternalsSupportsAria(internals) {
|
|
224
|
+
return 'role' in internals;
|
|
225
|
+
}
|
|
80
226
|
//# sourceMappingURL=aria.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aria.js","sourceRoot":"","sources":["aria.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,YAAY;IACZ,kBAAkB;IAClB,UAAU;IACV,aAAa;IACb,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,cAAc;IACd,cAAc;IACd,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,eAAe;IACf,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,aAAa;IACb,cAAc;IACd,aAAa;IACb,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;CAChB,CAAC;AAOF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACnC,QAAW;IACb,OAAO,QAAQ;SACH,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,kEAAkE;SACjE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,WAAW,EAAgC,CAAC;AAC1D,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Accessibility Object Model reflective aria property name types.\n */\nexport type ARIAProperty = Exclude<keyof ARIAMixin, 'role'>;\n\n/**\n * Accessibility Object Model reflective aria properties.\n */\nexport const ARIA_PROPERTIES: ARIAProperty[] = [\n 'ariaAtomic',\n 'ariaAutoComplete',\n 'ariaBusy',\n 'ariaChecked',\n 'ariaColCount',\n 'ariaColIndex',\n 'ariaColSpan',\n 'ariaCurrent',\n 'ariaDisabled',\n 'ariaExpanded',\n 'ariaHasPopup',\n 'ariaHidden',\n 'ariaInvalid',\n 'ariaKeyShortcuts',\n 'ariaLabel',\n 'ariaLevel',\n 'ariaLive',\n 'ariaModal',\n 'ariaMultiLine',\n 'ariaMultiSelectable',\n 'ariaOrientation',\n 'ariaPlaceholder',\n 'ariaPosInSet',\n 'ariaPressed',\n 'ariaReadOnly',\n 'ariaRequired',\n 'ariaRoleDescription',\n 'ariaRowCount',\n 'ariaRowIndex',\n 'ariaRowSpan',\n 'ariaSelected',\n 'ariaSetSize',\n 'ariaSort',\n 'ariaValueMax',\n 'ariaValueMin',\n 'ariaValueNow',\n 'ariaValueText',\n];\n\n/**\n * Accessibility Object Model aria attribute name types.\n */\nexport type ARIAAttribute = ARIAPropertyToAttribute<ARIAProperty>;\n\n/**\n * Accessibility Object Model aria attributes.\n */\nexport const ARIA_ATTRIBUTES = ARIA_PROPERTIES.map(ariaPropertyToAttribute);\n\n/**\n * Checks if an attribute is one of the AOM aria attributes.\n *\n * @example\n * isAriaAttribute('aria-label'); // true\n *\n * @param attribute The attribute to check.\n * @return True if the attribute is an aria attribute, or false if not.\n */\nexport function isAriaAttribute(attribute: string): attribute is ARIAAttribute {\n return attribute.startsWith('aria-');\n}\n\n/**\n * Converts an AOM aria property into its corresponding attribute.\n *\n * @example\n * ariaPropertyToAttribute('ariaLabel'); // 'aria-label'\n *\n * @param property The aria property.\n * @return The aria attribute.\n */\nexport function ariaPropertyToAttribute<K extends ARIAProperty|'role'>(\n property: K) {\n return property\n .replace('aria', 'aria-')\n // IDREF attributes also include an \"Element\" or \"Elements\" suffix\n .replace(/Elements?/g, '')\n .toLowerCase() as ARIAPropertyToAttribute<K>;\n}\n\n// Converts an `ariaFoo` string type to an `aria-foo` string type.\ntype ARIAPropertyToAttribute<K extends string> =\n K extends `aria${infer Suffix}Element${infer OptS}` ?\n `aria-${Lowercase < Suffix >}` :\n K extends `aria${infer Suffix}` ? `aria-${Lowercase < Suffix >}` : K;\n\n/**\n * An extension of `ARIAMixin` that enforces strict value types for aria\n * properties.\n *\n * This is needed for correct typing in render functions with lit analyzer.\n *\n * @example\n * render() {\n * const {ariaLabel} = this as ARIAMixinStrict;\n * return html`\n * <button aria-label=${ariaLabel || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * }\n */\nexport interface ARIAMixinStrict extends ARIAMixin {\n ariaAtomic: 'true'|'false'|null;\n ariaAutoComplete: 'none'|'inline'|'list'|'both'|null;\n ariaBusy: 'true'|'false'|null;\n ariaChecked: 'true'|'false'|null;\n ariaColCount: `${number}`|null;\n ariaColIndex: `${number}`|null;\n ariaColSpan: `${number}`|null;\n ariaCurrent: 'page'|'step'|'location'|'date'|'time'|'true'|'false'|null;\n ariaDisabled: 'true'|'false'|null;\n ariaExpanded: 'true'|'false'|null;\n ariaHasPopup: 'false'|'true'|'menu'|'listbox'|'tree'|'grid'|'dialog'|null;\n ariaHidden: 'true'|'false'|null;\n ariaInvalid: 'true'|'false'|null;\n ariaKeyShortcuts: string|null;\n ariaLabel: string|null;\n ariaLevel: `${number}`|null;\n ariaLive: 'assertive'|'off'|'polite'|null;\n ariaModal: 'true'|'false'|null;\n ariaMultiLine: 'true'|'false'|null;\n ariaMultiSelectable: 'true'|'false'|null;\n ariaOrientation: 'horizontal'|'vertical'|'undefined'|null;\n ariaPlaceholder: string|null;\n ariaPosInSet: `${number}`|null;\n ariaPressed: 'true'|'false'|null;\n ariaReadOnly: 'true'|'false'|null;\n ariaRequired: 'true'|'false'|null;\n ariaRoleDescription: string|null;\n ariaRowCount: `${number}`|null;\n ariaRowIndex: `${number}`|null;\n ariaRowSpan: `${number}`|null;\n ariaSelected: 'true'|'false'|null;\n ariaSetSize: `${number}`|null;\n ariaSort: 'ascending'|'descending'|'none'|'other'|null;\n ariaValueMax: `${number}`|null;\n ariaValueMin: `${number}`|null;\n ariaValueNow: `${number}`|null;\n ariaValueText: string|null;\n role: ARIARole|null;\n}\n\n/**\n * Valid values for `role`.\n */\nexport type ARIARole =\n 'alert'|'alertdialog'|'button'|'checkbox'|'dialog'|'gridcell'|'link'|'log'|\n 'marquee'|'menuitem'|'menuitemcheckbox'|'menuitemradio'|'option'|\n 'progressbar'|'radio'|'scrollbar'|'searchbox'|'slider'|'spinbutton'|\n 'status'|'switch'|'tab'|'tabpanel'|'textbox'|'timer'|'tooltip'|'treeitem'|\n 'combobox'|'grid'|'listbox'|'menu'|'menubar'|'radiogroup'|'tablist'|'tree'|\n 'treegrid'|'application'|'article'|'cell'|'columnheader'|'definition'|\n 'directory'|'document'|'feed'|'figure'|'group'|'heading'|'img'|'list'|\n 'listitem'|'math'|'none'|'note'|'presentation'|'region'|'row'|'rowgroup'|\n 'rowheader'|'separator'|'table'|'term'|'text'|'toolbar'|'banner'|\n 'complementary'|'contentinfo'|'form'|'main'|'navigation'|'region'|'search'|\n 'doc-abstract'|'doc-acknowledgments'|'doc-afterword'|'doc-appendix'|\n 'doc-backlink'|'doc-biblioentry'|'doc-bibliography'|'doc-biblioref'|\n 'doc-chapter'|'doc-colophon'|'doc-conclusion'|'doc-cover'|'doc-credit'|\n 'doc-credits'|'doc-dedication'|'doc-endnote'|'doc-endnotes'|'doc-epigraph'|\n 'doc-epilogue'|'doc-errata'|'doc-example'|'doc-footnote'|'doc-foreword'|\n 'doc-glossary'|'doc-glossref'|'doc-index'|'doc-introduction'|'doc-noteref'|\n 'doc-notice'|'doc-pagebreak'|'doc-pagelist'|'doc-part'|'doc-preface'|\n 'doc-prologue'|'doc-pullquote'|'doc-qna'|'doc-subtitle'|'doc-tip'|'doc-toc';\n"]}
|
|
1
|
+
{"version":3,"file":"aria.js","sourceRoot":"","sources":["aria.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, ReactiveElement} from 'lit';\n\n/**\n * Accessibility Object Model reflective aria property name types.\n */\nexport type ARIAProperty = Exclude<keyof ARIAMixin, 'role'>;\n\n/**\n * Accessibility Object Model reflective aria properties.\n */\nexport const ARIA_PROPERTIES: ARIAProperty[] = [\n 'ariaAtomic',\n 'ariaAutoComplete',\n 'ariaBusy',\n 'ariaChecked',\n 'ariaColCount',\n 'ariaColIndex',\n 'ariaColSpan',\n 'ariaCurrent',\n 'ariaDisabled',\n 'ariaExpanded',\n 'ariaHasPopup',\n 'ariaHidden',\n 'ariaInvalid',\n 'ariaKeyShortcuts',\n 'ariaLabel',\n 'ariaLevel',\n 'ariaLive',\n 'ariaModal',\n 'ariaMultiLine',\n 'ariaMultiSelectable',\n 'ariaOrientation',\n 'ariaPlaceholder',\n 'ariaPosInSet',\n 'ariaPressed',\n 'ariaReadOnly',\n 'ariaRequired',\n 'ariaRoleDescription',\n 'ariaRowCount',\n 'ariaRowIndex',\n 'ariaRowSpan',\n 'ariaSelected',\n 'ariaSetSize',\n 'ariaSort',\n 'ariaValueMax',\n 'ariaValueMin',\n 'ariaValueNow',\n 'ariaValueText',\n];\n\n/**\n * Accessibility Object Model aria attribute name types.\n */\nexport type ARIAAttribute = ARIAPropertyToAttribute<ARIAProperty>;\n\n/**\n * Accessibility Object Model aria attributes.\n */\nexport const ARIA_ATTRIBUTES = ARIA_PROPERTIES.map(ariaPropertyToAttribute);\n\n/**\n * Checks if an attribute is one of the AOM aria attributes.\n *\n * @example\n * isAriaAttribute('aria-label'); // true\n *\n * @param attribute The attribute to check.\n * @return True if the attribute is an aria attribute, or false if not.\n */\nexport function isAriaAttribute(attribute: string): attribute is ARIAAttribute {\n return attribute.startsWith('aria-');\n}\n\n/**\n * Converts an AOM aria property into its corresponding attribute.\n *\n * @example\n * ariaPropertyToAttribute('ariaLabel'); // 'aria-label'\n *\n * @param property The aria property.\n * @return The aria attribute.\n */\nexport function ariaPropertyToAttribute<K extends ARIAProperty|'role'>(\n property: K) {\n return property\n .replace('aria', 'aria-')\n // IDREF attributes also include an \"Element\" or \"Elements\" suffix\n .replace(/Elements?/g, '')\n .toLowerCase() as ARIAPropertyToAttribute<K>;\n}\n\n// Converts an `ariaFoo` string type to an `aria-foo` string type.\ntype ARIAPropertyToAttribute<K extends string> =\n K extends `aria${infer Suffix}Element${infer OptS}` ?\n `aria-${Lowercase < Suffix >}` :\n K extends `aria${infer Suffix}` ? `aria-${Lowercase < Suffix >}` : K;\n\n/**\n * An extension of `ARIAMixin` that enforces strict value types for aria\n * properties.\n *\n * This is needed for correct typing in render functions with lit analyzer.\n *\n * @example\n * render() {\n * const {ariaLabel} = this as ARIAMixinStrict;\n * return html`\n * <button aria-label=${ariaLabel || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * }\n */\nexport interface ARIAMixinStrict extends ARIAMixin {\n ariaAtomic: 'true'|'false'|null;\n ariaAutoComplete: 'none'|'inline'|'list'|'both'|null;\n ariaBusy: 'true'|'false'|null;\n ariaChecked: 'true'|'false'|null;\n ariaColCount: `${number}`|null;\n ariaColIndex: `${number}`|null;\n ariaColSpan: `${number}`|null;\n ariaCurrent: 'page'|'step'|'location'|'date'|'time'|'true'|'false'|null;\n ariaDisabled: 'true'|'false'|null;\n ariaExpanded: 'true'|'false'|null;\n ariaHasPopup: 'false'|'true'|'menu'|'listbox'|'tree'|'grid'|'dialog'|null;\n ariaHidden: 'true'|'false'|null;\n ariaInvalid: 'true'|'false'|null;\n ariaKeyShortcuts: string|null;\n ariaLabel: string|null;\n ariaLevel: `${number}`|null;\n ariaLive: 'assertive'|'off'|'polite'|null;\n ariaModal: 'true'|'false'|null;\n ariaMultiLine: 'true'|'false'|null;\n ariaMultiSelectable: 'true'|'false'|null;\n ariaOrientation: 'horizontal'|'vertical'|'undefined'|null;\n ariaPlaceholder: string|null;\n ariaPosInSet: `${number}`|null;\n ariaPressed: 'true'|'false'|null;\n ariaReadOnly: 'true'|'false'|null;\n ariaRequired: 'true'|'false'|null;\n ariaRoleDescription: string|null;\n ariaRowCount: `${number}`|null;\n ariaRowIndex: `${number}`|null;\n ariaRowSpan: `${number}`|null;\n ariaSelected: 'true'|'false'|null;\n ariaSetSize: `${number}`|null;\n ariaSort: 'ascending'|'descending'|'none'|'other'|null;\n ariaValueMax: `${number}`|null;\n ariaValueMin: `${number}`|null;\n ariaValueNow: `${number}`|null;\n ariaValueText: string|null;\n role: ARIARole|null;\n}\n\n/**\n * Valid values for `role`.\n */\nexport type ARIARole =\n 'alert'|'alertdialog'|'button'|'checkbox'|'dialog'|'gridcell'|'link'|'log'|\n 'marquee'|'menuitem'|'menuitemcheckbox'|'menuitemradio'|'option'|\n 'progressbar'|'radio'|'scrollbar'|'searchbox'|'slider'|'spinbutton'|\n 'status'|'switch'|'tab'|'tabpanel'|'textbox'|'timer'|'tooltip'|'treeitem'|\n 'combobox'|'grid'|'listbox'|'menu'|'menubar'|'radiogroup'|'tablist'|'tree'|\n 'treegrid'|'application'|'article'|'cell'|'columnheader'|'definition'|\n 'directory'|'document'|'feed'|'figure'|'group'|'heading'|'img'|'list'|\n 'listitem'|'math'|'none'|'note'|'presentation'|'region'|'row'|'rowgroup'|\n 'rowheader'|'separator'|'table'|'term'|'text'|'toolbar'|'banner'|\n 'complementary'|'contentinfo'|'form'|'main'|'navigation'|'region'|'search'|\n 'doc-abstract'|'doc-acknowledgments'|'doc-afterword'|'doc-appendix'|\n 'doc-backlink'|'doc-biblioentry'|'doc-bibliography'|'doc-biblioref'|\n 'doc-chapter'|'doc-colophon'|'doc-conclusion'|'doc-cover'|'doc-credit'|\n 'doc-credits'|'doc-dedication'|'doc-endnote'|'doc-endnotes'|'doc-epigraph'|\n 'doc-epilogue'|'doc-errata'|'doc-example'|'doc-footnote'|'doc-foreword'|\n 'doc-glossary'|'doc-glossref'|'doc-index'|'doc-introduction'|'doc-noteref'|\n 'doc-notice'|'doc-pagebreak'|'doc-pagelist'|'doc-part'|'doc-preface'|\n 'doc-prologue'|'doc-pullquote'|'doc-qna'|'doc-subtitle'|'doc-tip'|'doc-toc';\n\n/**\n * Enables a host custom element to be the target for aria roles and attributes.\n * Components should set the `elementInternals.role` property.\n *\n * By default, aria components are tab focusable. Provide a `focusable: false`\n * option for components that should not be tab focusable, such as\n * `role=\"listbox\"`.\n *\n * This function will also polyfill aria `ElementInternals` properties for\n * Firefox.\n *\n * @param ctor The `ReactiveElement` constructor to set up.\n * @param options Options to configure the element's host aria.\n */\nexport function setupHostAria(\n ctor: typeof ReactiveElement, {focusable}: SetupHostAriaOptions = {}) {\n if (focusable !== false) {\n ctor.addInitializer(host => {\n host.addController({\n hostConnected() {\n if (host.hasAttribute('tabindex')) {\n return;\n }\n\n host.tabIndex = 0;\n }\n });\n });\n }\n\n if (isServer || 'role' in Element.prototype) {\n return;\n }\n\n // Polyfill reflective aria properties for Firefox\n for (const ariaProperty of ARIA_PROPERTIES) {\n ctor.createProperty(ariaProperty, {\n attribute: ariaPropertyToAttribute(ariaProperty),\n reflect: true,\n });\n }\n\n ctor.createProperty('role', {reflect: true});\n}\n\n/**\n * Options for setting up a host element as an aria target.\n */\nexport interface SetupHostAriaOptions {\n /**\n * Whether or not the element can be focused with the tab key. Defaults to\n * true.\n *\n * Set this to false for aria roles that should not be tab focusable, such as\n * `role=\"listbox\"`.\n */\n focusable?: boolean;\n}\n\n/**\n * Polyfills an element and its `ElementInternals` to support `ARIAMixin`\n * properties on internals. This is needed for Firefox.\n *\n * `setupHostAria()` must be called for the element class.\n *\n * @example\n * class XButton extends LitElement {\n * static {\n * setupHostAria(XButton);\n * }\n *\n * private internals =\n * polyfillElementInternalsAria(this, this.attachInternals());\n *\n * constructor() {\n * super();\n * this.internals.role = 'button';\n * }\n * }\n */\nexport function polyfillElementInternalsAria(\n host: ReactiveElement, internals: ElementInternals) {\n if (checkIfElementInternalsSupportsAria(internals)) {\n return internals;\n }\n\n if (!('role' in host)) {\n throw new Error('Missing setupHostAria()');\n }\n\n let firstConnectedCallbacks: Array<() => void> = [];\n let hasBeenConnected = false;\n\n // Add support for Firefox, which has not yet implement ElementInternals aria\n for (const ariaProperty of ARIA_PROPERTIES) {\n let ariaValueBeforeConnected: string|null = null;\n Object.defineProperty(internals, ariaProperty, {\n enumerable: true,\n configurable: true,\n get() {\n if (!hasBeenConnected) {\n return ariaValueBeforeConnected;\n }\n\n // Dynamic lookup rather than hardcoding all properties.\n // tslint:disable-next-line:no-dict-access-on-struct-type\n return host[ariaProperty];\n },\n set(value: string|null) {\n const setValue = () => {\n // Dynamic lookup rather than hardcoding all properties.\n // tslint:disable-next-line:no-dict-access-on-struct-type\n host[ariaProperty] = value;\n };\n\n if (!hasBeenConnected) {\n ariaValueBeforeConnected = value;\n firstConnectedCallbacks.push(setValue);\n return;\n }\n\n setValue();\n },\n });\n }\n\n let roleValueBeforeConnected: string|null = null;\n Object.defineProperty(internals, 'role', {\n enumerable: true,\n configurable: true,\n get() {\n if (!hasBeenConnected) {\n return roleValueBeforeConnected;\n }\n\n return host.getAttribute('role');\n },\n set(value: string|null) {\n const setRole = () => {\n if (value === null) {\n host.removeAttribute('role');\n } else {\n host.setAttribute('role', value);\n }\n };\n\n if (!hasBeenConnected) {\n roleValueBeforeConnected = value;\n firstConnectedCallbacks.push(setRole);\n return;\n }\n\n setRole();\n },\n });\n\n host.addController({\n hostConnected() {\n if (hasBeenConnected) {\n return;\n }\n\n hasBeenConnected = true;\n for (const callback of firstConnectedCallbacks) {\n callback();\n }\n\n // Remove strong callback references\n firstConnectedCallbacks = [];\n }\n });\n\n return internals;\n}\n\n\n// Separate function so that typescript doesn't complain about internals being\n// \"never\".\nfunction checkIfElementInternalsSupportsAria(internals: ElementInternals) {\n return 'role' in internals;\n}\n"]}
|
|
@@ -33,15 +33,15 @@ export interface Attachable {
|
|
|
33
33
|
*/
|
|
34
34
|
htmlFor: string | null;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
* one of:
|
|
36
|
+
* Gets or sets the element that controls the visibility of the attachable
|
|
37
|
+
* element. It is one of:
|
|
38
38
|
*
|
|
39
39
|
* - The control referenced by the `for` attribute.
|
|
40
40
|
* - The control provided to `element.attach(control)`
|
|
41
41
|
* - The element's parent.
|
|
42
42
|
* - `null` if the element is not controlled.
|
|
43
43
|
*/
|
|
44
|
-
|
|
44
|
+
control: HTMLElement | null;
|
|
45
45
|
/**
|
|
46
46
|
* Attaches the element to an interactive control.
|
|
47
47
|
*
|
|
@@ -91,7 +91,8 @@ export declare class AttachableController implements ReactiveController, Attacha
|
|
|
91
91
|
private readonly onControlChange;
|
|
92
92
|
get htmlFor(): string | null;
|
|
93
93
|
set htmlFor(htmlFor: string | null);
|
|
94
|
-
get control(): HTMLElement;
|
|
94
|
+
get control(): HTMLElement | null;
|
|
95
|
+
set control(control: HTMLElement | null);
|
|
95
96
|
private currentControl;
|
|
96
97
|
/**
|
|
97
98
|
* Creates a new controller for an `Attachable` element.
|