@material/web 1.0.0-pre.14 → 1.0.0-pre.15

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 (258) hide show
  1. package/README.md +5 -5
  2. package/all.d.ts +4 -8
  3. package/all.js +4 -8
  4. package/all.js.map +1 -1
  5. package/button/{_tonal-button.scss → _filled-tonal-button.scss} +1 -1
  6. package/button/{tonal-button.d.ts → filled-tonal-button.d.ts} +3 -3
  7. package/button/{tonal-button.js → filled-tonal-button.js} +9 -9
  8. package/button/filled-tonal-button.js.map +1 -0
  9. package/button/internal/{_tonal-button.scss → _filled-tonal-button.scss} +7 -7
  10. package/button/internal/_shared.scss +12 -7
  11. package/button/internal/_touch-target.scss +5 -1
  12. package/button/internal/button.d.ts +6 -10
  13. package/button/internal/button.js +10 -43
  14. package/button/internal/button.js.map +1 -1
  15. package/button/internal/elevated-styles.css.js +1 -1
  16. package/button/internal/elevated-styles.css.js.map +1 -1
  17. package/button/internal/filled-styles.css.js +1 -1
  18. package/button/internal/filled-styles.css.js.map +1 -1
  19. package/button/internal/{tonal-button.d.ts → filled-tonal-button.d.ts} +2 -2
  20. package/button/internal/{tonal-button.js → filled-tonal-button.js} +3 -3
  21. package/button/internal/filled-tonal-button.js.map +1 -0
  22. package/button/internal/filled-tonal-styles.css.js +9 -0
  23. package/button/internal/filled-tonal-styles.css.js.map +1 -0
  24. package/button/internal/{tonal-styles.scss → filled-tonal-styles.scss} +2 -2
  25. package/button/internal/outlined-styles.css.js +1 -1
  26. package/button/internal/outlined-styles.css.js.map +1 -1
  27. package/button/internal/shared-styles.css.js +1 -1
  28. package/button/internal/shared-styles.css.js.map +1 -1
  29. package/button/internal/text-styles.css.js +1 -1
  30. package/button/internal/text-styles.css.js.map +1 -1
  31. package/checkbox/internal/_checkbox.scss +22 -78
  32. package/checkbox/internal/checkbox-styles.css.js +1 -1
  33. package/checkbox/internal/checkbox-styles.css.js.map +1 -1
  34. package/checkbox/internal/checkbox.d.ts +77 -6
  35. package/checkbox/internal/checkbox.js +123 -14
  36. package/checkbox/internal/checkbox.js.map +1 -1
  37. package/chips/internal/_shared.scss +8 -0
  38. package/chips/internal/chip-set.js +1 -3
  39. package/chips/internal/chip-set.js.map +1 -1
  40. package/chips/internal/chip.js +1 -3
  41. package/chips/internal/chip.js.map +1 -1
  42. package/chips/internal/filter-chip.d.ts +1 -0
  43. package/chips/internal/filter-chip.js +12 -6
  44. package/chips/internal/filter-chip.js.map +1 -1
  45. package/chips/internal/shared-styles.css.js +1 -1
  46. package/chips/internal/shared-styles.css.js.map +1 -1
  47. package/common.d.ts +2 -6
  48. package/common.js +2 -6
  49. package/common.js.map +1 -1
  50. package/dialog/harness.d.ts +1 -6
  51. package/dialog/harness.js +2 -43
  52. package/dialog/harness.js.map +1 -1
  53. package/dialog/internal/_dialog.scss +165 -281
  54. package/dialog/internal/animations.d.ts +47 -0
  55. package/dialog/internal/animations.js +117 -0
  56. package/dialog/internal/animations.js.map +1 -0
  57. package/dialog/internal/dialog-styles.css.js +1 -1
  58. package/dialog/internal/dialog-styles.css.js.map +1 -1
  59. package/dialog/internal/dialog.d.ts +76 -169
  60. package/dialog/internal/dialog.js +251 -475
  61. package/dialog/internal/dialog.js.map +1 -1
  62. package/fab/internal/_fab.scss +4 -0
  63. package/fab/internal/_shared.scss +12 -0
  64. package/fab/internal/fab-styles.css.js +1 -1
  65. package/fab/internal/fab-styles.css.js.map +1 -1
  66. package/fab/internal/shared-styles.css.js +1 -1
  67. package/fab/internal/shared-styles.css.js.map +1 -1
  68. package/fab/internal/shared.d.ts +0 -4
  69. package/fab/internal/shared.js +3 -13
  70. package/fab/internal/shared.js.map +1 -1
  71. package/focus/internal/_focus-ring.scss +52 -48
  72. package/focus/internal/focus-ring-styles.css.js +1 -1
  73. package/focus/internal/focus-ring-styles.css.js.map +1 -1
  74. package/focus/internal/focus-ring.d.ts +2 -1
  75. package/focus/internal/focus-ring.js +10 -0
  76. package/focus/internal/focus-ring.js.map +1 -1
  77. package/icon/internal/_icon.scss +18 -17
  78. package/icon/internal/icon-styles.css.js +1 -1
  79. package/icon/internal/icon-styles.css.js.map +1 -1
  80. package/icon/internal/icon.d.ts +1 -0
  81. package/icon/internal/icon.js +9 -0
  82. package/icon/internal/icon.js.map +1 -1
  83. package/iconbutton/{_standard-icon-button.scss → _icon-button.scss} +1 -1
  84. package/iconbutton/{standard-icon-button.d.ts → icon-button.d.ts} +2 -2
  85. package/iconbutton/{standard-icon-button.js → icon-button.js} +7 -7
  86. package/iconbutton/icon-button.js.map +1 -0
  87. package/iconbutton/internal/_filled-icon-button.scss +8 -6
  88. package/iconbutton/internal/_filled-tonal-icon-button.scss +8 -6
  89. package/iconbutton/internal/{_standard-icon-button.scss → _icon-button.scss} +8 -8
  90. package/iconbutton/internal/_outlined-icon-button.scss +14 -14
  91. package/iconbutton/internal/_shared.scss +6 -9
  92. package/iconbutton/internal/filled-styles.css.js +1 -1
  93. package/iconbutton/internal/filled-styles.css.js.map +1 -1
  94. package/iconbutton/internal/filled-tonal-styles.css.js +1 -1
  95. package/iconbutton/internal/filled-tonal-styles.css.js.map +1 -1
  96. package/iconbutton/internal/icon-button.d.ts +10 -1
  97. package/iconbutton/internal/icon-button.js +17 -2
  98. package/iconbutton/internal/icon-button.js.map +1 -1
  99. package/iconbutton/internal/outlined-styles.css.js +1 -1
  100. package/iconbutton/internal/outlined-styles.css.js.map +1 -1
  101. package/iconbutton/internal/shared-styles.css.js +1 -1
  102. package/iconbutton/internal/shared-styles.css.js.map +1 -1
  103. package/iconbutton/internal/standard-styles.css.js +1 -1
  104. package/iconbutton/internal/standard-styles.css.js.map +1 -1
  105. package/iconbutton/internal/standard-styles.scss +2 -2
  106. package/internal/aria/delegate.d.ts +1 -1
  107. package/internal/aria/delegate.js +1 -1
  108. package/internal/aria/delegate.js.map +1 -1
  109. package/internal/controller/element-internals.d.ts +35 -0
  110. package/internal/controller/element-internals.js +24 -0
  111. package/internal/controller/element-internals.js.map +1 -0
  112. package/internal/controller/form-submitter.d.ts +60 -0
  113. package/internal/controller/form-submitter.js +69 -0
  114. package/internal/controller/form-submitter.js.map +1 -0
  115. package/labs/navigationbar/internal/navigation-bar.js +1 -3
  116. package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
  117. package/labs/navigationdrawer/internal/navigation-drawer-modal.js +1 -3
  118. package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
  119. package/labs/navigationdrawer/internal/navigation-drawer.js +1 -3
  120. package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
  121. package/labs/navigationtab/internal/navigation-tab.js +1 -3
  122. package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
  123. package/labs/segmentedbutton/internal/outlined-styles.css.js +1 -1
  124. package/labs/segmentedbutton/internal/outlined-styles.css.js.map +1 -1
  125. package/labs/segmentedbutton/internal/segmented-button.js +1 -3
  126. package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
  127. package/labs/segmentedbuttonset/internal/outlined-styles.css.js +1 -1
  128. package/labs/segmentedbuttonset/internal/outlined-styles.css.js.map +1 -1
  129. package/labs/segmentedbuttonset/internal/segmented-button-set.js +1 -3
  130. package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
  131. package/list/internal/list.d.ts +2 -2
  132. package/list/internal/list.js +1 -3
  133. package/list/internal/list.js.map +1 -1
  134. package/list/internal/listitem/_list-item.scss +20 -54
  135. package/list/internal/listitem/list-item-styles.css.js +1 -1
  136. package/list/internal/listitem/list-item-styles.css.js.map +1 -1
  137. package/list/internal/listitem/list-item.d.ts +15 -3
  138. package/list/internal/listitem/list-item.js +43 -10
  139. package/list/internal/listitem/list-item.js.map +1 -1
  140. package/menu/internal/menu.js +3 -4
  141. package/menu/internal/menu.js.map +1 -1
  142. package/menu/internal/menuitem/_menu-item.scss +1 -1
  143. package/menu/internal/menuitem/forced-colors-styles.css.js +1 -1
  144. package/menu/internal/menuitem/forced-colors-styles.css.js.map +1 -1
  145. package/menu/internal/menuitem/forced-colors-styles.scss +1 -1
  146. package/menu/internal/menuitem/menu-item-styles.css.js +1 -1
  147. package/menu/internal/menuitem/menu-item-styles.css.js.map +1 -1
  148. package/menu/internal/menuitem/menu-item.d.ts +9 -0
  149. package/menu/internal/menuitem/menu-item.js +18 -4
  150. package/menu/internal/menuitem/menu-item.js.map +1 -1
  151. package/menu/internal/shared.d.ts +45 -38
  152. package/menu/internal/shared.js +29 -40
  153. package/menu/internal/shared.js.map +1 -1
  154. package/menu/internal/submenuitem/sub-menu-item.d.ts +22 -12
  155. package/menu/internal/submenuitem/sub-menu-item.js +39 -24
  156. package/menu/internal/submenuitem/sub-menu-item.js.map +1 -1
  157. package/menu/menu-item.d.ts +1 -1
  158. package/menu/menu-item.js +0 -1
  159. package/menu/menu-item.js.map +1 -1
  160. package/menu/menu.d.ts +1 -1
  161. package/menu/menu.js +0 -1
  162. package/menu/menu.js.map +1 -1
  163. package/menu/sub-menu-item.d.ts +1 -1
  164. package/menu/sub-menu-item.js +0 -1
  165. package/menu/sub-menu-item.js.map +1 -1
  166. package/package.json +1 -3
  167. package/progress/internal/progress.js +1 -3
  168. package/progress/internal/progress.js.map +1 -1
  169. package/radio/internal/_radio.scss +38 -24
  170. package/radio/internal/forced-colors-styles.css.js +1 -1
  171. package/radio/internal/forced-colors-styles.css.js.map +1 -1
  172. package/radio/internal/forced-colors-styles.scss +4 -4
  173. package/radio/internal/radio-styles.css.js +1 -1
  174. package/radio/internal/radio-styles.css.js.map +1 -1
  175. package/radio/internal/radio.js +7 -6
  176. package/radio/internal/radio.js.map +1 -1
  177. package/select/internal/_filled-select.scss +2 -2
  178. package/select/internal/_outlined-select.scss +2 -2
  179. package/select/internal/_shared.scss +30 -0
  180. package/select/internal/filled-select-styles.css.js +1 -1
  181. package/select/internal/filled-select-styles.css.js.map +1 -1
  182. package/select/internal/outlined-select-styles.css.js +1 -1
  183. package/select/internal/outlined-select-styles.css.js.map +1 -1
  184. package/select/internal/select.d.ts +0 -5
  185. package/select/internal/select.js +11 -16
  186. package/select/internal/select.js.map +1 -1
  187. package/select/internal/selectoption/select-option.d.ts +5 -6
  188. package/select/internal/selectoption/select-option.js +8 -9
  189. package/select/internal/selectoption/select-option.js.map +1 -1
  190. package/select/internal/shared-styles.css.js +1 -1
  191. package/select/internal/shared-styles.css.js.map +1 -1
  192. package/select/internal/shared.d.ts +5 -9
  193. package/select/internal/shared.js +13 -11
  194. package/select/internal/shared.js.map +1 -1
  195. package/slider/internal/slider.js +1 -3
  196. package/slider/internal/slider.js.map +1 -1
  197. package/switch/internal/_handle.scss +12 -12
  198. package/switch/internal/_icon.scss +8 -8
  199. package/switch/internal/_track.scss +10 -10
  200. package/switch/internal/forced-colors-styles.css.js +1 -1
  201. package/switch/internal/forced-colors-styles.css.js.map +1 -1
  202. package/switch/internal/forced-colors-styles.scss +12 -12
  203. package/switch/internal/switch-styles.css.js +1 -1
  204. package/switch/internal/switch-styles.css.js.map +1 -1
  205. package/switch/internal/switch.js +1 -3
  206. package/switch/internal/switch.js.map +1 -1
  207. package/tabs/internal/_tab.scss +1 -1
  208. package/tabs/internal/_tabs.scss +1 -0
  209. package/tabs/internal/tab.d.ts +3 -9
  210. package/tabs/internal/tab.js +4 -7
  211. package/tabs/internal/tab.js.map +1 -1
  212. package/tabs/internal/tabs.d.ts +1 -4
  213. package/tabs/internal/tabs.js +5 -10
  214. package/tabs/internal/tabs.js.map +1 -1
  215. package/textfield/harness.js +4 -0
  216. package/textfield/harness.js.map +1 -1
  217. package/textfield/internal/text-field.js +1 -4
  218. package/textfield/internal/text-field.js.map +1 -1
  219. package/tokens/_index.scss +1 -0
  220. package/tokens/_md-comp-checkbox.scss +16 -16
  221. package/tokens/_md-comp-dialog.scss +2 -1
  222. package/tokens/_md-comp-elevated-button.scss +14 -12
  223. package/tokens/_md-comp-filled-button.scss +14 -12
  224. package/tokens/_md-comp-filled-icon-button.scss +23 -8
  225. package/tokens/_md-comp-filled-select.scss +19 -1
  226. package/tokens/_md-comp-filled-tonal-button.scss +14 -12
  227. package/tokens/_md-comp-filled-tonal-icon-button.scss +23 -8
  228. package/tokens/_md-comp-icon-button.scss +24 -11
  229. package/tokens/_md-comp-icon.scss +32 -0
  230. package/tokens/_md-comp-outlined-button.scss +14 -12
  231. package/tokens/_md-comp-outlined-icon-button.scss +26 -12
  232. package/tokens/_md-comp-outlined-segmented-button.scss +2 -2
  233. package/tokens/_md-comp-radio-button.scss +20 -9
  234. package/tokens/_md-comp-switch.scss +66 -32
  235. package/tokens/_md-comp-text-button.scss +14 -12
  236. package/button/internal/tonal-button.js.map +0 -1
  237. package/button/internal/tonal-styles.css.js +0 -9
  238. package/button/internal/tonal-styles.css.js.map +0 -1
  239. package/button/tonal-button.js.map +0 -1
  240. package/dialog/internal/_tokens.scss +0 -66
  241. package/icon/internal/_md-comp-icon.scss +0 -18
  242. package/iconbutton/standard-icon-button.js.map +0 -1
  243. package/list/internal/listitemlink/list-item-link-only.d.ts +0 -23
  244. package/list/internal/listitemlink/list-item-link-only.js +0 -36
  245. package/list/internal/listitemlink/list-item-link-only.js.map +0 -1
  246. package/list/internal/listitemlink/list-item-link.d.ts +0 -18
  247. package/list/internal/listitemlink/list-item-link.js +0 -42
  248. package/list/internal/listitemlink/list-item-link.js.map +0 -1
  249. package/list/list-item-link.d.ts +0 -53
  250. package/list/list-item-link.js +0 -57
  251. package/list/list-item-link.js.map +0 -1
  252. package/menu/internal/menuitemlink/menu-item-link.d.ts +0 -23
  253. package/menu/internal/menuitemlink/menu-item-link.js +0 -49
  254. package/menu/internal/menuitemlink/menu-item-link.js.map +0 -1
  255. package/menu/menu-item-link.d.ts +0 -33
  256. package/menu/menu-item-link.js +0 -38
  257. package/menu/menu-item-link.js.map +0 -1
  258. /package/button/internal/{tonal-styles.css.d.ts → filled-tonal-styles.css.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"switch-styles.css.js","sourceRoot":"","sources":["switch-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_disabled-selected-handle-color: var(--md-switch-disabled-selected-handle-color, var(--md-sys-color-surface, #fef7ff));--_disabled-selected-handle-opacity: var(--md-switch-disabled-selected-handle-opacity, 1);--_disabled-selected-icon-color: var(--md-switch-disabled-selected-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-selected-icon-opacity: var(--md-switch-disabled-selected-icon-opacity, 0.38);--_disabled-selected-track-color: var(--md-switch-disabled-selected-track-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-track-opacity: var(--md-switch-disabled-track-opacity, 0.12);--_disabled-unselected-handle-color: var(--md-switch-disabled-unselected-handle-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-unselected-handle-opacity: var(--md-switch-disabled-unselected-handle-opacity, 0.38);--_disabled-unselected-icon-color: var(--md-switch-disabled-unselected-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_disabled-unselected-icon-opacity: var(--md-switch-disabled-unselected-icon-opacity, 0.38);--_disabled-unselected-track-color: var(--md-switch-disabled-unselected-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_disabled-unselected-track-outline-color: var(--md-switch-disabled-unselected-track-outline-color, var(--md-sys-color-on-surface, #1d1b20));--_handle-shape: var(--md-switch-handle-shape, 9999px);--_pressed-handle-height: var(--md-switch-pressed-handle-height, 28px);--_pressed-handle-width: var(--md-switch-pressed-handle-width, 28px);--_selected-focus-handle-color: var(--md-switch-selected-focus-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-focus-icon-color: var(--md-switch-selected-focus-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-focus-track-color: var(--md-switch-selected-focus-track-color, var(--md-sys-color-primary, #6750a4));--_selected-handle-color: var(--md-switch-selected-handle-color, var(--md-sys-color-on-primary, #fff));--_selected-handle-height: var(--md-switch-selected-handle-height, 24px);--_selected-handle-width: var(--md-switch-selected-handle-width, 24px);--_selected-hover-handle-color: var(--md-switch-selected-hover-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-hover-icon-color: var(--md-switch-selected-hover-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-hover-state-layer-color: var(--md-switch-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-switch-selected-hover-state-layer-opacity, 0.08);--_selected-hover-track-color: var(--md-switch-selected-hover-track-color, var(--md-sys-color-primary, #6750a4));--_selected-icon-color: var(--md-switch-selected-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-icon-size: var(--md-switch-selected-icon-size, 16px);--_selected-pressed-handle-color: var(--md-switch-selected-pressed-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-pressed-icon-color: var(--md-switch-selected-pressed-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-pressed-state-layer-color: var(--md-switch-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-switch-selected-pressed-state-layer-opacity, 0.12);--_selected-pressed-track-color: var(--md-switch-selected-pressed-track-color, var(--md-sys-color-primary, #6750a4));--_selected-track-color: var(--md-switch-selected-track-color, var(--md-sys-color-primary, #6750a4));--_state-layer-shape: var(--md-switch-state-layer-shape, 9999px);--_state-layer-size: var(--md-switch-state-layer-size, 40px);--_track-height: var(--md-switch-track-height, 32px);--_track-outline-width: var(--md-switch-track-outline-width, 2px);--_track-shape: var(--md-switch-track-shape, 9999px);--_track-width: var(--md-switch-track-width, 52px);--_unselected-focus-handle-color: var(--md-switch-unselected-focus-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_unselected-focus-icon-color: var(--md-switch-unselected-focus-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-focus-track-color: var(--md-switch-unselected-focus-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-focus-track-outline-color: var(--md-switch-unselected-focus-track-outline-color, var(--md-sys-color-outline, #79747e));--_unselected-handle-color: var(--md-switch-unselected-handle-color, var(--md-sys-color-outline, #79747e));--_unselected-handle-height: var(--md-switch-unselected-handle-height, 16px);--_unselected-handle-width: var(--md-switch-unselected-handle-width, 16px);--_unselected-hover-handle-color: var(--md-switch-unselected-hover-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_unselected-hover-icon-color: var(--md-switch-unselected-hover-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-hover-state-layer-color: var(--md-switch-unselected-hover-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--_unselected-hover-state-layer-opacity: var(--md-switch-unselected-hover-state-layer-opacity, 0.08);--_unselected-hover-track-color: var(--md-switch-unselected-hover-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-hover-track-outline-color: var(--md-switch-unselected-hover-track-outline-color, var(--md-sys-color-outline, #79747e));--_unselected-icon-color: var(--md-switch-unselected-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-icon-size: var(--md-switch-unselected-icon-size, 16px);--_unselected-pressed-handle-color: var(--md-switch-unselected-pressed-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_unselected-pressed-icon-color: var(--md-switch-unselected-pressed-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-pressed-state-layer-color: var(--md-switch-unselected-pressed-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--_unselected-pressed-state-layer-opacity: var(--md-switch-unselected-pressed-state-layer-opacity, 0.12);--_unselected-pressed-track-color: var(--md-switch-unselected-pressed-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-pressed-track-outline-color: var(--md-switch-unselected-pressed-track-outline-color, var(--md-sys-color-outline, #79747e));--_unselected-track-color: var(--md-switch-unselected-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_unselected-track-outline-color: var(--md-switch-unselected-track-outline-color, var(--md-sys-color-outline, #79747e));--_with-icon-handle-height: var(--md-switch-with-icon-handle-height, 24px);--_with-icon-handle-width: var(--md-switch-with-icon-handle-width, 24px);--_handle-shape-start-start: var( --md-switch-handle-shape-start-start, var(--_handle-shape) );--_handle-shape-start-end: var( --md-switch-handle-shape-start-end, var(--_handle-shape) );--_handle-shape-end-end: var( --md-switch-handle-shape-end-end, var(--_handle-shape) );--_handle-shape-end-start: var( --md-switch-handle-shape-end-start, var(--_handle-shape) );--_track-shape-start-start: var( --md-switch-track-shape-start-start, var(--_track-shape) );--_track-shape-start-end: var( --md-switch-track-shape-start-end, var(--_track-shape) );--_track-shape-end-end: var( --md-switch-track-shape-end-end, var(--_track-shape) );--_track-shape-end-start: var( --md-switch-track-shape-end-start, var(--_track-shape) );display:inline-flex;outline:none;vertical-align:top;-webkit-tap-highlight-color:rgba(0,0,0,0)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_track-shape-start-start);--md-focus-ring-shape-start-end: var(--_track-shape-start-end);--md-focus-ring-shape-end-end: var(--_track-shape-end-end);--md-focus-ring-shape-end-start: var(--_track-shape-end-start)}.switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;padding:0;position:relative;width:var(--_track-width);height:var(--_track-height);border-start-start-radius:var(--_track-shape-start-start);border-start-end-radius:var(--_track-shape-start-end);border-end-end-radius:var(--_track-shape-end-end);border-end-start-radius:var(--_track-shape-end-start)}.touch{position:absolute;height:48px;width:48px}.switch:disabled{cursor:default;pointer-events:none}.switch:disabled .track{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.switch:disabled .track::before{background-clip:content-box}.switch--selected:disabled .track{background-clip:border-box}.track{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:inherit;display:flex;justify-content:center;align-items:center}.track::before{content:\"\";display:flex;position:absolute;height:100%;width:100%;border-radius:inherit;box-sizing:border-box;transition-property:opacity,background-color;transition-timing-function:linear;transition-duration:67ms}.switch:disabled .track::before,.switch:disabled .track::after{transition:none;opacity:var(--_disabled-track-opacity)}.switch--selected .track::before{background-color:var(--_selected-track-color)}.switch--selected:hover .track::before{background-color:var(--_selected-hover-track-color)}.switch--selected:focus-within .track::before{background-color:var(--_selected-focus-track-color)}.switch--selected:active .track::before{background-color:var(--_selected-pressed-track-color)}.switch--selected:disabled .track::before{background-color:var(--_disabled-selected-track-color)}.switch--unselected .track::before{background-color:var(--_unselected-track-color);border-color:var(--_unselected-track-outline-color);border-style:solid;border-width:var(--_track-outline-width)}.switch--unselected:hover .track::before{background-color:var(--_unselected-hover-track-color);border-color:var(--_unselected-hover-track-outline-color)}.switch--unselected:focus-visible .track::before{background-color:var(--_unselected-focus-track-color);border-color:var(--_unselected-focus-track-outline-color)}.switch--unselected:active .track::before{background-color:var(--_unselected-pressed-track-color);border-color:var(--_unselected-pressed-track-outline-color)}.switch--unselected:disabled .track::before{background-color:var(--_disabled-unselected-track-color);border-color:var(--_disabled-unselected-track-outline-color)}.handle-container{display:grid;place-items:center;position:relative;transition:margin 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275)}.switch--selected .handle-container{margin-inline-start:calc(var(--_track-width) - var(--_track-height))}.switch--unselected .handle-container{margin-inline-end:calc(var(--_track-width) - var(--_track-height))}.switch:disabled .handle-container{transition:none}.handle{border-start-start-radius:var(--_handle-shape-start-start);border-start-end-radius:var(--_handle-shape-start-end);border-end-end-radius:var(--_handle-shape-end-end);border-end-start-radius:var(--_handle-shape-end-start);height:var(--_unselected-handle-height);width:var(--_unselected-handle-width);transform-origin:center;transition-property:height,width;transition-duration:250ms,250ms;transition-timing-function:cubic-bezier(0.2, 0, 0, 1),cubic-bezier(0.2, 0, 0, 1);z-index:0}.handle::before{content:\"\";display:flex;inset:0;position:absolute;border-radius:inherit;box-sizing:border-box;transition:background-color 67ms linear}.switch:disabled .handle,.switch:disabled .handle::before{transition:none}.switch--selected .handle{height:var(--_selected-handle-height);width:var(--_selected-handle-width)}.handle.with-icon{height:var(--_with-icon-handle-height);width:var(--_with-icon-handle-width)}.switch--selected:enabled:active .handle,.switch--unselected:enabled:active .handle{height:var(--_pressed-handle-height);width:var(--_pressed-handle-width);transition-timing-function:linear;transition-duration:100ms}.switch--selected .handle::before{background-color:var(--_selected-handle-color)}.switch--selected:hover .handle::before{background-color:var(--_selected-hover-handle-color)}.switch--selected:focus-within .handle::before{background-color:var(--_selected-focus-handle-color)}.switch--selected:active .handle::before{background-color:var(--_selected-pressed-handle-color)}.switch--selected:disabled .handle::before{background-color:var(--_disabled-selected-handle-color);opacity:var(--_disabled-selected-handle-opacity)}.switch--unselected .handle::before{background-color:var(--_unselected-handle-color)}.switch--unselected:hover .handle::before{background-color:var(--_unselected-hover-handle-color)}.switch--unselected:focus-within .handle::before{background-color:var(--_unselected-focus-handle-color)}.switch--unselected:active .handle::before{background-color:var(--_unselected-pressed-handle-color)}.switch--unselected:disabled .handle::before{background-color:var(--_disabled-unselected-handle-color);opacity:var(--_disabled-unselected-handle-opacity)}md-ripple{border-radius:var(--_state-layer-shape);height:var(--_state-layer-size);inset:unset;width:var(--_state-layer-size)}.switch--selected md-ripple{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.switch--unselected md-ripple{--md-ripple-hover-color: var(--_unselected-hover-state-layer-color);--md-ripple-pressed-color: var(--_unselected-pressed-state-layer-color);--md-ripple-hover-opacity: var(--_unselected-hover-state-layer-opacity);--md-ripple-pressed-opacity: var(--_unselected-pressed-state-layer-opacity)}.icons{position:relative;height:100%;width:100%}.icon{position:absolute;inset:0;margin:auto;transition:fill 67ms linear,opacity 33ms linear,transform 167ms cubic-bezier(0.2, 0, 0, 1);opacity:0}.switch:disabled .icon{transition:none}.switch--selected .icon--on,.switch--unselected .icon--off{opacity:1}.switch--unselected .handle:not(.with-icon) .icon--on{transform:rotate(-45deg)}.icon--off{width:var(--_unselected-icon-size);height:var(--_unselected-icon-size);fill:var(--_unselected-icon-color)}.switch--unselected:hover .icon--off{fill:var(--_unselected-hover-icon-color)}.switch--unselected:focus-within .icon--off{fill:var(--_unselected-focus-icon-color)}.switch--unselected:active .icon--off{fill:var(--_unselected-pressed-icon-color)}.switch--unselected:disabled .icon--off{fill:var(--_disabled-unselected-icon-color);opacity:var(--_disabled-unselected-icon-opacity)}.icon--on{width:var(--_selected-icon-size);height:var(--_selected-icon-size);fill:var(--_selected-icon-color)}.switch--selected:hover .icon--on{fill:var(--_selected-hover-icon-color)}.switch--selected:focus-within .icon--on{fill:var(--_selected-focus-icon-color)}.switch--selected:active .icon--on{fill:var(--_selected-pressed-icon-color)}.switch--selected:disabled .icon--on{fill:var(--_disabled-selected-icon-color);opacity:var(--_disabled-selected-icon-opacity)}/*# sourceMappingURL=switch-styles.css.map */\n`;\n "]}
1
+ {"version":3,"file":"switch-styles.css.js","sourceRoot":"","sources":["switch-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_disabled-selected-handle-color: var(--md-switch-disabled-selected-handle-color, var(--md-sys-color-surface, #fef7ff));--_disabled-selected-handle-opacity: var(--md-switch-disabled-selected-handle-opacity, 1);--_disabled-selected-icon-color: var(--md-switch-disabled-selected-icon-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-selected-icon-opacity: var(--md-switch-disabled-selected-icon-opacity, 0.38);--_disabled-selected-track-color: var(--md-switch-disabled-selected-track-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-track-opacity: var(--md-switch-disabled-track-opacity, 0.12);--_handle-shape: var(--md-switch-handle-shape, 9999px);--_pressed-handle-height: var(--md-switch-pressed-handle-height, 28px);--_pressed-handle-width: var(--md-switch-pressed-handle-width, 28px);--_selected-focus-handle-color: var(--md-switch-selected-focus-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-focus-icon-color: var(--md-switch-selected-focus-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-focus-track-color: var(--md-switch-selected-focus-track-color, var(--md-sys-color-primary, #6750a4));--_selected-handle-color: var(--md-switch-selected-handle-color, var(--md-sys-color-on-primary, #fff));--_selected-handle-height: var(--md-switch-selected-handle-height, 24px);--_selected-handle-width: var(--md-switch-selected-handle-width, 24px);--_selected-hover-handle-color: var(--md-switch-selected-hover-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-hover-icon-color: var(--md-switch-selected-hover-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-hover-state-layer-color: var(--md-switch-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-hover-state-layer-opacity: var(--md-switch-selected-hover-state-layer-opacity, 0.08);--_selected-hover-track-color: var(--md-switch-selected-hover-track-color, var(--md-sys-color-primary, #6750a4));--_selected-icon-color: var(--md-switch-selected-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-icon-size: var(--md-switch-selected-icon-size, 16px);--_selected-pressed-handle-color: var(--md-switch-selected-pressed-handle-color, var(--md-sys-color-primary-container, #eaddff));--_selected-pressed-icon-color: var(--md-switch-selected-pressed-icon-color, var(--md-sys-color-on-primary-container, #21005d));--_selected-pressed-state-layer-color: var(--md-switch-selected-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--_selected-pressed-state-layer-opacity: var(--md-switch-selected-pressed-state-layer-opacity, 0.12);--_selected-pressed-track-color: var(--md-switch-selected-pressed-track-color, var(--md-sys-color-primary, #6750a4));--_selected-track-color: var(--md-switch-selected-track-color, var(--md-sys-color-primary, #6750a4));--_state-layer-shape: var(--md-switch-state-layer-shape, 9999px);--_state-layer-size: var(--md-switch-state-layer-size, 40px);--_track-height: var(--md-switch-track-height, 32px);--_track-outline-width: var(--md-switch-track-outline-width, 2px);--_track-shape: var(--md-switch-track-shape, 9999px);--_track-width: var(--md-switch-track-width, 52px);--_with-icon-handle-height: var(--md-switch-with-icon-handle-height, 24px);--_with-icon-handle-width: var(--md-switch-with-icon-handle-width, 24px);--_disabled-handle-color: var(--md-switch-disabled-handle-color, var(--md-sys-color-on-surface, #1d1b20));--_disabled-handle-opacity: var(--md-switch-disabled-handle-opacity, 0.38);--_disabled-icon-color: var(--md-switch-disabled-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_disabled-icon-opacity: var(--md-switch-disabled-icon-opacity, 0.38);--_disabled-track-color: var(--md-switch-disabled-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_disabled-track-outline-color: var(--md-switch-disabled-track-outline-color, var(--md-sys-color-on-surface, #1d1b20));--_focus-handle-color: var(--md-switch-focus-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_focus-icon-color: var(--md-switch-focus-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_focus-track-color: var(--md-switch-focus-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_focus-track-outline-color: var(--md-switch-focus-track-outline-color, var(--md-sys-color-outline, #79747e));--_handle-color: var(--md-switch-handle-color, var(--md-sys-color-outline, #79747e));--_handle-height: var(--md-switch-handle-height, 16px);--_handle-width: var(--md-switch-handle-width, 16px);--_hover-handle-color: var(--md-switch-hover-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_hover-icon-color: var(--md-switch-hover-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_hover-state-layer-color: var(--md-switch-hover-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--_hover-state-layer-opacity: var(--md-switch-hover-state-layer-opacity, 0.08);--_hover-track-color: var(--md-switch-hover-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_hover-track-outline-color: var(--md-switch-hover-track-outline-color, var(--md-sys-color-outline, #79747e));--_icon-color: var(--md-switch-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_icon-size: var(--md-switch-icon-size, 16px);--_pressed-handle-color: var(--md-switch-pressed-handle-color, var(--md-sys-color-on-surface-variant, #49454f));--_pressed-icon-color: var(--md-switch-pressed-icon-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_pressed-state-layer-color: var(--md-switch-pressed-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--_pressed-state-layer-opacity: var(--md-switch-pressed-state-layer-opacity, 0.12);--_pressed-track-color: var(--md-switch-pressed-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_pressed-track-outline-color: var(--md-switch-pressed-track-outline-color, var(--md-sys-color-outline, #79747e));--_track-color: var(--md-switch-track-color, var(--md-sys-color-surface-container-highest, #e6e0e9));--_track-outline-color: var(--md-switch-track-outline-color, var(--md-sys-color-outline, #79747e));--_handle-shape-start-start: var( --md-switch-handle-shape-start-start, var(--_handle-shape) );--_handle-shape-start-end: var( --md-switch-handle-shape-start-end, var(--_handle-shape) );--_handle-shape-end-end: var( --md-switch-handle-shape-end-end, var(--_handle-shape) );--_handle-shape-end-start: var( --md-switch-handle-shape-end-start, var(--_handle-shape) );--_track-shape-start-start: var( --md-switch-track-shape-start-start, var(--_track-shape) );--_track-shape-start-end: var( --md-switch-track-shape-start-end, var(--_track-shape) );--_track-shape-end-end: var( --md-switch-track-shape-end-end, var(--_track-shape) );--_track-shape-end-start: var( --md-switch-track-shape-end-start, var(--_track-shape) );display:inline-flex;outline:none;vertical-align:top;-webkit-tap-highlight-color:rgba(0,0,0,0)}md-focus-ring{--md-focus-ring-shape-start-start: var(--_track-shape-start-start);--md-focus-ring-shape-start-end: var(--_track-shape-start-end);--md-focus-ring-shape-end-end: var(--_track-shape-end-end);--md-focus-ring-shape-end-start: var(--_track-shape-end-start)}.switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;padding:0;position:relative;width:var(--_track-width);height:var(--_track-height);border-start-start-radius:var(--_track-shape-start-start);border-start-end-radius:var(--_track-shape-start-end);border-end-end-radius:var(--_track-shape-end-end);border-end-start-radius:var(--_track-shape-end-start)}.touch{position:absolute;height:48px;width:48px}.switch:disabled{cursor:default;pointer-events:none}.switch:disabled .track{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.switch:disabled .track::before{background-clip:content-box}.switch--selected:disabled .track{background-clip:border-box}.track{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:inherit;display:flex;justify-content:center;align-items:center}.track::before{content:\"\";display:flex;position:absolute;height:100%;width:100%;border-radius:inherit;box-sizing:border-box;transition-property:opacity,background-color;transition-timing-function:linear;transition-duration:67ms}.switch:disabled .track::before,.switch:disabled .track::after{transition:none;opacity:var(--_disabled-track-opacity)}.switch--selected .track::before{background-color:var(--_selected-track-color)}.switch--selected:hover .track::before{background-color:var(--_selected-hover-track-color)}.switch--selected:focus-within .track::before{background-color:var(--_selected-focus-track-color)}.switch--selected:active .track::before{background-color:var(--_selected-pressed-track-color)}.switch--selected:disabled .track::before{background-color:var(--_disabled-selected-track-color)}.switch--unselected .track::before{background-color:var(--_track-color);border-color:var(--_track-outline-color);border-style:solid;border-width:var(--_track-outline-width)}.switch--unselected:hover .track::before{background-color:var(--_hover-track-color);border-color:var(--_hover-track-outline-color)}.switch--unselected:focus-visible .track::before{background-color:var(--_focus-track-color);border-color:var(--_focus-track-outline-color)}.switch--unselected:active .track::before{background-color:var(--_pressed-track-color);border-color:var(--_pressed-track-outline-color)}.switch--unselected:disabled .track::before{background-color:var(--_disabled-track-color);border-color:var(--_disabled-track-outline-color)}.handle-container{display:grid;place-items:center;position:relative;transition:margin 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275)}.switch--selected .handle-container{margin-inline-start:calc(var(--_track-width) - var(--_track-height))}.switch--unselected .handle-container{margin-inline-end:calc(var(--_track-width) - var(--_track-height))}.switch:disabled .handle-container{transition:none}.handle{border-start-start-radius:var(--_handle-shape-start-start);border-start-end-radius:var(--_handle-shape-start-end);border-end-end-radius:var(--_handle-shape-end-end);border-end-start-radius:var(--_handle-shape-end-start);height:var(--_handle-height);width:var(--_handle-width);transform-origin:center;transition-property:height,width;transition-duration:250ms,250ms;transition-timing-function:cubic-bezier(0.2, 0, 0, 1),cubic-bezier(0.2, 0, 0, 1);z-index:0}.handle::before{content:\"\";display:flex;inset:0;position:absolute;border-radius:inherit;box-sizing:border-box;transition:background-color 67ms linear}.switch:disabled .handle,.switch:disabled .handle::before{transition:none}.switch--selected .handle{height:var(--_selected-handle-height);width:var(--_selected-handle-width)}.handle.with-icon{height:var(--_with-icon-handle-height);width:var(--_with-icon-handle-width)}.switch--selected:enabled:active .handle,.switch--unselected:enabled:active .handle{height:var(--_pressed-handle-height);width:var(--_pressed-handle-width);transition-timing-function:linear;transition-duration:100ms}.switch--selected .handle::before{background-color:var(--_selected-handle-color)}.switch--selected:hover .handle::before{background-color:var(--_selected-hover-handle-color)}.switch--selected:focus-within .handle::before{background-color:var(--_selected-focus-handle-color)}.switch--selected:active .handle::before{background-color:var(--_selected-pressed-handle-color)}.switch--selected:disabled .handle::before{background-color:var(--_disabled-selected-handle-color);opacity:var(--_disabled-selected-handle-opacity)}.switch--unselected .handle::before{background-color:var(--_handle-color)}.switch--unselected:hover .handle::before{background-color:var(--_hover-handle-color)}.switch--unselected:focus-within .handle::before{background-color:var(--_focus-handle-color)}.switch--unselected:active .handle::before{background-color:var(--_pressed-handle-color)}.switch--unselected:disabled .handle::before{background-color:var(--_disabled-handle-color);opacity:var(--_disabled-handle-opacity)}md-ripple{border-radius:var(--_state-layer-shape);height:var(--_state-layer-size);inset:unset;width:var(--_state-layer-size)}.switch--selected md-ripple{--md-ripple-hover-color: var(--_selected-hover-state-layer-color);--md-ripple-pressed-color: var(--_selected-pressed-state-layer-color);--md-ripple-hover-opacity: var(--_selected-hover-state-layer-opacity);--md-ripple-pressed-opacity: var(--_selected-pressed-state-layer-opacity)}.switch--unselected md-ripple{--md-ripple-hover-color: var(--_hover-state-layer-color);--md-ripple-pressed-color: var(--_pressed-state-layer-color);--md-ripple-hover-opacity: var(--_hover-state-layer-opacity);--md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity)}.icons{position:relative;height:100%;width:100%}.icon{position:absolute;inset:0;margin:auto;transition:fill 67ms linear,opacity 33ms linear,transform 167ms cubic-bezier(0.2, 0, 0, 1);opacity:0}.switch:disabled .icon{transition:none}.switch--selected .icon--on,.switch--unselected .icon--off{opacity:1}.switch--unselected .handle:not(.with-icon) .icon--on{transform:rotate(-45deg)}.icon--off{width:var(--_icon-size);height:var(--_icon-size);fill:var(--_icon-color)}.switch--unselected:hover .icon--off{fill:var(--_hover-icon-color)}.switch--unselected:focus-within .icon--off{fill:var(--_focus-icon-color)}.switch--unselected:active .icon--off{fill:var(--_pressed-icon-color)}.switch--unselected:disabled .icon--off{fill:var(--_disabled-icon-color);opacity:var(--_disabled-icon-opacity)}.icon--on{width:var(--_selected-icon-size);height:var(--_selected-icon-size);fill:var(--_selected-icon-color)}.switch--selected:hover .icon--on{fill:var(--_selected-hover-icon-color)}.switch--selected:focus-within .icon--on{fill:var(--_selected-focus-icon-color)}.switch--selected:active .icon--on{fill:var(--_selected-pressed-icon-color)}.switch--selected:disabled .icon--on{fill:var(--_disabled-selected-icon-color);opacity:var(--_disabled-selected-icon-opacity)}/*# sourceMappingURL=switch-styles.css.map */\n`;\n "]}
@@ -3,7 +3,6 @@
3
3
  * Copyright 2021 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- var _a;
7
6
  import { __decorate } from "tslib";
8
7
  import '../../focus/md-focus-ring.js';
9
8
  import '../../ripple/ripple.js';
@@ -181,9 +180,8 @@ export class Switch extends LitElement {
181
180
  this.selected = state === 'true';
182
181
  }
183
182
  }
184
- _a = Switch;
185
183
  (() => {
186
- requestUpdateOnAriaChange(_a);
184
+ requestUpdateOnAriaChange(Switch);
187
185
  })();
188
186
  /** @nocollapse */
189
187
  Switch.shadowRootOptions = { mode: 'open', delegatesFocus: true };
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["switch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, isServer, LitElement, nothing, 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 part=\"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/md-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(Switch);\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 part=\"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"]}
@@ -255,7 +255,7 @@
255
255
  min-width: 100%;
256
256
  }
257
257
 
258
- // vertical (no tokens for vertical as yet)
258
+ // TODO(b/293506179): remove vertical styles
259
259
  :host([variant~='vertical']) {
260
260
  flex: 0;
261
261
  }
@@ -21,6 +21,7 @@
21
21
  display: none;
22
22
  }
23
23
 
24
+ // TODO(b/293506179): remove vertical styles
24
25
  :host([variant~='vertical']:not([hidden])) {
25
26
  display: inline-flex;
26
27
  flex-direction: column;
@@ -15,13 +15,10 @@ export interface Tabs extends HTMLElement {
15
15
  selectedItem?: Tab;
16
16
  previousSelectedItem?: Tab;
17
17
  }
18
- type Style = '' | 'primary' | 'secondary';
19
- type Orientation = '' | 'vertical';
20
18
  /**
21
- * Tab variant can be `primary` or `secondary and can include a space
22
- * separated `vertical`.
19
+ * Tab variant can be `primary` or `secondary`.
23
20
  */
24
- export type TabVariant = Style | `${Style} ${Orientation}` | `${Orientation} ${Style}`;
21
+ export type TabVariant = 'primary' | 'secondary';
25
22
  /**
26
23
  * Tab component.
27
24
  */
@@ -29,9 +26,7 @@ export declare class Tab extends LitElement {
29
26
  /** @nocollapse */
30
27
  static shadowRootOptions: ShadowRootInit;
31
28
  /**
32
- * Styling variant to display, 'primary' or 'secondary' and can also
33
- * include `vertical`.
34
- * Defaults to `primary`.
29
+ * Styling variant to display, 'primary' (default) or 'secondary'.
35
30
  */
36
31
  variant: TabVariant;
37
32
  /**
@@ -65,4 +60,3 @@ export declare class Tab extends LitElement {
65
60
  private animateSelected;
66
61
  private getKeyframes;
67
62
  }
68
- export {};
@@ -3,7 +3,6 @@
3
3
  * Copyright 2023 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- var _a;
7
6
  import { __decorate } from "tslib";
8
7
  import '../../elevation/elevation.js';
9
8
  import '../../focus/md-focus-ring.js';
@@ -20,9 +19,7 @@ export class Tab extends LitElement {
20
19
  constructor() {
21
20
  super();
22
21
  /**
23
- * Styling variant to display, 'primary' or 'secondary' and can also
24
- * include `vertical`.
25
- * Defaults to `primary`.
22
+ * Styling variant to display, 'primary' (default) or 'secondary'.
26
23
  */
27
24
  this.variant = 'primary';
28
25
  /**
@@ -109,7 +106,8 @@ export class Tab extends LitElement {
109
106
  return reduceMotion ? [{ 'opacity': 1 }, { 'transform': 'none' }] : null;
110
107
  }
111
108
  const from = {};
112
- const isVertical = this.variant.includes('vertical');
109
+ // TODO(b/293506179): remove vertical logic
110
+ const isVertical = false;
113
111
  const fromRect = (this.tabs?.previousSelectedItem?.indicator.getBoundingClientRect() ??
114
112
  {});
115
113
  const fromPos = isVertical ? fromRect.top : fromRect.left;
@@ -131,9 +129,8 @@ export class Tab extends LitElement {
131
129
  return [from, { 'transform': 'none' }];
132
130
  }
133
131
  }
134
- _a = Tab;
135
132
  (() => {
136
- requestUpdateOnAriaChange(_a);
133
+ requestUpdateOnAriaChange(Tab);
137
134
  })();
138
135
  /** @nocollapse */
139
136
  Tab.shadowRootOptions = { mode: 'open', delegatesFocus: true };
@@ -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/md-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 TabVariant = 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: TabVariant = '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 part=\"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/md-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\n/**\n * Tab variant can be `primary` or `secondary`.\n */\nexport type TabVariant = 'primary'|'secondary';\n\n/**\n * Tab component.\n */\nexport class Tab extends LitElement {\n static {\n requestUpdateOnAriaChange(Tab);\n }\n\n /** @nocollapse */\n static override shadowRootOptions:\n ShadowRootInit = {mode: 'open', delegatesFocus: true};\n\n /**\n * Styling variant to display, 'primary' (default) or 'secondary'.\n */\n @property({reflect: true}) variant: TabVariant = '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 part=\"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 // TODO(b/293506179): remove vertical logic\n const isVertical = false;\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"]}
@@ -37,9 +37,7 @@ export declare class Tabs extends LitElement {
37
37
  slotAssignment?: SlotAssignmentMode;
38
38
  };
39
39
  /**
40
- * Styling variant to display, 'primary' or 'secondary' and can also
41
- * include `vertical`.
42
- * Defaults to `primary`.
40
+ * Styling variant to display, 'primary' (default) or 'secondary'.
43
41
  */
44
42
  variant: TabVariant;
45
43
  /**
@@ -55,7 +53,6 @@ export declare class Tabs extends LitElement {
55
53
  */
56
54
  selectOnFocus: boolean;
57
55
  private previousSelected;
58
- private orientation;
59
56
  private readonly scrollMargin;
60
57
  private readonly items;
61
58
  private itemsDirty;
@@ -6,6 +6,7 @@
6
6
  import { __decorate } from "tslib";
7
7
  import { html, isServer, LitElement } from 'lit';
8
8
  import { property, queryAssignedElements, state } from 'lit/decorators.js';
9
+ // TODO(b/293506179): remove vertical logic
9
10
  const NAVIGATION_KEYS = new Map([
10
11
  ['default', new Set(['Home', 'End'])],
11
12
  ['horizontal', new Set(['ArrowLeft', 'ArrowRight'])],
@@ -57,9 +58,7 @@ export class Tabs extends LitElement {
57
58
  constructor() {
58
59
  super();
59
60
  /**
60
- * Styling variant to display, 'primary' or 'secondary' and can also
61
- * include `vertical`.
62
- * Defaults to `primary`.
61
+ * Styling variant to display, 'primary' (default) or 'secondary'.
63
62
  */
64
63
  this.variant = 'primary';
65
64
  /**
@@ -75,7 +74,6 @@ export class Tabs extends LitElement {
75
74
  */
76
75
  this.selectOnFocus = false;
77
76
  this.previousSelected = -1;
78
- this.orientation = 'horizontal';
79
77
  this.scrollMargin = 48;
80
78
  // this tracks if items have changed, which triggers rendering so they can
81
79
  // be kept in sync
@@ -85,7 +83,7 @@ export class Tabs extends LitElement {
85
83
  this.handleKeydown = async (event) => {
86
84
  const { key } = event;
87
85
  const shouldHandleKey = NAVIGATION_KEYS.get('default').has(key) ||
88
- NAVIGATION_KEYS.get(this.orientation).has(key);
86
+ NAVIGATION_KEYS.get('horizontal').has(key);
89
87
  // await to after user may cancel event.
90
88
  if (!shouldHandleKey || (await this.wasEventPrevented(event, true)) ||
91
89
  this.disabled) {
@@ -196,10 +194,6 @@ export class Tabs extends LitElement {
196
194
  if (changed.has('selected')) {
197
195
  this.previousSelected = changed.get('selected') ?? -1;
198
196
  }
199
- if (changed.has('variant')) {
200
- this.orientation =
201
- this.variant.includes('vertical') ? 'vertical' : 'horizontal';
202
- }
203
197
  if (this.itemsDirty) {
204
198
  this.itemsDirty = false;
205
199
  this.previousSelected = -1;
@@ -268,7 +262,8 @@ export class Tabs extends LitElement {
268
262
  }
269
263
  // wait for items to render.
270
264
  await this.itemsUpdateComplete();
271
- const isVertical = this.orientation === 'vertical';
265
+ // TODO(b/293506179): remove vertical logic
266
+ const isVertical = false;
272
267
  const offset = isVertical ? item.offsetTop : item.offsetLeft;
273
268
  const extent = isVertical ? item.offsetHeight : item.offsetWidth;
274
269
  const scroll = isVertical ? this.scrollTop : this.scrollLeft;
@@ -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, TabVariant} 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: TabVariant = '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((el: HTMLElement) => el.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"]}
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, TabVariant} from './tab.js';\n\n// TODO(b/293506179): remove vertical logic\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' (default) or 'secondary'.\n */\n @property({reflect: true}) variant: TabVariant = '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 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((el: HTMLElement) => el.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('horizontal')!.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 (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 // TODO(b/293506179): remove vertical logic\n const isVertical = false;\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"]}
@@ -84,6 +84,8 @@ export class TextFieldHarness extends Harness {
84
84
  if (!init) {
85
85
  init = {
86
86
  inputType: 'insertText',
87
+ composed: true,
88
+ bubbles: true,
87
89
  isComposing: false,
88
90
  data: charactersToAppend,
89
91
  };
@@ -97,6 +99,8 @@ export class TextFieldHarness extends Harness {
97
99
  if (!init) {
98
100
  init = {
99
101
  inputType: 'deleteContentBackward',
102
+ composed: true,
103
+ bubbles: true,
100
104
  isComposing: false,
101
105
  data: deletedCharacters,
102
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["harness.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAI9C;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,OAAkB;IAAxD;;QACE,wEAAwE;QAChE,sBAAiB,GAAG,EAAE,CAAC;IA4HjC,CAAC;IA1HC;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,CAAC,CAAC;SAC9D;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,WAAW,CAAC,UAAmB,EAAE,QAAiB;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,CACjB,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEQ,KAAK,CAAC,KAAK;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAClE,CAAC;IAEkB,oBAAoB,CAAC,KAAkB;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,SAAS,CAAC,QAAQ,EAAE;YACtB,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC;QACzC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE;YAC7C,sEAAsE;YACtE,uDAAuD;YACvD,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;SACxB;QAED,wEAAwE;QACxE,wEAAwE;QACxE,gCAAgC;QAChC,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IAC1B,CAAC;IAES,aAAa,CACnB,OAA6C,EAAE,kBAA0B,EACzE,IAAqB;QACvB,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG;gBACL,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,kBAAkB;aACzB,CAAC;SACH;QAED,OAAO,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAES,gBAAgB,CACtB,OAA6C,EAAE,UAAmB,EAClE,QAAiB,EAAE,IAAqB;QAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG;gBACL,SAAS,EAAE,uBAAuB;gBAClC,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,iBAAiB;aACxB,CAAC;SACH;QAED,OAAO,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAES,sBAAsB,CAAC,OACmB;QAClD,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO,CAAC,KAAK,EAAE;YAC5C,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;QACvC,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEkB,KAAK,CAAC,qBAAqB;QAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAC9B,CAAC;IAC1B,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {Harness} from '../testing/harness.js';\n\nimport {TextField} from './internal/text-field.js';\n\n/**\n * Test harness for text field elements.\n */\nexport class TextFieldHarness extends Harness<TextField> {\n /** Used to track whether or not a change event should be dispatched. */\n private valueBeforeChange = '';\n\n /**\n * Simulates a user typing a value one character at a time. This will fire\n * multiple input events.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.inputValue('value'); // input events\n * await harness.blur(); // change event\n *\n * @param value The value to simulating typing.\n */\n async inputValue(value: string) {\n for (const char of value) {\n this.simulateKeypress(await this.getInteractiveElement(), char);\n this.simulateInput(await this.getInteractiveElement(), char);\n }\n }\n\n /**\n * Simulates a user deleting part of a value with the backspace key.\n * By default, the entire value is deleted. This will fire a single input\n * event.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.deleteValue(); // input event\n * await harness.blur(); // change event\n *\n * @param beginIndex The starting index of the value to delete.\n * @param endIndex The ending index of the value to delete.\n */\n async deleteValue(beginIndex?: number, endIndex?: number) {\n this.simulateKeypress(await this.getInteractiveElement(), 'Backspace');\n this.simulateDeletion(\n await this.getInteractiveElement(), beginIndex, endIndex);\n }\n\n override async reset() {\n this.element.reset();\n this.valueBeforeChange = this.element.value;\n await super.reset();\n }\n\n override async blur() {\n await super.blur();\n this.simulateChangeIfNeeded(await this.getInteractiveElement());\n }\n\n protected override simulatePointerFocus(input: HTMLElement) {\n const textField = this.element;\n if (textField.disabled) {\n return;\n }\n\n this.valueBeforeChange = textField.value;\n super.simulatePointerFocus(input);\n\n const prevFocus = input.focus;\n if (prevFocus === HTMLElement.prototype.focus) {\n // Swap to a no-op if nobody is spying on this method so that we don't\n // generate side-effects when we actually call focus().\n input.focus = () => {};\n }\n\n // Call focus() as a side-effect since delegatesFocus won't be triggered\n // with this simulation. Replace input.focus() with a no-op if needed to\n // avoid actually calling focus.\n textField.focus();\n input.focus = prevFocus;\n }\n\n protected simulateInput(\n element: HTMLInputElement|HTMLTextAreaElement, charactersToAppend: string,\n init?: InputEventInit) {\n element.value += charactersToAppend;\n if (!init) {\n init = {\n inputType: 'insertText',\n isComposing: false,\n data: charactersToAppend,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateDeletion(\n element: HTMLInputElement|HTMLTextAreaElement, beginIndex?: number,\n endIndex?: number, init?: InputEventInit) {\n const deletedCharacters = element.value.slice(beginIndex, endIndex);\n element.value = element.value.substring(0, beginIndex ?? 0) +\n element.value.substring(endIndex ?? element.value.length);\n if (!init) {\n init = {\n inputType: 'deleteContentBackward',\n isComposing: false,\n data: deletedCharacters,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateChangeIfNeeded(element: HTMLInputElement|\n HTMLTextAreaElement) {\n if (this.valueBeforeChange === element.value) {\n return;\n }\n\n this.valueBeforeChange = element.value;\n element.dispatchEvent(new Event('change'));\n }\n\n protected override async getInteractiveElement() {\n await this.element.updateComplete;\n return this.element.renderRoot.querySelector('.input') as HTMLInputElement |\n HTMLTextAreaElement;\n }\n}\n"]}
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["harness.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 {Harness} from '../testing/harness.js';\n\nimport {TextField} from './internal/text-field.js';\n\n/**\n * Test harness for text field elements.\n */\nexport class TextFieldHarness extends Harness<TextField> {\n /** Used to track whether or not a change event should be dispatched. */\n private valueBeforeChange = '';\n\n /**\n * Simulates a user typing a value one character at a time. This will fire\n * multiple input events.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.inputValue('value'); // input events\n * await harness.blur(); // change event\n *\n * @param value The value to simulating typing.\n */\n async inputValue(value: string) {\n for (const char of value) {\n this.simulateKeypress(await this.getInteractiveElement(), char);\n this.simulateInput(await this.getInteractiveElement(), char);\n }\n }\n\n /**\n * Simulates a user deleting part of a value with the backspace key.\n * By default, the entire value is deleted. This will fire a single input\n * event.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.deleteValue(); // input event\n * await harness.blur(); // change event\n *\n * @param beginIndex The starting index of the value to delete.\n * @param endIndex The ending index of the value to delete.\n */\n async deleteValue(beginIndex?: number, endIndex?: number) {\n this.simulateKeypress(await this.getInteractiveElement(), 'Backspace');\n this.simulateDeletion(\n await this.getInteractiveElement(), beginIndex, endIndex);\n }\n\n override async reset() {\n this.element.reset();\n this.valueBeforeChange = this.element.value;\n await super.reset();\n }\n\n override async blur() {\n await super.blur();\n this.simulateChangeIfNeeded(await this.getInteractiveElement());\n }\n\n protected override simulatePointerFocus(input: HTMLElement) {\n const textField = this.element;\n if (textField.disabled) {\n return;\n }\n\n this.valueBeforeChange = textField.value;\n super.simulatePointerFocus(input);\n\n const prevFocus = input.focus;\n if (prevFocus === HTMLElement.prototype.focus) {\n // Swap to a no-op if nobody is spying on this method so that we don't\n // generate side-effects when we actually call focus().\n input.focus = () => {};\n }\n\n // Call focus() as a side-effect since delegatesFocus won't be triggered\n // with this simulation. Replace input.focus() with a no-op if needed to\n // avoid actually calling focus.\n textField.focus();\n input.focus = prevFocus;\n }\n\n protected simulateInput(\n element: HTMLInputElement|HTMLTextAreaElement, charactersToAppend: string,\n init?: InputEventInit) {\n element.value += charactersToAppend;\n if (!init) {\n init = {\n inputType: 'insertText',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: charactersToAppend,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateDeletion(\n element: HTMLInputElement|HTMLTextAreaElement, beginIndex?: number,\n endIndex?: number, init?: InputEventInit) {\n const deletedCharacters = element.value.slice(beginIndex, endIndex);\n element.value = element.value.substring(0, beginIndex ?? 0) +\n element.value.substring(endIndex ?? element.value.length);\n if (!init) {\n init = {\n inputType: 'deleteContentBackward',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: deletedCharacters,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateChangeIfNeeded(element: HTMLInputElement|\n HTMLTextAreaElement) {\n if (this.valueBeforeChange === element.value) {\n return;\n }\n\n this.valueBeforeChange = element.value;\n element.dispatchEvent(new Event('change'));\n }\n\n protected override async getInteractiveElement() {\n await this.element.updateComplete;\n return this.element.renderRoot.querySelector('.input') as HTMLInputElement |\n HTMLTextAreaElement;\n }\n}\n"]}
@@ -3,7 +3,6 @@
3
3
  * Copyright 2021 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- var _a;
7
6
  import { __decorate } from "tslib";
8
7
  import { html, isServer, LitElement, nothing } from 'lit';
9
8
  import { property, query, queryAssignedElements, state } from 'lit/decorators.js';
@@ -554,7 +553,6 @@ export class TextField extends LitElement {
554
553
  handleInput(event) {
555
554
  this.dirty = true;
556
555
  this.value = event.target.value;
557
- this.redispatchEvent(event);
558
556
  }
559
557
  redispatchEvent(event) {
560
558
  redispatchEvent(this, event);
@@ -604,9 +602,8 @@ export class TextField extends LitElement {
604
602
  this.value = state;
605
603
  }
606
604
  }
607
- _a = TextField;
608
605
  (() => {
609
- requestUpdateOnAriaChange(_a);
606
+ requestUpdateOnAriaChange(TextField);
610
607
  })();
611
608
  /** @nocollapse */
612
609
  TextField.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };