@warp-ds/elements 2.10.0-next.15 → 2.10.0-next.17

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 (594) hide show
  1. package/dist/.storybook/utilities.js +4 -4
  2. package/dist/api.js.map +2 -2
  3. package/dist/custom-elements.json +68 -56
  4. package/dist/docs/affix/affix.md +2 -2
  5. package/dist/docs/affix/api.md +2 -2
  6. package/dist/docs/alert/alert.md +4 -4
  7. package/dist/docs/alert/api.md +4 -4
  8. package/dist/docs/attention/api.md +2 -2
  9. package/dist/docs/attention/attention.md +2 -2
  10. package/dist/docs/badge/api.md +50 -4
  11. package/dist/docs/badge/badge.md +50 -4
  12. package/dist/docs/box/api.md +2 -2
  13. package/dist/docs/box/box.md +2 -2
  14. package/dist/docs/checkbox/api.md +2 -2
  15. package/dist/docs/checkbox/checkbox.md +176 -2
  16. package/dist/docs/checkbox/styling.md +173 -0
  17. package/dist/docs/checkbox-group/checkbox-group.md +43 -30
  18. package/dist/docs/checkbox-group/styling.md +31 -29
  19. package/dist/docs/combobox/api.md +12 -12
  20. package/dist/docs/combobox/combobox.md +12 -12
  21. package/dist/docs/datepicker/api.md +6 -6
  22. package/dist/docs/datepicker/datepicker.md +6 -6
  23. package/dist/docs/icon/api.md +3 -3
  24. package/dist/docs/icon/icon.md +3 -3
  25. package/dist/docs/index.md +1 -1
  26. package/dist/docs/radio-group/api.md +4 -4
  27. package/dist/docs/radio-group/radio-group.md +183 -68
  28. package/dist/docs/radio-group/styling.md +179 -64
  29. package/dist/docs/snackbar/api.md +1 -1
  30. package/dist/docs/snackbar/snackbar.md +1 -1
  31. package/dist/docs/snackbar-item/api.md +2 -2
  32. package/dist/docs/snackbar-item/snackbar-item.md +2 -2
  33. package/dist/index.d.ts +24 -2
  34. package/dist/packages/affix/affix.d.ts +4 -4
  35. package/dist/packages/affix/affix.hydration.test.d.ts +1 -1
  36. package/dist/packages/affix/affix.hydration.test.js +15 -15
  37. package/dist/packages/affix/affix.js +345 -315
  38. package/dist/packages/affix/affix.js.map +2 -2
  39. package/dist/packages/affix/affix.react.stories.d.ts +2 -2
  40. package/dist/packages/affix/affix.react.stories.js +3 -3
  41. package/dist/packages/affix/affix.react.test.js +5 -3
  42. package/dist/packages/affix/affix.stories.d.ts +3 -3
  43. package/dist/packages/affix/affix.stories.js +10 -10
  44. package/dist/packages/affix/affix.test.d.ts +1 -1
  45. package/dist/packages/affix/affix.test.js +10 -10
  46. package/dist/packages/affix/react.d.ts +2 -2
  47. package/dist/packages/affix/react.js +6 -6
  48. package/dist/packages/affix/styles.js +1 -1
  49. package/dist/packages/alert/alert.d.ts +3 -3
  50. package/dist/packages/alert/alert.hydration.test.d.ts +1 -1
  51. package/dist/packages/alert/alert.hydration.test.js +21 -21
  52. package/dist/packages/alert/alert.js +344 -319
  53. package/dist/packages/alert/alert.js.map +2 -2
  54. package/dist/packages/alert/alert.react.stories.d.ts +2 -2
  55. package/dist/packages/alert/alert.react.stories.js +13 -13
  56. package/dist/packages/alert/alert.stories.d.ts +4 -4
  57. package/dist/packages/alert/alert.stories.js +29 -27
  58. package/dist/packages/alert/alert.test.d.ts +1 -1
  59. package/dist/packages/alert/alert.test.js +34 -21
  60. package/dist/packages/alert/react.d.ts +1 -1
  61. package/dist/packages/alert/react.js +4 -4
  62. package/dist/packages/alert/styles.js +1 -1
  63. package/dist/packages/attention/attention.d.ts +7 -7
  64. package/dist/packages/attention/attention.hydration.test.d.ts +1 -1
  65. package/dist/packages/attention/attention.hydration.test.js +29 -29
  66. package/dist/packages/attention/attention.js +1725 -1683
  67. package/dist/packages/attention/attention.js.map +2 -2
  68. package/dist/packages/attention/attention.react.stories.d.ts +3 -3
  69. package/dist/packages/attention/attention.react.stories.js +13 -13
  70. package/dist/packages/attention/attention.react.test.js +11 -7
  71. package/dist/packages/attention/attention.stories.d.ts +4 -4
  72. package/dist/packages/attention/attention.stories.js +126 -117
  73. package/dist/packages/attention/attention.test.d.ts +1 -1
  74. package/dist/packages/attention/attention.test.js +18 -10
  75. package/dist/packages/attention/layout-styles.js +900 -900
  76. package/dist/packages/attention/react.d.ts +4 -4
  77. package/dist/packages/attention/react.js +13 -11
  78. package/dist/packages/attention/styles.js +1 -1
  79. package/dist/packages/badge/badge.d.ts +3 -3
  80. package/dist/packages/badge/badge.hydration.test.d.ts +1 -1
  81. package/dist/packages/badge/badge.hydration.test.js +25 -25
  82. package/dist/packages/badge/badge.js +276 -276
  83. package/dist/packages/badge/badge.js.map +2 -2
  84. package/dist/packages/badge/badge.react.stories.d.ts +3 -3
  85. package/dist/packages/badge/badge.react.stories.js +17 -17
  86. package/dist/packages/badge/badge.stories.d.ts +3 -3
  87. package/dist/packages/badge/badge.stories.js +22 -20
  88. package/dist/packages/badge/badge.test.d.ts +1 -1
  89. package/dist/packages/badge/badge.test.js +13 -11
  90. package/dist/packages/badge/react.d.ts +1 -1
  91. package/dist/packages/badge/react.js +4 -4
  92. package/dist/packages/badge/styles.js +1 -1
  93. package/dist/packages/box/box.d.ts +1 -1
  94. package/dist/packages/box/box.hydration.test.d.ts +1 -1
  95. package/dist/packages/box/box.hydration.test.js +14 -14
  96. package/dist/packages/box/box.js +283 -283
  97. package/dist/packages/box/box.js.map +2 -2
  98. package/dist/packages/box/box.react.stories.d.ts +3 -3
  99. package/dist/packages/box/box.react.stories.js +8 -8
  100. package/dist/packages/box/box.stories.d.ts +3 -3
  101. package/dist/packages/box/box.stories.js +25 -19
  102. package/dist/packages/box/box.test.d.ts +1 -1
  103. package/dist/packages/box/box.test.js +6 -6
  104. package/dist/packages/box/react.d.ts +1 -1
  105. package/dist/packages/box/react.js +4 -4
  106. package/dist/packages/box/slot.test.d.ts +1 -1
  107. package/dist/packages/box/slot.test.js +6 -6
  108. package/dist/packages/box/styles.js +1 -1
  109. package/dist/packages/breadcrumbs/breadcrumbs.d.ts +1 -1
  110. package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.d.ts +1 -1
  111. package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.js +55 -49
  112. package/dist/packages/breadcrumbs/breadcrumbs.js +284 -278
  113. package/dist/packages/breadcrumbs/breadcrumbs.js.map +2 -2
  114. package/dist/packages/breadcrumbs/breadcrumbs.react.stories.d.ts +3 -3
  115. package/dist/packages/breadcrumbs/breadcrumbs.react.stories.js +6 -6
  116. package/dist/packages/breadcrumbs/breadcrumbs.stories.d.ts +3 -3
  117. package/dist/packages/breadcrumbs/breadcrumbs.stories.js +27 -26
  118. package/dist/packages/breadcrumbs/breadcrumbs.test.d.ts +1 -1
  119. package/dist/packages/breadcrumbs/breadcrumbs.test.js +19 -17
  120. package/dist/packages/breadcrumbs/react.d.ts +1 -1
  121. package/dist/packages/breadcrumbs/react.js +4 -4
  122. package/dist/packages/breadcrumbs/styles.js +1 -1
  123. package/dist/packages/button/button.d.ts +5 -5
  124. package/dist/packages/button/button.hydration.test.d.ts +1 -1
  125. package/dist/packages/button/button.hydration.test.js +19 -19
  126. package/dist/packages/button/button.js +741 -715
  127. package/dist/packages/button/button.js.map +2 -2
  128. package/dist/packages/button/button.react.stories.d.ts +3 -3
  129. package/dist/packages/button/button.react.stories.js +30 -30
  130. package/dist/packages/button/button.react.test.js +13 -13
  131. package/dist/packages/button/button.stories.d.ts +4 -4
  132. package/dist/packages/button/button.stories.js +276 -167
  133. package/dist/packages/button/button.test.d.ts +1 -1
  134. package/dist/packages/button/button.test.js +36 -34
  135. package/dist/packages/button/react.d.ts +2 -2
  136. package/dist/packages/button/react.js +7 -7
  137. package/dist/packages/button/styles.js +373 -347
  138. package/dist/packages/card/card.d.ts +1 -1
  139. package/dist/packages/card/card.hydration.test.d.ts +1 -1
  140. package/dist/packages/card/card.hydration.test.js +14 -14
  141. package/dist/packages/card/card.js +305 -290
  142. package/dist/packages/card/card.js.map +2 -2
  143. package/dist/packages/card/card.react.stories.d.ts +3 -3
  144. package/dist/packages/card/card.react.stories.js +11 -11
  145. package/dist/packages/card/card.stories.d.ts +3 -3
  146. package/dist/packages/card/card.stories.js +36 -24
  147. package/dist/packages/card/card.test.d.ts +1 -1
  148. package/dist/packages/card/card.test.js +6 -6
  149. package/dist/packages/card/react.d.ts +1 -1
  150. package/dist/packages/card/react.js +4 -4
  151. package/dist/packages/card/styles.js +1 -1
  152. package/dist/packages/checkbox/checkbox.a11y.test.d.ts +1 -1
  153. package/dist/packages/checkbox/checkbox.a11y.test.js +47 -33
  154. package/dist/packages/checkbox/checkbox.d.ts +2 -2
  155. package/dist/packages/checkbox/checkbox.hydration.test.d.ts +1 -1
  156. package/dist/packages/checkbox/checkbox.hydration.test.js +21 -21
  157. package/dist/packages/checkbox/checkbox.js +475 -424
  158. package/dist/packages/checkbox/checkbox.js.map +2 -2
  159. package/dist/packages/checkbox/checkbox.react.stories.d.ts +2 -2
  160. package/dist/packages/checkbox/checkbox.react.stories.js +3 -3
  161. package/dist/packages/checkbox/checkbox.stories.d.ts +4 -4
  162. package/dist/packages/checkbox/checkbox.stories.js +99 -91
  163. package/dist/packages/checkbox/checkbox.test.d.ts +1 -1
  164. package/dist/packages/checkbox/checkbox.test.js +64 -64
  165. package/dist/packages/checkbox/react.d.ts +1 -1
  166. package/dist/packages/checkbox/react.js +6 -6
  167. package/dist/packages/checkbox/styles.js +183 -132
  168. package/dist/packages/checkbox-group/checkbox-group.a11y.test.d.ts +2 -2
  169. package/dist/packages/checkbox-group/checkbox-group.a11y.test.js +83 -73
  170. package/dist/packages/checkbox-group/checkbox-group.d.ts +16 -2
  171. package/dist/packages/checkbox-group/checkbox-group.hydration.test.d.ts +2 -2
  172. package/dist/packages/checkbox-group/checkbox-group.hydration.test.js +36 -19
  173. package/dist/packages/checkbox-group/checkbox-group.js +60 -55
  174. package/dist/packages/checkbox-group/checkbox-group.js.map +2 -2
  175. package/dist/packages/checkbox-group/checkbox-group.react.test.js +4 -4
  176. package/dist/packages/checkbox-group/checkbox-group.test.d.ts +2 -2
  177. package/dist/packages/checkbox-group/checkbox-group.test.js +96 -90
  178. package/dist/packages/checkbox-group/react.d.ts +2 -2
  179. package/dist/packages/checkbox-group/react.js +6 -6
  180. package/dist/packages/combobox/combobox.a11y.test.d.ts +2 -2
  181. package/dist/packages/combobox/combobox.a11y.test.js +72 -49
  182. package/dist/packages/combobox/combobox.d.ts +2 -2
  183. package/dist/packages/combobox/combobox.hydration.test.d.ts +1 -1
  184. package/dist/packages/combobox/combobox.hydration.test.js +45 -45
  185. package/dist/packages/combobox/combobox.js +332 -332
  186. package/dist/packages/combobox/combobox.js.map +3 -3
  187. package/dist/packages/combobox/combobox.react.stories.d.ts +3 -3
  188. package/dist/packages/combobox/combobox.react.stories.js +29 -29
  189. package/dist/packages/combobox/combobox.react.test.js +8 -8
  190. package/dist/packages/combobox/combobox.stories.d.ts +4 -4
  191. package/dist/packages/combobox/combobox.stories.js +100 -94
  192. package/dist/packages/combobox/combobox.test.d.ts +2 -2
  193. package/dist/packages/combobox/combobox.test.js +148 -133
  194. package/dist/packages/combobox/react.d.ts +2 -2
  195. package/dist/packages/combobox/react.js +14 -14
  196. package/dist/packages/combobox/styles.js +1 -1
  197. package/dist/packages/datepicker/DatePicker.test.d.ts +2 -2
  198. package/dist/packages/datepicker/DatePicker.test.js +46 -41
  199. package/dist/packages/datepicker/datepicker.d.ts +3 -3
  200. package/dist/packages/datepicker/datepicker.hydration.test.d.ts +1 -1
  201. package/dist/packages/datepicker/datepicker.hydration.test.js +21 -21
  202. package/dist/packages/datepicker/datepicker.js +665 -625
  203. package/dist/packages/datepicker/datepicker.js.map +3 -3
  204. package/dist/packages/datepicker/datepicker.react.stories.d.ts +3 -3
  205. package/dist/packages/datepicker/datepicker.react.stories.js +9 -9
  206. package/dist/packages/datepicker/datepicker.react.test.js +6 -6
  207. package/dist/packages/datepicker/datepicker.stories.d.ts +4 -4
  208. package/dist/packages/datepicker/datepicker.stories.js +32 -32
  209. package/dist/packages/datepicker/datepicker.test.d.ts +2 -2
  210. package/dist/packages/datepicker/datepicker.test.js +77 -79
  211. package/dist/packages/datepicker/react.d.ts +2 -2
  212. package/dist/packages/datepicker/react.js +16 -14
  213. package/dist/packages/datepicker/styles/w-datepicker-calendar.styles.js +13 -12
  214. package/dist/packages/datepicker/styles/w-datepicker-day.styles.js +58 -55
  215. package/dist/packages/datepicker/styles/w-datepicker-month.styles.js +60 -57
  216. package/dist/packages/datepicker/styles/w-datepicker.styles.js +87 -87
  217. package/dist/packages/datepicker/utils.d.ts +1 -1
  218. package/dist/packages/datepicker/utils.js +25 -19
  219. package/dist/packages/datepicker/utils.test.js +20 -20
  220. package/dist/packages/expandable/expandable.d.ts +4 -4
  221. package/dist/packages/expandable/expandable.hydration.test.d.ts +1 -1
  222. package/dist/packages/expandable/expandable.hydration.test.js +21 -21
  223. package/dist/packages/expandable/expandable.js +353 -326
  224. package/dist/packages/expandable/expandable.js.map +2 -2
  225. package/dist/packages/expandable/expandable.react.stories.d.ts +3 -3
  226. package/dist/packages/expandable/expandable.react.stories.js +7 -7
  227. package/dist/packages/expandable/expandable.react.test.js +15 -7
  228. package/dist/packages/expandable/expandable.stories.d.ts +5 -5
  229. package/dist/packages/expandable/expandable.stories.js +51 -45
  230. package/dist/packages/expandable/expandable.test.d.ts +1 -1
  231. package/dist/packages/expandable/expandable.test.js +19 -17
  232. package/dist/packages/expandable/react.d.ts +2 -2
  233. package/dist/packages/expandable/react.js +9 -9
  234. package/dist/packages/expandable/styles.js +1 -1
  235. package/dist/packages/global.js +2 -2
  236. package/dist/packages/i18n.d.ts +1 -1
  237. package/dist/packages/i18n.js +37 -29
  238. package/dist/packages/icon/icon.d.ts +3 -3
  239. package/dist/packages/icon/icon.hydration.test.d.ts +1 -1
  240. package/dist/packages/icon/icon.hydration.test.js +25 -25
  241. package/dist/packages/icon/icon.js +30 -25
  242. package/dist/packages/icon/icon.js.map +2 -2
  243. package/dist/packages/icon/icon.react.stories.d.ts +1 -1
  244. package/dist/packages/icon/icon.react.stories.js +283 -284
  245. package/dist/packages/icon/icon.stories.d.ts +3 -3
  246. package/dist/packages/icon/icon.stories.js +299 -298
  247. package/dist/packages/icon/icon.test.d.ts +1 -1
  248. package/dist/packages/icon/icon.test.js +36 -28
  249. package/dist/packages/icon/react.d.ts +1 -1
  250. package/dist/packages/icon/react.js +4 -4
  251. package/dist/packages/icon/style.js +24 -25
  252. package/dist/packages/interaction-type-detection.js +9 -9
  253. package/dist/packages/link/link.d.ts +2 -2
  254. package/dist/packages/link/link.hydration.test.d.ts +1 -1
  255. package/dist/packages/link/link.hydration.test.js +27 -27
  256. package/dist/packages/link/link.js +709 -683
  257. package/dist/packages/link/link.js.map +2 -2
  258. package/dist/packages/link/link.react.stories.d.ts +3 -3
  259. package/dist/packages/link/link.react.stories.js +42 -42
  260. package/dist/packages/link/link.react.test.js +5 -3
  261. package/dist/packages/link/link.stories.d.ts +3 -3
  262. package/dist/packages/link/link.stories.js +51 -51
  263. package/dist/packages/link/link.test.d.ts +1 -1
  264. package/dist/packages/link/link.test.js +11 -7
  265. package/dist/packages/link/react.d.ts +2 -2
  266. package/dist/packages/link/react.js +6 -6
  267. package/dist/packages/link/styles.js +57 -57
  268. package/dist/packages/modal/index.d.ts +7 -7
  269. package/dist/packages/modal/index.js +7 -7
  270. package/dist/packages/modal/modal.d.ts +1 -1
  271. package/dist/packages/modal/modal.hydration.test.d.ts +1 -1
  272. package/dist/packages/modal/modal.hydration.test.js +12 -12
  273. package/dist/packages/modal/modal.js +404 -404
  274. package/dist/packages/modal/modal.js.map +2 -2
  275. package/dist/packages/modal/modal.react.stories.d.ts +3 -3
  276. package/dist/packages/modal/modal.react.stories.js +7 -6
  277. package/dist/packages/modal/modal.react.test.js +5 -5
  278. package/dist/packages/modal/modal.stories.d.ts +6 -6
  279. package/dist/packages/modal/modal.stories.js +253 -238
  280. package/dist/packages/modal/react.d.ts +4 -4
  281. package/dist/packages/modal/react.js +13 -13
  282. package/dist/packages/modal/util.js +2 -2
  283. package/dist/packages/modal-footer/modal-footer.d.ts +1 -1
  284. package/dist/packages/modal-footer/modal-footer.js +291 -291
  285. package/dist/packages/modal-footer/modal-footer.js.map +2 -2
  286. package/dist/packages/modal-footer/react.d.ts +1 -1
  287. package/dist/packages/modal-footer/react.js +4 -4
  288. package/dist/packages/modal-header/modal-header.d.ts +2 -2
  289. package/dist/packages/modal-header/modal-header.js +437 -416
  290. package/dist/packages/modal-header/modal-header.js.map +2 -2
  291. package/dist/packages/modal-header/modal-header.react.test.js +5 -3
  292. package/dist/packages/modal-header/react.d.ts +2 -2
  293. package/dist/packages/modal-header/react.js +8 -8
  294. package/dist/packages/page-indicator/page-indicator.d.ts +1 -1
  295. package/dist/packages/page-indicator/page-indicator.hydration.test.d.ts +1 -1
  296. package/dist/packages/page-indicator/page-indicator.hydration.test.js +22 -22
  297. package/dist/packages/page-indicator/page-indicator.js +26 -26
  298. package/dist/packages/page-indicator/page-indicator.js.map +2 -2
  299. package/dist/packages/page-indicator/page-indicator.react.stories.d.ts +3 -3
  300. package/dist/packages/page-indicator/page-indicator.react.stories.js +11 -11
  301. package/dist/packages/page-indicator/page-indicator.react.test.js +5 -5
  302. package/dist/packages/page-indicator/page-indicator.stories.d.ts +3 -3
  303. package/dist/packages/page-indicator/page-indicator.stories.js +56 -27
  304. package/dist/packages/page-indicator/page-indicator.test.d.ts +1 -1
  305. package/dist/packages/page-indicator/page-indicator.test.js +110 -70
  306. package/dist/packages/page-indicator/react.d.ts +2 -2
  307. package/dist/packages/page-indicator/react.js +7 -7
  308. package/dist/packages/page-indicator/style.js +21 -21
  309. package/dist/packages/pagination/pagination.a11y.test.d.ts +1 -1
  310. package/dist/packages/pagination/pagination.a11y.test.js +59 -25
  311. package/dist/packages/pagination/pagination.d.ts +3 -3
  312. package/dist/packages/pagination/pagination.hydration.test.d.ts +1 -1
  313. package/dist/packages/pagination/pagination.hydration.test.js +19 -19
  314. package/dist/packages/pagination/pagination.js +380 -349
  315. package/dist/packages/pagination/pagination.js.map +2 -2
  316. package/dist/packages/pagination/pagination.react.stories.d.ts +5 -5
  317. package/dist/packages/pagination/pagination.react.stories.js +8 -8
  318. package/dist/packages/pagination/pagination.react.test.js +6 -6
  319. package/dist/packages/pagination/pagination.stories.d.ts +3 -3
  320. package/dist/packages/pagination/pagination.stories.js +18 -18
  321. package/dist/packages/pagination/pagination.test.d.ts +1 -1
  322. package/dist/packages/pagination/pagination.test.js +146 -69
  323. package/dist/packages/pagination/react.d.ts +3 -3
  324. package/dist/packages/pagination/react.js +12 -10
  325. package/dist/packages/pagination/styles.js +1 -1
  326. package/dist/packages/pill/pill.d.ts +2 -2
  327. package/dist/packages/pill/pill.hydration.test.d.ts +1 -1
  328. package/dist/packages/pill/pill.hydration.test.js +14 -14
  329. package/dist/packages/pill/pill.js +331 -308
  330. package/dist/packages/pill/pill.js.map +2 -2
  331. package/dist/packages/pill/pill.react.stories.d.ts +3 -3
  332. package/dist/packages/pill/pill.react.stories.js +3 -3
  333. package/dist/packages/pill/pill.react.test.js +8 -8
  334. package/dist/packages/pill/pill.stories.d.ts +3 -3
  335. package/dist/packages/pill/pill.stories.js +8 -8
  336. package/dist/packages/pill/pill.test.d.ts +1 -1
  337. package/dist/packages/pill/pill.test.js +17 -15
  338. package/dist/packages/pill/react.d.ts +2 -2
  339. package/dist/packages/pill/react.js +18 -14
  340. package/dist/packages/pill/styles.js +1 -1
  341. package/dist/packages/radio/base-element.d.ts +3 -3
  342. package/dist/packages/radio/base-element.js +3 -3
  343. package/dist/packages/radio/custom-error-validator.d.ts +1 -1
  344. package/dist/packages/radio/custom-error-validator.js +3 -3
  345. package/dist/packages/radio/form-associated-element.d.ts +8 -8
  346. package/dist/packages/radio/form-associated-element.js +27 -26
  347. package/dist/packages/radio/host-styles.js +9 -9
  348. package/dist/packages/radio/invalid.d.ts +1 -1
  349. package/dist/packages/radio/invalid.js +1 -1
  350. package/dist/packages/radio/radio-styles.js +199 -160
  351. package/dist/packages/radio/radio.a11y.test.d.ts +2 -2
  352. package/dist/packages/radio/radio.a11y.test.js +60 -58
  353. package/dist/packages/radio/radio.d.ts +3 -3
  354. package/dist/packages/radio/radio.hydration.test.d.ts +1 -1
  355. package/dist/packages/radio/radio.hydration.test.js +23 -14
  356. package/dist/packages/radio/radio.js +485 -446
  357. package/dist/packages/radio/radio.js.map +3 -3
  358. package/dist/packages/radio/radio.react.stories.d.ts +2 -2
  359. package/dist/packages/radio/radio.react.stories.js +3 -3
  360. package/dist/packages/radio/radio.stories.d.ts +4 -4
  361. package/dist/packages/radio/radio.stories.js +152 -136
  362. package/dist/packages/radio/radio.test.d.ts +1 -1
  363. package/dist/packages/radio/radio.test.js +74 -73
  364. package/dist/packages/radio/react.d.ts +1 -1
  365. package/dist/packages/radio/react.js +4 -4
  366. package/dist/packages/radio/required-validator.d.ts +1 -1
  367. package/dist/packages/radio/required-validator.js +12 -7
  368. package/dist/packages/radio/slot.d.ts +1 -1
  369. package/dist/packages/radio/slot.js +11 -8
  370. package/dist/packages/radio/watch.d.ts +1 -1
  371. package/dist/packages/radio/watch.js +3 -1
  372. package/dist/packages/radio-group/radio-group-styles.js +121 -88
  373. package/dist/packages/radio-group/radio-group.a11y.test.d.ts +2 -2
  374. package/dist/packages/radio-group/radio-group.a11y.test.js +81 -79
  375. package/dist/packages/radio-group/radio-group.d.ts +14 -5
  376. package/dist/packages/radio-group/radio-group.hydration.test.d.ts +2 -2
  377. package/dist/packages/radio-group/radio-group.hydration.test.js +29 -18
  378. package/dist/packages/radio-group/radio-group.js +648 -560
  379. package/dist/packages/radio-group/radio-group.js.map +3 -3
  380. package/dist/packages/radio-group/radio-group.react.test.js +4 -4
  381. package/dist/packages/radio-group/radio-group.test.d.ts +2 -2
  382. package/dist/packages/radio-group/radio-group.test.js +234 -229
  383. package/dist/packages/radio-group/react.d.ts +2 -2
  384. package/dist/packages/radio-group/react.js +10 -10
  385. package/dist/packages/select/react.d.ts +2 -2
  386. package/dist/packages/select/react.js +11 -11
  387. package/dist/packages/select/select.a11y.test.d.ts +1 -1
  388. package/dist/packages/select/select.a11y.test.js +98 -91
  389. package/dist/packages/select/select.d.ts +4 -4
  390. package/dist/packages/select/select.hydration.test.d.ts +1 -1
  391. package/dist/packages/select/select.hydration.test.js +16 -16
  392. package/dist/packages/select/select.js +348 -329
  393. package/dist/packages/select/select.js.map +2 -2
  394. package/dist/packages/select/select.react.stories.d.ts +3 -3
  395. package/dist/packages/select/select.react.stories.js +7 -7
  396. package/dist/packages/select/select.react.test.js +6 -6
  397. package/dist/packages/select/select.stories.d.ts +3 -3
  398. package/dist/packages/select/select.stories.js +51 -48
  399. package/dist/packages/select/select.test.d.ts +1 -1
  400. package/dist/packages/select/select.test.js +175 -178
  401. package/dist/packages/select/styles.js +1 -1
  402. package/dist/packages/slider/Slider.d.ts +1 -1
  403. package/dist/packages/slider/Slider.js +4 -4
  404. package/dist/packages/slider/index.d.ts +2 -2
  405. package/dist/packages/slider/index.js +2 -2
  406. package/dist/packages/slider/react.d.ts +3 -3
  407. package/dist/packages/slider/react.js +9 -9
  408. package/dist/packages/slider/slider.d.ts +3 -3
  409. package/dist/packages/slider/slider.hydration.test.d.ts +1 -1
  410. package/dist/packages/slider/slider.hydration.test.js +39 -20
  411. package/dist/packages/slider/slider.js +480 -462
  412. package/dist/packages/slider/slider.js.map +2 -2
  413. package/dist/packages/slider/slider.react.stories.d.ts +3 -3
  414. package/dist/packages/slider/slider.react.stories.js +31 -34
  415. package/dist/packages/slider/slider.react.test.js +6 -6
  416. package/dist/packages/slider/slider.stories.d.ts +7 -7
  417. package/dist/packages/slider/slider.stories.js +332 -340
  418. package/dist/packages/slider/slider.test.d.ts +5 -5
  419. package/dist/packages/slider/slider.test.js +367 -334
  420. package/dist/packages/slider/styles/w-slider.styles.js +166 -148
  421. package/dist/packages/slider/styles.js +1 -1
  422. package/dist/packages/slider-thumb/SliderThumb.d.ts +1 -1
  423. package/dist/packages/slider-thumb/SliderThumb.js +4 -4
  424. package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.d.ts +1 -1
  425. package/dist/packages/slider-thumb/oddbird-css-anchor-positioning.js +1 -1
  426. package/dist/packages/slider-thumb/react.d.ts +3 -3
  427. package/dist/packages/slider-thumb/react.js +11 -9
  428. package/dist/packages/slider-thumb/slider-thumb.d.ts +3 -3
  429. package/dist/packages/slider-thumb/slider-thumb.hydration.test.d.ts +1 -1
  430. package/dist/packages/slider-thumb/slider-thumb.hydration.test.js +26 -17
  431. package/dist/packages/slider-thumb/slider-thumb.js +545 -548
  432. package/dist/packages/slider-thumb/slider-thumb.js.map +3 -3
  433. package/dist/packages/slider-thumb/slider-thumb.react.test.js +9 -5
  434. package/dist/packages/slider-thumb/styles/w-slider-thumb.styles.js +189 -188
  435. package/dist/packages/slider-thumb/styles.js +1 -1
  436. package/dist/packages/snackbar/react.d.ts +1 -1
  437. package/dist/packages/snackbar/react.js +4 -4
  438. package/dist/packages/snackbar/snackbar.d.ts +3 -3
  439. package/dist/packages/snackbar/snackbar.hydration.test.d.ts +1 -1
  440. package/dist/packages/snackbar/snackbar.hydration.test.js +6 -6
  441. package/dist/packages/snackbar/snackbar.js +487 -468
  442. package/dist/packages/snackbar/snackbar.js.map +2 -2
  443. package/dist/packages/snackbar/snackbar.react.stories.js +3 -3
  444. package/dist/packages/snackbar/snackbar.stories.d.ts +11 -11
  445. package/dist/packages/snackbar/snackbar.stories.js +253 -181
  446. package/dist/packages/snackbar/snackbar.test.d.ts +4 -4
  447. package/dist/packages/snackbar/snackbar.test.js +11 -11
  448. package/dist/packages/snackbar/styles.js +29 -29
  449. package/dist/packages/snackbar-item/react.d.ts +2 -2
  450. package/dist/packages/snackbar-item/react.js +6 -5
  451. package/dist/packages/snackbar-item/snackbar-item.d.ts +4 -4
  452. package/dist/packages/snackbar-item/snackbar-item.js +454 -435
  453. package/dist/packages/snackbar-item/snackbar-item.js.map +2 -2
  454. package/dist/packages/snackbar-item/snackbar-item.react.test.js +4 -4
  455. package/dist/packages/snackbar-item/styles.js +130 -108
  456. package/dist/packages/step/react.d.ts +1 -1
  457. package/dist/packages/step/react.js +4 -4
  458. package/dist/packages/step/step.d.ts +2 -2
  459. package/dist/packages/step/step.hydration.test.d.ts +1 -1
  460. package/dist/packages/step/step.hydration.test.js +10 -10
  461. package/dist/packages/step/step.js +330 -308
  462. package/dist/packages/step/step.js.map +2 -2
  463. package/dist/packages/step-indicator/index.d.ts +2 -2
  464. package/dist/packages/step-indicator/index.js +2 -2
  465. package/dist/packages/step-indicator/react.d.ts +2 -2
  466. package/dist/packages/step-indicator/react.js +5 -5
  467. package/dist/packages/step-indicator/step-indicator.a11y.test.d.ts +2 -2
  468. package/dist/packages/step-indicator/step-indicator.a11y.test.js +48 -46
  469. package/dist/packages/step-indicator/step-indicator.d.ts +1 -1
  470. package/dist/packages/step-indicator/step-indicator.hydration.test.d.ts +1 -1
  471. package/dist/packages/step-indicator/step-indicator.hydration.test.js +10 -10
  472. package/dist/packages/step-indicator/step-indicator.js +280 -276
  473. package/dist/packages/step-indicator/step-indicator.js.map +2 -2
  474. package/dist/packages/step-indicator/stepindicator.react.stories.d.ts +2 -2
  475. package/dist/packages/step-indicator/stepindicator.react.stories.js +3 -3
  476. package/dist/packages/step-indicator/stepindicator.stories.d.ts +3 -3
  477. package/dist/packages/step-indicator/stepindicator.stories.js +129 -129
  478. package/dist/packages/step-indicator/styles.js +1 -1
  479. package/dist/packages/styles.js +274 -274
  480. package/dist/packages/switch/react.d.ts +1 -1
  481. package/dist/packages/switch/react.js +6 -6
  482. package/dist/packages/switch/styles.js +1 -1
  483. package/dist/packages/switch/switch.a11y.test.d.ts +1 -1
  484. package/dist/packages/switch/switch.a11y.test.js +46 -38
  485. package/dist/packages/switch/switch.d.ts +1 -1
  486. package/dist/packages/switch/switch.hydration.test.d.ts +1 -1
  487. package/dist/packages/switch/switch.hydration.test.js +23 -23
  488. package/dist/packages/switch/switch.js +299 -299
  489. package/dist/packages/switch/switch.js.map +2 -2
  490. package/dist/packages/switch/switch.react.stories.d.ts +2 -2
  491. package/dist/packages/switch/switch.react.stories.js +2 -2
  492. package/dist/packages/switch/switch.stories.d.ts +2 -2
  493. package/dist/packages/switch/switch.stories.js +42 -37
  494. package/dist/packages/switch/switch.test.d.ts +1 -1
  495. package/dist/packages/switch/switch.test.js +30 -35
  496. package/dist/packages/tab/react.d.ts +6 -4
  497. package/dist/packages/tab/react.js +11 -10
  498. package/dist/packages/tab/styles.d.ts +1 -0
  499. package/dist/packages/tab/styles.js +2 -0
  500. package/dist/packages/tab/tab.d.ts +5 -5
  501. package/dist/packages/tab/tab.hydration.test.d.ts +1 -1
  502. package/dist/packages/tab/tab.hydration.test.js +18 -12
  503. package/dist/packages/tab/tab.js +305 -304
  504. package/dist/packages/tab/tab.js.map +3 -3
  505. package/dist/packages/tab/tab.react.test.js +5 -3
  506. package/dist/packages/tab-panel/react.d.ts +3 -2
  507. package/dist/packages/tab-panel/react.js +11 -5
  508. package/dist/packages/tab-panel/tab-panel.d.ts +3 -3
  509. package/dist/packages/tab-panel/tab-panel.hydration.test.d.ts +1 -1
  510. package/dist/packages/tab-panel/tab-panel.hydration.test.js +13 -10
  511. package/dist/packages/tab-panel/tab-panel.js +289 -287
  512. package/dist/packages/tab-panel/tab-panel.js.map +2 -2
  513. package/dist/packages/tabs/index.d.ts +4 -4
  514. package/dist/packages/tabs/index.js +3 -3
  515. package/dist/packages/tabs/react.d.ts +27 -8
  516. package/dist/packages/tabs/react.js +30 -9
  517. package/dist/packages/tabs/styles.js +1 -1
  518. package/dist/packages/tabs/tabs.a11y.test.d.ts +3 -3
  519. package/dist/packages/tabs/tabs.a11y.test.js +188 -169
  520. package/dist/packages/tabs/tabs.d.ts +3 -3
  521. package/dist/packages/tabs/tabs.hydration.test.d.ts +3 -1
  522. package/dist/packages/tabs/tabs.hydration.test.js +22 -8
  523. package/dist/packages/tabs/tabs.js +289 -282
  524. package/dist/packages/tabs/tabs.js.map +2 -2
  525. package/dist/packages/tabs/tabs.react.stories.d.ts +12 -10
  526. package/dist/packages/tabs/tabs.react.stories.js +28 -28
  527. package/dist/packages/tabs/tabs.stories.d.ts +4 -4
  528. package/dist/packages/tabs/tabs.stories.js +101 -95
  529. package/dist/packages/tabs/tabs.test.d.ts +3 -3
  530. package/dist/packages/tabs/tabs.test.js +136 -122
  531. package/dist/packages/textarea/react.d.ts +2 -2
  532. package/dist/packages/textarea/react.js +17 -17
  533. package/dist/packages/textarea/styles.js +1 -1
  534. package/dist/packages/textarea/textarea.a11y.test.d.ts +1 -1
  535. package/dist/packages/textarea/textarea.a11y.test.js +89 -57
  536. package/dist/packages/textarea/textarea.d.ts +1 -1
  537. package/dist/packages/textarea/textarea.hydration.test.d.ts +1 -1
  538. package/dist/packages/textarea/textarea.hydration.test.js +19 -19
  539. package/dist/packages/textarea/textarea.js +300 -298
  540. package/dist/packages/textarea/textarea.js.map +2 -2
  541. package/dist/packages/textarea/textarea.react.stories.d.ts +3 -3
  542. package/dist/packages/textarea/textarea.react.stories.js +13 -13
  543. package/dist/packages/textarea/textarea.react.test.js +7 -7
  544. package/dist/packages/textarea/textarea.stories.d.ts +3 -3
  545. package/dist/packages/textarea/textarea.stories.js +44 -42
  546. package/dist/packages/textarea/textarea.test.d.ts +1 -1
  547. package/dist/packages/textarea/textarea.test.js +124 -88
  548. package/dist/packages/textfield/react.d.ts +2 -2
  549. package/dist/packages/textfield/react.js +17 -17
  550. package/dist/packages/textfield/styles/w-textfield.styles.js +60 -58
  551. package/dist/packages/textfield/styles.js +1 -1
  552. package/dist/packages/textfield/textfield.d.ts +3 -3
  553. package/dist/packages/textfield/textfield.hydration.test.d.ts +1 -1
  554. package/dist/packages/textfield/textfield.hydration.test.js +19 -19
  555. package/dist/packages/textfield/textfield.js +376 -368
  556. package/dist/packages/textfield/textfield.js.map +3 -3
  557. package/dist/packages/textfield/textfield.react.stories.d.ts +3 -3
  558. package/dist/packages/textfield/textfield.react.stories.js +31 -31
  559. package/dist/packages/textfield/textfield.react.test.js +7 -7
  560. package/dist/packages/textfield/textfield.stories.d.ts +4 -4
  561. package/dist/packages/textfield/textfield.stories.js +107 -89
  562. package/dist/packages/textfield/textfield.test.d.ts +2 -2
  563. package/dist/packages/textfield/textfield.test.js +103 -71
  564. package/dist/packages/toast/api.d.ts +1 -1
  565. package/dist/packages/toast/api.js +3 -3
  566. package/dist/packages/toast/index.d.ts +5 -5
  567. package/dist/packages/toast/index.js +5 -5
  568. package/dist/packages/toast/toast.d.ts +4 -4
  569. package/dist/packages/toast/toast.js +343 -314
  570. package/dist/packages/toast/toast.js.map +2 -2
  571. package/dist/packages/toast/toast.stories.d.ts +4 -4
  572. package/dist/packages/toast/toast.stories.js +37 -16
  573. package/dist/packages/toast/toast.test.d.ts +1 -1
  574. package/dist/packages/toast/toast.test.js +48 -31
  575. package/dist/packages/toast/types.d.ts +1 -1
  576. package/dist/packages/toast-container/styles.js +1 -1
  577. package/dist/packages/toast-container/toast-container.d.ts +2 -2
  578. package/dist/packages/toast-container/toast-container.js +291 -290
  579. package/dist/packages/toast-container/toast-container.js.map +2 -2
  580. package/dist/packages/utils/element-collapse.js +38 -28
  581. package/dist/packages/utils/expand-transition.d.ts +1 -1
  582. package/dist/packages/utils/expand-transition.js +12 -10
  583. package/dist/packages/utils/unstyled-heading.d.ts +1 -1
  584. package/dist/packages/utils/unstyled-heading.js +4 -4
  585. package/dist/packages/utils/window-exists.js +1 -1
  586. package/dist/packages/utils.js +2 -2
  587. package/dist/setup-tests.d.ts +3 -3
  588. package/dist/setup-tests.js +16 -13
  589. package/dist/tests/react-hydration.js +29 -30
  590. package/dist/tests/react-ssr-attributes.d.ts +1 -1
  591. package/dist/tests/react-ssr-attributes.js +4 -4
  592. package/dist/web-types.json +25 -22
  593. package/eik/index.js +9 -9
  594. package/package.json +11 -16
@@ -1,169 +1,183 @@
1
- import { userEvent } from 'vitest/browser';
2
- import { html } from 'lit';
3
- import { expect, test } from 'vitest';
4
- import { render } from 'vitest-browser-lit';
5
- import '../tab/tab.js';
6
- import '../tab-panel/tab-panel.js';
7
- import './tabs.js';
8
- test('renders the different tab components', async () => {
1
+ import { userEvent } from "vitest/browser";
2
+ import { html } from "lit";
3
+ import { expect, test } from "vitest";
4
+ import { render } from "vitest-browser-lit";
5
+ import "../tab/tab.js";
6
+ import "../tab-panel/tab-panel.js";
7
+ import "./tabs.js";
8
+ test("renders the different tab components", async () => {
9
9
  const component = html `<w-tabs>
10
- <w-tab for="fellowship">Fellowship</w-tab>
11
- <w-tab-panel id="fellowship">
12
- <p>And my axe!</p>
13
- </w-tab-panel>
10
+ <w-tab for="fellowship">Fellowship</w-tab>
11
+ <w-tab-panel id="fellowship">
12
+ <p>And my axe!</p>
13
+ </w-tab-panel>
14
14
 
15
- <w-tab for="towers">Towers</w-tab>
16
- <w-tab-panel id="towers">
17
- <p>I am on nobody's side, because nobody is on my side, little orc.</p>
18
- </w-tab-panel>
15
+ <w-tab for="towers">Towers</w-tab>
16
+ <w-tab-panel id="towers">
17
+ <p>I am on nobody's side, because nobody is on my side, little orc.</p>
18
+ </w-tab-panel>
19
19
 
20
- <w-tab for="return">Return</w-tab>
21
- <w-tab-panel id="return">
22
- <p>I am no man.</p>
23
- </w-tab-panel>
24
- </w-tabs>`;
20
+ <w-tab for="return">Return</w-tab>
21
+ <w-tab-panel id="return">
22
+ <p>I am no man.</p>
23
+ </w-tab-panel>
24
+ </w-tabs>`;
25
25
  const page = render(component);
26
26
  // defaults to the first tab if the active property is not set
27
- await expect.element(page.getByText('And my axe!')).toBeVisible();
28
- await expect.element(page.getByText("I am on nobody's side")).not.toBeVisible();
29
- await expect.element(page.getByText('I am no man')).not.toBeVisible();
27
+ await expect.element(page.getByText("And my axe!")).toBeVisible();
28
+ await expect
29
+ .element(page.getByText("I am on nobody's side"))
30
+ .not.toBeVisible();
31
+ await expect.element(page.getByText("I am no man")).not.toBeVisible();
30
32
  });
31
- test('can control the visible tab with the active attribute', async () => {
33
+ test("can control the visible tab with the active attribute", async () => {
32
34
  const component = html `<w-tabs active="towers">
33
- <w-tab for="fellowship">Fellowship</w-tab>
34
- <w-tab-panel id="fellowship">
35
- <p>And my axe!</p>
36
- </w-tab-panel>
35
+ <w-tab for="fellowship">Fellowship</w-tab>
36
+ <w-tab-panel id="fellowship">
37
+ <p>And my axe!</p>
38
+ </w-tab-panel>
37
39
 
38
- <w-tab for="towers">Towers</w-tab>
39
- <w-tab-panel id="towers">
40
- <p>I am on nobody's side, because nobody is on my side, little orc.</p>
41
- </w-tab-panel>
40
+ <w-tab for="towers">Towers</w-tab>
41
+ <w-tab-panel id="towers">
42
+ <p>I am on nobody's side, because nobody is on my side, little orc.</p>
43
+ </w-tab-panel>
42
44
 
43
- <w-tab for="return">Return</w-tab>
44
- <w-tab-panel id="return">
45
- <p>I am no man.</p>
46
- </w-tab-panel>
47
- </w-tabs>`;
45
+ <w-tab for="return">Return</w-tab>
46
+ <w-tab-panel id="return">
47
+ <p>I am no man.</p>
48
+ </w-tab-panel>
49
+ </w-tabs>`;
48
50
  const page = render(component);
49
51
  await expect.element(page.getByText("I am on nobody's side")).toBeVisible();
50
- await expect.element(page.getByText('And my axe!')).not.toBeVisible();
51
- await expect.element(page.getByText('I am no man')).not.toBeVisible();
52
+ await expect.element(page.getByText("And my axe!")).not.toBeVisible();
53
+ await expect.element(page.getByText("I am no man")).not.toBeVisible();
52
54
  });
53
- test('clicking a tab changes the active attribute, visible tab panel', async () => {
55
+ test("clicking a tab changes the active attribute, visible tab panel", async () => {
54
56
  const component = html `<w-tabs active="towers">
55
- <w-tab for="fellowship">Fellowship</w-tab>
56
- <w-tab-panel id="fellowship">
57
- <p>And my axe!</p>
58
- </w-tab-panel>
57
+ <w-tab for="fellowship">Fellowship</w-tab>
58
+ <w-tab-panel id="fellowship">
59
+ <p>And my axe!</p>
60
+ </w-tab-panel>
59
61
 
60
- <w-tab for="towers">Towers</w-tab>
61
- <w-tab-panel id="towers">
62
- <p>I am on nobody's side, because nobody is on my side, little orc.</p>
63
- </w-tab-panel>
62
+ <w-tab for="towers">Towers</w-tab>
63
+ <w-tab-panel id="towers">
64
+ <p>I am on nobody's side, because nobody is on my side, little orc.</p>
65
+ </w-tab-panel>
64
66
 
65
- <w-tab for="return">Return</w-tab>
66
- <w-tab-panel id="return">
67
- <p>I am no man.</p>
68
- </w-tab-panel>
69
- </w-tabs>`;
67
+ <w-tab for="return">Return</w-tab>
68
+ <w-tab-panel id="return">
69
+ <p>I am no man.</p>
70
+ </w-tab-panel>
71
+ </w-tabs>`;
70
72
  const page = render(component);
71
73
  // Query tabs by element tag name since role is set via ElementInternals
72
- const tabs = page.container.querySelectorAll('w-tab');
74
+ const tabs = page.container.querySelectorAll("w-tab");
73
75
  await userEvent.click(tabs[2]);
74
- await page.container.querySelector('w-tabs').updateComplete;
75
- await page.container.querySelectorAll('w-tab-panel')[2].updateComplete;
76
- await expect.element(page.getByText('I am no man')).toBeVisible();
77
- await expect.element(page.getByText('And my axe!')).not.toBeVisible();
78
- await expect.element(page.getByText("I am on nobody's side")).not.toBeVisible();
76
+ await page.container.querySelector("w-tabs").updateComplete;
77
+ await page.container.querySelectorAll("w-tab-panel")[2].updateComplete;
78
+ await expect.element(page.getByText("I am no man")).toBeVisible();
79
+ await expect.element(page.getByText("And my axe!")).not.toBeVisible();
80
+ await expect
81
+ .element(page.getByText("I am on nobody's side"))
82
+ .not.toBeVisible();
79
83
  });
80
- test('switches panel content when panels are initialized with hidden attribute', async () => {
84
+ test("switches panel content when panels are initialized with hidden attribute", async () => {
81
85
  const component = html `<w-tabs active="tab2">
82
- <w-tab for="tab1">First Tab</w-tab>
83
- <w-tab-panel id="tab1">
84
- <p>Content for the first tab.</p>
85
- </w-tab-panel>
86
+ <w-tab for="tab1">First Tab</w-tab>
87
+ <w-tab-panel id="tab1">
88
+ <p>Content for the first tab.</p>
89
+ </w-tab-panel>
86
90
 
87
- <w-tab for="tab2">Second Tab</w-tab>
88
- <w-tab-panel id="tab2" hidden>
89
- <p>Content for the second tab.</p>
90
- </w-tab-panel>
91
+ <w-tab for="tab2">Second Tab</w-tab>
92
+ <w-tab-panel id="tab2" hidden>
93
+ <p>Content for the second tab.</p>
94
+ </w-tab-panel>
91
95
 
92
- <w-tab for="tab3">Third Tab</w-tab>
93
- <w-tab-panel id="tab3" hidden>
94
- <p>Content for the third tab.</p>
95
- </w-tab-panel>
96
- </w-tabs>`;
96
+ <w-tab for="tab3">Third Tab</w-tab>
97
+ <w-tab-panel id="tab3" hidden>
98
+ <p>Content for the third tab.</p>
99
+ </w-tab-panel>
100
+ </w-tabs>`;
97
101
  const page = render(component);
98
- await page.container.querySelector('w-tabs').updateComplete;
99
- await expect.element(page.getByText('Content for the second tab.')).toBeVisible();
100
- await expect.element(page.getByText('Content for the first tab.')).not.toBeVisible();
101
- await expect.element(page.getByText('Content for the third tab.')).not.toBeVisible();
102
- const tabs = page.container.querySelectorAll('w-tab');
102
+ await page.container.querySelector("w-tabs").updateComplete;
103
+ await expect
104
+ .element(page.getByText("Content for the second tab."))
105
+ .toBeVisible();
106
+ await expect
107
+ .element(page.getByText("Content for the first tab."))
108
+ .not.toBeVisible();
109
+ await expect
110
+ .element(page.getByText("Content for the third tab."))
111
+ .not.toBeVisible();
112
+ const tabs = page.container.querySelectorAll("w-tab");
103
113
  await userEvent.click(tabs[2]);
104
- await page.container.querySelector('w-tabs').updateComplete;
105
- await page.container.querySelectorAll('w-tab-panel')[2].updateComplete;
106
- await expect.element(page.getByText('Content for the third tab.')).toBeVisible();
107
- await expect.element(page.getByText('Content for the second tab.')).not.toBeVisible();
114
+ await page.container.querySelector("w-tabs").updateComplete;
115
+ await page.container.querySelectorAll("w-tab-panel")[2].updateComplete;
116
+ await expect
117
+ .element(page.getByText("Content for the third tab."))
118
+ .toBeVisible();
119
+ await expect
120
+ .element(page.getByText("Content for the second tab."))
121
+ .not.toBeVisible();
108
122
  });
109
- test('tab-panel visibility is controlled via internal shadow DOM (no host attribute changes) to avoid hydration mismatch', async () => {
123
+ test("tab-panel visibility is controlled via internal shadow DOM (no host attribute changes) to avoid hydration mismatch", async () => {
110
124
  const component = html `<w-tabs>
111
- <w-tab for="panel1">Tab 1</w-tab>
112
- <w-tab-panel id="panel1">
113
- <p>Content 1</p>
114
- </w-tab-panel>
125
+ <w-tab for="panel1">Tab 1</w-tab>
126
+ <w-tab-panel id="panel1">
127
+ <p>Content 1</p>
128
+ </w-tab-panel>
115
129
 
116
- <w-tab for="panel2">Tab 2</w-tab>
117
- <w-tab-panel id="panel2">
118
- <p>Content 2</p>
119
- </w-tab-panel>
120
- </w-tabs>`;
130
+ <w-tab for="panel2">Tab 2</w-tab>
131
+ <w-tab-panel id="panel2">
132
+ <p>Content 2</p>
133
+ </w-tab-panel>
134
+ </w-tabs>`;
121
135
  const page = render(component);
122
136
  // Wait for tabs component to initialize
123
- await page.container.querySelector('w-tabs').updateComplete;
124
- const panels = page.container.querySelectorAll('w-tab-panel');
137
+ await page.container.querySelector("w-tabs").updateComplete;
138
+ const panels = page.container.querySelectorAll("w-tab-panel");
125
139
  // Visibility is controlled via internal shadow DOM elements, not host attributes
126
140
  // This avoids hydration mismatches when parent sets _parentActive
127
141
  expect(panels[0].active).toBe(true);
128
142
  expect(panels[1].active).toBe(false);
129
143
  // Internal shadow DOM wrapper has data-active attribute for CSS visibility
130
- const activeWrapper = panels[0].shadowRoot?.querySelector('.panel-content');
131
- const inactiveWrapper = panels[1].shadowRoot?.querySelector('.panel-content');
132
- expect(activeWrapper?.hasAttribute('data-active')).toBe(true);
133
- expect(inactiveWrapper?.hasAttribute('data-active')).toBe(false);
144
+ const activeWrapper = panels[0].shadowRoot?.querySelector(".panel-content");
145
+ const inactiveWrapper = panels[1].shadowRoot?.querySelector(".panel-content");
146
+ expect(activeWrapper?.hasAttribute("data-active")).toBe(true);
147
+ expect(inactiveWrapper?.hasAttribute("data-active")).toBe(false);
134
148
  // Verify visibility works correctly
135
- await expect.element(page.getByText('Content 1')).toBeVisible();
136
- await expect.element(page.getByText('Content 2')).not.toBeVisible();
149
+ await expect.element(page.getByText("Content 1")).toBeVisible();
150
+ await expect.element(page.getByText("Content 2")).not.toBeVisible();
137
151
  });
138
- test('aria-selected uses ElementInternals (no DOM attribute) to avoid hydration mismatch', async () => {
152
+ test("aria-selected uses ElementInternals (no DOM attribute) to avoid hydration mismatch", async () => {
139
153
  const component = html `<w-tabs>
140
- <w-tab for="panel1">Tab 1</w-tab>
141
- <w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
154
+ <w-tab for="panel1">Tab 1</w-tab>
155
+ <w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
142
156
 
143
- <w-tab for="panel2">Tab 2</w-tab>
144
- <w-tab-panel id="panel2"><p>Content 2</p></w-tab-panel>
145
- </w-tabs>`;
157
+ <w-tab for="panel2">Tab 2</w-tab>
158
+ <w-tab-panel id="panel2"><p>Content 2</p></w-tab-panel>
159
+ </w-tabs>`;
146
160
  const page = render(component);
147
- const tabsEl = page.container.querySelector('w-tabs');
161
+ const tabsEl = page.container.querySelector("w-tabs");
148
162
  await tabsEl.updateComplete;
149
- const tabs = page.container.querySelectorAll('w-tab');
163
+ const tabs = page.container.querySelectorAll("w-tab");
150
164
  // aria-selected is set via ElementInternals, not as a DOM attribute (to avoid hydration mismatch)
151
- expect(tabs[0].hasAttribute('aria-selected')).toBe(false);
152
- expect(tabs[1].hasAttribute('aria-selected')).toBe(false);
165
+ expect(tabs[0].hasAttribute("aria-selected")).toBe(false);
166
+ expect(tabs[1].hasAttribute("aria-selected")).toBe(false);
153
167
  // But the property should be set correctly by the parent
154
- expect(tabs[0].ariaSelected).toBe('true');
155
- expect(tabs[1].ariaSelected).toBe('false');
168
+ expect(tabs[0].ariaSelected).toBe("true");
169
+ expect(tabs[1].ariaSelected).toBe("false");
156
170
  });
157
- test('w-tab does not mutate host aria-controls by default', async () => {
171
+ test("w-tab does not mutate host aria-controls by default", async () => {
158
172
  const component = html `<w-tabs>
159
- <w-tab for="panel1">Tab 1</w-tab>
160
- <w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
161
- </w-tabs>`;
173
+ <w-tab for="panel1">Tab 1</w-tab>
174
+ <w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
175
+ </w-tabs>`;
162
176
  const page = render(component);
163
- const tabsEl = page.container.querySelector('w-tabs');
177
+ const tabsEl = page.container.querySelector("w-tabs");
164
178
  await tabsEl.updateComplete;
165
- const tab = page.container.querySelector('w-tab');
166
- const internalButton = tab.shadowRoot?.querySelector('button');
167
- expect(tab.hasAttribute('aria-controls')).toBe(false);
168
- expect(internalButton?.getAttribute('aria-controls')).toBe('panel1');
179
+ const tab = page.container.querySelector("w-tab");
180
+ const internalButton = tab.shadowRoot?.querySelector("button");
181
+ expect(tab.hasAttribute("aria-controls")).toBe(false);
182
+ expect(internalButton?.getAttribute("aria-controls")).toBe("panel1");
169
183
  });
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { WarpTextarea } from './textarea.js';
1
+ import React from "react";
2
+ import { WarpTextarea } from "./textarea.js";
3
3
  export declare const Textarea: React.ForwardRefExoticComponent<Omit<Omit<Omit<React.HTMLAttributes<WarpTextarea>, "value" | "form" | "label" | "name" | "disabled" | "invalid" | "helpText" | "placeholder" | "readOnly" | "readonly" | "required" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "connectedCallback" | "disconnectedCallback" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "onblur" | "onchange" | "onfocus" | "oninput" | "updated" | "firstUpdated" | "resetFormControl" | "_helptextstyles" | "_helpId" | "_id" | "_error" | "handler" | "render" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "renderOptions" | "onFocus" | "onBlur" | "onChange" | "onInput" | "reportValidity" | "optional" | "minHeight" | "setCustomValidity" | "maxRows" | "minRows" | "maxHeight" | "_textareaStyles"> & {
4
4
  onBlur?: ((e: Event) => void) | undefined;
5
5
  onblur?: ((e: Event) => void) | undefined;
@@ -1,30 +1,30 @@
1
- import { createComponent } from '@lit/react';
2
- import { LitElement } from 'lit';
3
- import React from 'react';
1
+ import { createComponent } from "@lit/react";
2
+ import { LitElement } from "lit";
3
+ import React from "react";
4
4
  // decouple from CDN by providing a dummy class
5
5
  class Component extends LitElement {
6
6
  }
7
7
  const BaseTextarea = createComponent({
8
- tagName: 'w-textarea',
8
+ tagName: "w-textarea",
9
9
  elementClass: Component,
10
10
  react: React,
11
11
  events: {
12
- onBlur: 'blur',
13
- onblur: 'blur',
14
- onChange: 'change',
15
- onchange: 'change',
16
- onInput: 'input',
17
- oninput: 'input',
18
- onFocus: 'focus',
19
- onfocus: 'focus',
12
+ onBlur: "blur",
13
+ onblur: "blur",
14
+ onChange: "change",
15
+ onchange: "change",
16
+ onInput: "input",
17
+ oninput: "input",
18
+ onFocus: "focus",
19
+ onfocus: "focus",
20
20
  },
21
21
  });
22
22
  export const Textarea = React.forwardRef(({ helpText, maxRows, minRows, readOnly, ...props }, ref) => React.createElement(BaseTextarea, {
23
23
  ...props,
24
- ...(helpText !== undefined ? { 'help-text': helpText } : {}),
25
- ...(maxRows !== undefined ? { 'maximum-rows': maxRows } : {}),
26
- ...(minRows !== undefined ? { 'minimum-rows': minRows } : {}),
27
- ...(readOnly ? { 'read-only': true } : {}),
24
+ ...(helpText !== undefined ? { "help-text": helpText } : {}),
25
+ ...(maxRows !== undefined ? { "maximum-rows": maxRows } : {}),
26
+ ...(minRows !== undefined ? { "minimum-rows": minRows } : {}),
27
+ ...(readOnly ? { "read-only": true } : {}),
28
28
  ref,
29
29
  }));
30
- Textarea.displayName = 'Textarea';
30
+ Textarea.displayName = "Textarea";
@@ -1,2 +1,2 @@
1
- import { unsafeCSS } from 'lit';
1
+ import { unsafeCSS } from "lit";
2
2
  export const styles = unsafeCSS("*,:before,:after{--w-rotate:0;--w-rotate-x:0;--w-rotate-y:0;--w-rotate-z:0;--w-scale-x:1;--w-scale-y:1;--w-scale-z:1;--w-skew-x:0;--w-skew-y:0;--w-translate-x:0;--w-translate-y:0;--w-translate-z:0}.focus\\:\\[--w-outline-offset\\:-2px\\]:focus{--w-outline-offset:-2px}.bg-transparent{background-color:#0000}.border-1{border-width:1px}.rounded-4{border-radius:4px}.caret-current{caret-color:currentColor}.block{display:block}.flex{display:flex}.focusable:focus{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:focus-visible{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:not(:focus-visible){outline:none}.outline-\\[--w-s-color-border-negative\\]\\!{outline-color:var(--w-s-color-border-negative)!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.s-bg{background-color:var(--w-s-color-background)}.s-bg-disabled-subtle{background-color:var(--w-s-color-background-disabled-subtle)}.s-text{color:var(--w-s-color-text)}.s-text-disabled{color:var(--w-s-color-text-disabled)}.s-text-negative{color:var(--w-s-color-text-negative)}.s-text-subtle{color:var(--w-s-color-text-subtle)}.placeholder\\:s-text-placeholder::placeholder{color:var(--w-s-color-text-placeholder)}.s-border-disabled{border-color:var(--w-s-color-border-disabled)}.s-border-negative{border-color:var(--w-s-color-border-negative)}.s-border-strong{border-color:var(--w-s-color-border-strong)}.hover\\:s-border-negative-hover:hover{border-color:var(--w-s-color-border-negative-hover)}.hover\\:s-border-strong-hover:hover{border-color:var(--w-s-color-border-strong-hover)}.active\\:s-border-selected:active{border-color:var(--w-s-color-border-selected)}.w-full{width:100%}.min-h-\\[42\\]{min-height:4.2rem}.mb-0{margin-bottom:0}.mt-4{margin-top:.4rem}.px-8{padding-left:.8rem;padding-right:.8rem}.py-12{padding-top:1.2rem;padding-bottom:1.2rem}.pb-4{padding-bottom:.4rem}.pl-0{padding-left:0}.pl-8{padding-left:.8rem}.pr-40{padding-right:4rem}.pl-\\[var\\(--w-prefix-width\\,_40px\\)\\]{padding-left:var(--w-prefix-width,40px)}.visible{visibility:visible}.cursor-pointer{cursor:pointer}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}.font-bold{font-weight:700}.font-normal{font-weight:400}.pointer-events-none{pointer-events:none}.resize{resize:both}.resize-none{resize:none}.text-m{font-size:var(--w-font-size-m);line-height:var(--w-line-height-m)}.text-s{font-size:var(--w-font-size-s);line-height:var(--w-line-height-s)}.text-xs{font-size:var(--w-font-size-xs);line-height:var(--w-line-height-xs)}.leading-m{line-height:var(--w-line-height-m)}@media (min-width:480px){.sm\\:min-h-\\[45\\]{min-height:4.5rem}}");
@@ -1 +1 @@
1
- import './textarea.js';
1
+ import "./textarea.js";
@@ -1,111 +1,143 @@
1
- import { i18n } from '@lingui/core';
2
- import { html } from 'lit';
3
- import { describe, expect, test } from 'vitest';
4
- import { render } from 'vitest-browser-lit';
5
- import { messages } from './locales/en/messages.mjs';
6
- import './textarea.js';
1
+ import { i18n } from "@lingui/core";
2
+ import { html } from "lit";
3
+ import { describe, expect, test } from "vitest";
4
+ import { render } from "vitest-browser-lit";
5
+ import { messages } from "./locales/en/messages.mjs";
6
+ import "./textarea.js";
7
7
  // Initialize i18n with English locale for tests
8
- i18n.load('en', messages);
9
- i18n.activate('en');
10
- describe('w-textarea accessibility (WCAG 2.2)', () => {
11
- describe('axe-core automated checks', () => {
8
+ i18n.load("en", messages);
9
+ i18n.activate("en");
10
+ describe("w-textarea accessibility (WCAG 2.2)", () => {
11
+ describe("axe-core automated checks", () => {
12
12
  // go through setting the various attributes and running automated AXE tests on each
13
- test('default state has no violations', async () => {
13
+ test("default state has no violations", async () => {
14
14
  const page = render(html `<w-textarea label="Message"></w-textarea>`);
15
15
  await expect(page).toHaveNoAxeViolations();
16
16
  });
17
- test('with help text has no violations', async () => {
18
- const page = render(html `<w-textarea label="Message" help-text="Enter your message"></w-textarea>`);
17
+ test("with help text has no violations", async () => {
18
+ const page = render(html `<w-textarea
19
+ label="Message"
20
+ help-text="Enter your message"
21
+ ></w-textarea>`);
19
22
  await expect(page).toHaveNoAxeViolations();
20
23
  });
21
- test('invalid state has no violations', async () => {
22
- const page = render(html `<w-textarea label="Message" invalid help-text="This field is required"></w-textarea>`);
24
+ test("invalid state has no violations", async () => {
25
+ const page = render(html `<w-textarea
26
+ label="Message"
27
+ invalid
28
+ help-text="This field is required"
29
+ ></w-textarea>`);
23
30
  await expect(page).toHaveNoAxeViolations();
24
31
  });
25
- test('disabled state has no violations', async () => {
32
+ test("disabled state has no violations", async () => {
26
33
  const page = render(html `<w-textarea label="Message" disabled></w-textarea>`);
27
34
  await expect(page).toHaveNoAxeViolations();
28
35
  });
29
- test('readonly state has no violations', async () => {
30
- const page = render(html `<w-textarea label="Message" readonly value="Read only text"></w-textarea>`);
36
+ test("readonly state has no violations", async () => {
37
+ const page = render(html `<w-textarea
38
+ label="Message"
39
+ readonly
40
+ value="Read only text"
41
+ ></w-textarea>`);
31
42
  await expect(page).toHaveNoAxeViolations();
32
43
  });
33
- test('required state has no violations', async () => {
44
+ test("required state has no violations", async () => {
34
45
  const page = render(html `<w-textarea label="Message" required></w-textarea>`);
35
46
  await expect(page).toHaveNoAxeViolations();
36
47
  });
37
- test('optional state has no violations', async () => {
48
+ test("optional state has no violations", async () => {
38
49
  const page = render(html `<w-textarea label="Message" optional></w-textarea>`);
39
50
  await expect(page).toHaveNoAxeViolations();
40
51
  });
41
52
  });
42
- describe('WCAG 1.3.1 - Info and Relationships', () => {
43
- test('textarea has accessible name from label', async () => {
53
+ describe("WCAG 1.3.1 - Info and Relationships", () => {
54
+ test("textarea has accessible name from label", async () => {
44
55
  const page = render(html `<w-textarea label="Description"></w-textarea>`);
45
56
  // this checks that after we set the label to "Description", the textbox's accessible name is also "Description".
46
57
  // accessible name is derived from the label (or aria-label / aria-labelledby) if present (which they are not in this case)
47
- await expect.element(page.getByRole('textbox', { name: 'Description' })).toBeVisible();
58
+ await expect
59
+ .element(page.getByRole("textbox", { name: "Description" }))
60
+ .toBeVisible();
48
61
  });
49
62
  });
50
- describe('WCAG 3.3.1 - Error Identification', () => {
51
- test('error state is indicated via aria-invalid', async () => {
63
+ describe("WCAG 3.3.1 - Error Identification", () => {
64
+ test("error state is indicated via aria-invalid", async () => {
52
65
  const page = render(html `<w-textarea label="Message" invalid></w-textarea>`);
53
- await expect.element(page.getByLabelText('Message')).toHaveAttribute('aria-invalid', 'true');
54
- });
55
- test('error message is associated via aria-errormessage', async () => {
56
- const page = render(html `<w-textarea label="Message" invalid help-text="Field is required"></w-textarea>`);
57
- await expect.element(page.getByLabelText('Message')).toHaveAccessibleErrorMessage('Field is required');
66
+ await expect
67
+ .element(page.getByLabelText("Message"))
68
+ .toHaveAttribute("aria-invalid", "true");
69
+ });
70
+ test("error message is associated via aria-errormessage", async () => {
71
+ const page = render(html `<w-textarea
72
+ label="Message"
73
+ invalid
74
+ help-text="Field is required"
75
+ ></w-textarea>`);
76
+ await expect
77
+ .element(page.getByLabelText("Message"))
78
+ .toHaveAccessibleErrorMessage("Field is required");
58
79
  });
59
80
  });
60
- describe('WCAG 3.3.2 - Labels or Instructions', () => {
61
- test('help text is programmatically associated', async () => {
62
- const page = render(html `<w-textarea label="Bio" help-text="Tell us about yourself"></w-textarea>`);
63
- await expect.element(page.getByLabelText('Bio')).toHaveAccessibleDescription('Tell us about yourself');
81
+ describe("WCAG 3.3.2 - Labels or Instructions", () => {
82
+ test("help text is programmatically associated", async () => {
83
+ const page = render(html `<w-textarea
84
+ label="Bio"
85
+ help-text="Tell us about yourself"
86
+ ></w-textarea>`);
87
+ await expect
88
+ .element(page.getByLabelText("Bio"))
89
+ .toHaveAccessibleDescription("Tell us about yourself");
64
90
  });
65
91
  });
66
92
  // these tests essentially verify that the attributes we set on the host are mirrored to the internal textarea
67
- describe('WCAG 4.1.2 - Name, Role, Value', () => {
68
- test('required state is exposed', async () => {
93
+ describe("WCAG 4.1.2 - Name, Role, Value", () => {
94
+ test("required state is exposed", async () => {
69
95
  const page = render(html `<w-textarea label="Name" required></w-textarea>`);
70
96
  // getByLabelText resolves to the internal <textarea>, not the host element
71
- await expect.element(page.getByLabelText('Name')).toHaveAttribute('required');
97
+ await expect
98
+ .element(page.getByLabelText("Name"))
99
+ .toHaveAttribute("required");
72
100
  });
73
- test('disabled state is exposed', async () => {
101
+ test("disabled state is exposed", async () => {
74
102
  const page = render(html `<w-textarea label="Name" disabled></w-textarea>`);
75
- await expect.element(page.getByLabelText('Name')).toBeDisabled();
103
+ await expect.element(page.getByLabelText("Name")).toBeDisabled();
76
104
  });
77
- test('readonly state is exposed', async () => {
105
+ test("readonly state is exposed", async () => {
78
106
  const page = render(html `<w-textarea label="Name" readonly></w-textarea>`);
79
- await expect.element(page.getByLabelText('Name')).toHaveAttribute('readonly');
107
+ await expect
108
+ .element(page.getByLabelText("Name"))
109
+ .toHaveAttribute("readonly");
80
110
  });
81
- test('value is exposed', async () => {
111
+ test("value is exposed", async () => {
82
112
  const page = render(html `<w-textarea label="Name" value="Hello"></w-textarea>`);
83
- await expect.element(page.getByLabelText('Name')).toHaveValue('Hello');
113
+ await expect.element(page.getByLabelText("Name")).toHaveValue("Hello");
84
114
  });
85
115
  });
86
- describe('WCAG 2.1.1 - Keyboard', () => {
87
- test('textarea is focusable', async () => {
116
+ describe("WCAG 2.1.1 - Keyboard", () => {
117
+ test("textarea is focusable", async () => {
88
118
  const page = render(html `<w-textarea label="Message"></w-textarea>`);
89
- const textarea = page.getByLabelText('Message');
119
+ const textarea = page.getByLabelText("Message");
90
120
  await textarea.click();
91
121
  // Check focus via activeElement - delegatesFocus means the shadow root's textarea gets focus
92
- const wTextarea = document.querySelector('w-textarea');
93
- await expect.poll(() => wTextarea?.shadowRoot?.activeElement?.tagName).toBe('TEXTAREA');
94
- });
95
- test('disabled textarea is not focusable', async () => {
96
- const page = render(html `
97
- <button>Before</button>
98
- <w-textarea label="Message" disabled></w-textarea>
99
- <button>After</button>
100
- `);
101
- const buttons = Array.from(document.querySelectorAll('button'));
122
+ const wTextarea = document.querySelector("w-textarea");
123
+ await expect
124
+ .poll(() => wTextarea?.shadowRoot?.activeElement?.tagName)
125
+ .toBe("TEXTAREA");
126
+ });
127
+ test("disabled textarea is not focusable", async () => {
128
+ render(html `
129
+ <button>Before</button>
130
+ <w-textarea label="Message" disabled></w-textarea>
131
+ <button>After</button>
132
+ `);
133
+ const buttons = [...document.querySelectorAll("button")];
102
134
  const beforeBtn = buttons[0];
103
135
  const afterBtn = buttons[1];
104
136
  expect(beforeBtn).toBeDefined();
105
137
  expect(afterBtn).toBeDefined();
106
138
  beforeBtn.focus();
107
139
  // Attempt to move focus to the disabled textarea; focus should remain on "Before".
108
- const wTextarea = document.querySelector('w-textarea');
140
+ const wTextarea = document.querySelector("w-textarea");
109
141
  wTextarea?.click();
110
142
  await expect.element(beforeBtn).toHaveFocus();
111
143
  // Verify disabled textarea doesn't receive focus
@@ -1,4 +1,4 @@
1
- import { LitElement, PropertyValues } from 'lit';
1
+ import { LitElement, PropertyValues } from "lit";
2
2
  declare const WarpTextarea_base: import("@open-wc/form-control").Constructor<import("@open-wc/form-control").FormControlInterface> & typeof LitElement;
3
3
  /**
4
4
  * A multi-line text input with built-in form validation, auto-resizing, and styling support.
@@ -1 +1 @@
1
- import './textarea.js';
1
+ import "./textarea.js";