@material/web 1.5.1 → 1.5.2-nightly.5b73f4c.0
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/button/internal/_elevated-button.scss +1 -3
- package/button/internal/_elevation.scss +2 -2
- package/button/internal/_filled-button.scss +1 -3
- package/button/internal/_filled-tonal-button.scss +1 -3
- package/button/internal/_icon.scss +1 -1
- package/button/internal/_outlined-button.scss +4 -6
- package/button/internal/_shared.scss +4 -4
- package/button/internal/_text-button.scss +1 -3
- package/button/internal/button.d.ts +11 -2
- package/button/internal/button.js +33 -13
- package/button/internal/button.js.map +1 -1
- package/button/internal/elevated-styles.css.map +1 -1
- package/button/internal/filled-styles.css.map +1 -1
- package/button/internal/filled-tonal-styles.css.map +1 -1
- package/button/internal/outlined-styles.css +1 -1
- package/button/internal/outlined-styles.css.map +1 -1
- package/button/internal/outlined-styles.js +1 -1
- package/button/internal/outlined-styles.js.map +1 -1
- package/button/internal/shared-elevation-styles.css +1 -1
- package/button/internal/shared-elevation-styles.css.map +1 -1
- package/button/internal/shared-elevation-styles.js +1 -1
- package/button/internal/shared-elevation-styles.js.map +1 -1
- package/button/internal/shared-styles.css +1 -1
- package/button/internal/shared-styles.css.map +1 -1
- package/button/internal/shared-styles.js +1 -1
- package/button/internal/shared-styles.js.map +1 -1
- package/button/internal/text-styles.css.map +1 -1
- package/checkbox/internal/_checkbox.scss +1 -3
- package/checkbox/internal/checkbox-styles.css.map +1 -1
- package/checkbox/internal/checkbox.d.ts +1 -1
- package/checkbox/internal/checkbox.js +2 -5
- package/checkbox/internal/checkbox.js.map +1 -1
- package/chips/internal/_assist-chip.scss +1 -3
- package/chips/internal/_filter-chip.scss +1 -3
- package/chips/internal/_input-chip.scss +1 -3
- package/chips/internal/_shared.scss +17 -4
- package/chips/internal/_suggestion-chip.scss +1 -3
- package/chips/internal/assist-chip.js +3 -2
- package/chips/internal/assist-chip.js.map +1 -1
- package/chips/internal/assist-styles.css.map +1 -1
- package/chips/internal/chip.d.ts +18 -1
- package/chips/internal/chip.js +49 -16
- package/chips/internal/chip.js.map +1 -1
- package/chips/internal/filter-chip.d.ts +1 -1
- package/chips/internal/filter-chip.js +5 -4
- package/chips/internal/filter-chip.js.map +1 -1
- package/chips/internal/filter-styles.css.map +1 -1
- package/chips/internal/input-chip.js +4 -3
- package/chips/internal/input-chip.js.map +1 -1
- package/chips/internal/input-styles.css.map +1 -1
- package/chips/internal/multi-action-chip.d.ts +1 -1
- package/chips/internal/multi-action-chip.js +5 -1
- package/chips/internal/multi-action-chip.js.map +1 -1
- package/chips/internal/shared-styles.css +1 -1
- package/chips/internal/shared-styles.css.map +1 -1
- package/chips/internal/shared-styles.js +1 -1
- package/chips/internal/shared-styles.js.map +1 -1
- package/chips/internal/suggestion-styles.css.map +1 -1
- package/chips/internal/trailing-icons.d.ts +1 -1
- package/chips/internal/trailing-icons.js +7 -2
- package/chips/internal/trailing-icons.js.map +1 -1
- package/dialog/internal/_dialog.scss +1 -3
- package/dialog/internal/dialog-styles.css.map +1 -1
- package/dialog/internal/dialog.d.ts +3 -1
- package/dialog/internal/dialog.js +12 -6
- package/dialog/internal/dialog.js.map +1 -1
- package/divider/internal/_divider.scss +1 -3
- package/divider/internal/divider-styles.css.map +1 -1
- package/elevation/internal/_elevation.scss +1 -3
- package/elevation/internal/elevation-styles.css.map +1 -1
- package/fab/internal/_fab-branded.scss +1 -3
- package/fab/internal/_fab.scss +1 -3
- package/fab/internal/fab-branded-styles.css.map +1 -1
- package/fab/internal/fab-styles.css.map +1 -1
- package/fab/internal/shared-styles.css.map +1 -1
- package/fab/internal/shared.d.ts +3 -1
- package/fab/internal/shared.js +4 -5
- package/fab/internal/shared.js.map +1 -1
- package/field/internal/_filled-field.scss +1 -3
- package/field/internal/_outlined-field.scss +1 -3
- package/field/internal/field.js +2 -2
- package/field/internal/field.js.map +1 -1
- package/field/internal/filled-styles.css.map +1 -1
- package/field/internal/outlined-styles.css.map +1 -1
- package/focus/internal/_focus-ring.scss +1 -3
- package/focus/internal/focus-ring-styles.css.map +1 -1
- package/icon/internal/_icon.scss +1 -3
- package/icon/internal/icon-styles.css.map +1 -1
- package/iconbutton/internal/_filled-icon-button.scss +8 -10
- package/iconbutton/internal/_filled-tonal-icon-button.scss +8 -12
- package/iconbutton/internal/_icon-button.scss +4 -6
- package/iconbutton/internal/_outlined-icon-button.scss +8 -10
- package/iconbutton/internal/_shared.scss +3 -2
- package/iconbutton/internal/filled-styles.css +1 -1
- package/iconbutton/internal/filled-styles.css.map +1 -1
- package/iconbutton/internal/filled-styles.js +1 -1
- package/iconbutton/internal/filled-styles.js.map +1 -1
- package/iconbutton/internal/filled-tonal-styles.css +1 -1
- package/iconbutton/internal/filled-tonal-styles.css.map +1 -1
- package/iconbutton/internal/filled-tonal-styles.js +1 -1
- package/iconbutton/internal/filled-tonal-styles.js.map +1 -1
- package/iconbutton/internal/icon-button.d.ts +16 -4
- package/iconbutton/internal/icon-button.js +62 -30
- package/iconbutton/internal/icon-button.js.map +1 -1
- package/iconbutton/internal/outlined-styles.css +1 -1
- package/iconbutton/internal/outlined-styles.css.map +1 -1
- package/iconbutton/internal/outlined-styles.js +1 -1
- package/iconbutton/internal/outlined-styles.js.map +1 -1
- package/iconbutton/internal/shared-styles.css +1 -1
- package/iconbutton/internal/shared-styles.css.map +1 -1
- package/iconbutton/internal/shared-styles.js +1 -1
- package/iconbutton/internal/shared-styles.js.map +1 -1
- package/iconbutton/internal/standard-styles.css +1 -1
- package/iconbutton/internal/standard-styles.css.map +1 -1
- package/iconbutton/internal/standard-styles.js +1 -1
- package/iconbutton/internal/standard-styles.js.map +1 -1
- package/internal/aria/aria.js +1 -1
- package/internal/aria/aria.js.map +1 -1
- package/internal/aria/delegate.d.ts +34 -17
- package/internal/aria/delegate.js +149 -26
- package/internal/aria/delegate.js.map +1 -1
- package/labs/badge/internal/badge-styles.css +1 -1
- package/labs/badge/internal/badge-styles.css.map +1 -1
- package/labs/badge/internal/badge-styles.js +1 -1
- package/labs/badge/internal/badge-styles.js.map +1 -1
- package/labs/card/internal/_elevated-card.scss +1 -3
- package/labs/card/internal/_filled-card.scss +1 -3
- package/labs/card/internal/_outlined-card.scss +1 -3
- package/labs/card/internal/elevated-styles.css.map +1 -1
- package/labs/card/internal/filled-styles.css.map +1 -1
- package/labs/card/internal/outlined-styles.css.map +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.css +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.css.map +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.js +1 -1
- package/labs/navigationbar/internal/navigation-bar-styles.js.map +1 -1
- package/labs/navigationbar/internal/navigation-bar.d.ts +3 -1
- package/labs/navigationbar/internal/navigation-bar.js +4 -5
- package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
- package/labs/navigationdrawer/internal/navigation-drawer-modal.d.ts +3 -1
- package/labs/navigationdrawer/internal/navigation-drawer-modal.js +4 -5
- package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
- package/labs/navigationdrawer/internal/navigation-drawer.d.ts +3 -1
- package/labs/navigationdrawer/internal/navigation-drawer.js +4 -5
- package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
- package/labs/navigationtab/internal/navigation-tab-styles.css +1 -1
- package/labs/navigationtab/internal/navigation-tab-styles.css.map +1 -1
- package/labs/navigationtab/internal/navigation-tab-styles.js +1 -1
- package/labs/navigationtab/internal/navigation-tab-styles.js.map +1 -1
- package/labs/navigationtab/internal/navigation-tab.d.ts +3 -1
- package/labs/navigationtab/internal/navigation-tab.js +4 -5
- package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
- package/labs/segmentedbutton/internal/outlined-styles.css +1 -1
- package/labs/segmentedbutton/internal/outlined-styles.css.map +1 -1
- package/labs/segmentedbutton/internal/outlined-styles.js +1 -1
- package/labs/segmentedbutton/internal/outlined-styles.js.map +1 -1
- package/labs/segmentedbutton/internal/segmented-button.d.ts +3 -1
- package/labs/segmentedbutton/internal/segmented-button.js +4 -5
- package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
- package/labs/segmentedbuttonset/internal/_outlined-segmented-button-set.scss +1 -3
- package/labs/segmentedbuttonset/internal/outlined-styles.css.map +1 -1
- package/labs/segmentedbuttonset/internal/segmented-button-set.d.ts +3 -1
- package/labs/segmentedbuttonset/internal/segmented-button-set.js +4 -5
- package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
- package/list/internal/_list.scss +1 -3
- package/list/internal/list-styles.css.map +1 -1
- package/list/internal/listitem/_list-item.scss +1 -3
- package/list/internal/listitem/list-item-styles.css.map +1 -1
- package/list/internal/listitem/list-item.d.ts +3 -1
- package/list/internal/listitem/list-item.js +4 -5
- package/list/internal/listitem/list-item.js.map +1 -1
- package/menu/internal/_menu.scss +1 -3
- package/menu/internal/menu-styles.css.map +1 -1
- package/menu/internal/menuitem/_menu-item.scss +1 -3
- package/menu/internal/menuitem/menu-item-styles.css.map +1 -1
- package/menu/internal/menuitem/menu-item.d.ts +3 -1
- package/menu/internal/menuitem/menu-item.js +4 -5
- package/menu/internal/menuitem/menu-item.js.map +1 -1
- package/migrations/v2/query-selector-aria.d.ts +22 -0
- package/migrations/v2/query-selector-aria.js +30 -0
- package/migrations/v2/query-selector-aria.js.map +1 -0
- package/package.json +1 -1
- package/progress/internal/_circular-progress.scss +1 -3
- package/progress/internal/_linear-progress.scss +1 -3
- package/progress/internal/circular-progress-styles.css.map +1 -1
- package/progress/internal/linear-progress-styles.css.map +1 -1
- package/progress/internal/progress.d.ts +3 -1
- package/progress/internal/progress.js +4 -5
- package/progress/internal/progress.js.map +1 -1
- package/radio/internal/_radio.scss +1 -3
- package/radio/internal/radio-styles.css.map +1 -1
- package/ripple/internal/_ripple.scss +1 -3
- package/ripple/internal/ripple-styles.css.map +1 -1
- package/select/internal/_filled-select.scss +1 -3
- package/select/internal/_outlined-select.scss +1 -3
- package/select/internal/filled-select-styles.css.map +1 -1
- package/select/internal/outlined-select-styles.css.map +1 -1
- package/select/internal/select.d.ts +1 -1
- package/select/internal/select.js +2 -5
- package/select/internal/select.js.map +1 -1
- package/select/internal/selectoption/select-option.d.ts +2 -1
- package/select/internal/selectoption/select-option.js +4 -5
- package/select/internal/selectoption/select-option.js.map +1 -1
- package/slider/internal/_slider.scss +1 -3
- package/slider/internal/slider-styles.css.map +1 -1
- package/slider/internal/slider.d.ts +1 -1
- package/slider/internal/slider.js +3 -6
- package/slider/internal/slider.js.map +1 -1
- package/switch/internal/_switch.scss +1 -3
- package/switch/internal/switch-styles.css.map +1 -1
- package/switch/internal/switch.d.ts +1 -1
- package/switch/internal/switch.js +2 -5
- package/switch/internal/switch.js.map +1 -1
- package/tabs/internal/_primary-tab.scss +1 -3
- package/tabs/internal/_secondary-tab.scss +1 -3
- package/tabs/internal/primary-tab-styles.css.map +1 -1
- package/tabs/internal/secondary-tab-styles.css.map +1 -1
- package/tabs/internal/tabs.js +1 -1
- package/tabs/internal/tabs.js.map +1 -1
- package/textfield/internal/_filled-text-field.scss +1 -3
- package/textfield/internal/_outlined-text-field.scss +1 -3
- package/textfield/internal/filled-styles.css.map +1 -1
- package/textfield/internal/outlined-styles.css.map +1 -1
- package/textfield/internal/text-field.d.ts +1 -1
- package/textfield/internal/text-field.js +2 -5
- package/textfield/internal/text-field.js.map +1 -1
- package/tokens/_md-comp-assist-chip.scss +1 -3
- package/tokens/_md-comp-badge.scss +1 -3
- package/tokens/_md-comp-checkbox.scss +1 -3
- package/tokens/_md-comp-circular-progress.scss +1 -3
- package/tokens/_md-comp-dialog.scss +1 -3
- package/tokens/_md-comp-divider.scss +1 -3
- package/tokens/_md-comp-elevated-button.scss +1 -3
- package/tokens/_md-comp-elevated-card.scss +1 -3
- package/tokens/_md-comp-elevation.scss +1 -3
- package/tokens/_md-comp-fab-branded.scss +1 -3
- package/tokens/_md-comp-fab.scss +1 -3
- package/tokens/_md-comp-filled-button.scss +1 -3
- package/tokens/_md-comp-filled-card.scss +1 -3
- package/tokens/_md-comp-filled-field.scss +1 -3
- package/tokens/_md-comp-filled-icon-button.scss +1 -3
- package/tokens/_md-comp-filled-select.scss +1 -3
- package/tokens/_md-comp-filled-text-field.scss +1 -3
- package/tokens/_md-comp-filled-tonal-button.scss +1 -3
- package/tokens/_md-comp-filled-tonal-icon-button.scss +1 -3
- package/tokens/_md-comp-filter-chip.scss +1 -3
- package/tokens/_md-comp-focus-ring.scss +1 -3
- package/tokens/_md-comp-icon-button.scss +1 -3
- package/tokens/_md-comp-icon.scss +1 -3
- package/tokens/_md-comp-input-chip.scss +1 -3
- package/tokens/_md-comp-linear-progress.scss +1 -3
- package/tokens/_md-comp-list-item.scss +1 -3
- package/tokens/_md-comp-list.scss +1 -3
- package/tokens/_md-comp-menu-item.scss +3 -4
- package/tokens/_md-comp-menu.scss +1 -3
- package/tokens/_md-comp-navigation-bar.scss +1 -3
- package/tokens/_md-comp-navigation-drawer.scss +1 -3
- package/tokens/_md-comp-outlined-button.scss +1 -3
- package/tokens/_md-comp-outlined-card.scss +1 -3
- package/tokens/_md-comp-outlined-field.scss +1 -3
- package/tokens/_md-comp-outlined-icon-button.scss +1 -3
- package/tokens/_md-comp-outlined-segmented-button.scss +1 -3
- package/tokens/_md-comp-outlined-select.scss +1 -3
- package/tokens/_md-comp-outlined-text-field.scss +1 -3
- package/tokens/_md-comp-primary-tab.scss +1 -3
- package/tokens/_md-comp-radio.scss +1 -3
- package/tokens/_md-comp-ripple.scss +1 -3
- package/tokens/_md-comp-secondary-tab.scss +1 -3
- package/tokens/_md-comp-slider.scss +1 -3
- package/tokens/_md-comp-suggestion-chip.scss +1 -3
- package/tokens/_md-comp-switch.scss +1 -3
- package/tokens/_md-comp-text-button.scss +1 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.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 '../../elevation/elevation.js';\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues} from 'lit';\nimport {property, query, queryAsync, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport {when} from 'lit/directives/when.js';\n\nimport {ARIAMixinStrict} from '../../internal/aria/aria.js';\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {\n dispatchActivationClick,\n isActivationClick,\n} from '../../internal/events/form-label-activation.js';\nimport {redispatchEvent} from '../../internal/events/redispatch-event.js';\nimport {mixinElementInternals} from '../../labs/behaviors/element-internals.js';\nimport {\n getFormValue,\n mixinFormAssociated,\n} from '../../labs/behaviors/form-associated.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\n// Disable warning for classMap with destructuring\n// tslint:disable:no-implicit-dictionary-conversion\n\n// Separate variable needed for closure.\nconst sliderBaseClass = mixinFormAssociated(mixinElementInternals(LitElement));\n\n/**\n * Slider component.\n *\n *\n * @fires change {Event} The native `change` event on\n * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)\n * --bubbles\n * @fires input {InputEvent} The native `input` event on\n * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)\n * --bubbles --composed\n */\nexport class Slider extends sliderBaseClass {\n static {\n requestUpdateOnAriaChange(Slider);\n }\n\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /**\n * The slider minimum value\n */\n @property({type: Number}) min = 0;\n\n /**\n * The slider maximum value\n */\n @property({type: Number}) max = 100;\n\n /**\n * The slider value displayed when range is false.\n */\n @property({type: Number}) value?: number;\n\n /**\n * The slider start value displayed when range is true.\n */\n @property({type: Number, attribute: 'value-start'}) valueStart?: number;\n\n /**\n * The slider end value displayed when range is true.\n */\n @property({type: Number, attribute: 'value-end'}) valueEnd?: number;\n\n /**\n * An optional label for the slider's value displayed when range is\n * false; if not set, the label is the value itself.\n */\n @property({attribute: 'value-label'}) valueLabel = '';\n\n /**\n * An optional label for the slider's start value displayed when\n * range is true; if not set, the label is the valueStart itself.\n */\n @property({attribute: 'value-label-start'}) valueLabelStart = '';\n\n /**\n * An optional label for the slider's end value displayed when\n * range is true; if not set, the label is the valueEnd itself.\n */\n @property({attribute: 'value-label-end'}) valueLabelEnd = '';\n\n /**\n * Aria label for the slider's start handle displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-start'}) ariaLabelStart = '';\n\n /**\n * Aria value text for the slider's start value displayed when\n * range is true.\n */\n @property({attribute: 'aria-valuetext-start'}) ariaValueTextStart = '';\n\n /**\n * Aria label for the slider's end handle displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-end'}) ariaLabelEnd = '';\n\n /**\n * Aria value text for the slider's end value displayed when\n * range is true.\n */\n @property({attribute: 'aria-valuetext-end'}) ariaValueTextEnd = '';\n\n /**\n * The step between values.\n */\n @property({type: Number}) step = 1;\n\n /**\n * Whether or not to show tick marks.\n */\n @property({type: Boolean}) ticks = false;\n\n /**\n * Whether or not to show a value label when activated.\n */\n @property({type: Boolean}) labeled = false;\n\n /**\n * Whether or not to show a value range. When false, the slider displays\n * a slideable handle for the value property; when true, it displays\n * slideable handles for the valueStart and valueEnd properties.\n */\n @property({type: Boolean}) range = false;\n\n /**\n * The HTML name to use in form submission for a range slider's starting\n * value. Use `name` instead if both the start and end values should use the\n * same name.\n */\n get nameStart() {\n return this.getAttribute('name-start') ?? this.name;\n }\n set nameStart(name: string) {\n this.setAttribute('name-start', name);\n }\n\n /**\n * The HTML name to use in form submission for a range slider's ending value.\n * Use `name` instead if both the start and end values should use the same\n * name.\n */\n get nameEnd() {\n return this.getAttribute('name-end') ?? this.nameStart;\n }\n set nameEnd(name: string) {\n this.setAttribute('name-end', name);\n }\n\n @query('input.start') private readonly inputStart!: HTMLInputElement | null;\n @query('.handle.start') private readonly handleStart!: HTMLDivElement | null;\n @queryAsync('md-ripple.start')\n private readonly rippleStart!: Promise<MdRipple | null>;\n\n @query('input.end') private readonly inputEnd!: HTMLInputElement | null;\n @query('.handle.end') private readonly handleEnd!: HTMLDivElement | null;\n @queryAsync('md-ripple.end')\n private readonly rippleEnd!: Promise<MdRipple | null>;\n\n // handle hover/pressed states are set manually since the handle\n // does not receive pointer events so that the native inputs are\n // interaction targets.\n @state() private handleStartHover = false;\n @state() private handleEndHover = false;\n\n @state() private startOnTop = false;\n @state() private handlesOverlapping = false;\n\n @state() private renderValueStart?: number;\n @state() private renderValueEnd?: number;\n\n // Note: start aria-* properties are only applied when range=true, which is\n // why they do not need to handle both cases.\n private get renderAriaLabelStart() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n return (\n this.ariaLabelStart ||\n (ariaLabel && `${ariaLabel} start`) ||\n this.valueLabelStart ||\n String(this.valueStart)\n );\n }\n\n private get renderAriaValueTextStart() {\n return (\n this.ariaValueTextStart || this.valueLabelStart || String(this.valueStart)\n );\n }\n\n // Note: end aria-* properties are applied for single and range sliders, which\n // is why it needs to handle `this.range` (while start aria-* properties do\n // not).\n private get renderAriaLabelEnd() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n if (this.range) {\n return (\n this.ariaLabelEnd ||\n (ariaLabel && `${ariaLabel} end`) ||\n this.valueLabelEnd ||\n String(this.valueEnd)\n );\n }\n\n return ariaLabel || this.valueLabel || String(this.value);\n }\n\n private get renderAriaValueTextEnd() {\n if (this.range) {\n return (\n this.ariaValueTextEnd || this.valueLabelEnd || String(this.valueEnd)\n );\n }\n\n // Needed for conformance\n const {ariaValueText} = this as ARIAMixinStrict;\n return ariaValueText || this.valueLabel || String(this.value);\n }\n\n // used in synthetic events generated to control ripple hover state.\n private ripplePointerId = 1;\n\n // flag to prevent processing of re-dispatched input event.\n private isRedispatchingEvent = false;\n\n private action?: Action;\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event) || !this.inputEnd) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.inputEnd);\n });\n }\n }\n\n override focus() {\n this.inputEnd?.focus();\n }\n\n protected override willUpdate(changed: PropertyValues) {\n this.renderValueStart = changed.has('valueStart')\n ? this.valueStart\n : this.inputStart?.valueAsNumber;\n const endValueChanged =\n (changed.has('valueEnd') && this.range) || changed.has('value');\n this.renderValueEnd = endValueChanged\n ? this.range\n ? this.valueEnd\n : this.value\n : this.inputEnd?.valueAsNumber;\n // manually handle ripple hover state since the handle is pointer events\n // none.\n if (changed.get('handleStartHover') !== undefined) {\n this.toggleRippleHover(this.rippleStart, this.handleStartHover);\n } else if (changed.get('handleEndHover') !== undefined) {\n this.toggleRippleHover(this.rippleEnd, this.handleEndHover);\n }\n }\n\n protected override updated(changed: PropertyValues) {\n // Validate input rendered value and re-render if necessary. This ensures\n // the rendred handle stays in sync with the input thumb which is used for\n // interaction. These can get out of sync if a supplied value does not\n // map to an exactly stepped value between min and max.\n if (this.range) {\n this.renderValueStart = this.inputStart!.valueAsNumber;\n }\n this.renderValueEnd = this.inputEnd!.valueAsNumber;\n // update values if they are unset\n // when using a range, default to equi-distant between\n // min - valueStart - valueEnd - max\n if (this.range) {\n const segment = (this.max - this.min) / 3;\n if (this.valueStart === undefined) {\n this.inputStart!.valueAsNumber = this.min + segment;\n // read actual value from input\n const v = this.inputStart!.valueAsNumber;\n this.valueStart = this.renderValueStart = v;\n }\n if (this.valueEnd === undefined) {\n this.inputEnd!.valueAsNumber = this.min + 2 * segment;\n // read actual value from input\n const v = this.inputEnd!.valueAsNumber;\n this.valueEnd = this.renderValueEnd = v;\n }\n } else {\n this.value ??= this.renderValueEnd;\n }\n if (\n changed.has('range') ||\n changed.has('renderValueStart') ||\n changed.has('renderValueEnd') ||\n this.isUpdatePending\n ) {\n // Only check if the handle nubs are overlapping, as the ripple touch\n // target extends subtantially beyond the boundary of the handle nub.\n const startNub = this.handleStart?.querySelector('.handleNub');\n const endNub = this.handleEnd?.querySelector('.handleNub');\n this.handlesOverlapping = isOverlapping(startNub, endNub);\n }\n // called to finish the update imediately;\n // note, this is a no-op unless an update is scheduled\n this.performUpdate();\n }\n\n protected override render() {\n const step = this.step === 0 ? 1 : this.step;\n const range = Math.max(this.max - this.min, step);\n const startFraction = this.range\n ? ((this.renderValueStart ?? this.min) - this.min) / range\n : 0;\n const endFraction = ((this.renderValueEnd ?? this.min) - this.min) / range;\n const containerStyles = {\n // for clipping inputs and active track.\n '--_start-fraction': String(startFraction),\n '--_end-fraction': String(endFraction),\n // for generating tick marks\n '--_tick-count': String(range / step),\n };\n const containerClasses = {ranged: this.range};\n\n // optional label values to show in place of the value.\n const labelStart = this.valueLabelStart || String(this.renderValueStart);\n const labelEnd =\n (this.range ? this.valueLabelEnd : this.valueLabel) ||\n String(this.renderValueEnd);\n\n const inputStartProps = {\n start: true,\n value: this.renderValueStart,\n ariaLabel: this.renderAriaLabelStart,\n ariaValueText: this.renderAriaValueTextStart,\n ariaMin: this.min,\n ariaMax: this.valueEnd ?? this.max,\n };\n\n const inputEndProps = {\n start: false,\n value: this.renderValueEnd,\n ariaLabel: this.renderAriaLabelEnd,\n ariaValueText: this.renderAriaValueTextEnd,\n ariaMin: this.range ? this.valueStart ?? this.min : this.min,\n ariaMax: this.max,\n };\n\n const handleStartProps = {\n start: true,\n hover: this.handleStartHover,\n label: labelStart,\n };\n\n const handleEndProps = {\n start: false,\n hover: this.handleEndHover,\n label: labelEnd,\n };\n\n const handleContainerClasses = {\n hover: this.handleStartHover || this.handleEndHover,\n };\n\n return html` <div\n class=\"container ${classMap(containerClasses)}\"\n style=${styleMap(containerStyles)}>\n ${when(this.range, () => this.renderInput(inputStartProps))}\n ${this.renderInput(inputEndProps)} ${this.renderTrack()}\n <div class=\"handleContainerPadded\">\n <div class=\"handleContainerBlock\">\n <div class=\"handleContainer ${classMap(handleContainerClasses)}\">\n ${when(this.range, () => this.renderHandle(handleStartProps))}\n ${this.renderHandle(handleEndProps)}\n </div>\n </div>\n </div>\n </div>`;\n }\n\n private renderTrack() {\n return html`\n <div class=\"track\"></div>\n ${this.ticks ? html`<div class=\"tickmarks\"></div>` : nothing}\n `;\n }\n\n private renderLabel(value: string) {\n return html`<div class=\"label\" aria-hidden=\"true\">\n <span class=\"labelContent\" part=\"label\">${value}</span>\n </div>`;\n }\n\n private renderHandle({\n start,\n hover,\n label,\n }: {\n start: boolean;\n hover: boolean;\n label: string;\n }) {\n const onTop = !this.disabled && start === this.startOnTop;\n const isOverlapping = !this.disabled && this.handlesOverlapping;\n const name = start ? 'start' : 'end';\n return html`<div\n class=\"handle ${classMap({\n [name]: true,\n hover,\n onTop,\n isOverlapping,\n })}\">\n <md-focus-ring part=\"focus-ring\" for=${name}></md-focus-ring>\n <md-ripple\n for=${name}\n class=${name}\n ?disabled=${this.disabled}></md-ripple>\n <div class=\"handleNub\">\n <md-elevation part=\"elevation\"></md-elevation>\n </div>\n ${when(this.labeled, () => this.renderLabel(label))}\n </div>`;\n }\n\n private renderInput({\n start,\n value,\n ariaLabel,\n ariaValueText,\n ariaMin,\n ariaMax,\n }: {\n start: boolean;\n value?: number;\n ariaLabel: string;\n ariaValueText: string;\n ariaMin: number;\n ariaMax: number;\n }) {\n // Slider requires min/max set to the overall min/max for both inputs.\n // This is reported to screen readers, which is why we need aria-valuemin\n // and aria-valuemax.\n const name = start ? `start` : `end`;\n return html`<input\n type=\"range\"\n class=\"${classMap({\n start,\n end: !start,\n })}\"\n @focus=${this.handleFocus}\n @pointerdown=${this.handleDown}\n @pointerup=${this.handleUp}\n @pointerenter=${this.handleEnter}\n @pointermove=${this.handleMove}\n @pointerleave=${this.handleLeave}\n @keydown=${this.handleKeydown}\n @keyup=${this.handleKeyup}\n @input=${this.handleInput}\n @change=${this.handleChange}\n id=${name}\n .disabled=${this.disabled}\n .min=${String(this.min)}\n aria-valuemin=${ariaMin}\n .max=${String(this.max)}\n aria-valuemax=${ariaMax}\n .step=${String(this.step)}\n .value=${String(value)}\n .tabIndex=${start ? 1 : 0}\n aria-label=${ariaLabel || nothing}\n aria-valuetext=${ariaValueText} />`;\n }\n\n private async toggleRippleHover(\n ripple: Promise<MdRipple | null>,\n hovering: boolean,\n ) {\n const rippleEl = await ripple;\n if (!rippleEl) {\n return;\n }\n // TODO(b/269799771): improve slider ripple connection\n if (hovering) {\n rippleEl.handlePointerenter(\n new PointerEvent('pointerenter', {\n isPrimary: true,\n pointerId: this.ripplePointerId,\n }),\n );\n } else {\n rippleEl.handlePointerleave(\n new PointerEvent('pointerleave', {\n isPrimary: true,\n pointerId: this.ripplePointerId,\n }),\n );\n }\n }\n\n private handleFocus(event: Event) {\n this.updateOnTop(event.target as HTMLInputElement);\n }\n\n private startAction(event: Event) {\n const target = event.target as HTMLInputElement;\n const fixed =\n target === this.inputStart ? this.inputEnd! : this.inputStart!;\n this.action = {\n canFlip: event.type === 'pointerdown',\n flipped: false,\n target,\n fixed,\n values: new Map([\n [target, target.valueAsNumber],\n [fixed, fixed?.valueAsNumber],\n ]),\n };\n }\n\n private finishAction(event: Event) {\n this.action = undefined;\n }\n\n private handleKeydown(event: KeyboardEvent) {\n this.startAction(event);\n }\n\n private handleKeyup(event: KeyboardEvent) {\n this.finishAction(event);\n }\n\n private handleDown(event: PointerEvent) {\n this.startAction(event);\n this.ripplePointerId = event.pointerId;\n const isStart = (event.target as HTMLInputElement) === this.inputStart;\n // Since handle moves to pointer on down and there may not be a move,\n // it needs to be considered hovered..\n this.handleStartHover =\n !this.disabled && isStart && Boolean(this.handleStart);\n this.handleEndHover = !this.disabled && !isStart && Boolean(this.handleEnd);\n }\n\n private async handleUp(event: PointerEvent) {\n if (!this.action) {\n return;\n }\n\n const {target, values, flipped} = this.action;\n // Async here for Firefox because input can be after pointerup\n // when value is calmped.\n await new Promise(requestAnimationFrame);\n if (target !== undefined) {\n // Ensure Safari focuses input so label renders.\n // Ensure any flipped input is focused so the tab order is right.\n target.focus();\n // When action is flipped, change must be fired manually since the\n // real event target did not change.\n if (flipped && target.valueAsNumber !== values.get(target)!) {\n target.dispatchEvent(new Event('change', {bubbles: true}));\n }\n }\n this.finishAction(event);\n }\n\n /**\n * The move handler tracks handle hovering to facilitate proper ripple\n * behavior on the slider handle. This is needed because user interaction with\n * the native input is leveraged to position the handle. Because the separate\n * displayed handle element has pointer events disabled (to allow interaction\n * with the input) and the input's handle is a pseudo-element, neither can be\n * the ripple's interactive element. Therefore the input is the ripple's\n * interactive element and has a `ripple` directive; however the ripple\n * is gated on the handle being hovered. In addition, because the ripple\n * hover state is being specially handled, it must be triggered independent\n * of the directive. This is done based on the hover state when the\n * slider is updated.\n */\n private handleMove(event: PointerEvent) {\n this.handleStartHover = !this.disabled && inBounds(event, this.handleStart);\n this.handleEndHover = !this.disabled && inBounds(event, this.handleEnd);\n }\n\n private handleEnter(event: PointerEvent) {\n this.handleMove(event);\n }\n\n private handleLeave() {\n this.handleStartHover = false;\n this.handleEndHover = false;\n }\n\n private updateOnTop(input: HTMLInputElement) {\n this.startOnTop = input.classList.contains('start');\n }\n\n private needsClamping() {\n if (!this.action) {\n return false;\n }\n\n const {target, fixed} = this.action;\n const isStart = target === this.inputStart;\n return isStart\n ? target.valueAsNumber > fixed.valueAsNumber\n : target.valueAsNumber < fixed.valueAsNumber;\n }\n\n // if start/end start coincident and the first drag input would e.g. move\n // start > end, avoid clamping and \"flip\" to use the other input\n // as the action target.\n private isActionFlipped() {\n const {action} = this;\n if (!action) {\n return false;\n }\n\n const {target, fixed, values} = action;\n if (action.canFlip) {\n const coincident = values.get(target) === values.get(fixed);\n if (coincident && this.needsClamping()) {\n action.canFlip = false;\n action.flipped = true;\n action.target = fixed;\n action.fixed = target;\n }\n }\n return action.flipped;\n }\n\n // when flipped, apply the drag input to the flipped target and reset\n // the actual target.\n private flipAction() {\n if (!this.action) {\n return false;\n }\n\n const {target, fixed, values} = this.action;\n const changed = target.valueAsNumber !== fixed.valueAsNumber;\n target.valueAsNumber = fixed.valueAsNumber;\n fixed.valueAsNumber = values.get(fixed)!;\n return changed;\n }\n\n // clamp such that start does not move beyond end and visa versa.\n private clampAction() {\n if (!this.needsClamping() || !this.action) {\n return false;\n }\n const {target, fixed} = this.action;\n target.valueAsNumber = fixed.valueAsNumber;\n return true;\n }\n\n private handleInput(event: InputEvent) {\n // avoid processing a re-dispatched event\n if (this.isRedispatchingEvent) {\n return;\n }\n let stopPropagation = false;\n let redispatch = false;\n if (this.range) {\n if (this.isActionFlipped()) {\n stopPropagation = true;\n redispatch = this.flipAction();\n }\n if (this.clampAction()) {\n stopPropagation = true;\n redispatch = false;\n }\n }\n const target = event.target as HTMLInputElement;\n this.updateOnTop(target);\n // update value only on interaction\n if (this.range) {\n this.valueStart = this.inputStart!.valueAsNumber;\n this.valueEnd = this.inputEnd!.valueAsNumber;\n } else {\n this.value = this.inputEnd!.valueAsNumber;\n }\n // control external visibility of input event\n if (stopPropagation) {\n event.stopPropagation();\n }\n // ensure event path is correct when flipped.\n if (redispatch) {\n this.isRedispatchingEvent = true;\n redispatchEvent(target, event);\n this.isRedispatchingEvent = false;\n }\n }\n\n private handleChange(event: Event) {\n // prevent keyboard triggered changes from dispatching for\n // clamped values; note, this only occurs for keyboard\n const changeTarget = event.target as HTMLInputElement;\n const {target, values} = this.action ?? {};\n const squelch =\n target && target.valueAsNumber === values!.get(changeTarget)!;\n if (!squelch) {\n redispatchEvent(this, event);\n }\n // ensure keyboard triggered change clears action.\n this.finishAction(event);\n }\n\n // Writable mixin properties for lit-html binding, needed for lit-analyzer\n declare disabled: boolean;\n declare name: string;\n\n override [getFormValue]() {\n if (this.range) {\n const data = new FormData();\n data.append(this.nameStart, String(this.valueStart));\n data.append(this.nameEnd, String(this.valueEnd));\n return data;\n }\n\n return String(this.value);\n }\n\n override formResetCallback() {\n if (this.range) {\n const valueStart = this.getAttribute('value-start');\n this.valueStart = valueStart !== null ? Number(valueStart) : undefined;\n const valueEnd = this.getAttribute('value-end');\n this.valueEnd = valueEnd !== null ? Number(valueEnd) : undefined;\n return;\n }\n const value = this.getAttribute('value');\n this.value = value !== null ? Number(value) : undefined;\n }\n\n override formStateRestoreCallback(\n state: string | Array<[string, string]> | null,\n ) {\n if (Array.isArray(state)) {\n const [[, valueStart], [, valueEnd]] = state;\n this.valueStart = Number(valueStart);\n this.valueEnd = Number(valueEnd);\n this.range = true;\n return;\n }\n\n this.value = Number(state);\n this.range = false;\n }\n}\n\nfunction inBounds({x, y}: PointerEvent, element?: HTMLElement | null) {\n if (!element) {\n return false;\n }\n const {top, left, bottom, right} = element.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n}\n\nfunction isOverlapping(\n elA: Element | null | undefined,\n elB: Element | null | undefined,\n) {\n if (!(elA && elB)) {\n return false;\n }\n const a = elA.getBoundingClientRect();\n const b = elB.getBoundingClientRect();\n return !(\n a.top > b.bottom ||\n a.right < b.left ||\n a.bottom < b.top ||\n a.left > b.right\n );\n}\n\ninterface Action {\n canFlip: boolean;\n flipped: boolean;\n target: HTMLInputElement;\n fixed: HTMLInputElement;\n values: Map<HTMLInputElement | undefined, number | undefined>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.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 '../../elevation/elevation.js';\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues} from 'lit';\nimport {property, query, queryAsync, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport {when} from 'lit/directives/when.js';\n\nimport {ARIAMixinStrict} from '../../internal/aria/aria.js';\nimport {mixinDelegatesAria} from '../../internal/aria/delegate.js';\nimport {\n dispatchActivationClick,\n isActivationClick,\n} from '../../internal/events/form-label-activation.js';\nimport {redispatchEvent} from '../../internal/events/redispatch-event.js';\nimport {mixinElementInternals} from '../../labs/behaviors/element-internals.js';\nimport {\n getFormValue,\n mixinFormAssociated,\n} from '../../labs/behaviors/form-associated.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\n// Disable warning for classMap with destructuring\n// tslint:disable:no-implicit-dictionary-conversion\n\n// Separate variable needed for closure.\nconst sliderBaseClass = mixinDelegatesAria(\n mixinFormAssociated(mixinElementInternals(LitElement)),\n);\n\n/**\n * Slider component.\n *\n *\n * @fires change {Event} The native `change` event on\n * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)\n * --bubbles\n * @fires input {InputEvent} The native `input` event on\n * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)\n * --bubbles --composed\n */\nexport class Slider extends sliderBaseClass {\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /**\n * The slider minimum value\n */\n @property({type: Number}) min = 0;\n\n /**\n * The slider maximum value\n */\n @property({type: Number}) max = 100;\n\n /**\n * The slider value displayed when range is false.\n */\n @property({type: Number}) value?: number;\n\n /**\n * The slider start value displayed when range is true.\n */\n @property({type: Number, attribute: 'value-start'}) valueStart?: number;\n\n /**\n * The slider end value displayed when range is true.\n */\n @property({type: Number, attribute: 'value-end'}) valueEnd?: number;\n\n /**\n * An optional label for the slider's value displayed when range is\n * false; if not set, the label is the value itself.\n */\n @property({attribute: 'value-label'}) valueLabel = '';\n\n /**\n * An optional label for the slider's start value displayed when\n * range is true; if not set, the label is the valueStart itself.\n */\n @property({attribute: 'value-label-start'}) valueLabelStart = '';\n\n /**\n * An optional label for the slider's end value displayed when\n * range is true; if not set, the label is the valueEnd itself.\n */\n @property({attribute: 'value-label-end'}) valueLabelEnd = '';\n\n /**\n * Aria label for the slider's start handle displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-start'}) ariaLabelStart = '';\n\n /**\n * Aria value text for the slider's start value displayed when\n * range is true.\n */\n @property({attribute: 'aria-valuetext-start'}) ariaValueTextStart = '';\n\n /**\n * Aria label for the slider's end handle displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-end'}) ariaLabelEnd = '';\n\n /**\n * Aria value text for the slider's end value displayed when\n * range is true.\n */\n @property({attribute: 'aria-valuetext-end'}) ariaValueTextEnd = '';\n\n /**\n * The step between values.\n */\n @property({type: Number}) step = 1;\n\n /**\n * Whether or not to show tick marks.\n */\n @property({type: Boolean}) ticks = false;\n\n /**\n * Whether or not to show a value label when activated.\n */\n @property({type: Boolean}) labeled = false;\n\n /**\n * Whether or not to show a value range. When false, the slider displays\n * a slideable handle for the value property; when true, it displays\n * slideable handles for the valueStart and valueEnd properties.\n */\n @property({type: Boolean}) range = false;\n\n /**\n * The HTML name to use in form submission for a range slider's starting\n * value. Use `name` instead if both the start and end values should use the\n * same name.\n */\n get nameStart() {\n return this.getAttribute('name-start') ?? this.name;\n }\n set nameStart(name: string) {\n this.setAttribute('name-start', name);\n }\n\n /**\n * The HTML name to use in form submission for a range slider's ending value.\n * Use `name` instead if both the start and end values should use the same\n * name.\n */\n get nameEnd() {\n return this.getAttribute('name-end') ?? this.nameStart;\n }\n set nameEnd(name: string) {\n this.setAttribute('name-end', name);\n }\n\n @query('input.start') private readonly inputStart!: HTMLInputElement | null;\n @query('.handle.start') private readonly handleStart!: HTMLDivElement | null;\n @queryAsync('md-ripple.start')\n private readonly rippleStart!: Promise<MdRipple | null>;\n\n @query('input.end') private readonly inputEnd!: HTMLInputElement | null;\n @query('.handle.end') private readonly handleEnd!: HTMLDivElement | null;\n @queryAsync('md-ripple.end')\n private readonly rippleEnd!: Promise<MdRipple | null>;\n\n // handle hover/pressed states are set manually since the handle\n // does not receive pointer events so that the native inputs are\n // interaction targets.\n @state() private handleStartHover = false;\n @state() private handleEndHover = false;\n\n @state() private startOnTop = false;\n @state() private handlesOverlapping = false;\n\n @state() private renderValueStart?: number;\n @state() private renderValueEnd?: number;\n\n // Note: start aria-* properties are only applied when range=true, which is\n // why they do not need to handle both cases.\n private get renderAriaLabelStart() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n return (\n this.ariaLabelStart ||\n (ariaLabel && `${ariaLabel} start`) ||\n this.valueLabelStart ||\n String(this.valueStart)\n );\n }\n\n private get renderAriaValueTextStart() {\n return (\n this.ariaValueTextStart || this.valueLabelStart || String(this.valueStart)\n );\n }\n\n // Note: end aria-* properties are applied for single and range sliders, which\n // is why it needs to handle `this.range` (while start aria-* properties do\n // not).\n private get renderAriaLabelEnd() {\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n if (this.range) {\n return (\n this.ariaLabelEnd ||\n (ariaLabel && `${ariaLabel} end`) ||\n this.valueLabelEnd ||\n String(this.valueEnd)\n );\n }\n\n return ariaLabel || this.valueLabel || String(this.value);\n }\n\n private get renderAriaValueTextEnd() {\n if (this.range) {\n return (\n this.ariaValueTextEnd || this.valueLabelEnd || String(this.valueEnd)\n );\n }\n\n // Needed for conformance\n const {ariaValueText} = this as ARIAMixinStrict;\n return ariaValueText || this.valueLabel || String(this.value);\n }\n\n // used in synthetic events generated to control ripple hover state.\n private ripplePointerId = 1;\n\n // flag to prevent processing of re-dispatched input event.\n private isRedispatchingEvent = false;\n\n private action?: Action;\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event) || !this.inputEnd) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.inputEnd);\n });\n }\n }\n\n override focus() {\n this.inputEnd?.focus();\n }\n\n protected override willUpdate(changed: PropertyValues) {\n this.renderValueStart = changed.has('valueStart')\n ? this.valueStart\n : this.inputStart?.valueAsNumber;\n const endValueChanged =\n (changed.has('valueEnd') && this.range) || changed.has('value');\n this.renderValueEnd = endValueChanged\n ? this.range\n ? this.valueEnd\n : this.value\n : this.inputEnd?.valueAsNumber;\n // manually handle ripple hover state since the handle is pointer events\n // none.\n if (changed.get('handleStartHover') !== undefined) {\n this.toggleRippleHover(this.rippleStart, this.handleStartHover);\n } else if (changed.get('handleEndHover') !== undefined) {\n this.toggleRippleHover(this.rippleEnd, this.handleEndHover);\n }\n }\n\n protected override updated(changed: PropertyValues) {\n // Validate input rendered value and re-render if necessary. This ensures\n // the rendred handle stays in sync with the input thumb which is used for\n // interaction. These can get out of sync if a supplied value does not\n // map to an exactly stepped value between min and max.\n if (this.range) {\n this.renderValueStart = this.inputStart!.valueAsNumber;\n }\n this.renderValueEnd = this.inputEnd!.valueAsNumber;\n // update values if they are unset\n // when using a range, default to equi-distant between\n // min - valueStart - valueEnd - max\n if (this.range) {\n const segment = (this.max - this.min) / 3;\n if (this.valueStart === undefined) {\n this.inputStart!.valueAsNumber = this.min + segment;\n // read actual value from input\n const v = this.inputStart!.valueAsNumber;\n this.valueStart = this.renderValueStart = v;\n }\n if (this.valueEnd === undefined) {\n this.inputEnd!.valueAsNumber = this.min + 2 * segment;\n // read actual value from input\n const v = this.inputEnd!.valueAsNumber;\n this.valueEnd = this.renderValueEnd = v;\n }\n } else {\n this.value ??= this.renderValueEnd;\n }\n if (\n changed.has('range') ||\n changed.has('renderValueStart') ||\n changed.has('renderValueEnd') ||\n this.isUpdatePending\n ) {\n // Only check if the handle nubs are overlapping, as the ripple touch\n // target extends subtantially beyond the boundary of the handle nub.\n const startNub = this.handleStart?.querySelector('.handleNub');\n const endNub = this.handleEnd?.querySelector('.handleNub');\n this.handlesOverlapping = isOverlapping(startNub, endNub);\n }\n // called to finish the update imediately;\n // note, this is a no-op unless an update is scheduled\n this.performUpdate();\n }\n\n protected override render() {\n const step = this.step === 0 ? 1 : this.step;\n const range = Math.max(this.max - this.min, step);\n const startFraction = this.range\n ? ((this.renderValueStart ?? this.min) - this.min) / range\n : 0;\n const endFraction = ((this.renderValueEnd ?? this.min) - this.min) / range;\n const containerStyles = {\n // for clipping inputs and active track.\n '--_start-fraction': String(startFraction),\n '--_end-fraction': String(endFraction),\n // for generating tick marks\n '--_tick-count': String(range / step),\n };\n const containerClasses = {ranged: this.range};\n\n // optional label values to show in place of the value.\n const labelStart = this.valueLabelStart || String(this.renderValueStart);\n const labelEnd =\n (this.range ? this.valueLabelEnd : this.valueLabel) ||\n String(this.renderValueEnd);\n\n const inputStartProps = {\n start: true,\n value: this.renderValueStart,\n ariaLabel: this.renderAriaLabelStart,\n ariaValueText: this.renderAriaValueTextStart,\n ariaMin: this.min,\n ariaMax: this.valueEnd ?? this.max,\n };\n\n const inputEndProps = {\n start: false,\n value: this.renderValueEnd,\n ariaLabel: this.renderAriaLabelEnd,\n ariaValueText: this.renderAriaValueTextEnd,\n ariaMin: this.range ? this.valueStart ?? this.min : this.min,\n ariaMax: this.max,\n };\n\n const handleStartProps = {\n start: true,\n hover: this.handleStartHover,\n label: labelStart,\n };\n\n const handleEndProps = {\n start: false,\n hover: this.handleEndHover,\n label: labelEnd,\n };\n\n const handleContainerClasses = {\n hover: this.handleStartHover || this.handleEndHover,\n };\n\n return html` <div\n class=\"container ${classMap(containerClasses)}\"\n style=${styleMap(containerStyles)}>\n ${when(this.range, () => this.renderInput(inputStartProps))}\n ${this.renderInput(inputEndProps)} ${this.renderTrack()}\n <div class=\"handleContainerPadded\">\n <div class=\"handleContainerBlock\">\n <div class=\"handleContainer ${classMap(handleContainerClasses)}\">\n ${when(this.range, () => this.renderHandle(handleStartProps))}\n ${this.renderHandle(handleEndProps)}\n </div>\n </div>\n </div>\n </div>`;\n }\n\n private renderTrack() {\n return html`\n <div class=\"track\"></div>\n ${this.ticks ? html`<div class=\"tickmarks\"></div>` : nothing}\n `;\n }\n\n private renderLabel(value: string) {\n return html`<div class=\"label\" aria-hidden=\"true\">\n <span class=\"labelContent\" part=\"label\">${value}</span>\n </div>`;\n }\n\n private renderHandle({\n start,\n hover,\n label,\n }: {\n start: boolean;\n hover: boolean;\n label: string;\n }) {\n const onTop = !this.disabled && start === this.startOnTop;\n const isOverlapping = !this.disabled && this.handlesOverlapping;\n const name = start ? 'start' : 'end';\n return html`<div\n class=\"handle ${classMap({\n [name]: true,\n hover,\n onTop,\n isOverlapping,\n })}\">\n <md-focus-ring part=\"focus-ring\" for=${name}></md-focus-ring>\n <md-ripple\n for=${name}\n class=${name}\n ?disabled=${this.disabled}></md-ripple>\n <div class=\"handleNub\">\n <md-elevation part=\"elevation\"></md-elevation>\n </div>\n ${when(this.labeled, () => this.renderLabel(label))}\n </div>`;\n }\n\n private renderInput({\n start,\n value,\n ariaLabel,\n ariaValueText,\n ariaMin,\n ariaMax,\n }: {\n start: boolean;\n value?: number;\n ariaLabel: string;\n ariaValueText: string;\n ariaMin: number;\n ariaMax: number;\n }) {\n // Slider requires min/max set to the overall min/max for both inputs.\n // This is reported to screen readers, which is why we need aria-valuemin\n // and aria-valuemax.\n const name = start ? `start` : `end`;\n return html`<input\n type=\"range\"\n class=\"${classMap({\n start,\n end: !start,\n })}\"\n @focus=${this.handleFocus}\n @pointerdown=${this.handleDown}\n @pointerup=${this.handleUp}\n @pointerenter=${this.handleEnter}\n @pointermove=${this.handleMove}\n @pointerleave=${this.handleLeave}\n @keydown=${this.handleKeydown}\n @keyup=${this.handleKeyup}\n @input=${this.handleInput}\n @change=${this.handleChange}\n id=${name}\n .disabled=${this.disabled}\n .min=${String(this.min)}\n aria-valuemin=${ariaMin}\n .max=${String(this.max)}\n aria-valuemax=${ariaMax}\n .step=${String(this.step)}\n .value=${String(value)}\n .tabIndex=${start ? 1 : 0}\n aria-label=${ariaLabel || nothing}\n aria-valuetext=${ariaValueText} />`;\n }\n\n private async toggleRippleHover(\n ripple: Promise<MdRipple | null>,\n hovering: boolean,\n ) {\n const rippleEl = await ripple;\n if (!rippleEl) {\n return;\n }\n // TODO(b/269799771): improve slider ripple connection\n if (hovering) {\n rippleEl.handlePointerenter(\n new PointerEvent('pointerenter', {\n isPrimary: true,\n pointerId: this.ripplePointerId,\n }),\n );\n } else {\n rippleEl.handlePointerleave(\n new PointerEvent('pointerleave', {\n isPrimary: true,\n pointerId: this.ripplePointerId,\n }),\n );\n }\n }\n\n private handleFocus(event: Event) {\n this.updateOnTop(event.target as HTMLInputElement);\n }\n\n private startAction(event: Event) {\n const target = event.target as HTMLInputElement;\n const fixed =\n target === this.inputStart ? this.inputEnd! : this.inputStart!;\n this.action = {\n canFlip: event.type === 'pointerdown',\n flipped: false,\n target,\n fixed,\n values: new Map([\n [target, target.valueAsNumber],\n [fixed, fixed?.valueAsNumber],\n ]),\n };\n }\n\n private finishAction(event: Event) {\n this.action = undefined;\n }\n\n private handleKeydown(event: KeyboardEvent) {\n this.startAction(event);\n }\n\n private handleKeyup(event: KeyboardEvent) {\n this.finishAction(event);\n }\n\n private handleDown(event: PointerEvent) {\n this.startAction(event);\n this.ripplePointerId = event.pointerId;\n const isStart = (event.target as HTMLInputElement) === this.inputStart;\n // Since handle moves to pointer on down and there may not be a move,\n // it needs to be considered hovered..\n this.handleStartHover =\n !this.disabled && isStart && Boolean(this.handleStart);\n this.handleEndHover = !this.disabled && !isStart && Boolean(this.handleEnd);\n }\n\n private async handleUp(event: PointerEvent) {\n if (!this.action) {\n return;\n }\n\n const {target, values, flipped} = this.action;\n // Async here for Firefox because input can be after pointerup\n // when value is calmped.\n await new Promise(requestAnimationFrame);\n if (target !== undefined) {\n // Ensure Safari focuses input so label renders.\n // Ensure any flipped input is focused so the tab order is right.\n target.focus();\n // When action is flipped, change must be fired manually since the\n // real event target did not change.\n if (flipped && target.valueAsNumber !== values.get(target)!) {\n target.dispatchEvent(new Event('change', {bubbles: true}));\n }\n }\n this.finishAction(event);\n }\n\n /**\n * The move handler tracks handle hovering to facilitate proper ripple\n * behavior on the slider handle. This is needed because user interaction with\n * the native input is leveraged to position the handle. Because the separate\n * displayed handle element has pointer events disabled (to allow interaction\n * with the input) and the input's handle is a pseudo-element, neither can be\n * the ripple's interactive element. Therefore the input is the ripple's\n * interactive element and has a `ripple` directive; however the ripple\n * is gated on the handle being hovered. In addition, because the ripple\n * hover state is being specially handled, it must be triggered independent\n * of the directive. This is done based on the hover state when the\n * slider is updated.\n */\n private handleMove(event: PointerEvent) {\n this.handleStartHover = !this.disabled && inBounds(event, this.handleStart);\n this.handleEndHover = !this.disabled && inBounds(event, this.handleEnd);\n }\n\n private handleEnter(event: PointerEvent) {\n this.handleMove(event);\n }\n\n private handleLeave() {\n this.handleStartHover = false;\n this.handleEndHover = false;\n }\n\n private updateOnTop(input: HTMLInputElement) {\n this.startOnTop = input.classList.contains('start');\n }\n\n private needsClamping() {\n if (!this.action) {\n return false;\n }\n\n const {target, fixed} = this.action;\n const isStart = target === this.inputStart;\n return isStart\n ? target.valueAsNumber > fixed.valueAsNumber\n : target.valueAsNumber < fixed.valueAsNumber;\n }\n\n // if start/end start coincident and the first drag input would e.g. move\n // start > end, avoid clamping and \"flip\" to use the other input\n // as the action target.\n private isActionFlipped() {\n const {action} = this;\n if (!action) {\n return false;\n }\n\n const {target, fixed, values} = action;\n if (action.canFlip) {\n const coincident = values.get(target) === values.get(fixed);\n if (coincident && this.needsClamping()) {\n action.canFlip = false;\n action.flipped = true;\n action.target = fixed;\n action.fixed = target;\n }\n }\n return action.flipped;\n }\n\n // when flipped, apply the drag input to the flipped target and reset\n // the actual target.\n private flipAction() {\n if (!this.action) {\n return false;\n }\n\n const {target, fixed, values} = this.action;\n const changed = target.valueAsNumber !== fixed.valueAsNumber;\n target.valueAsNumber = fixed.valueAsNumber;\n fixed.valueAsNumber = values.get(fixed)!;\n return changed;\n }\n\n // clamp such that start does not move beyond end and visa versa.\n private clampAction() {\n if (!this.needsClamping() || !this.action) {\n return false;\n }\n const {target, fixed} = this.action;\n target.valueAsNumber = fixed.valueAsNumber;\n return true;\n }\n\n private handleInput(event: InputEvent) {\n // avoid processing a re-dispatched event\n if (this.isRedispatchingEvent) {\n return;\n }\n let stopPropagation = false;\n let redispatch = false;\n if (this.range) {\n if (this.isActionFlipped()) {\n stopPropagation = true;\n redispatch = this.flipAction();\n }\n if (this.clampAction()) {\n stopPropagation = true;\n redispatch = false;\n }\n }\n const target = event.target as HTMLInputElement;\n this.updateOnTop(target);\n // update value only on interaction\n if (this.range) {\n this.valueStart = this.inputStart!.valueAsNumber;\n this.valueEnd = this.inputEnd!.valueAsNumber;\n } else {\n this.value = this.inputEnd!.valueAsNumber;\n }\n // control external visibility of input event\n if (stopPropagation) {\n event.stopPropagation();\n }\n // ensure event path is correct when flipped.\n if (redispatch) {\n this.isRedispatchingEvent = true;\n redispatchEvent(target, event);\n this.isRedispatchingEvent = false;\n }\n }\n\n private handleChange(event: Event) {\n // prevent keyboard triggered changes from dispatching for\n // clamped values; note, this only occurs for keyboard\n const changeTarget = event.target as HTMLInputElement;\n const {target, values} = this.action ?? {};\n const squelch =\n target && target.valueAsNumber === values!.get(changeTarget)!;\n if (!squelch) {\n redispatchEvent(this, event);\n }\n // ensure keyboard triggered change clears action.\n this.finishAction(event);\n }\n\n // Writable mixin properties for lit-html binding, needed for lit-analyzer\n declare disabled: boolean;\n declare name: string;\n\n override [getFormValue]() {\n if (this.range) {\n const data = new FormData();\n data.append(this.nameStart, String(this.valueStart));\n data.append(this.nameEnd, String(this.valueEnd));\n return data;\n }\n\n return String(this.value);\n }\n\n override formResetCallback() {\n if (this.range) {\n const valueStart = this.getAttribute('value-start');\n this.valueStart = valueStart !== null ? Number(valueStart) : undefined;\n const valueEnd = this.getAttribute('value-end');\n this.valueEnd = valueEnd !== null ? Number(valueEnd) : undefined;\n return;\n }\n const value = this.getAttribute('value');\n this.value = value !== null ? Number(value) : undefined;\n }\n\n override formStateRestoreCallback(\n state: string | Array<[string, string]> | null,\n ) {\n if (Array.isArray(state)) {\n const [[, valueStart], [, valueEnd]] = state;\n this.valueStart = Number(valueStart);\n this.valueEnd = Number(valueEnd);\n this.range = true;\n return;\n }\n\n this.value = Number(state);\n this.range = false;\n }\n}\n\nfunction inBounds({x, y}: PointerEvent, element?: HTMLElement | null) {\n if (!element) {\n return false;\n }\n const {top, left, bottom, right} = element.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n}\n\nfunction isOverlapping(\n elA: Element | null | undefined,\n elB: Element | null | undefined,\n) {\n if (!(elA && elB)) {\n return false;\n }\n const a = elA.getBoundingClientRect();\n const b = elB.getBoundingClientRect();\n return !(\n a.top > b.bottom ||\n a.right < b.left ||\n a.bottom < b.top ||\n a.left > b.right\n );\n}\n\ninterface Action {\n canFlip: boolean;\n flipped: boolean;\n target: HTMLInputElement;\n fixed: HTMLInputElement;\n values: Map<HTMLInputElement | undefined, number | undefined>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["_switch.scss","../../focus/internal/_focus-ring.scss","_track.scss","_handle.scss","../../ripple/internal/_ripple.scss","_icon.scss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["_switch.scss","../../focus/internal/_focus-ring.scss","_track.scss","_handle.scss","../../ripple/internal/_ripple.scss","_icon.scss"],"names":[],"mappings":"AAiCE,mBACA,cACE,MACE,oBACA,aACA,mBACA,0CACA,eAGF,kBACE,eAGF,8BACE,mEAGF,cC5BE,4jBDuCF,QACE,mBACA,oBACA,cACA,kBACA,yCACA,2CAGA,0IACA,sIACA,kIACA,sIAIF,MACE,gBACA,YACA,aACA,SACA,kBACA,WACA,UACA,eAGF,iCACE,cEhFJ,cACE,OACE,kBACA,WACA,YACA,sBAEA,sBAGA,aACA,uBACA,mBAIF,eACE,WACA,aACA,kBACA,YACA,WACA,sBACA,sBACA,6CACA,kCACA,yBAGF,iBACE,+BACA,2BAGF,iDAEE,gBACA,sDAGF,yBACE,4BAGF,yBACE,6FAGF,+BACE,mGAGF,sCACE,mGAGF,gCACE,qGAGF,0BACE,2BAGF,kCACE,yGAGF,2BACE,sGACA,wFACA,mBACA,uDAGF,iCACE,4GACA,8FAGF,yCACE,4GACA,8FAGF,kCACE,8GACA,gGAGF,oCACE,+GACA,qGAIJ,WACE,8BACE,yBACE,sBACA,wBAGF,yBACE,sBACA,UAGF,kCACE,sBCtGN,cACE,kBACE,aACA,qBACA,mBACA,kBAEA,gEAOF,4BACE,oBALO,+EAQT,8BACE,kBATO,+EAYT,4BACE,gBAGF,QAEE,4IACA,wIACA,oIACA,wIACA,4CACA,0CAEA,wBACA,iCACA,gCACA,iFACA,UAGF,gBACE,WACA,aACA,QACA,kBACA,sBACA,sBACA,wCAGF,4CAEE,gBAGF,kBACE,qDACA,mDAGF,kBACE,sDACA,oDAGF,kFAEE,oDACA,kDACA,kCACA,0BAGF,0BACE,8FAGF,gCACE,8GAGF,uCACE,8GAGF,iCACE,gHAGF,mCACE,uGACA,6DAGF,4BACE,qFAGF,kCACE,sGAGF,yCACE,sGAGF,mCACE,wGAGF,qCACE,iGACA,uDAGF,UACE,0FACA,+CACA,YACA,8CAGF,oBCxHE,oZDsIF,sBCtIE,uXDkJJ,WACE,8BACE,4BACE,sBAGF,0BACE,UAGF,qCACE,sBElKN,cACE,OACE,kBACA,YACA,WAGF,MACE,kBACA,QACA,YACA,aACA,mBACA,uBACA,kBAEA,2FAEA,UAGF,gBACE,gBAGF,2CAEE,UAIF,8CACE,yBAGF,WACE,uCACA,wCACA,0FAGF,6BACE,gGAGF,oCACE,gGAGF,8BACE,kGAGF,gCACE,mGACA,qDAGF,UACE,gDACA,iDACA,8FAGF,0BACE,oGAGF,iCACE,oGAGF,2BACE,sGAGF,6BACE,6FACA,+DAIJ,WACE,8BACE,WACE,YAGF,UACE,gBAGF,6DAEE,UAGF,oBACE","file":"switch-styles.css"}
|
|
@@ -9,7 +9,7 @@ import { LitElement, TemplateResult } from 'lit';
|
|
|
9
9
|
import { createValidator, getValidityAnchor } from '../../labs/behaviors/constraint-validation.js';
|
|
10
10
|
import { getFormState, getFormValue } from '../../labs/behaviors/form-associated.js';
|
|
11
11
|
import { CheckboxValidator } from '../../labs/behaviors/validators/checkbox-validator.js';
|
|
12
|
-
declare const switchBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>, import("../../labs/behaviors/constraint-validation.js").ConstraintValidation
|
|
12
|
+
declare const switchBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>, import("../../labs/behaviors/constraint-validation.js").ConstraintValidation>>;
|
|
13
13
|
/**
|
|
14
14
|
* @fires input {InputEvent} Fired whenever `selected` changes due to user
|
|
15
15
|
* interaction (bubbles and composed).
|
|
@@ -9,7 +9,7 @@ import '../../ripple/ripple.js';
|
|
|
9
9
|
import { html, isServer, LitElement, nothing } from 'lit';
|
|
10
10
|
import { property, query } from 'lit/decorators.js';
|
|
11
11
|
import { classMap } from 'lit/directives/class-map.js';
|
|
12
|
-
import {
|
|
12
|
+
import { mixinDelegatesAria } from '../../internal/aria/delegate.js';
|
|
13
13
|
import { afterDispatch, setupDispatchHooks, } from '../../internal/events/dispatch-hooks.js';
|
|
14
14
|
import { dispatchActivationClick, isActivationClick, } from '../../internal/events/form-label-activation.js';
|
|
15
15
|
import { redispatchEvent } from '../../internal/events/redispatch-event.js';
|
|
@@ -18,7 +18,7 @@ import { mixinElementInternals } from '../../labs/behaviors/element-internals.js
|
|
|
18
18
|
import { getFormState, getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-associated.js';
|
|
19
19
|
import { CheckboxValidator } from '../../labs/behaviors/validators/checkbox-validator.js';
|
|
20
20
|
// Separate variable needed for closure.
|
|
21
|
-
const switchBaseClass = mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(LitElement)));
|
|
21
|
+
const switchBaseClass = mixinDelegatesAria(mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(LitElement))));
|
|
22
22
|
/**
|
|
23
23
|
* @fires input {InputEvent} Fired whenever `selected` changes due to user
|
|
24
24
|
* interaction (bubbles and composed).
|
|
@@ -193,9 +193,6 @@ export class Switch extends switchBaseClass {
|
|
|
193
193
|
return this.input;
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
|
-
(() => {
|
|
197
|
-
requestUpdateOnAriaChange(Switch);
|
|
198
|
-
})();
|
|
199
196
|
/** @nocollapse */
|
|
200
197
|
Switch.shadowRootOptions = {
|
|
201
198
|
mode: 'open',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","sourceRoot":"","sources":["switch.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 '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, TemplateResult} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ClassInfo, classMap} from 'lit/directives/class-map.js';\n\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {\n afterDispatch,\n setupDispatchHooks,\n} from '../../internal/events/dispatch-hooks.js';\nimport {\n dispatchActivationClick,\n isActivationClick,\n} from '../../internal/events/form-label-activation.js';\nimport {redispatchEvent} from '../../internal/events/redispatch-event.js';\nimport {\n createValidator,\n getValidityAnchor,\n mixinConstraintValidation,\n} from '../../labs/behaviors/constraint-validation.js';\nimport {mixinElementInternals} from '../../labs/behaviors/element-internals.js';\nimport {\n getFormState,\n getFormValue,\n mixinFormAssociated,\n} from '../../labs/behaviors/form-associated.js';\nimport {CheckboxValidator} from '../../labs/behaviors/validators/checkbox-validator.js';\n\n// Separate variable needed for closure.\nconst switchBaseClass = mixinConstraintValidation(\n mixinFormAssociated(mixinElementInternals(LitElement)),\n);\n\n/**\n * @fires input {InputEvent} Fired whenever `selected` changes due to user\n * interaction (bubbles and composed).\n * @fires change {Event} Fired whenever `selected` changes due to user\n * interaction (bubbles).\n */\nexport class Switch extends switchBaseClass {\n static {\n requestUpdateOnAriaChange(Switch);\n }\n\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n /**\n * Puts the switch in the selected state and sets the form submission value to\n * the `value` property.\n */\n @property({type: Boolean}) selected = false;\n\n /**\n * Shows both the selected and deselected icons.\n */\n @property({type: Boolean}) icons = false;\n\n /**\n * Shows only the selected icon, and not the deselected icon. If `true`,\n * overrides the behavior of the `icons` property.\n */\n @property({type: Boolean, attribute: 'show-only-selected-icon'})\n showOnlySelectedIcon = false;\n\n /**\n * When true, require the switch to be selected when participating in\n * form submission.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#validation\n */\n @property({type: Boolean}) required = false;\n\n /**\n * The value associated with this switch on form submission. `null` is\n * submitted when `selected` is `false`.\n */\n @property() value = 'on';\n\n @query('input') private readonly input!: HTMLInputElement | null;\n\n constructor() {\n super();\n if (isServer) {\n return;\n }\n\n // This click listener does not currently need dispatch hooks since it does\n // not check `event.defaultPrevented`.\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event) || !this.input) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.input);\n });\n\n // Add the aria keyboard interaction pattern for switch and the Enter key.\n // See https://www.w3.org/WAI/ARIA/apg/patterns/switch/.\n setupDispatchHooks(this, 'keydown');\n this.addEventListener('keydown', (event: KeyboardEvent) => {\n afterDispatch(event, () => {\n const ignoreEvent = event.defaultPrevented || event.key !== 'Enter';\n if (ignoreEvent || this.disabled || !this.input) {\n return;\n }\n\n this.input.click();\n });\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div class=\"switch ${classMap(this.getRenderClasses())}\">\n <input\n id=\"switch\"\n class=\"touch\"\n type=\"checkbox\"\n role=\"switch\"\n aria-label=${(this as ARIAMixin).ariaLabel || nothing}\n ?checked=${this.selected}\n ?disabled=${this.disabled}\n ?required=${this.required}\n @input=${this.handleInput}\n @change=${this.handleChange} />\n\n <md-focus-ring part=\"focus-ring\" for=\"switch\"></md-focus-ring>\n <span class=\"track\"> ${this.renderHandle()} </span>\n </div>\n `;\n }\n\n private getRenderClasses(): ClassInfo {\n return {\n 'selected': this.selected,\n 'unselected': !this.selected,\n 'disabled': this.disabled,\n };\n }\n\n private renderHandle() {\n const classes = {\n 'with-icon': this.showOnlySelectedIcon ? this.selected : this.icons,\n };\n return html`\n ${this.renderTouchTarget()}\n <span class=\"handle-container\">\n <md-ripple for=\"switch\" ?disabled=\"${this.disabled}\"></md-ripple>\n <span class=\"handle ${classMap(classes)}\">\n ${this.shouldShowIcons() ? this.renderIcons() : html``}\n </span>\n </span>\n `;\n }\n\n private renderIcons() {\n return html`\n <div class=\"icons\">\n ${this.renderOnIcon()}\n ${this.showOnlySelectedIcon ? html`` : this.renderOffIcon()}\n </div>\n `;\n }\n\n /**\n * https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck%3AFILL%400%3Bwght%40500%3BGRAD%400%3Bopsz%4024\n */\n private renderOnIcon() {\n return html`\n <slot class=\"icon icon--on\" name=\"on-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M9.55 18.2 3.65 12.3 5.275 10.675 9.55 14.95 18.725 5.775 20.35 7.4Z\" />\n </svg>\n </slot>\n `;\n }\n\n /**\n * https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Aclose%3AFILL%400%3Bwght%40500%3BGRAD%400%3Bopsz%4024\n */\n private renderOffIcon() {\n return html`\n <slot class=\"icon icon--off\" name=\"off-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.4 19.2 4.8 17.6 10.4 12 4.8 6.4 6.4 4.8 12 10.4 17.6 4.8 19.2 6.4 13.6 12 19.2 17.6 17.6 19.2 12 13.6Z\" />\n </svg>\n </slot>\n `;\n }\n\n private renderTouchTarget() {\n return html`<span class=\"touch\"></span>`;\n }\n\n private shouldShowIcons(): boolean {\n return this.icons || this.showOnlySelectedIcon;\n }\n\n private handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.selected = target.checked;\n // <input> 'input' event bubbles and is composed, don't re-dispatch it.\n }\n\n private handleChange(event: Event) {\n // <input> 'change' event is not composed, re-dispatch it.\n redispatchEvent(this, event);\n }\n\n // Writable mixin properties for lit-html binding, needed for lit-analyzer\n declare disabled: boolean;\n declare name: string;\n\n override [getFormValue]() {\n return this.selected ? this.value : null;\n }\n\n override [getFormState]() {\n return String(this.selected);\n }\n\n override formResetCallback() {\n // The selected property does not reflect, so the original attribute set by\n // the user is used to determine the default value.\n this.selected = this.hasAttribute('selected');\n }\n\n override formStateRestoreCallback(state: string) {\n this.selected = state === 'true';\n }\n\n [createValidator]() {\n return new CheckboxValidator(() => ({\n checked: this.selected,\n required: this.required,\n }));\n }\n\n [getValidityAnchor]() {\n return this.input;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"switch.js","sourceRoot":"","sources":["switch.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 '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, TemplateResult} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ClassInfo, classMap} from 'lit/directives/class-map.js';\n\nimport {mixinDelegatesAria} from '../../internal/aria/delegate.js';\nimport {\n afterDispatch,\n setupDispatchHooks,\n} from '../../internal/events/dispatch-hooks.js';\nimport {\n dispatchActivationClick,\n isActivationClick,\n} from '../../internal/events/form-label-activation.js';\nimport {redispatchEvent} from '../../internal/events/redispatch-event.js';\nimport {\n createValidator,\n getValidityAnchor,\n mixinConstraintValidation,\n} from '../../labs/behaviors/constraint-validation.js';\nimport {mixinElementInternals} from '../../labs/behaviors/element-internals.js';\nimport {\n getFormState,\n getFormValue,\n mixinFormAssociated,\n} from '../../labs/behaviors/form-associated.js';\nimport {CheckboxValidator} from '../../labs/behaviors/validators/checkbox-validator.js';\n\n// Separate variable needed for closure.\nconst switchBaseClass = mixinDelegatesAria(\n mixinConstraintValidation(\n mixinFormAssociated(mixinElementInternals(LitElement)),\n ),\n);\n\n/**\n * @fires input {InputEvent} Fired whenever `selected` changes due to user\n * interaction (bubbles and composed).\n * @fires change {Event} Fired whenever `selected` changes due to user\n * interaction (bubbles).\n */\nexport class Switch extends switchBaseClass {\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n /**\n * Puts the switch in the selected state and sets the form submission value to\n * the `value` property.\n */\n @property({type: Boolean}) selected = false;\n\n /**\n * Shows both the selected and deselected icons.\n */\n @property({type: Boolean}) icons = false;\n\n /**\n * Shows only the selected icon, and not the deselected icon. If `true`,\n * overrides the behavior of the `icons` property.\n */\n @property({type: Boolean, attribute: 'show-only-selected-icon'})\n showOnlySelectedIcon = false;\n\n /**\n * When true, require the switch to be selected when participating in\n * form submission.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#validation\n */\n @property({type: Boolean}) required = false;\n\n /**\n * The value associated with this switch on form submission. `null` is\n * submitted when `selected` is `false`.\n */\n @property() value = 'on';\n\n @query('input') private readonly input!: HTMLInputElement | null;\n\n constructor() {\n super();\n if (isServer) {\n return;\n }\n\n // This click listener does not currently need dispatch hooks since it does\n // not check `event.defaultPrevented`.\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event) || !this.input) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.input);\n });\n\n // Add the aria keyboard interaction pattern for switch and the Enter key.\n // See https://www.w3.org/WAI/ARIA/apg/patterns/switch/.\n setupDispatchHooks(this, 'keydown');\n this.addEventListener('keydown', (event: KeyboardEvent) => {\n afterDispatch(event, () => {\n const ignoreEvent = event.defaultPrevented || event.key !== 'Enter';\n if (ignoreEvent || this.disabled || !this.input) {\n return;\n }\n\n this.input.click();\n });\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div class=\"switch ${classMap(this.getRenderClasses())}\">\n <input\n id=\"switch\"\n class=\"touch\"\n type=\"checkbox\"\n role=\"switch\"\n aria-label=${(this as ARIAMixin).ariaLabel || nothing}\n ?checked=${this.selected}\n ?disabled=${this.disabled}\n ?required=${this.required}\n @input=${this.handleInput}\n @change=${this.handleChange} />\n\n <md-focus-ring part=\"focus-ring\" for=\"switch\"></md-focus-ring>\n <span class=\"track\"> ${this.renderHandle()} </span>\n </div>\n `;\n }\n\n private getRenderClasses(): ClassInfo {\n return {\n 'selected': this.selected,\n 'unselected': !this.selected,\n 'disabled': this.disabled,\n };\n }\n\n private renderHandle() {\n const classes = {\n 'with-icon': this.showOnlySelectedIcon ? this.selected : this.icons,\n };\n return html`\n ${this.renderTouchTarget()}\n <span class=\"handle-container\">\n <md-ripple for=\"switch\" ?disabled=\"${this.disabled}\"></md-ripple>\n <span class=\"handle ${classMap(classes)}\">\n ${this.shouldShowIcons() ? this.renderIcons() : html``}\n </span>\n </span>\n `;\n }\n\n private renderIcons() {\n return html`\n <div class=\"icons\">\n ${this.renderOnIcon()}\n ${this.showOnlySelectedIcon ? html`` : this.renderOffIcon()}\n </div>\n `;\n }\n\n /**\n * https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck%3AFILL%400%3Bwght%40500%3BGRAD%400%3Bopsz%4024\n */\n private renderOnIcon() {\n return html`\n <slot class=\"icon icon--on\" name=\"on-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M9.55 18.2 3.65 12.3 5.275 10.675 9.55 14.95 18.725 5.775 20.35 7.4Z\" />\n </svg>\n </slot>\n `;\n }\n\n /**\n * https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Aclose%3AFILL%400%3Bwght%40500%3BGRAD%400%3Bopsz%4024\n */\n private renderOffIcon() {\n return html`\n <slot class=\"icon icon--off\" name=\"off-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M6.4 19.2 4.8 17.6 10.4 12 4.8 6.4 6.4 4.8 12 10.4 17.6 4.8 19.2 6.4 13.6 12 19.2 17.6 17.6 19.2 12 13.6Z\" />\n </svg>\n </slot>\n `;\n }\n\n private renderTouchTarget() {\n return html`<span class=\"touch\"></span>`;\n }\n\n private shouldShowIcons(): boolean {\n return this.icons || this.showOnlySelectedIcon;\n }\n\n private handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.selected = target.checked;\n // <input> 'input' event bubbles and is composed, don't re-dispatch it.\n }\n\n private handleChange(event: Event) {\n // <input> 'change' event is not composed, re-dispatch it.\n redispatchEvent(this, event);\n }\n\n // Writable mixin properties for lit-html binding, needed for lit-analyzer\n declare disabled: boolean;\n declare name: string;\n\n override [getFormValue]() {\n return this.selected ? this.value : null;\n }\n\n override [getFormState]() {\n return String(this.selected);\n }\n\n override formResetCallback() {\n // The selected property does not reflect, so the original attribute set by\n // the user is used to determine the default value.\n this.selected = this.hasAttribute('selected');\n }\n\n override formStateRestoreCallback(state: string) {\n this.selected = state === 'true';\n }\n\n [createValidator]() {\n return new CheckboxValidator(() => ({\n checked: this.selected,\n required: this.required,\n }));\n }\n\n [getValidityAnchor]() {\n return this.input;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["_primary-tab.scss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["_primary-tab.scss"],"names":[],"mappings":"AA6BE,MAII,m3IAIJ,iBACE,sBACA,QAGF,oCACE","file":"primary-tab-styles.css"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["_secondary-tab.scss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["_secondary-tab.scss"],"names":[],"mappings":"AA6BE,MAII","file":"secondary-tab-styles.css"}
|
package/tabs/internal/tabs.js
CHANGED
|
@@ -114,7 +114,7 @@ export class Tabs extends LitElement {
|
|
|
114
114
|
async scrollToTab(tabToScrollTo) {
|
|
115
115
|
await this.updateComplete;
|
|
116
116
|
const { tabs } = this;
|
|
117
|
-
tabToScrollTo
|
|
117
|
+
tabToScrollTo ??= this.activeTab;
|
|
118
118
|
if (!tabToScrollTo ||
|
|
119
119
|
!tabs.includes(tabToScrollTo) ||
|
|
120
120
|
!this.tabsScrollerElement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["tabs.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 '../../divider/divider.js';\n\nimport {html, isServer, LitElement} from 'lit';\nimport {property, query, queryAssignedElements} from 'lit/decorators.js';\n\nimport {ANIMATE_INDICATOR, Tab} from './tab.js';\n\n/**\n * @fires change {Event} Fired when the selected tab changes. The target's\n * `activeTabIndex` or `activeTab` provide information about the selection\n * change. The change event is fired when a user interaction like a space/enter\n * key or click cause a selection change. The tab selection based on these\n * actions can be cancelled by calling preventDefault on the triggering\n * `keydown` or `click` event. --bubbles\n *\n * @example\n * // perform an action if a tab is clicked\n * tabs.addEventListener('change', (event: Event) => {\n * if (event.target.activeTabIndex === 2)\n * takeAction();\n * }\n * });\n *\n * // prevent a click from triggering tab selection under some condition\n * tabs.addEventListener('click', (event: Event) => {\n * if (notReady)\n * event.preventDefault();\n * }\n * });\n *\n */\nexport class Tabs extends LitElement {\n /**\n * The tabs of this tab bar.\n */\n @queryAssignedElements({flatten: true, selector: '[md-tab]'})\n readonly tabs!: Tab[];\n\n /**\n * The currently selected tab, `null` only when there are no tab children.\n *\n * @export\n */\n get activeTab() {\n return this.tabs.find((tab) => tab.active) ?? null;\n }\n set activeTab(tab: Tab | null) {\n // Ignore setting activeTab to null. As long as there are children, one tab\n // must be selected.\n if (tab) {\n this.activateTab(tab);\n }\n }\n\n /**\n * The index of the currently selected tab.\n *\n * @export\n */\n @property({type: Number, attribute: 'active-tab-index'})\n get activeTabIndex() {\n return this.tabs.findIndex((tab) => tab.active);\n }\n set activeTabIndex(index: number) {\n const activateTabAtIndex = () => {\n const tab = this.tabs[index];\n // Ignore out-of-bound indices.\n if (tab) {\n this.activateTab(tab);\n }\n };\n\n if (!this.slotElement) {\n // This is needed to support setting the activeTabIndex via a lit property\n // binding.\n //\n // ```ts\n // html`\n // <md-tabs .activeTabIndex=${1}>\n // <md-tab>First</md-tab>\n // <md-tab>Second</md-tab>\n // </md-tabs>\n // `;\n // ```\n //\n // It's needed since lit's rendering lifecycle is asynchronous, and the\n // `<slot>` element hasn't rendered, so `tabs` is empty.\n this.updateComplete.then(activateTabAtIndex);\n return;\n }\n\n activateTabAtIndex();\n }\n\n /**\n * Whether or not to automatically select a tab when it is focused.\n */\n @property({type: Boolean, attribute: 'auto-activate'}) autoActivate = false;\n\n @query('.tabs') private readonly tabsScrollerElement!: HTMLElement | null;\n @query('slot') private readonly slotElement!: HTMLSlotElement | null;\n\n private get focusedTab() {\n return this.tabs.find((tab) => tab.matches(':focus-within'));\n }\n\n private readonly internals =\n // Cast needed for closure\n (this as HTMLElement).attachInternals();\n\n constructor() {\n super();\n if (!isServer) {\n this.internals.role = 'tablist';\n this.addEventListener('keydown', this.handleKeydown.bind(this));\n this.addEventListener('keyup', this.handleKeyup.bind(this));\n this.addEventListener('focusout', this.handleFocusout.bind(this));\n }\n }\n\n /**\n * Scrolls the toolbar, if overflowing, to the active tab, or the provided\n * tab.\n *\n * @param tabToScrollTo The tab that should be scrolled to. Defaults to the\n * active tab.\n * @return A Promise that resolves after the tab has been scrolled to.\n */\n async scrollToTab(tabToScrollTo?: Tab | null) {\n await this.updateComplete;\n const {tabs} = this;\n tabToScrollTo ??= this.activeTab;\n if (\n !tabToScrollTo ||\n !tabs.includes(tabToScrollTo) ||\n !this.tabsScrollerElement\n ) {\n return;\n }\n\n // wait for tabs to render.\n for (const tab of this.tabs) {\n await tab.updateComplete;\n }\n\n const offset = tabToScrollTo.offsetLeft;\n const extent = tabToScrollTo.offsetWidth;\n const scroll = this.scrollLeft;\n const hostExtent = this.offsetWidth;\n const scrollMargin = 48;\n const min = offset - scrollMargin;\n const max = offset + extent - hostExtent + scrollMargin;\n const to = Math.min(min, Math.max(max, scroll));\n // When a tab is focused, use 'auto' to use the CSS `scroll-behavior`. The\n // default behavior is smooth scrolling. However, when there is not a tab\n // focused on initialization, use 'instant' to immediately bring the focused\n // tab into view.\n const behavior: ScrollBehavior = !this.focusedTab ? 'instant' : 'auto';\n this.tabsScrollerElement.scrollTo({behavior, top: 0, left: to});\n }\n\n protected override render() {\n return html`\n <div class=\"tabs\">\n <slot\n @slotchange=${this.handleSlotChange}\n @click=${this.handleTabClick}></slot>\n </div>\n <md-divider part=\"divider\"></md-divider>\n `;\n }\n\n private async handleTabClick(event: Event) {\n const tab = event.target;\n // Allow event to bubble\n await 0;\n if (event.defaultPrevented || !isTab(tab) || tab.active) {\n return;\n }\n\n this.activateTab(tab);\n }\n\n private activateTab(activeTab: Tab) {\n const {tabs} = this;\n const previousTab = this.activeTab;\n if (!tabs.includes(activeTab) || previousTab === activeTab) {\n // Ignore setting activeTab to a tab element that is not a child.\n return;\n }\n\n for (const tab of tabs) {\n tab.active = tab === activeTab;\n }\n\n if (previousTab) {\n // Don't dispatch a change event if activating a tab when no previous tabs\n // were selected, such as when md-tabs auto-selects the first tab.\n const defaultPrevented = !this.dispatchEvent(\n new Event('change', {bubbles: true, cancelable: true}),\n );\n if (defaultPrevented) {\n for (const tab of tabs) {\n tab.active = tab === previousTab;\n }\n return;\n }\n\n activeTab[ANIMATE_INDICATOR](previousTab);\n }\n\n this.updateFocusableTab(activeTab);\n this.scrollToTab(activeTab);\n }\n\n private updateFocusableTab(focusableTab: Tab) {\n for (const tab of this.tabs) {\n tab.tabIndex = tab === focusableTab ? 0 : -1;\n }\n }\n\n // focus item on keydown and optionally select it\n private async handleKeydown(event: KeyboardEvent) {\n // Allow event to bubble.\n await 0;\n const isLeft = event.key === 'ArrowLeft';\n const isRight = event.key === 'ArrowRight';\n const isHome = event.key === 'Home';\n const isEnd = event.key === 'End';\n // Ignore non-navigation keys\n if (event.defaultPrevented || (!isLeft && !isRight && !isHome && !isEnd)) {\n return;\n }\n\n const {tabs} = this;\n // Don't try to select another tab if there aren't any.\n if (tabs.length < 2) {\n return;\n }\n\n // Prevent default interactions, such as scrolling.\n event.preventDefault();\n\n let indexToFocus: number;\n if (isHome || isEnd) {\n indexToFocus = isHome ? 0 : tabs.length - 1;\n } else {\n // Check if moving forwards or backwards\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const forwards = isRtl ? isLeft : isRight;\n const {focusedTab} = this;\n if (!focusedTab) {\n // If there is not already a tab focused, select the first or last tab\n // based on the direction we're traveling.\n indexToFocus = forwards ? 0 : tabs.length - 1;\n } else {\n const focusedIndex = this.tabs.indexOf(focusedTab);\n indexToFocus = forwards ? focusedIndex + 1 : focusedIndex - 1;\n if (indexToFocus >= tabs.length) {\n // Return to start if moving past the last item.\n indexToFocus = 0;\n } else if (indexToFocus < 0) {\n // Go to end if moving before the first item.\n indexToFocus = tabs.length - 1;\n }\n }\n }\n\n const tabToFocus = tabs[indexToFocus];\n tabToFocus.focus();\n if (this.autoActivate) {\n this.activateTab(tabToFocus);\n } else {\n this.updateFocusableTab(tabToFocus);\n }\n }\n\n // scroll to item on keyup.\n private handleKeyup() {\n this.scrollToTab(this.focusedTab ?? this.activeTab);\n }\n\n private handleFocusout() {\n // restore focus to selected item when blurring the tab bar.\n if (this.matches(':focus-within')) {\n return;\n }\n\n const {activeTab} = this;\n if (activeTab) {\n this.updateFocusableTab(activeTab);\n }\n }\n\n private handleSlotChange() {\n const firstTab = this.tabs[0];\n if (!this.activeTab && firstTab) {\n // If the active tab was removed, auto-select the first one. There should\n // always be a selected tab while the bar has children.\n this.activateTab(firstTab);\n }\n\n // When children shift, ensure the active tab is visible. For example, if\n // many children are added before the active tab, it'd be pushed off screen.\n // This ensures it stays visible.\n this.scrollToTab(this.activeTab);\n }\n}\n\nfunction isTab(element: unknown): element is Tab {\n return element instanceof HTMLElement && element.hasAttribute('md-tab');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["tabs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAC,iBAAiB,EAAM,MAAM,UAAU,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,IAAK,SAAQ,UAAU;IAOlC;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,GAAe;QAC3B,2EAA2E;QAC3E,oBAAoB;QACpB,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACvB;IACH,CAAC;IAED;;;;OAIG;IAEH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,cAAc,CAAC,KAAa;QAC9B,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,+BAA+B;YAC/B,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,0EAA0E;YAC1E,WAAW;YACX,EAAE;YACF,QAAQ;YACR,QAAQ;YACR,mCAAmC;YACnC,6BAA6B;YAC7B,8BAA8B;YAC9B,eAAe;YACf,KAAK;YACL,MAAM;YACN,EAAE;YACF,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7C,OAAO;SACR;QAED,kBAAkB,EAAE,CAAC;IACvB,CAAC;IAUD,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAMD;QACE,KAAK,EAAE,CAAC;QAjBV;;WAEG;QACoD,iBAAY,GAAG,KAAK,CAAC;QAS3D,cAAS;QACxB,0BAA0B;QACzB,IAAoB,CAAC,eAAe,EAAE,CAAC;QAIxC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACnE;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CAAC,aAA0B;QAC1C,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC;QACjC,IACE,CAAC,aAAa;YACd,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7B,CAAC,IAAI,CAAC,mBAAmB,EACzB;YACA,OAAO;SACR;QAED,2BAA2B;QAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,MAAM,GAAG,CAAC,cAAc,CAAC;SAC1B;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,GAAG,YAAY,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,0EAA0E;QAC1E,yEAAyE;QACzE,4EAA4E;QAC5E,iBAAiB;QACjB,MAAM,QAAQ,GAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC;IAClE,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA;;;wBAGS,IAAI,CAAC,gBAAgB;mBAC1B,IAAI,CAAC,cAAc;;;KAGjC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAY;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,wBAAwB;QACxB,MAAM,CAAC,CAAC;QACR,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;YACvD,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAEO,WAAW,CAAC,SAAc;QAChC,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE;YAC1D,iEAAiE;YACjE,OAAO;SACR;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,GAAG,CAAC,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC;SAChC;QAED,IAAI,WAAW,EAAE;YACf,0EAA0E;YAC1E,kEAAkE;YAClE,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,aAAa,CAC1C,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CACvD,CAAC;YACF,IAAI,gBAAgB,EAAE;gBACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACtB,GAAG,CAAC,MAAM,GAAG,GAAG,KAAK,WAAW,CAAC;iBAClC;gBACD,OAAO;aACR;YAED,SAAS,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAEO,kBAAkB,CAAC,YAAiB;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,GAAG,CAAC,QAAQ,GAAG,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,iDAAiD;IACzC,KAAK,CAAC,aAAa,CAAC,KAAoB;QAC9C,yBAAyB;QACzB,MAAM,CAAC,CAAC;QACR,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;QAClC,6BAA6B;QAC7B,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE;YACxE,OAAO;SACR;QAED,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,uDAAuD;QACvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,OAAO;SACR;QAED,mDAAmD;QACnD,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,YAAoB,CAAC;QACzB,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAC7C;aAAM;YACL,wCAAwC;YACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;YACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1C,MAAM,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE;gBACf,sEAAsE;gBACtE,0CAA0C;gBAC1C,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aAC/C;iBAAM;gBACL,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACnD,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;gBAC9D,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC/B,gDAAgD;oBAChD,YAAY,GAAG,CAAC,CAAC;iBAClB;qBAAM,IAAI,YAAY,GAAG,CAAC,EAAE;oBAC3B,6CAA6C;oBAC7C,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;iBAChC;aACF;SACF;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;SACrC;IACH,CAAC;IAED,2BAA2B;IACnB,WAAW;QACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc;QACpB,4DAA4D;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YACjC,OAAO;SACR;QAED,MAAM,EAAC,SAAS,EAAC,GAAG,IAAI,CAAC;QACzB,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SACpC;IACH,CAAC;IAEO,gBAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE;YAC/B,yEAAyE;YACzE,uDAAuD;YACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC5B;QAED,yEAAyE;QACzE,4EAA4E;QAC5E,iCAAiC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF;AA/QU;IADR,qBAAqB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAC;kCACvC;AAwBtB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAC,CAAC;0CAGvD;AAmCsD;IAAtD,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAC,CAAC;0CAAsB;AAE3C;IAAhC,KAAK,CAAC,OAAO,CAAC;iDAA2D;AAC1C;IAA/B,KAAK,CAAC,MAAM,CAAC;yCAAuD;AAiNvE,SAAS,KAAK,CAAC,OAAgB;IAC7B,OAAO,OAAO,YAAY,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../divider/divider.js';\n\nimport {html, isServer, LitElement} from 'lit';\nimport {property, query, queryAssignedElements} from 'lit/decorators.js';\n\nimport {ANIMATE_INDICATOR, Tab} from './tab.js';\n\n/**\n * @fires change {Event} Fired when the selected tab changes. The target's\n * `activeTabIndex` or `activeTab` provide information about the selection\n * change. The change event is fired when a user interaction like a space/enter\n * key or click cause a selection change. The tab selection based on these\n * actions can be cancelled by calling preventDefault on the triggering\n * `keydown` or `click` event. --bubbles\n *\n * @example\n * // perform an action if a tab is clicked\n * tabs.addEventListener('change', (event: Event) => {\n * if (event.target.activeTabIndex === 2)\n * takeAction();\n * }\n * });\n *\n * // prevent a click from triggering tab selection under some condition\n * tabs.addEventListener('click', (event: Event) => {\n * if (notReady)\n * event.preventDefault();\n * }\n * });\n *\n */\nexport class Tabs extends LitElement {\n /**\n * The tabs of this tab bar.\n */\n @queryAssignedElements({flatten: true, selector: '[md-tab]'})\n readonly tabs!: Tab[];\n\n /**\n * The currently selected tab, `null` only when there are no tab children.\n *\n * @export\n */\n get activeTab() {\n return this.tabs.find((tab) => tab.active) ?? null;\n }\n set activeTab(tab: Tab | null) {\n // Ignore setting activeTab to null. As long as there are children, one tab\n // must be selected.\n if (tab) {\n this.activateTab(tab);\n }\n }\n\n /**\n * The index of the currently selected tab.\n *\n * @export\n */\n @property({type: Number, attribute: 'active-tab-index'})\n get activeTabIndex() {\n return this.tabs.findIndex((tab) => tab.active);\n }\n set activeTabIndex(index: number) {\n const activateTabAtIndex = () => {\n const tab = this.tabs[index];\n // Ignore out-of-bound indices.\n if (tab) {\n this.activateTab(tab);\n }\n };\n\n if (!this.slotElement) {\n // This is needed to support setting the activeTabIndex via a lit property\n // binding.\n //\n // ```ts\n // html`\n // <md-tabs .activeTabIndex=${1}>\n // <md-tab>First</md-tab>\n // <md-tab>Second</md-tab>\n // </md-tabs>\n // `;\n // ```\n //\n // It's needed since lit's rendering lifecycle is asynchronous, and the\n // `<slot>` element hasn't rendered, so `tabs` is empty.\n this.updateComplete.then(activateTabAtIndex);\n return;\n }\n\n activateTabAtIndex();\n }\n\n /**\n * Whether or not to automatically select a tab when it is focused.\n */\n @property({type: Boolean, attribute: 'auto-activate'}) autoActivate = false;\n\n @query('.tabs') private readonly tabsScrollerElement!: HTMLElement | null;\n @query('slot') private readonly slotElement!: HTMLSlotElement | null;\n\n private get focusedTab() {\n return this.tabs.find((tab) => tab.matches(':focus-within'));\n }\n\n private readonly internals =\n // Cast needed for closure\n (this as HTMLElement).attachInternals();\n\n constructor() {\n super();\n if (!isServer) {\n this.internals.role = 'tablist';\n this.addEventListener('keydown', this.handleKeydown.bind(this));\n this.addEventListener('keyup', this.handleKeyup.bind(this));\n this.addEventListener('focusout', this.handleFocusout.bind(this));\n }\n }\n\n /**\n * Scrolls the toolbar, if overflowing, to the active tab, or the provided\n * tab.\n *\n * @param tabToScrollTo The tab that should be scrolled to. Defaults to the\n * active tab.\n * @return A Promise that resolves after the tab has been scrolled to.\n */\n async scrollToTab(tabToScrollTo?: Tab | null) {\n await this.updateComplete;\n const {tabs} = this;\n tabToScrollTo ??= this.activeTab;\n if (\n !tabToScrollTo ||\n !tabs.includes(tabToScrollTo) ||\n !this.tabsScrollerElement\n ) {\n return;\n }\n\n // wait for tabs to render.\n for (const tab of this.tabs) {\n await tab.updateComplete;\n }\n\n const offset = tabToScrollTo.offsetLeft;\n const extent = tabToScrollTo.offsetWidth;\n const scroll = this.scrollLeft;\n const hostExtent = this.offsetWidth;\n const scrollMargin = 48;\n const min = offset - scrollMargin;\n const max = offset + extent - hostExtent + scrollMargin;\n const to = Math.min(min, Math.max(max, scroll));\n // When a tab is focused, use 'auto' to use the CSS `scroll-behavior`. The\n // default behavior is smooth scrolling. However, when there is not a tab\n // focused on initialization, use 'instant' to immediately bring the focused\n // tab into view.\n const behavior: ScrollBehavior = !this.focusedTab ? 'instant' : 'auto';\n this.tabsScrollerElement.scrollTo({behavior, top: 0, left: to});\n }\n\n protected override render() {\n return html`\n <div class=\"tabs\">\n <slot\n @slotchange=${this.handleSlotChange}\n @click=${this.handleTabClick}></slot>\n </div>\n <md-divider part=\"divider\"></md-divider>\n `;\n }\n\n private async handleTabClick(event: Event) {\n const tab = event.target;\n // Allow event to bubble\n await 0;\n if (event.defaultPrevented || !isTab(tab) || tab.active) {\n return;\n }\n\n this.activateTab(tab);\n }\n\n private activateTab(activeTab: Tab) {\n const {tabs} = this;\n const previousTab = this.activeTab;\n if (!tabs.includes(activeTab) || previousTab === activeTab) {\n // Ignore setting activeTab to a tab element that is not a child.\n return;\n }\n\n for (const tab of tabs) {\n tab.active = tab === activeTab;\n }\n\n if (previousTab) {\n // Don't dispatch a change event if activating a tab when no previous tabs\n // were selected, such as when md-tabs auto-selects the first tab.\n const defaultPrevented = !this.dispatchEvent(\n new Event('change', {bubbles: true, cancelable: true}),\n );\n if (defaultPrevented) {\n for (const tab of tabs) {\n tab.active = tab === previousTab;\n }\n return;\n }\n\n activeTab[ANIMATE_INDICATOR](previousTab);\n }\n\n this.updateFocusableTab(activeTab);\n this.scrollToTab(activeTab);\n }\n\n private updateFocusableTab(focusableTab: Tab) {\n for (const tab of this.tabs) {\n tab.tabIndex = tab === focusableTab ? 0 : -1;\n }\n }\n\n // focus item on keydown and optionally select it\n private async handleKeydown(event: KeyboardEvent) {\n // Allow event to bubble.\n await 0;\n const isLeft = event.key === 'ArrowLeft';\n const isRight = event.key === 'ArrowRight';\n const isHome = event.key === 'Home';\n const isEnd = event.key === 'End';\n // Ignore non-navigation keys\n if (event.defaultPrevented || (!isLeft && !isRight && !isHome && !isEnd)) {\n return;\n }\n\n const {tabs} = this;\n // Don't try to select another tab if there aren't any.\n if (tabs.length < 2) {\n return;\n }\n\n // Prevent default interactions, such as scrolling.\n event.preventDefault();\n\n let indexToFocus: number;\n if (isHome || isEnd) {\n indexToFocus = isHome ? 0 : tabs.length - 1;\n } else {\n // Check if moving forwards or backwards\n const isRtl = getComputedStyle(this).direction === 'rtl';\n const forwards = isRtl ? isLeft : isRight;\n const {focusedTab} = this;\n if (!focusedTab) {\n // If there is not already a tab focused, select the first or last tab\n // based on the direction we're traveling.\n indexToFocus = forwards ? 0 : tabs.length - 1;\n } else {\n const focusedIndex = this.tabs.indexOf(focusedTab);\n indexToFocus = forwards ? focusedIndex + 1 : focusedIndex - 1;\n if (indexToFocus >= tabs.length) {\n // Return to start if moving past the last item.\n indexToFocus = 0;\n } else if (indexToFocus < 0) {\n // Go to end if moving before the first item.\n indexToFocus = tabs.length - 1;\n }\n }\n }\n\n const tabToFocus = tabs[indexToFocus];\n tabToFocus.focus();\n if (this.autoActivate) {\n this.activateTab(tabToFocus);\n } else {\n this.updateFocusableTab(tabToFocus);\n }\n }\n\n // scroll to item on keyup.\n private handleKeyup() {\n this.scrollToTab(this.focusedTab ?? this.activeTab);\n }\n\n private handleFocusout() {\n // restore focus to selected item when blurring the tab bar.\n if (this.matches(':focus-within')) {\n return;\n }\n\n const {activeTab} = this;\n if (activeTab) {\n this.updateFocusableTab(activeTab);\n }\n }\n\n private handleSlotChange() {\n const firstTab = this.tabs[0];\n if (!this.activeTab && firstTab) {\n // If the active tab was removed, auto-select the first one. There should\n // always be a selected tab while the bar has children.\n this.activateTab(firstTab);\n }\n\n // When children shift, ensure the active tab is visible. For example, if\n // many children are added before the active tab, it'd be pushed off screen.\n // This ensures it stays visible.\n this.scrollToTab(this.activeTab);\n }\n}\n\nfunction isTab(element: unknown): element is Tab {\n return element instanceof HTMLElement && element.hasAttribute('md-tab');\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["_filled-text-field.scss","../../field/internal/_filled-field.scss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["_filled-text-field.scss","../../field/internal/_filled-field.scss"],"names":[],"mappings":"AAmCE,MAII,2iWCFA","file":"filled-styles.css"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["_outlined-text-field.scss","../../field/internal/_outlined-field.scss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["_outlined-text-field.scss","../../field/internal/_outlined-field.scss"],"names":[],"mappings":"AA8BE,MAII,qkUCFA","file":"outlined-styles.css"}
|
|
@@ -21,7 +21,7 @@ export type UnsupportedTextFieldType = 'color' | 'date' | 'datetime-local' | 'fi
|
|
|
21
21
|
* Input types that are incompatible with the text field.
|
|
22
22
|
*/
|
|
23
23
|
export type InvalidTextFieldType = 'button' | 'checkbox' | 'hidden' | 'image' | 'radio' | 'range' | 'reset' | 'submit';
|
|
24
|
-
declare const textFieldBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>, import("../../labs/behaviors/constraint-validation.js").ConstraintValidation>, import("../../labs/behaviors/on-report-validity.js").OnReportValidity
|
|
24
|
+
declare const textFieldBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>, import("../../labs/behaviors/constraint-validation.js").ConstraintValidation>, import("../../labs/behaviors/on-report-validity.js").OnReportValidity>>;
|
|
25
25
|
/**
|
|
26
26
|
* A text field component.
|
|
27
27
|
*
|
|
@@ -10,7 +10,7 @@ import { classMap } from 'lit/directives/class-map.js';
|
|
|
10
10
|
import { live } from 'lit/directives/live.js';
|
|
11
11
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
12
12
|
import { html as staticHtml } from 'lit/static-html.js';
|
|
13
|
-
import {
|
|
13
|
+
import { mixinDelegatesAria } from '../../internal/aria/delegate.js';
|
|
14
14
|
import { stringConverter } from '../../internal/controller/string-converter.js';
|
|
15
15
|
import { redispatchEvent } from '../../internal/events/redispatch-event.js';
|
|
16
16
|
import { createValidator, getValidityAnchor, mixinConstraintValidation, } from '../../labs/behaviors/constraint-validation.js';
|
|
@@ -19,7 +19,7 @@ import { getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-as
|
|
|
19
19
|
import { mixinOnReportValidity, onReportValidity, } from '../../labs/behaviors/on-report-validity.js';
|
|
20
20
|
import { TextFieldValidator } from '../../labs/behaviors/validators/text-field-validator.js';
|
|
21
21
|
// Separate variable needed for closure.
|
|
22
|
-
const textFieldBaseClass = mixinOnReportValidity(mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(LitElement))));
|
|
22
|
+
const textFieldBaseClass = mixinDelegatesAria(mixinOnReportValidity(mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(LitElement)))));
|
|
23
23
|
/**
|
|
24
24
|
* A text field component.
|
|
25
25
|
*
|
|
@@ -603,9 +603,6 @@ export class TextField extends textFieldBaseClass {
|
|
|
603
603
|
}
|
|
604
604
|
}
|
|
605
605
|
}
|
|
606
|
-
(() => {
|
|
607
|
-
requestUpdateOnAriaChange(TextField);
|
|
608
|
-
})();
|
|
609
606
|
/** @nocollapse */
|
|
610
607
|
TextField.shadowRootOptions = {
|
|
611
608
|
...LitElement.shadowRootOptions,
|