@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
@@ -0,0 +1,39 @@
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
+ * An element that can enable and disable `tabindex` focusability.
10
+ */
11
+ export interface Focusable {
12
+ /**
13
+ * Whether or not the element can be focused. Defaults to true. Set to false
14
+ * to disable focusing (unless a user has set a `tabindex`).
15
+ */
16
+ [isFocusable]: boolean;
17
+ }
18
+ /**
19
+ * A property symbol that indicates whether or not a `Focusable` element can be
20
+ * focused.
21
+ */
22
+ export declare const isFocusable: unique symbol;
23
+ /**
24
+ * Mixes in focusable functionality for a class.
25
+ *
26
+ * Elements can enable and disable their focusability with the `isFocusable`
27
+ * symbol property. Changing `tabIndex` will trigger a lit render, meaning
28
+ * `this.tabIndex` can be used in template expressions.
29
+ *
30
+ * This mixin will preserve externally-set tabindices. If an element turns off
31
+ * focusability, but a user sets `tabindex="0"`, it will still be focusable.
32
+ *
33
+ * To remove user overrides and restore focusability control to the element,
34
+ * remove the `tabindex` attribute.
35
+ *
36
+ * @param base The class to mix functionality into.
37
+ * @return The provided class with `Focusable` mixed in.
38
+ */
39
+ export declare function mixinFocusable<T extends MixinBase<LitElement>>(base: T): MixinReturn<T, Focusable>;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { __decorate } from "tslib";
7
+ import { property } from 'lit/decorators.js';
8
+ /**
9
+ * A property symbol that indicates whether or not a `Focusable` element can be
10
+ * focused.
11
+ */
12
+ export const isFocusable = Symbol('isFocusable');
13
+ const privateIsFocusable = Symbol('privateIsFocusable');
14
+ const externalTabIndex = Symbol('externalTabIndex');
15
+ const isUpdatingTabIndex = Symbol('isUpdatingTabIndex');
16
+ const updateTabIndex = Symbol('updateTabIndex');
17
+ /**
18
+ * Mixes in focusable functionality for a class.
19
+ *
20
+ * Elements can enable and disable their focusability with the `isFocusable`
21
+ * symbol property. Changing `tabIndex` will trigger a lit render, meaning
22
+ * `this.tabIndex` can be used in template expressions.
23
+ *
24
+ * This mixin will preserve externally-set tabindices. If an element turns off
25
+ * focusability, but a user sets `tabindex="0"`, it will still be focusable.
26
+ *
27
+ * To remove user overrides and restore focusability control to the element,
28
+ * remove the `tabindex` attribute.
29
+ *
30
+ * @param base The class to mix functionality into.
31
+ * @return The provided class with `Focusable` mixed in.
32
+ */
33
+ export function mixinFocusable(base) {
34
+ var _a, _b, _c;
35
+ class FocusableElement extends base {
36
+ get [isFocusable]() {
37
+ return this[privateIsFocusable];
38
+ }
39
+ set [isFocusable](value) {
40
+ if (this[isFocusable] === value) {
41
+ return;
42
+ }
43
+ this[privateIsFocusable] = value;
44
+ this[updateTabIndex]();
45
+ }
46
+ // tslint:disable-next-line:no-any
47
+ constructor(...args) {
48
+ super(...args);
49
+ this[_a] = false;
50
+ this[_b] = null;
51
+ this[_c] = false;
52
+ this[isFocusable] = true;
53
+ }
54
+ attributeChangedCallback(name, old, value) {
55
+ super.attributeChangedCallback(name, old, value);
56
+ if (name !== 'tabindex' || this[isUpdatingTabIndex]) {
57
+ return;
58
+ }
59
+ if (!this.hasAttribute('tabindex')) {
60
+ // User removed the attribute, can now use internal tabIndex
61
+ this[externalTabIndex] = null;
62
+ this[updateTabIndex]();
63
+ return;
64
+ }
65
+ this[externalTabIndex] = this.tabIndex;
66
+ }
67
+ async [(_a = privateIsFocusable, _b = externalTabIndex, _c = isUpdatingTabIndex, updateTabIndex)]() {
68
+ const internalTabIndex = this[isFocusable] ? 0 : -1;
69
+ const computedTabIndex = this[externalTabIndex] ?? internalTabIndex;
70
+ this[isUpdatingTabIndex] = true;
71
+ this.tabIndex = computedTabIndex;
72
+ this.requestUpdate();
73
+ await this.updateComplete;
74
+ this[isUpdatingTabIndex] = false;
75
+ }
76
+ }
77
+ __decorate([
78
+ property({ reflect: true })
79
+ ], FocusableElement.prototype, "tabIndex", void 0);
80
+ return FocusableElement;
81
+ }
82
+ //# sourceMappingURL=focusable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusable.js","sourceRoot":"","sources":["focusable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAGH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAe3C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAEjD,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACxD,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACxD,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAO;;IAEP,MAAe,gBAAiB,SAAQ,IAAI;QAG1C,IAAI,CAAC,WAAW,CAAC;YACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,CAAC,KAAc;YAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE;gBAC/B,OAAO;aACR;YAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACzB,CAAC;QAMD,kCAAkC;QAClC,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YANjB,QAAoB,GAAG,KAAK,CAAC;YAC7B,QAAkB,GAAkB,IAAI,CAAC;YACzC,QAAoB,GAAG,KAAK,CAAC;YAK3B,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC;QAEQ,wBAAwB,CAC/B,IAAY,EACZ,GAAkB,EAClB,KAAoB;YAEpB,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBACnD,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;gBAClC,4DAA4D;gBAC5D,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvB,OAAO;aACR;YAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,OA9BL,kBAAkB,OAClB,gBAAgB,OAChB,kBAAkB,EA4BZ,cAAc,EAAC;YACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC;YAEpE,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC;KACF;IAvDoC;QAAlC,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;sDAA0B;IAyDtD,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {LitElement} from 'lit';\nimport {property} from 'lit/decorators.js';\n\nimport {MixinBase, MixinReturn} from './mixin.js';\n\n/**\n * An element that can enable and disable `tabindex` focusability.\n */\nexport interface Focusable {\n /**\n * Whether or not the element can be focused. Defaults to true. Set to false\n * to disable focusing (unless a user has set a `tabindex`).\n */\n [isFocusable]: boolean;\n}\n\n/**\n * A property symbol that indicates whether or not a `Focusable` element can be\n * focused.\n */\nexport const isFocusable = Symbol('isFocusable');\n\nconst privateIsFocusable = Symbol('privateIsFocusable');\nconst externalTabIndex = Symbol('externalTabIndex');\nconst isUpdatingTabIndex = Symbol('isUpdatingTabIndex');\nconst updateTabIndex = Symbol('updateTabIndex');\n\n/**\n * Mixes in focusable functionality for a class.\n *\n * Elements can enable and disable their focusability with the `isFocusable`\n * symbol property. Changing `tabIndex` will trigger a lit render, meaning\n * `this.tabIndex` can be used in template expressions.\n *\n * This mixin will preserve externally-set tabindices. If an element turns off\n * focusability, but a user sets `tabindex=\"0\"`, it will still be focusable.\n *\n * To remove user overrides and restore focusability control to the element,\n * remove the `tabindex` attribute.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `Focusable` mixed in.\n */\nexport function mixinFocusable<T extends MixinBase<LitElement>>(\n base: T,\n): MixinReturn<T, Focusable> {\n abstract class FocusableElement extends base implements Focusable {\n @property({reflect: true}) declare tabIndex: number;\n\n get [isFocusable]() {\n return this[privateIsFocusable];\n }\n\n set [isFocusable](value: boolean) {\n if (this[isFocusable] === value) {\n return;\n }\n\n this[privateIsFocusable] = value;\n this[updateTabIndex]();\n }\n\n [privateIsFocusable] = false;\n [externalTabIndex]: number | null = null;\n [isUpdatingTabIndex] = false;\n\n // tslint:disable-next-line:no-any\n constructor(...args: any[]) {\n super(...args);\n this[isFocusable] = true;\n }\n\n override attributeChangedCallback(\n name: string,\n old: string | null,\n value: string | null,\n ) {\n super.attributeChangedCallback(name, old, value);\n if (name !== 'tabindex' || this[isUpdatingTabIndex]) {\n return;\n }\n\n if (!this.hasAttribute('tabindex')) {\n // User removed the attribute, can now use internal tabIndex\n this[externalTabIndex] = null;\n this[updateTabIndex]();\n return;\n }\n\n this[externalTabIndex] = this.tabIndex;\n }\n\n async [updateTabIndex]() {\n const internalTabIndex = this[isFocusable] ? 0 : -1;\n const computedTabIndex = this[externalTabIndex] ?? internalTabIndex;\n\n this[isUpdatingTabIndex] = true;\n this.tabIndex = computedTabIndex;\n this.requestUpdate();\n await this.updateComplete;\n this[isUpdatingTabIndex] = false;\n }\n }\n\n return FocusableElement;\n}\n"]}
@@ -0,0 +1,199 @@
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 { MixinBase, MixinReturn } from './mixin.js';
9
+ /**
10
+ * A form-associated element.
11
+ *
12
+ * IMPORTANT: Requires declares for lit-analyzer
13
+ * @example
14
+ * ```ts
15
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
16
+ * class MyControl extends base {
17
+ * // Writable mixin properties for lit-html binding, needed for lit-analyzer
18
+ * declare disabled: boolean;
19
+ * declare name: string;
20
+ * }
21
+ * ```
22
+ */
23
+ export interface FormAssociated {
24
+ /**
25
+ * The associated form element with which this element's value will submit.
26
+ */
27
+ readonly form: HTMLFormElement | null;
28
+ /**
29
+ * The labels this element is associated with.
30
+ */
31
+ readonly labels: NodeList;
32
+ /**
33
+ * The HTML name to use in form submission.
34
+ */
35
+ name: string;
36
+ /**
37
+ * Whether or not the element is disabled.
38
+ */
39
+ disabled: boolean;
40
+ /**
41
+ * Gets the current form value of a component.
42
+ *
43
+ * @return The current form value.
44
+ */
45
+ [getFormValue](): FormValue | null;
46
+ /**
47
+ * Gets the current form state of a component. Defaults to the component's
48
+ * `[formValue]`.
49
+ *
50
+ * Use this when the state of an element is different from its value, such as
51
+ * checkboxes (internal boolean state and a user string value).
52
+ *
53
+ * @return The current form state, defaults to the form value.
54
+ */
55
+ [getFormState](): FormValue | null;
56
+ /**
57
+ * A callback for when a form component should be disabled or enabled. This
58
+ * can be called in a variety of situations, such as disabled `<fieldset>`s.
59
+ *
60
+ * @param disabled Whether or not the form control should be disabled.
61
+ */
62
+ formDisabledCallback(disabled: boolean): void;
63
+ /**
64
+ * A callback for when the form requests to reset its value. Typically, the
65
+ * default value that is reset is represented in the attribute of an element.
66
+ *
67
+ * This means the attribute used for the value should not update as the value
68
+ * changes. For example, a checkbox should not change its default `checked`
69
+ * attribute when selected. Ensure form values do not reflect.
70
+ */
71
+ formResetCallback(): void;
72
+ /**
73
+ * A callback for when the form restores the state of a component. For
74
+ * example, when a page is reloaded or forms are autofilled.
75
+ *
76
+ * @param state The state to restore, or null to reset the form control's
77
+ * value.
78
+ * @param reason The reason state was restored, either `'restore'` or
79
+ * `'autocomplete'`.
80
+ */
81
+ formStateRestoreCallback(state: FormRestoreState | null, reason: FormRestoreReason): void;
82
+ /**
83
+ * An optional callback for when the associated form changes.
84
+ *
85
+ * @param form The new associated form, or `null` if there is none.
86
+ */
87
+ formAssociatedCallback?(form: HTMLFormElement | null): void;
88
+ }
89
+ /**
90
+ * The constructor of a `FormAssociated` element.
91
+ */
92
+ export interface FormAssociatedConstructor {
93
+ /**
94
+ * Indicates that an element is participating in form association.
95
+ */
96
+ readonly formAssociated: true;
97
+ }
98
+ /**
99
+ * A symbol property to retrieve the form value for an element.
100
+ */
101
+ export declare const getFormValue: unique symbol;
102
+ /**
103
+ * A symbol property to retrieve the form state for an element.
104
+ */
105
+ export declare const getFormState: unique symbol;
106
+ /**
107
+ * Mixes in form-associated behavior for a class. This allows an element to add
108
+ * values to `<form>` elements.
109
+ *
110
+ * Implementing classes should provide a `[formValue]` to return the current
111
+ * value of the element, as well as reset and restore callbacks.
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
116
+ *
117
+ * class MyControl extends base {
118
+ * \@property()
119
+ * value = '';
120
+ *
121
+ * override [getFormValue]() {
122
+ * return this.value;
123
+ * }
124
+ *
125
+ * override formResetCallback() {
126
+ * const defaultValue = this.getAttribute('value');
127
+ * this.value = defaultValue;
128
+ * }
129
+ *
130
+ * override formStateRestoreCallback(state: string) {
131
+ * this.value = state;
132
+ * }
133
+ * }
134
+ * ```
135
+ *
136
+ * Elements may optionally provide a `[formState]` if their values do not
137
+ * represent the state of the component.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
142
+ *
143
+ * class MyCheckbox extends base {
144
+ * \@property()
145
+ * value = 'on';
146
+ *
147
+ * \@property({type: Boolean})
148
+ * checked = false;
149
+ *
150
+ * override [getFormValue]() {
151
+ * return this.checked ? this.value : null;
152
+ * }
153
+ *
154
+ * override [getFormState]() {
155
+ * return String(this.checked);
156
+ * }
157
+ *
158
+ * override formResetCallback() {
159
+ * const defaultValue = this.hasAttribute('checked');
160
+ * this.checked = defaultValue;
161
+ * }
162
+ *
163
+ * override formStateRestoreCallback(state: string) {
164
+ * this.checked = Boolean(state);
165
+ * }
166
+ * }
167
+ * ```
168
+ *
169
+ * IMPORTANT: Requires declares for lit-analyzer
170
+ * @example
171
+ * ```ts
172
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
173
+ * class MyControl extends base {
174
+ * // Writable mixin properties for lit-html binding, needed for lit-analyzer
175
+ * declare disabled: boolean;
176
+ * declare name: string;
177
+ * }
178
+ * ```
179
+ *
180
+ * @param base The class to mix functionality into. The base class must use
181
+ * `mixinElementInternals()`.
182
+ * @return The provided class with `FormAssociated` mixed in.
183
+ */
184
+ export declare function mixinFormAssociated<T extends MixinBase<LitElement & WithElementInternals>>(base: T): MixinReturn<T & FormAssociatedConstructor, FormAssociated>;
185
+ /**
186
+ * A value that can be provided for form submission and state.
187
+ */
188
+ export type FormValue = File | string | FormData;
189
+ /**
190
+ * A value to be restored for a component's form value. If a component's form
191
+ * state is a `FormData` object, its entry list of name and values will be
192
+ * provided.
193
+ */
194
+ export type FormRestoreState = File | string | Array<[string, FormDataEntryValue]>;
195
+ /**
196
+ * The reason a form component is being restored for, either `'restore'` for
197
+ * browser restoration or `'autocomplete'` for restoring user values.
198
+ */
199
+ export type FormRestoreReason = 'restore' | 'autocomplete';
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { __decorate } from "tslib";
7
+ import { property } from 'lit/decorators.js';
8
+ import { internals } from './element-internals.js';
9
+ /**
10
+ * A symbol property to retrieve the form value for an element.
11
+ */
12
+ export const getFormValue = Symbol('getFormValue');
13
+ /**
14
+ * A symbol property to retrieve the form state for an element.
15
+ */
16
+ export const getFormState = Symbol('getFormState');
17
+ /**
18
+ * Mixes in form-associated behavior for a class. This allows an element to add
19
+ * values to `<form>` elements.
20
+ *
21
+ * Implementing classes should provide a `[formValue]` to return the current
22
+ * value of the element, as well as reset and restore callbacks.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
27
+ *
28
+ * class MyControl extends base {
29
+ * \@property()
30
+ * value = '';
31
+ *
32
+ * override [getFormValue]() {
33
+ * return this.value;
34
+ * }
35
+ *
36
+ * override formResetCallback() {
37
+ * const defaultValue = this.getAttribute('value');
38
+ * this.value = defaultValue;
39
+ * }
40
+ *
41
+ * override formStateRestoreCallback(state: string) {
42
+ * this.value = state;
43
+ * }
44
+ * }
45
+ * ```
46
+ *
47
+ * Elements may optionally provide a `[formState]` if their values do not
48
+ * represent the state of the component.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
53
+ *
54
+ * class MyCheckbox extends base {
55
+ * \@property()
56
+ * value = 'on';
57
+ *
58
+ * \@property({type: Boolean})
59
+ * checked = false;
60
+ *
61
+ * override [getFormValue]() {
62
+ * return this.checked ? this.value : null;
63
+ * }
64
+ *
65
+ * override [getFormState]() {
66
+ * return String(this.checked);
67
+ * }
68
+ *
69
+ * override formResetCallback() {
70
+ * const defaultValue = this.hasAttribute('checked');
71
+ * this.checked = defaultValue;
72
+ * }
73
+ *
74
+ * override formStateRestoreCallback(state: string) {
75
+ * this.checked = Boolean(state);
76
+ * }
77
+ * }
78
+ * ```
79
+ *
80
+ * IMPORTANT: Requires declares for lit-analyzer
81
+ * @example
82
+ * ```ts
83
+ * const base = mixinFormAssociated(mixinElementInternals(LitElement));
84
+ * class MyControl extends base {
85
+ * // Writable mixin properties for lit-html binding, needed for lit-analyzer
86
+ * declare disabled: boolean;
87
+ * declare name: string;
88
+ * }
89
+ * ```
90
+ *
91
+ * @param base The class to mix functionality into. The base class must use
92
+ * `mixinElementInternals()`.
93
+ * @return The provided class with `FormAssociated` mixed in.
94
+ */
95
+ export function mixinFormAssociated(base) {
96
+ class FormAssociatedElement extends base {
97
+ get form() {
98
+ return this[internals].form;
99
+ }
100
+ get labels() {
101
+ return this[internals].labels;
102
+ }
103
+ // name attribute must be set synchronously
104
+ get name() {
105
+ return this.getAttribute('name') ?? '';
106
+ }
107
+ set name(name) {
108
+ const prev = this.name;
109
+ // Setting name to null or empty string does not remove the attribute.
110
+ this.setAttribute('name', name);
111
+ // Explicit requestUpdate needed for Lit 2.0
112
+ this.requestUpdate('name', prev);
113
+ }
114
+ // disabled attribute must be set synchronously
115
+ get disabled() {
116
+ return this.hasAttribute('disabled');
117
+ }
118
+ set disabled(disabled) {
119
+ const prev = this.disabled;
120
+ this.toggleAttribute('disabled', disabled);
121
+ // Explicit requestUpdate needed for Lit 2.0
122
+ this.requestUpdate('disabled', prev);
123
+ }
124
+ requestUpdate(name, oldValue, options) {
125
+ super.requestUpdate(name, oldValue, options);
126
+ // If any properties change, update the form value, which may have changed
127
+ // as well.
128
+ // Update the form value synchronously in `requestUpdate()` rather than
129
+ // `update()` or `updated()`, which are async. This is necessary to ensure
130
+ // that form data is updated in time for synchronous event listeners.
131
+ this[internals].setFormValue(this[getFormValue](), this[getFormState]());
132
+ }
133
+ [getFormValue]() {
134
+ // Closure does not allow abstract symbol members, so a default
135
+ // implementation is needed.
136
+ throw new Error('Implement [getFormValue]');
137
+ }
138
+ [getFormState]() {
139
+ return this[getFormValue]();
140
+ }
141
+ formDisabledCallback(disabled) {
142
+ this.disabled = disabled;
143
+ }
144
+ }
145
+ /** @nocollapse */
146
+ FormAssociatedElement.formAssociated = true;
147
+ __decorate([
148
+ property({ reflect: true })
149
+ ], FormAssociatedElement.prototype, "name", null);
150
+ __decorate([
151
+ property({ type: Boolean, reflect: true })
152
+ ], FormAssociatedElement.prototype, "disabled", null);
153
+ return FormAssociatedElement;
154
+ }
155
+ //# sourceMappingURL=form-associated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-associated.js","sourceRoot":"","sources":["form-associated.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAGH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AA0GvE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,MAAM,UAAU,mBAAmB,CAEjC,IAAO;IACP,MAAe,qBAAsB,SAAQ,IAAI;QAI/C,IAAI,IAAI;YACN,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,2CAA2C;QAE3C,IAAI,IAAI;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,IAAY;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,sEAAsE;YACtE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChC,4CAA4C;YAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,+CAA+C;QAE/C,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,QAAQ,CAAC,QAAiB;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3C,4CAA4C;YAC5C,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAEQ,aAAa,CACpB,IAAkB,EAClB,QAAkB,EAClB,OAA6B;YAE7B,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,0EAA0E;YAC1E,WAAW;YACX,uEAAuE;YACvE,0EAA0E;YAC1E,qEAAqE;YACrE,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,CAAC,YAAY,CAAC;YACZ,+DAA+D;YAC/D,4BAA4B;YAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,CAAC,YAAY,CAAC;YACZ,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,CAAC;QAED,oBAAoB,CAAC,QAAiB;YACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;;IA9DD,kBAAkB;IACF,oCAAc,GAAG,IAAI,CAAC;IAYtC;QADC,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;qDAGzB;IAWD;QADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;yDAGxC;IA4CH,OAAO,qBAAqB,CAAC;AAC/B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {LitElement, PropertyDeclaration} from 'lit';\nimport {property} from 'lit/decorators.js';\n\nimport {internals, WithElementInternals} from './element-internals.js';\nimport {MixinBase, MixinReturn} from './mixin.js';\n\n/**\n * A form-associated element.\n *\n * IMPORTANT: Requires declares for lit-analyzer\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n * class MyControl extends base {\n * // Writable mixin properties for lit-html binding, needed for lit-analyzer\n * declare disabled: boolean;\n * declare name: string;\n * }\n * ```\n */\nexport interface FormAssociated {\n /**\n * The associated form element with which this element's value will submit.\n */\n readonly form: HTMLFormElement | null;\n\n /**\n * The labels this element is associated with.\n */\n readonly labels: NodeList;\n\n /**\n * The HTML name to use in form submission.\n */\n name: string;\n\n /**\n * Whether or not the element is disabled.\n */\n disabled: boolean;\n\n /**\n * Gets the current form value of a component.\n *\n * @return The current form value.\n */\n [getFormValue](): FormValue | null;\n\n /**\n * Gets the current form state of a component. Defaults to the component's\n * `[formValue]`.\n *\n * Use this when the state of an element is different from its value, such as\n * checkboxes (internal boolean state and a user string value).\n *\n * @return The current form state, defaults to the form value.\n */\n [getFormState](): FormValue | null;\n\n /**\n * A callback for when a form component should be disabled or enabled. This\n * can be called in a variety of situations, such as disabled `<fieldset>`s.\n *\n * @param disabled Whether or not the form control should be disabled.\n */\n formDisabledCallback(disabled: boolean): void;\n\n /**\n * A callback for when the form requests to reset its value. Typically, the\n * default value that is reset is represented in the attribute of an element.\n *\n * This means the attribute used for the value should not update as the value\n * changes. For example, a checkbox should not change its default `checked`\n * attribute when selected. Ensure form values do not reflect.\n */\n formResetCallback(): void;\n\n /**\n * A callback for when the form restores the state of a component. For\n * example, when a page is reloaded or forms are autofilled.\n *\n * @param state The state to restore, or null to reset the form control's\n * value.\n * @param reason The reason state was restored, either `'restore'` or\n * `'autocomplete'`.\n */\n formStateRestoreCallback(\n state: FormRestoreState | null,\n reason: FormRestoreReason,\n ): void;\n\n /**\n * An optional callback for when the associated form changes.\n *\n * @param form The new associated form, or `null` if there is none.\n */\n formAssociatedCallback?(form: HTMLFormElement | null): void;\n}\n\n/**\n * The constructor of a `FormAssociated` element.\n */\nexport interface FormAssociatedConstructor {\n /**\n * Indicates that an element is participating in form association.\n */\n readonly formAssociated: true;\n}\n\n/**\n * A symbol property to retrieve the form value for an element.\n */\nexport const getFormValue = Symbol('getFormValue');\n\n/**\n * A symbol property to retrieve the form state for an element.\n */\nexport const getFormState = Symbol('getFormState');\n\n/**\n * Mixes in form-associated behavior for a class. This allows an element to add\n * values to `<form>` elements.\n *\n * Implementing classes should provide a `[formValue]` to return the current\n * value of the element, as well as reset and restore callbacks.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyControl extends base {\n * \\@property()\n * value = '';\n *\n * override [getFormValue]() {\n * return this.value;\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.getAttribute('value');\n * this.value = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.value = state;\n * }\n * }\n * ```\n *\n * Elements may optionally provide a `[formState]` if their values do not\n * represent the state of the component.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyCheckbox extends base {\n * \\@property()\n * value = 'on';\n *\n * \\@property({type: Boolean})\n * checked = false;\n *\n * override [getFormValue]() {\n * return this.checked ? this.value : null;\n * }\n *\n * override [getFormState]() {\n * return String(this.checked);\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.hasAttribute('checked');\n * this.checked = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.checked = Boolean(state);\n * }\n * }\n * ```\n *\n * IMPORTANT: Requires declares for lit-analyzer\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n * class MyControl extends base {\n * // Writable mixin properties for lit-html binding, needed for lit-analyzer\n * declare disabled: boolean;\n * declare name: string;\n * }\n * ```\n *\n * @param base The class to mix functionality into. The base class must use\n * `mixinElementInternals()`.\n * @return The provided class with `FormAssociated` mixed in.\n */\nexport function mixinFormAssociated<\n T extends MixinBase<LitElement & WithElementInternals>,\n>(base: T): MixinReturn<T & FormAssociatedConstructor, FormAssociated> {\n abstract class FormAssociatedElement extends base implements FormAssociated {\n /** @nocollapse */\n static readonly formAssociated = true;\n\n get form() {\n return this[internals].form;\n }\n\n get labels() {\n return this[internals].labels;\n }\n\n // name attribute must be set synchronously\n @property({reflect: true})\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name: string) {\n const prev = this.name;\n // Setting name to null or empty string does not remove the attribute.\n this.setAttribute('name', name);\n // Explicit requestUpdate needed for Lit 2.0\n this.requestUpdate('name', prev);\n }\n\n // disabled attribute must be set synchronously\n @property({type: Boolean, reflect: true})\n get disabled() {\n return this.hasAttribute('disabled');\n }\n set disabled(disabled: boolean) {\n const prev = this.disabled;\n this.toggleAttribute('disabled', disabled);\n // Explicit requestUpdate needed for Lit 2.0\n this.requestUpdate('disabled', prev);\n }\n\n override requestUpdate(\n name?: PropertyKey,\n oldValue?: unknown,\n options?: PropertyDeclaration,\n ) {\n super.requestUpdate(name, oldValue, options);\n // If any properties change, update the form value, which may have changed\n // as well.\n // Update the form value synchronously in `requestUpdate()` rather than\n // `update()` or `updated()`, which are async. This is necessary to ensure\n // that form data is updated in time for synchronous event listeners.\n this[internals].setFormValue(this[getFormValue](), this[getFormState]());\n }\n\n [getFormValue](): FormValue | null {\n // Closure does not allow abstract symbol members, so a default\n // implementation is needed.\n throw new Error('Implement [getFormValue]');\n }\n\n [getFormState](): FormValue | null {\n return this[getFormValue]();\n }\n\n formDisabledCallback(disabled: boolean) {\n this.disabled = disabled;\n }\n\n abstract formResetCallback(): void;\n\n abstract formStateRestoreCallback(\n state: FormRestoreState | null,\n reason: FormRestoreReason,\n ): void;\n }\n\n return FormAssociatedElement;\n}\n\n/**\n * A value that can be provided for form submission and state.\n */\nexport type FormValue = File | string | FormData;\n\n/**\n * A value to be restored for a component's form value. If a component's form\n * state is a `FormData` object, its entry list of name and values will be\n * provided.\n */\nexport type FormRestoreState =\n | File\n | string\n | Array<[string, FormDataEntryValue]>;\n\n/**\n * The reason a form component is being restored for, either `'restore'` for\n * browser restoration or `'autocomplete'` for restoring user values.\n */\nexport type FormRestoreReason = 'restore' | 'autocomplete';\n"]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * The base class for a mixin with an optional expected base class type.
8
+ *
9
+ * @template ExpectedBase Optional expected base class type, such as
10
+ * `LitElement`.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * interface Foo {
15
+ * isFoo: boolean;
16
+ * }
17
+ *
18
+ * function mixinFoo<T extends MixinBase>(base: T): MixinReturn<T, Foo> {
19
+ * // Mixins must be `abstract`
20
+ * abstract class FooImpl extends base implements Foo {
21
+ * isFoo = true;
22
+ * }
23
+ *
24
+ * return FooImpl;
25
+ * }
26
+ * ```
27
+ */
28
+ export type MixinBase<ExpectedBase = object> = abstract new (...args: any[]) => ExpectedBase;
29
+ /**
30
+ * The return value of a mixin.
31
+ *
32
+ * @template MixinBase The generic that extends `MixinBase` used for the mixin's
33
+ * base class argument.
34
+ * @template MixinClass Optional interface of fuctionality that was mixed in.
35
+ * Omit if no additional APIs were added (such as purely overriding base
36
+ * class functionality).
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * interface Foo {
41
+ * isFoo: boolean;
42
+ * }
43
+ *
44
+ * // Mixins must be `abstract`
45
+ * function mixinFoo<T extends MixinBase>(base: T): MixinReturn<T, Foo> {
46
+ * abstract class FooImpl extends base implements Foo {
47
+ * isFoo = true;
48
+ * }
49
+ *
50
+ * return FooImpl;
51
+ * }
52
+ * ```
53
+ */
54
+ export type MixinReturn<MixinBase, MixinClass = object> = (abstract new (...args: any[]) => MixinClass) & MixinBase;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixin.js","sourceRoot":"","sources":["mixin.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * The base class for a mixin with an optional expected base class type.\n *\n * @template ExpectedBase Optional expected base class type, such as\n * `LitElement`.\n *\n * @example\n * ```ts\n * interface Foo {\n * isFoo: boolean;\n * }\n *\n * function mixinFoo<T extends MixinBase>(base: T): MixinReturn<T, Foo> {\n * // Mixins must be `abstract`\n * abstract class FooImpl extends base implements Foo {\n * isFoo = true;\n * }\n *\n * return FooImpl;\n * }\n * ```\n */\nexport type MixinBase<ExpectedBase = object> = abstract new (\n // Mixins must have a constructor with `...args: any[]`\n // tslint:disable-next-line:no-any\n ...args: any[]\n) => ExpectedBase;\n\n/**\n * The return value of a mixin.\n *\n * @template MixinBase The generic that extends `MixinBase` used for the mixin's\n * base class argument.\n * @template MixinClass Optional interface of fuctionality that was mixed in.\n * Omit if no additional APIs were added (such as purely overriding base\n * class functionality).\n *\n * @example\n * ```ts\n * interface Foo {\n * isFoo: boolean;\n * }\n *\n * // Mixins must be `abstract`\n * function mixinFoo<T extends MixinBase>(base: T): MixinReturn<T, Foo> {\n * abstract class FooImpl extends base implements Foo {\n * isFoo = true;\n * }\n *\n * return FooImpl;\n * }\n * ```\n */\nexport type MixinReturn<MixinBase, MixinClass = object> =\n // Mixins must have a constructor with `...args: any[]`\n // tslint:disable-next-line:no-any\n (abstract new (...args: any[]) => MixinClass) & MixinBase;\n"]}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { LitElement } from 'lit';
7
+ import { ConstraintValidation } from './constraint-validation.js';
8
+ import { MixinBase, MixinReturn } from './mixin.js';
9
+ /**
10
+ * A constraint validation element that has a callback for when the element
11
+ * should report validity styles and error messages to the user.
12
+ *
13
+ * This is commonly used in text-field-like controls that display error styles
14
+ * and error messages.
15
+ */
16
+ export interface OnReportValidity extends ConstraintValidation {
17
+ /**
18
+ * A callback that is invoked when validity should be reported. Components
19
+ * that can display their own error state can use this and update their
20
+ * styles.
21
+ *
22
+ * If an invalid event is provided, the element is invalid. If `null`, the
23
+ * element is valid.
24
+ *
25
+ * The invalid event's `preventDefault()` may be called to stop the platform
26
+ * popup from displaying.
27
+ *
28
+ * @param invalidEvent The `invalid` event dispatched when an element is
29
+ * invalid, or `null` if the element is valid.
30
+ */
31
+ [onReportValidity](invalidEvent: Event | null): void;
32
+ formAssociatedCallback(form: HTMLFormElement | null): void;
33
+ }
34
+ /**
35
+ * A symbol property used for a callback when validity has been reported.
36
+ */
37
+ export declare const onReportValidity: unique symbol;
38
+ /**
39
+ * Mixes in a callback for constraint validation when validity should be
40
+ * styled and reported to the user.
41
+ *
42
+ * This is commonly used in text-field-like controls that display error styles
43
+ * and error messages.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const baseClass = mixinOnReportValidity(
48
+ * mixinConstraintValidation(
49
+ * mixinFormAssociated(mixinElementInternals(LitElement)),
50
+ * ),
51
+ * );
52
+ *
53
+ * class MyField extends baseClass {
54
+ * \@property({type: Boolean}) error = false;
55
+ * \@property() errorMessage = '';
56
+ *
57
+ * [onReportValidity](invalidEvent: Event | null) {
58
+ * this.error = !!invalidEvent;
59
+ * this.errorMessage = this.validationMessage;
60
+ *
61
+ * // Optionally prevent platform popup from displaying
62
+ * invalidEvent?.preventDefault();
63
+ * }
64
+ * }
65
+ * ```
66
+ *
67
+ * @param base The class to mix functionality into.
68
+ * @return The provided class with `OnReportValidity` mixed in.
69
+ */
70
+ export declare function mixinOnReportValidity<T extends MixinBase<LitElement & ConstraintValidation>>(base: T): MixinReturn<T, OnReportValidity>;