@material/web 1.0.1 → 1.0.2-nightly.8eb1f30.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 (314) 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.d.ts +18 -25
  33. package/checkbox/internal/checkbox.js +43 -74
  34. package/checkbox/internal/checkbox.js.map +1 -1
  35. package/chips/filter-chip.js +5 -1
  36. package/chips/filter-chip.js.map +1 -1
  37. package/chips/harness.js.map +1 -1
  38. package/chips/input-chip.js +6 -1
  39. package/chips/input-chip.js.map +1 -1
  40. package/chips/internal/assist-chip.js +8 -4
  41. package/chips/internal/assist-chip.js.map +1 -1
  42. package/chips/internal/chip-set.js +6 -4
  43. package/chips/internal/chip-set.js.map +1 -1
  44. package/chips/internal/chip.d.ts +3 -0
  45. package/chips/internal/chip.js +7 -5
  46. package/chips/internal/chip.js.map +1 -1
  47. package/chips/internal/filter-chip.d.ts +2 -0
  48. package/chips/internal/filter-chip.js +11 -5
  49. package/chips/internal/filter-chip.js.map +1 -1
  50. package/chips/internal/input-chip.d.ts +2 -0
  51. package/chips/internal/input-chip.js +10 -4
  52. package/chips/internal/input-chip.js.map +1 -1
  53. package/chips/internal/multi-action-chip.js.map +1 -1
  54. package/chips/internal/trailing-icons.d.ts +1 -1
  55. package/chips/internal/trailing-icons.js +6 -5
  56. package/chips/internal/trailing-icons.js.map +1 -1
  57. package/common.d.ts +2 -0
  58. package/common.js +2 -0
  59. package/common.js.map +1 -1
  60. package/dialog/harness.js +1 -2
  61. package/dialog/harness.js.map +1 -1
  62. package/dialog/internal/_dialog.scss +1 -1
  63. package/dialog/internal/animations.js +14 -12
  64. package/dialog/internal/animations.js.map +1 -1
  65. package/dialog/internal/dialog-styles.css.js +1 -1
  66. package/dialog/internal/dialog-styles.css.js.map +1 -1
  67. package/dialog/internal/dialog.d.ts +6 -6
  68. package/dialog/internal/dialog.js +24 -24
  69. package/dialog/internal/dialog.js.map +1 -1
  70. package/fab/harness.js.map +1 -1
  71. package/fab/internal/fab.js.map +1 -1
  72. package/fab/internal/shared.js +10 -11
  73. package/fab/internal/shared.js.map +1 -1
  74. package/field/harness.js.map +1 -1
  75. package/field/internal/_content.scss +185 -174
  76. package/field/internal/_filled-field.scss +147 -136
  77. package/field/internal/_label.scss +83 -72
  78. package/field/internal/_outlined-field.scss +276 -262
  79. package/field/internal/_supporting-text.scss +53 -42
  80. package/field/internal/field.js +26 -22
  81. package/field/internal/field.js.map +1 -1
  82. package/field/internal/filled-styles.css.js +1 -1
  83. package/field/internal/filled-styles.css.js.map +1 -1
  84. package/field/internal/outlined-styles.css.js +1 -1
  85. package/field/internal/outlined-styles.css.js.map +1 -1
  86. package/field/internal/shared-styles.css.js +1 -1
  87. package/field/internal/shared-styles.css.js.map +1 -1
  88. package/focus/internal/focus-ring.d.ts +2 -0
  89. package/focus/internal/focus-ring.js +3 -3
  90. package/focus/internal/focus-ring.js.map +1 -1
  91. package/icon/internal/_icon.scss +7 -4
  92. package/icon/internal/icon-styles.css.js +1 -1
  93. package/icon/internal/icon-styles.css.js.map +1 -1
  94. package/iconbutton/internal/icon-button.d.ts +9 -4
  95. package/iconbutton/internal/icon-button.js +35 -22
  96. package/iconbutton/internal/icon-button.js.map +1 -1
  97. package/internal/aria/aria.d.ts +4 -26
  98. package/internal/aria/aria.js +10 -28
  99. package/internal/aria/aria.js.map +1 -1
  100. package/internal/aria/delegate.js +2 -2
  101. package/internal/aria/delegate.js.map +1 -1
  102. package/internal/controller/attachable-controller.js +3 -5
  103. package/internal/controller/attachable-controller.js.map +1 -1
  104. package/internal/controller/form-submitter.d.ts +3 -5
  105. package/internal/controller/form-submitter.js +5 -7
  106. package/internal/controller/form-submitter.js.map +1 -1
  107. package/internal/controller/is-rtl.js +2 -2
  108. package/internal/controller/is-rtl.js.map +1 -1
  109. package/internal/controller/string-converter.js +1 -1
  110. package/internal/controller/string-converter.js.map +1 -1
  111. package/internal/motion/animation.js.map +1 -1
  112. package/labs/behaviors/element-internals.d.ts +45 -0
  113. package/labs/behaviors/element-internals.js +50 -0
  114. package/labs/behaviors/element-internals.js.map +1 -0
  115. package/labs/behaviors/focusable.d.ts +39 -0
  116. package/labs/behaviors/focusable.js +82 -0
  117. package/labs/behaviors/focusable.js.map +1 -0
  118. package/labs/behaviors/form-associated.d.ts +199 -0
  119. package/labs/behaviors/form-associated.js +155 -0
  120. package/labs/behaviors/form-associated.js.map +1 -0
  121. package/labs/behaviors/mixin.d.ts +54 -0
  122. package/labs/behaviors/mixin.js +7 -0
  123. package/labs/behaviors/mixin.js.map +1 -0
  124. package/labs/behaviors/validators/checkbox-validator.d.ts +32 -0
  125. package/labs/behaviors/validators/checkbox-validator.js +32 -0
  126. package/labs/behaviors/validators/checkbox-validator.js.map +1 -0
  127. package/labs/behaviors/validators/validator.d.ts +92 -0
  128. package/labs/behaviors/validators/validator.js +73 -0
  129. package/labs/behaviors/validators/validator.js.map +1 -0
  130. package/labs/card/_elevated-card.scss +6 -0
  131. package/labs/card/_filled-card.scss +6 -0
  132. package/labs/card/_outlined-card.scss +6 -0
  133. package/labs/card/elevated-card.d.ts +18 -0
  134. package/labs/card/elevated-card.js +21 -0
  135. package/labs/card/elevated-card.js.map +1 -0
  136. package/labs/card/filled-card.d.ts +18 -0
  137. package/labs/card/filled-card.js +21 -0
  138. package/labs/card/filled-card.js.map +1 -0
  139. package/labs/card/internal/_elevated-card.scss +35 -0
  140. package/labs/card/internal/_filled-card.scss +35 -0
  141. package/labs/card/internal/_outlined-card.scss +39 -0
  142. package/labs/card/internal/_shared.scss +40 -0
  143. package/labs/card/internal/card.d.ts +13 -0
  144. package/labs/card/internal/card.js +20 -0
  145. package/labs/card/internal/card.js.map +1 -0
  146. package/labs/card/internal/elevated-styles.css.js +9 -0
  147. package/labs/card/internal/elevated-styles.css.js.map +1 -0
  148. package/labs/card/internal/elevated-styles.scss +10 -0
  149. package/labs/card/internal/filled-styles.css.js +9 -0
  150. package/labs/card/internal/filled-styles.css.js.map +1 -0
  151. package/labs/card/internal/filled-styles.scss +10 -0
  152. package/labs/card/internal/outlined-styles.css.js +9 -0
  153. package/labs/card/internal/outlined-styles.css.js.map +1 -0
  154. package/labs/card/internal/outlined-styles.scss +10 -0
  155. package/labs/card/internal/shared-styles.css.js +9 -0
  156. package/labs/card/internal/shared-styles.css.js.map +1 -0
  157. package/labs/card/internal/shared-styles.scss +10 -0
  158. package/labs/card/outlined-card.d.ts +18 -0
  159. package/labs/card/outlined-card.js +21 -0
  160. package/labs/card/outlined-card.js.map +1 -0
  161. package/labs/item/internal/item.js +8 -8
  162. package/labs/item/internal/item.js.map +1 -1
  163. package/labs/navigationbar/internal/constants.js.map +1 -1
  164. package/labs/navigationbar/internal/navigation-bar.d.ts +3 -0
  165. package/labs/navigationbar/internal/navigation-bar.js +18 -11
  166. package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
  167. package/labs/navigationdrawer/internal/navigation-drawer-modal.d.ts +3 -0
  168. package/labs/navigationdrawer/internal/navigation-drawer-modal.js +10 -3
  169. package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
  170. package/labs/navigationdrawer/internal/navigation-drawer.d.ts +3 -0
  171. package/labs/navigationdrawer/internal/navigation-drawer.js +8 -1
  172. package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
  173. package/labs/navigationtab/harness.js.map +1 -1
  174. package/labs/navigationtab/internal/navigation-tab.d.ts +6 -0
  175. package/labs/navigationtab/internal/navigation-tab.js +43 -27
  176. package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
  177. package/labs/navigationtab/internal/state.js.map +1 -1
  178. package/labs/segmentedbutton/internal/segmented-button.d.ts +3 -0
  179. package/labs/segmentedbutton/internal/segmented-button.js +26 -12
  180. package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
  181. package/labs/segmentedbuttonset/internal/segmented-button-set.d.ts +5 -0
  182. package/labs/segmentedbuttonset/internal/segmented-button-set.js +14 -9
  183. package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
  184. package/list/harness.d.ts +1 -1
  185. package/list/harness.js.map +1 -1
  186. package/list/internal/list-controller.d.ts +1 -1
  187. package/list/internal/list-controller.js +7 -3
  188. package/list/internal/list-controller.js.map +1 -1
  189. package/list/internal/list-navigation-helpers.js.map +1 -1
  190. package/list/internal/list.d.ts +2 -2
  191. package/list/internal/list.js +8 -6
  192. package/list/internal/list.js.map +1 -1
  193. package/list/internal/listitem/harness.d.ts +1 -1
  194. package/list/internal/listitem/harness.js.map +1 -1
  195. package/list/internal/listitem/list-item.d.ts +3 -2
  196. package/list/internal/listitem/list-item.js +19 -20
  197. package/list/internal/listitem/list-item.js.map +1 -1
  198. package/list/list-item.d.ts +4 -12
  199. package/list/list-item.js +4 -12
  200. package/list/list-item.js.map +1 -1
  201. package/menu/harness.js.map +1 -1
  202. package/menu/internal/_menu.scss +12 -1
  203. package/menu/internal/controllers/menuItemController.js +9 -4
  204. package/menu/internal/controllers/menuItemController.js.map +1 -1
  205. package/menu/internal/controllers/shared.d.ts +9 -1
  206. package/menu/internal/controllers/shared.js +4 -4
  207. package/menu/internal/controllers/shared.js.map +1 -1
  208. package/menu/internal/controllers/surfacePositionController.d.ts +15 -2
  209. package/menu/internal/controllers/surfacePositionController.js +124 -54
  210. package/menu/internal/controllers/surfacePositionController.js.map +1 -1
  211. package/menu/internal/controllers/typeaheadController.js +19 -14
  212. package/menu/internal/controllers/typeaheadController.js.map +1 -1
  213. package/menu/internal/menu-styles.css.js +1 -1
  214. package/menu/internal/menu-styles.css.js.map +1 -1
  215. package/menu/internal/menu.d.ts +43 -12
  216. package/menu/internal/menu.js +124 -57
  217. package/menu/internal/menu.js.map +1 -1
  218. package/menu/internal/menuitem/harness.js.map +1 -1
  219. package/menu/internal/menuitem/menu-item.d.ts +3 -2
  220. package/menu/internal/menuitem/menu-item.js +18 -19
  221. package/menu/internal/menuitem/menu-item.js.map +1 -1
  222. package/menu/internal/submenu/sub-menu.d.ts +8 -8
  223. package/menu/internal/submenu/sub-menu.js +31 -22
  224. package/menu/internal/submenu/sub-menu.js.map +1 -1
  225. package/menu/internal/types.js.map +1 -1
  226. package/package.json +1 -1
  227. package/progress/internal/_circular-progress.scss +2 -2
  228. package/progress/internal/_linear-progress.scss +1 -1
  229. package/progress/internal/circular-progress-styles.css.js +1 -1
  230. package/progress/internal/circular-progress-styles.css.js.map +1 -1
  231. package/progress/internal/circular-progress.js +11 -10
  232. package/progress/internal/circular-progress.js.map +1 -1
  233. package/progress/internal/linear-progress-styles.css.js +1 -1
  234. package/progress/internal/linear-progress-styles.css.js.map +1 -1
  235. package/progress/internal/linear-progress.d.ts +1 -1
  236. package/progress/internal/linear-progress.js +3 -3
  237. package/progress/internal/linear-progress.js.map +1 -1
  238. package/progress/internal/progress.js +4 -2
  239. package/progress/internal/progress.js.map +1 -1
  240. package/radio/internal/radio.d.ts +11 -27
  241. package/radio/internal/radio.js +30 -54
  242. package/radio/internal/radio.js.map +1 -1
  243. package/radio/internal/single-selection-controller.js +1 -1
  244. package/radio/internal/single-selection-controller.js.map +1 -1
  245. package/ripple/internal/ripple.js +14 -9
  246. package/ripple/internal/ripple.js.map +1 -1
  247. package/select/filled-select.js +1 -2
  248. package/select/filled-select.js.map +1 -1
  249. package/select/harness.js +1 -1
  250. package/select/harness.js.map +1 -1
  251. package/select/internal/select.d.ts +25 -34
  252. package/select/internal/select.js +101 -91
  253. package/select/internal/select.js.map +1 -1
  254. package/select/internal/selectoption/select-option.d.ts +8 -6
  255. package/select/internal/selectoption/select-option.js +23 -22
  256. package/select/internal/selectoption/select-option.js.map +1 -1
  257. package/select/internal/selectoption/selectOptionController.js +1 -1
  258. package/select/internal/selectoption/selectOptionController.js.map +1 -1
  259. package/select/outlined-select.js +1 -2
  260. package/select/outlined-select.js.map +1 -1
  261. package/slider/harness.js +5 -5
  262. package/slider/harness.js.map +1 -1
  263. package/slider/internal/slider.d.ts +16 -25
  264. package/slider/internal/slider.js +110 -114
  265. package/slider/internal/slider.js.map +1 -1
  266. package/switch/internal/switch.d.ts +11 -27
  267. package/switch/internal/switch.js +40 -80
  268. package/switch/internal/switch.js.map +1 -1
  269. package/tabs/harness.js +3 -3
  270. package/tabs/harness.js.map +1 -1
  271. package/tabs/internal/_tab.scss +27 -35
  272. package/tabs/internal/primary-tab.d.ts +0 -2
  273. package/tabs/internal/tab-styles.css.js +1 -1
  274. package/tabs/internal/tab-styles.css.js.map +1 -1
  275. package/tabs/internal/tab.d.ts +4 -5
  276. package/tabs/internal/tab.js +34 -22
  277. package/tabs/internal/tab.js.map +1 -1
  278. package/tabs/internal/tabs.d.ts +6 -2
  279. package/tabs/internal/tabs.js +18 -11
  280. package/tabs/internal/tabs.js.map +1 -1
  281. package/textfield/filled-text-field.js +1 -2
  282. package/textfield/filled-text-field.js.map +1 -1
  283. package/textfield/harness.js +3 -2
  284. package/textfield/harness.js.map +1 -1
  285. package/textfield/internal/text-field.d.ts +26 -18
  286. package/textfield/internal/text-field.js +81 -58
  287. package/textfield/internal/text-field.js.map +1 -1
  288. package/textfield/outlined-text-field.js +1 -2
  289. package/textfield/outlined-text-field.js.map +1 -1
  290. package/tokens/_index.scss +3 -0
  291. package/tokens/_md-comp-elevated-card.scss +63 -0
  292. package/tokens/_md-comp-filled-card.scss +63 -0
  293. package/tokens/_md-comp-icon.scss +2 -0
  294. package/tokens/_md-comp-outlined-card.scss +69 -0
  295. package/tokens/_md-comp-test-table.scss +1 -0
  296. package/internal/controller/element-internals.d.ts +0 -35
  297. package/internal/controller/element-internals.js +0 -24
  298. package/internal/controller/element-internals.js.map +0 -1
  299. package/select/internal/filled-forced-colors-styles.css.js +0 -9
  300. package/select/internal/filled-forced-colors-styles.css.js.map +0 -1
  301. package/select/internal/filled-forced-colors-styles.scss +0 -29
  302. package/select/internal/outlined-forced-colors-styles.css.js +0 -9
  303. package/select/internal/outlined-forced-colors-styles.css.js.map +0 -1
  304. package/select/internal/outlined-forced-colors-styles.scss +0 -29
  305. package/textfield/internal/filled-forced-colors-styles.css.js +0 -9
  306. package/textfield/internal/filled-forced-colors-styles.css.js.map +0 -1
  307. package/textfield/internal/filled-forced-colors-styles.scss +0 -29
  308. package/textfield/internal/outlined-forced-colors-styles.css.js +0 -9
  309. package/textfield/internal/outlined-forced-colors-styles.css.js.map +0 -1
  310. package/textfield/internal/outlined-forced-colors-styles.scss +0 -29
  311. /package/{select/internal/filled-forced-colors-styles.css.d.ts → labs/card/internal/elevated-styles.css.d.ts} +0 -0
  312. /package/{select/internal/outlined-forced-colors-styles.css.d.ts → labs/card/internal/filled-styles.css.d.ts} +0 -0
  313. /package/{textfield/internal/filled-forced-colors-styles.css.d.ts → labs/card/internal/outlined-styles.css.d.ts} +0 -0
  314. /package/{textfield/internal/outlined-forced-colors-styles.css.d.ts → labs/card/internal/shared-styles.css.d.ts} +0 -0
@@ -7,7 +7,6 @@ import { __decorate } from "tslib";
7
7
  import '../field/filled-field.js';
8
8
  import { customElement } from 'lit/decorators.js';
9
9
  import { literal } from 'lit/static-html.js';
10
- import { styles as filledForcedColorsStyles } from './internal/filled-forced-colors-styles.css.js';
11
10
  import { styles as filledStyles } from './internal/filled-styles.css.js';
12
11
  import { FilledTextField } from './internal/filled-text-field.js';
13
12
  import { styles as sharedStyles } from './internal/shared-styles.css.js';
@@ -22,7 +21,7 @@ export let MdFilledTextField = class MdFilledTextField extends FilledTextField {
22
21
  this.fieldTag = literal `md-filled-field`;
23
22
  }
24
23
  };
25
- MdFilledTextField.styles = [sharedStyles, filledStyles, filledForcedColorsStyles];
24
+ MdFilledTextField.styles = [sharedStyles, filledStyles];
26
25
  MdFilledTextField = __decorate([
27
26
  customElement('md-filled-text-field')
28
27
  ], MdFilledTextField);
@@ -1 +1 @@
1
- {"version":3,"file":"filled-text-field.js","sourceRoot":"","sources":["filled-text-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAC,MAAM,IAAI,wBAAwB,EAAC,MAAM,+CAA+C,CAAC;AACjG,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,iCAAiC,CAAC;AAUvE;;;;GAIG;AAEI,WAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,eAAe;IAA/C;;QAIuB,aAAQ,GAAG,OAAO,CAAA,iBAAiB,CAAC;IAClE,CAAC;;AAJiB,wBAAM,GAClB,CAAC,YAAY,EAAE,YAAY,EAAE,wBAAwB,CAAC,AADpC,CACqC;AAFhD,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAK7B","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../field/filled-field.js';\n\nimport {customElement} from 'lit/decorators.js';\nimport {literal} from 'lit/static-html.js';\n\nimport {styles as filledForcedColorsStyles} from './internal/filled-forced-colors-styles.css.js';\nimport {styles as filledStyles} from './internal/filled-styles.css.js';\nimport {FilledTextField} from './internal/filled-text-field.js';\nimport {styles as sharedStyles} from './internal/shared-styles.css.js';\n\nexport {TextFieldType} from './internal/text-field.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-filled-text-field': MdFilledTextField;\n }\n}\n\n/**\n * TODO(b/228525797): Add docs\n * @final\n * @suppress {visibility}\n */\n@customElement('md-filled-text-field')\nexport class MdFilledTextField extends FilledTextField {\n static override styles =\n [sharedStyles, filledStyles, filledForcedColorsStyles];\n\n protected override readonly fieldTag = literal`md-filled-field`;\n}\n"]}
1
+ {"version":3,"file":"filled-text-field.js","sourceRoot":"","sources":["filled-text-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,iCAAiC,CAAC;AAUvE;;;;GAIG;AAEI,WAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,eAAe;IAA/C;;QAGuB,aAAQ,GAAG,OAAO,CAAA,iBAAiB,CAAC;IAClE,CAAC;;AAHiB,wBAAM,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,AAA/B,CAAgC;AAD3C,iBAAiB;IAD7B,aAAa,CAAC,sBAAsB,CAAC;GACzB,iBAAiB,CAI7B","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../field/filled-field.js';\n\nimport {customElement} from 'lit/decorators.js';\nimport {literal} from 'lit/static-html.js';\n\nimport {styles as filledStyles} from './internal/filled-styles.css.js';\nimport {FilledTextField} from './internal/filled-text-field.js';\nimport {styles as sharedStyles} from './internal/shared-styles.css.js';\n\nexport {TextFieldType} from './internal/text-field.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-filled-text-field': MdFilledTextField;\n }\n}\n\n/**\n * TODO(b/228525797): Add docs\n * @final\n * @suppress {visibility}\n */\n@customElement('md-filled-text-field')\nexport class MdFilledTextField extends FilledTextField {\n static override styles = [sharedStyles, filledStyles];\n\n protected override readonly fieldTag = literal`md-filled-field`;\n}\n"]}
@@ -83,8 +83,9 @@ export class TextFieldHarness extends Harness {
83
83
  }
84
84
  simulateDeletion(element, beginIndex, endIndex, init) {
85
85
  const deletedCharacters = element.value.slice(beginIndex, endIndex);
86
- element.value = element.value.substring(0, beginIndex ?? 0) +
87
- element.value.substring(endIndex ?? element.value.length);
86
+ element.value =
87
+ element.value.substring(0, beginIndex ?? 0) +
88
+ element.value.substring(endIndex ?? element.value.length);
88
89
  if (!init) {
89
90
  init = {
90
91
  inputType: 'deleteContentBackward',
@@ -1 +1 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["harness.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {Harness} from '../testing/harness.js';\n\nimport {TextField} from './internal/text-field.js';\n\n/**\n * Test harness for text field elements.\n */\nexport class TextFieldHarness extends Harness<TextField> {\n /** Used to track whether or not a change event should be dispatched. */\n private valueBeforeChange = '';\n\n /**\n * Simulates a user typing a value one character at a time. This will fire\n * multiple input events.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.inputValue('value'); // input events\n * await harness.blur(); // change event\n *\n * @param value The value to simulating typing.\n */\n async inputValue(value: string) {\n for (const char of value) {\n this.simulateKeypress(await this.getInteractiveElement(), char);\n this.simulateInput(await this.getInteractiveElement(), char);\n }\n }\n\n /**\n * Simulates a user deleting part of a value with the backspace key.\n * By default, the entire value is deleted. This will fire a single input\n * event.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.deleteValue(); // input event\n * await harness.blur(); // change event\n *\n * @param beginIndex The starting index of the value to delete.\n * @param endIndex The ending index of the value to delete.\n */\n async deleteValue(beginIndex?: number, endIndex?: number) {\n this.simulateKeypress(await this.getInteractiveElement(), 'Backspace');\n this.simulateDeletion(\n await this.getInteractiveElement(), beginIndex, endIndex);\n }\n\n override async reset() {\n this.element.reset();\n this.valueBeforeChange = this.element.value;\n await super.reset();\n }\n\n override async blur() {\n await super.blur();\n this.simulateChangeIfNeeded(await this.getInteractiveElement());\n }\n\n protected override simulatePointerFocus(input: HTMLElement) {\n const textField = this.element;\n if (textField.disabled) {\n return;\n }\n\n this.valueBeforeChange = textField.value;\n super.simulatePointerFocus(input);\n }\n\n protected simulateInput(\n element: HTMLInputElement|HTMLTextAreaElement, charactersToAppend: string,\n init?: InputEventInit) {\n element.value += charactersToAppend;\n if (!init) {\n init = {\n inputType: 'insertText',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: charactersToAppend,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateDeletion(\n element: HTMLInputElement|HTMLTextAreaElement, beginIndex?: number,\n endIndex?: number, init?: InputEventInit) {\n const deletedCharacters = element.value.slice(beginIndex, endIndex);\n element.value = element.value.substring(0, beginIndex ?? 0) +\n element.value.substring(endIndex ?? element.value.length);\n if (!init) {\n init = {\n inputType: 'deleteContentBackward',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: deletedCharacters,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateChangeIfNeeded(element: HTMLInputElement|\n HTMLTextAreaElement) {\n if (this.valueBeforeChange === element.value) {\n return;\n }\n\n this.valueBeforeChange = element.value;\n element.dispatchEvent(new Event('change'));\n }\n\n protected override async getInteractiveElement() {\n await this.element.updateComplete;\n return this.element.renderRoot.querySelector('.input') as HTMLInputElement |\n HTMLTextAreaElement;\n }\n}\n"]}
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["harness.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {Harness} from '../testing/harness.js';\n\nimport {TextField} from './internal/text-field.js';\n\n/**\n * Test harness for text field elements.\n */\nexport class TextFieldHarness extends Harness<TextField> {\n /** Used to track whether or not a change event should be dispatched. */\n private valueBeforeChange = '';\n\n /**\n * Simulates a user typing a value one character at a time. This will fire\n * multiple input events.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.inputValue('value'); // input events\n * await harness.blur(); // change event\n *\n * @param value The value to simulating typing.\n */\n async inputValue(value: string) {\n for (const char of value) {\n this.simulateKeypress(await this.getInteractiveElement(), char);\n this.simulateInput(await this.getInteractiveElement(), char);\n }\n }\n\n /**\n * Simulates a user deleting part of a value with the backspace key.\n * By default, the entire value is deleted. This will fire a single input\n * event.\n *\n * Use focus/blur to ensure change events are fired.\n *\n * @example\n * await harness.focusWithKeyboard();\n * await harness.deleteValue(); // input event\n * await harness.blur(); // change event\n *\n * @param beginIndex The starting index of the value to delete.\n * @param endIndex The ending index of the value to delete.\n */\n async deleteValue(beginIndex?: number, endIndex?: number) {\n this.simulateKeypress(await this.getInteractiveElement(), 'Backspace');\n this.simulateDeletion(\n await this.getInteractiveElement(),\n beginIndex,\n endIndex,\n );\n }\n\n override async reset() {\n this.element.reset();\n this.valueBeforeChange = this.element.value;\n await super.reset();\n }\n\n override async blur() {\n await super.blur();\n this.simulateChangeIfNeeded(await this.getInteractiveElement());\n }\n\n protected override simulatePointerFocus(input: HTMLElement) {\n const textField = this.element;\n if (textField.disabled) {\n return;\n }\n\n this.valueBeforeChange = textField.value;\n super.simulatePointerFocus(input);\n }\n\n protected simulateInput(\n element: HTMLInputElement | HTMLTextAreaElement,\n charactersToAppend: string,\n init?: InputEventInit,\n ) {\n element.value += charactersToAppend;\n if (!init) {\n init = {\n inputType: 'insertText',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: charactersToAppend,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateDeletion(\n element: HTMLInputElement | HTMLTextAreaElement,\n beginIndex?: number,\n endIndex?: number,\n init?: InputEventInit,\n ) {\n const deletedCharacters = element.value.slice(beginIndex, endIndex);\n element.value =\n element.value.substring(0, beginIndex ?? 0) +\n element.value.substring(endIndex ?? element.value.length);\n if (!init) {\n init = {\n inputType: 'deleteContentBackward',\n composed: true,\n bubbles: true,\n isComposing: false,\n data: deletedCharacters,\n };\n }\n\n element.dispatchEvent(new InputEvent('input', init));\n }\n\n protected simulateChangeIfNeeded(\n element: HTMLInputElement | HTMLTextAreaElement,\n ) {\n if (this.valueBeforeChange === element.value) {\n return;\n }\n\n this.valueBeforeChange = element.value;\n element.dispatchEvent(new Event('change'));\n }\n\n protected override async getInteractiveElement() {\n await this.element.updateComplete;\n return this.element.renderRoot.querySelector('.input') as\n | HTMLInputElement\n | HTMLTextAreaElement;\n }\n}\n"]}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { LitElement, PropertyValues } from 'lit';
7
7
  import { StaticValue } from 'lit/static-html.js';
8
+ import { getFormValue } from '../../labs/behaviors/form-associated.js';
8
9
  /**
9
10
  * Input types that are compatible with the text field.
10
11
  */
@@ -17,15 +18,23 @@ export type UnsupportedTextFieldType = 'color' | 'date' | 'datetime-local' | 'fi
17
18
  * Input types that are incompatible with the text field.
18
19
  */
19
20
  export type InvalidTextFieldType = 'button' | 'checkbox' | 'hidden' | 'image' | 'radio' | 'range' | 'reset' | 'submit';
21
+ declare const textFieldBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>;
20
22
  /**
21
23
  * A text field component.
24
+ *
25
+ * @fires select {Event} The native `select` event on
26
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select_event)
27
+ * --bubbles
28
+ * @fires change {Event} The native `change` event on
29
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)
30
+ * --bubbles
31
+ * @fires input {InputEvent} The native `input` event on
32
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)
33
+ * --bubbles --composed
22
34
  */
23
- export declare abstract class TextField extends LitElement {
35
+ export declare abstract class TextField extends textFieldBaseClass {
24
36
  /** @nocollapse */
25
37
  static shadowRootOptions: ShadowRootInit;
26
- /** @nocollapse */
27
- static readonly formAssociated = true;
28
- disabled: boolean;
29
38
  /**
30
39
  * Gets or sets whether or not the text field is in a visually invalid state.
31
40
  *
@@ -80,18 +89,10 @@ export declare abstract class TextField extends LitElement {
80
89
  */
81
90
  rows: number;
82
91
  /**
83
- * The associated form element with which this element's value will submit.
84
- */
85
- get form(): HTMLFormElement;
86
- /**
87
- * The labels this element is associated with.
92
+ * The number of cols to display for a `type="textarea"` text field.
93
+ * Defaults to 20.
88
94
  */
89
- get labels(): NodeList;
90
- /**
91
- * The HTML name to use in form submission.
92
- */
93
- get name(): string;
94
- set name(name: string);
95
+ cols: number;
95
96
  inputMode: string;
96
97
  /**
97
98
  * Defines the greatest value in the range of permitted values.
@@ -240,8 +241,9 @@ export declare abstract class TextField extends LitElement {
240
241
  private readonly field?;
241
242
  private readonly leadingIcons;
242
243
  private readonly trailingIcons;
244
+ private isCheckingValidity;
245
+ private isReportingValidity;
243
246
  private hasCustomValidityError;
244
- private readonly internals;
245
247
  /**
246
248
  * Checks the text field's native validation and returns whether or not the
247
249
  * element is valid.
@@ -272,6 +274,7 @@ export declare abstract class TextField extends LitElement {
272
274
  * @return true if the text field is valid, or false if not.
273
275
  */
274
276
  reportValidity(): boolean;
277
+ private showErrorMessage;
275
278
  /**
276
279
  * Selects all the text in the text field.
277
280
  *
@@ -349,9 +352,14 @@ export declare abstract class TextField extends LitElement {
349
352
  private getInput;
350
353
  private syncValidity;
351
354
  private handleIconChange;
352
- /** @private */
355
+ private readonly onInvalid;
356
+ connectedCallback(): void;
357
+ disconnectedCallback(): void;
358
+ disabled: boolean;
359
+ name: string;
360
+ [getFormValue](): string;
353
361
  formResetCallback(): void;
354
- /** @private */
355
362
  formStateRestoreCallback(state: string): void;
356
363
  focus(): void;
357
364
  }
365
+ export {};
@@ -13,13 +13,26 @@ import { html as staticHtml } from 'lit/static-html.js';
13
13
  import { requestUpdateOnAriaChange } from '../../internal/aria/delegate.js';
14
14
  import { redispatchEvent } from '../../internal/controller/events.js';
15
15
  import { stringConverter } from '../../internal/controller/string-converter.js';
16
+ import { internals, mixinElementInternals, } from '../../labs/behaviors/element-internals.js';
17
+ import { getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-associated.js';
18
+ // Separate variable needed for closure.
19
+ const textFieldBaseClass = mixinFormAssociated(mixinElementInternals(LitElement));
16
20
  /**
17
21
  * A text field component.
22
+ *
23
+ * @fires select {Event} The native `select` event on
24
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select_event)
25
+ * --bubbles
26
+ * @fires change {Event} The native `change` event on
27
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)
28
+ * --bubbles
29
+ * @fires input {InputEvent} The native `input` event on
30
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)
31
+ * --bubbles --composed
18
32
  */
19
- export class TextField extends LitElement {
33
+ export class TextField extends textFieldBaseClass {
20
34
  constructor() {
21
35
  super(...arguments);
22
- this.disabled = false;
23
36
  /**
24
37
  * Gets or sets whether or not the text field is in a visually invalid state.
25
38
  *
@@ -73,6 +86,11 @@ export class TextField extends LitElement {
73
86
  * Defaults to 2.
74
87
  */
75
88
  this.rows = 2;
89
+ /**
90
+ * The number of cols to display for a `type="textarea"` text field.
91
+ * Defaults to 20.
92
+ */
93
+ this.cols = 20;
76
94
  // <input> properties
77
95
  this.inputMode = '';
78
96
  /**
@@ -171,31 +189,17 @@ export class TextField extends LitElement {
171
189
  * `reportValidity()`.
172
190
  */
173
191
  this.nativeErrorText = '';
192
+ this.isCheckingValidity = false;
193
+ this.isReportingValidity = false;
174
194
  // Needed for Safari, see https://bugs.webkit.org/show_bug.cgi?id=261432
175
- // Replace with this.internals.validity.customError when resolved.
195
+ // Replace with this[internals].validity.customError when resolved.
176
196
  this.hasCustomValidityError = false;
177
- this.internals = this /* needed for closure */.attachInternals();
178
- }
179
- /**
180
- * The associated form element with which this element's value will submit.
181
- */
182
- get form() {
183
- return this.internals.form;
184
- }
185
- /**
186
- * The labels this element is associated with.
187
- */
188
- get labels() {
189
- return this.internals.labels;
190
- }
191
- /**
192
- * The HTML name to use in form submission.
193
- */
194
- get name() {
195
- return this.getAttribute('name') ?? '';
196
- }
197
- set name(name) {
198
- this.setAttribute('name', name);
197
+ this.onInvalid = (invalidEvent) => {
198
+ if (this.isCheckingValidity || this.isReportingValidity) {
199
+ return;
200
+ }
201
+ this.showErrorMessage(false, invalidEvent);
202
+ };
199
203
  }
200
204
  /**
201
205
  * Gets or sets the direction in which selection occurred.
@@ -231,7 +235,7 @@ export class TextField extends LitElement {
231
235
  */
232
236
  get validationMessage() {
233
237
  this.syncValidity();
234
- return this.internals.validationMessage;
238
+ return this[internals].validationMessage;
235
239
  }
236
240
  /**
237
241
  * Returns a `ValidityState` object that represents the validity states of the
@@ -241,7 +245,7 @@ export class TextField extends LitElement {
241
245
  */
242
246
  get validity() {
243
247
  this.syncValidity();
244
- return this.internals.validity;
248
+ return this[internals].validity;
245
249
  }
246
250
  /**
247
251
  * The text field's value as a number.
@@ -287,7 +291,7 @@ export class TextField extends LitElement {
287
291
  */
288
292
  get willValidate() {
289
293
  this.syncValidity();
290
- return this.internals.willValidate;
294
+ return this[internals].willValidate;
291
295
  }
292
296
  get hasError() {
293
297
  return this.error || this.nativeError;
@@ -303,8 +307,11 @@ export class TextField extends LitElement {
303
307
  * @return true if the text field is valid, or false if not.
304
308
  */
305
309
  checkValidity() {
310
+ this.isCheckingValidity = true;
306
311
  this.syncValidity();
307
- return this.internals.checkValidity();
312
+ const isValid = this[internals].checkValidity();
313
+ this.isCheckingValidity = false;
314
+ return isValid;
308
315
  }
309
316
  /**
310
317
  * Checks the text field's native validation and returns whether or not the
@@ -325,11 +332,17 @@ export class TextField extends LitElement {
325
332
  * @return true if the text field is valid, or false if not.
326
333
  */
327
334
  reportValidity() {
335
+ this.isReportingValidity = true;
328
336
  let invalidEvent;
329
- this.addEventListener('invalid', event => {
337
+ this.addEventListener('invalid', (event) => {
330
338
  invalidEvent = event;
331
339
  }, { once: true });
332
340
  const valid = this.checkValidity();
341
+ this.showErrorMessage(valid, invalidEvent);
342
+ this.isReportingValidity = false;
343
+ return valid;
344
+ }
345
+ showErrorMessage(valid, invalidEvent) {
333
346
  if (invalidEvent?.defaultPrevented) {
334
347
  return valid;
335
348
  }
@@ -362,7 +375,7 @@ export class TextField extends LitElement {
362
375
  */
363
376
  setCustomValidity(error) {
364
377
  this.hasCustomValidityError = !!error;
365
- this.internals.setValidity({ customError: !!error }, error, this.getInputOrTextarea());
378
+ this[internals].setValidity({ customError: !!error }, error, this.getInputOrTextarea());
366
379
  }
367
380
  setRangeText(...args) {
368
381
  // Calling setRangeText with 1 vs 3-4 arguments has different behavior.
@@ -438,10 +451,10 @@ export class TextField extends LitElement {
438
451
  'textarea': this.type === 'textarea',
439
452
  };
440
453
  return html `
441
- <span class="text-field ${classMap(classes)}">
442
- ${this.renderField()}
443
- </span>
444
- `;
454
+ <span class="text-field ${classMap(classes)}">
455
+ ${this.renderField()}
456
+ </span>
457
+ `;
445
458
  }
446
459
  updated(changedProperties) {
447
460
  // Keep changedProperties arg so that subclasses may call it
@@ -454,7 +467,6 @@ export class TextField extends LitElement {
454
467
  // before checking its value.
455
468
  this.value = value;
456
469
  }
457
- this.internals.setFormValue(value);
458
470
  // Sync validity when properties change, since validation properties may
459
471
  // have changed.
460
472
  this.syncValidity();
@@ -484,17 +496,17 @@ export class TextField extends LitElement {
484
496
  }
485
497
  renderLeadingIcon() {
486
498
  return html `
487
- <span class="icon leading" slot="start">
488
- <slot name="leading-icon" @slotchange=${this.handleIconChange}></slot>
489
- </span>
490
- `;
499
+ <span class="icon leading" slot="start">
500
+ <slot name="leading-icon" @slotchange=${this.handleIconChange}></slot>
501
+ </span>
502
+ `;
491
503
  }
492
504
  renderTrailingIcon() {
493
505
  return html `
494
- <span class="icon trailing" slot="end">
495
- <slot name="trailing-icon" @slotchange=${this.handleIconChange}></slot>
496
- </span>
497
- `;
506
+ <span class="icon trailing" slot="end">
507
+ <slot name="trailing-icon" @slotchange=${this.handleIconChange}></slot>
508
+ </span>
509
+ `;
498
510
  }
499
511
  renderInputOrTextarea() {
500
512
  const style = { direction: this.textDirection };
@@ -518,13 +530,13 @@ export class TextField extends LitElement {
518
530
  ?readonly=${this.readOnly}
519
531
  ?required=${this.required}
520
532
  rows=${this.rows}
533
+ cols=${this.cols}
521
534
  .value=${live(this.value)}
522
535
  @change=${this.handleChange}
523
536
  @focusin=${this.handleFocusin}
524
537
  @focusout=${this.handleFocusout}
525
538
  @input=${this.handleInput}
526
- @select=${this.redispatchEvent}
527
- ></textarea>
539
+ @select=${this.redispatchEvent}></textarea>
528
540
  `;
529
541
  }
530
542
  const prefix = this.renderPrefix();
@@ -561,8 +573,7 @@ export class TextField extends LitElement {
561
573
  @focusin=${this.handleFocusin}
562
574
  @focusout=${this.handleFocusout}
563
575
  @input=${this.handleInput}
564
- @select=${this.redispatchEvent}
565
- >
576
+ @select=${this.redispatchEvent} />
566
577
  ${suffix}
567
578
  </div>
568
579
  `;
@@ -635,22 +646,33 @@ export class TextField extends LitElement {
635
646
  // validity. We do this to re-use native `<input>` validation messages.
636
647
  const input = this.getInputOrTextarea();
637
648
  if (this.hasCustomValidityError) {
638
- input.setCustomValidity(this.internals.validationMessage);
649
+ input.setCustomValidity(this[internals].validationMessage);
639
650
  }
640
651
  else {
641
652
  input.setCustomValidity('');
642
653
  }
643
- this.internals.setValidity(input.validity, input.validationMessage, this.getInputOrTextarea());
654
+ this[internals].setValidity(input.validity, input.validationMessage, this.getInputOrTextarea());
644
655
  }
645
656
  handleIconChange() {
646
657
  this.hasLeadingIcon = this.leadingIcons.length > 0;
647
658
  this.hasTrailingIcon = this.trailingIcons.length > 0;
648
659
  }
649
- /** @private */
660
+ connectedCallback() {
661
+ super.connectedCallback();
662
+ // Handles the case where the user submits the form and native validation
663
+ // error pops up. We want the error styles to show.
664
+ this.addEventListener('invalid', this.onInvalid);
665
+ }
666
+ disconnectedCallback() {
667
+ super.disconnectedCallback();
668
+ this.removeEventListener('invalid', this.onInvalid);
669
+ }
670
+ [getFormValue]() {
671
+ return this.value;
672
+ }
650
673
  formResetCallback() {
651
674
  this.reset();
652
675
  }
653
- /** @private */
654
676
  formStateRestoreCallback(state) {
655
677
  this.value = state;
656
678
  }
@@ -664,12 +686,10 @@ export class TextField extends LitElement {
664
686
  requestUpdateOnAriaChange(TextField);
665
687
  })();
666
688
  /** @nocollapse */
667
- TextField.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
668
- /** @nocollapse */
669
- TextField.formAssociated = true;
670
- __decorate([
671
- property({ type: Boolean, reflect: true })
672
- ], TextField.prototype, "disabled", void 0);
689
+ TextField.shadowRootOptions = {
690
+ ...LitElement.shadowRootOptions,
691
+ delegatesFocus: true,
692
+ };
673
693
  __decorate([
674
694
  property({ type: Boolean, reflect: true })
675
695
  ], TextField.prototype, "error", void 0);
@@ -706,6 +726,9 @@ __decorate([
706
726
  __decorate([
707
727
  property({ type: Number })
708
728
  ], TextField.prototype, "rows", void 0);
729
+ __decorate([
730
+ property({ type: Number })
731
+ ], TextField.prototype, "cols", void 0);
709
732
  __decorate([
710
733
  property({ reflect: true })
711
734
  ], TextField.prototype, "inputMode", void 0);