@material/web 1.0.0 → 1.0.2-nightly.33c1afe.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/all.d.ts +2 -0
  2. package/all.js +2 -0
  3. package/all.js.map +1 -1
  4. package/button/elevated-button.js +5 -1
  5. package/button/elevated-button.js.map +1 -1
  6. package/button/internal/_elevation.scss +32 -32
  7. package/button/internal/_icon.scss +22 -23
  8. package/button/internal/_outlined-button.scss +21 -19
  9. package/button/internal/_shared.scss +84 -77
  10. package/button/internal/_touch-target.scss +4 -0
  11. package/button/internal/button.d.ts +7 -11
  12. package/button/internal/button.js +52 -38
  13. package/button/internal/button.js.map +1 -1
  14. package/button/internal/elevated-button.d.ts +1 -1
  15. package/button/internal/elevated-button.js +1 -1
  16. package/button/internal/elevated-button.js.map +1 -1
  17. package/button/internal/filled-button.d.ts +1 -1
  18. package/button/internal/filled-button.js +1 -1
  19. package/button/internal/filled-button.js.map +1 -1
  20. package/button/internal/filled-tonal-button.d.ts +1 -1
  21. package/button/internal/filled-tonal-button.js +1 -1
  22. package/button/internal/filled-tonal-button.js.map +1 -1
  23. package/button/internal/outlined-button.d.ts +1 -1
  24. package/button/internal/outlined-button.js +2 -2
  25. package/button/internal/outlined-button.js.map +1 -1
  26. package/button/internal/outlined-styles.css.js +1 -1
  27. package/button/internal/outlined-styles.css.js.map +1 -1
  28. package/button/internal/shared-elevation-styles.css.js +1 -1
  29. package/button/internal/shared-elevation-styles.css.js.map +1 -1
  30. package/button/internal/shared-styles.css.js +1 -1
  31. package/button/internal/shared-styles.css.js.map +1 -1
  32. package/checkbox/internal/_checkbox.scss +6 -0
  33. package/checkbox/internal/checkbox-styles.css.js +1 -1
  34. package/checkbox/internal/checkbox-styles.css.js.map +1 -1
  35. package/checkbox/internal/checkbox.d.ts +20 -87
  36. package/checkbox/internal/checkbox.js +35 -153
  37. package/checkbox/internal/checkbox.js.map +1 -1
  38. package/chips/filter-chip.js +5 -1
  39. package/chips/filter-chip.js.map +1 -1
  40. package/chips/harness.js.map +1 -1
  41. package/chips/input-chip.js +6 -1
  42. package/chips/input-chip.js.map +1 -1
  43. package/chips/internal/_shared.scss +1 -0
  44. package/chips/internal/assist-chip.js +8 -4
  45. package/chips/internal/assist-chip.js.map +1 -1
  46. package/chips/internal/chip-set.js +6 -4
  47. package/chips/internal/chip-set.js.map +1 -1
  48. package/chips/internal/chip.d.ts +3 -0
  49. package/chips/internal/chip.js +7 -5
  50. package/chips/internal/chip.js.map +1 -1
  51. package/chips/internal/filter-chip.d.ts +2 -0
  52. package/chips/internal/filter-chip.js +11 -5
  53. package/chips/internal/filter-chip.js.map +1 -1
  54. package/chips/internal/input-chip.d.ts +2 -0
  55. package/chips/internal/input-chip.js +10 -4
  56. package/chips/internal/input-chip.js.map +1 -1
  57. package/chips/internal/multi-action-chip.js.map +1 -1
  58. package/chips/internal/shared-styles.css.js +1 -1
  59. package/chips/internal/shared-styles.css.js.map +1 -1
  60. package/chips/internal/trailing-icons.d.ts +1 -1
  61. package/chips/internal/trailing-icons.js +6 -5
  62. package/chips/internal/trailing-icons.js.map +1 -1
  63. package/common.d.ts +2 -0
  64. package/common.js +2 -0
  65. package/common.js.map +1 -1
  66. package/dialog/harness.js +1 -2
  67. package/dialog/harness.js.map +1 -1
  68. package/dialog/internal/_dialog.scss +1 -1
  69. package/dialog/internal/animations.js +14 -12
  70. package/dialog/internal/animations.js.map +1 -1
  71. package/dialog/internal/dialog-styles.css.js +1 -1
  72. package/dialog/internal/dialog-styles.css.js.map +1 -1
  73. package/dialog/internal/dialog.d.ts +6 -6
  74. package/dialog/internal/dialog.js +24 -24
  75. package/dialog/internal/dialog.js.map +1 -1
  76. package/fab/harness.js.map +1 -1
  77. package/fab/internal/_fab.scss +4 -0
  78. package/fab/internal/_shared.scss +1 -0
  79. package/fab/internal/fab-styles.css.js +1 -1
  80. package/fab/internal/fab-styles.css.js.map +1 -1
  81. package/fab/internal/fab.js.map +1 -1
  82. package/fab/internal/shared-styles.css.js +1 -1
  83. package/fab/internal/shared-styles.css.js.map +1 -1
  84. package/fab/internal/shared.js +10 -11
  85. package/fab/internal/shared.js.map +1 -1
  86. package/field/harness.js.map +1 -1
  87. package/field/internal/_content.scss +185 -174
  88. package/field/internal/_filled-field.scss +147 -135
  89. package/field/internal/_label.scss +83 -72
  90. package/field/internal/_outlined-field.scss +276 -261
  91. package/field/internal/_supporting-text.scss +53 -42
  92. package/field/internal/field.js +26 -22
  93. package/field/internal/field.js.map +1 -1
  94. package/field/internal/filled-styles.css.js +1 -1
  95. package/field/internal/filled-styles.css.js.map +1 -1
  96. package/field/internal/outlined-styles.css.js +1 -1
  97. package/field/internal/outlined-styles.css.js.map +1 -1
  98. package/field/internal/shared-styles.css.js +1 -1
  99. package/field/internal/shared-styles.css.js.map +1 -1
  100. package/focus/internal/focus-ring.d.ts +2 -0
  101. package/focus/internal/focus-ring.js +3 -3
  102. package/focus/internal/focus-ring.js.map +1 -1
  103. package/icon/internal/_icon.scss +7 -4
  104. package/icon/internal/icon-styles.css.js +1 -1
  105. package/icon/internal/icon-styles.css.js.map +1 -1
  106. package/iconbutton/internal/icon-button.d.ts +9 -4
  107. package/iconbutton/internal/icon-button.js +35 -22
  108. package/iconbutton/internal/icon-button.js.map +1 -1
  109. package/internal/aria/aria.d.ts +4 -26
  110. package/internal/aria/aria.js +10 -28
  111. package/internal/aria/aria.js.map +1 -1
  112. package/internal/aria/delegate.js +2 -2
  113. package/internal/aria/delegate.js.map +1 -1
  114. package/internal/controller/attachable-controller.js +3 -5
  115. package/internal/controller/attachable-controller.js.map +1 -1
  116. package/internal/controller/form-submitter.d.ts +3 -5
  117. package/internal/controller/form-submitter.js +5 -7
  118. package/internal/controller/form-submitter.js.map +1 -1
  119. package/internal/controller/is-rtl.js +2 -2
  120. package/internal/controller/is-rtl.js.map +1 -1
  121. package/internal/controller/string-converter.js +1 -1
  122. package/internal/controller/string-converter.js.map +1 -1
  123. package/internal/motion/animation.js.map +1 -1
  124. package/labs/behaviors/constraint-validation.d.ts +133 -0
  125. package/labs/behaviors/constraint-validation.js +114 -0
  126. package/labs/behaviors/constraint-validation.js.map +1 -0
  127. package/labs/behaviors/element-internals.d.ts +45 -0
  128. package/labs/behaviors/element-internals.js +50 -0
  129. package/labs/behaviors/element-internals.js.map +1 -0
  130. package/labs/behaviors/focusable.d.ts +39 -0
  131. package/labs/behaviors/focusable.js +82 -0
  132. package/labs/behaviors/focusable.js.map +1 -0
  133. package/labs/behaviors/form-associated.d.ts +199 -0
  134. package/labs/behaviors/form-associated.js +155 -0
  135. package/labs/behaviors/form-associated.js.map +1 -0
  136. package/labs/behaviors/mixin.d.ts +54 -0
  137. package/labs/behaviors/mixin.js +7 -0
  138. package/labs/behaviors/mixin.js.map +1 -0
  139. package/labs/behaviors/on-report-validity.d.ts +70 -0
  140. package/labs/behaviors/on-report-validity.js +150 -0
  141. package/labs/behaviors/on-report-validity.js.map +1 -0
  142. package/labs/behaviors/validators/checkbox-validator.d.ts +31 -0
  143. package/labs/behaviors/validators/checkbox-validator.js +29 -0
  144. package/labs/behaviors/validators/checkbox-validator.js.map +1 -0
  145. package/labs/behaviors/validators/select-validator.d.ts +31 -0
  146. package/labs/behaviors/validators/select-validator.js +30 -0
  147. package/labs/behaviors/validators/select-validator.js.map +1 -0
  148. package/labs/behaviors/validators/validator.d.ts +92 -0
  149. package/labs/behaviors/validators/validator.js +83 -0
  150. package/labs/behaviors/validators/validator.js.map +1 -0
  151. package/labs/card/_elevated-card.scss +6 -0
  152. package/labs/card/_filled-card.scss +6 -0
  153. package/labs/card/_outlined-card.scss +6 -0
  154. package/labs/card/elevated-card.d.ts +18 -0
  155. package/labs/card/elevated-card.js +21 -0
  156. package/labs/card/elevated-card.js.map +1 -0
  157. package/labs/card/filled-card.d.ts +18 -0
  158. package/labs/card/filled-card.js +21 -0
  159. package/labs/card/filled-card.js.map +1 -0
  160. package/labs/card/internal/_elevated-card.scss +35 -0
  161. package/labs/card/internal/_filled-card.scss +35 -0
  162. package/labs/card/internal/_outlined-card.scss +39 -0
  163. package/labs/card/internal/_shared.scss +40 -0
  164. package/labs/card/internal/card.d.ts +13 -0
  165. package/labs/card/internal/card.js +20 -0
  166. package/labs/card/internal/card.js.map +1 -0
  167. package/labs/card/internal/elevated-styles.css.js +9 -0
  168. package/labs/card/internal/elevated-styles.css.js.map +1 -0
  169. package/labs/card/internal/elevated-styles.scss +10 -0
  170. package/labs/card/internal/filled-styles.css.js +9 -0
  171. package/labs/card/internal/filled-styles.css.js.map +1 -0
  172. package/labs/card/internal/filled-styles.scss +10 -0
  173. package/labs/card/internal/outlined-styles.css.js +9 -0
  174. package/labs/card/internal/outlined-styles.css.js.map +1 -0
  175. package/labs/card/internal/outlined-styles.scss +10 -0
  176. package/labs/card/internal/shared-styles.css.js +9 -0
  177. package/labs/card/internal/shared-styles.css.js.map +1 -0
  178. package/labs/card/internal/shared-styles.scss +10 -0
  179. package/labs/card/outlined-card.d.ts +18 -0
  180. package/labs/card/outlined-card.js +21 -0
  181. package/labs/card/outlined-card.js.map +1 -0
  182. package/labs/item/internal/_item.scss +1 -1
  183. package/labs/item/internal/item-styles.css.js +1 -1
  184. package/labs/item/internal/item-styles.css.js.map +1 -1
  185. package/labs/item/internal/item.js +8 -8
  186. package/labs/item/internal/item.js.map +1 -1
  187. package/labs/navigationbar/internal/constants.js.map +1 -1
  188. package/labs/navigationbar/internal/navigation-bar.d.ts +3 -0
  189. package/labs/navigationbar/internal/navigation-bar.js +18 -11
  190. package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
  191. package/labs/navigationdrawer/internal/navigation-drawer-modal.d.ts +3 -0
  192. package/labs/navigationdrawer/internal/navigation-drawer-modal.js +10 -3
  193. package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
  194. package/labs/navigationdrawer/internal/navigation-drawer.d.ts +3 -0
  195. package/labs/navigationdrawer/internal/navigation-drawer.js +8 -1
  196. package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
  197. package/labs/navigationtab/harness.js.map +1 -1
  198. package/labs/navigationtab/internal/navigation-tab.d.ts +6 -0
  199. package/labs/navigationtab/internal/navigation-tab.js +43 -27
  200. package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
  201. package/labs/navigationtab/internal/state.js.map +1 -1
  202. package/labs/segmentedbutton/internal/_shared.scss +1 -0
  203. package/labs/segmentedbutton/internal/segmented-button.d.ts +3 -0
  204. package/labs/segmentedbutton/internal/segmented-button.js +26 -12
  205. package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
  206. package/labs/segmentedbutton/internal/shared-styles.css.js +1 -1
  207. package/labs/segmentedbutton/internal/shared-styles.css.js.map +1 -1
  208. package/labs/segmentedbuttonset/internal/segmented-button-set.d.ts +5 -0
  209. package/labs/segmentedbuttonset/internal/segmented-button-set.js +14 -9
  210. package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
  211. package/list/harness.d.ts +3 -2
  212. package/list/harness.js.map +1 -1
  213. package/list/internal/list-controller.d.ts +1 -1
  214. package/list/internal/list-controller.js +7 -3
  215. package/list/internal/list-controller.js.map +1 -1
  216. package/list/internal/list-navigation-helpers.js.map +1 -1
  217. package/list/internal/list.d.ts +2 -2
  218. package/list/internal/list.js +8 -6
  219. package/list/internal/list.js.map +1 -1
  220. package/list/internal/listitem/_list-item.scss +19 -0
  221. package/list/internal/listitem/harness.d.ts +3 -3
  222. package/list/internal/listitem/harness.js.map +1 -1
  223. package/list/internal/listitem/list-item-styles.css.js +1 -1
  224. package/list/internal/listitem/list-item-styles.css.js.map +1 -1
  225. package/list/internal/listitem/list-item.d.ts +3 -2
  226. package/list/internal/listitem/list-item.js +20 -21
  227. package/list/internal/listitem/list-item.js.map +1 -1
  228. package/list/list-item.d.ts +4 -12
  229. package/list/list-item.js +5 -14
  230. package/list/list-item.js.map +1 -1
  231. package/menu/harness.js.map +1 -1
  232. package/menu/internal/_menu.scss +20 -1
  233. package/menu/internal/controllers/menuItemController.d.ts +7 -0
  234. package/menu/internal/controllers/menuItemController.js +17 -4
  235. package/menu/internal/controllers/menuItemController.js.map +1 -1
  236. package/menu/internal/controllers/shared.d.ts +9 -1
  237. package/menu/internal/controllers/shared.js +4 -4
  238. package/menu/internal/controllers/shared.js.map +1 -1
  239. package/menu/internal/controllers/surfacePositionController.d.ts +16 -2
  240. package/menu/internal/controllers/surfacePositionController.js +134 -56
  241. package/menu/internal/controllers/surfacePositionController.js.map +1 -1
  242. package/menu/internal/controllers/typeaheadController.js +19 -14
  243. package/menu/internal/controllers/typeaheadController.js.map +1 -1
  244. package/menu/internal/menu-styles.css.js +1 -1
  245. package/menu/internal/menu-styles.css.js.map +1 -1
  246. package/menu/internal/menu.d.ts +55 -17
  247. package/menu/internal/menu.js +175 -88
  248. package/menu/internal/menu.js.map +1 -1
  249. package/menu/internal/menuitem/_menu-item.scss +24 -0
  250. package/menu/internal/menuitem/harness.d.ts +3 -1
  251. package/menu/internal/menuitem/harness.js.map +1 -1
  252. package/menu/internal/menuitem/menu-item-styles.css.js +1 -1
  253. package/menu/internal/menuitem/menu-item-styles.css.js.map +1 -1
  254. package/menu/internal/menuitem/menu-item.d.ts +3 -2
  255. package/menu/internal/menuitem/menu-item.js +20 -20
  256. package/menu/internal/menuitem/menu-item.js.map +1 -1
  257. package/menu/internal/submenu/sub-menu.d.ts +9 -8
  258. package/menu/internal/submenu/sub-menu.js +35 -22
  259. package/menu/internal/submenu/sub-menu.js.map +1 -1
  260. package/menu/internal/types.js.map +1 -1
  261. package/menu/menu-item.js +1 -2
  262. package/menu/menu-item.js.map +1 -1
  263. package/menu/menu.js +1 -2
  264. package/menu/menu.js.map +1 -1
  265. package/package.json +1 -1
  266. package/progress/internal/_circular-progress.scss +2 -2
  267. package/progress/internal/_linear-progress.scss +1 -1
  268. package/progress/internal/circular-progress-styles.css.js +1 -1
  269. package/progress/internal/circular-progress-styles.css.js.map +1 -1
  270. package/progress/internal/circular-progress.js +11 -10
  271. package/progress/internal/circular-progress.js.map +1 -1
  272. package/progress/internal/linear-progress-styles.css.js +1 -1
  273. package/progress/internal/linear-progress-styles.css.js.map +1 -1
  274. package/progress/internal/linear-progress.d.ts +1 -1
  275. package/progress/internal/linear-progress.js +3 -3
  276. package/progress/internal/linear-progress.js.map +1 -1
  277. package/progress/internal/progress.js +4 -2
  278. package/progress/internal/progress.js.map +1 -1
  279. package/radio/internal/_radio.scss +144 -123
  280. package/radio/internal/radio-styles.css.js +1 -1
  281. package/radio/internal/radio-styles.css.js.map +1 -1
  282. package/radio/internal/radio.d.ts +12 -23
  283. package/radio/internal/radio.js +31 -50
  284. package/radio/internal/radio.js.map +1 -1
  285. package/radio/internal/single-selection-controller.js +1 -1
  286. package/radio/internal/single-selection-controller.js.map +1 -1
  287. package/radio/radio.js +1 -2
  288. package/radio/radio.js.map +1 -1
  289. package/ripple/internal/ripple.js +21 -18
  290. package/ripple/internal/ripple.js.map +1 -1
  291. package/select/filled-select.js +1 -2
  292. package/select/filled-select.js.map +1 -1
  293. package/select/harness.js +1 -1
  294. package/select/harness.js.map +1 -1
  295. package/select/internal/_shared.scss +4 -0
  296. package/select/internal/select.d.ts +26 -99
  297. package/select/internal/select.js +78 -187
  298. package/select/internal/select.js.map +1 -1
  299. package/select/internal/selectoption/select-option.d.ts +8 -6
  300. package/select/internal/selectoption/select-option.js +25 -23
  301. package/select/internal/selectoption/select-option.js.map +1 -1
  302. package/select/internal/selectoption/selectOptionController.js +1 -1
  303. package/select/internal/selectoption/selectOptionController.js.map +1 -1
  304. package/select/internal/shared-styles.css.js +1 -1
  305. package/select/internal/shared-styles.css.js.map +1 -1
  306. package/select/outlined-select.js +1 -2
  307. package/select/outlined-select.js.map +1 -1
  308. package/select/select-option.js +1 -2
  309. package/select/select-option.js.map +1 -1
  310. package/slider/harness.js +5 -5
  311. package/slider/harness.js.map +1 -1
  312. package/slider/internal/_slider.scss +68 -30
  313. package/slider/internal/slider-styles.css.js +1 -1
  314. package/slider/internal/slider-styles.css.js.map +1 -1
  315. package/slider/internal/slider.d.ts +16 -25
  316. package/slider/internal/slider.js +111 -115
  317. package/slider/internal/slider.js.map +1 -1
  318. package/switch/internal/_handle.scss +159 -141
  319. package/switch/internal/_icon.scss +95 -72
  320. package/switch/internal/_switch.scss +90 -95
  321. package/switch/internal/_track.scss +110 -77
  322. package/switch/internal/switch-styles.css.js +1 -1
  323. package/switch/internal/switch-styles.css.js.map +1 -1
  324. package/switch/internal/switch.d.ts +13 -89
  325. package/switch/internal/switch.js +32 -159
  326. package/switch/internal/switch.js.map +1 -1
  327. package/switch/switch.js +1 -2
  328. package/switch/switch.js.map +1 -1
  329. package/tabs/harness.js +3 -3
  330. package/tabs/harness.js.map +1 -1
  331. package/tabs/internal/_tab.scss +27 -35
  332. package/tabs/internal/primary-tab.d.ts +0 -2
  333. package/tabs/internal/tab-styles.css.js +1 -1
  334. package/tabs/internal/tab-styles.css.js.map +1 -1
  335. package/tabs/internal/tab.d.ts +10 -5
  336. package/tabs/internal/tab.js +43 -22
  337. package/tabs/internal/tab.js.map +1 -1
  338. package/tabs/internal/tabs.d.ts +7 -4
  339. package/tabs/internal/tabs.js +23 -22
  340. package/tabs/internal/tabs.js.map +1 -1
  341. package/textfield/filled-text-field.js +1 -2
  342. package/textfield/filled-text-field.js.map +1 -1
  343. package/textfield/harness.js +3 -2
  344. package/textfield/harness.js.map +1 -1
  345. package/textfield/internal/text-field.d.ts +33 -18
  346. package/textfield/internal/text-field.js +96 -58
  347. package/textfield/internal/text-field.js.map +1 -1
  348. package/textfield/outlined-text-field.js +1 -2
  349. package/textfield/outlined-text-field.js.map +1 -1
  350. package/tokens/_index.scss +3 -0
  351. package/tokens/_md-comp-elevated-card.scss +63 -0
  352. package/tokens/_md-comp-filled-card.scss +63 -0
  353. package/tokens/_md-comp-icon.scss +2 -0
  354. package/tokens/_md-comp-outlined-card.scss +69 -0
  355. package/tokens/_md-comp-test-table.scss +1 -0
  356. package/internal/controller/element-internals.d.ts +0 -35
  357. package/internal/controller/element-internals.js +0 -24
  358. package/internal/controller/element-internals.js.map +0 -1
  359. package/list/internal/listitem/forced-colors-styles.css.js +0 -9
  360. package/list/internal/listitem/forced-colors-styles.css.js.map +0 -1
  361. package/list/internal/listitem/forced-colors-styles.scss +0 -19
  362. package/menu/internal/forced-colors-styles.css.js +0 -9
  363. package/menu/internal/forced-colors-styles.css.js.map +0 -1
  364. package/menu/internal/forced-colors-styles.scss +0 -12
  365. package/menu/internal/menuitem/forced-colors-styles.css.js +0 -9
  366. package/menu/internal/menuitem/forced-colors-styles.css.js.map +0 -1
  367. package/menu/internal/menuitem/forced-colors-styles.scss +0 -26
  368. package/radio/internal/forced-colors-styles.css.js +0 -9
  369. package/radio/internal/forced-colors-styles.css.js.map +0 -1
  370. package/radio/internal/forced-colors-styles.scss +0 -29
  371. package/select/internal/filled-forced-colors-styles.css.d.ts +0 -1
  372. package/select/internal/filled-forced-colors-styles.css.js +0 -9
  373. package/select/internal/filled-forced-colors-styles.css.js.map +0 -1
  374. package/select/internal/filled-forced-colors-styles.scss +0 -29
  375. package/select/internal/outlined-forced-colors-styles.css.d.ts +0 -1
  376. package/select/internal/outlined-forced-colors-styles.css.js +0 -9
  377. package/select/internal/outlined-forced-colors-styles.css.js.map +0 -1
  378. package/select/internal/outlined-forced-colors-styles.scss +0 -29
  379. package/switch/internal/forced-colors-styles.css.d.ts +0 -1
  380. package/switch/internal/forced-colors-styles.css.js +0 -9
  381. package/switch/internal/forced-colors-styles.css.js.map +0 -1
  382. package/switch/internal/forced-colors-styles.scss +0 -42
  383. package/textfield/internal/filled-forced-colors-styles.css.d.ts +0 -1
  384. package/textfield/internal/filled-forced-colors-styles.css.js +0 -9
  385. package/textfield/internal/filled-forced-colors-styles.css.js.map +0 -1
  386. package/textfield/internal/filled-forced-colors-styles.scss +0 -29
  387. package/textfield/internal/outlined-forced-colors-styles.css.d.ts +0 -1
  388. package/textfield/internal/outlined-forced-colors-styles.css.js +0 -9
  389. package/textfield/internal/outlined-forced-colors-styles.css.js.map +0 -1
  390. package/textfield/internal/outlined-forced-colors-styles.scss +0 -29
  391. /package/{list/internal/listitem/forced-colors-styles.css.d.ts → labs/card/internal/elevated-styles.css.d.ts} +0 -0
  392. /package/{menu/internal/forced-colors-styles.css.d.ts → labs/card/internal/filled-styles.css.d.ts} +0 -0
  393. /package/{menu/internal/menuitem/forced-colors-styles.css.d.ts → labs/card/internal/outlined-styles.css.d.ts} +0 -0
  394. /package/{radio/internal/forced-colors-styles.css.d.ts → labs/card/internal/shared-styles.css.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["delegate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAC,eAAe,EAAE,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAA4B;IACpE,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE;QAC1C,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAChC,SAAS,EAAE,uBAAuB,CAAC,YAAY,CAAC;YAChD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;QAC5B,MAAM,UAAU,GAAG;YACjB,aAAa;gBACX,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC;QAEF,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ReactiveElement} from 'lit';\n\nimport {ARIA_PROPERTIES, ariaPropertyToAttribute} from './aria.js';\n\n/**\n * Sets up a `ReactiveElement` constructor to enable updates when delegating\n * aria attributes. Elements may bind `this.aria*` properties to `aria-*`\n * attributes in their render functions.\n *\n * This function will:\n * - Call `requestUpdate()` when an aria attribute changes.\n * - Add `role=\"presentation\"` to the host.\n *\n * NOTE: The following features are not currently supported:\n * - Delegating IDREF attributes (ex: `aria-labelledby`, `aria-controls`)\n * - Delegating the `role` attribute\n *\n * @example\n * class XButton extends LitElement {\n * static {\n * requestUpdateOnAriaChange(XButton);\n * }\n *\n * protected override render() {\n * return html`\n * <button aria-label=${this.ariaLabel || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * }\n * }\n *\n * @param ctor The `ReactiveElement` constructor to patch.\n */\nexport function requestUpdateOnAriaChange(ctor: typeof ReactiveElement) {\n for (const ariaProperty of ARIA_PROPERTIES) {\n ctor.createProperty(ariaProperty, {\n attribute: ariaPropertyToAttribute(ariaProperty),\n reflect: true,\n });\n }\n\n ctor.addInitializer(element => {\n const controller = {\n hostConnected() {\n element.setAttribute('role', 'presentation');\n }\n };\n\n element.addController(controller);\n });\n}\n"]}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["delegate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAC,eAAe,EAAE,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAA4B;IACpE,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE;QAC1C,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAChC,SAAS,EAAE,uBAAuB,CAAC,YAAY,CAAC;YAChD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG;YACjB,aAAa;gBACX,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC;QAEF,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ReactiveElement} from 'lit';\n\nimport {ARIA_PROPERTIES, ariaPropertyToAttribute} from './aria.js';\n\n/**\n * Sets up a `ReactiveElement` constructor to enable updates when delegating\n * aria attributes. Elements may bind `this.aria*` properties to `aria-*`\n * attributes in their render functions.\n *\n * This function will:\n * - Call `requestUpdate()` when an aria attribute changes.\n * - Add `role=\"presentation\"` to the host.\n *\n * NOTE: The following features are not currently supported:\n * - Delegating IDREF attributes (ex: `aria-labelledby`, `aria-controls`)\n * - Delegating the `role` attribute\n *\n * @example\n * class XButton extends LitElement {\n * static {\n * requestUpdateOnAriaChange(XButton);\n * }\n *\n * protected override render() {\n * return html`\n * <button aria-label=${this.ariaLabel || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * }\n * }\n *\n * @param ctor The `ReactiveElement` constructor to patch.\n */\nexport function requestUpdateOnAriaChange(ctor: typeof ReactiveElement) {\n for (const ariaProperty of ARIA_PROPERTIES) {\n ctor.createProperty(ariaProperty, {\n attribute: ariaPropertyToAttribute(ariaProperty),\n reflect: true,\n });\n }\n\n ctor.addInitializer((element) => {\n const controller = {\n hostConnected() {\n element.setAttribute('role', 'presentation');\n },\n };\n\n element.addController(controller);\n });\n}\n"]}
@@ -16,12 +16,11 @@ if (!isServer) {
16
16
  * `Attachable` elements. If the `for` attribute changes, the controller will
17
17
  * re-attach to the new referenced element.
18
18
  */
19
- FOR_ATTRIBUTE_OBSERVER = new MutationObserver(records => {
19
+ FOR_ATTRIBUTE_OBSERVER = new MutationObserver((records) => {
20
20
  for (const record of records) {
21
21
  // When a control's `for` attribute changes, inform its
22
22
  // `AttachableController` to update to a new control.
23
- record.target[ATTACHABLE_CONTROLLER]
24
- ?.hostConnected();
23
+ record.target[ATTACHABLE_CONTROLLER]?.hostConnected();
25
24
  }
26
25
  });
27
26
  }
@@ -63,8 +62,7 @@ export class AttachableController {
63
62
  if (!this.htmlFor || !this.host.isConnected) {
64
63
  return null;
65
64
  }
66
- return this.host.getRootNode()
67
- .querySelector(`#${this.htmlFor}`);
65
+ return this.host.getRootNode().querySelector(`#${this.htmlFor}`);
68
66
  }
69
67
  return this.currentControl || this.host.parentElement;
70
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attachable-controller.js","sourceRoot":"","sources":["attachable-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, ReactiveController, ReactiveControllerHost} from 'lit';\n\n/**\n * An element that can be attached to an associated controlling element.\n */\nexport interface Attachable {\n /**\n * Reflects the value of the `for` attribute, which is the ID of the element's\n * associated control.\n *\n * Use this when the elements's associated control is not its parent.\n *\n * To manually control an element, set its `for` attribute to `\"\"`.\n *\n * @example\n * ```html\n * <div class=\"container\">\n * <md-attachable for=\"interactive\"></md-attachable>\n * <button id=\"interactive\">Action</button>\n * </div>\n * ```\n *\n * @example\n * ```html\n * <button class=\"manually-controlled\">\n * <md-attachable for=\"\"></md-attachable>\n * </button>\n * ```\n */\n htmlFor: string|null;\n\n /**\n * Gets or sets the element that controls the visibility of the attachable\n * element. It is one of:\n *\n * - The control referenced by the `for` attribute.\n * - The control provided to `element.attach(control)`\n * - The element's parent.\n * - `null` if the element is not controlled.\n */\n control: HTMLElement|null;\n\n /**\n * Attaches the element to an interactive control.\n *\n * @param control The element that controls the attachable element.\n */\n attach(control: HTMLElement): void;\n\n /**\n * Detaches the element from its current control.\n */\n detach(): void;\n}\n\n/**\n * A key to retrieve an `Attachable` element's `AttachableController` from a\n * global `MutationObserver`.\n */\nconst ATTACHABLE_CONTROLLER = Symbol('attachableController');\n\n/**\n * The host of an `AttachableController`. The controller will add itself to\n * the host so it can be retrieved in a global `MutationObserver`.\n */\ninterface AttachableControllerHost extends ReactiveControllerHost, HTMLElement {\n [ATTACHABLE_CONTROLLER]?: AttachableController;\n}\n\nlet FOR_ATTRIBUTE_OBSERVER: MutationObserver|undefined;\n\nif (!isServer) {\n /**\n * A global `MutationObserver` that reacts to `for` attribute changes on\n * `Attachable` elements. If the `for` attribute changes, the controller will\n * re-attach to the new referenced element.\n */\n FOR_ATTRIBUTE_OBSERVER = new MutationObserver(records => {\n for (const record of records) {\n // When a control's `for` attribute changes, inform its\n // `AttachableController` to update to a new control.\n (record.target as AttachableControllerHost)[ATTACHABLE_CONTROLLER]\n ?.hostConnected();\n }\n });\n}\n\n/**\n * A controller that provides an implementation for `Attachable` elements.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement implements Attachable {\n * get control() { return this.attachableController.control; }\n *\n * private readonly attachableController = new AttachableController(\n * this,\n * (previousControl, newControl) => {\n * previousControl?.removeEventListener('click', this.handleClick);\n * newControl?.addEventListener('click', this.handleClick);\n * }\n * );\n *\n * // Implement remaining `Attachable` properties/methods that call the\n * // controller's properties/methods.\n * }\n * ```\n */\nexport class AttachableController implements ReactiveController, Attachable {\n get htmlFor() {\n return this.host.getAttribute('for');\n }\n\n set htmlFor(htmlFor: string|null) {\n if (htmlFor === null) {\n this.host.removeAttribute('for');\n } else {\n this.host.setAttribute('for', htmlFor);\n }\n }\n\n get control() {\n if (this.host.hasAttribute('for')) {\n if (!this.htmlFor || !this.host.isConnected) {\n return null;\n }\n\n return (this.host.getRootNode() as Document | ShadowRoot)\n .querySelector<HTMLElement>(`#${this.htmlFor}`);\n }\n\n return this.currentControl || this.host.parentElement;\n }\n set control(control: HTMLElement|null) {\n if (control) {\n this.attach(control);\n } else {\n this.detach();\n }\n }\n\n private currentControl: HTMLElement|null = null;\n\n /**\n * Creates a new controller for an `Attachable` element.\n *\n * @param host The `Attachable` element.\n * @param onControlChange A callback with two parameters for the previous and\n * next control. An `Attachable` element may perform setup or teardown\n * logic whenever the control changes.\n */\n constructor(\n private readonly host: AttachableControllerHost,\n private readonly onControlChange:\n (prev: HTMLElement|null, next: HTMLElement|null) => void) {\n host.addController(this);\n host[ATTACHABLE_CONTROLLER] = this;\n FOR_ATTRIBUTE_OBSERVER?.observe(host, {attributeFilter: ['for']});\n }\n\n attach(control: HTMLElement) {\n if (control === this.currentControl) {\n return;\n }\n\n this.setCurrentControl(control);\n // When imperatively attaching, remove the `for` attribute so\n // that the attached control is used instead of a referenced one.\n this.host.removeAttribute('for');\n }\n\n detach() {\n this.setCurrentControl(null);\n // When imperatively detaching, add an empty `for=\"\"` attribute. This will\n // ensure the control is `null` rather than the `parentElement`.\n this.host.setAttribute('for', '');\n }\n\n /** @private */\n hostConnected() {\n this.setCurrentControl(this.control);\n }\n\n /** @private */\n hostDisconnected() {\n this.setCurrentControl(null);\n }\n\n private setCurrentControl(control: HTMLElement|null) {\n this.onControlChange(this.currentControl, control);\n this.currentControl = control;\n }\n}\n"]}
1
+ {"version":3,"file":"attachable-controller.js","sourceRoot":"","sources":["attachable-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, ReactiveController, ReactiveControllerHost} from 'lit';\n\n/**\n * An element that can be attached to an associated controlling element.\n */\nexport interface Attachable {\n /**\n * Reflects the value of the `for` attribute, which is the ID of the element's\n * associated control.\n *\n * Use this when the elements's associated control is not its parent.\n *\n * To manually control an element, set its `for` attribute to `\"\"`.\n *\n * @example\n * ```html\n * <div class=\"container\">\n * <md-attachable for=\"interactive\"></md-attachable>\n * <button id=\"interactive\">Action</button>\n * </div>\n * ```\n *\n * @example\n * ```html\n * <button class=\"manually-controlled\">\n * <md-attachable for=\"\"></md-attachable>\n * </button>\n * ```\n */\n htmlFor: string | null;\n\n /**\n * Gets or sets the element that controls the visibility of the attachable\n * element. It is one of:\n *\n * - The control referenced by the `for` attribute.\n * - The control provided to `element.attach(control)`\n * - The element's parent.\n * - `null` if the element is not controlled.\n */\n control: HTMLElement | null;\n\n /**\n * Attaches the element to an interactive control.\n *\n * @param control The element that controls the attachable element.\n */\n attach(control: HTMLElement): void;\n\n /**\n * Detaches the element from its current control.\n */\n detach(): void;\n}\n\n/**\n * A key to retrieve an `Attachable` element's `AttachableController` from a\n * global `MutationObserver`.\n */\nconst ATTACHABLE_CONTROLLER = Symbol('attachableController');\n\n/**\n * The host of an `AttachableController`. The controller will add itself to\n * the host so it can be retrieved in a global `MutationObserver`.\n */\ninterface AttachableControllerHost extends ReactiveControllerHost, HTMLElement {\n [ATTACHABLE_CONTROLLER]?: AttachableController;\n}\n\nlet FOR_ATTRIBUTE_OBSERVER: MutationObserver | undefined;\n\nif (!isServer) {\n /**\n * A global `MutationObserver` that reacts to `for` attribute changes on\n * `Attachable` elements. If the `for` attribute changes, the controller will\n * re-attach to the new referenced element.\n */\n FOR_ATTRIBUTE_OBSERVER = new MutationObserver((records) => {\n for (const record of records) {\n // When a control's `for` attribute changes, inform its\n // `AttachableController` to update to a new control.\n (record.target as AttachableControllerHost)[\n ATTACHABLE_CONTROLLER\n ]?.hostConnected();\n }\n });\n}\n\n/**\n * A controller that provides an implementation for `Attachable` elements.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement implements Attachable {\n * get control() { return this.attachableController.control; }\n *\n * private readonly attachableController = new AttachableController(\n * this,\n * (previousControl, newControl) => {\n * previousControl?.removeEventListener('click', this.handleClick);\n * newControl?.addEventListener('click', this.handleClick);\n * }\n * );\n *\n * // Implement remaining `Attachable` properties/methods that call the\n * // controller's properties/methods.\n * }\n * ```\n */\nexport class AttachableController implements ReactiveController, Attachable {\n get htmlFor() {\n return this.host.getAttribute('for');\n }\n\n set htmlFor(htmlFor: string | null) {\n if (htmlFor === null) {\n this.host.removeAttribute('for');\n } else {\n this.host.setAttribute('for', htmlFor);\n }\n }\n\n get control() {\n if (this.host.hasAttribute('for')) {\n if (!this.htmlFor || !this.host.isConnected) {\n return null;\n }\n\n return (\n this.host.getRootNode() as Document | ShadowRoot\n ).querySelector<HTMLElement>(`#${this.htmlFor}`);\n }\n\n return this.currentControl || this.host.parentElement;\n }\n set control(control: HTMLElement | null) {\n if (control) {\n this.attach(control);\n } else {\n this.detach();\n }\n }\n\n private currentControl: HTMLElement | null = null;\n\n /**\n * Creates a new controller for an `Attachable` element.\n *\n * @param host The `Attachable` element.\n * @param onControlChange A callback with two parameters for the previous and\n * next control. An `Attachable` element may perform setup or teardown\n * logic whenever the control changes.\n */\n constructor(\n private readonly host: AttachableControllerHost,\n private readonly onControlChange: (\n prev: HTMLElement | null,\n next: HTMLElement | null,\n ) => void,\n ) {\n host.addController(this);\n host[ATTACHABLE_CONTROLLER] = this;\n FOR_ATTRIBUTE_OBSERVER?.observe(host, {attributeFilter: ['for']});\n }\n\n attach(control: HTMLElement) {\n if (control === this.currentControl) {\n return;\n }\n\n this.setCurrentControl(control);\n // When imperatively attaching, remove the `for` attribute so\n // that the attached control is used instead of a referenced one.\n this.host.removeAttribute('for');\n }\n\n detach() {\n this.setCurrentControl(null);\n // When imperatively detaching, add an empty `for=\"\"` attribute. This will\n // ensure the control is `null` rather than the `parentElement`.\n this.host.setAttribute('for', '');\n }\n\n /** @private */\n hostConnected() {\n this.setCurrentControl(this.control);\n }\n\n /** @private */\n hostDisconnected() {\n this.setCurrentControl(null);\n }\n\n private setCurrentControl(control: HTMLElement | null) {\n this.onControlChange(this.currentControl, control);\n this.currentControl = control;\n }\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ReactiveElement } from 'lit';
7
- import { WithInternals } from './element-internals.js';
7
+ import { WithElementInternals } from '../../labs/behaviors/element-internals.js';
8
8
  /**
9
9
  * A string indicating the form submission behavior of the element.
10
10
  *
@@ -19,7 +19,7 @@ export type FormSubmitterType = 'button' | 'submit' | 'reset';
19
19
  * An element that can submit or reset a `<form>`, similar to
20
20
  * `<button type="submit">`.
21
21
  */
22
- export interface FormSubmitter extends ReactiveElement, WithInternals {
22
+ export interface FormSubmitter extends ReactiveElement, WithElementInternals {
23
23
  /**
24
24
  * A string indicating the form submission behavior of the element.
25
25
  *
@@ -53,7 +53,7 @@ type FormSubmitterConstructor = (new () => FormSubmitter) | (abstract new () =>
53
53
  *
54
54
  * @example
55
55
  * ```ts
56
- * class MyElement extends LitElement {
56
+ * class MyElement extends mixinElementInternals(LitElement) {
57
57
  * static {
58
58
  * setupFormSubmitter(MyElement);
59
59
  * }
@@ -61,8 +61,6 @@ type FormSubmitterConstructor = (new () => FormSubmitter) | (abstract new () =>
61
61
  * static formAssociated = true;
62
62
  *
63
63
  * type: FormSubmitterType = 'submit';
64
- *
65
- * [internals] = this.attachInternals();
66
64
  * }
67
65
  * ```
68
66
  *
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { isServer } from 'lit';
7
- import { internals } from './element-internals.js';
7
+ import { internals, } from '../../labs/behaviors/element-internals.js';
8
8
  /**
9
9
  * Sets up an element's constructor to enable form submission. The element
10
10
  * instance should be form associated and have a `type` property.
@@ -14,7 +14,7 @@ import { internals } from './element-internals.js';
14
14
  *
15
15
  * @example
16
16
  * ```ts
17
- * class MyElement extends LitElement {
17
+ * class MyElement extends mixinElementInternals(LitElement) {
18
18
  * static {
19
19
  * setupFormSubmitter(MyElement);
20
20
  * }
@@ -22,8 +22,6 @@ import { internals } from './element-internals.js';
22
22
  * static formAssociated = true;
23
23
  *
24
24
  * type: FormSubmitterType = 'submit';
25
- *
26
- * [internals] = this.attachInternals();
27
25
  * }
28
26
  * ```
29
27
  *
@@ -33,7 +31,7 @@ export function setupFormSubmitter(ctor) {
33
31
  if (isServer) {
34
32
  return;
35
33
  }
36
- ctor.addInitializer(instance => {
34
+ ctor.addInitializer((instance) => {
37
35
  const submitter = instance;
38
36
  submitter.addEventListener('click', async (event) => {
39
37
  const { type, [internals]: elementInternals } = submitter;
@@ -42,7 +40,7 @@ export function setupFormSubmitter(ctor) {
42
40
  return;
43
41
  }
44
42
  // Wait a microtask for event bubbling to complete.
45
- await new Promise(resolve => {
43
+ await new Promise((resolve) => {
46
44
  resolve();
47
45
  });
48
46
  if (event.defaultPrevented) {
@@ -56,7 +54,7 @@ export function setupFormSubmitter(ctor) {
56
54
  // elements. This patches the dispatched submit event to add the correct
57
55
  // `submitter`.
58
56
  // See https://github.com/WICG/webcomponents/issues/814
59
- form.addEventListener('submit', submitEvent => {
57
+ form.addEventListener('submit', (submitEvent) => {
60
58
  Object.defineProperty(submitEvent, 'submitter', {
61
59
  configurable: true,
62
60
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"form-submitter.js","sourceRoot":"","sources":["form-submitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAkB,MAAM,KAAK,CAAC;AAE9C,OAAO,EAAC,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AA+ChE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA8B;IAC/D,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IAEA,IAA0C,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;QACpE,MAAM,SAAS,GAAG,QAAyB,CAAC;QAC5C,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAChD,MAAM,EAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAC,GAAG,SAAS,CAAC;YACxD,MAAM,EAAC,IAAI,EAAC,GAAG,gBAAgB,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE;gBAC9B,OAAO;aACR;YAED,mDAAmD;YACnD,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBAC1B,OAAO;aACR;YAED,IAAI,IAAI,KAAK,OAAO,EAAE;gBACpB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACR;YAED,0EAA0E;YAC1E,wEAAwE;YACxE,eAAe;YACf,uDAAuD;YACvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;gBAC5C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE;oBAC9C,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;iBACrB,CAAC,CAAC;YACL,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;YAEhC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, ReactiveElement} from 'lit';\n\nimport {internals, WithInternals} from './element-internals.js';\n\n/**\n * A string indicating the form submission behavior of the element.\n *\n * - submit: The element submits the form. This is the default value if the\n * attribute is not specified, or if it is dynamically changed to an empty or\n * invalid value.\n * - reset: The element resets the form.\n * - button: The element does nothing.\n */\nexport type FormSubmitterType = 'button'|'submit'|'reset';\n\n/**\n * An element that can submit or reset a `<form>`, similar to\n * `<button type=\"submit\">`.\n */\nexport interface FormSubmitter extends ReactiveElement, WithInternals {\n /**\n * A string indicating the form submission behavior of the element.\n *\n * - submit: The element submits the form. This is the default value if the\n * attribute is not specified, or if it is dynamically changed to an empty or\n * invalid value.\n * - reset: The element resets the form.\n * - button: The element does nothing.\n */\n type: FormSubmitterType;\n\n /**\n * The HTML name to use in form submission. When combined with a `value`, the\n * submitting button's name/value will be added to the form.\n *\n * Names must reflect to a `name` attribute for form integration.\n */\n name: string;\n\n /**\n * The value of the button. When combined with a `name`, the submitting\n * button's name/value will be added to the form.\n */\n value: string;\n}\n\ntype FormSubmitterConstructor =\n (new () => FormSubmitter)|(abstract new () => FormSubmitter);\n\n/**\n * Sets up an element's constructor to enable form submission. The element\n * instance should be form associated and have a `type` property.\n *\n * A click listener is added to each element instance. If the click is not\n * default prevented, it will submit the element's form, if any.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement {\n * static {\n * setupFormSubmitter(MyElement);\n * }\n *\n * static formAssociated = true;\n *\n * type: FormSubmitterType = 'submit';\n *\n * [internals] = this.attachInternals();\n * }\n * ```\n *\n * @param ctor The form submitter element's constructor.\n */\nexport function setupFormSubmitter(ctor: FormSubmitterConstructor) {\n if (isServer) {\n return;\n }\n\n (ctor as unknown as typeof ReactiveElement).addInitializer(instance => {\n const submitter = instance as FormSubmitter;\n submitter.addEventListener('click', async event => {\n const {type, [internals]: elementInternals} = submitter;\n const {form} = elementInternals;\n if (!form || type === 'button') {\n return;\n }\n\n // Wait a microtask for event bubbling to complete.\n await new Promise<void>(resolve => {\n resolve();\n });\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (type === 'reset') {\n form.reset();\n return;\n }\n\n // form.requestSubmit(submitter) does not work with form associated custom\n // elements. This patches the dispatched submit event to add the correct\n // `submitter`.\n // See https://github.com/WICG/webcomponents/issues/814\n form.addEventListener('submit', submitEvent => {\n Object.defineProperty(submitEvent, 'submitter', {\n configurable: true,\n enumerable: true,\n get: () => submitter,\n });\n }, {capture: true, once: true});\n\n elementInternals.setFormValue(submitter.value);\n form.requestSubmit();\n });\n });\n}\n"]}
1
+ {"version":3,"file":"form-submitter.js","sourceRoot":"","sources":["form-submitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAkB,MAAM,KAAK,CAAC;AAE9C,OAAO,EACL,SAAS,GAEV,MAAM,2CAA2C,CAAC;AAgDnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA8B;IAC/D,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IAEA,IAA0C,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE;QACtE,MAAM,SAAS,GAAG,QAAyB,CAAC;QAC5C,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,EAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAC,GAAG,SAAS,CAAC;YACxD,MAAM,EAAC,IAAI,EAAC,GAAG,gBAAgB,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE;gBAC9B,OAAO;aACR;YAED,mDAAmD;YACnD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBAC1B,OAAO;aACR;YAED,IAAI,IAAI,KAAK,OAAO,EAAE;gBACpB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACR;YAED,0EAA0E;YAC1E,wEAAwE;YACxE,eAAe;YACf,uDAAuD;YACvD,IAAI,CAAC,gBAAgB,CACnB,QAAQ,EACR,CAAC,WAAW,EAAE,EAAE;gBACd,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE;oBAC9C,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;iBACrB,CAAC,CAAC;YACL,CAAC,EACD,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAC5B,CAAC;YAEF,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, ReactiveElement} from 'lit';\n\nimport {\n internals,\n WithElementInternals,\n} from '../../labs/behaviors/element-internals.js';\n\n/**\n * A string indicating the form submission behavior of the element.\n *\n * - submit: The element submits the form. This is the default value if the\n * attribute is not specified, or if it is dynamically changed to an empty or\n * invalid value.\n * - reset: The element resets the form.\n * - button: The element does nothing.\n */\nexport type FormSubmitterType = 'button' | 'submit' | 'reset';\n\n/**\n * An element that can submit or reset a `<form>`, similar to\n * `<button type=\"submit\">`.\n */\nexport interface FormSubmitter extends ReactiveElement, WithElementInternals {\n /**\n * A string indicating the form submission behavior of the element.\n *\n * - submit: The element submits the form. This is the default value if the\n * attribute is not specified, or if it is dynamically changed to an empty or\n * invalid value.\n * - reset: The element resets the form.\n * - button: The element does nothing.\n */\n type: FormSubmitterType;\n\n /**\n * The HTML name to use in form submission. When combined with a `value`, the\n * submitting button's name/value will be added to the form.\n *\n * Names must reflect to a `name` attribute for form integration.\n */\n name: string;\n\n /**\n * The value of the button. When combined with a `name`, the submitting\n * button's name/value will be added to the form.\n */\n value: string;\n}\n\ntype FormSubmitterConstructor =\n | (new () => FormSubmitter)\n | (abstract new () => FormSubmitter);\n\n/**\n * Sets up an element's constructor to enable form submission. The element\n * instance should be form associated and have a `type` property.\n *\n * A click listener is added to each element instance. If the click is not\n * default prevented, it will submit the element's form, if any.\n *\n * @example\n * ```ts\n * class MyElement extends mixinElementInternals(LitElement) {\n * static {\n * setupFormSubmitter(MyElement);\n * }\n *\n * static formAssociated = true;\n *\n * type: FormSubmitterType = 'submit';\n * }\n * ```\n *\n * @param ctor The form submitter element's constructor.\n */\nexport function setupFormSubmitter(ctor: FormSubmitterConstructor) {\n if (isServer) {\n return;\n }\n\n (ctor as unknown as typeof ReactiveElement).addInitializer((instance) => {\n const submitter = instance as FormSubmitter;\n submitter.addEventListener('click', async (event) => {\n const {type, [internals]: elementInternals} = submitter;\n const {form} = elementInternals;\n if (!form || type === 'button') {\n return;\n }\n\n // Wait a microtask for event bubbling to complete.\n await new Promise<void>((resolve) => {\n resolve();\n });\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (type === 'reset') {\n form.reset();\n return;\n }\n\n // form.requestSubmit(submitter) does not work with form associated custom\n // elements. This patches the dispatched submit event to add the correct\n // `submitter`.\n // See https://github.com/WICG/webcomponents/issues/814\n form.addEventListener(\n 'submit',\n (submitEvent) => {\n Object.defineProperty(submitEvent, 'submitter', {\n configurable: true,\n enumerable: true,\n get: () => submitter,\n });\n },\n {capture: true, once: true},\n );\n\n elementInternals.setFormValue(submitter.value);\n form.requestSubmit();\n });\n });\n}\n"]}
@@ -12,7 +12,7 @@
12
12
  * this parameter can be used as a conditional guard. Defaults to `true`.
13
13
  */
14
14
  export function isRtl(el, shouldCheck = true) {
15
- return shouldCheck &&
16
- getComputedStyle(el).getPropertyValue('direction').trim() === 'rtl';
15
+ return (shouldCheck &&
16
+ getComputedStyle(el).getPropertyValue('direction').trim() === 'rtl');
17
17
  }
18
18
  //# sourceMappingURL=is-rtl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-rtl.js","sourceRoot":"","sources":["is-rtl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,EAAe,EAAE,WAAW,GAAG,IAAI;IACvD,OAAO,WAAW;QACd,gBAAgB,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC;AAC1E,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns `true` if the given element is in a right-to-left direction.\n *\n * @param el Element to determine direction from\n * @param shouldCheck Optional. If `false`, return `false` without checking\n * direction. Determining the direction of `el` is somewhat expensive, so\n * this parameter can be used as a conditional guard. Defaults to `true`.\n */\nexport function isRtl(el: HTMLElement, shouldCheck = true) {\n return shouldCheck &&\n getComputedStyle(el).getPropertyValue('direction').trim() === 'rtl';\n}"]}
1
+ {"version":3,"file":"is-rtl.js","sourceRoot":"","sources":["is-rtl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,EAAe,EAAE,WAAW,GAAG,IAAI;IACvD,OAAO,CACL,WAAW;QACX,gBAAgB,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CACpE,CAAC;AACJ,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns `true` if the given element is in a right-to-left direction.\n *\n * @param el Element to determine direction from\n * @param shouldCheck Optional. If `false`, return `false` without checking\n * direction. Determining the direction of `el` is somewhat expensive, so\n * this parameter can be used as a conditional guard. Defaults to `true`.\n */\nexport function isRtl(el: HTMLElement, shouldCheck = true) {\n return (\n shouldCheck &&\n getComputedStyle(el).getPropertyValue('direction').trim() === 'rtl'\n );\n}\n"]}
@@ -9,6 +9,6 @@ export const stringConverter = {
9
9
  },
10
10
  toAttribute(value) {
11
11
  return value || null;
12
- }
12
+ },
13
13
  };
14
14
  //# sourceMappingURL=string-converter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"string-converter.js","sourceRoot":"","sources":["string-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,CAAC,KAAkB;QAC9B,OAAO,KAAK,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;CACF,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const stringConverter = {\n fromAttribute(value: string|null): string {\n return value ?? '';\n },\n toAttribute(value: string): string|null {\n return value || null;\n }\n};\n"]}
1
+ {"version":3,"file":"string-converter.js","sourceRoot":"","sources":["string-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,CAAC,KAAoB;QAChC,OAAO,KAAK,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;CACF,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const stringConverter = {\n fromAttribute(value: string | null): string {\n return value ?? '';\n },\n toAttribute(value: string): string | null {\n return value || null;\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"animation.js","sourceRoot":"","sources":["animation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,4BAA4B;IACtC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,uBAAuB;IAC5C,UAAU,EAAE,wBAAwB;IACpC,qBAAqB,EAAE,2BAA2B;IAClD,qBAAqB,EAAE,2BAA2B;CAC1C,CAAC;AAmBX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,qBAAqB;IACnC,0CAA0C;IAC1C,IAAI,wBAAwB,GAAyB,IAAI,CAAC;IAE1D,OAAO;QACL,KAAK;YACH,yCAAyC;YACzC,wBAAwB,EAAE,KAAK,EAAE,CAAC;YAClC,0DAA0D;YAC1D,wBAAwB,GAAG,IAAI,eAAe,EAAE,CAAC;YACjD,sEAAsE;YACtE,qBAAqB;YACrB,OAAO,wBAAwB,CAAC,MAAM,CAAC;QACzC,CAAC;QACD,MAAM;YACJ,wBAAwB,GAAG,IAAI,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,OAAO,KAAK,EACD,GAAG,GAAG,EAAE,EAAE,EAAmC,EAC7C,OAAO,GAAG,KAAK,IAAI,EAAE;QACnB,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC,EAAE,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACnB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,CAAC;aACN;SACF;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Easing functions to use for web animations.\n *\n * **NOTE:** `EASING.EMPHASIZED` is approximated with unknown accuracy.\n *\n * TODO(b/241113345): replace with tokens\n */\nexport const EASING = {\n STANDARD: 'cubic-bezier(0.2, 0, 0, 1)',\n STANDARD_ACCELERATE: 'cubic-bezier(.3,0,1,1)',\n STANDARD_DECELERATE: 'cubic-bezier(0,0,0,1)',\n EMPHASIZED: 'cubic-bezier(.3,0,0,1)',\n EMPHASIZED_ACCELERATE: 'cubic-bezier(.3,0,.8,.15)',\n EMPHASIZED_DECELERATE: 'cubic-bezier(.05,.7,.1,1)',\n} as const;\n\n/**\n * A signal that is used for abortable tasks.\n */\nexport interface AnimationSignal {\n /**\n * Starts the abortable task. Any previous tasks started with this instance\n * will be aborted.\n *\n * @return An `AbortSignal` for the current task.\n */\n start(): AbortSignal;\n /**\n * Complete the current task.\n */\n finish(): void;\n}\n\n/**\n * Creates an `AnimationSignal` that can be used to cancel a previous task.\n *\n * @example\n * class MyClass {\n * private labelAnimationSignal = createAnimationSignal();\n *\n * private async animateLabel() {\n * // Start of the task. Previous tasks will be canceled.\n * const signal = this.labelAnimationSignal.start();\n *\n * // Do async work...\n * if (signal.aborted) {\n * // Use AbortSignal to check if a request was made to abort after some\n * // asynchronous work.\n * return;\n * }\n *\n * const animation = this.animate(...);\n * // Add event listeners to be notified when the task should be canceled.\n * signal.addEventListener('abort', () => {\n * animation.cancel();\n * });\n *\n * animation.addEventListener('finish', () => {\n * // Tell the signal that the current task is finished.\n * this.labelAnimationSignal.finish();\n * });\n * }\n * }\n *\n * @return An `AnimationSignal`.\n */\nexport function createAnimationSignal(): AnimationSignal {\n // The current animation's AbortController\n let animationAbortController: AbortController|null = null;\n\n return {\n start() {\n // Tell the previous animation to cancel.\n animationAbortController?.abort();\n // Set up a new AbortController for the current animation.\n animationAbortController = new AbortController();\n // Provide the AbortSignal so that the caller can check aborted status\n // and add listeners.\n return animationAbortController.signal;\n },\n finish() {\n animationAbortController = null;\n },\n };\n}\n\n/**\n * Returns a function which can be used to throttle function calls\n * mapped to a key via a given function that should produce a promise that\n * determines the throttle amount (defaults to requestAnimationFrame).\n */\nexport function createThrottle() {\n const stack = new Set();\n return async (\n key = '', cb: (...args: unknown[]) => unknown,\n timeout = async () => {\n await new Promise(requestAnimationFrame);\n }) => {\n if (!stack.has(key)) {\n stack.add(key);\n await timeout();\n if (stack.has(key)) {\n stack.delete(key);\n cb();\n }\n }\n };\n}\n\n/**\n * Parses an number in milliseconds from a css time value\n */\nexport function msFromTimeCSSValue(value: string) {\n const match = value.trim().match(/([\\d.]+)(\\s*s$)?/);\n const time = match?.[1];\n const seconds = match?.[2];\n return Number(time ?? 0) * (seconds ? 1000 : 1);\n}\n"]}
1
+ {"version":3,"file":"animation.js","sourceRoot":"","sources":["animation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,4BAA4B;IACtC,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,uBAAuB;IAC5C,UAAU,EAAE,wBAAwB;IACpC,qBAAqB,EAAE,2BAA2B;IAClD,qBAAqB,EAAE,2BAA2B;CAC1C,CAAC;AAmBX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,qBAAqB;IACnC,0CAA0C;IAC1C,IAAI,wBAAwB,GAA2B,IAAI,CAAC;IAE5D,OAAO;QACL,KAAK;YACH,yCAAyC;YACzC,wBAAwB,EAAE,KAAK,EAAE,CAAC;YAClC,0DAA0D;YAC1D,wBAAwB,GAAG,IAAI,eAAe,EAAE,CAAC;YACjD,sEAAsE;YACtE,qBAAqB;YACrB,OAAO,wBAAwB,CAAC,MAAM,CAAC;QACzC,CAAC;QACD,MAAM;YACJ,wBAAwB,GAAG,IAAI,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,OAAO,KAAK,EACV,GAAG,GAAG,EAAE,EACR,EAAmC,EACnC,OAAO,GAAG,KAAK,IAAI,EAAE;QACnB,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC,EACD,EAAE;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACnB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,CAAC;aACN;SACF;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Easing functions to use for web animations.\n *\n * **NOTE:** `EASING.EMPHASIZED` is approximated with unknown accuracy.\n *\n * TODO(b/241113345): replace with tokens\n */\nexport const EASING = {\n STANDARD: 'cubic-bezier(0.2, 0, 0, 1)',\n STANDARD_ACCELERATE: 'cubic-bezier(.3,0,1,1)',\n STANDARD_DECELERATE: 'cubic-bezier(0,0,0,1)',\n EMPHASIZED: 'cubic-bezier(.3,0,0,1)',\n EMPHASIZED_ACCELERATE: 'cubic-bezier(.3,0,.8,.15)',\n EMPHASIZED_DECELERATE: 'cubic-bezier(.05,.7,.1,1)',\n} as const;\n\n/**\n * A signal that is used for abortable tasks.\n */\nexport interface AnimationSignal {\n /**\n * Starts the abortable task. Any previous tasks started with this instance\n * will be aborted.\n *\n * @return An `AbortSignal` for the current task.\n */\n start(): AbortSignal;\n /**\n * Complete the current task.\n */\n finish(): void;\n}\n\n/**\n * Creates an `AnimationSignal` that can be used to cancel a previous task.\n *\n * @example\n * class MyClass {\n * private labelAnimationSignal = createAnimationSignal();\n *\n * private async animateLabel() {\n * // Start of the task. Previous tasks will be canceled.\n * const signal = this.labelAnimationSignal.start();\n *\n * // Do async work...\n * if (signal.aborted) {\n * // Use AbortSignal to check if a request was made to abort after some\n * // asynchronous work.\n * return;\n * }\n *\n * const animation = this.animate(...);\n * // Add event listeners to be notified when the task should be canceled.\n * signal.addEventListener('abort', () => {\n * animation.cancel();\n * });\n *\n * animation.addEventListener('finish', () => {\n * // Tell the signal that the current task is finished.\n * this.labelAnimationSignal.finish();\n * });\n * }\n * }\n *\n * @return An `AnimationSignal`.\n */\nexport function createAnimationSignal(): AnimationSignal {\n // The current animation's AbortController\n let animationAbortController: AbortController | null = null;\n\n return {\n start() {\n // Tell the previous animation to cancel.\n animationAbortController?.abort();\n // Set up a new AbortController for the current animation.\n animationAbortController = new AbortController();\n // Provide the AbortSignal so that the caller can check aborted status\n // and add listeners.\n return animationAbortController.signal;\n },\n finish() {\n animationAbortController = null;\n },\n };\n}\n\n/**\n * Returns a function which can be used to throttle function calls\n * mapped to a key via a given function that should produce a promise that\n * determines the throttle amount (defaults to requestAnimationFrame).\n */\nexport function createThrottle() {\n const stack = new Set();\n return async (\n key = '',\n cb: (...args: unknown[]) => unknown,\n timeout = async () => {\n await new Promise(requestAnimationFrame);\n },\n ) => {\n if (!stack.has(key)) {\n stack.add(key);\n await timeout();\n if (stack.has(key)) {\n stack.delete(key);\n cb();\n }\n }\n };\n}\n\n/**\n * Parses an number in milliseconds from a css time value\n */\nexport function msFromTimeCSSValue(value: string) {\n const match = value.trim().match(/([\\d.]+)(\\s*s$)?/);\n const time = match?.[1];\n const seconds = match?.[2];\n return Number(time ?? 0) * (seconds ? 1000 : 1);\n}\n"]}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { LitElement } from 'lit';
7
+ import { WithElementInternals } from './element-internals.js';
8
+ import { FormAssociated } from './form-associated.js';
9
+ import { MixinBase, MixinReturn } from './mixin.js';
10
+ import { Validator } from './validators/validator.js';
11
+ /**
12
+ * A form associated element that provides constraint validation APIs.
13
+ *
14
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation
15
+ */
16
+ export interface ConstraintValidation extends FormAssociated {
17
+ /**
18
+ * Returns a ValidityState object that represents the validity states of the
19
+ * element.
20
+ *
21
+ * https://developer.mozilla.org/en-US/docs/Web/API/ValidityState
22
+ */
23
+ readonly validity: ValidityState;
24
+ /**
25
+ * Returns a validation error message or an empty string if the element is
26
+ * valid.
27
+ *
28
+ * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/validationMessage
29
+ */
30
+ readonly validationMessage: string;
31
+ /**
32
+ * Returns whether an element will successfully validate based on forms
33
+ * validation rules and constraints.
34
+ *
35
+ * Disabled and readonly elements will not validate.
36
+ *
37
+ * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/willValidate
38
+ */
39
+ readonly willValidate: boolean;
40
+ /**
41
+ * Checks the element's constraint validation and returns true if the element
42
+ * is valid or false if not.
43
+ *
44
+ * If invalid, this method will dispatch an `invalid` event.
45
+ *
46
+ * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/checkValidity
47
+ *
48
+ * @return true if the element is valid, or false if not.
49
+ */
50
+ checkValidity(): boolean;
51
+ /**
52
+ * Checks the element's constraint validation and returns true if the element
53
+ * is valid or false if not.
54
+ *
55
+ * If invalid, this method will dispatch a cancelable `invalid` event. If not
56
+ * canceled, a the current `validationMessage` will be reported to the user.
57
+ *
58
+ * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/reportValidity
59
+ *
60
+ * @return true if the element is valid, or false if not.
61
+ */
62
+ reportValidity(): boolean;
63
+ /**
64
+ * Sets the element's constraint validation error message. When set to a
65
+ * non-empty string, `validity.customError` will be true and
66
+ * `validationMessage` will display the provided error.
67
+ *
68
+ * Use this method to customize error messages reported.
69
+ *
70
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setCustomValidity
71
+ *
72
+ * @param error The error message to display, or an empty string.
73
+ */
74
+ setCustomValidity(error: string): void;
75
+ /**
76
+ * Creates and returns a `Validator` that is used to compute and cache
77
+ * validity for the element.
78
+ *
79
+ * A validator that caches validity is important since constraint validation
80
+ * must be computed synchronously and frequently in response to constraint
81
+ * validation property changes.
82
+ */
83
+ [createValidator](): Validator<unknown>;
84
+ /**
85
+ * Returns shadow DOM child that is used as the anchor for the platform
86
+ * `reportValidity()` popup. This is often the root element or the inner
87
+ * focus-delegated element.
88
+ */
89
+ [getValidityAnchor](): HTMLElement | null;
90
+ }
91
+ /**
92
+ * A symbol property used to create a constraint validation `Validator`.
93
+ * Required for all `mixinConstraintValidation()` elements.
94
+ */
95
+ export declare const createValidator: unique symbol;
96
+ /**
97
+ * A symbol property used to return an anchor for constraint validation popups.
98
+ * Required for all `mixinConstraintValidation()` elements.
99
+ */
100
+ export declare const getValidityAnchor: unique symbol;
101
+ /**
102
+ * Mixes in constraint validation APIs for an element.
103
+ *
104
+ * See https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation
105
+ * for more details.
106
+ *
107
+ * Implementations must provide a validator to cache and compute its validity,
108
+ * along with a shadow root element to anchor validation popups to.
109
+ *
110
+ * @example
111
+ * ```ts
112
+ * const baseClass = mixinConstraintValidation(
113
+ * mixinFormAssociated(mixinElementInternals(LitElement))
114
+ * );
115
+ *
116
+ * class MyCheckbox extends baseClass {
117
+ * \@property({type: Boolean}) checked = false;
118
+ * \@property({type: Boolean}) required = false;
119
+ *
120
+ * [createValidator]() {
121
+ * return new CheckboxValidator(() => this);
122
+ * }
123
+ *
124
+ * [getValidityAnchor]() {
125
+ * return this.renderRoot.querySelector('.root');
126
+ * }
127
+ * }
128
+ * ```
129
+ *
130
+ * @param base The class to mix functionality into.
131
+ * @return The provided class with `ConstraintValidation` mixed in.
132
+ */
133
+ export declare function mixinConstraintValidation<T extends MixinBase<LitElement & FormAssociated & WithElementInternals>>(base: T): MixinReturn<T, ConstraintValidation>;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { isServer } from 'lit';
7
+ import { internals } from './element-internals.js';
8
+ /**
9
+ * A symbol property used to create a constraint validation `Validator`.
10
+ * Required for all `mixinConstraintValidation()` elements.
11
+ */
12
+ export const createValidator = Symbol('createValidator');
13
+ /**
14
+ * A symbol property used to return an anchor for constraint validation popups.
15
+ * Required for all `mixinConstraintValidation()` elements.
16
+ */
17
+ export const getValidityAnchor = Symbol('getValidityAnchor');
18
+ // Private symbol members, used to avoid name clashing.
19
+ const privateValidator = Symbol('privateValidator');
20
+ const privateSyncValidity = Symbol('privateSyncValidity');
21
+ const privateCustomValidationMessage = Symbol('privateCustomValidationMessage');
22
+ /**
23
+ * Mixes in constraint validation APIs for an element.
24
+ *
25
+ * See https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation
26
+ * for more details.
27
+ *
28
+ * Implementations must provide a validator to cache and compute its validity,
29
+ * along with a shadow root element to anchor validation popups to.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const baseClass = mixinConstraintValidation(
34
+ * mixinFormAssociated(mixinElementInternals(LitElement))
35
+ * );
36
+ *
37
+ * class MyCheckbox extends baseClass {
38
+ * \@property({type: Boolean}) checked = false;
39
+ * \@property({type: Boolean}) required = false;
40
+ *
41
+ * [createValidator]() {
42
+ * return new CheckboxValidator(() => this);
43
+ * }
44
+ *
45
+ * [getValidityAnchor]() {
46
+ * return this.renderRoot.querySelector('.root');
47
+ * }
48
+ * }
49
+ * ```
50
+ *
51
+ * @param base The class to mix functionality into.
52
+ * @return The provided class with `ConstraintValidation` mixed in.
53
+ */
54
+ export function mixinConstraintValidation(base) {
55
+ var _a;
56
+ class ConstraintValidationElement extends base {
57
+ constructor() {
58
+ super(...arguments);
59
+ /**
60
+ * Needed for Safari, see https://bugs.webkit.org/show_bug.cgi?id=261432
61
+ * Replace with this[internals].validity.customError when resolved.
62
+ */
63
+ this[_a] = '';
64
+ }
65
+ get validity() {
66
+ this[privateSyncValidity]();
67
+ return this[internals].validity;
68
+ }
69
+ get validationMessage() {
70
+ this[privateSyncValidity]();
71
+ return this[internals].validationMessage;
72
+ }
73
+ get willValidate() {
74
+ this[privateSyncValidity]();
75
+ return this[internals].willValidate;
76
+ }
77
+ checkValidity() {
78
+ this[privateSyncValidity]();
79
+ return this[internals].checkValidity();
80
+ }
81
+ reportValidity() {
82
+ this[privateSyncValidity]();
83
+ return this[internals].reportValidity();
84
+ }
85
+ setCustomValidity(error) {
86
+ this[privateCustomValidationMessage] = error;
87
+ this[privateSyncValidity]();
88
+ }
89
+ requestUpdate(name, oldValue, options) {
90
+ super.requestUpdate(name, oldValue, options);
91
+ this[privateSyncValidity]();
92
+ }
93
+ [(_a = privateCustomValidationMessage, privateSyncValidity)]() {
94
+ if (isServer) {
95
+ return;
96
+ }
97
+ if (!this[privateValidator]) {
98
+ this[privateValidator] = this[createValidator]();
99
+ }
100
+ const { validity, validationMessage: nonCustomValidationMessage } = this[privateValidator].getValidity();
101
+ const customError = !!this[privateCustomValidationMessage];
102
+ const validationMessage = this[privateCustomValidationMessage] || nonCustomValidationMessage;
103
+ this[internals].setValidity({ ...validity, customError }, validationMessage, this[getValidityAnchor]() ?? undefined);
104
+ }
105
+ [createValidator]() {
106
+ throw new Error('Implement [createValidator]');
107
+ }
108
+ [getValidityAnchor]() {
109
+ throw new Error('Implement [getValidityAnchor]');
110
+ }
111
+ }
112
+ return ConstraintValidationElement;
113
+ }
114
+ //# sourceMappingURL=constraint-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-validation.js","sourceRoot":"","sources":["constraint-validation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {isServer, LitElement, PropertyDeclaration} from 'lit';\n\nimport {internals, WithElementInternals} from './element-internals.js';\nimport {FormAssociated} from './form-associated.js';\nimport {MixinBase, MixinReturn} from './mixin.js';\nimport {Validator} from './validators/validator.js';\n\n/**\n * A form associated element that provides constraint validation APIs.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation\n */\nexport interface ConstraintValidation extends FormAssociated {\n /**\n * Returns a ValidityState object that represents the validity states of the\n * element.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/ValidityState\n */\n readonly validity: ValidityState;\n\n /**\n * Returns a validation error message or an empty string if the element is\n * valid.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/validationMessage\n */\n readonly validationMessage: string;\n\n /**\n * Returns whether an element will successfully validate based on forms\n * validation rules and constraints.\n *\n * Disabled and readonly elements will not validate.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/willValidate\n */\n readonly willValidate: boolean;\n\n /**\n * Checks the element's constraint validation and returns true if the element\n * is valid or false if not.\n *\n * If invalid, this method will dispatch an `invalid` event.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/checkValidity\n *\n * @return true if the element is valid, or false if not.\n */\n checkValidity(): boolean;\n\n /**\n * Checks the element's constraint validation and returns true if the element\n * is valid or false if not.\n *\n * If invalid, this method will dispatch a cancelable `invalid` event. If not\n * canceled, a the current `validationMessage` will be reported to the user.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/reportValidity\n *\n * @return true if the element is valid, or false if not.\n */\n reportValidity(): boolean;\n\n /**\n * Sets the element's constraint validation error message. When set to a\n * non-empty string, `validity.customError` will be true and\n * `validationMessage` will display the provided error.\n *\n * Use this method to customize error messages reported.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setCustomValidity\n *\n * @param error The error message to display, or an empty string.\n */\n setCustomValidity(error: string): void;\n\n /**\n * Creates and returns a `Validator` that is used to compute and cache\n * validity for the element.\n *\n * A validator that caches validity is important since constraint validation\n * must be computed synchronously and frequently in response to constraint\n * validation property changes.\n */\n [createValidator](): Validator<unknown>;\n\n /**\n * Returns shadow DOM child that is used as the anchor for the platform\n * `reportValidity()` popup. This is often the root element or the inner\n * focus-delegated element.\n */\n [getValidityAnchor](): HTMLElement | null;\n}\n\n/**\n * A symbol property used to create a constraint validation `Validator`.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const createValidator = Symbol('createValidator');\n\n/**\n * A symbol property used to return an anchor for constraint validation popups.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const getValidityAnchor = Symbol('getValidityAnchor');\n\n// Private symbol members, used to avoid name clashing.\nconst privateValidator = Symbol('privateValidator');\nconst privateSyncValidity = Symbol('privateSyncValidity');\nconst privateCustomValidationMessage = Symbol('privateCustomValidationMessage');\n\n/**\n * Mixes in constraint validation APIs for an element.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation\n * for more details.\n *\n * Implementations must provide a validator to cache and compute its validity,\n * along with a shadow root element to anchor validation popups to.\n *\n * @example\n * ```ts\n * const baseClass = mixinConstraintValidation(\n * mixinFormAssociated(mixinElementInternals(LitElement))\n * );\n *\n * class MyCheckbox extends baseClass {\n * \\@property({type: Boolean}) checked = false;\n * \\@property({type: Boolean}) required = false;\n *\n * [createValidator]() {\n * return new CheckboxValidator(() => this);\n * }\n *\n * [getValidityAnchor]() {\n * return this.renderRoot.querySelector('.root');\n * }\n * }\n * ```\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `ConstraintValidation` mixed in.\n */\nexport function mixinConstraintValidation<\n T extends MixinBase<LitElement & FormAssociated & WithElementInternals>,\n>(base: T): MixinReturn<T, ConstraintValidation> {\n abstract class ConstraintValidationElement\n extends base\n implements ConstraintValidation\n {\n get validity() {\n this[privateSyncValidity]();\n return this[internals].validity;\n }\n\n get validationMessage() {\n this[privateSyncValidity]();\n return this[internals].validationMessage;\n }\n\n get willValidate() {\n this[privateSyncValidity]();\n return this[internals].willValidate;\n }\n\n /**\n * A validator instance created from `[createValidator]()`.\n */\n [privateValidator]?: Validator<unknown>;\n\n /**\n * Needed for Safari, see https://bugs.webkit.org/show_bug.cgi?id=261432\n * Replace with this[internals].validity.customError when resolved.\n */\n [privateCustomValidationMessage] = '';\n\n checkValidity() {\n this[privateSyncValidity]();\n return this[internals].checkValidity();\n }\n\n reportValidity() {\n this[privateSyncValidity]();\n return this[internals].reportValidity();\n }\n\n setCustomValidity(error: string) {\n this[privateCustomValidationMessage] = error;\n this[privateSyncValidity]();\n }\n\n override requestUpdate(\n name?: PropertyKey,\n oldValue?: unknown,\n options?: PropertyDeclaration,\n ) {\n super.requestUpdate(name, oldValue, options);\n this[privateSyncValidity]();\n }\n\n [privateSyncValidity]() {\n if (isServer) {\n return;\n }\n\n if (!this[privateValidator]) {\n this[privateValidator] = this[createValidator]();\n }\n\n const {validity, validationMessage: nonCustomValidationMessage} =\n this[privateValidator].getValidity();\n\n const customError = !!this[privateCustomValidationMessage];\n const validationMessage =\n this[privateCustomValidationMessage] || nonCustomValidationMessage;\n\n this[internals].setValidity(\n {...validity, customError},\n validationMessage,\n this[getValidityAnchor]() ?? undefined,\n );\n }\n\n [createValidator](): Validator<unknown> {\n throw new Error('Implement [createValidator]');\n }\n\n [getValidityAnchor](): HTMLElement | null {\n throw new Error('Implement [getValidityAnchor]');\n }\n }\n\n return ConstraintValidationElement;\n}\n"]}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { LitElement } from 'lit';
7
+ import { MixinBase, MixinReturn } from './mixin.js';
8
+ /**
9
+ * A unique symbol used for protected access to an instance's
10
+ * `ElementInternals`.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * class MyElement extends mixinElementInternals(LitElement) {
15
+ * constructor() {
16
+ * super();
17
+ * this[internals].role = 'button';
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export declare const internals: unique symbol;
23
+ /**
24
+ * An instance with an `internals` symbol property for the component's
25
+ * `ElementInternals`.
26
+ *
27
+ * Use this when protected access is needed for an instance's `ElementInternals`
28
+ * from other files. A unique symbol is used to access the internals.
29
+ */
30
+ export interface WithElementInternals {
31
+ /**
32
+ * An instance's `ElementInternals`.
33
+ */
34
+ [internals]: ElementInternals;
35
+ }
36
+ /**
37
+ * Mixes in an attached `ElementInternals` instance.
38
+ *
39
+ * This mixin is only needed when other shared code needs access to a
40
+ * component's `ElementInternals`, such as form-associated mixins.
41
+ *
42
+ * @param base The class to mix functionality into.
43
+ * @return The provided class with `WithElementInternals` mixed in.
44
+ */
45
+ export declare function mixinElementInternals<T extends MixinBase<LitElement>>(base: T): MixinReturn<T, WithElementInternals>;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { polyfillARIAMixin, polyfillElementInternalsAria, } from '../../internal/aria/aria.js';
7
+ /**
8
+ * A unique symbol used for protected access to an instance's
9
+ * `ElementInternals`.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * class MyElement extends mixinElementInternals(LitElement) {
14
+ * constructor() {
15
+ * super();
16
+ * this[internals].role = 'button';
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ export const internals = Symbol('internals');
22
+ // Private symbols
23
+ const privateInternals = Symbol('privateInternals');
24
+ /**
25
+ * Mixes in an attached `ElementInternals` instance.
26
+ *
27
+ * This mixin is only needed when other shared code needs access to a
28
+ * component's `ElementInternals`, such as form-associated mixins.
29
+ *
30
+ * @param base The class to mix functionality into.
31
+ * @return The provided class with `WithElementInternals` mixed in.
32
+ */
33
+ export function mixinElementInternals(base) {
34
+ class WithElementInternalsElement extends base {
35
+ get [internals]() {
36
+ // Create internals in getter so that it can be used in methods called on
37
+ // construction in `ReactiveElement`, such as `requestUpdate()`.
38
+ if (!this[privateInternals]) {
39
+ // Cast needed for closure
40
+ this[privateInternals] = polyfillElementInternalsAria(this, this.attachInternals());
41
+ }
42
+ return this[privateInternals];
43
+ }
44
+ }
45
+ (() => {
46
+ polyfillARIAMixin(WithElementInternalsElement);
47
+ })();
48
+ return WithElementInternalsElement;
49
+ }
50
+ //# sourceMappingURL=element-internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-internals.js","sourceRoot":"","sources":["element-internals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,6BAA6B,CAAC;AAGrC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAgB7C,kBAAkB;AAClB,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAO;IAEP,MAAe,2BACb,SAAQ,IAAI;QASZ,IAAI,CAAC,SAAS,CAAC;YACb,yEAAyE;YACzE,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;gBAC3B,0BAA0B;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,GAAG,4BAA4B,CACnD,IAAI,EACH,IAAoB,CAAC,eAAe,EAAE,CACxC,CAAC;aACH;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC;KAGF;IArBC;QACE,iBAAiB,CACf,2BAA2D,CAC5D,CAAC;IACJ,CAAC,GAAA,CAAA;IAmBH,OAAO,2BAA2B,CAAC;AACrC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {LitElement} from 'lit';\n\nimport {\n polyfillARIAMixin,\n polyfillElementInternalsAria,\n} from '../../internal/aria/aria.js';\nimport {MixinBase, MixinReturn} from './mixin.js';\n\n/**\n * A unique symbol used for protected access to an instance's\n * `ElementInternals`.\n *\n * @example\n * ```ts\n * class MyElement extends mixinElementInternals(LitElement) {\n * constructor() {\n * super();\n * this[internals].role = 'button';\n * }\n * }\n * ```\n */\nexport const internals = Symbol('internals');\n\n/**\n * An instance with an `internals` symbol property for the component's\n * `ElementInternals`.\n *\n * Use this when protected access is needed for an instance's `ElementInternals`\n * from other files. A unique symbol is used to access the internals.\n */\nexport interface WithElementInternals {\n /**\n * An instance's `ElementInternals`.\n */\n [internals]: ElementInternals;\n}\n\n// Private symbols\nconst privateInternals = Symbol('privateInternals');\n\n/**\n * Mixes in an attached `ElementInternals` instance.\n *\n * This mixin is only needed when other shared code needs access to a\n * component's `ElementInternals`, such as form-associated mixins.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `WithElementInternals` mixed in.\n */\nexport function mixinElementInternals<T extends MixinBase<LitElement>>(\n base: T,\n): MixinReturn<T, WithElementInternals> {\n abstract class WithElementInternalsElement\n extends base\n implements WithElementInternals\n {\n static {\n polyfillARIAMixin(\n WithElementInternalsElement as unknown as typeof LitElement,\n );\n }\n\n get [internals]() {\n // Create internals in getter so that it can be used in methods called on\n // construction in `ReactiveElement`, such as `requestUpdate()`.\n if (!this[privateInternals]) {\n // Cast needed for closure\n this[privateInternals] = polyfillElementInternalsAria(\n this,\n (this as HTMLElement).attachInternals(),\n );\n }\n\n return this[privateInternals];\n }\n\n [privateInternals]?: ElementInternals;\n }\n\n return WithElementInternalsElement;\n}\n"]}