wcs-core 7.2.2 → 7.4.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 (302) hide show
  1. package/README.md +11 -9
  2. package/design-tokens/dist/sncf-groupe-root-scoped.css +227 -227
  3. package/design-tokens/dist/sncf-groupe.css +227 -227
  4. package/design-tokens/dist/sncf-holding-root-scoped.css +227 -227
  5. package/design-tokens/dist/sncf-holding.css +227 -227
  6. package/design-tokens/dist/sncf-reseau-root-scoped.css +227 -227
  7. package/design-tokens/dist/sncf-reseau.css +227 -227
  8. package/design-tokens/dist/sncf-voyageurs-root-scoped.css +242 -242
  9. package/design-tokens/dist/sncf-voyageurs.css +242 -242
  10. package/dist/cjs/accessibility-5f681a74.js.map +1 -1
  11. package/dist/cjs/loader.cjs.js +1 -1
  12. package/dist/cjs/{popper-8d6e7fca.js → popper-1b61df21.js} +10 -17
  13. package/dist/cjs/popper-1b61df21.js.map +1 -0
  14. package/dist/cjs/wcs-accordion-panel.cjs.entry.js +1 -1
  15. package/dist/cjs/wcs-accordion-panel.cjs.entry.js.map +1 -1
  16. package/dist/cjs/wcs-accordion.cjs.entry.js +2 -1
  17. package/dist/cjs/wcs-accordion.cjs.entry.js.map +1 -1
  18. package/dist/cjs/wcs-breadcrumb.cjs.entry.js +1 -1
  19. package/dist/cjs/wcs-breadcrumb.cjs.entry.js.map +1 -1
  20. package/dist/cjs/wcs-checkbox.cjs.entry.js +3 -2
  21. package/dist/cjs/wcs-checkbox.cjs.entry.js.map +1 -1
  22. package/dist/cjs/wcs-chip.cjs.entry.js +102 -0
  23. package/dist/cjs/wcs-chip.cjs.entry.js.map +1 -0
  24. package/dist/cjs/wcs-com-nav-item.cjs.entry.js +1 -1
  25. package/dist/cjs/wcs-com-nav-item.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wcs-com-nav.cjs.entry.js +3 -3
  27. package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
  29. package/dist/cjs/wcs-error_3.cjs.entry.js +1 -1
  30. package/dist/cjs/wcs-error_3.cjs.entry.js.map +1 -1
  31. package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
  32. package/dist/cjs/wcs-grid.cjs.entry.js +5 -4
  33. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  34. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +3 -2
  35. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
  36. package/dist/cjs/wcs-modal.cjs.entry.js +2 -2
  37. package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
  38. package/dist/cjs/wcs-select_2.cjs.entry.js +59 -24
  39. package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
  40. package/dist/cjs/wcs-tabs.cjs.entry.js +1 -1
  41. package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
  42. package/dist/cjs/wcs.cjs.js +1 -1
  43. package/dist/collection/collection-manifest.json +1 -0
  44. package/dist/collection/components/accordion/accordion.e2e.playwright.js +183 -0
  45. package/dist/collection/components/accordion/accordion.e2e.playwright.js.map +1 -0
  46. package/dist/collection/components/accordion/accordion.js +2 -1
  47. package/dist/collection/components/accordion/accordion.js.map +1 -1
  48. package/dist/collection/components/accordion-panel/accordion-panel.js +3 -3
  49. package/dist/collection/components/accordion-panel/accordion-panel.js.map +1 -1
  50. package/dist/collection/components/alert/alert.e2e.playwright.js +125 -0
  51. package/dist/collection/components/alert/alert.e2e.playwright.js.map +1 -0
  52. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js +107 -0
  53. package/dist/collection/components/alert-drawer/alert-drawer.e2e.playwright.js.map +1 -0
  54. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js +188 -0
  55. package/dist/collection/components/breadcrumb/breadcrumb.e2e.playwright.js.map +1 -0
  56. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  57. package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
  58. package/dist/collection/components/button/button.e2e.playwright.js +26 -0
  59. package/dist/collection/components/button/button.e2e.playwright.js.map +1 -0
  60. package/dist/collection/components/button/button.js +1 -1
  61. package/dist/collection/components/checkbox/checkbox.css +3 -0
  62. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js +39 -0
  63. package/dist/collection/components/checkbox/checkbox.e2e.playwright.js.map +1 -0
  64. package/dist/collection/components/checkbox/checkbox.js +21 -2
  65. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  66. package/dist/collection/components/chip/chip-interface.js +2 -0
  67. package/dist/collection/components/chip/chip-interface.js.map +1 -0
  68. package/dist/collection/components/chip/chip.css +220 -0
  69. package/dist/collection/components/chip/chip.e2e.playwright.js +190 -0
  70. package/dist/collection/components/chip/chip.e2e.playwright.js.map +1 -0
  71. package/dist/collection/components/chip/chip.js +341 -0
  72. package/dist/collection/components/chip/chip.js.map +1 -0
  73. package/dist/collection/components/com-nav/com-nav.css +15 -0
  74. package/dist/collection/components/com-nav/{com-nav.e2e.js → com-nav.e2e.playwright.js} +60 -44
  75. package/dist/collection/components/com-nav/com-nav.e2e.playwright.js.map +1 -0
  76. package/dist/collection/components/com-nav/com-nav.js +3 -3
  77. package/dist/collection/components/com-nav/com-nav.js.map +1 -1
  78. package/dist/collection/components/com-nav-category/com-nav-category.js +1 -1
  79. package/dist/collection/components/com-nav-item/com-nav-item.css +2 -2
  80. package/dist/collection/components/com-nav-submenu/com-nav-submenu.js +1 -1
  81. package/dist/collection/components/counter/counter.e2e.playwright.js +187 -0
  82. package/dist/collection/components/counter/counter.e2e.playwright.js.map +1 -0
  83. package/dist/collection/components/counter/counter.js +1 -1
  84. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js +320 -0
  85. package/dist/collection/components/dropdown/dropdown.e2e.playwright.js.map +1 -0
  86. package/dist/collection/components/dropdown/dropdown.js +1 -1
  87. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js +156 -0
  88. package/dist/collection/components/editable-field/editable-field.e2e.playwright.js.map +1 -0
  89. package/dist/collection/components/form-field/form-field.e2e.playwright.js +104 -0
  90. package/dist/collection/components/form-field/form-field.e2e.playwright.js.map +1 -0
  91. package/dist/collection/components/galactic-menu/galactic-menu.js +1 -1
  92. package/dist/collection/components/grid/grid.e2e.playwright.js +153 -0
  93. package/dist/collection/components/grid/grid.e2e.playwright.js.map +1 -0
  94. package/dist/collection/components/grid/grid.js +6 -5
  95. package/dist/collection/components/grid/grid.js.map +1 -1
  96. package/dist/collection/components/grid-column/grid-column.js +1 -1
  97. package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
  98. package/dist/collection/components/header/header.js +1 -1
  99. package/dist/collection/components/horizontal-stepper/horizontal-step.js +2 -1
  100. package/dist/collection/components/horizontal-stepper/horizontal-step.js.map +1 -1
  101. package/dist/collection/components/horizontal-stepper/horizontal-stepper-interface.js.map +1 -1
  102. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +5 -1
  103. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
  104. package/dist/collection/components/icon/icon.js +1 -1
  105. package/dist/collection/components/input/input.e2e.playwright.js +157 -0
  106. package/dist/collection/components/input/input.e2e.playwright.js.map +1 -0
  107. package/dist/collection/components/input/input.js +2 -2
  108. package/dist/collection/components/label/label.css +4 -6
  109. package/dist/collection/components/label/label.js +1 -1
  110. package/dist/collection/components/mat-icon/mat-icon.js +1 -1
  111. package/dist/collection/components/modal/modal.css +4 -0
  112. package/dist/collection/components/modal/modal.e2e.playwright.js +35 -0
  113. package/dist/collection/components/modal/modal.e2e.playwright.js.map +1 -0
  114. package/dist/collection/components/modal/modal.js +2 -2
  115. package/dist/collection/components/modal/modal.js.map +1 -1
  116. package/dist/collection/components/native-select/native-select.js +1 -1
  117. package/dist/collection/components/nav/nav.js +1 -1
  118. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  119. package/dist/collection/components/progress-radial/progress-radial.js +1 -1
  120. package/dist/collection/components/radio/radio.js +1 -1
  121. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js +231 -0
  122. package/dist/collection/components/radio-group/radio-group.e2e.playwright.js.map +1 -0
  123. package/dist/collection/components/radio-group/radio-group.js +1 -1
  124. package/dist/collection/components/select/select.e2e.playwright.js +1702 -0
  125. package/dist/collection/components/select/select.e2e.playwright.js.map +1 -0
  126. package/dist/collection/components/select/select.js +49 -20
  127. package/dist/collection/components/select/select.js.map +1 -1
  128. package/dist/collection/components/select-option/select-option.js +3 -3
  129. package/dist/collection/components/select-option/select-option.js.map +1 -1
  130. package/dist/collection/components/switch/switch.e2e.playwright.js +40 -0
  131. package/dist/collection/components/switch/switch.e2e.playwright.js.map +1 -0
  132. package/dist/collection/components/switch/switch.js +1 -1
  133. package/dist/collection/components/tabs/tabs.e2e.playwright.js +205 -0
  134. package/dist/collection/components/tabs/tabs.e2e.playwright.js.map +1 -0
  135. package/dist/collection/components/tabs/tabs.js +1 -1
  136. package/dist/collection/components/textarea/textarea.e2e.playwright.js +133 -0
  137. package/dist/collection/components/textarea/textarea.e2e.playwright.js.map +1 -0
  138. package/dist/collection/components/textarea/textarea.js +1 -1
  139. package/dist/collection/utils/accessibility.js +16 -0
  140. package/dist/collection/utils/accessibility.js.map +1 -1
  141. package/dist/collection/utils/playwright/test-expect.js +2 -0
  142. package/dist/collection/utils/playwright/test-expect.js.map +1 -0
  143. package/dist/collection/utils/playwright/test.js +16 -0
  144. package/dist/collection/utils/playwright/test.js.map +1 -0
  145. package/dist/esm/accessibility-069640cf.js.map +1 -1
  146. package/dist/esm/loader.js +1 -1
  147. package/dist/esm/{popper-e491c314.js → popper-ac238961.js} +10 -17
  148. package/dist/esm/popper-ac238961.js.map +1 -0
  149. package/dist/esm/wcs-accordion-panel.entry.js +1 -1
  150. package/dist/esm/wcs-accordion-panel.entry.js.map +1 -1
  151. package/dist/esm/wcs-accordion.entry.js +2 -1
  152. package/dist/esm/wcs-accordion.entry.js.map +1 -1
  153. package/dist/esm/wcs-breadcrumb.entry.js +1 -1
  154. package/dist/esm/wcs-breadcrumb.entry.js.map +1 -1
  155. package/dist/esm/wcs-checkbox.entry.js +3 -2
  156. package/dist/esm/wcs-checkbox.entry.js.map +1 -1
  157. package/dist/esm/wcs-chip.entry.js +98 -0
  158. package/dist/esm/wcs-chip.entry.js.map +1 -0
  159. package/dist/esm/wcs-com-nav-item.entry.js +1 -1
  160. package/dist/esm/wcs-com-nav-item.entry.js.map +1 -1
  161. package/dist/esm/wcs-com-nav.entry.js +3 -3
  162. package/dist/esm/wcs-com-nav.entry.js.map +1 -1
  163. package/dist/esm/wcs-dropdown.entry.js +1 -1
  164. package/dist/esm/wcs-error_3.entry.js +1 -1
  165. package/dist/esm/wcs-error_3.entry.js.map +1 -1
  166. package/dist/esm/wcs-galactic-menu.entry.js +1 -1
  167. package/dist/esm/wcs-grid.entry.js +5 -4
  168. package/dist/esm/wcs-grid.entry.js.map +1 -1
  169. package/dist/esm/wcs-horizontal-stepper.entry.js +3 -2
  170. package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
  171. package/dist/esm/wcs-modal.entry.js +2 -2
  172. package/dist/esm/wcs-modal.entry.js.map +1 -1
  173. package/dist/esm/wcs-select_2.entry.js +59 -24
  174. package/dist/esm/wcs-select_2.entry.js.map +1 -1
  175. package/dist/esm/wcs-tabs.entry.js +1 -1
  176. package/dist/esm/wcs-tooltip.entry.js +1 -1
  177. package/dist/esm/wcs.js +1 -1
  178. package/dist/types/components/accordion/accordion.e2e.playwright.d.ts +1 -0
  179. package/dist/types/components/accordion-panel/accordion-panel.d.ts +5 -0
  180. package/dist/types/components/alert/alert.e2e.playwright.d.ts +1 -0
  181. package/dist/types/components/alert-drawer/alert-drawer.e2e.playwright.d.ts +1 -0
  182. package/dist/types/components/breadcrumb/breadcrumb.e2e.playwright.d.ts +1 -0
  183. package/dist/types/components/button/button.e2e.playwright.d.ts +1 -0
  184. package/dist/types/components/checkbox/checkbox.d.ts +4 -0
  185. package/dist/types/components/checkbox/checkbox.e2e.playwright.d.ts +1 -0
  186. package/dist/types/components/chip/chip-interface.d.ts +4 -0
  187. package/dist/types/components/chip/chip.d.ts +132 -0
  188. package/dist/types/components/chip/chip.e2e.playwright.d.ts +1 -0
  189. package/dist/types/components/com-nav/com-nav.e2e.playwright.d.ts +1 -0
  190. package/dist/types/components/counter/counter.e2e.playwright.d.ts +1 -0
  191. package/dist/types/components/dropdown/dropdown.e2e.playwright.d.ts +1 -0
  192. package/dist/types/components/editable-field/editable-field.e2e.playwright.d.ts +1 -0
  193. package/dist/types/components/form-field/form-field.e2e.playwright.d.ts +1 -0
  194. package/dist/types/components/grid/grid.e2e.playwright.d.ts +1 -0
  195. package/dist/types/components/horizontal-stepper/horizontal-stepper-interface.d.ts +2 -0
  196. package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +4 -0
  197. package/dist/types/components/input/input.e2e.playwright.d.ts +1 -0
  198. package/dist/types/components/modal/modal.e2e.playwright.d.ts +1 -0
  199. package/dist/types/components/radio-group/radio-group.e2e.playwright.d.ts +1 -0
  200. package/dist/types/components/select/select.d.ts +7 -1
  201. package/dist/types/components/select/select.e2e.playwright.d.ts +1 -0
  202. package/dist/types/components/switch/switch.e2e.playwright.d.ts +1 -0
  203. package/dist/types/components/tabs/tabs.e2e.playwright.d.ts +1 -0
  204. package/dist/types/components/textarea/textarea.e2e.playwright.d.ts +1 -0
  205. package/dist/types/components.d.ts +354 -0
  206. package/dist/types/utils/accessibility.d.ts +7 -0
  207. package/dist/types/utils/playwright/test-expect.d.ts +33 -0
  208. package/dist/types/utils/playwright/test.d.ts +7 -0
  209. package/dist/wcs/{p-8e9bd0f1.entry.js → p-0326f834.entry.js} +2 -2
  210. package/dist/wcs/{p-8e9bd0f1.entry.js.map → p-0326f834.entry.js.map} +1 -1
  211. package/dist/wcs/p-2221bf0c.entry.js +16 -0
  212. package/dist/wcs/p-2221bf0c.entry.js.map +1 -0
  213. package/dist/wcs/p-4ae08567.entry.js +2 -0
  214. package/dist/wcs/p-4ae08567.entry.js.map +1 -0
  215. package/dist/wcs/p-4e2d6227.entry.js +2 -0
  216. package/dist/wcs/p-4e2d6227.entry.js.map +1 -0
  217. package/dist/wcs/p-828b45b4.entry.js +2 -0
  218. package/dist/wcs/p-828b45b4.entry.js.map +1 -0
  219. package/dist/wcs/p-8332a7e3.entry.js +2 -0
  220. package/dist/wcs/p-8332a7e3.entry.js.map +1 -0
  221. package/dist/wcs/p-990698a7.entry.js +2 -0
  222. package/dist/wcs/p-990698a7.entry.js.map +1 -0
  223. package/dist/wcs/{p-ec383729.entry.js → p-9b76b8e6.entry.js} +2 -2
  224. package/dist/wcs/{p-ec383729.entry.js.map → p-9b76b8e6.entry.js.map} +1 -1
  225. package/dist/wcs/{p-1f593d06.entry.js → p-abd8d5a0.entry.js} +2 -2
  226. package/dist/wcs/{p-622f7403.entry.js → p-c6f8c45c.entry.js} +2 -2
  227. package/dist/wcs/{p-a94e685c.entry.js → p-db7ba599.entry.js} +2 -2
  228. package/dist/wcs/p-e1fb3625.js +2 -0
  229. package/dist/wcs/p-e1fb3625.js.map +1 -0
  230. package/dist/wcs/p-ed3b0709.entry.js +2 -0
  231. package/dist/wcs/p-ed3b0709.entry.js.map +1 -0
  232. package/dist/wcs/{p-6c6079ee.entry.js → p-f2eeb249.entry.js} +2 -2
  233. package/dist/wcs/{p-6c6079ee.entry.js.map → p-f2eeb249.entry.js.map} +1 -1
  234. package/dist/wcs/{p-a956dc84.entry.js → p-f2f7595e.entry.js} +2 -2
  235. package/dist/wcs/{p-a956dc84.entry.js.map → p-f2f7595e.entry.js.map} +1 -1
  236. package/dist/wcs/p-fb2751c2.js.map +1 -1
  237. package/dist/wcs/p-fbd68522.entry.js +2 -0
  238. package/dist/wcs/p-fbd68522.entry.js.map +1 -0
  239. package/dist/wcs/{p-8c2605fd.entry.js → p-fe303f58.entry.js} +2 -2
  240. package/dist/wcs/wcs.esm.js +1 -1
  241. package/dist/wcs/wcs.esm.js.map +1 -1
  242. package/package.json +18 -24
  243. package/dist/cjs/popper-8d6e7fca.js.map +0 -1
  244. package/dist/collection/components/alert/alert.e2e.js +0 -142
  245. package/dist/collection/components/alert/alert.e2e.js.map +0 -1
  246. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js +0 -111
  247. package/dist/collection/components/alert-drawer/alert-drawer.e2e.js.map +0 -1
  248. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js +0 -223
  249. package/dist/collection/components/breadcrumb/breadcrumb.e2e.js.map +0 -1
  250. package/dist/collection/components/button/button.e2e.js +0 -25
  251. package/dist/collection/components/button/button.e2e.js.map +0 -1
  252. package/dist/collection/components/checkbox/checkbox.e2e.js +0 -45
  253. package/dist/collection/components/checkbox/checkbox.e2e.js.map +0 -1
  254. package/dist/collection/components/com-nav/com-nav.e2e.js.map +0 -1
  255. package/dist/collection/components/counter/counter.e2e.js +0 -206
  256. package/dist/collection/components/counter/counter.e2e.js.map +0 -1
  257. package/dist/collection/components/dropdown/dropdown.e2e.js +0 -156
  258. package/dist/collection/components/dropdown/dropdown.e2e.js.map +0 -1
  259. package/dist/collection/components/editable-field/editable-field.e2e.js +0 -176
  260. package/dist/collection/components/editable-field/editable-field.e2e.js.map +0 -1
  261. package/dist/collection/components/form-field/form-field.e2e.js +0 -122
  262. package/dist/collection/components/form-field/form-field.e2e.js.map +0 -1
  263. package/dist/collection/components/grid/grid.e2e.js +0 -147
  264. package/dist/collection/components/grid/grid.e2e.js.map +0 -1
  265. package/dist/collection/components/input/input.e2e.js +0 -152
  266. package/dist/collection/components/input/input.e2e.js.map +0 -1
  267. package/dist/collection/components/modal/modal.e2e.js +0 -36
  268. package/dist/collection/components/modal/modal.e2e.js.map +0 -1
  269. package/dist/collection/components/radio-group/radio-group.e2e.js +0 -239
  270. package/dist/collection/components/radio-group/radio-group.e2e.js.map +0 -1
  271. package/dist/collection/components/select/select.e2e.js +0 -1081
  272. package/dist/collection/components/select/select.e2e.js.map +0 -1
  273. package/dist/collection/components/switch/switch.e2e.js +0 -45
  274. package/dist/collection/components/switch/switch.e2e.js.map +0 -1
  275. package/dist/collection/components/tabs/tabs.e2e.js +0 -207
  276. package/dist/collection/components/tabs/tabs.e2e.js.map +0 -1
  277. package/dist/collection/components/textarea/textarea.e2e.js +0 -132
  278. package/dist/collection/components/textarea/textarea.e2e.js.map +0 -1
  279. package/dist/collection/utils/tests.js +0 -23
  280. package/dist/collection/utils/tests.js.map +0 -1
  281. package/dist/esm/popper-e491c314.js.map +0 -1
  282. package/dist/types/utils/tests.d.ts +0 -4
  283. package/dist/wcs/p-02f31010.entry.js +0 -2
  284. package/dist/wcs/p-02f31010.entry.js.map +0 -1
  285. package/dist/wcs/p-0dd07842.entry.js +0 -2
  286. package/dist/wcs/p-0dd07842.entry.js.map +0 -1
  287. package/dist/wcs/p-0f864e86.js +0 -2
  288. package/dist/wcs/p-0f864e86.js.map +0 -1
  289. package/dist/wcs/p-1244daa0.entry.js +0 -2
  290. package/dist/wcs/p-1244daa0.entry.js.map +0 -1
  291. package/dist/wcs/p-1fbe0328.entry.js +0 -2
  292. package/dist/wcs/p-1fbe0328.entry.js.map +0 -1
  293. package/dist/wcs/p-4fb2d985.entry.js +0 -2
  294. package/dist/wcs/p-4fb2d985.entry.js.map +0 -1
  295. package/dist/wcs/p-b94a09b6.entry.js +0 -16
  296. package/dist/wcs/p-b94a09b6.entry.js.map +0 -1
  297. package/dist/wcs/p-fd187bce.entry.js +0 -2
  298. package/dist/wcs/p-fd187bce.entry.js.map +0 -1
  299. /package/dist/wcs/{p-1f593d06.entry.js.map → p-abd8d5a0.entry.js.map} +0 -0
  300. /package/dist/wcs/{p-622f7403.entry.js.map → p-c6f8c45c.entry.js.map} +0 -0
  301. /package/dist/wcs/{p-a94e685c.entry.js.map → p-db7ba599.entry.js.map} +0 -0
  302. /package/dist/wcs/{p-8c2605fd.entry.js.map → p-fe303f58.entry.js.map} +0 -0
@@ -0,0 +1,205 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Tabs component', () => {
5
+ test('Display only first tab if none are preselected', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <wcs-tabs>
9
+ <wcs-tab header="1">One</wcs-tab>
10
+ <wcs-tab header="2">Two</wcs-tab>
11
+ </wcs-tabs>
12
+ `);
13
+ const tab1 = page.locator('wcs-tab').nth(0);
14
+ const tab2 = page.locator('wcs-tab').nth(1);
15
+ // Then
16
+ await expect(tab1).toBeVisible();
17
+ await expect(tab2).not.toBeVisible();
18
+ });
19
+ test('Display only second tab if users click on its header', async ({ page }) => {
20
+ // Given
21
+ await setWcsContent(page, `
22
+ <wcs-tabs>
23
+ <wcs-tab header="1">One</wcs-tab>
24
+ <wcs-tab header="2">Two</wcs-tab>
25
+ </wcs-tabs>
26
+ `);
27
+ const tab1 = page.locator('wcs-tab').nth(0);
28
+ const tab2 = page.locator('wcs-tab').nth(1);
29
+ const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
30
+ // When
31
+ await tabh2.click();
32
+ // Then
33
+ await expect(tab1).not.toBeVisible();
34
+ await expect(tab2).toBeVisible();
35
+ });
36
+ test('Accept and render new tabs after creation', async ({ page }) => {
37
+ // Given
38
+ await setWcsContent(page, `
39
+ <wcs-tabs>
40
+ <wcs-tab header="1">One</wcs-tab>
41
+ <wcs-tab header="2">Two</wcs-tab>
42
+ </wcs-tabs>
43
+ `);
44
+ // When
45
+ await page.evaluate(async () => {
46
+ const tab = document.createElement('wcs-tab');
47
+ const text = document.createTextNode('Three');
48
+ const tabsEl = document.querySelector('wcs-tabs');
49
+ tab.setAttribute('header', '3');
50
+ tab.appendChild(text);
51
+ tabsEl.appendChild(tab);
52
+ });
53
+ const h3 = page.locator('wcs-tabs .wcs-tab-header').nth(2);
54
+ const t3 = page.locator('wcs-tab').nth(2);
55
+ // Expect
56
+ await expect(h3).toBeVisible();
57
+ await expect(t3).toHaveText('Three');
58
+ });
59
+ test.describe('SelectedKey prop', () => {
60
+ test('should accept a default selected key', async ({ page }) => {
61
+ await setWcsContent(page, `
62
+ <wcs-tabs selected-key="custom-2">
63
+ <wcs-tab item-key="custom-1">One</wcs-tab>
64
+ <wcs-tab item-key="custom-2">Two</wcs-tab>
65
+ </wcs-tabs>
66
+ `);
67
+ const tab1 = page.locator('wcs-tab').nth(0);
68
+ const tab2 = page.locator('wcs-tab').nth(1);
69
+ await expect(tab1).not.toBeVisible();
70
+ await expect(tab2).toBeVisible();
71
+ });
72
+ test('Allows to change selected tab via prop after creation', async ({ page }) => {
73
+ // Given
74
+ await setWcsContent(page, `
75
+ <wcs-tabs selected-key="a">
76
+ <wcs-tab item-key="a">One</wcs-tab>
77
+ <wcs-tab item-key="b">Two</wcs-tab>
78
+ </wcs-tabs>
79
+ `);
80
+ const tabs = page.locator('wcs-tabs');
81
+ const tab1 = page.locator('wcs-tab').nth(0);
82
+ const tab2 = page.locator('wcs-tab').nth(1);
83
+ // When
84
+ await tabs.evaluate((el) => el.selectedKey = 'b');
85
+ // Then
86
+ await expect(tab1).not.toBeVisible();
87
+ await expect(tab2).toBeVisible();
88
+ });
89
+ });
90
+ test.describe('SelectedIndex prop', () => {
91
+ test('Accept a default selected tab', async ({ page }) => {
92
+ // Given
93
+ await setWcsContent(page, `
94
+ <wcs-tabs selected-index="1">
95
+ <wcs-tab header="1">One</wcs-tab>
96
+ <wcs-tab header="2">Two</wcs-tab>
97
+ </wcs-tabs>
98
+ `);
99
+ const tab1 = page.locator('wcs-tab').nth(0);
100
+ const tab2 = page.locator('wcs-tab').nth(1);
101
+ // Then
102
+ await expect(tab1).not.toBeVisible();
103
+ await expect(tab2).toBeVisible();
104
+ });
105
+ test('Allows to change selected tab via prop after creation', async ({ page }) => {
106
+ // Given
107
+ await setWcsContent(page, `
108
+ <wcs-tabs selected-index="1">
109
+ <wcs-tab header="1">One</wcs-tab>
110
+ <wcs-tab header="2">Two</wcs-tab>
111
+ </wcs-tabs>
112
+ `);
113
+ const tabs = page.locator('wcs-tabs');
114
+ const tab1 = page.locator('wcs-tab').nth(0);
115
+ const tab2 = page.locator('wcs-tab').nth(1);
116
+ // When
117
+ await tabs.evaluate((el) => el.selectedIndex = 0);
118
+ // Then
119
+ await expect(tab1).toBeVisible();
120
+ await expect(tab2).not.toBeVisible();
121
+ });
122
+ });
123
+ test.describe('Tab change event', () => {
124
+ test('Fires when user clicks on a header', async ({ page }) => {
125
+ // Given
126
+ await setWcsContent(page, `
127
+ <wcs-tabs>
128
+ <wcs-tab header="1">One</wcs-tab>
129
+ <wcs-tab header="2">Two</wcs-tab>
130
+ </wcs-tabs>
131
+ `);
132
+ const tabs = page.locator('wcs-tabs');
133
+ const tabChangeSpy = await tabs.spyOnEvent('tabChange');
134
+ const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
135
+ // When
136
+ await tabh2.click();
137
+ await page.waitForChanges();
138
+ // Then
139
+ expect(tabChangeSpy).toHaveReceivedEventTimes(1);
140
+ expect(tabChangeSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
141
+ });
142
+ });
143
+ test.describe('Keyboard navigation', () => {
144
+ test('Change selected tab with enter', async ({ page }) => {
145
+ // Given
146
+ await setWcsContent(page, `
147
+ <wcs-tabs>
148
+ <wcs-tab header="1">One</wcs-tab>
149
+ <wcs-tab header="2">Two</wcs-tab>
150
+ </wcs-tabs>
151
+ `);
152
+ const tabs = page.locator('wcs-tabs');
153
+ const tabChangeEnterSpy = await tabs.spyOnEvent('tabChange');
154
+ const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
155
+ // When
156
+ await h2.focus();
157
+ await page.keyboard.press('Enter');
158
+ await page.waitForChanges();
159
+ // Then
160
+ expect(tabChangeEnterSpy).toHaveReceivedEventTimes(1);
161
+ expect(tabChangeEnterSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
162
+ });
163
+ test('Change selected tab with space', async ({ page }) => {
164
+ // Given
165
+ await setWcsContent(page, `
166
+ <wcs-tabs>
167
+ <wcs-tab header="1">One</wcs-tab>
168
+ <wcs-tab header="2">Two</wcs-tab>
169
+ </wcs-tabs>
170
+ `);
171
+ const tabs = page.locator('wcs-tabs');
172
+ const tabChangeSpaceSpy = await tabs.spyOnEvent('tabChange');
173
+ const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);
174
+ // When
175
+ await h2.focus();
176
+ await page.keyboard.press('Space');
177
+ await page.waitForChanges();
178
+ // Then
179
+ expect(tabChangeSpaceSpy).toHaveReceivedEventTimes(1);
180
+ expect(tabChangeSpaceSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });
181
+ });
182
+ test('Move focus with keyboard arrows', async ({ page }) => {
183
+ // Given
184
+ await setWcsContent(page, `
185
+ <wcs-tabs>
186
+ <wcs-tab header="1">One</wcs-tab>
187
+ <wcs-tab header="2">Two</wcs-tab>
188
+ </wcs-tabs>
189
+ `);
190
+ const h1 = page.locator('wcs-tabs .wcs-tab-header').nth(0);
191
+ // When
192
+ await h1.focus();
193
+ await h1.press('ArrowRight');
194
+ // Then - verify second header is focused by checking it matches activeElement in shadow root
195
+ const isFocused = await page.evaluate(() => {
196
+ var _a, _b;
197
+ const tabs = document.querySelector('wcs-tabs');
198
+ const secondHeader = (_a = tabs === null || tabs === void 0 ? void 0 : tabs.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.wcs-tab-header')[1];
199
+ return ((_b = tabs === null || tabs === void 0 ? void 0 : tabs.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement) === secondHeader;
200
+ });
201
+ expect(isFocused).toBe(true);
202
+ });
203
+ });
204
+ });
205
+ //# sourceMappingURL=tabs.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { setWcsContent } from '../../utils/playwright/test';\nimport { test, E2EPage } from \"@stencil/playwright\";\n\nimport { expect } from \"@playwright/test\";\n\ntest.describe('Tabs component', () => {\n test('Display only first tab if none are preselected', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // Then\n await expect(tab1).toBeVisible();\n await expect(tab2).not.toBeVisible();\n });\n\n test('Display only second tab if users click on its header', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await tabh2.click();\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Accept and render new tabs after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n // When\n await page.evaluate(async () => {\n const tab = document.createElement('wcs-tab');\n const text = document.createTextNode('Three');\n const tabsEl = document.querySelector('wcs-tabs');\n tab.setAttribute('header', '3');\n tab.appendChild(text);\n tabsEl!.appendChild(tab);\n });\n\n const h3 = page.locator('wcs-tabs .wcs-tab-header').nth(2);\n const t3 = page.locator('wcs-tab').nth(2);\n\n // Expect\n await expect(h3).toBeVisible();\n await expect(t3).toHaveText('Three');\n });\n\n test.describe('SelectedKey prop', () => {\n test('should accept a default selected key', async ({ page }: { page: E2EPage }) => {\n await setWcsContent(page, `\n <wcs-tabs selected-key=\"custom-2\">\n <wcs-tab item-key=\"custom-1\">One</wcs-tab>\n <wcs-tab item-key=\"custom-2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Allows to change selected tab via prop after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-key=\"a\">\n <wcs-tab item-key=\"a\">One</wcs-tab>\n <wcs-tab item-key=\"b\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // When\n await tabs.evaluate((el: any) => el.selectedKey = 'b');\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n });\n\n test.describe('SelectedIndex prop', () => {\n test('Accept a default selected tab', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-index=\"1\">\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // Then\n await expect(tab1).not.toBeVisible();\n await expect(tab2).toBeVisible();\n });\n\n test('Allows to change selected tab via prop after creation', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs selected-index=\"1\">\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tab1 = page.locator('wcs-tab').nth(0);\n const tab2 = page.locator('wcs-tab').nth(1);\n\n // When\n await tabs.evaluate((el: any) => el.selectedIndex = 0);\n\n // Then\n await expect(tab1).toBeVisible();\n await expect(tab2).not.toBeVisible();\n });\n });\n\n test.describe('Tab change event', () => {\n test('Fires when user clicks on a header', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeSpy = await tabs.spyOnEvent('tabChange');\n\n const tabh2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await tabh2.click();\n await page.waitForChanges();\n\n // Then\n expect(tabChangeSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n });\n\n test.describe('Keyboard navigation', () => {\n test('Change selected tab with enter', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeEnterSpy = await tabs.spyOnEvent('tabChange');\n\n const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await h2.focus();\n await page.keyboard.press('Enter');\n await page.waitForChanges();\n\n // Then\n expect(tabChangeEnterSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeEnterSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n\n test('Change selected tab with space', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const tabs = page.locator('wcs-tabs');\n const tabChangeSpaceSpy = await tabs.spyOnEvent('tabChange');\n\n const h2 = page.locator('wcs-tabs .wcs-tab-header').nth(1);\n\n // When\n await h2.focus();\n await page.keyboard.press('Space');\n await page.waitForChanges();\n\n // Then\n expect(tabChangeSpaceSpy).toHaveReceivedEventTimes(1);\n expect(tabChangeSpaceSpy).toHaveReceivedEventDetail({ tabName: '2', tabIndex: 1, selectedKey: undefined });\n });\n\n test('Move focus with keyboard arrows', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-tabs>\n <wcs-tab header=\"1\">One</wcs-tab>\n <wcs-tab header=\"2\">Two</wcs-tab>\n </wcs-tabs>\n `);\n\n const h1 = page.locator('wcs-tabs .wcs-tab-header').nth(0);\n\n // When\n await h1.focus();\n await h1.press('ArrowRight');\n\n // Then - verify second header is focused by checking it matches activeElement in shadow root\n const isFocused = await page.evaluate(() => {\n const tabs = document.querySelector('wcs-tabs');\n const secondHeader = tabs?.shadowRoot?.querySelectorAll('.wcs-tab-header')[1];\n return tabs?.shadowRoot?.activeElement === secondHeader;\n });\n expect(isFocused).toBe(true);\n });\n });\n});\n"]}
@@ -529,7 +529,7 @@ export class Tabs {
529
529
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
530
530
  "parameters": [{
531
531
  "name": "attr",
532
- "type": "\"role\" | `aria-${string}`",
532
+ "type": "`aria-${string}` | \"role\"",
533
533
  "docs": ""
534
534
  }, {
535
535
  "name": "value",
@@ -0,0 +1,133 @@
1
+ import { setWcsContent } from "../../utils/playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { expect } from "@playwright/test";
4
+ test.describe('Textarea component', () => {
5
+ test('Should fire wcsInput event once when user typing one char', async ({ page }) => {
6
+ // Given
7
+ await setWcsContent(page, `
8
+ <wcs-textarea name="wcs-textarea-1" />
9
+ `);
10
+ const inputSpy = await page.spyOnEvent('wcsInput');
11
+ const textarea = page.locator('wcs-textarea');
12
+ // When
13
+ await textarea.click();
14
+ await textarea.press('B');
15
+ await page.waitForChanges();
16
+ // Then
17
+ expect(inputSpy).toHaveReceivedEventTimes(1);
18
+ });
19
+ test('Should fire wcsInput event multiple times when user typing multiple chars', async ({ page }) => {
20
+ // Given
21
+ await setWcsContent(page, `
22
+ <wcs-textarea name="wcs-textarea-1" />
23
+ `);
24
+ const inputSpy = await page.spyOnEvent('wcsInput');
25
+ const textarea = page.locator('wcs-textarea');
26
+ // When
27
+ await textarea.click();
28
+ await textarea.press('B');
29
+ await page.waitForChanges();
30
+ await textarea.press('o');
31
+ await page.waitForChanges();
32
+ await textarea.press('n');
33
+ await page.waitForChanges();
34
+ await textarea.press('j');
35
+ await page.waitForChanges();
36
+ await textarea.press('o');
37
+ await page.waitForChanges();
38
+ await textarea.press('u');
39
+ await page.waitForChanges();
40
+ await textarea.press('r');
41
+ await page.waitForChanges();
42
+ // Then
43
+ expect(inputSpy).toHaveReceivedEventTimes(7);
44
+ });
45
+ test('Should fire wcsChange event when user commit change with blur (tab)', async ({ page }) => {
46
+ // Given
47
+ await setWcsContent(page, `
48
+ <wcs-textarea name="wcs-textarea-1"></wcs-textarea>
49
+ <button>Focus</button>
50
+ `);
51
+ const changeSpy = await page.spyOnEvent('wcsChange');
52
+ const textarea = page.locator('wcs-textarea');
53
+ const button = page.locator('button');
54
+ // When
55
+ await textarea.click();
56
+ await textarea.pressSequentially('Blur');
57
+ await button.focus(); // blur native textArea
58
+ await page.waitForChanges();
59
+ // Then - wait for the event to be received
60
+ expect(changeSpy).toHaveReceivedEventTimes(1);
61
+ expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });
62
+ });
63
+ test('Should fire wcsChange event when user commit change with blur (click)', async ({ page }) => {
64
+ // Given
65
+ await setWcsContent(page, `
66
+ <wcs-textarea name="wcs-textarea-1"></wcs-textarea>
67
+ <button>Focus</button>
68
+ `);
69
+ const changeSpy = await page.spyOnEvent('wcsChange');
70
+ const textarea = page.locator('wcs-textarea');
71
+ const button = page.locator('button');
72
+ // When
73
+ await textarea.click();
74
+ await textarea.press('B');
75
+ await textarea.press('l');
76
+ await textarea.press('u');
77
+ await textarea.press('r');
78
+ await button.focus();
79
+ await page.waitForChanges();
80
+ // Then
81
+ expect(changeSpy).toHaveReceivedEventTimes(1);
82
+ expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });
83
+ });
84
+ test('Should not fire wcsChange event when value is programmatically set', async ({ page }) => {
85
+ // Given
86
+ await setWcsContent(page, `
87
+ <wcs-textarea name="wcs-textarea-1" />
88
+ `);
89
+ const changeSpy = await page.spyOnEvent('wcsChange');
90
+ const textarea = page.locator('wcs-textarea');
91
+ // When
92
+ await textarea.evaluate((el) => el.value = 'Programmatically set value');
93
+ await page.waitForChanges();
94
+ // Then
95
+ expect(changeSpy).toHaveReceivedEventTimes(0);
96
+ });
97
+ test('Should not fire wcsInput event when value is programmatically set', async ({ page }) => {
98
+ // Given
99
+ await setWcsContent(page, `
100
+ <wcs-textarea name="wcs-textarea-1" />
101
+ `);
102
+ const inputSpy = await page.spyOnEvent('wcsInput');
103
+ const textarea = page.locator('wcs-textarea');
104
+ // When
105
+ await textarea.evaluate((el) => el.value = 'Programmatically set value');
106
+ await page.waitForChanges();
107
+ // Then
108
+ expect(inputSpy).toHaveReceivedEventTimes(0);
109
+ });
110
+ test('Should have a default value when value attribute is set', async ({ page }) => {
111
+ // Given
112
+ await setWcsContent(page, `
113
+ <wcs-textarea name="wcs-textarea-1" value="Default value" />
114
+ `);
115
+ const textarea = page.locator('wcs-textarea');
116
+ // Then
117
+ await expect(textarea).toHaveJSProperty('value', 'Default value');
118
+ await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');
119
+ });
120
+ test('Should have a default value when value property is set', async ({ page }) => {
121
+ // Given
122
+ await setWcsContent(page, `
123
+ <wcs-textarea name="wcs-textarea-1" />
124
+ `);
125
+ const textarea = page.locator('wcs-textarea');
126
+ // When
127
+ await textarea.evaluate((el) => el.value = 'Default value');
128
+ // Then
129
+ await expect(textarea).toHaveJSProperty('value', 'Default value');
130
+ await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');
131
+ });
132
+ });
133
+ //# sourceMappingURL=textarea.e2e.playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.e2e.playwright.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { setWcsContent } from '../../utils/playwright/test';\nimport { test, E2EPage } from \"@stencil/playwright\";\n\nimport { expect } from \"@playwright/test\";\n\ntest.describe('Textarea component', () => {\n test('Should fire wcsInput event once when user typing one char', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n test('Should fire wcsInput event multiple times when user typing multiple chars', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await page.waitForChanges();\n await textarea.press('o');\n await page.waitForChanges();\n await textarea.press('n');\n await page.waitForChanges();\n await textarea.press('j');\n await page.waitForChanges();\n await textarea.press('o');\n await page.waitForChanges();\n await textarea.press('u');\n await page.waitForChanges();\n await textarea.press('r');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(7);\n });\n\n test('Should fire wcsChange event when user commit change with blur (tab)', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\"></wcs-textarea>\n <button>Focus</button>\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n const button = page.locator('button');\n\n // When\n await textarea.click();\n await textarea.pressSequentially('Blur');\n await button.focus(); // blur native textArea\n await page.waitForChanges();\n\n // Then - wait for the event to be received\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });\n });\n\n test('Should fire wcsChange event when user commit change with blur (click)', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\"></wcs-textarea>\n <button>Focus</button>\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n const button = page.locator('button');\n\n // When\n await textarea.click();\n await textarea.press('B');\n await textarea.press('l');\n await textarea.press('u');\n await textarea.press('r');\n await button.focus();\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'Blur' });\n });\n\n test('Should not fire wcsChange event when value is programmatically set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const changeSpy = await page.spyOnEvent('wcsChange');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Programmatically set value');\n await page.waitForChanges();\n\n // Then\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n\n test('Should not fire wcsInput event when value is programmatically set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const inputSpy = await page.spyOnEvent('wcsInput');\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Programmatically set value');\n await page.waitForChanges();\n\n // Then\n expect(inputSpy).toHaveReceivedEventTimes(0);\n });\n\n test('Should have a default value when value attribute is set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" value=\"Default value\" />\n `);\n\n const textarea = page.locator('wcs-textarea');\n\n // Then\n await expect(textarea).toHaveJSProperty('value', 'Default value');\n await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');\n });\n\n test('Should have a default value when value property is set', async ({ page }: { page: E2EPage }) => {\n // Given\n await setWcsContent(page, `\n <wcs-textarea name=\"wcs-textarea-1\" />\n `);\n\n const textarea = page.locator('wcs-textarea');\n\n // When\n await textarea.evaluate((el: any) => el.value = 'Default value');\n\n // Then\n await expect(textarea).toHaveJSProperty('value', 'Default value');\n await expect(page.locator('wcs-textarea textarea')).toHaveJSProperty('value', 'Default value');\n });\n});\n"]}
@@ -699,7 +699,7 @@ export class Textarea {
699
699
  "signature": "(attr: AriaAttributeName, value: string | null | undefined) => Promise<void>",
700
700
  "parameters": [{
701
701
  "name": "attr",
702
- "type": "\"role\" | `aria-${string}`",
702
+ "type": "`aria-${string}` | \"role\"",
703
703
  "docs": ""
704
704
  }, {
705
705
  "name": "value",
@@ -65,4 +65,20 @@ export function isFocusable(element) {
65
65
  return false;
66
66
  }
67
67
  }
68
+ /**
69
+ * Finds the next focusable element after the given startElement.
70
+ * It checks the next siblings of the startElement and returns the first focusable element found.
71
+ * If no focusable element is found, it returns null.
72
+ * @param startElement The element from which to start searching for the next focusable element.
73
+ */
74
+ export function findNextFocusableElement(startElement) {
75
+ let nextElement = startElement.nextElementSibling;
76
+ while (nextElement) {
77
+ if (isFocusable(nextElement) && nextElement instanceof HTMLElement) {
78
+ return nextElement;
79
+ }
80
+ nextElement = nextElement.nextElementSibling;
81
+ }
82
+ return null;
83
+ }
68
84
  //# sourceMappingURL=accessibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/utils/accessibility.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACjD,OAAO,OAAO,KAAK,QAAQ,CAAC,aAAa,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,YAAY;IACZ,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;IACZ,SAAS;IACT,aAAa;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAY;IAC9C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAY;IACpC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACrD,IACI,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,KAAK,CAAC;QACvB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,CAAC,KAAK,CAAC;QACpB,YAAY,CAAC,CAAC,KAAK,CAAC,EACtB,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IACI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;QAChC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,EAC7B,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2CAA2C;IAC3C,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,GAAG;YACJ,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrC,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC","sourcesContent":["export function isElementFocused(element: HTMLElement) {\n return element === document.activeElement;\n}\n\nexport const wcsFocusableElements = [\n 'wcs-select',\n 'wcs-select-option',\n 'wcs-dropdown',\n 'wcs-dropdown-item',\n 'wcs-nav-item',\n 'wcs-button',\n 'wcs-input',\n 'wcs-textarea',\n 'wcs-checkbox',\n 'wcs-radio',\n 'wcs-switch',\n 'wcs-tab',\n 'wcs-counter',\n];\n\n/**\n * Returns true if the provided element is part of the wcsFocusableElements list\n */\nexport function isWcsFocusableElement(element: any): boolean {\n return wcsFocusableElements.includes(element.tagName.toLowerCase());\n}\n\nexport function isFocusable(element: any) {\n if (parseInt(element.getAttribute('tabindex')) < 0) {\n return false;\n }\n if (element.disabled) {\n return false;\n }\n const boundingRect = element.getBoundingClientRect();\n if (\n boundingRect.bottom === 0 &&\n boundingRect.top === 0 &&\n boundingRect.left === 0 &&\n boundingRect.right === 0 &&\n boundingRect.height === 0 &&\n boundingRect.width === 0 &&\n boundingRect.x === 0 &&\n boundingRect.y === 0\n ) {\n return false;\n }\n if (\n element.style.display === 'none' ||\n element.style.visibility === 'hidden' ||\n element.style.opacity === 0\n ) {\n return false;\n }\n if (element.getAttribute('role') === 'button') {\n return true;\n }\n\n if (isWcsFocusableElement(element)) {\n return true;\n }\n\n // To identify other native focus elements.\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n}\n"]}
1
+ {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/utils/accessibility.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACjD,OAAO,OAAO,KAAK,QAAQ,CAAC,aAAa,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,YAAY;IACZ,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;IACZ,SAAS;IACT,aAAa;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAY;IAC9C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAY;IACpC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACrD,IACI,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,KAAK,CAAC;QACvB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,CAAC,KAAK,CAAC;QACpB,YAAY,CAAC,CAAC,KAAK,CAAC,EACtB,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IACI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;QAChC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,EAC7B,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2CAA2C;IAC3C,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,GAAG;YACJ,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrC,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAyB;IAC9D,IAAI,WAAW,GAAG,YAAY,CAAC,kBAAkB,CAAC;IAClD,OAAO,WAAW,EAAE,CAAC;QACjB,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,YAAY,WAAW,EAAE,CAAC;YACjE,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["export function isElementFocused(element: HTMLElement): boolean {\n return element === document.activeElement;\n}\n\nexport const wcsFocusableElements = [\n 'wcs-select',\n 'wcs-select-option',\n 'wcs-dropdown',\n 'wcs-dropdown-item',\n 'wcs-nav-item',\n 'wcs-button',\n 'wcs-input',\n 'wcs-textarea',\n 'wcs-checkbox',\n 'wcs-radio',\n 'wcs-switch',\n 'wcs-tab',\n 'wcs-counter',\n];\n\n/**\n * Returns true if the provided element is part of the wcsFocusableElements list\n */\nexport function isWcsFocusableElement(element: any): boolean {\n return wcsFocusableElements.includes(element.tagName.toLowerCase());\n}\n\nexport function isFocusable(element: any): boolean {\n if (parseInt(element.getAttribute('tabindex')) < 0) {\n return false;\n }\n if (element.disabled) {\n return false;\n }\n const boundingRect = element.getBoundingClientRect();\n if (\n boundingRect.bottom === 0 &&\n boundingRect.top === 0 &&\n boundingRect.left === 0 &&\n boundingRect.right === 0 &&\n boundingRect.height === 0 &&\n boundingRect.width === 0 &&\n boundingRect.x === 0 &&\n boundingRect.y === 0\n ) {\n return false;\n }\n if (\n element.style.display === 'none' ||\n element.style.visibility === 'hidden' ||\n element.style.opacity === 0\n ) {\n return false;\n }\n if (element.getAttribute('role') === 'button') {\n return true;\n }\n\n if (isWcsFocusableElement(element)) {\n return true;\n }\n\n // To identify other native focus elements.\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Finds the next focusable element after the given startElement.\n * It checks the next siblings of the startElement and returns the first focusable element found.\n * If no focusable element is found, it returns null.\n * @param startElement The element from which to start searching for the next focusable element.\n */\nexport function findNextFocusableElement(startElement: HTMLElement): HTMLElement | null {\n let nextElement = startElement.nextElementSibling;\n while (nextElement) {\n if (isFocusable(nextElement) && nextElement instanceof HTMLElement) {\n return nextElement;\n }\n nextElement = nextElement.nextElementSibling;\n }\n return null;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-expect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-expect.js","sourceRoot":"","sources":["../../../src/utils/playwright/test-expect.ts"],"names":[],"mappings":"AAAA,8JAA8J","sourcesContent":["// TODO: to delete when we update to version of @stencil/playwright that includes forged matchers definition (https://github.com/stenciljs/playwright/pull/54)\n\ninterface CustomMatchers<R = unknown> {\n /**\n * Will check if the event spy received the expected event.\n */\n toHaveReceivedEvent(): R;\n\n /**\n * Will check if the event spy received the expected event with the expected detail.\n * @param eventDetail The expected detail of the event.\n */\n toHaveReceivedEventDetail(eventDetail: any): R;\n\n /**\n * Will check if the event spy received the expected event at the given index with the expected detail.\n * @param index position of the event in the received events array.\n * @param eventDetail The expected detail of the event.\n */\n toHaveNthReceivedEventDetail(index: number, eventDetail: any): R;\n\n /**\n * Will check if the event spy received the expected event with the expected detail on the first received event.\n * @param eventDetail The expected detail of the event.\n */\n toHaveFirstReceivedEventDetail(eventDetail: any): R;\n\n /**\n * Will check how many times the event has been received.\n */\n toHaveReceivedEventTimes(count: number): R;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace PlaywrightTest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Matchers<R> extends CustomMatchers<R> {}\n }\n}\n\nexport {};\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @see stencil.config.ts expose dev web server
3
+ * @param page
4
+ * @param content
5
+ */
6
+ export async function setWcsContent(page, content) {
7
+ await page.setContent(content);
8
+ await page.evaluate(() => {
9
+ document.body.classList.add('sncf-holding');
10
+ });
11
+ await page.addStyleTag({
12
+ url: '/design-tokens/sncf-holding.css',
13
+ });
14
+ await page.waitForChanges();
15
+ }
16
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/utils/playwright/test.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,OAAe;IAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACrB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,CAAC,CAAA;IACF,MAAM,IAAI,CAAC,WAAW,CAAC;QACnB,GAAG,EAAE,iCAAiC;KACzC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAChC,CAAC","sourcesContent":["import { E2EPage } from '@stencil/playwright';\n\n/**\n * @see stencil.config.ts expose dev web server\n * @param page\n * @param content\n */\nexport async function setWcsContent(page: E2EPage, content: string) {\n await page.setContent(content);\n await page.evaluate(() => {\n document.body.classList.add('sncf-holding');\n })\n await page.addStyleTag({\n url: '/design-tokens/sncf-holding.css',\n });\n await page.waitForChanges();\n}\n"]}
@@ -1 +1 @@
1
- {"file":"accessibility-069640cf.js","mappings":"SAAgB,gBAAgB,CAAC,OAAoB;IACjD,OAAO,OAAO,KAAK,QAAQ,CAAC,aAAa,CAAC;AAC9C,CAAC;AAEM,MAAM,oBAAoB,GAAG;IAChC,YAAY;IACZ,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;IACZ,SAAS;IACT,aAAa;CAChB,CAAC;AAEF;;;SAGgB,qBAAqB,CAAC,OAAY;IAC9C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;SAEe,WAAW,CAAC,OAAY;IACpC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;QAChD,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,OAAO,KAAK,CAAC;KAChB;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACrD,IACI,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,KAAK,CAAC;QACvB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,CAAC,KAAK,CAAC;QACpB,YAAY,CAAC,CAAC,KAAK,CAAC,EACtB;QACE,OAAO,KAAK,CAAC;KAChB;IACD,IACI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;QAChC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,EAC7B;QACE,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;QAC3C,OAAO,IAAI,CAAC;KACf;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACf;;IAGD,QAAQ,OAAO,CAAC,QAAQ;QACpB,KAAK,GAAG;YACJ,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrC,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,KAAK,CAAC;KACpB;AACL;;;;","names":[],"sources":["src/utils/accessibility.ts"],"sourcesContent":["export function isElementFocused(element: HTMLElement) {\n return element === document.activeElement;\n}\n\nexport const wcsFocusableElements = [\n 'wcs-select',\n 'wcs-select-option',\n 'wcs-dropdown',\n 'wcs-dropdown-item',\n 'wcs-nav-item',\n 'wcs-button',\n 'wcs-input',\n 'wcs-textarea',\n 'wcs-checkbox',\n 'wcs-radio',\n 'wcs-switch',\n 'wcs-tab',\n 'wcs-counter',\n];\n\n/**\n * Returns true if the provided element is part of the wcsFocusableElements list\n */\nexport function isWcsFocusableElement(element: any): boolean {\n return wcsFocusableElements.includes(element.tagName.toLowerCase());\n}\n\nexport function isFocusable(element: any) {\n if (parseInt(element.getAttribute('tabindex')) < 0) {\n return false;\n }\n if (element.disabled) {\n return false;\n }\n const boundingRect = element.getBoundingClientRect();\n if (\n boundingRect.bottom === 0 &&\n boundingRect.top === 0 &&\n boundingRect.left === 0 &&\n boundingRect.right === 0 &&\n boundingRect.height === 0 &&\n boundingRect.width === 0 &&\n boundingRect.x === 0 &&\n boundingRect.y === 0\n ) {\n return false;\n }\n if (\n element.style.display === 'none' ||\n element.style.visibility === 'hidden' ||\n element.style.opacity === 0\n ) {\n return false;\n }\n if (element.getAttribute('role') === 'button') {\n return true;\n }\n\n if (isWcsFocusableElement(element)) {\n return true;\n }\n\n // To identify other native focus elements.\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n}\n"],"version":3}
1
+ {"file":"accessibility-069640cf.js","mappings":"SAAgB,gBAAgB,CAAC,OAAoB;IACjD,OAAO,OAAO,KAAK,QAAQ,CAAC,aAAa,CAAC;AAC9C,CAAC;AAEM,MAAM,oBAAoB,GAAG;IAChC,YAAY;IACZ,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;IACZ,SAAS;IACT,aAAa;CAChB,CAAC;AAEF;;;SAGgB,qBAAqB,CAAC,OAAY;IAC9C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;SAEe,WAAW,CAAC,OAAY;IACpC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;QAChD,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,OAAO,KAAK,CAAC;KAChB;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACrD,IACI,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,KAAK,CAAC;QACvB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,KAAK,CAAC;QACxB,YAAY,CAAC,CAAC,KAAK,CAAC;QACpB,YAAY,CAAC,CAAC,KAAK,CAAC,EACtB;QACE,OAAO,KAAK,CAAC;KAChB;IACD,IACI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;QAChC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,EAC7B;QACE,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;QAC3C,OAAO,IAAI,CAAC;KACf;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACf;;IAGD,QAAQ,OAAO,CAAC,QAAQ;QACpB,KAAK,GAAG;YACJ,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrC,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,KAAK,CAAC;KACpB;AACL;;;;","names":[],"sources":["src/utils/accessibility.ts"],"sourcesContent":["export function isElementFocused(element: HTMLElement): boolean {\n return element === document.activeElement;\n}\n\nexport const wcsFocusableElements = [\n 'wcs-select',\n 'wcs-select-option',\n 'wcs-dropdown',\n 'wcs-dropdown-item',\n 'wcs-nav-item',\n 'wcs-button',\n 'wcs-input',\n 'wcs-textarea',\n 'wcs-checkbox',\n 'wcs-radio',\n 'wcs-switch',\n 'wcs-tab',\n 'wcs-counter',\n];\n\n/**\n * Returns true if the provided element is part of the wcsFocusableElements list\n */\nexport function isWcsFocusableElement(element: any): boolean {\n return wcsFocusableElements.includes(element.tagName.toLowerCase());\n}\n\nexport function isFocusable(element: any): boolean {\n if (parseInt(element.getAttribute('tabindex')) < 0) {\n return false;\n }\n if (element.disabled) {\n return false;\n }\n const boundingRect = element.getBoundingClientRect();\n if (\n boundingRect.bottom === 0 &&\n boundingRect.top === 0 &&\n boundingRect.left === 0 &&\n boundingRect.right === 0 &&\n boundingRect.height === 0 &&\n boundingRect.width === 0 &&\n boundingRect.x === 0 &&\n boundingRect.y === 0\n ) {\n return false;\n }\n if (\n element.style.display === 'none' ||\n element.style.visibility === 'hidden' ||\n element.style.opacity === 0\n ) {\n return false;\n }\n if (element.getAttribute('role') === 'button') {\n return true;\n }\n\n if (isWcsFocusableElement(element)) {\n return true;\n }\n\n // To identify other native focus elements.\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Finds the next focusable element after the given startElement.\n * It checks the next siblings of the startElement and returns the first focusable element found.\n * If no focusable element is found, it returns null.\n * @param startElement The element from which to start searching for the next focusable element.\n */\nexport function findNextFocusableElement(startElement: HTMLElement): HTMLElement | null {\n let nextElement = startElement.nextElementSibling;\n while (nextElement) {\n if (isFocusable(nextElement) && nextElement instanceof HTMLElement) {\n return nextElement;\n }\n nextElement = nextElement.nextElementSibling;\n }\n return null;\n}\n"],"version":3}