@material/web 1.0.0-pre.11 → 1.0.0-pre.13

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.
Files changed (166) hide show
  1. package/README.md +18 -1
  2. package/button/lib/_icon.scss +9 -9
  3. package/button/lib/_outlined-button.scss +4 -0
  4. package/button/lib/button.d.ts +0 -6
  5. package/button/lib/button.js +2 -14
  6. package/button/lib/button.js.map +1 -1
  7. package/button/lib/elevated-styles.css.js +1 -1
  8. package/button/lib/elevated-styles.css.js.map +1 -1
  9. package/button/lib/filled-styles.css.js +1 -1
  10. package/button/lib/filled-styles.css.js.map +1 -1
  11. package/button/lib/outlined-styles.css.js +1 -1
  12. package/button/lib/outlined-styles.css.js.map +1 -1
  13. package/button/lib/shared-styles.css.js +1 -1
  14. package/button/lib/shared-styles.css.js.map +1 -1
  15. package/button/lib/text-styles.css.js +1 -1
  16. package/button/lib/text-styles.css.js.map +1 -1
  17. package/button/lib/tonal-styles.css.js +1 -1
  18. package/button/lib/tonal-styles.css.js.map +1 -1
  19. package/chips/assist-chip.js +2 -1
  20. package/chips/assist-chip.js.map +1 -1
  21. package/chips/filter-chip.js +3 -1
  22. package/chips/filter-chip.js.map +1 -1
  23. package/chips/harness.d.ts +2 -5
  24. package/chips/harness.js +9 -6
  25. package/chips/harness.js.map +1 -1
  26. package/chips/input-chip.js +5 -1
  27. package/chips/input-chip.js.map +1 -1
  28. package/chips/lib/_elevated.scss +14 -0
  29. package/chips/lib/_selectable.scss +8 -0
  30. package/chips/lib/_shared.scss +1 -0
  31. package/chips/lib/_trailing-icon.scss +1 -1
  32. package/chips/lib/assist-chip.d.ts +1 -0
  33. package/chips/lib/assist-chip.js +1 -0
  34. package/chips/lib/assist-chip.js.map +1 -1
  35. package/chips/lib/assist-forced-colors-styles.css.d.ts +1 -0
  36. package/chips/lib/assist-forced-colors-styles.css.js +9 -0
  37. package/chips/lib/assist-forced-colors-styles.css.js.map +1 -0
  38. package/chips/lib/assist-forced-colors-styles.scss +27 -0
  39. package/chips/lib/chip-set.js +4 -4
  40. package/chips/lib/chip-set.js.map +1 -1
  41. package/chips/lib/elevated-styles.css.js +1 -1
  42. package/chips/lib/elevated-styles.css.js.map +1 -1
  43. package/chips/lib/filter-chip.d.ts +1 -0
  44. package/chips/lib/filter-chip.js +2 -1
  45. package/chips/lib/filter-chip.js.map +1 -1
  46. package/chips/lib/filter-forced-colors-styles.css.d.ts +1 -0
  47. package/chips/lib/filter-forced-colors-styles.css.js +9 -0
  48. package/chips/lib/filter-forced-colors-styles.css.js.map +1 -0
  49. package/chips/lib/filter-forced-colors-styles.scss +34 -0
  50. package/chips/lib/input-chip.d.ts +2 -0
  51. package/chips/lib/input-chip.js +4 -2
  52. package/chips/lib/input-chip.js.map +1 -1
  53. package/chips/lib/input-forced-colors-styles.css.d.ts +1 -0
  54. package/chips/lib/input-forced-colors-styles.css.js +9 -0
  55. package/chips/lib/input-forced-colors-styles.css.js.map +1 -0
  56. package/chips/lib/input-forced-colors-styles.scss +39 -0
  57. package/chips/lib/input-styles.css.js +1 -1
  58. package/chips/lib/input-styles.css.js.map +1 -1
  59. package/chips/lib/selectable-styles.css.js +1 -1
  60. package/chips/lib/selectable-styles.css.js.map +1 -1
  61. package/chips/lib/shared-styles.css.js +1 -1
  62. package/chips/lib/shared-styles.css.js.map +1 -1
  63. package/chips/lib/suggestion-forced-colors-styles.css.d.ts +1 -0
  64. package/chips/lib/suggestion-forced-colors-styles.css.js +9 -0
  65. package/chips/lib/suggestion-forced-colors-styles.css.js.map +1 -0
  66. package/chips/lib/suggestion-forced-colors-styles.scss +27 -0
  67. package/chips/lib/trailing-icon-styles.css.js +1 -1
  68. package/chips/lib/trailing-icon-styles.css.js.map +1 -1
  69. package/chips/suggestion-chip.js +2 -1
  70. package/chips/suggestion-chip.js.map +1 -1
  71. package/dialog/lib/_dialog.scss +2 -2
  72. package/dialog/lib/_tokens.scss +5 -22
  73. package/dialog/lib/dialog-styles.css.js +1 -1
  74. package/dialog/lib/dialog-styles.css.js.map +1 -1
  75. package/dialog/lib/dialog.d.ts +9 -3
  76. package/dialog/lib/dialog.js +24 -16
  77. package/dialog/lib/dialog.js.map +1 -1
  78. package/fab/branded-fab.d.ts +1 -0
  79. package/fab/lib/_fab.scss +12 -0
  80. package/fab/lib/fab-styles.css.js +1 -1
  81. package/fab/lib/fab-styles.css.js.map +1 -1
  82. package/fab/lib/fab.d.ts +1 -0
  83. package/fab/lib/shared.d.ts +9 -0
  84. package/fab/lib/shared.js +23 -2
  85. package/fab/lib/shared.js.map +1 -1
  86. package/field/lib/_supporting-text.scss +6 -16
  87. package/field/lib/field.d.ts +26 -2
  88. package/field/lib/field.js +100 -15
  89. package/field/lib/field.js.map +1 -1
  90. package/field/lib/outlined-field.d.ts +1 -2
  91. package/field/lib/outlined-field.js.map +1 -1
  92. package/field/lib/shared-styles.css.js +1 -1
  93. package/field/lib/shared-styles.css.js.map +1 -1
  94. package/iconbutton/lib/icon-button.js +1 -1
  95. package/iconbutton/lib/icon-button.js.map +1 -1
  96. package/labs/navigationbar/lib/navigation-bar.js +2 -2
  97. package/labs/navigationbar/lib/navigation-bar.js.map +1 -1
  98. package/labs/navigationtab/lib/navigation-tab.js +3 -3
  99. package/labs/navigationtab/lib/navigation-tab.js.map +1 -1
  100. package/labs/segmentedbutton/lib/_shared.scss +7 -7
  101. package/labs/segmentedbutton/lib/outlined-styles.css.js +1 -1
  102. package/labs/segmentedbutton/lib/outlined-styles.css.js.map +1 -1
  103. package/labs/segmentedbutton/lib/segmented-button.js +2 -2
  104. package/labs/segmentedbutton/lib/segmented-button.js.map +1 -1
  105. package/labs/segmentedbutton/lib/shared-styles.css.js +1 -1
  106. package/labs/segmentedbutton/lib/shared-styles.css.js.map +1 -1
  107. package/labs/segmentedbuttonset/lib/outlined-styles.css.js +1 -1
  108. package/labs/segmentedbuttonset/lib/outlined-styles.css.js.map +1 -1
  109. package/list/harness.d.ts +24 -0
  110. package/list/harness.js +25 -0
  111. package/list/harness.js.map +1 -1
  112. package/list/lib/list.d.ts +28 -10
  113. package/list/lib/list.js +57 -19
  114. package/list/lib/list.js.map +1 -1
  115. package/list/lib/listitem/harness.d.ts +21 -1
  116. package/list/lib/listitem/harness.js +16 -2
  117. package/list/lib/listitem/harness.js.map +1 -1
  118. package/list/lib/listitem/list-item.js +4 -4
  119. package/list/lib/listitem/list-item.js.map +1 -1
  120. package/list/lib/listitemlink/list-item-link-only.d.ts +1 -0
  121. package/list/lib/listitemlink/list-item-link-only.js +4 -1
  122. package/list/lib/listitemlink/list-item-link-only.js.map +1 -1
  123. package/menu/harness.js.map +1 -1
  124. package/menu/lib/menu.d.ts +15 -1
  125. package/menu/lib/menu.js +29 -6
  126. package/menu/lib/menu.js.map +1 -1
  127. package/package.json +5 -4
  128. package/radio/lib/single-selection-controller.js +2 -3
  129. package/radio/lib/single-selection-controller.js.map +1 -1
  130. package/select/harness.js +1 -1
  131. package/select/harness.js.map +1 -1
  132. package/select/lib/_shared.scss +2 -1
  133. package/select/lib/select.d.ts +1 -11
  134. package/select/lib/select.js +15 -51
  135. package/select/lib/select.js.map +1 -1
  136. package/select/lib/shared-styles.css.js +1 -1
  137. package/select/lib/shared-styles.css.js.map +1 -1
  138. package/slider/lib/slider.d.ts +3 -3
  139. package/slider/lib/slider.js +10 -10
  140. package/slider/lib/slider.js.map +1 -1
  141. package/switch/lib/switch.js +1 -1
  142. package/switch/lib/switch.js.map +1 -1
  143. package/tabs/lib/tab.js +4 -2
  144. package/tabs/lib/tab.js.map +1 -1
  145. package/tabs/lib/tabs.js +3 -1
  146. package/tabs/lib/tabs.js.map +1 -1
  147. package/textfield/lib/_shared.scss +0 -4
  148. package/textfield/lib/shared-styles.css.js +1 -1
  149. package/textfield/lib/shared-styles.css.js.map +1 -1
  150. package/textfield/lib/text-field.d.ts +2 -13
  151. package/textfield/lib/text-field.js +44 -98
  152. package/textfield/lib/text-field.js.map +1 -1
  153. package/tokens/_md-comp-dialog.scss +48 -6
  154. package/tokens/_md-comp-elevated-button.scss +17 -7
  155. package/tokens/_md-comp-elevation.scss +11 -2
  156. package/tokens/_md-comp-filled-button.scss +17 -7
  157. package/tokens/_md-comp-filled-tonal-button.scss +17 -7
  158. package/tokens/_md-comp-input-chip.scss +7 -0
  159. package/tokens/_md-comp-list-item.scss +5 -0
  160. package/tokens/_md-comp-menu-item.scss +1 -0
  161. package/tokens/_md-comp-outlined-button.scss +19 -9
  162. package/tokens/_md-comp-outlined-segmented-button.scss +19 -13
  163. package/tokens/_md-comp-slider.scss +48 -2
  164. package/tokens/_md-comp-suggestion-chip.scss +1 -0
  165. package/tokens/_md-comp-text-button.scss +17 -7
  166. package/tokens/_values.scss +1 -1
@@ -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/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 {dispatchActivationClick, isActivationClick, redispatchEvent} from '../../internal/controller/events.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\n// Disable warning for classMap with destructuring\n// tslint:disable:quoted-properties-on-dictionary\n\n\n/**\n * Slider component.\n */\nexport class Slider extends LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /** @nocollapse */\n static formAssociated = true;\n\n /**\n * Whether or not the slider is disabled.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\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() valueLabel?: string;\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() valueStartLabel?: string;\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() valueEndLabel?: string;\n\n /**\n * Aria label for the slider's start value displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-start'}) ariaLabelStart?: string;\n\n /**\n * Aria label for the slider's end value displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-end'}) ariaLabelEnd?: string;\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}) tickmarks = 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.\n */\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The 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 /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this.internals.labels;\n }\n\n @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\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 // used in synthetic events generated to control ripple hover state.\n private ripplePointerId = 1;\n\n // flag to prvent processing of re-dispatched input event.\n private isRedisptchingEvent = false;\n\n private action?: Action;\n\n private readonly internals =\n (this as HTMLElement /* needed for closure */).attachInternals();\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 ? this.valueEnd : 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 update(changed: PropertyValues<Slider>) {\n if (changed.has('value') || changed.has('range') ||\n changed.has('valueStart') || changed.has('valueEnd')) {\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 this.internals.setFormValue(data);\n } else {\n this.internals.setFormValue(String(this.value));\n }\n }\n\n super.update(changed);\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 (changed.has('range') || changed.has('renderValueStart') ||\n changed.has('renderValueEnd') || this.isUpdatePending) {\n this.handlesOverlapping = isOverlapping(this.handleStart, this.handleEnd);\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 '--slider-start-fraction': String(startFraction),\n '--slider-end-fraction': String(endFraction),\n // for generating tick marks\n '--slider-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.valueStartLabel ?? String(this.renderValueStart);\n const labelEnd = (this.range ? this.valueEndLabel : this.valueLabel) ??\n String(this.renderValueEnd);\n\n const inputStartProps = {\n start: true,\n value: this.renderValueStart,\n label: labelStart\n };\n\n const inputEndProps = {\n start: false,\n value: this.renderValueEnd,\n label: labelEnd\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`\n <div\n class=\"container ${classMap(containerClasses)}\"\n style=${styleMap(containerStyles)}\n >\n ${when(this.range, () => this.renderInput(inputStartProps))}\n ${this.renderInput(inputEndProps)}\n ${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 const trackClasses = {'tickmarks': this.tickmarks};\n return html`<div class=\"track ${classMap(trackClasses)}\"></div>`;\n }\n\n private renderLabel(value: string) {\n return html`<div class=\"label\">\n <span class=\"labelContent\" part=\"label\">${value}</span>\n </div>`;\n }\n\n private renderHandle({start, hover, label}:\n {start: boolean, hover: boolean, label: string}) {\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 class=\"handle ${classMap({\n [name]: true,\n hover,\n onTop,\n isOverlapping\n })}\">\n <div class=\"handleNub\"><md-elevation></md-elevation></div>\n ${when(this.labeled, () => this.renderLabel(label))}\n <md-focus-ring for=${name}></md-focus-ring>\n <md-ripple for=${name} class=${name} ?disabled=${\n this.disabled}></md-ripple>\n </div>`;\n }\n\n private renderInput({start, value, label}:\n {start: boolean; value?: number; label: string;}) {\n const name = start ? `start` : `end`;\n // when ranged, ensure announcement includes value info.\n // Needed for closure conformance\n let {ariaLabel} = this as ARIAMixinStrict;\n const {range, ariaLabelStart, ariaLabelEnd} = this;\n if (range) {\n ariaLabel = (start ? ariaLabelStart : ariaLabelEnd) ?? null;\n }\n return html`<input 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 .max=${String(this.max)}\n .step=${String(this.step)}\n .value=${String(value)}\n .tabIndex=${start ? 1 : 0}\n aria-label=${ariaLabel || nothing}\n aria-valuetext=${label}>`;\n }\n\n private async toggleRippleHover(\n ripple: Promise<MdRipple|null>, hovering: boolean) {\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(new PointerEvent(\n 'pointerenter', {isPrimary: true, pointerId: this.ripplePointerId}));\n } else {\n rippleEl.handlePointerleave(new PointerEvent(\n 'pointerleave', {isPrimary: true, pointerId: this.ripplePointerId}));\n }\n }\n\n private handleFocus(e: Event) {\n this.updateOnTop(e.target as HTMLInputElement);\n }\n\n private startAction(e: Event) {\n const target = e.target as HTMLInputElement;\n const fixed =\n (target === this.inputStart) ? this.inputEnd! : this.inputStart!;\n this.action = {\n canFlip: e.type === 'pointerdown',\n flipped: false,\n target,\n fixed,\n values: new Map(\n [[target, target.valueAsNumber], [fixed, fixed?.valueAsNumber]])\n };\n }\n\n private finishAction(e: Event) {\n this.action = undefined;\n }\n\n private handleKeydown(e: KeyboardEvent) {\n this.startAction(e);\n }\n\n private handleKeyup(e: KeyboardEvent) {\n this.finishAction(e);\n }\n\n private handleDown(e: PointerEvent) {\n this.startAction(e);\n this.ripplePointerId = e.pointerId;\n const isStart = e.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(e: PointerEvent) {\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(e);\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(e: PointerEvent) {\n this.handleStartHover = !this.disabled && inBounds(e, this.handleStart);\n this.handleEndHover = !this.disabled && inBounds(e, this.handleEnd);\n }\n\n private handleEnter(e: PointerEvent) {\n this.handleMove(e);\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 const {target, fixed} = this.action!;\n const isStart = target === this.inputStart;\n return isStart ? 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.action!;\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 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()) {\n return false;\n }\n const {target, fixed} = this.action!;\n target.valueAsNumber = fixed.valueAsNumber;\n return true;\n }\n\n private handleInput(e: InputEvent) {\n // avoid processing a re-dispatched event\n if (this.isRedisptchingEvent) {\n return;\n }\n let stopPropagation = false, 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} = this.action!;\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 e.stopPropagation();\n }\n // ensure event path is correct when flipped.\n if (redispatch) {\n this.isRedisptchingEvent = true;\n redispatchEvent(target, e);\n this.isRedisptchingEvent = false;\n }\n }\n\n private handleChange(e: Event) {\n // prevent keyboard triggered changes from dispatching for\n // clamped values; note, this only occurs for keyboard\n const changeTarget = e.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, e);\n }\n // ensure keyboard triggered change clears action.\n this.finishAction(e);\n }\n\n /** @private */\n 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 /** @private */\n formStateRestoreCallback(state: string|Array<[string, string]>|null) {\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(elA: Element|null, elB: Element|null) {\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 || a.right < b.left || a.bottom < b.top ||\n a.left > b.right);\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/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 {dispatchActivationClick, isActivationClick, redispatchEvent} from '../../internal/controller/events.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\n// Disable warning for classMap with destructuring\n// tslint:disable:quoted-properties-on-dictionary\n\n\n/**\n * Slider component.\n */\nexport class Slider extends LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /** @nocollapse */\n static formAssociated = true;\n\n /**\n * Whether or not the slider is disabled.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\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?: string;\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?: string;\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?: string;\n\n /**\n * Aria label for the slider's start value displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-start'}) ariaLabelStart?: string;\n\n /**\n * Aria label for the slider's end value displayed when\n * range is true.\n */\n @property({attribute: 'aria-label-end'}) ariaLabelEnd?: string;\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.\n */\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The 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 /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this.internals.labels;\n }\n\n @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\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 // used in synthetic events generated to control ripple hover state.\n private ripplePointerId = 1;\n\n // flag to prvent processing of re-dispatched input event.\n private isRedisptchingEvent = false;\n\n private action?: Action;\n\n private readonly internals =\n (this as HTMLElement /* needed for closure */).attachInternals();\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 ? this.valueEnd : 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 update(changed: PropertyValues<Slider>) {\n if (changed.has('value') || changed.has('range') ||\n changed.has('valueStart') || changed.has('valueEnd')) {\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 this.internals.setFormValue(data);\n } else {\n this.internals.setFormValue(String(this.value));\n }\n }\n\n super.update(changed);\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 (changed.has('range') || changed.has('renderValueStart') ||\n changed.has('renderValueEnd') || this.isUpdatePending) {\n this.handlesOverlapping = isOverlapping(this.handleStart, this.handleEnd);\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 '--slider-start-fraction': String(startFraction),\n '--slider-end-fraction': String(endFraction),\n // for generating tick marks\n '--slider-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 = (this.range ? this.valueLabelEnd : this.valueLabel) ??\n String(this.renderValueEnd);\n\n const inputStartProps = {\n start: true,\n value: this.renderValueStart,\n label: labelStart\n };\n\n const inputEndProps = {\n start: false,\n value: this.renderValueEnd,\n label: labelEnd\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`\n <div\n class=\"container ${classMap(containerClasses)}\"\n style=${styleMap(containerStyles)}\n >\n ${when(this.range, () => this.renderInput(inputStartProps))}\n ${this.renderInput(inputEndProps)}\n ${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 const trackClasses = {'tickmarks': this.ticks};\n return html`<div class=\"track ${classMap(trackClasses)}\"></div>`;\n }\n\n private renderLabel(value: string) {\n return html`<div class=\"label\">\n <span class=\"labelContent\" part=\"label\">${value}</span>\n </div>`;\n }\n\n private renderHandle({start, hover, label}:\n {start: boolean, hover: boolean, label: string}) {\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 class=\"handle ${classMap({\n [name]: true,\n hover,\n onTop,\n isOverlapping\n })}\">\n <div class=\"handleNub\"><md-elevation></md-elevation></div>\n ${when(this.labeled, () => this.renderLabel(label))}\n <md-focus-ring for=${name}></md-focus-ring>\n <md-ripple for=${name} class=${name} ?disabled=${\n this.disabled}></md-ripple>\n </div>`;\n }\n\n private renderInput({start, value, label}:\n {start: boolean; value?: number; label: string;}) {\n const name = start ? `start` : `end`;\n // when ranged, ensure announcement includes value info.\n // Needed for closure conformance\n let {ariaLabel} = this as ARIAMixinStrict;\n const {range, ariaLabelStart, ariaLabelEnd} = this;\n if (range) {\n ariaLabel = (start ? ariaLabelStart : ariaLabelEnd) ?? null;\n }\n return html`<input 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 .max=${String(this.max)}\n .step=${String(this.step)}\n .value=${String(value)}\n .tabIndex=${start ? 1 : 0}\n aria-label=${ariaLabel || nothing}\n aria-valuetext=${label}>`;\n }\n\n private async toggleRippleHover(\n ripple: Promise<MdRipple|null>, hovering: boolean) {\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(new PointerEvent(\n 'pointerenter', {isPrimary: true, pointerId: this.ripplePointerId}));\n } else {\n rippleEl.handlePointerleave(new PointerEvent(\n 'pointerleave', {isPrimary: true, pointerId: this.ripplePointerId}));\n }\n }\n\n private handleFocus(e: Event) {\n this.updateOnTop(e.target as HTMLInputElement);\n }\n\n private startAction(e: Event) {\n const target = e.target as HTMLInputElement;\n const fixed =\n (target === this.inputStart) ? this.inputEnd! : this.inputStart!;\n this.action = {\n canFlip: e.type === 'pointerdown',\n flipped: false,\n target,\n fixed,\n values: new Map(\n [[target, target.valueAsNumber], [fixed, fixed?.valueAsNumber]])\n };\n }\n\n private finishAction(e: Event) {\n this.action = undefined;\n }\n\n private handleKeydown(e: KeyboardEvent) {\n this.startAction(e);\n }\n\n private handleKeyup(e: KeyboardEvent) {\n this.finishAction(e);\n }\n\n private handleDown(e: PointerEvent) {\n this.startAction(e);\n this.ripplePointerId = e.pointerId;\n const isStart = e.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(e: PointerEvent) {\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(e);\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(e: PointerEvent) {\n this.handleStartHover = !this.disabled && inBounds(e, this.handleStart);\n this.handleEndHover = !this.disabled && inBounds(e, this.handleEnd);\n }\n\n private handleEnter(e: PointerEvent) {\n this.handleMove(e);\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 const {target, fixed} = this.action!;\n const isStart = target === this.inputStart;\n return isStart ? 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.action!;\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 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()) {\n return false;\n }\n const {target, fixed} = this.action!;\n target.valueAsNumber = fixed.valueAsNumber;\n return true;\n }\n\n private handleInput(e: InputEvent) {\n // avoid processing a re-dispatched event\n if (this.isRedisptchingEvent) {\n return;\n }\n let stopPropagation = false, 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} = this.action!;\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 e.stopPropagation();\n }\n // ensure event path is correct when flipped.\n if (redispatch) {\n this.isRedisptchingEvent = true;\n redispatchEvent(target, e);\n this.isRedisptchingEvent = false;\n }\n }\n\n private handleChange(e: Event) {\n // prevent keyboard triggered changes from dispatching for\n // clamped values; note, this only occurs for keyboard\n const changeTarget = e.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, e);\n }\n // ensure keyboard triggered change clears action.\n this.finishAction(e);\n }\n\n /** @private */\n 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 /** @private */\n formStateRestoreCallback(state: string|Array<[string, string]>|null) {\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(elA: Element|null, elB: Element|null) {\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 || a.right < b.left || a.bottom < b.top ||\n a.left > b.right);\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"]}
@@ -199,7 +199,7 @@ __decorate([
199
199
  property({ type: Boolean })
200
200
  ], Switch.prototype, "icons", void 0);
201
201
  __decorate([
202
- property({ type: Boolean })
202
+ property({ type: Boolean, attribute: 'show-only-selected-icon' })
203
203
  ], Switch.prototype, "showOnlySelectedIcon", void 0);
204
204
  __decorate([
205
205
  query('button')
@@ -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/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues, 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 {dispatchActivationClick, isActivationClick} from '../../internal/controller/events.js';\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 LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /** @nocollapse */\n static formAssociated = true;\n\n /**\n * Disables the switch and makes it non-interactive.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\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}) showOnlySelectedIcon = false;\n\n // Button\n @query('button') private readonly button!: HTMLButtonElement|null;\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 /**\n * The HTML name to use in form submission.\n */\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this.internals.labels;\n }\n\n private readonly internals =\n (this as HTMLElement /* needed for closure */).attachInternals();\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.button?.focus();\n if (this.button != null) {\n // this triggers the click behavior, and the ripple\n dispatchActivationClick(this.button);\n }\n });\n }\n }\n\n protected override update(changed: PropertyValues<Switch>) {\n const state = String(this.selected);\n this.internals.setFormValue(this.selected ? this.value : null, state);\n super.update(changed);\n }\n\n protected override render(): TemplateResult {\n // NOTE: buttons must use only [phrasing\n // content](https://html.spec.whatwg.org/multipage/dom.html#phrasing-content)\n // children, which includes custom elements, but not `div`s\n return html`\n <button\n id=\"switch\"\n type=\"button\"\n class=\"switch ${classMap(this.getRenderClasses())}\"\n role=\"switch\"\n aria-checked=\"${this.selected}\"\n aria-label=${(this as ARIAMixin).ariaLabel || nothing}\n ?disabled=${this.disabled}\n @click=${this.handleClick}\n >\n <md-focus-ring></md-focus-ring>\n <span class=\"track\">\n ${this.renderHandle()}\n </span>\n </button>\n `;\n }\n\n private getRenderClasses(): ClassInfo {\n return {\n 'switch--selected': this.selected,\n 'switch--unselected': !this.selected,\n };\n }\n\n private renderHandle() {\n const classes = {\n 'with-icon': this.icons || (this.showOnlySelectedIcon && this.selected),\n };\n return html`\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 ${this.renderTouchTarget()}\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 <svg class=\"icon icon--on\" viewBox=\"0 0 24 24\">\n <path 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 `;\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 <svg class=\"icon icon--off\" viewBox=\"0 0 24 24\">\n <path 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 `;\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 handleClick() {\n if (this.disabled) {\n return;\n }\n\n this.selected = !this.selected;\n this.dispatchEvent(\n new InputEvent('input', {bubbles: true, composed: true}));\n // Bubbles but does not compose to mimic native browser <input> & <select>\n // Additionally, native change event is not an InputEvent.\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n\n /** @private */\n 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 /** @private */\n formStateRestoreCallback(state: string) {\n this.selected = state === 'true';\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/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues, 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 {dispatchActivationClick, isActivationClick} from '../../internal/controller/events.js';\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 LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /** @nocollapse */\n static formAssociated = true;\n\n /**\n * Disables the switch and makes it non-interactive.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\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 // Button\n @query('button') private readonly button!: HTMLButtonElement|null;\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 /**\n * The HTML name to use in form submission.\n */\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n this.setAttribute('name', name);\n }\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * The labels this element is associated with.\n */\n get labels() {\n return this.internals.labels;\n }\n\n private readonly internals =\n (this as HTMLElement /* needed for closure */).attachInternals();\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.button?.focus();\n if (this.button != null) {\n // this triggers the click behavior, and the ripple\n dispatchActivationClick(this.button);\n }\n });\n }\n }\n\n protected override update(changed: PropertyValues<Switch>) {\n const state = String(this.selected);\n this.internals.setFormValue(this.selected ? this.value : null, state);\n super.update(changed);\n }\n\n protected override render(): TemplateResult {\n // NOTE: buttons must use only [phrasing\n // content](https://html.spec.whatwg.org/multipage/dom.html#phrasing-content)\n // children, which includes custom elements, but not `div`s\n return html`\n <button\n id=\"switch\"\n type=\"button\"\n class=\"switch ${classMap(this.getRenderClasses())}\"\n role=\"switch\"\n aria-checked=\"${this.selected}\"\n aria-label=${(this as ARIAMixin).ariaLabel || nothing}\n ?disabled=${this.disabled}\n @click=${this.handleClick}\n >\n <md-focus-ring></md-focus-ring>\n <span class=\"track\">\n ${this.renderHandle()}\n </span>\n </button>\n `;\n }\n\n private getRenderClasses(): ClassInfo {\n return {\n 'switch--selected': this.selected,\n 'switch--unselected': !this.selected,\n };\n }\n\n private renderHandle() {\n const classes = {\n 'with-icon': this.icons || (this.showOnlySelectedIcon && this.selected),\n };\n return html`\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 ${this.renderTouchTarget()}\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 <svg class=\"icon icon--on\" viewBox=\"0 0 24 24\">\n <path 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 `;\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 <svg class=\"icon icon--off\" viewBox=\"0 0 24 24\">\n <path 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 `;\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 handleClick() {\n if (this.disabled) {\n return;\n }\n\n this.selected = !this.selected;\n this.dispatchEvent(\n new InputEvent('input', {bubbles: true, composed: true}));\n // Bubbles but does not compose to mimic native browser <input> & <select>\n // Additionally, native change event is not an InputEvent.\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n\n /** @private */\n 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 /** @private */\n formStateRestoreCallback(state: string) {\n this.selected = state === 'true';\n }\n}\n"]}
package/tabs/lib/tab.js CHANGED
@@ -62,6 +62,8 @@ export class Tab extends LitElement {
62
62
  const contentClasses = {
63
63
  'inline-icon': this.inlineIcon,
64
64
  };
65
+ // Needed for closure conformance
66
+ const { ariaLabel } = this;
65
67
  return html `
66
68
  <button
67
69
  class="button"
@@ -69,7 +71,7 @@ export class Tab extends LitElement {
69
71
  .tabIndex=${this.focusable && !this.disabled ? 0 : -1}
70
72
  aria-selected=${this.selected ? 'true' : 'false'}
71
73
  ?disabled=${this.disabled}
72
- aria-label=${this.ariaLabel || nothing}
74
+ aria-label=${ariaLabel || nothing}
73
75
  >
74
76
  <md-focus-ring inward></md-focus-ring>
75
77
  <md-elevation></md-elevation>
@@ -148,7 +150,7 @@ __decorate([
148
150
  property({ type: Boolean })
149
151
  ], Tab.prototype, "focusable", void 0);
150
152
  __decorate([
151
- property({ type: Boolean })
153
+ property({ type: Boolean, attribute: 'inline-icon' })
152
154
  ], Tab.prototype, "inlineIcon", void 0);
153
155
  __decorate([
154
156
  query('.button')
@@ -1 +1 @@
1
- {"version":3,"file":"tab.js","sourceRoot":"","sources":["tab.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/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\n\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {dispatchActivationClick, isActivationClick} from '../../internal/controller/events.js';\n\n/**\n * An element that can select items.\n */\nexport interface Tabs extends HTMLElement {\n selected?: number;\n selectedItem?: Tab;\n previousSelectedItem?: Tab;\n}\n\ntype Style = ''|'primary'|'secondary';\ntype Orientation = ''|'vertical';\n\n/**\n * Tab variant can be `primary` or `secondary and can include a space\n * separated `vertical`.\n */\nexport type Variant = Style|`${Style} ${Orientation}`|`${Orientation} ${Style}`;\n\n/**\n * Tab component.\n */\nexport class Tab extends LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /**\n * Styling variant to display, 'primary' or 'secondary' and can also\n * include `vertical`.\n * Defaults to `primary`.\n */\n @property({reflect: true}) variant: Variant = 'primary';\n\n /**\n * Whether or not the tab is `disabled`.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * Whether or not the tab is `selected`.\n **/\n @property({type: Boolean, reflect: true}) selected = false;\n\n /**\n * Whether or not the tab is `focusable`.\n */\n @property({type: Boolean}) focusable = false;\n\n /**\n * Whether or not the icon renders inline with label or stacked vertically.\n */\n @property({type: Boolean}) inlineIcon = false;\n\n @query('.button') private readonly button!: HTMLElement|null;\n\n // note, this is public so it can participate in selection animation.\n /**\n * Selection indicator element.\n */\n @query('.indicator') readonly indicator!: HTMLElement;\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', this.handleActivationClick);\n }\n }\n\n override focus() {\n this.button?.focus();\n }\n\n override blur() {\n this.button?.blur();\n }\n\n protected override render() {\n const contentClasses = {\n 'inline-icon': this.inlineIcon,\n };\n return html`\n <button\n class=\"button\"\n role=\"tab\"\n .tabIndex=${this.focusable && !this.disabled ? 0 : -1}\n aria-selected=${this.selected ? 'true' : 'false'}\n ?disabled=${this.disabled}\n aria-label=${this.ariaLabel || nothing}\n >\n <md-focus-ring inward></md-focus-ring>\n <md-elevation></md-elevation>\n <md-ripple ?disabled=${this.disabled}></md-ripple>\n <span class=\"touch\"></span>\n <div class=\"content ${classMap(contentClasses)}\">\n <slot name=\"icon\"></slot>\n <span class=\"label\">\n <slot></slot>\n </span>\n <div class=\"indicator\"></div>\n </div>\n </button>`;\n }\n\n protected override updated(changed: PropertyValues) {\n if (changed.has('selected') && !this.disabled) {\n this.animateSelected();\n }\n }\n\n private readonly handleActivationClick = (event: MouseEvent) => {\n if (!isActivationClick((event)) || !this.button) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.button);\n };\n\n private get tabs() {\n return this.parentElement as Tabs;\n }\n\n private animateSelected() {\n this.indicator.getAnimations().forEach(a => {\n a.cancel();\n });\n const frames = this.getKeyframes();\n if (frames !== null) {\n this.indicator.animate(frames, {duration: 400, easing: 'ease-out'});\n }\n }\n\n private getKeyframes() {\n const reduceMotion = shouldReduceMotion();\n if (!this.selected) {\n return reduceMotion ? [{'opacity': 1}, {'transform': 'none'}] : null;\n }\n const from: Keyframe = {};\n const isVertical = this.variant.includes('vertical');\n const fromRect =\n (this.tabs?.previousSelectedItem?.indicator.getBoundingClientRect() ??\n ({} as DOMRect));\n const fromPos = isVertical ? fromRect.top : fromRect.left;\n const fromExtent = isVertical ? fromRect.height : fromRect.width;\n const toRect = this.indicator.getBoundingClientRect();\n const toPos = isVertical ? toRect.top : toRect.left;\n const toExtent = isVertical ? toRect.height : toRect.width;\n const axis = isVertical ? 'Y' : 'X';\n const scale = fromExtent / toExtent;\n if (!reduceMotion && fromPos !== undefined && toPos !== undefined &&\n !isNaN(scale)) {\n from['transform'] = `translate${axis}(${\n (fromPos - toPos).toFixed(4)}px) scale${axis}(${scale.toFixed(4)})`;\n } else {\n from['opacity'] = 0;\n }\n // note, including `transform: none` avoids quirky Safari behavior\n // that can hide the animation.\n return [from, {'transform': 'none'}];\n }\n}\n\nfunction shouldReduceMotion() {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n"]}
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["tab.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/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, PropertyValues} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\n\nimport {ARIAMixinStrict} from '../../internal/aria/aria.js';\nimport {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';\nimport {dispatchActivationClick, isActivationClick} from '../../internal/controller/events.js';\n\n/**\n * An element that can select items.\n */\nexport interface Tabs extends HTMLElement {\n selected?: number;\n selectedItem?: Tab;\n previousSelectedItem?: Tab;\n}\n\ntype Style = ''|'primary'|'secondary';\ntype Orientation = ''|'vertical';\n\n/**\n * Tab variant can be `primary` or `secondary and can include a space\n * separated `vertical`.\n */\nexport type Variant = Style|`${Style} ${Orientation}`|`${Orientation} ${Style}`;\n\n/**\n * Tab component.\n */\nexport class Tab extends LitElement {\n static {\n requestUpdateOnAriaChange(this);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /**\n * Styling variant to display, 'primary' or 'secondary' and can also\n * include `vertical`.\n * Defaults to `primary`.\n */\n @property({reflect: true}) variant: Variant = 'primary';\n\n /**\n * Whether or not the tab is `disabled`.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * Whether or not the tab is `selected`.\n **/\n @property({type: Boolean, reflect: true}) selected = false;\n\n /**\n * Whether or not the tab is `focusable`.\n */\n @property({type: Boolean}) focusable = false;\n\n /**\n * Whether or not the icon renders inline with label or stacked vertically.\n */\n @property({type: Boolean, attribute: 'inline-icon'}) inlineIcon = false;\n\n @query('.button') private readonly button!: HTMLElement|null;\n\n // note, this is public so it can participate in selection animation.\n /**\n * Selection indicator element.\n */\n @query('.indicator') readonly indicator!: HTMLElement;\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('click', this.handleActivationClick);\n }\n }\n\n override focus() {\n this.button?.focus();\n }\n\n override blur() {\n this.button?.blur();\n }\n\n protected override render() {\n const contentClasses = {\n 'inline-icon': this.inlineIcon,\n };\n // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\n return html`\n <button\n class=\"button\"\n role=\"tab\"\n .tabIndex=${this.focusable && !this.disabled ? 0 : -1}\n aria-selected=${this.selected ? 'true' : 'false'}\n ?disabled=${this.disabled}\n aria-label=${ariaLabel || nothing}\n >\n <md-focus-ring inward></md-focus-ring>\n <md-elevation></md-elevation>\n <md-ripple ?disabled=${this.disabled}></md-ripple>\n <span class=\"touch\"></span>\n <div class=\"content ${classMap(contentClasses)}\">\n <slot name=\"icon\"></slot>\n <span class=\"label\">\n <slot></slot>\n </span>\n <div class=\"indicator\"></div>\n </div>\n </button>`;\n }\n\n protected override updated(changed: PropertyValues) {\n if (changed.has('selected') && !this.disabled) {\n this.animateSelected();\n }\n }\n\n private readonly handleActivationClick = (event: MouseEvent) => {\n if (!isActivationClick((event)) || !this.button) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.button);\n };\n\n private get tabs() {\n return this.parentElement as Tabs;\n }\n\n private animateSelected() {\n this.indicator.getAnimations().forEach(a => {\n a.cancel();\n });\n const frames = this.getKeyframes();\n if (frames !== null) {\n this.indicator.animate(frames, {duration: 400, easing: 'ease-out'});\n }\n }\n\n private getKeyframes() {\n const reduceMotion = shouldReduceMotion();\n if (!this.selected) {\n return reduceMotion ? [{'opacity': 1}, {'transform': 'none'}] : null;\n }\n const from: Keyframe = {};\n const isVertical = this.variant.includes('vertical');\n const fromRect =\n (this.tabs?.previousSelectedItem?.indicator.getBoundingClientRect() ??\n ({} as DOMRect));\n const fromPos = isVertical ? fromRect.top : fromRect.left;\n const fromExtent = isVertical ? fromRect.height : fromRect.width;\n const toRect = this.indicator.getBoundingClientRect();\n const toPos = isVertical ? toRect.top : toRect.left;\n const toExtent = isVertical ? toRect.height : toRect.width;\n const axis = isVertical ? 'Y' : 'X';\n const scale = fromExtent / toExtent;\n if (!reduceMotion && fromPos !== undefined && toPos !== undefined &&\n !isNaN(scale)) {\n from['transform'] = `translate${axis}(${\n (fromPos - toPos).toFixed(4)}px) scale${axis}(${scale.toFixed(4)})`;\n } else {\n from['opacity'] = 0;\n }\n // note, including `transform: none` avoids quirky Safari behavior\n // that can hide the animation.\n return [from, {'transform': 'none'}];\n }\n}\n\nfunction shouldReduceMotion() {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n"]}
package/tabs/lib/tabs.js CHANGED
@@ -172,6 +172,8 @@ export class Tabs extends LitElement {
172
172
  Object.defineProperties(event, {
173
173
  'defaultPrevented': { value: false, writable: true, configurable: true },
174
174
  'preventDefault': {
175
+ // Type needed for closure conformance. Using the Event type results
176
+ // in a type error.
175
177
  value() {
176
178
  this.defaultPrevented = true;
177
179
  },
@@ -299,7 +301,7 @@ __decorate([
299
301
  property({ type: Number })
300
302
  ], Tabs.prototype, "selected", void 0);
301
303
  __decorate([
302
- property({ type: Boolean })
304
+ property({ type: Boolean, attribute: 'select-on-focus' })
303
305
  ], Tabs.prototype, "selectOnFocus", void 0);
304
306
  __decorate([
305
307
  queryAssignedElements({ selector: 'md-tab', flatten: true })
@@ -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 {html, isServer, LitElement, PropertyValues} from 'lit';\nimport {property, queryAssignedElements, state} from 'lit/decorators.js';\n\nimport {Tab, Variant} from './tab.js';\n\nconst NAVIGATION_KEYS = new Map([\n ['default', new Set(['Home', 'End'])],\n ['horizontal', new Set(['ArrowLeft', 'ArrowRight'])],\n ['vertical', new Set(['ArrowUp', 'ArrowDown'])]\n]);\n\n/**\n * @fires change Fired when the selected tab changes. The target's selected or\n * selectedItem and previousSelected or previousSelectedItem provide information\n * about the selection change. The change event is fired when a user interaction\n * like a space/enter key or click cause a selection change. The tab selection\n * based on these actions can be cancelled by calling preventDefault on the\n * triggering `keydown` or `click` event.\n *\n * @example\n * // perform an action if a tab is clicked\n * tabs.addEventListener('change', (event: Event) => {\n * if (event.target.selected === 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 /** @nocollapse */\n static override readonly shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Styling variant to display, 'primary' or 'secondary' and can also\n * include `vertical`.\n * Defaults to `primary`.\n */\n @property({reflect: true}) variant: Variant = 'primary';\n\n /**\n * Whether or not the item is `disabled`.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Index of the selected item.\n */\n @property({type: Number}) selected = 0;\n\n /**\n * Whether or not to select an item when focused.\n */\n @property({type: Boolean}) selectOnFocus = false;\n\n private previousSelected = -1;\n private orientation = 'horizontal';\n private readonly scrollMargin = 48;\n\n @queryAssignedElements({selector: 'md-tab', flatten: true})\n private readonly items!: Tab[];\n\n // this tracks if items have changed, which triggers rendering so they can\n // be kept in sync\n @state() private itemsDirty = false;\n\n private readonly selectedAttribute = `selected`;\n\n /**\n * The item currently selected.\n */\n get selectedItem() {\n return this.items[this.selected];\n }\n\n /**\n * The item previously selected.\n */\n get previousSelectedItem() {\n return this.items[this.previousSelected];\n }\n\n /**\n * The item currently focused.\n */\n protected get focusedItem() {\n return this.items.find((e: HTMLElement) => e.matches(':focus-within'));\n }\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('keyup', this.handleKeyup);\n this.addEventListener('focusout', this.handleFocusout);\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'tablist');\n }\n\n // focus item on keydown and optionally select it\n private readonly handleKeydown = async (event: KeyboardEvent) => {\n const {key} = event;\n const shouldHandleKey = NAVIGATION_KEYS.get('default')!.has(key) ||\n NAVIGATION_KEYS.get(this.orientation)!.has(key);\n // await to after user may cancel event.\n if (!shouldHandleKey || (await this.wasEventPrevented(event, true)) ||\n this.disabled) {\n return;\n }\n let indexToFocus = -1;\n const focused = this.focusedItem ?? this.selectedItem;\n const itemCount = this.items.length;\n const isPrevKey = key === 'ArrowLeft' || key === 'ArrowUp';\n if (key === 'Home') {\n indexToFocus = 0;\n } else if (key === 'End') {\n indexToFocus = itemCount - 1;\n } else {\n const focusedIndex = this.items.indexOf(focused) || 0;\n indexToFocus = focusedIndex + (isPrevKey ? -1 : 1);\n indexToFocus =\n indexToFocus < 0 ? itemCount - 1 : indexToFocus % itemCount;\n }\n const itemToFocus =\n this.findFocusableItem(indexToFocus, key === 'End' || isPrevKey);\n indexToFocus = this.items.indexOf(itemToFocus!);\n if (itemToFocus !== null && itemToFocus !== focused) {\n this.updateFocusableItem(itemToFocus);\n itemToFocus.focus();\n if (this.selectOnFocus) {\n this.selected = indexToFocus;\n await this.dispatchInteraction();\n }\n }\n };\n\n // scroll to item on keyup.\n private readonly handleKeyup = () => {\n this.scrollItemIntoView(this.focusedItem ?? this.selectedItem);\n };\n\n // restore focus to selected item when blurring.\n private readonly handleFocusout = async () => {\n await this.updateComplete;\n const nowFocused =\n (this.getRootNode() as unknown as DocumentOrShadowRoot).activeElement as\n Tab;\n if (this.items.indexOf(nowFocused) === -1) {\n this.updateFocusableItem(this.selectedItem);\n }\n };\n\n private findFocusableItem(i = -1, prev = false, tries = 0): Tab|null {\n const itemCount = this.items.length - 1;\n while (this.items[i]?.disabled && tries <= itemCount) {\n tries++;\n i = (i + (prev ? -1 : 1));\n if (i > itemCount) {\n return this.findFocusableItem(0, false, tries);\n } else if (i < 0) {\n return this.findFocusableItem(itemCount, true, tries);\n }\n }\n return this.items[i] ?? null;\n }\n\n // Note, this is async to allow the event to bubble to user code, which\n // may call `preventDefault`. If it does, avoid performing the tabs action\n // which is selecting a new tab. Sometimes, the native event must be\n // prevented to avoid, for example, scrolling. In this case, the event is\n // patched to be able to detect if the user calls prevent default.\n // Alternatively, the event could be stopped and re-dispatched synchroously,\n // but this would be complicated since the event should be re-dispatched from\n // the initial element to potentially trigger a native action (e.g. a history\n // navigation via a tab label), and this could result in some listener hearing\n // 2x events.\n private async wasEventPrevented(event: Event, preventNativeDefault = false) {\n if (preventNativeDefault) {\n // prevent native default to stop, e.g. scrolling.\n event.preventDefault();\n // reset prevention to see if user is cancelling this action.\n Object.defineProperties(event, {\n 'defaultPrevented': {value: false, writable: true, configurable: true},\n 'preventDefault': {\n value() {\n this.defaultPrevented = true;\n },\n writable: true,\n configurable: true\n }\n });\n }\n // allow event to propagate to user code.\n await new Promise(requestAnimationFrame);\n return event.defaultPrevented;\n }\n\n private async dispatchInteraction() {\n // wait for items to render.\n await new Promise(requestAnimationFrame);\n const event = new Event('change', {bubbles: true});\n this.dispatchEvent(event);\n }\n\n protected override willUpdate(changed: PropertyValues) {\n if (changed.has('selected')) {\n this.previousSelected = changed.get('selected') ?? -1;\n }\n if (changed.has('variant')) {\n this.orientation =\n this.variant.includes('vertical') ? 'vertical' : 'horizontal';\n }\n if (this.itemsDirty) {\n this.itemsDirty = false;\n this.previousSelected = -1;\n }\n }\n\n protected override async updated(changed: PropertyValues) {\n const itemsOrVariantChanged =\n changed.has('itemsDirty') || changed.has('variant');\n // sync state with items.\n if (itemsOrVariantChanged || changed.has('disabled')) {\n this.items.forEach((item, i) => {\n item.selected = this.selected === i;\n item.variant = this.variant;\n item.disabled = this.disabled;\n });\n }\n if (itemsOrVariantChanged || changed.has('selected')) {\n if (this.previousSelectedItem !== this.selectedItem) {\n this.previousSelectedItem?.removeAttribute(this.selectedAttribute);\n this.selectedItem?.setAttribute(this.selectedAttribute, '');\n }\n if (this.selectedItem !== this.focusedItem) {\n this.updateFocusableItem(this.selectedItem);\n }\n await this.scrollItemIntoView();\n }\n }\n\n private updateFocusableItem(focusableItem: HTMLElement|null) {\n for (const item of this.items) {\n item.focusable = item === focusableItem;\n }\n }\n\n protected override render() {\n return html`\n <slot @slotchange=${this.handleSlotChange} @click=${\n this.handleItemClick}></slot>\n `;\n }\n\n private async handleItemClick(event: Event) {\n const {target} = event;\n if (await this.wasEventPrevented(event)) {\n return;\n }\n const item = (target as Element).closest(`${this.localName} > *`) as Tab;\n const i = this.items.indexOf(item);\n if (i > -1 && this.selected !== i) {\n this.selected = i;\n this.updateFocusableItem(this.selectedItem);\n // note, Safari will not focus the button here, but if focus is manually\n // triggered, this can match focus-visible and show the focus-ring,\n // so avoid the temptation to cal focus!\n await this.dispatchInteraction();\n }\n }\n\n private handleSlotChange() {\n this.itemsDirty = true;\n }\n\n private async itemsUpdateComplete() {\n for (const item of this.items) {\n await item.updateComplete;\n }\n return true;\n }\n\n // ensures the given item is visible in view; defaults to the selected item\n private async scrollItemIntoView(item = this.selectedItem) {\n if (!item) {\n return;\n }\n // wait for items to render.\n await this.itemsUpdateComplete();\n const isVertical = this.orientation === 'vertical';\n const offset = isVertical ? item.offsetTop : item.offsetLeft;\n const extent = isVertical ? item.offsetHeight : item.offsetWidth;\n const scroll = isVertical ? this.scrollTop : this.scrollLeft;\n const hostExtent = isVertical ? this.offsetHeight : this.offsetWidth;\n const min = offset - this.scrollMargin;\n const max = offset + extent - hostExtent + this.scrollMargin;\n const to = Math.min(min, Math.max(max, scroll));\n const behavior =\n // type annotation because `instant` is valid but not included in type.\n this.focusedItem !== undefined ? 'smooth' : 'instant' as ScrollBehavior;\n this.scrollTo({\n behavior,\n [isVertical ? 'left' : 'top']: 0,\n [isVertical ? 'top' : 'left']: to\n });\n }\n}\n"]}
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 {html, isServer, LitElement, PropertyValues} from 'lit';\nimport {property, queryAssignedElements, state} from 'lit/decorators.js';\n\nimport {Tab, Variant} from './tab.js';\n\nconst NAVIGATION_KEYS = new Map([\n ['default', new Set(['Home', 'End'])],\n ['horizontal', new Set(['ArrowLeft', 'ArrowRight'])],\n ['vertical', new Set(['ArrowUp', 'ArrowDown'])]\n]);\n\n/**\n * @fires change Fired when the selected tab changes. The target's selected or\n * selectedItem and previousSelected or previousSelectedItem provide information\n * about the selection change. The change event is fired when a user interaction\n * like a space/enter key or click cause a selection change. The tab selection\n * based on these actions can be cancelled by calling preventDefault on the\n * triggering `keydown` or `click` event.\n *\n * @example\n * // perform an action if a tab is clicked\n * tabs.addEventListener('change', (event: Event) => {\n * if (event.target.selected === 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 /** @nocollapse */\n static override readonly shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Styling variant to display, 'primary' or 'secondary' and can also\n * include `vertical`.\n * Defaults to `primary`.\n */\n @property({reflect: true}) variant: Variant = 'primary';\n\n /**\n * Whether or not the item is `disabled`.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Index of the selected item.\n */\n @property({type: Number}) selected = 0;\n\n /**\n * Whether or not to select an item when focused.\n */\n @property({type: Boolean, attribute: 'select-on-focus'})\n selectOnFocus = false;\n\n private previousSelected = -1;\n private orientation = 'horizontal';\n private readonly scrollMargin = 48;\n\n @queryAssignedElements({selector: 'md-tab', flatten: true})\n private readonly items!: Tab[];\n\n // this tracks if items have changed, which triggers rendering so they can\n // be kept in sync\n @state() private itemsDirty = false;\n\n private readonly selectedAttribute = `selected`;\n\n /**\n * The item currently selected.\n */\n get selectedItem() {\n return this.items[this.selected];\n }\n\n /**\n * The item previously selected.\n */\n get previousSelectedItem() {\n return this.items[this.previousSelected];\n }\n\n /**\n * The item currently focused.\n */\n protected get focusedItem() {\n return this.items.find((e: HTMLElement) => e.matches(':focus-within'));\n }\n\n constructor() {\n super();\n if (!isServer) {\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('keyup', this.handleKeyup);\n this.addEventListener('focusout', this.handleFocusout);\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'tablist');\n }\n\n // focus item on keydown and optionally select it\n private readonly handleKeydown = async (event: KeyboardEvent) => {\n const {key} = event;\n const shouldHandleKey = NAVIGATION_KEYS.get('default')!.has(key) ||\n NAVIGATION_KEYS.get(this.orientation)!.has(key);\n // await to after user may cancel event.\n if (!shouldHandleKey || (await this.wasEventPrevented(event, true)) ||\n this.disabled) {\n return;\n }\n let indexToFocus = -1;\n const focused = this.focusedItem ?? this.selectedItem;\n const itemCount = this.items.length;\n const isPrevKey = key === 'ArrowLeft' || key === 'ArrowUp';\n if (key === 'Home') {\n indexToFocus = 0;\n } else if (key === 'End') {\n indexToFocus = itemCount - 1;\n } else {\n const focusedIndex = this.items.indexOf(focused) || 0;\n indexToFocus = focusedIndex + (isPrevKey ? -1 : 1);\n indexToFocus =\n indexToFocus < 0 ? itemCount - 1 : indexToFocus % itemCount;\n }\n const itemToFocus =\n this.findFocusableItem(indexToFocus, key === 'End' || isPrevKey);\n indexToFocus = this.items.indexOf(itemToFocus!);\n if (itemToFocus !== null && itemToFocus !== focused) {\n this.updateFocusableItem(itemToFocus);\n itemToFocus.focus();\n if (this.selectOnFocus) {\n this.selected = indexToFocus;\n await this.dispatchInteraction();\n }\n }\n };\n\n // scroll to item on keyup.\n private readonly handleKeyup = () => {\n this.scrollItemIntoView(this.focusedItem ?? this.selectedItem);\n };\n\n // restore focus to selected item when blurring.\n private readonly handleFocusout = async () => {\n await this.updateComplete;\n const nowFocused =\n (this.getRootNode() as unknown as DocumentOrShadowRoot).activeElement as\n Tab;\n if (this.items.indexOf(nowFocused) === -1) {\n this.updateFocusableItem(this.selectedItem);\n }\n };\n\n private findFocusableItem(i = -1, prev = false, tries = 0): Tab|null {\n const itemCount = this.items.length - 1;\n while (this.items[i]?.disabled && tries <= itemCount) {\n tries++;\n i = (i + (prev ? -1 : 1));\n if (i > itemCount) {\n return this.findFocusableItem(0, false, tries);\n } else if (i < 0) {\n return this.findFocusableItem(itemCount, true, tries);\n }\n }\n return this.items[i] ?? null;\n }\n\n // Note, this is async to allow the event to bubble to user code, which\n // may call `preventDefault`. If it does, avoid performing the tabs action\n // which is selecting a new tab. Sometimes, the native event must be\n // prevented to avoid, for example, scrolling. In this case, the event is\n // patched to be able to detect if the user calls prevent default.\n // Alternatively, the event could be stopped and re-dispatched synchroously,\n // but this would be complicated since the event should be re-dispatched from\n // the initial element to potentially trigger a native action (e.g. a history\n // navigation via a tab label), and this could result in some listener hearing\n // 2x events.\n private async wasEventPrevented(event: Event, preventNativeDefault = false) {\n if (preventNativeDefault) {\n // prevent native default to stop, e.g. scrolling.\n event.preventDefault();\n // reset prevention to see if user is cancelling this action.\n Object.defineProperties(event, {\n 'defaultPrevented': {value: false, writable: true, configurable: true},\n 'preventDefault': {\n // Type needed for closure conformance. Using the Event type results\n // in a type error.\n value(this: {defaultPrevented: boolean}) {\n this.defaultPrevented = true;\n },\n writable: true,\n configurable: true\n }\n });\n }\n // allow event to propagate to user code.\n await new Promise(requestAnimationFrame);\n return event.defaultPrevented;\n }\n\n private async dispatchInteraction() {\n // wait for items to render.\n await new Promise(requestAnimationFrame);\n const event = new Event('change', {bubbles: true});\n this.dispatchEvent(event);\n }\n\n protected override willUpdate(changed: PropertyValues) {\n if (changed.has('selected')) {\n this.previousSelected = changed.get('selected') ?? -1;\n }\n if (changed.has('variant')) {\n this.orientation =\n this.variant.includes('vertical') ? 'vertical' : 'horizontal';\n }\n if (this.itemsDirty) {\n this.itemsDirty = false;\n this.previousSelected = -1;\n }\n }\n\n protected override async updated(changed: PropertyValues) {\n const itemsOrVariantChanged =\n changed.has('itemsDirty') || changed.has('variant');\n // sync state with items.\n if (itemsOrVariantChanged || changed.has('disabled')) {\n this.items.forEach((item, i) => {\n item.selected = this.selected === i;\n item.variant = this.variant;\n item.disabled = this.disabled;\n });\n }\n if (itemsOrVariantChanged || changed.has('selected')) {\n if (this.previousSelectedItem !== this.selectedItem) {\n this.previousSelectedItem?.removeAttribute(this.selectedAttribute);\n this.selectedItem?.setAttribute(this.selectedAttribute, '');\n }\n if (this.selectedItem !== this.focusedItem) {\n this.updateFocusableItem(this.selectedItem);\n }\n await this.scrollItemIntoView();\n }\n }\n\n private updateFocusableItem(focusableItem: HTMLElement|null) {\n for (const item of this.items) {\n item.focusable = item === focusableItem;\n }\n }\n\n protected override render() {\n return html`\n <slot @slotchange=${this.handleSlotChange} @click=${\n this.handleItemClick}></slot>\n `;\n }\n\n private async handleItemClick(event: Event) {\n const {target} = event;\n if (await this.wasEventPrevented(event)) {\n return;\n }\n const item = (target as Element).closest(`${this.localName} > *`) as Tab;\n const i = this.items.indexOf(item);\n if (i > -1 && this.selected !== i) {\n this.selected = i;\n this.updateFocusableItem(this.selectedItem);\n // note, Safari will not focus the button here, but if focus is manually\n // triggered, this can match focus-visible and show the focus-ring,\n // so avoid the temptation to cal focus!\n await this.dispatchInteraction();\n }\n }\n\n private handleSlotChange() {\n this.itemsDirty = true;\n }\n\n private async itemsUpdateComplete() {\n for (const item of this.items) {\n await item.updateComplete;\n }\n return true;\n }\n\n // ensures the given item is visible in view; defaults to the selected item\n private async scrollItemIntoView(item = this.selectedItem) {\n if (!item) {\n return;\n }\n // wait for items to render.\n await this.itemsUpdateComplete();\n const isVertical = this.orientation === 'vertical';\n const offset = isVertical ? item.offsetTop : item.offsetLeft;\n const extent = isVertical ? item.offsetHeight : item.offsetWidth;\n const scroll = isVertical ? this.scrollTop : this.scrollLeft;\n const hostExtent = isVertical ? this.offsetHeight : this.offsetWidth;\n const min = offset - this.scrollMargin;\n const max = offset + extent - hostExtent + this.scrollMargin;\n const to = Math.min(min, Math.max(max, scroll));\n const behavior =\n // type annotation because `instant` is valid but not included in type.\n this.focusedItem !== undefined ? 'smooth' : 'instant' as ScrollBehavior;\n this.scrollTo({\n behavior,\n [isVertical ? 'left' : 'top']: 0,\n [isVertical ? 'top' : 'left']: to\n });\n }\n}\n"]}
@@ -32,10 +32,6 @@
32
32
  cursor: default;
33
33
  }
34
34
 
35
- .counter {
36
- white-space: nowrap;
37
- }
38
-
39
35
  @include icon.styles;
40
36
  @include input.styles;
41
37
  }
@@ -4,6 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { css } from 'lit';
7
- export const styles = css `:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.text-field{display:inline-flex;flex:1}.field{cursor:text;flex:1}.disabled .field{cursor:default}.counter{white-space:nowrap}.icon{color:currentColor;display:flex;fill:currentColor}.icon ::slotted(*){display:flex}[hasstart] .icon.leading{font-size:var(--_leading-icon-size);height:var(--_leading-icon-size);width:var(--_leading-icon-size)}[hasend] .icon.trailing{font-size:var(--_trailing-icon-size);height:var(--_trailing-icon-size);width:var(--_trailing-icon-size)}input{appearance:none;background:none;border:none;caret-color:var(--_caret-color);color:currentColor;font:inherit;outline:none;padding:0;text-align:inherit;width:100%}input::placeholder{color:currentColor;opacity:1}input::-webkit-calendar-picker-indicator{display:none}@media(forced-colors: active){input{background-color:Field}}:focus-within input{caret-color:var(--_focus-caret-color)}.error:focus-within input{caret-color:var(--_error-focus-caret-color)}.text-field:not(.disabled) .prefix{color:var(--_input-text-prefix-color)}.text-field:not(.disabled) .suffix{color:var(--_input-text-suffix-color)}.text-field:not(.disabled) input::placeholder{color:var(--_input-text-placeholder-color)}.prefix{padding-inline-end:var(--_input-text-prefix-padding)}.suffix{padding-inline-start:var(--_input-text-suffix-padding)}/*# sourceMappingURL=shared-styles.css.map */
7
+ export const styles = css `:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.text-field{display:inline-flex;flex:1}.field{cursor:text;flex:1}.disabled .field{cursor:default}.icon{color:currentColor;display:flex;fill:currentColor}.icon ::slotted(*){display:flex}[hasstart] .icon.leading{font-size:var(--_leading-icon-size);height:var(--_leading-icon-size);width:var(--_leading-icon-size)}[hasend] .icon.trailing{font-size:var(--_trailing-icon-size);height:var(--_trailing-icon-size);width:var(--_trailing-icon-size)}input{appearance:none;background:none;border:none;caret-color:var(--_caret-color);color:currentColor;font:inherit;outline:none;padding:0;text-align:inherit;width:100%}input::placeholder{color:currentColor;opacity:1}input::-webkit-calendar-picker-indicator{display:none}@media(forced-colors: active){input{background-color:Field}}:focus-within input{caret-color:var(--_focus-caret-color)}.error:focus-within input{caret-color:var(--_error-focus-caret-color)}.text-field:not(.disabled) .prefix{color:var(--_input-text-prefix-color)}.text-field:not(.disabled) .suffix{color:var(--_input-text-suffix-color)}.text-field:not(.disabled) input::placeholder{color:var(--_input-text-placeholder-color)}.prefix{padding-inline-end:var(--_input-text-prefix-padding)}.suffix{padding-inline-start:var(--_input-text-suffix-padding)}/*# sourceMappingURL=shared-styles.css.map */
8
8
  `;
9
9
  //# sourceMappingURL=shared-styles.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared-styles.css.js","sourceRoot":"","sources":["shared-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.text-field{display:inline-flex;flex:1}.field{cursor:text;flex:1}.disabled .field{cursor:default}.counter{white-space:nowrap}.icon{color:currentColor;display:flex;fill:currentColor}.icon ::slotted(*){display:flex}[hasstart] .icon.leading{font-size:var(--_leading-icon-size);height:var(--_leading-icon-size);width:var(--_leading-icon-size)}[hasend] .icon.trailing{font-size:var(--_trailing-icon-size);height:var(--_trailing-icon-size);width:var(--_trailing-icon-size)}input{appearance:none;background:none;border:none;caret-color:var(--_caret-color);color:currentColor;font:inherit;outline:none;padding:0;text-align:inherit;width:100%}input::placeholder{color:currentColor;opacity:1}input::-webkit-calendar-picker-indicator{display:none}@media(forced-colors: active){input{background-color:Field}}:focus-within input{caret-color:var(--_focus-caret-color)}.error:focus-within input{caret-color:var(--_error-focus-caret-color)}.text-field:not(.disabled) .prefix{color:var(--_input-text-prefix-color)}.text-field:not(.disabled) .suffix{color:var(--_input-text-suffix-color)}.text-field:not(.disabled) input::placeholder{color:var(--_input-text-placeholder-color)}.prefix{padding-inline-end:var(--_input-text-prefix-padding)}.suffix{padding-inline-start:var(--_input-text-suffix-padding)}/*# sourceMappingURL=shared-styles.css.map */\n`;\n "]}
1
+ {"version":3,"file":"shared-styles.css.js","sourceRoot":"","sources":["shared-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.text-field{display:inline-flex;flex:1}.field{cursor:text;flex:1}.disabled .field{cursor:default}.icon{color:currentColor;display:flex;fill:currentColor}.icon ::slotted(*){display:flex}[hasstart] .icon.leading{font-size:var(--_leading-icon-size);height:var(--_leading-icon-size);width:var(--_leading-icon-size)}[hasend] .icon.trailing{font-size:var(--_trailing-icon-size);height:var(--_trailing-icon-size);width:var(--_trailing-icon-size)}input{appearance:none;background:none;border:none;caret-color:var(--_caret-color);color:currentColor;font:inherit;outline:none;padding:0;text-align:inherit;width:100%}input::placeholder{color:currentColor;opacity:1}input::-webkit-calendar-picker-indicator{display:none}@media(forced-colors: active){input{background-color:Field}}:focus-within input{caret-color:var(--_focus-caret-color)}.error:focus-within input{caret-color:var(--_error-focus-caret-color)}.text-field:not(.disabled) .prefix{color:var(--_input-text-prefix-color)}.text-field:not(.disabled) .suffix{color:var(--_input-text-suffix-color)}.text-field:not(.disabled) input::placeholder{color:var(--_input-text-placeholder-color)}.prefix{padding-inline-end:var(--_input-text-prefix-padding)}.suffix{padding-inline-start:var(--_input-text-suffix-padding)}/*# sourceMappingURL=shared-styles.css.map */\n`;\n "]}
@@ -41,7 +41,7 @@ export declare abstract class TextField extends LitElement {
41
41
  * native `validationMessage`.
42
42
  */
43
43
  errorText: string;
44
- label?: string;
44
+ label: string;
45
45
  required: boolean;
46
46
  /**
47
47
  * The current value of the text field. It is always a string.
@@ -188,12 +188,6 @@ export declare abstract class TextField extends LitElement {
188
188
  */
189
189
  private dirty;
190
190
  private focused;
191
- /**
192
- * When set to true, the error text's `role="alert"` will be removed, then
193
- * re-added after an animation frame. This will re-announce an error message
194
- * to screen readers.
195
- */
196
- private refreshErrorAlert;
197
191
  /**
198
192
  * Whether or not a native error has been reported via `reportValidity()`.
199
193
  */
@@ -205,6 +199,7 @@ export declare abstract class TextField extends LitElement {
205
199
  private nativeErrorText;
206
200
  private get hasError();
207
201
  private readonly input?;
202
+ private readonly field?;
208
203
  private readonly leadingIcons;
209
204
  private readonly trailingIcons;
210
205
  private readonly internals;
@@ -307,16 +302,10 @@ export declare abstract class TextField extends LitElement {
307
302
  private renderLeadingIcon;
308
303
  private renderTrailingIcon;
309
304
  private renderInput;
310
- private getAriaDescribedBy;
311
305
  private renderPrefix;
312
306
  private renderSuffix;
313
307
  private renderAffix;
314
- private renderSupportingText;
315
- private getSupportingText;
316
308
  private getErrorText;
317
- private shouldErrorAnnounce;
318
- private renderCounter;
319
- private getCounterText;
320
309
  private handleFocusin;
321
310
  private handleFocusout;
322
311
  private handleInput;