wcs-core 3.0.0 → 4.0.1

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 (334) hide show
  1. package/README.md +7 -0
  2. package/dist/cjs/{grid-pagination-ff65e0ff.js → grid-pagination-4b55c908.js} +1 -2
  3. package/dist/cjs/grid-pagination-4b55c908.js.map +1 -0
  4. package/dist/cjs/{helpers-11518d4f.js → helpers-4a14051a.js} +41 -1
  5. package/dist/cjs/helpers-4a14051a.js.map +1 -0
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/wcs-action-bar.cjs.entry.js.map +1 -1
  8. package/dist/cjs/wcs-app.cjs.entry.js +0 -1
  9. package/dist/cjs/wcs-app.cjs.entry.js.map +1 -1
  10. package/dist/cjs/wcs-button.cjs.entry.js +17 -3
  11. package/dist/cjs/wcs-button.cjs.entry.js.map +1 -1
  12. package/dist/cjs/wcs-checkbox.cjs.entry.js +0 -1
  13. package/dist/cjs/wcs-checkbox.cjs.entry.js.map +1 -1
  14. package/dist/cjs/wcs-com-nav-category.cjs.entry.js +1 -1
  15. package/dist/cjs/wcs-com-nav-category.cjs.entry.js.map +1 -1
  16. package/dist/cjs/wcs-com-nav-submenu.cjs.entry.js +1 -1
  17. package/dist/cjs/wcs-com-nav-submenu.cjs.entry.js.map +1 -1
  18. package/dist/cjs/wcs-com-nav.cjs.entry.js.map +1 -1
  19. package/dist/cjs/wcs-counter.cjs.entry.js +130 -0
  20. package/dist/cjs/wcs-counter.cjs.entry.js.map +1 -0
  21. package/dist/cjs/wcs-dropdown-item.cjs.entry.js +1 -1
  22. package/dist/cjs/wcs-dropdown.cjs.entry.js +1 -1
  23. package/dist/cjs/wcs-dropdown.cjs.entry.js.map +1 -1
  24. package/dist/cjs/wcs-editable-field.cjs.entry.js +16 -3
  25. package/dist/cjs/wcs-editable-field.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wcs-error_2.cjs.entry.js +1 -1
  27. package/dist/cjs/wcs-error_2.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wcs-field.cjs.entry.js.map +1 -1
  29. package/dist/cjs/wcs-footer.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wcs-galactic-menu.cjs.entry.js +1 -1
  31. package/dist/cjs/wcs-galactic-menu.cjs.entry.js.map +1 -1
  32. package/dist/cjs/wcs-galactic.cjs.entry.js +0 -1
  33. package/dist/cjs/wcs-galactic.cjs.entry.js.map +1 -1
  34. package/dist/cjs/wcs-grid-column.cjs.entry.js.map +1 -1
  35. package/dist/cjs/wcs-grid-pagination.cjs.entry.js +1 -1
  36. package/dist/cjs/wcs-grid.cjs.entry.js +1 -1
  37. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  38. package/dist/cjs/wcs-header.cjs.entry.js.map +1 -1
  39. package/dist/cjs/wcs-hint.cjs.entry.js +3 -3
  40. package/dist/cjs/wcs-hint.cjs.entry.js.map +1 -1
  41. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +0 -1
  42. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js.map +1 -1
  43. package/dist/cjs/wcs-input.cjs.entry.js +14 -4
  44. package/dist/cjs/wcs-input.cjs.entry.js.map +1 -1
  45. package/dist/cjs/wcs-native-select.cjs.entry.js +102 -0
  46. package/dist/cjs/wcs-native-select.cjs.entry.js.map +1 -0
  47. package/dist/cjs/wcs-nav-item.cjs.entry.js +1 -1
  48. package/dist/cjs/wcs-radio-group.cjs.entry.js.map +1 -1
  49. package/dist/cjs/wcs-radio.cjs.entry.js +3 -3
  50. package/dist/cjs/wcs-radio.cjs.entry.js.map +1 -1
  51. package/dist/cjs/wcs-select_2.cjs.entry.js +229 -72
  52. package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
  53. package/dist/cjs/wcs-switch.cjs.entry.js +0 -1
  54. package/dist/cjs/wcs-switch.cjs.entry.js.map +1 -1
  55. package/dist/cjs/wcs-tab.cjs.entry.js.map +1 -1
  56. package/dist/cjs/wcs-tabs.cjs.entry.js.map +1 -1
  57. package/dist/cjs/wcs-textarea.cjs.entry.js +5 -3
  58. package/dist/cjs/wcs-textarea.cjs.entry.js.map +1 -1
  59. package/dist/cjs/wcs-tooltip.cjs.entry.js.map +1 -1
  60. package/dist/cjs/wcs.cjs.js +1 -1
  61. package/dist/collection/collection-manifest.json +2 -0
  62. package/dist/collection/components/action-bar/action-bar.js.map +1 -1
  63. package/dist/collection/components/app/app.js +0 -1
  64. package/dist/collection/components/app/app.js.map +1 -1
  65. package/dist/collection/components/button/button-interface.js +5 -1
  66. package/dist/collection/components/button/button-interface.js.map +1 -1
  67. package/dist/collection/components/button/button.css +28 -20
  68. package/dist/collection/components/button/button.js +54 -5
  69. package/dist/collection/components/button/button.js.map +1 -1
  70. package/dist/collection/components/checkbox/checkbox.js +0 -1
  71. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  72. package/dist/collection/components/com-nav/com-nav.js.map +1 -1
  73. package/dist/collection/components/com-nav-category/com-nav-category.js.map +1 -1
  74. package/dist/collection/components/com-nav-submenu/com-nav-submenu.js.map +1 -1
  75. package/dist/collection/components/counter/counter-interface.js +6 -0
  76. package/dist/collection/components/counter/counter-interface.js.map +1 -0
  77. package/dist/collection/components/counter/counter.css +93 -0
  78. package/dist/collection/components/counter/counter.js +293 -0
  79. package/dist/collection/components/counter/counter.js.map +1 -0
  80. package/dist/collection/components/dropdown/dropdown.js +1 -1
  81. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  82. package/dist/collection/components/editable-field/editable-field-interface.js +5 -1
  83. package/dist/collection/components/editable-field/editable-field-interface.js.map +1 -1
  84. package/dist/collection/components/editable-field/editable-field.css +21 -6
  85. package/dist/collection/components/editable-field/editable-field.js +33 -2
  86. package/dist/collection/components/editable-field/editable-field.js.map +1 -1
  87. package/dist/collection/components/field/field.js +4 -0
  88. package/dist/collection/components/field/field.js.map +1 -1
  89. package/dist/collection/components/footer/footer.js +5 -0
  90. package/dist/collection/components/footer/footer.js.map +1 -1
  91. package/dist/collection/components/form-field/form-field.js +1 -1
  92. package/dist/collection/components/form-field/form-field.js.map +1 -1
  93. package/dist/collection/components/galactic/galactic.js +0 -1
  94. package/dist/collection/components/galactic/galactic.js.map +1 -1
  95. package/dist/collection/components/galactic-menu/galactic-menu.js.map +1 -1
  96. package/dist/collection/components/grid/grid.js.map +1 -1
  97. package/dist/collection/components/grid-column/grid-column.js.map +1 -1
  98. package/dist/collection/components/grid-pagination/grid-pagination.js +0 -1
  99. package/dist/collection/components/grid-pagination/grid-pagination.js.map +1 -1
  100. package/dist/collection/components/header/header.js +5 -0
  101. package/dist/collection/components/header/header.js.map +1 -1
  102. package/dist/collection/components/hint/hint.js +2 -2
  103. package/dist/collection/components/hint/hint.js.map +1 -1
  104. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js +0 -2
  105. package/dist/collection/components/horizontal-stepper/horizontal-stepper.js.map +1 -1
  106. package/dist/collection/components/input/input-interface.js +5 -1
  107. package/dist/collection/components/input/input-interface.js.map +1 -1
  108. package/dist/collection/components/input/input.css +21 -4
  109. package/dist/collection/components/input/input.js +30 -19
  110. package/dist/collection/components/input/input.js.map +1 -1
  111. package/dist/collection/components/native-select/native-select.component.js +153 -0
  112. package/dist/collection/components/native-select/native-select.component.js.map +1 -0
  113. package/dist/collection/components/native-select/native-select.css +78 -0
  114. package/dist/collection/components/radio/radio.component.js +1 -1
  115. package/dist/collection/components/radio/radio.component.js.map +1 -1
  116. package/dist/collection/components/radio/radio.css +15 -4
  117. package/dist/collection/components/radio-group/radio-group.js.map +1 -1
  118. package/dist/collection/components/select/select-interface.js +5 -1
  119. package/dist/collection/components/select/select-interface.js.map +1 -1
  120. package/dist/collection/components/select/select.css +41 -37
  121. package/dist/collection/components/select/select.js +233 -68
  122. package/dist/collection/components/select/select.js.map +1 -1
  123. package/dist/collection/components/select-option/select-option.css +3 -0
  124. package/dist/collection/components/select-option/select-option.js +25 -3
  125. package/dist/collection/components/select-option/select-option.js.map +1 -1
  126. package/dist/collection/components/switch/switch.js +0 -1
  127. package/dist/collection/components/switch/switch.js.map +1 -1
  128. package/dist/collection/components/tab/tab.js.map +1 -1
  129. package/dist/collection/components/tabs/tabs.js.map +1 -1
  130. package/dist/collection/components/textarea/textarea.css +3 -1
  131. package/dist/collection/components/textarea/textarea.js +23 -1
  132. package/dist/collection/components/textarea/textarea.js.map +1 -1
  133. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  134. package/dist/collection/index.js +3 -0
  135. package/dist/collection/index.js.map +1 -0
  136. package/dist/collection/shared-types.js +2 -0
  137. package/dist/collection/shared-types.js.map +1 -0
  138. package/dist/collection/utils/helpers.js +30 -0
  139. package/dist/collection/utils/helpers.js.map +1 -1
  140. package/dist/esm/{grid-pagination-62f9fbbc.js → grid-pagination-41354861.js} +2 -3
  141. package/dist/esm/grid-pagination-41354861.js.map +1 -0
  142. package/dist/esm/{helpers-e9b73aad.js → helpers-1f7170dd.js} +32 -2
  143. package/dist/esm/helpers-1f7170dd.js.map +1 -0
  144. package/dist/esm/loader.js +1 -1
  145. package/dist/esm/wcs-action-bar.entry.js.map +1 -1
  146. package/dist/esm/wcs-app.entry.js +1 -2
  147. package/dist/esm/wcs-app.entry.js.map +1 -1
  148. package/dist/esm/wcs-button.entry.js +17 -3
  149. package/dist/esm/wcs-button.entry.js.map +1 -1
  150. package/dist/esm/wcs-checkbox.entry.js +1 -2
  151. package/dist/esm/wcs-checkbox.entry.js.map +1 -1
  152. package/dist/esm/wcs-com-nav-category.entry.js +1 -1
  153. package/dist/esm/wcs-com-nav-category.entry.js.map +1 -1
  154. package/dist/esm/wcs-com-nav-submenu.entry.js +1 -1
  155. package/dist/esm/wcs-com-nav-submenu.entry.js.map +1 -1
  156. package/dist/esm/wcs-com-nav.entry.js.map +1 -1
  157. package/dist/esm/wcs-counter.entry.js +126 -0
  158. package/dist/esm/wcs-counter.entry.js.map +1 -0
  159. package/dist/esm/wcs-dropdown-item.entry.js +1 -1
  160. package/dist/esm/wcs-dropdown.entry.js +1 -1
  161. package/dist/esm/wcs-dropdown.entry.js.map +1 -1
  162. package/dist/esm/wcs-editable-field.entry.js +16 -3
  163. package/dist/esm/wcs-editable-field.entry.js.map +1 -1
  164. package/dist/esm/wcs-error_2.entry.js +1 -1
  165. package/dist/esm/wcs-error_2.entry.js.map +1 -1
  166. package/dist/esm/wcs-field.entry.js.map +1 -1
  167. package/dist/esm/wcs-footer.entry.js.map +1 -1
  168. package/dist/esm/wcs-galactic-menu.entry.js +1 -1
  169. package/dist/esm/wcs-galactic-menu.entry.js.map +1 -1
  170. package/dist/esm/wcs-galactic.entry.js +1 -2
  171. package/dist/esm/wcs-galactic.entry.js.map +1 -1
  172. package/dist/esm/wcs-grid-column.entry.js.map +1 -1
  173. package/dist/esm/wcs-grid-pagination.entry.js +1 -1
  174. package/dist/esm/wcs-grid.entry.js +1 -1
  175. package/dist/esm/wcs-grid.entry.js.map +1 -1
  176. package/dist/esm/wcs-header.entry.js.map +1 -1
  177. package/dist/esm/wcs-hint.entry.js +3 -3
  178. package/dist/esm/wcs-hint.entry.js.map +1 -1
  179. package/dist/esm/wcs-horizontal-stepper.entry.js +0 -1
  180. package/dist/esm/wcs-horizontal-stepper.entry.js.map +1 -1
  181. package/dist/esm/wcs-input.entry.js +14 -4
  182. package/dist/esm/wcs-input.entry.js.map +1 -1
  183. package/dist/esm/wcs-native-select.entry.js +98 -0
  184. package/dist/esm/wcs-native-select.entry.js.map +1 -0
  185. package/dist/esm/wcs-nav-item.entry.js +1 -1
  186. package/dist/esm/wcs-radio-group.entry.js.map +1 -1
  187. package/dist/esm/wcs-radio.entry.js +3 -3
  188. package/dist/esm/wcs-radio.entry.js.map +1 -1
  189. package/dist/esm/wcs-select_2.entry.js +229 -72
  190. package/dist/esm/wcs-select_2.entry.js.map +1 -1
  191. package/dist/esm/wcs-switch.entry.js +1 -2
  192. package/dist/esm/wcs-switch.entry.js.map +1 -1
  193. package/dist/esm/wcs-tab.entry.js.map +1 -1
  194. package/dist/esm/wcs-tabs.entry.js.map +1 -1
  195. package/dist/esm/wcs-textarea.entry.js +5 -3
  196. package/dist/esm/wcs-textarea.entry.js.map +1 -1
  197. package/dist/esm/wcs-tooltip.entry.js.map +1 -1
  198. package/dist/esm/wcs.js +1 -1
  199. package/dist/types/components/action-bar/action-bar.d.ts +2 -2
  200. package/dist/types/components/app/app.d.ts +0 -1
  201. package/dist/types/components/button/button-interface.d.ts +5 -1
  202. package/dist/types/components/button/button.d.ts +16 -7
  203. package/dist/types/components/checkbox/checkbox.d.ts +0 -1
  204. package/dist/types/components/com-nav/com-nav.d.ts +4 -4
  205. package/dist/types/components/com-nav-category/com-nav-category.d.ts +2 -2
  206. package/dist/types/components/com-nav-submenu/com-nav-submenu.d.ts +2 -2
  207. package/dist/types/components/counter/counter-interface.d.ts +7 -0
  208. package/dist/types/components/counter/counter.d.ts +67 -0
  209. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  210. package/dist/types/components/editable-field/editable-field-interface.d.ts +4 -0
  211. package/dist/types/components/editable-field/editable-field.d.ts +10 -13
  212. package/dist/types/components/field/field.d.ts +4 -0
  213. package/dist/types/components/footer/footer.d.ts +5 -0
  214. package/dist/types/components/form-field/form-field.d.ts +4 -4
  215. package/dist/types/components/galactic/galactic.d.ts +0 -1
  216. package/dist/types/components/galactic-menu/galactic-menu.d.ts +2 -2
  217. package/dist/types/components/grid/grid.d.ts +4 -4
  218. package/dist/types/components/grid-column/grid-column.d.ts +1 -1
  219. package/dist/types/components/grid-pagination/grid-pagination.d.ts +0 -1
  220. package/dist/types/components/header/header.d.ts +5 -0
  221. package/dist/types/components/hint/hint.d.ts +4 -1
  222. package/dist/types/components/horizontal-stepper/horizontal-stepper.d.ts +2 -4
  223. package/dist/types/components/input/input-interface.d.ts +4 -0
  224. package/dist/types/components/input/input.d.ts +8 -8
  225. package/dist/types/components/native-select/native-select.component.d.ts +56 -0
  226. package/dist/types/components/radio/radio.component.d.ts +1 -1
  227. package/dist/types/components/radio-group/radio-group.d.ts +1 -1
  228. package/dist/types/components/select/select-interface.d.ts +4 -0
  229. package/dist/types/components/select/select.d.ts +32 -20
  230. package/dist/types/components/select-option/select-option.d.ts +9 -3
  231. package/dist/types/components/switch/switch.d.ts +0 -1
  232. package/dist/types/components/tabs/tabs.d.ts +3 -3
  233. package/dist/types/components/textarea/textarea.d.ts +10 -2
  234. package/dist/types/components/tooltip/tooltip.d.ts +1 -2
  235. package/dist/types/components.d.ts +242 -22
  236. package/dist/types/index.d.ts +2 -0
  237. package/dist/types/shared-types.d.ts +10 -0
  238. package/dist/types/utils/helpers.d.ts +10 -0
  239. package/dist/wcs/p-029eb12a.entry.js +2 -0
  240. package/dist/wcs/p-029eb12a.entry.js.map +1 -0
  241. package/dist/wcs/p-069555a1.entry.js.map +1 -1
  242. package/dist/wcs/p-07b8cd36.entry.js.map +1 -1
  243. package/dist/wcs/p-12ac2547.js +2 -0
  244. package/dist/wcs/p-12ac2547.js.map +1 -0
  245. package/dist/wcs/p-1e43122f.entry.js.map +1 -1
  246. package/dist/wcs/p-26c4c983.entry.js +2 -0
  247. package/dist/wcs/p-26c4c983.entry.js.map +1 -0
  248. package/dist/wcs/p-26e7de5c.entry.js +16 -0
  249. package/dist/wcs/p-26e7de5c.entry.js.map +1 -0
  250. package/dist/wcs/p-31a8d23f.entry.js +2 -0
  251. package/dist/wcs/{p-d11c66d4.entry.js.map → p-31a8d23f.entry.js.map} +1 -1
  252. package/dist/wcs/p-463667c9.entry.js +2 -0
  253. package/dist/wcs/p-475ac7c5.js +2 -0
  254. package/dist/wcs/p-475ac7c5.js.map +1 -0
  255. package/dist/wcs/p-47d8ece5.entry.js.map +1 -1
  256. package/dist/wcs/p-4a9f8e94.entry.js.map +1 -1
  257. package/dist/wcs/p-4b2d8a6d.entry.js +2 -0
  258. package/dist/wcs/p-4b2d8a6d.entry.js.map +1 -0
  259. package/dist/wcs/{p-c7b42bae.entry.js → p-4b4d53e2.entry.js} +2 -2
  260. package/dist/wcs/p-50dce764.entry.js.map +1 -1
  261. package/dist/wcs/{p-8762cf93.entry.js → p-554ca93c.entry.js} +2 -2
  262. package/dist/wcs/p-627bbb6a.entry.js.map +1 -1
  263. package/dist/wcs/p-64dd7356.entry.js.map +1 -1
  264. package/dist/wcs/p-6acbf38a.entry.js +2 -0
  265. package/dist/wcs/{p-7d7472e2.entry.js.map → p-6acbf38a.entry.js.map} +1 -1
  266. package/dist/wcs/{p-6f921d57.entry.js → p-732b2faa.entry.js} +2 -2
  267. package/dist/wcs/p-732b2faa.entry.js.map +1 -0
  268. package/dist/wcs/{p-587fea23.entry.js → p-966a241e.entry.js} +2 -2
  269. package/dist/wcs/p-966a241e.entry.js.map +1 -0
  270. package/dist/wcs/p-9ecdeaf9.entry.js +2 -0
  271. package/dist/wcs/p-9ecdeaf9.entry.js.map +1 -0
  272. package/dist/wcs/p-a24fa4f4.entry.js +2 -0
  273. package/dist/wcs/p-a24fa4f4.entry.js.map +1 -0
  274. package/dist/wcs/p-a5cd4c07.entry.js +2 -0
  275. package/dist/wcs/{p-8bb19e58.entry.js.map → p-a5cd4c07.entry.js.map} +1 -1
  276. package/dist/wcs/p-b229a91c.entry.js +2 -0
  277. package/dist/wcs/p-b229a91c.entry.js.map +1 -0
  278. package/dist/wcs/{p-d998e112.entry.js → p-b6cd196d.entry.js} +2 -2
  279. package/dist/wcs/{p-d998e112.entry.js.map → p-b6cd196d.entry.js.map} +1 -1
  280. package/dist/wcs/p-b856f2f6.entry.js +2 -0
  281. package/dist/wcs/p-b856f2f6.entry.js.map +1 -0
  282. package/dist/wcs/{p-274232e6.entry.js → p-bcb8b731.entry.js} +2 -2
  283. package/dist/wcs/p-bcb8b731.entry.js.map +1 -0
  284. package/dist/wcs/p-d2da0c9f.entry.js +2 -0
  285. package/dist/wcs/p-d2da0c9f.entry.js.map +1 -0
  286. package/dist/wcs/p-d3f1cafe.entry.js.map +1 -1
  287. package/dist/wcs/p-d6b3f742.entry.js +2 -0
  288. package/dist/wcs/p-d6b3f742.entry.js.map +1 -0
  289. package/dist/wcs/p-ee453b6e.entry.js +2 -0
  290. package/dist/wcs/p-ee453b6e.entry.js.map +1 -0
  291. package/dist/wcs/p-f386bb8b.entry.js.map +1 -1
  292. package/dist/wcs/{p-e4dcd310.entry.js → p-f82e7a61.entry.js} +2 -2
  293. package/dist/wcs/{p-e4dcd310.entry.js.map → p-f82e7a61.entry.js.map} +1 -1
  294. package/dist/wcs/p-fc3f5b53.entry.js.map +1 -1
  295. package/dist/wcs/wcs.css +1 -1
  296. package/dist/wcs/wcs.esm.js +1 -1
  297. package/dist/wcs/wcs.esm.js.map +1 -1
  298. package/package.json +17 -12
  299. package/dist/cjs/grid-pagination-ff65e0ff.js.map +0 -1
  300. package/dist/cjs/helpers-11518d4f.js.map +0 -1
  301. package/dist/esm/grid-pagination-62f9fbbc.js.map +0 -1
  302. package/dist/esm/helpers-e9b73aad.js.map +0 -1
  303. package/dist/wcs/p-111ae1af.entry.js +0 -2
  304. package/dist/wcs/p-111ae1af.entry.js.map +0 -1
  305. package/dist/wcs/p-14e04d5e.entry.js +0 -2
  306. package/dist/wcs/p-14e04d5e.entry.js.map +0 -1
  307. package/dist/wcs/p-274232e6.entry.js.map +0 -1
  308. package/dist/wcs/p-2920b759.entry.js +0 -16
  309. package/dist/wcs/p-2920b759.entry.js.map +0 -1
  310. package/dist/wcs/p-3e370f48.entry.js +0 -2
  311. package/dist/wcs/p-49e66081.entry.js +0 -2
  312. package/dist/wcs/p-49e66081.entry.js.map +0 -1
  313. package/dist/wcs/p-504fb24e.entry.js +0 -2
  314. package/dist/wcs/p-504fb24e.entry.js.map +0 -1
  315. package/dist/wcs/p-5140269d.entry.js +0 -2
  316. package/dist/wcs/p-5140269d.entry.js.map +0 -1
  317. package/dist/wcs/p-587fea23.entry.js.map +0 -1
  318. package/dist/wcs/p-62db1219.js +0 -2
  319. package/dist/wcs/p-62db1219.js.map +0 -1
  320. package/dist/wcs/p-6f921d57.entry.js.map +0 -1
  321. package/dist/wcs/p-7d7472e2.entry.js +0 -2
  322. package/dist/wcs/p-89b3550b.entry.js +0 -2
  323. package/dist/wcs/p-89b3550b.entry.js.map +0 -1
  324. package/dist/wcs/p-8bb19e58.entry.js +0 -2
  325. package/dist/wcs/p-9157466f.entry.js +0 -2
  326. package/dist/wcs/p-9157466f.entry.js.map +0 -1
  327. package/dist/wcs/p-d11c66d4.entry.js +0 -2
  328. package/dist/wcs/p-d218509e.entry.js +0 -2
  329. package/dist/wcs/p-d218509e.entry.js.map +0 -1
  330. package/dist/wcs/p-dc57a5f7.js +0 -2
  331. package/dist/wcs/p-dc57a5f7.js.map +0 -1
  332. /package/dist/wcs/{p-3e370f48.entry.js.map → p-463667c9.entry.js.map} +0 -0
  333. /package/dist/wcs/{p-c7b42bae.entry.js.map → p-4b4d53e2.entry.js.map} +0 -0
  334. /package/dist/wcs/{p-8762cf93.entry.js.map → p-554ca93c.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/components/select/select.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch\n} from '@stencil/core';\n\nimport _ from 'lodash';\nimport { interpret, Interpreter, Machine, MachineConfig, MachineOptions } from 'xstate';\n\nimport { SelectChangeEventDetail } from './select-interface';\nimport { SelectArrow } from './select-arrow';\nimport { SelectOptionChosedEvent, SelectOptionValue } from '../select-option/select-option-interface';\nimport { isElement } from '../../utils/helpers';\nimport { SelectChips } from './select-chips';\nimport { MDCRipple } from '@material/ripple';\n\ninterface SelectStateSchema {\n states: {\n closed: {};\n opened: {};\n };\n}\n\ntype SelectEvent\n = { type: 'OPEN' }\n | { type: 'CLOSE' }\n | { type: 'CLICK' }\n | { type: 'OPTION_CLICKED', value: SelectOptionChosedEvent };\n\nconst SELECT_MACHINE_CONFIG: MachineConfig<any, SelectStateSchema, SelectEvent> = {\n key: 'select',\n initial: 'closed',\n states: {\n closed: {\n entry: ['close'],\n on: {\n CLICK: 'opened',\n OPEN: 'opened',\n OPTION_CLICKED: {actions: ['selectOption']}\n },\n },\n opened: {\n entry: ['open'],\n on: {\n CLICK: 'closed',\n CLOSE: 'closed',\n OPTION_CLICKED: {actions: ['selectOption']}\n },\n },\n }\n};\n\n/**\n * Select component, use in conjuction with wcs-select-option.\n *\n * @example ```hmtl\n * <wcs-select>\n * <wcs-select-option value=\"1\">One</wcs-select-option>\n * </wcs-select>```\n * @todo Complete keyboard navigation.\n */\n@Component({\n tag: 'wcs-select',\n styleUrl: 'select.scss',\n shadow: true\n})\nexport class Select implements ComponentInterface {\n private stateService!: Interpreter<any, SelectStateSchema, SelectEvent>;\n\n private optionsEl!: HTMLDivElement;\n private controlEl!: HTMLDivElement;\n\n // Only used for multiples.\n private values: SelectOptionValue[];\n\n @Element() el!: HTMLWcsSelectElement;\n\n /** Wether the select is expanded */\n @State()\n expanded = false;\n\n /** Wether the component is fully loaded in the DOM. */\n @State()\n hasLoaded = false;\n\n /** Text to display for the selected option, when no option is selected, the value is undefined. */\n @State()\n displayText: string;\n\n /** When the host is focused. */\n @State()\n focused: boolean;\n\n /** The currently selected value. */\n @Prop({mutable: true})\n value?: any | null;\n\n /** The text to display when the select is empty. */\n @Prop({mutable: true, reflect: true})\n placeholder?: string | null;\n\n /** If `true`, the user cannot interact with the select. */\n @Prop({mutable: true})\n disabled = false;\n\n /** If `true`, the user can select multiple values at once. */\n @Prop({reflect: true})\n multiple = false;\n\n /** If `true`, selected items are shown in chips mode. */\n @Prop({reflect: true})\n chips = false;\n\n /** The name of the control, which is submitted with the form data. */\n @Prop()\n name?: string;\n\n /** Function used to compare options, default : deep comparison. */\n @Prop()\n compareWith?: (optionValue: any, selectedValue: any) => boolean = (optionValue, selectedValue) => _.isEqual(optionValue, selectedValue);\n\n @State() overlayDirection: 'bottom' | 'top' = 'bottom';\n\n /** Emitted when the value has changed. */\n @Event() wcsChange!: EventEmitter<SelectChangeEventDetail>;\n\n /** Emitted when the select has focus. */\n @Event() wcsFocus!: EventEmitter<void>;\n\n /** Emitted when the select loses focus. */\n @Event() wcsBlur!: EventEmitter<void>;\n\n /** Open the component. */\n @Method()\n async open() {\n this.stateService.send('OPEN');\n }\n\n /** Close the component. */\n @Method()\n async close() {\n this.stateService.send('CLOSE');\n }\n\n @Watch('value')\n onValueChangeHandler(newValue: any) {\n this.updateSelectedValue(newValue);\n this.emitChange(this.value);\n }\n\n private updateSelectedValue(value: any) {\n // If no value is passed, the select is reset.\n if (!value) {\n this.reset();\n }\n if (this.multiple) {\n // If user don't give an array, we provide one\n if (!Array.isArray(value)) {\n value = [value];\n }\n this.values = [];\n\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n const isSelected = value ?\n value.findIndex(v => this.compareWith(opt.value, v)) !== -1\n : false;\n if (isSelected) {\n this.values.push({\n value: opt.value,\n displayText: opt.innerText,\n chipColor: opt.chipColor,\n chipBackgroundColor: opt.chipBackgroundColor\n });\n }\n opt.selected = isSelected;\n });\n // update select placeholder text\n this.displayText = this.values.length !== 0\n ? this.values.map(v => v.displayText).join(', ')\n : undefined;\n } else {\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n const isSelected = this.compareWith(opt.value, value);\n if (isSelected) {\n this.displayText = opt.innerText;\n }\n opt.selected = isSelected;\n });\n }\n }\n\n /**\n * Reset the select: unselects all options for multiple mode and displays the placeholder\n * @private\n */\n private reset() {\n this.values = [];\n this.displayText = undefined;\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n opt.selected = false;\n });\n }\n\n componentDidLoad() {\n this.optionsEl = this.el.shadowRoot.querySelector('.wcs-select-options');\n this.controlEl = this.el.shadowRoot.querySelector('.wcs-select-control');\n\n const stateMachine = Machine(\n SELECT_MACHINE_CONFIG,\n this.initMachineOptions()\n );\n // FIXME: type checking failed...\n // @ts-ignore\n this.stateService = interpret(stateMachine);\n\n if (this.multiple) {\n this.values = [];\n }\n\n this.addRippleEffect();\n this.stateService.start();\n if (this.optionsEl.querySelector('slot') === null) {\n this.replaceOptions_firefoxBefore63();\n this.listenDomUpdate_firefoxBefore63();\n }\n\n if (this.value !== undefined) {\n this.updateSelectedValue(this.value);\n }\n // TODO: is this still usefull for anything ?\n this.hasLoaded = true;\n }\n\n private emitChange(newValue: any): void {\n this.wcsChange.emit({\n value: newValue\n });\n }\n\n private replaceOptions_firefoxBefore63() {\n Array.from(this.el.querySelectorAll('wcs-select-option'))\n .forEach(option => {\n if (option.parentNode === this.el) {\n this.el.removeChild(option);\n this.optionsEl.appendChild(option);\n }\n });\n }\n\n private listenDomUpdate_firefoxBefore63() {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n this.replaceOptions_firefoxBefore63();\n }\n }\n });\n observer.observe(this.el, {childList: true});\n }\n\n componentWillUpdate() {\n if (this.multiple) {\n this.options\n .forEach((opt: HTMLWcsSelectOptionElement) => opt.multiple = true);\n }\n }\n\n private get options(): HTMLWcsSelectOptionElement[] {\n const opts = this.el?.querySelectorAll('wcs-select-option');\n if (opts && opts.length !== 0) {\n return opts as any as HTMLWcsSelectOptionElement[];\n }\n return [];\n }\n\n private initMachineOptions(): Partial<MachineOptions<any, SelectEvent>> {\n return {\n actions: {\n open: () => {\n if (!this.disabled) {\n this.updateOverlayDirection();\n this.expanded = true;\n this.focused = true;\n }\n },\n close: () => {\n this.focused = true;\n this.expanded = false;\n },\n selectOption: (_, event) => {\n if (event.type === 'OPTION_CLICKED') {\n this.handleClickEvent(event.value);\n }\n }\n },\n guards: {\n enabled: () => !this.disabled\n }\n };\n }\n\n /**\n * This method controls whether or not the overlay has enough space to be displayed\n * at the bottom of the select component.\n *\n * It compute the size of the expended select by adding the theoretical dimensions of the\n * overlay calculated from the number of options plus the initial select size.\n * @private\n */\n private updateOverlayDirection() {\n // We retrieve values from CSS variables\n const overlayMaxHeight = +getComputedStyle(this.el).getPropertyValue('--wcs-select-overlay-max-height').replace(/\\D/g, '');\n const optionSize = +getComputedStyle(this.el).getPropertyValue('--wcs-select-option-height').replace(/\\D/g, '');\n const selectBounding = this.el.getBoundingClientRect();\n const maxOptionsCount = Math.floor(overlayMaxHeight / optionSize);\n // Maximum size of the overlay is 360px, otherwise the size is calculated from the number of options\n const optionsOverlaySize = this.options.length > maxOptionsCount ? overlayMaxHeight + 1 : this.options.length * optionSize + 1;\n const remainingHeightAfterOpen = window.innerHeight - (selectBounding.y + selectBounding.height + optionsOverlaySize);\n // There are not enough pixels to open the overlay below the component\n if (remainingHeightAfterOpen < 0) {\n this.overlayDirection = 'top';\n } else {\n this.overlayDirection = 'bottom';\n }\n }\n\n private updateOverlayMargin() {\n if (this.controlEl && this.optionsEl) {\n if (this.overlayDirection === 'top') {\n this.optionsEl.style.marginTop = '-' + this.controlEl.getBoundingClientRect().height + 'px';\n } else {\n this.optionsEl.style.marginTop = '0';\n }\n }\n }\n\n private handleClickEvent(event: SelectOptionChosedEvent) {\n if (this.multiple) {\n this.handleClickOnMultiple(event);\n } else {\n this.handleNormalClick(event);\n }\n }\n\n private handleClickOnMultiple(event: SelectOptionChosedEvent) {\n const index = this.values.findIndex(v => v.value === event.value);\n if (index === -1) {\n const {value, displayText, chipColor, chipBackgroundColor} = event;\n this.values.push({value, displayText, chipColor, chipBackgroundColor});\n event.source.selected = true;\n } else {\n event.source.selected = false;\n this.values.splice(index, 1);\n }\n this.updateValueWithValues();\n }\n\n private updateValueWithValues() {\n this.value = this.values.map(v => v.value);\n this.displayText = this.values.length !== 0\n ? this.values.map(v => v.displayText).join(', ')\n : undefined;\n }\n\n private handleNormalClick(event: SelectOptionChosedEvent) {\n // Reset other options to false if they were selected.\n this.options\n .forEach(option => {\n if (option.selected) option.selected = false;\n });\n\n event.source.selected = true;\n this.value = event.value;\n this.displayText = event.displayText;\n this.stateService.send('CLOSE');\n }\n\n disconnectedCallback() {\n this.stateService?.stop();\n }\n\n private addRippleEffect() {\n // TODO: wrap MDCRipple dependency so we can eventually write our own or at least decouple a bit.\n const ripple = new MDCRipple(this.controlEl);\n ripple.unbounded = false;\n }\n\n private get hasValue(): boolean {\n // TODO: change this behavior.\n return this.displayText !== undefined;\n }\n\n @Listen('mousedown')\n onMouseDown(event: MouseEvent) {\n const clickOnScroll = isElement(event.target)\n && (event.offsetX > event.target.clientWidth\n || event.offsetY > event.target.clientHeight // If the click il located bellow the component height the click happen in the overlay\n || event.offsetY < 0); // If the click is made above the component\n\n const clickOnRemoveChip = event.composedPath()\n .filter(x => {\n const el = (x as HTMLElement);\n return el.nodeName === 'svg' && el.classList.contains('chip');\n })\n .length > 0;\n\n if (!clickOnScroll && !clickOnRemoveChip) {\n this.stateService.send('CLICK');\n }\n }\n\n @Listen('click', {target: 'window'})\n onWindowClickEvent(event: MouseEvent) {\n // We search in the full path of the event, because if a select is used in another web component,\n // the event captured by the windows will target the parent web component and not the select.\n const clickedOnSelectOrChildren = event.composedPath().map(x => (x as HTMLElement).nodeName).indexOf('WCS-SELECT') !== -1;\n // TODO: Move this logic in the state machine\n // FIXME: Doesnt work with single + disabled option\n if (this.expanded && !clickedOnSelectOrChildren) {\n this.stateService.send('CLOSE');\n }\n }\n\n @Listen('wcsSelectOptionClick')\n selectedOptionChanged(event: CustomEvent<SelectOptionChosedEvent>) {\n this.sendOptionClickedToStateMachine(event.detail);\n }\n\n sendOptionClickedToStateMachine(event: SelectOptionChosedEvent) {\n this.stateService.send({type: 'OPTION_CLICKED', value: event});\n }\n\n onSlotchange() {\n this.updateSelectedValue(this.value);\n }\n\n removeChip(v: SelectOptionValue) {\n this.options\n .forEach(opt => {\n if (opt.value === v.value) {\n this.sendOptionClickedToStateMachine({\n ...v,\n source: opt\n });\n }\n });\n }\n\n render() {\n if (this.hasLoaded) {\n this.updateStyles();\n }\n this.updateOverlayMargin();\n return (\n <Host class={this.expanded ? 'expanded ' : ''}\n overlayDirection={this.overlayDirection} {...this.focusedAttributes()}>\n <div class=\"wcs-select-control\">\n {this.hasValue\n ? (this.chips ?\n this.values.map((option: SelectOptionValue) =>\n <SelectChips disabled={this.disabled} option={option}\n onRemove={this.removeChip.bind(this)}/>\n )\n : <label class=\"wcs-select-value\">{this.displayText}</label>)\n : <label class=\"wcs-select-placeholder\">{this.placeholder}</label>\n }\n <SelectArrow up={this.expanded}/>\n </div>\n <div class=\"wcs-select-options\">\n <slot name=\"wcs-select-option\" onSlotchange={this.onSlotchange.bind(this)}/>\n </div>\n </Host>\n );\n }\n\n private updateStyles() {\n // Make the options container width the same width as everything.\n const borderSize = 1;\n // TODO: Consider using a mutation observer to rerender the size each time ?\n // Be cautious as it may cause infinite loop with render ?\n this.optionsEl.setAttribute(\n 'style',\n `width: ${Math.ceil(this.el.offsetWidth - 2 * borderSize)}px;`\n );\n }\n\n private focusedAttributes() {\n return !this.disabled ? {tabIndex: 0} : {};\n }\n\n}\n"]}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/components/select/select.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EAET,OAAO,EACP,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACR,MAAM,eAAe,CAAC;AAEvB,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,SAAS,EAAe,OAAO,EAAiC,MAAM,QAAQ,CAAC;AAExF,OAAO,EAAE,eAAe,EAA0C,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EACH,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,UAAU,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAY,MAAM,gBAAgB,CAAC;AAexD,MAAM,qBAAqB,GAAuD;EAC9E,GAAG,EAAE,QAAQ;EACb,OAAO,EAAE,QAAQ;EACjB,MAAM,EAAE;IACJ,MAAM,EAAE;MACJ,KAAK,EAAE,CAAC,OAAO,CAAC;MAChB,EAAE,EAAE;QACA,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,EAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAC;OAC/C;KACJ;IACD,MAAM,EAAE;MACJ,KAAK,EAAE,CAAC,MAAM,CAAC;MACf,EAAE,EAAE;QACA,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,eAAe,EAAE,EAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAC;OAC/C;KACJ;GACJ;CACJ,CAAC;AAEF;;;;;;;GAOG;AAMH,MAAM,OAAO,MAAM;;IAGP,aAAQ,GAAG,cAAc,SAAS,EAAE,EAAE,CAAC;IAGvC,cAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBAY7B,KAAK;gBAKqB,GAAG;qBAK5B,KAAK;;;;;oBAqBd,KAAK;oBAIL,KAAK;iBAIR,KAAK;;uBAQqD,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC;4BAIjF,QAAQ;;EAW9D,0BAA0B;EAE1B,KAAK,CAAC,IAAI;IACN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACnC,CAAC;EAED,2BAA2B;EAE3B,KAAK,CAAC,KAAK;IACP,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACpC,CAAC;EAGD,oBAAoB,CAAC,QAAa;IAC9B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAChC,CAAC;EAEO,mBAAmB,CAAC,KAAU;IAClC,8CAA8C;IAC9C,IAAI,CAAC,KAAK,EAAE;MACR,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE;MACf,8CAA8C;MAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;OACnB;MACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;MAEjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAA+B,EAAE,EAAE;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC;UACtB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;UAC3D,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,UAAU,EAAE;UACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,SAAS;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;WAC/C,CAAC,CAAC;SACN;QACD,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC;MAC9B,CAAC,CAAC,CAAC;MACH,iCAAiC;MACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;KACnB;SAAM;MACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAA+B,EAAE,EAAE;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE;UACZ,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;SACpC;QACD,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC;MAC9B,CAAC,CAAC,CAAC;KACN;EACL,CAAC;EAED;;;KAGG;EACK,KAAK;IACT,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAA+B,EAAE,EAAE;MACrD,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC;EACP,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,OAAO,CACxB,qBAAqB,EACrB,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAC;IACF,iCAAiC;IACjC,aAAa;IACb,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,IAAI,CAAC,QAAQ,EAAE;MACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KACpB;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;MAC/C,IAAI,CAAC,8BAA8B,EAAE,CAAC;MACtC,IAAI,CAAC,+BAA+B,EAAE,CAAC;KAC1C;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;MAC1B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxC;IAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAE1C,qFAAqF;IACrF,2FAA2F;IAC3F,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,YAAY,EAAE;MACnB,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;KACjD;IAED,6CAA6C;IAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EAC1B,CAAC;EAEO,oBAAoB;IACxB,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;MAChD,SAAS,EAAE,QAAQ;MACnB,SAAS,EAAE;QACP;UACI,IAAI,EAAE,QAAQ;UACd,OAAO,EAAE;YACL,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wDAAwD;WAC1E;SACJ;OACJ;KACJ,CAAC,CAAC;EACP,CAAC;EAEO,UAAU,CAAC,QAAa;IAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;MAChB,KAAK,EAAE,QAAQ;KAClB,CAAC,CAAC;EACP,CAAC;EAEO,8BAA8B;IAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;OACpD,OAAO,CAAC,MAAM,CAAC,EAAE;MACd,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OACtC;IACL,CAAC,CAAC,CAAC;EACX,CAAC;EAEO,+BAA+B;IACnC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,aAAa,EAAE,EAAE;MACpD,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;QAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;UAC/B,IAAI,CAAC,8BAA8B,EAAE,CAAC;SACzC;OACJ;IACL,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;EACjD,CAAC;EAED,iBAAiB;IACb,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC7B,OAAO,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;MACvH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,yBAAyB;KAC7C;EACL,CAAC;EAED,mBAAmB;IACf,IAAI,IAAI,CAAC,QAAQ,EAAE;MACf,IAAI,CAAC,OAAO;SACP,OAAO,CAAC,CAAC,GAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;KAC1E;EACL,CAAC;EAED,IAAY,OAAO;;IACf,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;MAC3B,OAAO,IAA2C,CAAC;KACtD;IACD,OAAO,EAAE,CAAC;EACd,CAAC;EAED,IAAY,kBAAkB;;IAC1B,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,mCAAmC,CAAC,CAAC;IAC5E,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;MAC3B,OAAO,IAA2C,CAAC;KACtD;IACD,OAAO,EAAE,CAAC;EACd,CAAC;EAEO,kBAAkB;IACtB,OAAO;MACH,OAAO,EAAE;QACL,IAAI,EAAE,GAAG,EAAE;;UACP,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;cACnC,IAAI,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,yBAAyB,mCAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;cAC7F,qBAAqB,CAAC,GAAG,EAAE;;gBACvB,MAAA,IAAI,CAAC,wBAAwB,0CAAE,KAAK,EAAE,CAAC;cAC3C,CAAC,CAAC,CAAC;aACN;WACJ;QACL,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,KAAkB,EAAE,EAAE;;UAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACxB,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAE,UAAU,EAAE;cACzB,MAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,0CAAE,KAAK,EAAE,CAAC;cACvC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACxB;iBAAM;cACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;cAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACtB;WACJ;UACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;UACvB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;WACtC;QACL,CAAC;OACJ;MACD,MAAM,EAAE;QACJ,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;OAChC;KACJ,CAAC;EACN,CAAC;EAEO,gBAAgB,CAAC,KAA8B;IACnD,IAAI,IAAI,CAAC,QAAQ,EAAE;MACf,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACrC;SAAM;MACH,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACjC;EACL,CAAC;EAEO,qBAAqB,CAAC,KAA8B;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;MACd,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAC,GAAG,KAAK,CAAC;MACnE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAC,CAAC,CAAC;MACvE,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;MAC7B,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,MAAM,CAAC;KACjD;SAAM;MACH,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;MAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;MAC7B,IAAI,IAAI,CAAC,yBAAyB,KAAK,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;KAC9F;IACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;EACjC,CAAC;EAEO,qBAAqB;IACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;MACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;MAChD,CAAC,CAAC,SAAS,CAAC;EACpB,CAAC;EAEO,iBAAiB,CAAC,KAA8B;IACpD,sDAAsD;IACtD,IAAI,CAAC,OAAO;OACP,OAAO,CAAC,MAAM,CAAC,EAAE;MACd,IAAI,MAAM,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IACjD,CAAC,CAAC,CAAC;IAEP,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACpC,CAAC;EAED,oBAAoB;;IAChB,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,EAAE,CAAC;EAC9B,CAAC;EAEO,eAAe;IACnB,iGAAiG;IACjG,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;EAC7B,CAAC;EAED,IAAY,QAAQ;IAChB,8BAA8B;IAC9B,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;EAC1C,CAAC;EAGD,WAAW,CAAC,KAAiB;IACzB,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;SACtC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW;WACrC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,sFAAsF;WAChI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,2CAA2C;IAE1E,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,EAAE;OACzC,MAAM,CAAC,CAAC,CAAC,EAAE;MACR,MAAM,EAAE,GAAI,CAAiB,CAAC;MAC9B,OAAO,EAAE,CAAC,QAAQ,KAAK,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC,CAAC;OACD,MAAM,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,EAAE;MACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACnC;EACL,CAAC;EAGD,kBAAkB,CAAC,KAAiB;IAChC,MAAM,sBAAsB,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,CAAiB,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,MAAM,oBAAoB,GAAG,sBAAsB,KAAK,IAAI,CAAC,EAAE,CAAC;IAChE,6CAA6C;IAC7C,mDAAmD;IACnD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE;MACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACnC;EACL,CAAC;EAGD,SAAS,CAAC,MAAqB;IAC3B,QAAQ;IACR,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;MACnD,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;QACvF,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO;OACV;MACD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;UACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;OACJ;WAAM;QACH,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;UACnD,MAAM,CAAC,cAAc,EAAE,CAAC;UACxB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;SACpC;QACD,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;UAChD,MAAM,CAAC,cAAc,EAAE,CAAC;UACxB,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;SACxC;aAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;UAC9B,MAAM,CAAC,cAAc,EAAE,CAAC;UACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;aAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;UACjD,MAAM,CAAC,cAAc,EAAE,CAAC;UACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;OACJ;KACJ;IACD,OAAO;SACF,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;MACxD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;QAChE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,EAAC,CAAC,CAAC;OACvE;WAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;QAClE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC,UAAU,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;OACtE;WAAM,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;QAC/B,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;OACnC;WAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;OACvC;WAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;QACjD,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;OAC3B;WAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;QAC9B,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;OAC1B;KACJ;EACL,CAAC;EAEO,mCAAmC,CAAC,SAA8B,EAAE,KAA6B;IACrG,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAErJ,IAAI,SAAS,KAAK,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;MAC3E,YAAY,EAAE,CAAC;KAClB;SAAM,IAAI,SAAS,KAAK,UAAU,IAAI,YAAY,GAAG,CAAC,EAAE;MACrD,YAAY,EAAE,CAAC;KAClB;SAAM;MACH,OAAO,SAAS,CAAC;KACpB;IACD,OAAO,YAAY,CAAC;EACxB,CAAC;EAEO,YAAY,CAAC,aAAqB;IACtC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,gCAAgC,CAAC;MAClC,MAAM,EAAE,IAAI,CAAC,yBAAyB;MACtC,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,SAAS;KACxD,CAAC,CAAC;EACP,CAAC;EAEO,mBAAmB,CAAC,SAA8B;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,mCAAmC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtF,IAAG,aAAa,KAAK,SAAS;MAAE,OAAO;IACvC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;EACrC,CAAC;EAEO,iBAAiB;IACrB,IAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;MACnC,OAAO;KACV;IAED,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;EACzB,CAAC;EAEO,gBAAgB;IACpB,IAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;MACnC,OAAO;KACV;IAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EAC1D,CAAC;EAEO,WAAW,CAAC,YAAoB;;IACpC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACtE,MAAA,IAAI,CAAC,wBAAwB,0CAAE,KAAK,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;EACpF,CAAC;EAEO,kBAAkB,CAAC,SAA8B;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,mCAAmC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpF,IAAG,YAAY,KAAK,SAAS;MAAE,OAAO;IAEtC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;EACnC,CAAC;EAEO,gBAAgB;IACpB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;EACxB,CAAC;EAEO,eAAe;IACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACzD,CAAC;EAGD,qBAAqB,CAAC,KAA2C;IAC7D,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACxD,CAAC;EAED,gCAAgC,CAAC,KAA8B;IAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;EACpE,CAAC;EAED,YAAY;IACR,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACzC,CAAC;EAED,UAAU,CAAC,CAAoB;IAC3B,IAAI,CAAC,OAAO;OACP,OAAO,CAAC,GAAG,CAAC,EAAE;MACX,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE;QACvB,IAAI,CAAC,gCAAgC,iCAC9B,CAAC,KACJ,MAAM,EAAE,GAAG,IACb,CAAC;OACN;IACL,CAAC,CAAC,CAAC;EACX,CAAC;EAED,kBAAkB;;IACd,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,EAAE,CAAC;EAC1B,CAAC;EAED,MAAM;IACF,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IACpI,OAAO,CACH,EAAC,IAAI,kBAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAM,IAAI,CAAC,iBAAiB,EAAE,IACrE,IAAI,EAAC,UAAU,mBACD,SAAS,mBACR,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,mBAC7B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAChC,IAAI,CAAC,SAAS,eAClB,IAAI,CAAC,SAAS,0BACH,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,gBAC1C,cAAc;MAC5B,WAAK,KAAK,EAAC,oBAAoB;QAC3B,WAAK,KAAK,EAAC,4BAA4B,IACtC,IAAI,CAAC,QAAQ;UACV,CAAC;YACD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;cACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAyB,EAAE,EAAE,CACtC,EAAC,WAAW,IAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EACtC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5D;cACD,CAAC,CAAC,aAAO,KAAK,EAAC,kBAAkB,IAAE,IAAI,CAAC,WAAW,CAAS,CAAC;UACjE,CAAC,CAAC,aAAO,KAAK,EAAC,wBAAwB,IAAE,IAAI,CAAC,WAAW,CAAS,CAEhE;QACN,EAAC,WAAW,IAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,CAC/B;MACN,WAAK,KAAK,EAAC,oBAAoB,EAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAC,SAAS;QAC9D,YAAM,IAAI,EAAC,mBAAmB,EAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1E,CACH,CACV,CAAC;EACN,CAAC;EAEO,iBAAiB;IACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;EAC/C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ;AAED,IAAI,SAAS,GAAG,CAAC,CAAC","sourcesContent":["import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch\n} from '@stencil/core';\n\nimport _ from 'lodash';\nimport { interpret, Interpreter, Machine, MachineConfig, MachineOptions } from 'xstate';\n\nimport { isWcsSelectSize, SelectChangeEventDetail, WcsSelectSize, WcsSelectSizeValue } from './select-interface';\nimport { SelectArrow } from './select-arrow';\nimport { SelectOptionChosedEvent, SelectOptionValue } from '../select-option/select-option-interface';\nimport {\n isDownArrowKey,\n isElement,\n isEnterKey,\n isEscapeKey,\n isHomeKey,\n isLeftArrowKey,\n isPageDownKey,\n isPageUpKey,\n isRightArrowKey,\n isTabKey,\n isUpArrowKey,\n generateUniqueId,\n findItemLabel,\n isSpaceKey,\n} from '../../utils/helpers';\nimport { SelectChips } from './select-chips';\nimport { MDCRipple } from '@material/ripple';\nimport { createPopper, Instance } from '@popperjs/core';\n\ninterface SelectStateSchema {\n states: {\n closed: {};\n opened: {};\n };\n}\n\ntype SelectEvent\n = { type: 'OPEN' }\n | { type: 'CLOSE', value: { shouldBlur?: boolean } }\n | { type: 'CLICK' }\n | { type: 'OPTION_SELECTED', value: SelectOptionChosedEvent };\n\nconst SELECT_MACHINE_CONFIG: MachineConfig<any, SelectStateSchema, SelectEvent> = {\n key: 'select',\n initial: 'closed',\n states: {\n closed: {\n entry: ['close'],\n on: {\n CLICK: 'opened',\n OPEN: 'opened',\n OPTION_SELECTED: {actions: ['selectOption']}\n },\n },\n opened: {\n entry: ['open'],\n on: {\n CLICK: 'closed',\n CLOSE: 'closed',\n OPTION_SELECTED: {actions: ['selectOption']}\n },\n },\n }\n};\n\n/**\n * Select component, use in conjuction with wcs-select-option.\n *\n * @example ```hmtl\n * <wcs-select>\n * <wcs-select-option value=\"1\">One</wcs-select-option>\n * </wcs-select>```\n */\n@Component({\n tag: 'wcs-select',\n styleUrl: 'select.scss',\n shadow: true\n})\nexport class Select implements ComponentInterface {\n private stateService!: Interpreter<any, SelectStateSchema, SelectEvent>;\n\n private selectId = `wcs-select-${selectIds++}`;\n private labelElement: HTMLWcsLabelElement;\n private optionsEl!: HTMLDivElement;\n private optionsId = generateUniqueId(\"OPTIONS\");\n private controlEl!: HTMLDivElement;\n\n // Only used for multiples.\n private values: SelectOptionValue[];\n private lastSelectedOptionElement: HTMLWcsSelectOptionElement | null;\n private lastFocusedOptionElement: HTMLWcsSelectOptionElement | null;\n\n @Element() private el!: HTMLWcsSelectElement;\n\n /** Wether the select is expanded */\n @State()\n private expanded = false;\n\n /**\n * Specify the size (height) of the select.\n */\n @Prop({reflect: true}) size: WcsSelectSize = 'm';\n\n /** Wether the component is fully loaded in the DOM. */\n @State()\n // @ts-ignore\n private hasLoaded = false;\n\n /** Text to display for the selected option, when no option is selected, the value is undefined. */\n @State()\n private displayText: string;\n\n /** When the host is focused. */\n @State()\n // @ts-ignore\n private focused: boolean;\n\n /** The currently selected value. */\n @Prop({mutable: true})\n value?: any | null;\n\n /** The text to display when the select is empty. */\n @Prop({mutable: true, reflect: true})\n placeholder?: string | null;\n\n /** If `true`, the user cannot interact with the select. */\n @Prop({mutable: true})\n disabled = false;\n\n /** If `true`, the user can select multiple values at once. */\n @Prop({reflect: true})\n multiple = false;\n\n /** If `true`, selected items are shown in chips mode. */\n @Prop({reflect: true})\n chips = false;\n\n /** The name of the control, which is submitted with the form data. */\n @Prop()\n name?: string;\n\n /** Function used to compare options, default : deep comparison. */\n @Prop()\n compareWith?: (optionValue: any, selectedValue: any) => boolean = (optionValue, selectedValue) => _.isEqual(optionValue, selectedValue);\n\n private popper: Instance;\n\n @State() private overlayDirection: 'bottom' | 'top' = 'bottom';\n\n /** Emitted when the value has changed. */\n @Event() wcsChange!: EventEmitter<SelectChangeEventDetail>;\n\n /** Emitted when the select has focus. */\n @Event() wcsFocus!: EventEmitter<void>;\n\n /** Emitted when the select loses focus. */\n @Event() wcsBlur!: EventEmitter<void>;\n\n /** Open the component. */\n @Method()\n async open() {\n this.stateService.send('OPEN');\n }\n\n /** Close the component. */\n @Method()\n async close() {\n this.stateService.send('CLOSE');\n }\n\n @Watch('value')\n onValueChangeHandler(newValue: any) {\n this.updateSelectedValue(newValue);\n this.emitChange(this.value);\n }\n\n private updateSelectedValue(value: any) {\n // If no value is passed, the select is reset.\n if (!value) {\n this.reset();\n }\n if (this.multiple) {\n // If user don't give an array, we provide one\n if (!Array.isArray(value)) {\n value = [value];\n }\n this.values = [];\n\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n const isSelected = value ?\n value.findIndex(v => this.compareWith(opt.value, v)) !== -1\n : false;\n if (isSelected) {\n this.values.push({\n value: opt.value,\n displayText: opt.innerText,\n chipColor: opt.chipColor,\n chipBackgroundColor: opt.chipBackgroundColor\n });\n }\n opt.selected = isSelected;\n });\n // update select placeholder text\n this.displayText = this.values.length !== 0\n ? this.values.map(v => v.displayText).join(', ')\n : undefined;\n } else {\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n const isSelected = this.compareWith(opt.value, value);\n if (isSelected) {\n this.displayText = opt.innerText;\n }\n opt.selected = isSelected;\n });\n }\n }\n\n /**\n * Reset the select: unselects all options for multiple mode and displays the placeholder\n * @private\n */\n private reset() {\n this.values = [];\n this.displayText = undefined;\n this.options.forEach((opt: HTMLWcsSelectOptionElement) => {\n opt.selected = false;\n });\n }\n\n componentDidLoad() {\n this.optionsEl = this.el.shadowRoot.querySelector('.wcs-select-options');\n this.controlEl = this.el.shadowRoot.querySelector('.wcs-select-control');\n\n const stateMachine = Machine(\n SELECT_MACHINE_CONFIG,\n this.initMachineOptions()\n );\n // FIXME: type checking failed...\n // @ts-ignore\n this.stateService = interpret(stateMachine);\n\n if (this.multiple) {\n this.values = [];\n }\n\n this.addRippleEffect();\n this.stateService.start();\n if (this.optionsEl.querySelector('slot') === null) {\n this.replaceOptions_firefoxBefore63();\n this.listenDomUpdate_firefoxBefore63();\n }\n\n if (this.value !== undefined) {\n this.updateSelectedValue(this.value);\n }\n\n this.popper = this.createPopperInstance();\n\n // if the select is inside a wcs-form-field, we set an id to the wcs-label if present\n // the wcs-label element reference is kept to compute aria-label value during the rendering\n this.labelElement = findItemLabel(this.el);\n if (this.labelElement) {\n this.labelElement.id = this.selectId + \"-lbl\";\n }\n\n // TODO: is this still usefull for anything ?\n this.hasLoaded = true;\n }\n\n private createPopperInstance() {\n return createPopper(this.controlEl, this.optionsEl, {\n placement: \"bottom\",\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 4] // we want 4px between select control and select options\n }\n }\n ]\n });\n }\n\n private emitChange(newValue: any): void {\n this.wcsChange.emit({\n value: newValue\n });\n }\n\n private replaceOptions_firefoxBefore63() {\n Array.from(this.el.querySelectorAll('wcs-select-option'))\n .forEach(option => {\n if (option.parentNode === this.el) {\n this.el.removeChild(option);\n this.optionsEl.appendChild(option);\n }\n });\n }\n\n private listenDomUpdate_firefoxBefore63() {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n this.replaceOptions_firefoxBefore63();\n }\n }\n });\n observer.observe(this.el, {childList: true});\n }\n\n componentWillLoad(): Promise<void> | void {\n if (!isWcsSelectSize(this.size)) {\n console.error(`Invalid size value for wcs-select : \"${this.size}\". Must be one of \"${WcsSelectSizeValue.join(', ')}\"`);\n this.size = \"m\"; // Default fallback value\n }\n }\n\n componentWillUpdate() {\n if (this.multiple) {\n this.options\n .forEach((opt: HTMLWcsSelectOptionElement) => opt.multiple = true);\n }\n }\n\n private get options(): HTMLWcsSelectOptionElement[] {\n const opts = this.el?.querySelectorAll('wcs-select-option');\n if (opts && opts.length !== 0) {\n return opts as any as HTMLWcsSelectOptionElement[];\n }\n return [];\n }\n\n private get notDisabledOptions(): HTMLWcsSelectOptionElement[] {\n const opts = this.el?.querySelectorAll('wcs-select-option:not([disabled])');\n if (opts && opts.length !== 0) {\n return opts as any as HTMLWcsSelectOptionElement[];\n }\n return [];\n }\n\n private initMachineOptions(): Partial<MachineOptions<any, SelectEvent>> {\n return {\n actions: {\n open: () => {\n if (!this.disabled) {\n this.expanded = true;\n this.focused = false;\n if(this.notDisabledOptions.length > 0) {\n this.lastFocusedOptionElement = this.lastSelectedOptionElement ?? this.notDisabledOptions[0];\n requestAnimationFrame(() => {\n this.lastFocusedOptionElement?.focus();\n });\n }\n }\n },\n close: (_, event: SelectEvent) => {\n if (event.type === 'CLOSE') {\n if (event.value?.shouldBlur) {\n this.el.closest(\"wcs-select\")?.focus();\n this.focused = false;\n } else {\n this.el.focus();\n this.focused = true\n }\n }\n this.expanded = false;\n },\n selectOption: (_, event) => {\n if (event.type === 'OPTION_SELECTED') {\n this.handleClickEvent(event.value);\n }\n }\n },\n guards: {\n enabled: () => !this.disabled\n }\n };\n }\n\n private handleClickEvent(event: SelectOptionChosedEvent) {\n if (this.multiple) {\n this.handleClickOnMultiple(event);\n } else {\n this.handleNormalClick(event);\n }\n }\n\n private handleClickOnMultiple(event: SelectOptionChosedEvent) {\n const index = this.values.findIndex(v => v.value === event.value);\n if (index === -1) {\n const {value, displayText, chipColor, chipBackgroundColor} = event;\n this.values.push({value, displayText, chipColor, chipBackgroundColor});\n event.source.selected = true;\n this.lastSelectedOptionElement = event.source;\n } else {\n event.source.selected = false;\n this.values.splice(index, 1);\n if (this.lastSelectedOptionElement === event.source) this.lastSelectedOptionElement = null;\n }\n this.updateValueWithValues();\n }\n\n private updateValueWithValues() {\n this.value = this.values.map(v => v.value);\n this.displayText = this.values.length !== 0\n ? this.values.map(v => v.displayText).join(', ')\n : undefined;\n }\n\n private handleNormalClick(event: SelectOptionChosedEvent) {\n // Reset other options to false if they were selected.\n this.options\n .forEach(option => {\n if (option.selected) option.selected = false;\n });\n\n event.source.selected = true;\n this.value = event.value;\n this.displayText = event.displayText;\n this.lastSelectedOptionElement = event.source;\n this.stateService.send('CLOSE');\n }\n\n disconnectedCallback() {\n this.stateService?.stop();\n }\n\n private addRippleEffect() {\n // TODO: wrap MDCRipple dependency so we can eventually write our own or at least decouple a bit.\n const ripple = new MDCRipple(this.controlEl);\n ripple.unbounded = false;\n }\n\n private get hasValue(): boolean {\n // TODO: change this behavior.\n return this.displayText !== undefined;\n }\n\n @Listen('mousedown')\n onMouseDown(event: MouseEvent) {\n const clickOnScroll = isElement(event.target)\n && (event.offsetX > event.target.clientWidth\n || event.offsetY > event.target.clientHeight // If the click il located bellow the component height the click happen in the overlay\n || event.offsetY < 0); // If the click is made above the component\n\n const clickOnRemoveChip = event.composedPath()\n .filter(x => {\n const el = (x as HTMLElement);\n return el.nodeName === 'svg' && el.classList.contains('chip');\n })\n .length > 0;\n\n if (!clickOnScroll && !clickOnRemoveChip) {\n this.stateService.send('CLICK');\n }\n }\n\n @Listen('click', {target: 'window'})\n onWindowClickEvent(event: MouseEvent) {\n const firstSelectInEventPath = event.composedPath().filter(x => (x as HTMLElement).nodeName === 'WCS-SELECT')[0];\n const clickOnCurrentSelect = firstSelectInEventPath === this.el;\n // TODO: Move this logic in the state machine\n // FIXME: Doesnt work with single + disabled option\n if (this.expanded && !clickOnCurrentSelect) {\n this.stateService.send('CLOSE');\n }\n }\n\n @Listen('keydown')\n onKeyDown(_event: KeyboardEvent) {\n // close\n if (this.stateService.getSnapshot().matches(\"closed\")) {\n if (isEnterKey(_event) || (_event.altKey && isDownArrowKey(_event)) || isSpaceKey(_event)) {\n _event.preventDefault();\n _event.stopPropagation();\n this.stateService.send('OPEN');\n return;\n }\n if (this.multiple) {\n if (isDownArrowKey(_event)) {\n this.stateService.send('OPEN');\n }\n } else {\n if (isDownArrowKey(_event) || isRightArrowKey(_event)) {\n _event.preventDefault();\n this.selectClosestOption(\"next\");\n }\n if (isUpArrowKey(_event) || isLeftArrowKey(_event)) {\n _event.preventDefault();\n this.selectClosestOption(\"previous\");\n } else if (isPageDownKey(_event)) {\n _event.preventDefault();\n this.selectLastOption();\n } else if (isPageUpKey(_event) || isHomeKey(_event)) {\n _event.preventDefault();\n this.selectFirstOption();\n }\n }\n }\n // open\n else if (this.stateService.getSnapshot().matches(\"opened\")) {\n if (isEscapeKey(_event) || (_event.altKey && isUpArrowKey(_event))) {\n this.stateService.send({type: \"CLOSE\", value: {shouldBlur: false}});\n } else if (isTabKey(_event) || (_event.shiftKey && isTabKey(_event))) {\n this.stateService.send({type: \"CLOSE\", value: {shouldBlur: true}});\n } else if (isDownArrowKey(_event)) {\n _event.preventDefault();\n this.focusClosestOption(\"next\");\n } else if (isUpArrowKey(_event)) {\n _event.preventDefault();\n this.focusClosestOption(\"previous\");\n } else if (isPageUpKey(_event) || isHomeKey(_event)) {\n _event.preventDefault();\n this.focusFirstOption();\n } else if (isPageDownKey(_event)) {\n _event.preventDefault();\n this.focusLastOption();\n }\n }\n }\n\n private getClosestActiveOptionIndexForState(direction: 'next' | 'previous', state: 'focused' | 'selected'): number | 'nothing' {\n let currentIndex = Array.from(this.notDisabledOptions).indexOf(state === 'focused' ? this.lastFocusedOptionElement : this.lastSelectedOptionElement);\n\n if (direction === 'next' && currentIndex < this.notDisabledOptions.length - 1) {\n currentIndex++;\n } else if (direction === 'previous' && currentIndex > 0) {\n currentIndex--;\n } else {\n return 'nothing';\n }\n return currentIndex;\n }\n\n private selectOption(indexToSelect: number) {\n this.lastSelectedOptionElement = this.notDisabledOptions[indexToSelect];\n this.lastSelectedOptionElement.selected = true;\n this.sendOptionSelectedToStateMachine({\n source: this.lastSelectedOptionElement,\n value: this.value,\n displayText: this.lastSelectedOptionElement.innerText\n });\n }\n\n private selectClosestOption(direction: 'next' | 'previous'): void {\n const indexToSelect = this.getClosestActiveOptionIndexForState(direction, 'selected');\n if(indexToSelect === 'nothing') return;\n this.selectOption(indexToSelect);\n }\n\n private selectFirstOption() {\n if(this.notDisabledOptions.length < 1) {\n return;\n }\n\n this.selectOption(0);\n }\n\n private selectLastOption() {\n if(this.notDisabledOptions.length < 1) {\n return;\n }\n\n this.selectOption(this.notDisabledOptions.length - 1);\n }\n\n private focusOption(indexToFocus: number) {\n this.lastFocusedOptionElement = this.notDisabledOptions[indexToFocus];\n this.lastFocusedOptionElement?.focus();\n this.el.setAttribute(\"aria-activedescendant\", this.lastFocusedOptionElement.id);\n }\n\n private focusClosestOption(direction: 'next' | 'previous'): void {\n const indexToFocus = this.getClosestActiveOptionIndexForState(direction, 'focused');\n if(indexToFocus === 'nothing') return;\n\n this.focusOption(indexToFocus);\n }\n\n private focusFirstOption() {\n this.focusOption(0);\n }\n\n private focusLastOption() {\n this.focusOption(this.notDisabledOptions.length - 1);\n }\n\n @Listen('wcsSelectOptionClick')\n selectedOptionChanged(event: CustomEvent<SelectOptionChosedEvent>) {\n this.sendOptionSelectedToStateMachine(event.detail);\n }\n\n sendOptionSelectedToStateMachine(event: SelectOptionChosedEvent) {\n this.stateService.send({type: 'OPTION_SELECTED', value: event});\n }\n\n onSlotchange() {\n this.updateSelectedValue(this.value);\n }\n\n removeChip(v: SelectOptionValue) {\n this.options\n .forEach(opt => {\n if (opt.value === v.value) {\n this.sendOptionSelectedToStateMachine({\n ...v,\n source: opt\n });\n }\n });\n }\n\n componentDidRender() {\n this.popper?.update();\n }\n\n render() {\n const ariaLabelValue = `${this.labelElement ? this.labelElement.innerText : ''} ${this.hasValue ? this.displayText : ''}`.trimEnd();\n return (\n <Host class={this.expanded ? 'expanded ' : ''}\n overlayDirection={this.overlayDirection} {...this.focusedAttributes()}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-disabled={this.disabled ? 'true' : null}\n aria-expanded={this.expanded ? 'true' : 'false'}\n aria-controls={this.optionsId}\n aria-owns={this.optionsId}\n aria-multiselectable={this.multiple ? 'true' : 'false'}\n aria-label={ariaLabelValue}>\n <div class=\"wcs-select-control\">\n <div class=\"wcs-select-value-container\">\n {this.hasValue\n ?\n (this.chips ?\n this.values.map((option: SelectOptionValue) =>\n <SelectChips disabled={this.disabled} option={option}\n onRemove={this.removeChip.bind(this)}/>\n )\n : <label class=\"wcs-select-value\">{this.displayText}</label>)\n : <label class=\"wcs-select-placeholder\">{this.placeholder}</label>\n }\n </div>\n <SelectArrow up={this.expanded}/>\n </div>\n <div class=\"wcs-select-options\" id={this.optionsId} role=\"listbox\">\n <slot name=\"wcs-select-option\" onSlotchange={this.onSlotchange.bind(this)}/>\n </div>\n </Host>\n );\n }\n\n private focusedAttributes() {\n return !this.disabled ? {tabIndex: 0} : {};\n }\n}\n\nlet selectIds = 0;\n"]}
@@ -276,6 +276,9 @@ wcs-select-option:hover {
276
276
  color: var(--wcs-primary);
277
277
  background-color: var(--wcs-light);
278
278
  }
279
+ wcs-select-option:focus {
280
+ outline: none;
281
+ }
279
282
 
280
283
  wcs-select-option[disabled] {
281
284
  cursor: not-allowed;
@@ -1,10 +1,12 @@
1
1
  import { h, Host } from '@stencil/core';
2
2
  import { MDCRipple } from '@material/ripple';
3
+ import { isEnterKey, generateUniqueId, isSpaceKey } from "../../utils/helpers";
3
4
  /**
4
5
  * Select option component, use in conjunction with wcs-select.
5
6
  */
6
7
  export class SelectOption {
7
8
  constructor() {
9
+ this.selectOptionId = generateUniqueId(this.el.tagName);
8
10
  this.disabled = false;
9
11
  this.selected = false;
10
12
  this.value = undefined;
@@ -21,7 +23,7 @@ export class SelectOption {
21
23
  componentDidLoad() {
22
24
  this.mdcRipple = new MDCRipple(this.el);
23
25
  }
24
- onMouseDown(event) {
26
+ chooseOption(event) {
25
27
  if (!this.disabled) {
26
28
  event.stopPropagation();
27
29
  // We select inner HTML as it's what's passed into the slot.
@@ -33,9 +35,23 @@ export class SelectOption {
33
35
  });
34
36
  }
35
37
  }
38
+ onMouseDown(event) {
39
+ this.chooseOption(event);
40
+ }
41
+ /**
42
+ * Handles the keydown event to update the selection.
43
+ * @param event keyboard event
44
+ */
45
+ handleKeydown(event) {
46
+ if (isEnterKey(event) || isSpaceKey(event)) {
47
+ this.chooseOption(event);
48
+ event.preventDefault();
49
+ event.stopPropagation();
50
+ }
51
+ }
36
52
  render() {
37
- return (h(Host, { slot: "wcs-select-option" }, this.multiple &&
38
- h("wcs-checkbox", { checked: this.selected }), h("slot", null)));
53
+ return (h(Host, { id: this.selectOptionId, "aria-selected": this.selected ? 'true' : 'false', slot: "wcs-select-option", role: "option", tabindex: "-1" }, this.multiple &&
54
+ h("wcs-checkbox", { tabindex: "-1", checked: this.selected }), h("slot", null)));
39
55
  }
40
56
  static get is() { return "wcs-select-option"; }
41
57
  static get originalStyleUrls() {
@@ -194,6 +210,12 @@ export class SelectOption {
194
210
  "target": undefined,
195
211
  "capture": false,
196
212
  "passive": true
213
+ }, {
214
+ "name": "keydown",
215
+ "method": "handleKeydown",
216
+ "target": undefined,
217
+ "capture": false,
218
+ "passive": false
197
219
  }];
198
220
  }
199
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select-option.js","sourceRoot":"","sources":["../../../src/components/select-option/select-option.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAoC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AAKH,MAAM,OAAO,YAAY;;oBAI8B,KAAK;oBAGL,KAAK;;;;oBAiBL,KAAK;;EAUxD,iBAAiB;IACb,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;MAC1B,yDAAyD;MACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;KACxC;EACL,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC5C,CAAC;EAGD,WAAW,CAAC,KAAiB;IACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;MAChB,KAAK,CAAC,eAAe,EAAE,CAAC;MACxB,4DAA4D;MAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;MACtC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW;OACd,CAAC,CAAC;KACN;EACL,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,IAAI,EAAC,mBAAmB;MACzB,IAAI,CAAC,QAAQ;QACV,oBAAc,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAiB;MAEzD,eAAQ,CACL,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Element, Event, Prop, EventEmitter, ComponentInterface, h, Host, Listen } from '@stencil/core';\nimport { SelectOptionChosedEvent } from './select-option-interface';\nimport { MDCRipple } from '@material/ripple';\n\n/**\n * Select option component, use in conjunction with wcs-select.\n */\n@Component({\n tag: 'wcs-select-option',\n styleUrl: 'select-option.scss'\n})\nexport class SelectOption implements ComponentInterface {\n @Element() el!: HTMLWcsSelectOptionElement;\n\n /** Wether this option can be selected. */\n @Prop({ mutable: true, reflect: true }) disabled = false;\n\n /** Wether this option is selected. */\n @Prop({ mutable: true, reflect: true }) selected = false;\n\n /** The option value, not what's displayed, use inner text instead. */\n @Prop() value?: any;\n\n /** Chip's displayed text color. */\n @Prop() chipColor?: string;\n\n /** Chip's background color. */\n @Prop() chipBackgroundColor?: string;\n\n /**\n * This property musn't be set by hand, it is used by the `wcs-select` component.\n * If you want a multiple select, set `multiple` attribute on the parent select instead.\n * @internal\n * @ignore\n */\n @Prop({ reflect: true, mutable: true }) multiple = false;\n\n mdcRipple: MDCRipple;\n\n @Event({\n eventName: 'wcsSelectOptionClick',\n })\n // TODO: find a better name ?\n wcsSelectOptionClick: EventEmitter<SelectOptionChosedEvent>;\n\n componentWillLoad() {\n if (this.value === undefined) {\n // If no value was given we use the text content instead.\n this.value = this.el.innerText || '';\n }\n }\n\n componentDidLoad() {\n this.mdcRipple = new MDCRipple(this.el);\n }\n\n @Listen('mousedown')\n onMouseDown(event: MouseEvent) {\n if (!this.disabled) {\n event.stopPropagation();\n // We select inner HTML as it's what's passed into the slot.\n const displayText = this.el.innerText;\n this.wcsSelectOptionClick.emit({\n source: this.el,\n value: this.value,\n displayText\n });\n }\n }\n\n render() {\n return (\n <Host slot=\"wcs-select-option\">\n {this.multiple &&\n <wcs-checkbox checked={this.selected}></wcs-checkbox>\n }\n <slot />\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"select-option.js","sourceRoot":"","sources":["../../../src/components/select-option/select-option.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAoC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAE7E;;GAEG;AAKH,MAAM,OAAO,YAAY;;IAEb,mBAAc,GAAW,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;oBAGhB,KAAK;oBAGL,KAAK;;;;oBAiBL,KAAK;;EAWxD,iBAAiB;IACb,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;MAC1B,yDAAyD;MACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;KACxC;EACL,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC5C,CAAC;EAEO,YAAY,CAAC,KAAc;IAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;MAChB,KAAK,CAAC,eAAe,EAAE,CAAC;MACxB,4DAA4D;MAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;MACtC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW;OACd,CAAC,CAAC;KACN;EACL,CAAC;EAGD,WAAW,CAAC,KAAiB;IACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;EAC7B,CAAC;EAED;;;KAGG;EAEH,aAAa,CAAC,KAAoB;IAC9B,IAAG,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;MACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;MACzB,KAAK,CAAC,cAAc,EAAE,CAAC;MACvB,KAAK,CAAC,eAAe,EAAE,CAAC;KAC3B;EACL,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,EAAE,EAAE,IAAI,CAAC,cAAc,mBAAiB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAC,mBAAmB,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAC,IAAI;MAC/H,IAAI,CAAC,QAAQ;QACV,oBAAc,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAiB;MAEvE,eAAQ,CACL,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Element, Event, Prop, EventEmitter, ComponentInterface, h, Host, Listen } from '@stencil/core';\nimport { SelectOptionChosedEvent } from './select-option-interface';\nimport { MDCRipple } from '@material/ripple';\nimport {isEnterKey, generateUniqueId, isSpaceKey} from \"../../utils/helpers\";\n\n/**\n * Select option component, use in conjunction with wcs-select.\n */\n@Component({\n tag: 'wcs-select-option',\n styleUrl: 'select-option.scss'\n})\nexport class SelectOption implements ComponentInterface {\n @Element() private el!: HTMLWcsSelectOptionElement;\n private selectOptionId: string = generateUniqueId(this.el.tagName);\n\n /** Wether this option can be selected. */\n @Prop({ mutable: true, reflect: true }) disabled = false;\n\n /** Wether this option is selected. */\n @Prop({ mutable: true, reflect: true }) selected = false;\n\n /** The option value, not what's displayed, use inner text instead. */\n @Prop() value?: any;\n\n /** Chip's displayed text color. */\n @Prop() chipColor?: string;\n\n /** Chip's background color. */\n @Prop() chipBackgroundColor?: string;\n\n /**\n * This property musn't be set by hand, it is used by the `wcs-select` component.\n * If you want a multiple select, set `multiple` attribute on the parent select instead.\n * @internal\n * @ignore\n */\n @Prop({ reflect: true, mutable: true }) multiple = false;\n\n // @ts-ignore\n private mdcRipple: MDCRipple;\n\n @Event({\n eventName: 'wcsSelectOptionClick',\n })\n // TODO: find a better name ?\n wcsSelectOptionClick: EventEmitter<SelectOptionChosedEvent>;\n\n componentWillLoad() {\n if (this.value === undefined) {\n // If no value was given we use the text content instead.\n this.value = this.el.innerText || '';\n }\n }\n\n componentDidLoad() {\n this.mdcRipple = new MDCRipple(this.el);\n }\n\n private chooseOption(event: UIEvent) {\n if (!this.disabled) {\n event.stopPropagation();\n // We select inner HTML as it's what's passed into the slot.\n const displayText = this.el.innerText;\n this.wcsSelectOptionClick.emit({\n source: this.el,\n value: this.value,\n displayText\n });\n }\n }\n\n @Listen('mousedown')\n onMouseDown(event: MouseEvent) {\n this.chooseOption(event);\n }\n\n /**\n * Handles the keydown event to update the selection.\n * @param event keyboard event\n */\n @Listen('keydown')\n handleKeydown(event: KeyboardEvent) {\n if(isEnterKey(event) || isSpaceKey(event)) {\n this.chooseOption(event);\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n render() {\n return (\n <Host id={this.selectOptionId} aria-selected={this.selected ? 'true' : 'false'} slot=\"wcs-select-option\" role=\"option\" tabindex=\"-1\">\n {this.multiple &&\n <wcs-checkbox tabindex=\"-1\" checked={this.selected}></wcs-checkbox>\n }\n <slot />\n </Host>\n );\n }\n}\n"]}
@@ -132,7 +132,6 @@ export class Switch {
132
132
  }
133
133
  }];
134
134
  }
135
- static get elementRef() { return "el"; }
136
135
  }
137
136
  let switchIds = 0;
138
137
  //# sourceMappingURL=switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/components/switch/switch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,OAAO,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAQ3G,MAAM,OAAO,MAAM;;IACP,aAAQ,GAAG,cAAc,SAAS,EAAE,EAAE,CAAC;gBAIhC,IAAI,CAAC,QAAQ;mBAKK,KAAK;0BAUwB,QAAQ;oBAK1C,KAAK;;EAEjC,YAAY,CAAC,MAAa;IACtB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;MAChB,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC,CAAC;EACP,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI;MACD,aAAO,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAC,eAAe,mBAAgB,IAAI,CAAC,QAAQ;QACzE,aAAO,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAC,YAAY,EAClB,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,EAAE,EAAE,IAAI,CAAC,IAAI,GACZ;QACR,YAAM,KAAK,EAAC,eAAe,GAAQ;QACnC,YAAM,KAAK,EAAC,MAAM;UACd,eAAO,CACJ,CACH,CACL,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ;AAED,IAAI,SAAS,GAAG,CAAC,CAAC","sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { SwitchChangeEventDetail, SwitchLabelAlignment } from './switch-interface';\n\n@Component({\n tag: 'wcs-switch',\n styleUrl: 'switch.scss',\n shadow: true\n})\nexport class Switch implements ComponentInterface {\n private switchId = `wcs-switch-${switchIds++}`;\n\n @Element() el: HTMLElement;\n\n @Prop() name = this.switchId;\n\n /**\n * If `true`, the switch is selected.\n */\n @Prop({reflect: true}) checked = false;\n\n /**\n * Emitted when the checked property has changed.\n */\n @Event() wcsChange!: EventEmitter<SwitchChangeEventDetail>;\n\n /**\n * Specifie the alignment of the switch with the label content\n */\n @Prop({reflect: true}) labelAlignment: SwitchLabelAlignment = 'center';\n\n /**\n * Specify wether the switch is disabled or not.\n */\n @Prop() disabled: boolean = false;\n\n toggleChange(_event: Event) {\n this.checked = !this.checked;\n this.wcsChange.emit({\n checked: this.checked\n });\n }\n\n render() {\n return (\n <Host>\n <label htmlFor={this.name} class=\"wcs-container\" aria-disabled={this.disabled}>\n <input onChange={(evt) => this.toggleChange(evt)}\n checked={this.checked}\n class=\"wcs-switch\"\n type=\"checkbox\"\n name={this.name}\n disabled={this.disabled}\n id={this.name}>\n </input>\n <span class=\"wcs-checkmark\"></span>\n <span class=\"text\">\n <slot/>\n </span>\n </label>\n </Host>\n );\n }\n}\n\nlet switchIds = 0;\n"]}
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/components/switch/switch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAQlG,MAAM,OAAO,MAAM;;IACP,aAAQ,GAAG,cAAc,SAAS,EAAE,EAAE,CAAC;gBAEhC,IAAI,CAAC,QAAQ;mBAKK,KAAK;0BAUwB,QAAQ;oBAK1C,KAAK;;EAEjC,YAAY,CAAC,MAAa;IACtB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;MAChB,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC,CAAC;EACP,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI;MACD,aAAO,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAC,eAAe,mBAAgB,IAAI,CAAC,QAAQ;QACzE,aAAO,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAC,YAAY,EAClB,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,EAAE,EAAE,IAAI,CAAC,IAAI,GACZ;QACR,YAAM,KAAK,EAAC,eAAe,GAAQ;QACnC,YAAM,KAAK,EAAC,MAAM;UACd,eAAO,CACJ,CACH,CACL,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ;AAED,IAAI,SAAS,GAAG,CAAC,CAAC","sourcesContent":["import { Component, ComponentInterface, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { SwitchChangeEventDetail, SwitchLabelAlignment } from './switch-interface';\n\n@Component({\n tag: 'wcs-switch',\n styleUrl: 'switch.scss',\n shadow: true\n})\nexport class Switch implements ComponentInterface {\n private switchId = `wcs-switch-${switchIds++}`;\n\n @Prop() name = this.switchId;\n\n /**\n * If `true`, the switch is selected.\n */\n @Prop({reflect: true}) checked = false;\n\n /**\n * Emitted when the checked property has changed.\n */\n @Event() wcsChange!: EventEmitter<SwitchChangeEventDetail>;\n\n /**\n * Specifie the alignment of the switch with the label content\n */\n @Prop({reflect: true}) labelAlignment: SwitchLabelAlignment = 'center';\n\n /**\n * Specify wether the switch is disabled or not.\n */\n @Prop() disabled: boolean = false;\n\n toggleChange(_event: Event) {\n this.checked = !this.checked;\n this.wcsChange.emit({\n checked: this.checked\n });\n }\n\n render() {\n return (\n <Host>\n <label htmlFor={this.name} class=\"wcs-container\" aria-disabled={this.disabled}>\n <input onChange={(evt) => this.toggleChange(evt)}\n checked={this.checked}\n class=\"wcs-switch\"\n type=\"checkbox\"\n name={this.name}\n disabled={this.disabled}\n id={this.name}>\n </input>\n <span class=\"wcs-checkmark\"></span>\n <span class=\"text\">\n <slot/>\n </span>\n </label>\n </Host>\n );\n }\n}\n\nlet switchIds = 0;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../src/components/tab/tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAE9E;;;GAGG;AAKH,MAAM,OAAO,GAAG;;;;;EAkBZ,gBAAgB;IACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;EAC1B,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,IAAI,EAAC,SAAS;MAChB,eAAa,CACV,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Prop, h, Host, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Tab content component.\n * Use this component to specify the content of a component.\n */\n@Component({\n tag: 'wcs-tab',\n shadow: true,\n})\nexport class Tab {\n /**\n * The header you want to be displayed for this tab.\n */\n @Prop({ reflect: true })\n header: string;\n\n @Prop() itemKey: any;\n\n // TODO: See if there is a solution that doesn't pollute the API.\n /**\n * Do not use, meant for internal use only.\n * @inner\n * @ignore\n */\n @Event()\n tabLoaded!: EventEmitter<void>;\n\n componentDidLoad() {\n this.tabLoaded.emit();\n }\n\n render() {\n return (\n <Host slot=\"wcs-tab\">\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../src/components/tab/tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAE9E;;;GAGG;AAKH,MAAM,OAAO,GAAG;;;;;EAiBZ,gBAAgB;IACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;EAC1B,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,IAAI,EAAC,SAAS;MAChB,eAAa,CACV,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Prop, h, Host, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Tab content component.\n * Use this component to specify the content of a component.\n */\n@Component({\n tag: 'wcs-tab',\n shadow: true,\n})\nexport class Tab {\n /**\n * The header you want to be displayed for this tab.\n */\n @Prop({ reflect: true }) header: string;\n\n @Prop() itemKey: any;\n\n // TODO: See if there is a solution that doesn't pollute the API.\n /**\n * Do not use, meant for internal use only.\n * @inner\n * @ignore\n */\n @Event()\n tabLoaded!: EventEmitter<void>;\n\n componentDidLoad() {\n this.tabLoaded.emit();\n }\n\n render() {\n return (\n <Host slot=\"wcs-tab\">\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Element,\n State,\n ComponentInterface,\n Event,\n EventEmitter,\n Watch,\n h,\n Host,\n Listen\n} from '@stencil/core';\n\nimport { WcsTabsAlignment, WcsTabChangeEvent } from './tabs-interface';\n\n/**\n * Tabs component to switch between tab content.\n * Use in conjuction with `wcs-tab`.\n *\n * @example\n * ```html\n * <wcs-tabs>\n * <wcs-tab header=\"One\">The content !</wcs-tab>\n * <wcs-tab header=\"Two\">More content !</wcs-tab>\n * </wcs-tabs>\n * ```\n */\n@Component({\n tag: 'wcs-tabs',\n styleUrl: 'tabs.scss',\n shadow: true,\n})\nexport class Tabs implements ComponentInterface {\n /**\n * Tab headers alignment.\n */\n @Prop({reflect: true}) align: WcsTabsAlignment = 'start';\n\n /**\n * Current selected tab index.\n * Starts at 0.\n */\n @Prop() selectedIndex: number = 0;\n\n @Prop() selectedKey: any;\n\n /**\n * Whether to skip rendering the tabpanel with the content of the selected tab. Use this prop if you plan to\n * separately render the tab content.\n */\n @Prop() headersOnly: boolean = false;\n /** Determines if tabs header should have a border at the bottom */\n @Prop() gutter: boolean;\n\n /**\n *\n * Emitted when the selected tab change.\n */\n @Event() tabChange!: EventEmitter<WcsTabChangeEvent>;\n\n @Element() el!: HTMLWcsTabsElement;\n\n @State() headers: string[] = [];\n\n @State() currentActiveTabIndex = 0;\n\n @Watch('selectedIndex')\n selectedIndexChanged(newValue: number) {\n this.currentActiveTabIndex = newValue;\n }\n\n @Watch('selectedKey')\n selectedTabkeyChanged(newValue: any) {\n this.updateCurrentActiveIndexByTabKey(newValue);\n }\n\n private emitActiveTabChange() {\n this.tabChange.emit({\n tabName: this.headers[this.currentActiveTabIndex],\n tabIndex: this.currentActiveTabIndex,\n selectedKey: this.tabs[this.currentActiveTabIndex].itemKey\n });\n }\n\n private updateCurrentActiveIndexByTabKey(newValue: any) {\n for (let i = 0; i < this.tabs.length; i++) {\n const tab = this.tabs[i];\n if (tab.itemKey === newValue) {\n this.currentActiveTabIndex = i;\n }\n }\n }\n\n @Listen('tabLoaded')\n onTabLoaded() {\n this.refreshHeaders();\n }\n\n componentDidLoad() {\n this.putTabsInCorrectDivIfTheyAreNot();\n this.refreshHeaders();\n if (this.selectedIndex) {\n this.currentActiveTabIndex = this.selectedIndex;\n }\n if (this.selectedKey) {\n this.updateCurrentActiveIndexByTabKey(this.selectedKey);\n }\n }\n\n // XXX: Firefox < 63\n private putTabsInCorrectDivIfTheyAreNot() {\n const tabDiv = this.el.shadowRoot.querySelector('.wcs-tabs');\n if (tabDiv.querySelector('slot') === null) {\n Array.from(this.el.querySelectorAll('wcs-tab'))\n .filter(node => node.parentNode !== tabDiv)\n .forEach(tab => {\n if (tab.parentElement.isEqualNode(this.el)) {\n this.el.removeChild(tab);\n tabDiv.appendChild(tab);\n }\n });\n }\n }\n\n handleKeyDown(ev: KeyboardEvent, tabIndex: number) {\n const target = ev.target as HTMLDivElement;\n switch (ev.key) {\n case ' ':\n case 'Enter': {\n this.currentActiveTabIndex = tabIndex;\n this.emitActiveTabChange();\n ev.preventDefault();\n break;\n }\n case 'ArrowLeft': {\n if (target.previousElementSibling?.classList.contains('wcs-tab-header')) {\n (target.previousElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n case 'ArrowRight': {\n if (target.nextElementSibling?.classList.contains('wcs-tab-header')) {\n (target.nextElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n }\n }\n\n private refreshHeaders() {\n this.headers = [];\n this.tabs\n .forEach(x => {\n this.headers.push(x.getAttribute('header'));\n });\n }\n\n private get tabs() {\n const tabsEl = this.el.shadowRoot.querySelector('.wcs-tabs');\n // FIXME: problem with this selector being too greedy in ff < 63\n const tabs = this.el.shadowRoot.querySelectorAll('.wcs-tabs > wcs-tab');\n\n return tabs.length !== 0\n ? tabs\n : tabsEl?.querySelector('slot')\n ? tabsEl?.querySelector('slot')?.assignedElements() as unknown as NodeListOf<HTMLWcsTabElement>\n : [];\n }\n\n private selectTabAndEmitChangeEvent(index: number) {\n this.currentActiveTabIndex = index;\n this.emitActiveTabChange()\n }\n\n componentWillUpdate() {\n if (!this.headersOnly) {\n this.updateTabVisibility();\n } else {\n this.hideAllTabsContent();\n }\n }\n\n private updateTabVisibility() {\n this.tabs.forEach((el: HTMLWcsTabElement, idx: number) => {\n if (idx !== this.currentActiveTabIndex) {\n el.setAttribute('style', 'display: none;');\n } else {\n el.setAttribute('style', 'display: block;');\n }\n });\n }\n\n private hideAllTabsContent() {\n this.tabs.forEach((el: HTMLWcsTabElement) => el.setAttribute('style', 'display: none;'));\n }\n\n render() {\n return (\n <Host>\n <div class=\"wcs-tabs-headers\">\n {this.headers.map((header, idx) =>\n <div class={'wcs-tab-header ' + (this.currentActiveTabIndex === idx ? 'active' : '')}\n onClick={() => this.selectTabAndEmitChangeEvent(idx)}\n onKeyDown={evt => this.handleKeyDown(evt, idx)}\n tabIndex={this.currentActiveTabIndex === idx ? 0 : -1}\n >\n <span>{header}</span>\n </div>\n )}\n </div>\n <div class=\"wcs-tabs\">\n <slot name=\"wcs-tab\"/>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,IAAI,EACJ,OAAO,EACP,KAAK,EAEL,KAAK,EAEL,KAAK,EACL,CAAC,EACD,IAAI,EACJ,MAAM,EACT,MAAM,eAAe,CAAC;AAIvB;;;;;;;;;;;GAWG;AAMH,MAAM,OAAO,IAAI;;iBAIoC,OAAO;yBAMxB,CAAC;;uBAQF,KAAK;;mBAYC,EAAE;iCAEE,CAAC;;EAG1C,oBAAoB,CAAC,QAAgB;IACjC,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;EAC1C,CAAC;EAGD,qBAAqB,CAAC,QAAa;IAC/B,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC;EACpD,CAAC;EAEO,mBAAmB;IACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;MAChB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;MACjD,QAAQ,EAAE,IAAI,CAAC,qBAAqB;MACpC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO;KAC7D,CAAC,CAAC;EACP,CAAC;EAEO,gCAAgC,CAAC,QAAa;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;MACzB,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC1B,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;OAClC;KACJ;EACL,CAAC;EAGD,WAAW;IACP,IAAI,CAAC,cAAc,EAAE,CAAC;EAC1B,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,+BAA+B,EAAE,CAAC;IACvC,IAAI,CAAC,cAAc,EAAE,CAAC;IACtB,IAAI,IAAI,CAAC,aAAa,EAAE;MACpB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;KACnD;IACD,IAAI,IAAI,CAAC,WAAW,EAAE;MAClB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC3D;EACL,CAAC;EAED,oBAAoB;EACZ,+BAA+B;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;MACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;SAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;SAC1C,OAAO,CAAC,GAAG,CAAC,EAAE;QACX,IAAI,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;UACxC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;UACzB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAC3B;MACL,CAAC,CAAC,CAAC;KACV;EACL,CAAC;EAED,aAAa,CAAC,EAAiB,EAAE,QAAgB;;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAwB,CAAC;IAC3C,QAAQ,EAAE,CAAC,GAAG,EAAE;MACZ,KAAK,GAAG,CAAC;MACT,KAAK,OAAO,CAAC,CAAC;QACV,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,EAAE,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM;OACT;MACD,KAAK,WAAW,CAAC,CAAC;QACd,IAAI,MAAA,MAAM,CAAC,sBAAsB,0CAAE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;UACpE,MAAM,CAAC,sBAAyC,CAAC,KAAK,EAAE,CAAC;UAC1D,EAAE,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,MAAM;OACT;MACD,KAAK,YAAY,CAAC,CAAC;QACf,IAAI,MAAA,MAAM,CAAC,kBAAkB,0CAAE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;UAChE,MAAM,CAAC,kBAAqC,CAAC,KAAK,EAAE,CAAC;UACtD,EAAE,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,MAAM;OACT;KACJ;EACL,CAAC;EAEO,cAAc;IAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,IAAI;OACJ,OAAO,CAAC,CAAC,CAAC,EAAE;MACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;EACX,CAAC;EAED,IAAY,IAAI;;IACZ,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7D,gEAAgE;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAExE,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;MACpB,CAAC,CAAC,IAAI;MACN,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,MAAM,CAAC,0CAAE,gBAAgB,EAA8C;QAC/F,CAAC,CAAC,EAAE,CAAC;EACjB,CAAC;EAEO,2BAA2B,CAAC,KAAa;IAC7C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,mBAAmB,EAAE,CAAA;EAC9B,CAAC;EAED,mBAAmB;IACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;MACnB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;SAAM;MACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;EACL,CAAC;EAEO,mBAAmB;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAqB,EAAE,GAAW,EAAE,EAAE;MACrD,IAAI,GAAG,KAAK,IAAI,CAAC,qBAAqB,EAAE;QACpC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;OAC9C;WAAM;QACH,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;OAC/C;IACL,CAAC,CAAC,CAAC;EACP,CAAC;EAEO,kBAAkB;IACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;EAC7F,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI;MACD,WAAK,KAAK,EAAC,kBAAkB,IACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAC9B,WAAK,KAAK,EAAE,iBAAiB,GAAG,CAAC,IAAI,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAC/E,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,EACpD,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,QAAQ,EAAE,IAAI,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,gBAAO,MAAM,CAAQ,CACnB,CACT,CACC;MACN,WAAK,KAAK,EAAC,UAAU;QACjB,YAAM,IAAI,EAAC,SAAS,GAAE,CACpB,CACH,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import {\n Component,\n Prop,\n Element,\n State,\n ComponentInterface,\n Event,\n EventEmitter,\n Watch,\n h,\n Host,\n Listen\n} from '@stencil/core';\n\nimport { WcsTabsAlignment, WcsTabChangeEvent } from './tabs-interface';\n\n/**\n * Tabs component to switch between tab content.\n * Use in conjuction with `wcs-tab`.\n *\n * @example\n * ```html\n * <wcs-tabs>\n * <wcs-tab header=\"One\">The content !</wcs-tab>\n * <wcs-tab header=\"Two\">More content !</wcs-tab>\n * </wcs-tabs>\n * ```\n */\n@Component({\n tag: 'wcs-tabs',\n styleUrl: 'tabs.scss',\n shadow: true,\n})\nexport class Tabs implements ComponentInterface {\n /**\n * Tab headers alignment.\n */\n @Prop({reflect: true}) align: WcsTabsAlignment = 'start';\n\n /**\n * Current selected tab index.\n * Starts at 0.\n */\n @Prop() selectedIndex: number = 0;\n\n @Prop() selectedKey: any;\n\n /**\n * Whether to skip rendering the tabpanel with the content of the selected tab. Use this prop if you plan to\n * separately render the tab content.\n */\n @Prop() headersOnly: boolean = false;\n /** Determines if tabs header should have a border at the bottom */\n @Prop() gutter: boolean;\n\n /**\n *\n * Emitted when the selected tab change.\n */\n @Event() tabChange!: EventEmitter<WcsTabChangeEvent>;\n\n @Element() private el!: HTMLWcsTabsElement;\n\n @State() private headers: string[] = [];\n\n @State() private currentActiveTabIndex = 0;\n\n @Watch('selectedIndex')\n selectedIndexChanged(newValue: number) {\n this.currentActiveTabIndex = newValue;\n }\n\n @Watch('selectedKey')\n selectedTabkeyChanged(newValue: any) {\n this.updateCurrentActiveIndexByTabKey(newValue);\n }\n\n private emitActiveTabChange() {\n this.tabChange.emit({\n tabName: this.headers[this.currentActiveTabIndex],\n tabIndex: this.currentActiveTabIndex,\n selectedKey: this.tabs[this.currentActiveTabIndex].itemKey\n });\n }\n\n private updateCurrentActiveIndexByTabKey(newValue: any) {\n for (let i = 0; i < this.tabs.length; i++) {\n const tab = this.tabs[i];\n if (tab.itemKey === newValue) {\n this.currentActiveTabIndex = i;\n }\n }\n }\n\n @Listen('tabLoaded')\n onTabLoaded() {\n this.refreshHeaders();\n }\n\n componentDidLoad() {\n this.putTabsInCorrectDivIfTheyAreNot();\n this.refreshHeaders();\n if (this.selectedIndex) {\n this.currentActiveTabIndex = this.selectedIndex;\n }\n if (this.selectedKey) {\n this.updateCurrentActiveIndexByTabKey(this.selectedKey);\n }\n }\n\n // XXX: Firefox < 63\n private putTabsInCorrectDivIfTheyAreNot() {\n const tabDiv = this.el.shadowRoot.querySelector('.wcs-tabs');\n if (tabDiv.querySelector('slot') === null) {\n Array.from(this.el.querySelectorAll('wcs-tab'))\n .filter(node => node.parentNode !== tabDiv)\n .forEach(tab => {\n if (tab.parentElement.isEqualNode(this.el)) {\n this.el.removeChild(tab);\n tabDiv.appendChild(tab);\n }\n });\n }\n }\n\n handleKeyDown(ev: KeyboardEvent, tabIndex: number) {\n const target = ev.target as HTMLDivElement;\n switch (ev.key) {\n case ' ':\n case 'Enter': {\n this.currentActiveTabIndex = tabIndex;\n this.emitActiveTabChange();\n ev.preventDefault();\n break;\n }\n case 'ArrowLeft': {\n if (target.previousElementSibling?.classList.contains('wcs-tab-header')) {\n (target.previousElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n case 'ArrowRight': {\n if (target.nextElementSibling?.classList.contains('wcs-tab-header')) {\n (target.nextElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n }\n }\n\n private refreshHeaders() {\n this.headers = [];\n this.tabs\n .forEach(x => {\n this.headers.push(x.getAttribute('header'));\n });\n }\n\n private get tabs() {\n const tabsEl = this.el.shadowRoot.querySelector('.wcs-tabs');\n // FIXME: problem with this selector being too greedy in ff < 63\n const tabs = this.el.shadowRoot.querySelectorAll('.wcs-tabs > wcs-tab');\n\n return tabs.length !== 0\n ? tabs\n : tabsEl?.querySelector('slot')\n ? tabsEl?.querySelector('slot')?.assignedElements() as unknown as NodeListOf<HTMLWcsTabElement>\n : [];\n }\n\n private selectTabAndEmitChangeEvent(index: number) {\n this.currentActiveTabIndex = index;\n this.emitActiveTabChange()\n }\n\n componentWillUpdate() {\n if (!this.headersOnly) {\n this.updateTabVisibility();\n } else {\n this.hideAllTabsContent();\n }\n }\n\n private updateTabVisibility() {\n this.tabs.forEach((el: HTMLWcsTabElement, idx: number) => {\n if (idx !== this.currentActiveTabIndex) {\n el.setAttribute('style', 'display: none;');\n } else {\n el.setAttribute('style', 'display: block;');\n }\n });\n }\n\n private hideAllTabsContent() {\n this.tabs.forEach((el: HTMLWcsTabElement) => el.setAttribute('style', 'display: none;'));\n }\n\n render() {\n return (\n <Host>\n <div class=\"wcs-tabs-headers\">\n {this.headers.map((header, idx) =>\n <div class={'wcs-tab-header ' + (this.currentActiveTabIndex === idx ? 'active' : '')}\n onClick={() => this.selectTabAndEmitChangeEvent(idx)}\n onKeyDown={evt => this.handleKeyDown(evt, idx)}\n tabIndex={this.currentActiveTabIndex === idx ? 0 : -1}\n >\n <span>{header}</span>\n </div>\n )}\n </div>\n <div class=\"wcs-tabs\">\n <slot name=\"wcs-tab\"/>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  --wcs-internal-textarea-border-radius-left: var(--wcs-textarea-border-radius-left, var(--wcs-border-radius));
4
4
  --wcs-internal-textarea-border-radius-right: var(--wcs-textarea-border-radius-right, var(--wcs-border-radius));
5
5
  --wcs-internal-textarea-border-width: 2px;
6
+ --wcs-textarea-max-height: unset;
6
7
  display: flex;
7
8
  flex-direction: row;
8
9
  width: 100%;
@@ -20,7 +21,8 @@
20
21
  flex: 1;
21
22
  width: 100%;
22
23
  box-sizing: border-box;
23
- min-height: 24px;
24
+ min-height: var(--wcs-size-m);
25
+ max-height: var(--wcs-textarea-max-height);
24
26
  background-color: transparent;
25
27
  font-family: var(--wcs-font-sans-serif);
26
28
  color: var(--wcs-primary);
@@ -2,6 +2,9 @@ import { h, Host, Build, readTask } from '@stencil/core';
2
2
  import { debounceEvent, findItemLabel, inheritAttributes, raf } from '../../utils/helpers';
3
3
  /**
4
4
  * Mainly inspired from Ionic Textarea Component
5
+ *
6
+ * @cssprop --wcs-textarea-max-height - Max height of the text area component
7
+ *
5
8
  */
6
9
  export class Textarea {
7
10
  constructor() {
@@ -54,6 +57,7 @@ export class Textarea {
54
57
  this.wrap = undefined;
55
58
  this.autoGrow = false;
56
59
  this.value = '';
60
+ this.resize = undefined;
57
61
  }
58
62
  debounceChanged() {
59
63
  this.wcsChange = debounceEvent(this.wcsChange, this.debounce);
@@ -166,7 +170,8 @@ export class Textarea {
166
170
  if (label) {
167
171
  label.id = labelId;
168
172
  }
169
- return (h(Host, { "aria-disabled": this.disabled ? 'true' : null }, this.icon ? (h("wcs-mat-icon", { icon: this.icon, size: "m" })) : null, h("textarea", Object.assign({ class: "native-textarea", "aria-labelledby": label ? labelId : null, ref: el => this.nativeInput = el, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, disabled: this.disabled, maxLength: this.maxlength, minLength: this.minlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)));
173
+ const style = Object.assign({}, (this.resize && { 'resize': this.resize }));
174
+ return (h(Host, { "aria-disabled": this.disabled ? 'true' : null }, this.icon ? (h("wcs-mat-icon", { icon: this.icon, size: "m" })) : null, h("textarea", Object.assign({ class: "native-textarea", "aria-labelledby": label ? labelId : null, ref: el => this.nativeInput = el, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, disabled: this.disabled, maxLength: this.maxlength, minLength: this.minlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, style: style }, this.inheritedAttributes), value)));
170
175
  }
171
176
  static get is() { return "wcs-textarea"; }
172
177
  static get encapsulation() { return "shadow"; }
@@ -571,6 +576,23 @@ export class Textarea {
571
576
  "attribute": "value",
572
577
  "reflect": false,
573
578
  "defaultValue": "''"
579
+ },
580
+ "resize": {
581
+ "type": "string",
582
+ "mutable": false,
583
+ "complexType": {
584
+ "original": "'both' | 'none' | 'vertical' | 'horizontal'",
585
+ "resolved": "\"both\" | \"horizontal\" | \"none\" | \"vertical\"",
586
+ "references": {}
587
+ },
588
+ "required": false,
589
+ "optional": true,
590
+ "docs": {
591
+ "tags": [],
592
+ "text": "Indicates how the textarea should be resizable.\nPossible values 'both' | 'none' | 'vertical' | 'horizontal'"
593
+ },
594
+ "attribute": "resize",
595
+ "reflect": true
574
596
  }
575
597
  };
576
598
  }
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n EventEmitter,\n Element,\n Event,\n Build,\n readTask\n} from '@stencil/core';\nimport { debounceEvent, findItemLabel, inheritAttributes, raf } from '../../utils/helpers';\nimport { TextareaChangeEventDetail } from './textarea-interface';\n\n/**\n * Mainly inspired from Ionic Textarea Component\n */\n@Component({\n tag: 'wcs-textarea',\n styleUrl: 'textarea.scss',\n shadow: true,\n})\nexport class Textarea implements ComponentInterface {\n private nativeInput?: HTMLTextAreaElement;\n private inputId = `wcs-textarea-${textareaIds++}`;\n private didBlurAfterEdit = false;\n private inheritedAttributes: { [k: string]: any } = {};\n\n /**\n * This is required for a WebKit bug which requires us to\n * blur and focus an input to properly focus the input in\n * an item with delegatesFocus. It will no longer be needed\n * with iOS 14.\n *\n * @internal\n */\n @Prop() fireFocusEvents = true;\n\n @Element() el!: HTMLElement;\n\n @State() hasFocus = false;\n\n /**\n * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.\n */\n @Prop() autocapitalize = 'none';\n\n /**\n * This Boolean attribute lets you specify that a form control should have input focus when the page loads.\n */\n @Prop() autofocus = false;\n\n /**\n * If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `\"password\"`, `false` for all other types.\n */\n @Prop({mutable: true}) clearOnEdit = false;\n\n /**\n * Set the amount of time, in milliseconds, to wait to trigger the `wcsChange` event after each keystroke. This also impacts form bindings such as `ngModel` or `v-model`.\n */\n @Prop() debounce = 0;\n\n @Watch('debounce')\n protected debounceChanged() {\n this.wcsChange = debounceEvent(this.wcsChange, this.debounce);\n }\n\n /**\n * If `true`, the user cannot interact with the textarea.\n */\n @Prop() disabled = false;\n\n /**\n * Name of the material icon to add to the input\n */\n @Prop() icon: string;\n\n /**\n * A hint to the browser for which keyboard to display.\n * Possible values: `\"none\"`, `\"text\"`, `\"tel\"`, `\"url\"`,\n * `\"email\"`, `\"numeric\"`, `\"decimal\"`, and `\"search\"`.\n */\n @Prop() inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n\n /**\n * A hint to the browser for which enter key to display.\n * Possible values: `\"enter\"`, `\"done\"`, `\"go\"`, `\"next\"`,\n * `\"previous\"`, `\"search\"`, and `\"send\"`.\n */\n @Prop() enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the maximum number of characters that the user can enter.\n */\n @Prop() maxlength?: number;\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the minimum number of characters that the user can enter.\n */\n @Prop() minlength?: number;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * Instructional text that shows before the input has a value.\n */\n @Prop() placeholder?: string | null;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the user must fill in a value before submitting a form.\n */\n @Prop() required = false;\n\n /**\n * If `true`, the element will have its spelling and grammar checked.\n */\n @Prop() spellcheck = false;\n\n /**\n * Specifies the state of the input. By default the input is in an initial state but you can set it to 'error' state if the data given by the user is not valid.\n */\n @Prop({reflect: true}) state: 'initial' | 'error' = 'initial';\n\n /**\n * The visible width of the text control, in average character widths. If it is specified, it must be a positive integer.\n */\n @Prop() cols?: number;\n\n /**\n * The number of visible text lines for the control.\n */\n @Prop() rows?: number;\n\n /**\n * Indicates how the control wraps text.\n */\n @Prop() wrap?: 'hard' | 'soft' | 'off';\n\n /**\n * If `true`, the element height will increase based on the value.\n */\n @Prop() autoGrow = false;\n\n /**\n * The value of the textarea.\n */\n @Prop({mutable: true}) value?: string | null = '';\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n const nativeInput = this.nativeInput;\n const value = this.getValue();\n if (nativeInput && nativeInput.value !== value) {\n nativeInput.value = value;\n }\n this.runAutoGrow();\n this.wcsChange.emit({value});\n }\n\n /**\n * Emitted when the input value has changed.\n */\n @Event() wcsChange!: EventEmitter<TextareaChangeEventDetail>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() wcsInput!: EventEmitter<KeyboardEvent>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() wcsBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() wcsFocus!: EventEmitter<FocusEvent>;\n\n connectedCallback() {\n this.debounceChanged();\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidLoad', {\n detail: this.el\n }));\n }\n }\n\n disconnectedCallback() {\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidUnload', {\n detail: this.el\n }));\n }\n }\n\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['title']);\n }\n\n componentDidLoad() {\n raf(() => this.runAutoGrow());\n }\n\n private runAutoGrow() {\n const nativeInput = this.nativeInput;\n if (nativeInput && this.autoGrow) {\n readTask(() => {\n nativeInput.style.height = 'auto';\n nativeInput.style.height = nativeInput.scrollHeight + 'px';\n });\n }\n }\n\n /**\n * This method make the textarea automatically adopt the size of the content without a scroll bar\n */\n @Method()\n async fitContent() {\n raf(() => this.runAutoGrow());\n }\n\n /**\n * Sets focus on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeInput) {\n this.nativeInput.focus();\n }\n }\n\n /**\n * Sets blur on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.blur()`.\n * @internal\n */\n @Method()\n async setBlur() {\n if (this.nativeInput) {\n this.nativeInput.blur();\n }\n }\n\n /**\n * Returns the native `<textarea>` element used under the hood.\n */\n @Method()\n getInputElement(): Promise<HTMLTextAreaElement> {\n // tslint:disable-next-line:no-non-null-assertion\n return Promise.resolve(this.nativeInput!);\n }\n\n /**\n * Check if we need to clear the text input if clearOnEdit is enabled\n */\n private checkClearOnEdit() {\n if (!this.clearOnEdit) {\n return;\n }\n\n // Did the input value change after it was blurred and edited?\n if (this.didBlurAfterEdit && this.hasValue()) {\n // Clear the input\n this.value = '';\n }\n\n // Reset the flag\n this.didBlurAfterEdit = false;\n }\n\n private focusChange() {\n // If clearOnEdit is enabled and the input blurred but has a value, set a flag\n if (this.clearOnEdit && !this.hasFocus && this.hasValue()) {\n this.didBlurAfterEdit = true;\n }\n }\n\n private hasValue(): boolean {\n return this.getValue() !== '';\n }\n\n private getValue(): string {\n return this.value || '';\n }\n\n private onInput = (ev: Event) => {\n if (this.nativeInput) {\n this.value = this.nativeInput.value;\n }\n this.wcsInput.emit(ev as KeyboardEvent);\n }\n\n private onFocus = (ev: FocusEvent) => {\n this.hasFocus = true;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsFocus.emit(ev);\n }\n }\n\n private onBlur = (ev: FocusEvent) => {\n this.hasFocus = false;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsBlur.emit(ev);\n }\n }\n\n private onKeyDown = () => {\n this.checkClearOnEdit();\n }\n\n render() {\n const value = this.getValue();\n const labelId = this.inputId + '-lbl';\n const label = findItemLabel(this.el);\n if (label) {\n label.id = labelId;\n }\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n >\n {this.icon ? (<wcs-mat-icon icon={this.icon} size=\"m\"></wcs-mat-icon>) : null}\n <textarea\n class=\"native-textarea\"\n aria-labelledby={label ? labelId : null}\n ref={el => this.nativeInput = el}\n autoCapitalize={this.autocapitalize}\n autoFocus={this.autofocus}\n enterKeyHint={this.enterkeyhint}\n inputMode={this.inputmode}\n disabled={this.disabled}\n maxLength={this.maxlength}\n minLength={this.minlength}\n name={this.name}\n placeholder={this.placeholder || ''}\n readOnly={this.readonly}\n required={this.required}\n spellcheck={this.spellcheck}\n cols={this.cols}\n rows={this.rows}\n wrap={this.wrap}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.onKeyDown}\n {...this.inheritedAttributes}\n >\n {value}\n </textarea>\n </Host>\n );\n }\n}\n\nlet textareaIds = 0;\n"]}
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n EventEmitter,\n Element,\n Event,\n Build,\n readTask\n} from '@stencil/core';\nimport { debounceEvent, findItemLabel, inheritAttributes, raf } from '../../utils/helpers';\nimport { TextareaChangeEventDetail } from './textarea-interface';\n\n/**\n * Mainly inspired from Ionic Textarea Component\n *\n * @cssprop --wcs-textarea-max-height - Max height of the text area component\n *\n */\n@Component({\n tag: 'wcs-textarea',\n styleUrl: 'textarea.scss',\n shadow: true,\n})\nexport class Textarea implements ComponentInterface {\n private nativeInput?: HTMLTextAreaElement;\n private inputId = `wcs-textarea-${textareaIds++}`;\n private didBlurAfterEdit = false;\n private inheritedAttributes: { [k: string]: any } = {};\n\n /**\n * This is required for a WebKit bug which requires us to\n * blur and focus an input to properly focus the input in\n * an item with delegatesFocus. It will no longer be needed\n * with iOS 14.\n *\n * @internal\n */\n @Prop() fireFocusEvents = true;\n\n @Element() private el!: HTMLElement;\n\n @State() private hasFocus = false;\n\n /**\n * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.\n */\n @Prop() autocapitalize = 'none';\n\n /**\n * This Boolean attribute lets you specify that a form control should have input focus when the page loads.\n */\n @Prop() autofocus = false;\n\n /**\n * If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `\"password\"`, `false` for all other types.\n */\n @Prop({mutable: true}) clearOnEdit = false;\n\n /**\n * Set the amount of time, in milliseconds, to wait to trigger the `wcsChange` event after each keystroke. This also impacts form bindings such as `ngModel` or `v-model`.\n */\n @Prop() debounce = 0;\n\n @Watch('debounce')\n protected debounceChanged() {\n this.wcsChange = debounceEvent(this.wcsChange, this.debounce);\n }\n\n /**\n * If `true`, the user cannot interact with the textarea.\n */\n @Prop() disabled = false;\n\n /**\n * Name of the material icon to add to the input\n */\n @Prop() icon: string;\n\n /**\n * A hint to the browser for which keyboard to display.\n * Possible values: `\"none\"`, `\"text\"`, `\"tel\"`, `\"url\"`,\n * `\"email\"`, `\"numeric\"`, `\"decimal\"`, and `\"search\"`.\n */\n @Prop() inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n\n /**\n * A hint to the browser for which enter key to display.\n * Possible values: `\"enter\"`, `\"done\"`, `\"go\"`, `\"next\"`,\n * `\"previous\"`, `\"search\"`, and `\"send\"`.\n */\n @Prop() enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the maximum number of characters that the user can enter.\n */\n @Prop() maxlength?: number;\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the minimum number of characters that the user can enter.\n */\n @Prop() minlength?: number;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * Instructional text that shows before the input has a value.\n */\n @Prop() placeholder?: string | null;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the user must fill in a value before submitting a form.\n */\n @Prop() required = false;\n\n /**\n * If `true`, the element will have its spelling and grammar checked.\n */\n @Prop() spellcheck = false;\n\n /**\n * Specifies the state of the input. By default the input is in an initial state but you can set it to 'error' state if the data given by the user is not valid.\n */\n @Prop({reflect: true}) state: 'initial' | 'error' = 'initial';\n\n /**\n * The visible width of the text control, in average character widths. If it is specified, it must be a positive integer.\n */\n @Prop() cols?: number;\n\n /**\n * The number of visible text lines for the control.\n */\n @Prop() rows?: number;\n\n /**\n * Indicates how the control wraps text.\n */\n @Prop() wrap?: 'hard' | 'soft' | 'off';\n\n /**\n * If `true`, the element height will increase based on the value.\n */\n @Prop() autoGrow = false;\n\n /**\n * The value of the textarea.\n */\n @Prop({mutable: true}) value?: string | null = '';\n\n /**\n * Indicates how the textarea should be resizable.\n * Possible values 'both' | 'none' | 'vertical' | 'horizontal'\n */\n @Prop({reflect: true}) resize?: 'both' | 'none' | 'vertical' | 'horizontal';\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n const nativeInput = this.nativeInput;\n const value = this.getValue();\n if (nativeInput && nativeInput.value !== value) {\n nativeInput.value = value;\n }\n this.runAutoGrow();\n this.wcsChange.emit({value});\n }\n\n /**\n * Emitted when the input value has changed.\n */\n @Event() wcsChange!: EventEmitter<TextareaChangeEventDetail>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() wcsInput!: EventEmitter<KeyboardEvent>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() wcsBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() wcsFocus!: EventEmitter<FocusEvent>;\n\n connectedCallback() {\n this.debounceChanged();\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidLoad', {\n detail: this.el\n }));\n }\n }\n\n disconnectedCallback() {\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidUnload', {\n detail: this.el\n }));\n }\n }\n\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['title']);\n }\n\n componentDidLoad() {\n raf(() => this.runAutoGrow());\n }\n\n private runAutoGrow() {\n const nativeInput = this.nativeInput;\n if (nativeInput && this.autoGrow) {\n readTask(() => {\n nativeInput.style.height = 'auto';\n nativeInput.style.height = nativeInput.scrollHeight + 'px';\n });\n }\n }\n\n /**\n * This method make the textarea automatically adopt the size of the content without a scroll bar\n */\n @Method()\n async fitContent() {\n raf(() => this.runAutoGrow());\n }\n\n /**\n * Sets focus on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeInput) {\n this.nativeInput.focus();\n }\n }\n\n /**\n * Sets blur on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.blur()`.\n * @internal\n */\n @Method()\n async setBlur() {\n if (this.nativeInput) {\n this.nativeInput.blur();\n }\n }\n\n /**\n * Returns the native `<textarea>` element used under the hood.\n */\n @Method()\n getInputElement(): Promise<HTMLTextAreaElement> {\n // tslint:disable-next-line:no-non-null-assertion\n return Promise.resolve(this.nativeInput!);\n }\n\n /**\n * Check if we need to clear the text input if clearOnEdit is enabled\n */\n private checkClearOnEdit() {\n if (!this.clearOnEdit) {\n return;\n }\n\n // Did the input value change after it was blurred and edited?\n if (this.didBlurAfterEdit && this.hasValue()) {\n // Clear the input\n this.value = '';\n }\n\n // Reset the flag\n this.didBlurAfterEdit = false;\n }\n\n private focusChange() {\n // If clearOnEdit is enabled and the input blurred but has a value, set a flag\n if (this.clearOnEdit && !this.hasFocus && this.hasValue()) {\n this.didBlurAfterEdit = true;\n }\n }\n\n private hasValue(): boolean {\n return this.getValue() !== '';\n }\n\n private getValue(): string {\n return this.value || '';\n }\n\n private onInput = (ev: Event) => {\n if (this.nativeInput) {\n this.value = this.nativeInput.value;\n }\n this.wcsInput.emit(ev as KeyboardEvent);\n }\n\n private onFocus = (ev: FocusEvent) => {\n this.hasFocus = true;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsFocus.emit(ev);\n }\n }\n\n private onBlur = (ev: FocusEvent) => {\n this.hasFocus = false;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsBlur.emit(ev);\n }\n }\n\n private onKeyDown = () => {\n this.checkClearOnEdit();\n }\n\n render() {\n const value = this.getValue();\n const labelId = this.inputId + '-lbl';\n const label = findItemLabel(this.el);\n if (label) {\n label.id = labelId;\n }\n const style = {\n ...(this.resize && {'resize': this.resize})\n }\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n >\n {this.icon ? (<wcs-mat-icon icon={this.icon} size=\"m\"></wcs-mat-icon>) : null}\n <textarea\n class=\"native-textarea\"\n aria-labelledby={label ? labelId : null}\n ref={el => this.nativeInput = el}\n autoCapitalize={this.autocapitalize}\n autoFocus={this.autofocus}\n enterKeyHint={this.enterkeyhint}\n inputMode={this.inputmode}\n disabled={this.disabled}\n maxLength={this.maxlength}\n minLength={this.minlength}\n name={this.name}\n placeholder={this.placeholder || ''}\n readOnly={this.readonly}\n required={this.required}\n spellcheck={this.spellcheck}\n cols={this.cols}\n rows={this.rows}\n wrap={this.wrap}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.onKeyDown}\n style={style}\n {...this.inheritedAttributes}\n >\n {value}\n </textarea>\n </Host>\n );\n }\n}\n\nlet textareaIds = 0;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentInterface, h, Host, Prop, Element, Watch, Method } from '@stencil/core';\nimport { WcsTooltipAppendTo, WcsTooltipPosition } from './tooltip-interface';\n\n// We use the Tippy.js library for the tooltip. At first by using directly the styles of tippy because\n// the design system does not specify any spec for the tooltips.\n//\n// In a second time, if a need of customization is felt, it will be possible to use the lib in a\n// \"Headless\" mode where the rendering of the tooltip will be entirely in our charge, without\n// modifications in the API : https://atomiks.github.io/tippyjs/v6/headless-tippy/\nimport tippy, { Instance, Props } from 'tippy.js';\n\n/**\n * Tooltips are used to provide additional information for features available on the website. These can improve the user\n * experience or simply show additional information. Tooltips appear when the user rolls over or clicks on them\n * (for longer content).\n *\n * Note that this component is based on the Tippy.js library : https://atomiks.github.io/tippyjs/\n */\n@Component({\n tag: 'wcs-tooltip',\n shadow: true,\n // Tippy stylesheet and specific styles are imported in the global tooltip.scss file\n styleUrl: 'tooltip.scss'\n})\nexport class Tooltip implements ComponentInterface {\n /**\n * The **id** of the element the tooltip's going to describe.\n *\n * This property cannot be modified after initialization.\n *\n * @example\n * ```html\n * <span id=\"tooltiped\">Some content</span>\n * <wcs-tooltip for=\"tooltiped\">A tooltip!</wcs-tooltip>\n * ```\n */\n @Prop({mutable: false})\n for: string;\n\n /**\n * Where the tooltip is going to show relative to the element it's describing.\n */\n @Prop({reflect: true})\n position: WcsTooltipPosition = 'bottom';\n\n /**\n * Determines if the tooltip has interactive content inside of it, so that it can be hovered over and clicked inside\n * without hiding.\n */\n @Prop()\n interactive: boolean = false;\n\n /**\n * Specifies the maximum width of the tooltip. Useful to prevent it from being too horizontally wide to read.\n *\n * If the viewport's width is smaller than maxWidth, core CSS ensures the tippy remains smaller than the screen.\n */\n @Prop()\n maxWidth: string | number = 350;\n\n /**\n * Delay in ms once a trigger event is fired before the tooltip shows or hides.\n *\n * You can provide an array with two values to define a different duration for show and hide.\n *\n * `[showDelay, hideDelay]`\n *\n * Use null to use default value.\n */\n @Prop()\n delay: number | [number, number] = 0;\n\n /**\n * Duration in ms of the transition animation.\n */\n @Prop()\n duration: number | [number, number] = [300, 250];\n\n /**\n * Determines the events that cause the tooltip to show. Multiple event names are separated by spaces.\n *\n * See: https://atomiks.github.io/tippyjs/v6/all-props/#trigger\n */\n @Prop()\n trigger: string = 'mouseenter focus';\n\n /**\n * Allows you to change the theme used by tippy.\n *\n * The WCS theme is used by default and uses the WCS CSS variables.\n *\n * You can create a theme by following this documentation and choosing a custom name :\n * https://atomiks.github.io/tippyjs/v6/themes/\n */\n @Prop()\n theme: string = 'wcs';\n\n /**\n * You can use this property instead of the slot API to affect content in the tooltip.\n *\n * This makes it easier to manage the update if the tooltip contains elements that are not mutated when their\n * content changes. Indeed, if the slot is used, the tooltip is updated only if the structure of the slotted DOM\n * changes (the DOM must be mutated).\n *\n * The two APIs are not mutually exclusive, if both are filled in (the prop + the slot) the rendering will first\n * display the content of this property and then the slotted elements.\n */\n @Prop()\n content: string;\n\n /**\n * The element to append the tooltip to. Default behaviour is `() => document.body`. If interactive: true,\n * the default behavior is appendTo: \"parent\"\n *\n * See: https://atomiks.github.io/tippyjs/v6/all-props/#appendto\n */\n @Prop()\n appendTo: WcsTooltipAppendTo;\n\n @Element()\n private el: HTMLWcsTooltipElement;\n\n tippyInstance: Instance<Props>;\n\n componentWillLoad(): Promise<void> | void {\n this.tippyInstance = tippy(document.getElementById(this.for), {\n appendTo: this.appendTo || (() => document.body),\n theme: this.theme,\n allowHTML: true,\n content: this.getTooltipContentFromPropAndSlot(),\n maxWidth: this.maxWidth,\n placement: this.position,\n delay: this.delay,\n duration: this.duration,\n interactive: this.interactive,\n trigger: this.trigger\n });\n }\n\n private getTooltipContentFromPropAndSlot() {\n if (this.content) {\n return this.content + this.el.innerHTML;\n }\n return this.el.innerHTML;\n }\n\n @Watch('interactive')\n @Watch('position')\n @Watch('maxWidth')\n @Watch('theme')\n @Watch('delay')\n @Watch('duration')\n @Watch('trigger')\n // @ts-ignore\n private updateProps() {\n this.tippyInstance?.setProps({\n interactive: this.interactive,\n placement: this.position,\n maxWidth: this.maxWidth,\n theme: this.theme,\n delay: this.delay,\n duration: this.duration,\n trigger: this.trigger\n })\n }\n\n @Watch('content')\n private updateTippyContent() {\n this.tippyInstance?.setProps({\n content: this.getTooltipContentFromPropAndSlot()\n })\n }\n\n /**\n * Programmatically hide the tooltip\n */\n @Method()\n async hide() {\n this.tippyInstance.hide();\n }\n\n /**\n * Programmatically show the tooltip\n */\n @Method()\n async show() {\n this.tippyInstance.show();\n }\n\n /**\n * Temporarily prevent the tooltip from showing or hiding\n */\n @Method()\n async disable() {\n this.tippyInstance.disable();\n }\n\n /**\n * Re-enable a disabled tooltip\n */\n @Method()\n async enable() {\n this.tippyInstance.enable();\n }\n\n disconnectedCallback() {\n this.tippyInstance?.destroy();\n }\n\n render() {\n return (\n <Host>\n <slot onSlotchange={_ => this.updateTippyContent()}/>\n </Host>\n );\n }\n\n\n}\n"]}
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentInterface, h, Host, Prop, Element, Watch, Method } from '@stencil/core';\nimport { WcsTooltipAppendTo, WcsTooltipPosition } from './tooltip-interface';\n\n// We use the Tippy.js library for the tooltip. At first by using directly the styles of tippy because\n// the design system does not specify any spec for the tooltips.\n//\n// In a second time, if a need of customization is felt, it will be possible to use the lib in a\n// \"Headless\" mode where the rendering of the tooltip will be entirely in our charge, without\n// modifications in the API : https://atomiks.github.io/tippyjs/v6/headless-tippy/\nimport tippy, { Instance, Props } from 'tippy.js';\n\n/**\n * Tooltips are used to provide additional information for features available on the website. These can improve the user\n * experience or simply show additional information. Tooltips appear when the user rolls over or clicks on them\n * (for longer content).\n *\n * Note that this component is based on the Tippy.js library : https://atomiks.github.io/tippyjs/\n */\n@Component({\n tag: 'wcs-tooltip',\n shadow: true,\n // Tippy stylesheet and specific styles are imported in the global tooltip.scss file\n styleUrl: 'tooltip.scss'\n})\nexport class Tooltip implements ComponentInterface {\n /**\n * The **id** of the element the tooltip's going to describe.\n *\n * This property cannot be modified after initialization.\n *\n * @example\n * ```html\n * <span id=\"tooltiped\">Some content</span>\n * <wcs-tooltip for=\"tooltiped\">A tooltip!</wcs-tooltip>\n * ```\n */\n @Prop({mutable: false})\n for: string;\n\n /**\n * Where the tooltip is going to show relative to the element it's describing.\n */\n @Prop({reflect: true})\n position: WcsTooltipPosition = 'bottom';\n\n /**\n * Determines if the tooltip has interactive content inside of it, so that it can be hovered over and clicked inside\n * without hiding.\n */\n @Prop()\n interactive: boolean = false;\n\n /**\n * Specifies the maximum width of the tooltip. Useful to prevent it from being too horizontally wide to read.\n *\n * If the viewport's width is smaller than maxWidth, core CSS ensures the tippy remains smaller than the screen.\n */\n @Prop()\n maxWidth: string | number = 350;\n\n /**\n * Delay in ms once a trigger event is fired before the tooltip shows or hides.\n *\n * You can provide an array with two values to define a different duration for show and hide.\n *\n * `[showDelay, hideDelay]`\n *\n * Use null to use default value.\n */\n @Prop()\n delay: number | [number, number] = 0;\n\n /**\n * Duration in ms of the transition animation.\n */\n @Prop()\n duration: number | [number, number] = [300, 250];\n\n /**\n * Determines the events that cause the tooltip to show. Multiple event names are separated by spaces.\n *\n * See: https://atomiks.github.io/tippyjs/v6/all-props/#trigger\n */\n @Prop()\n trigger: string = 'mouseenter focus';\n\n /**\n * Allows you to change the theme used by tippy.\n *\n * The WCS theme is used by default and uses the WCS CSS variables.\n *\n * You can create a theme by following this documentation and choosing a custom name :\n * https://atomiks.github.io/tippyjs/v6/themes/\n */\n @Prop()\n theme: string = 'wcs';\n\n /**\n * You can use this property instead of the slot API to affect content in the tooltip.\n *\n * This makes it easier to manage the update if the tooltip contains elements that are not mutated when their\n * content changes. Indeed, if the slot is used, the tooltip is updated only if the structure of the slotted DOM\n * changes (the DOM must be mutated).\n *\n * The two APIs are not mutually exclusive, if both are filled in (the prop + the slot) the rendering will first\n * display the content of this property and then the slotted elements.\n */\n @Prop()\n content: string;\n\n /**\n * The element to append the tooltip to. Default behaviour is `() => document.body`. If interactive: true,\n * the default behavior is appendTo: \"parent\"\n *\n * See: https://atomiks.github.io/tippyjs/v6/all-props/#appendto\n */\n @Prop()\n appendTo: WcsTooltipAppendTo;\n\n @Element()\n private el: HTMLWcsTooltipElement;\n\n private tippyInstance: Instance<Props>;\n\n componentWillLoad(): Promise<void> | void {\n this.tippyInstance = tippy(document.getElementById(this.for), {\n appendTo: this.appendTo || (() => document.body),\n theme: this.theme,\n allowHTML: true,\n content: this.getTooltipContentFromPropAndSlot(),\n maxWidth: this.maxWidth,\n placement: this.position,\n delay: this.delay,\n duration: this.duration,\n interactive: this.interactive,\n trigger: this.trigger\n });\n }\n\n private getTooltipContentFromPropAndSlot() {\n if (this.content) {\n return this.content + this.el.innerHTML;\n }\n return this.el.innerHTML;\n }\n\n @Watch('interactive')\n @Watch('position')\n @Watch('maxWidth')\n @Watch('theme')\n @Watch('delay')\n @Watch('duration')\n @Watch('trigger')\n // @ts-ignore\n private updateProps() {\n this.tippyInstance?.setProps({\n interactive: this.interactive,\n placement: this.position,\n maxWidth: this.maxWidth,\n theme: this.theme,\n delay: this.delay,\n duration: this.duration,\n trigger: this.trigger\n })\n }\n\n @Watch('content')\n private updateTippyContent() {\n this.tippyInstance?.setProps({\n content: this.getTooltipContentFromPropAndSlot()\n })\n }\n\n /**\n * Programmatically hide the tooltip\n */\n @Method()\n async hide() {\n this.tippyInstance.hide();\n }\n\n /**\n * Programmatically show the tooltip\n */\n @Method()\n async show() {\n this.tippyInstance.show();\n }\n\n /**\n * Temporarily prevent the tooltip from showing or hiding\n */\n @Method()\n async disable() {\n this.tippyInstance.disable();\n }\n\n /**\n * Re-enable a disabled tooltip\n */\n @Method()\n async enable() {\n this.tippyInstance.enable();\n }\n\n disconnectedCallback() {\n this.tippyInstance?.destroy();\n }\n\n render() {\n return (\n <Host>\n <slot onSlotchange={_ => this.updateTippyContent()}/>\n </Host>\n );\n }\n\n\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export * from './shared-types';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './components';\nexport * from './shared-types';\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shared-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../src/shared-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Meant to be extracted with TS and used in each component differently, depending on the use case.\n * Global size guideline (with basis at 8px) :\n * xl = 56 px\n * l = 48 px\n * m = 40 px (default)\n * s = 32 px\n * xs = 24 px\n */\nexport type WcsSize = 'xs' | 's' | 'm' | 'l' | 'xl';\n"]}