wcs-core 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/dist/cjs/{accessibility-e99b032d.js → accessibility-c0c4e648.js} +8 -2
  2. package/dist/cjs/accessibility-c0c4e648.js.map +1 -0
  3. package/dist/cjs/button-interface-044a8a8a.js +12 -0
  4. package/dist/cjs/button-interface-044a8a8a.js.map +1 -0
  5. package/dist/cjs/grid-pagination-3511fdfa.js +111 -0
  6. package/dist/cjs/grid-pagination-3511fdfa.js.map +1 -0
  7. package/dist/cjs/{helpers-4a14051a.js → helpers-6280db6e.js} +75 -2
  8. package/dist/cjs/helpers-6280db6e.js.map +1 -0
  9. package/dist/cjs/{index-ca67a6dc.js → index-749d999e.js} +4 -1
  10. package/dist/cjs/index-749d999e.js.map +1 -0
  11. package/dist/cjs/{isEqual-9ea7ee49.js → keyboard-event-1cad4036.js} +77 -1
  12. package/dist/cjs/keyboard-event-1cad4036.js.map +1 -0
  13. package/dist/cjs/loader.cjs.js +2 -2
  14. package/dist/cjs/{select-arrow-c9583ea9.js → select-arrow-8169c0cb.js} +2 -2
  15. package/dist/cjs/{select-arrow-c9583ea9.js.map → select-arrow-8169c0cb.js.map} +1 -1
  16. package/dist/cjs/wcs-accordion-content.cjs.entry.js +1 -1
  17. package/dist/cjs/wcs-accordion-header.cjs.entry.js +1 -1
  18. package/dist/cjs/wcs-accordion-panel.cjs.entry.js +2 -2
  19. package/dist/cjs/wcs-accordion.cjs.entry.js +1 -1
  20. package/dist/cjs/wcs-action-bar.cjs.entry.js +1 -1
  21. package/dist/cjs/wcs-app.cjs.entry.js +1 -1
  22. package/dist/cjs/wcs-badge.cjs.entry.js +3 -2
  23. package/dist/cjs/wcs-badge.cjs.entry.js.map +1 -1
  24. package/dist/cjs/{wcs-button.cjs.entry.js → wcs-button_2.cjs.entry.js} +21 -12
  25. package/dist/cjs/wcs-button_2.cjs.entry.js.map +1 -0
  26. package/dist/cjs/wcs-card-body.cjs.entry.js +1 -1
  27. package/dist/cjs/wcs-card.cjs.entry.js +1 -1
  28. package/dist/cjs/wcs-checkbox.cjs.entry.js +5 -2
  29. package/dist/cjs/wcs-checkbox.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wcs-com-nav-category.cjs.entry.js +2 -2
  31. package/dist/cjs/wcs-com-nav-submenu.cjs.entry.js +2 -2
  32. package/dist/cjs/wcs-com-nav.cjs.entry.js +2 -2
  33. package/dist/cjs/wcs-counter.cjs.entry.js +16 -6
  34. package/dist/cjs/wcs-counter.cjs.entry.js.map +1 -1
  35. package/dist/cjs/wcs-divider.cjs.entry.js +1 -1
  36. package/dist/cjs/wcs-dropdown-divider.cjs.entry.js +1 -1
  37. package/dist/cjs/wcs-dropdown-divider.cjs.entry.js.map +1 -1
  38. package/dist/cjs/wcs-dropdown-header.cjs.entry.js +1 -1
  39. package/dist/cjs/wcs-dropdown-header.cjs.entry.js.map +1 -1
  40. package/dist/cjs/wcs-dropdown-item.cjs.entry.js +2 -2
  41. package/dist/cjs/wcs-dropdown-item.cjs.entry.js.map +1 -1
  42. package/dist/cjs/wcs-dropdown.cjs.entry.js +12 -6
  43. package/dist/cjs/wcs-dropdown.cjs.entry.js.map +1 -1
  44. package/dist/cjs/wcs-editable-field.cjs.entry.js +18 -3
  45. package/dist/cjs/wcs-editable-field.cjs.entry.js.map +1 -1
  46. package/dist/cjs/wcs-error_2.cjs.entry.js +36 -2
  47. package/dist/cjs/wcs-error_2.cjs.entry.js.map +1 -1
  48. package/dist/cjs/wcs-field-content.cjs.entry.js +1 -1
  49. package/dist/cjs/wcs-field-label.cjs.entry.js +1 -1
  50. package/dist/cjs/wcs-field.cjs.entry.js +1 -1
  51. package/dist/cjs/wcs-footer.cjs.entry.js +1 -1
  52. package/dist/cjs/wcs-galactic-menu.cjs.entry.js +2 -2
  53. package/dist/cjs/wcs-galactic.cjs.entry.js +1 -1
  54. package/dist/cjs/wcs-grid-column.cjs.entry.js +25 -4
  55. package/dist/cjs/wcs-grid-column.cjs.entry.js.map +1 -1
  56. package/dist/cjs/wcs-grid-custom-cell.cjs.entry.js +1 -1
  57. package/dist/cjs/wcs-grid-pagination.cjs.entry.js +2 -2
  58. package/dist/cjs/wcs-grid.cjs.entry.js +320 -65
  59. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  60. package/dist/cjs/wcs-header.cjs.entry.js +1 -1
  61. package/dist/cjs/wcs-hint.cjs.entry.js +1 -1
  62. package/dist/cjs/wcs-horizontal-stepper.cjs.entry.js +1 -1
  63. package/dist/cjs/wcs-icon.cjs.entry.js +1 -1
  64. package/dist/cjs/wcs-input.cjs.entry.js +15 -15
  65. package/dist/cjs/wcs-input.cjs.entry.js.map +1 -1
  66. package/dist/cjs/wcs-label.cjs.entry.js +1 -1
  67. package/dist/cjs/wcs-label.cjs.entry.js.map +1 -1
  68. package/dist/cjs/wcs-list-item-properties.cjs.entry.js +1 -1
  69. package/dist/cjs/wcs-list-item-property.cjs.entry.js +1 -1
  70. package/dist/cjs/wcs-list-item.cjs.entry.js +1 -1
  71. package/dist/cjs/wcs-mat-icon.cjs.entry.js +2 -2
  72. package/dist/cjs/wcs-mat-icon.cjs.entry.js.map +1 -1
  73. package/dist/cjs/wcs-modal.cjs.entry.js +35 -5
  74. package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
  75. package/dist/cjs/wcs-native-select.cjs.entry.js +6 -3
  76. package/dist/cjs/wcs-native-select.cjs.entry.js.map +1 -1
  77. package/dist/cjs/wcs-nav-item.cjs.entry.js +2 -2
  78. package/dist/cjs/wcs-nav.cjs.entry.js +1 -1
  79. package/dist/cjs/wcs-progress-bar.cjs.entry.js +4 -6
  80. package/dist/cjs/wcs-progress-bar.cjs.entry.js.map +1 -1
  81. package/dist/cjs/wcs-progress-radial.cjs.entry.js +14 -6
  82. package/dist/cjs/wcs-progress-radial.cjs.entry.js.map +1 -1
  83. package/dist/cjs/wcs-radio-group.cjs.entry.js +22 -15
  84. package/dist/cjs/wcs-radio-group.cjs.entry.js.map +1 -1
  85. package/dist/cjs/wcs-radio.cjs.entry.js +14 -7
  86. package/dist/cjs/wcs-radio.cjs.entry.js.map +1 -1
  87. package/dist/cjs/wcs-select_2.cjs.entry.js +603 -111
  88. package/dist/cjs/wcs-select_2.cjs.entry.js.map +1 -1
  89. package/dist/cjs/wcs-skeleton-circle.cjs.entry.js +1 -1
  90. package/dist/cjs/wcs-skeleton-rectangle.cjs.entry.js +1 -1
  91. package/dist/cjs/wcs-skeleton-text.cjs.entry.js +1 -1
  92. package/dist/cjs/wcs-switch.cjs.entry.js +5 -2
  93. package/dist/cjs/wcs-switch.cjs.entry.js.map +1 -1
  94. package/dist/cjs/wcs-tab.cjs.entry.js +4 -1
  95. package/dist/cjs/wcs-tab.cjs.entry.js.map +1 -1
  96. package/dist/cjs/wcs-tabs.cjs.entry.js +4 -4
  97. package/dist/cjs/wcs-tabs.cjs.entry.js.map +1 -1
  98. package/dist/cjs/wcs-textarea.cjs.entry.js +13 -11
  99. package/dist/cjs/wcs-textarea.cjs.entry.js.map +1 -1
  100. package/dist/cjs/wcs-tooltip.cjs.entry.js +1 -1
  101. package/dist/cjs/wcs.cjs.js +2 -2
  102. package/dist/collection/components/badge/badge-interface.js.map +1 -1
  103. package/dist/collection/components/badge/badge.css +19 -1
  104. package/dist/collection/components/badge/badge.js +24 -0
  105. package/dist/collection/components/badge/badge.js.map +1 -1
  106. package/dist/collection/components/button/button.css +1 -1
  107. package/dist/collection/components/checkbox/checkbox.js +34 -1
  108. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  109. package/dist/collection/components/counter/counter.css +6 -1
  110. package/dist/collection/components/counter/counter.js +61 -3
  111. package/dist/collection/components/counter/counter.js.map +1 -1
  112. package/dist/collection/components/dropdown/dropdown.css +15 -4
  113. package/dist/collection/components/dropdown/dropdown.js +37 -1
  114. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  115. package/dist/collection/components/dropdown-divider/dropdown-divider.js +3 -0
  116. package/dist/collection/components/dropdown-divider/dropdown-divider.js.map +1 -1
  117. package/dist/collection/components/dropdown-header/dropdown-header.js +4 -0
  118. package/dist/collection/components/dropdown-header/dropdown-header.js.map +1 -1
  119. package/dist/collection/components/dropdown-item/dropdown-item.js +5 -1
  120. package/dist/collection/components/dropdown-item/dropdown-item.js.map +1 -1
  121. package/dist/collection/components/editable-field/editable-field.js +17 -2
  122. package/dist/collection/components/editable-field/editable-field.js.map +1 -1
  123. package/dist/collection/components/error/error.js +1 -1
  124. package/dist/collection/components/error/error.js.map +1 -1
  125. package/dist/collection/components/form-field/form-field.js +31 -0
  126. package/dist/collection/components/form-field/form-field.js.map +1 -1
  127. package/dist/collection/components/grid/grid-interface.js.map +1 -1
  128. package/dist/collection/components/grid/grid-keyboard-event.js +52 -0
  129. package/dist/collection/components/grid/grid-keyboard-event.js.map +1 -0
  130. package/dist/collection/components/grid/grid.css +5 -0
  131. package/dist/collection/components/grid/grid.js +265 -29
  132. package/dist/collection/components/grid/grid.js.map +1 -1
  133. package/dist/collection/components/grid-column/grid-column.css +5 -0
  134. package/dist/collection/components/grid-column/grid-column.js +60 -1
  135. package/dist/collection/components/grid-column/grid-column.js.map +1 -1
  136. package/dist/collection/components/grid-column/grid-sort-arrow.js +1 -1
  137. package/dist/collection/components/grid-column/grid-sort-arrow.js.map +1 -1
  138. package/dist/collection/components/grid-pagination/grid-pagination-arrow.js +32 -23
  139. package/dist/collection/components/grid-pagination/grid-pagination-arrow.js.map +1 -1
  140. package/dist/collection/components/grid-pagination/grid-pagination.css +17 -0
  141. package/dist/collection/components/grid-pagination/grid-pagination.js +1 -1
  142. package/dist/collection/components/grid-pagination/grid-pagination.js.map +1 -1
  143. package/dist/collection/components/input/input.js +64 -28
  144. package/dist/collection/components/input/input.js.map +1 -1
  145. package/dist/collection/components/label/label.js.map +1 -1
  146. package/dist/collection/components/mat-icon/mat-icon.js +1 -1
  147. package/dist/collection/components/mat-icon/mat-icon.js.map +1 -1
  148. package/dist/collection/components/modal/modal.css +2 -2
  149. package/dist/collection/components/modal/modal.js +73 -2
  150. package/dist/collection/components/modal/modal.js.map +1 -1
  151. package/dist/collection/components/native-select/native-select.css +6 -5
  152. package/dist/collection/components/native-select/native-select.js +29 -0
  153. package/dist/collection/components/native-select/native-select.js.map +1 -1
  154. package/dist/collection/components/progress-bar/progress-bar.css +12 -11
  155. package/dist/collection/components/progress-bar/progress-bar.js +22 -13
  156. package/dist/collection/components/progress-bar/progress-bar.js.map +1 -1
  157. package/dist/collection/components/progress-radial/progress-radial.css +5 -0
  158. package/dist/collection/components/progress-radial/progress-radial.js +18 -7
  159. package/dist/collection/components/progress-radial/progress-radial.js.map +1 -1
  160. package/dist/collection/components/radio/radio.css +8 -16
  161. package/dist/collection/components/radio/radio.js +12 -5
  162. package/dist/collection/components/radio/radio.js.map +1 -1
  163. package/dist/collection/components/radio-group/radio-group.js +50 -13
  164. package/dist/collection/components/radio-group/radio-group.js.map +1 -1
  165. package/dist/collection/components/select/select-interface.js +10 -0
  166. package/dist/collection/components/select/select-interface.js.map +1 -1
  167. package/dist/collection/components/select/select-keyboard-event.js +306 -0
  168. package/dist/collection/components/select/select-keyboard-event.js.map +1 -0
  169. package/dist/collection/components/select/select.css +59 -6
  170. package/dist/collection/components/select/select.js +435 -111
  171. package/dist/collection/components/select/select.js.map +1 -1
  172. package/dist/collection/components/select-option/select-option.css +15 -0
  173. package/dist/collection/components/select-option/select-option.js +30 -5
  174. package/dist/collection/components/select-option/select-option.js.map +1 -1
  175. package/dist/collection/components/switch/switch.js +34 -1
  176. package/dist/collection/components/switch/switch.js.map +1 -1
  177. package/dist/collection/components/tab/tab.css +7 -0
  178. package/dist/collection/components/tab/tab.js +11 -1
  179. package/dist/collection/components/tab/tab.js.map +1 -1
  180. package/dist/collection/components/tabs/tabs.js +7 -3
  181. package/dist/collection/components/tabs/tabs.js.map +1 -1
  182. package/dist/collection/components/textarea/textarea.css +8 -3
  183. package/dist/collection/components/textarea/textarea.js +41 -12
  184. package/dist/collection/components/textarea/textarea.js.map +1 -1
  185. package/dist/collection/utils/accessibility.js +7 -1
  186. package/dist/collection/utils/accessibility.js.map +1 -1
  187. package/dist/collection/utils/helpers.js +76 -1
  188. package/dist/collection/utils/helpers.js.map +1 -1
  189. package/dist/collection/utils/keyboard-event.js +74 -0
  190. package/dist/collection/utils/keyboard-event.js.map +1 -0
  191. package/dist/collection/utils/mutable-aria-attribute.js +4 -0
  192. package/dist/collection/utils/mutable-aria-attribute.js.map +1 -0
  193. package/dist/esm/{accessibility-ffa12842.js → accessibility-64feea8a.js} +8 -2
  194. package/dist/esm/accessibility-64feea8a.js.map +1 -0
  195. package/dist/esm/button-interface-c21c265f.js +9 -0
  196. package/dist/esm/button-interface-c21c265f.js.map +1 -0
  197. package/dist/esm/grid-pagination-f7b01e2e.js +109 -0
  198. package/dist/esm/grid-pagination-f7b01e2e.js.map +1 -0
  199. package/dist/esm/{helpers-1d55b67f.js → helpers-a21ae7d0.js} +75 -3
  200. package/dist/esm/helpers-a21ae7d0.js.map +1 -0
  201. package/dist/esm/{index-dc4d96d4.js → index-4f282598.js} +4 -1
  202. package/dist/esm/index-4f282598.js.map +1 -0
  203. package/dist/esm/{isEqual-20881bca.js → keyboard-event-ba3d20e7.js} +77 -2
  204. package/dist/esm/keyboard-event-ba3d20e7.js.map +1 -0
  205. package/dist/esm/loader.js +3 -3
  206. package/dist/esm/{select-arrow-81d069f7.js → select-arrow-28e8687b.js} +2 -2
  207. package/dist/esm/{select-arrow-81d069f7.js.map → select-arrow-28e8687b.js.map} +1 -1
  208. package/dist/esm/wcs-accordion-content.entry.js +1 -1
  209. package/dist/esm/wcs-accordion-header.entry.js +1 -1
  210. package/dist/esm/wcs-accordion-panel.entry.js +2 -2
  211. package/dist/esm/wcs-accordion.entry.js +1 -1
  212. package/dist/esm/wcs-action-bar.entry.js +1 -1
  213. package/dist/esm/wcs-app.entry.js +1 -1
  214. package/dist/esm/wcs-badge.entry.js +3 -2
  215. package/dist/esm/wcs-badge.entry.js.map +1 -1
  216. package/dist/esm/{wcs-button.entry.js → wcs-button_2.entry.js} +19 -11
  217. package/dist/esm/wcs-button_2.entry.js.map +1 -0
  218. package/dist/esm/wcs-card-body.entry.js +1 -1
  219. package/dist/esm/wcs-card.entry.js +1 -1
  220. package/dist/esm/wcs-checkbox.entry.js +5 -2
  221. package/dist/esm/wcs-checkbox.entry.js.map +1 -1
  222. package/dist/esm/wcs-com-nav-category.entry.js +2 -2
  223. package/dist/esm/wcs-com-nav-submenu.entry.js +2 -2
  224. package/dist/esm/wcs-com-nav.entry.js +2 -2
  225. package/dist/esm/wcs-counter.entry.js +16 -6
  226. package/dist/esm/wcs-counter.entry.js.map +1 -1
  227. package/dist/esm/wcs-divider.entry.js +1 -1
  228. package/dist/esm/wcs-dropdown-divider.entry.js +1 -1
  229. package/dist/esm/wcs-dropdown-divider.entry.js.map +1 -1
  230. package/dist/esm/wcs-dropdown-header.entry.js +1 -1
  231. package/dist/esm/wcs-dropdown-header.entry.js.map +1 -1
  232. package/dist/esm/wcs-dropdown-item.entry.js +2 -2
  233. package/dist/esm/wcs-dropdown-item.entry.js.map +1 -1
  234. package/dist/esm/wcs-dropdown.entry.js +12 -6
  235. package/dist/esm/wcs-dropdown.entry.js.map +1 -1
  236. package/dist/esm/wcs-editable-field.entry.js +18 -3
  237. package/dist/esm/wcs-editable-field.entry.js.map +1 -1
  238. package/dist/esm/wcs-error_2.entry.js +36 -2
  239. package/dist/esm/wcs-error_2.entry.js.map +1 -1
  240. package/dist/esm/wcs-field-content.entry.js +1 -1
  241. package/dist/esm/wcs-field-label.entry.js +1 -1
  242. package/dist/esm/wcs-field.entry.js +1 -1
  243. package/dist/esm/wcs-footer.entry.js +1 -1
  244. package/dist/esm/wcs-galactic-menu.entry.js +2 -2
  245. package/dist/esm/wcs-galactic.entry.js +1 -1
  246. package/dist/esm/wcs-grid-column.entry.js +25 -4
  247. package/dist/esm/wcs-grid-column.entry.js.map +1 -1
  248. package/dist/esm/wcs-grid-custom-cell.entry.js +1 -1
  249. package/dist/esm/wcs-grid-pagination.entry.js +2 -2
  250. package/dist/esm/wcs-grid.entry.js +282 -27
  251. package/dist/esm/wcs-grid.entry.js.map +1 -1
  252. package/dist/esm/wcs-header.entry.js +1 -1
  253. package/dist/esm/wcs-hint.entry.js +1 -1
  254. package/dist/esm/wcs-horizontal-stepper.entry.js +1 -1
  255. package/dist/esm/wcs-icon.entry.js +1 -1
  256. package/dist/esm/wcs-input.entry.js +15 -15
  257. package/dist/esm/wcs-input.entry.js.map +1 -1
  258. package/dist/esm/wcs-label.entry.js +1 -1
  259. package/dist/esm/wcs-label.entry.js.map +1 -1
  260. package/dist/esm/wcs-list-item-properties.entry.js +1 -1
  261. package/dist/esm/wcs-list-item-property.entry.js +1 -1
  262. package/dist/esm/wcs-list-item.entry.js +1 -1
  263. package/dist/esm/wcs-mat-icon.entry.js +2 -2
  264. package/dist/esm/wcs-mat-icon.entry.js.map +1 -1
  265. package/dist/esm/wcs-modal.entry.js +35 -5
  266. package/dist/esm/wcs-modal.entry.js.map +1 -1
  267. package/dist/esm/wcs-native-select.entry.js +6 -3
  268. package/dist/esm/wcs-native-select.entry.js.map +1 -1
  269. package/dist/esm/wcs-nav-item.entry.js +2 -2
  270. package/dist/esm/wcs-nav.entry.js +1 -1
  271. package/dist/esm/wcs-progress-bar.entry.js +4 -6
  272. package/dist/esm/wcs-progress-bar.entry.js.map +1 -1
  273. package/dist/esm/wcs-progress-radial.entry.js +14 -6
  274. package/dist/esm/wcs-progress-radial.entry.js.map +1 -1
  275. package/dist/esm/wcs-radio-group.entry.js +22 -15
  276. package/dist/esm/wcs-radio-group.entry.js.map +1 -1
  277. package/dist/esm/wcs-radio.entry.js +14 -7
  278. package/dist/esm/wcs-radio.entry.js.map +1 -1
  279. package/dist/esm/wcs-select_2.entry.js +602 -110
  280. package/dist/esm/wcs-select_2.entry.js.map +1 -1
  281. package/dist/esm/wcs-skeleton-circle.entry.js +1 -1
  282. package/dist/esm/wcs-skeleton-rectangle.entry.js +1 -1
  283. package/dist/esm/wcs-skeleton-text.entry.js +1 -1
  284. package/dist/esm/wcs-switch.entry.js +5 -2
  285. package/dist/esm/wcs-switch.entry.js.map +1 -1
  286. package/dist/esm/wcs-tab.entry.js +4 -1
  287. package/dist/esm/wcs-tab.entry.js.map +1 -1
  288. package/dist/esm/wcs-tabs.entry.js +4 -4
  289. package/dist/esm/wcs-tabs.entry.js.map +1 -1
  290. package/dist/esm/wcs-textarea.entry.js +13 -11
  291. package/dist/esm/wcs-textarea.entry.js.map +1 -1
  292. package/dist/esm/wcs-tooltip.entry.js +1 -1
  293. package/dist/esm/wcs.js +3 -3
  294. package/dist/types/components/badge/badge-interface.d.ts +2 -0
  295. package/dist/types/components/badge/badge.d.ts +5 -1
  296. package/dist/types/components/checkbox/checkbox.d.ts +4 -1
  297. package/dist/types/components/counter/counter.d.ts +8 -1
  298. package/dist/types/components/dropdown/dropdown.d.ts +10 -1
  299. package/dist/types/components/dropdown-divider/dropdown-divider.d.ts +3 -0
  300. package/dist/types/components/dropdown-header/dropdown-header.d.ts +4 -0
  301. package/dist/types/components/dropdown-item/dropdown-item.d.ts +7 -0
  302. package/dist/types/components/editable-field/editable-field.d.ts +7 -0
  303. package/dist/types/components/form-field/form-field.d.ts +4 -0
  304. package/dist/types/components/grid/grid-interface.d.ts +14 -2
  305. package/dist/types/components/grid/grid-keyboard-event.d.ts +16 -0
  306. package/dist/types/components/grid/grid.d.ts +59 -4
  307. package/dist/types/components/grid-column/grid-column.d.ts +17 -0
  308. package/dist/types/components/input/input.d.ts +40 -17
  309. package/dist/types/components/modal/modal.d.ts +37 -1
  310. package/dist/types/components/native-select/native-select.d.ts +3 -1
  311. package/dist/types/components/progress-bar/progress-bar.d.ts +8 -3
  312. package/dist/types/components/progress-radial/progress-radial.d.ts +12 -0
  313. package/dist/types/components/radio/radio.d.ts +3 -0
  314. package/dist/types/components/radio-group/radio-group.d.ts +3 -1
  315. package/dist/types/components/select/select-interface.d.ts +12 -0
  316. package/dist/types/components/select/select-keyboard-event.d.ts +38 -0
  317. package/dist/types/components/select/select.d.ts +76 -15
  318. package/dist/types/components/select-option/select-option.d.ts +10 -4
  319. package/dist/types/components/switch/switch.d.ts +4 -1
  320. package/dist/types/components/tab/tab.d.ts +3 -0
  321. package/dist/types/components/tabs/tabs.d.ts +4 -0
  322. package/dist/types/components/textarea/textarea.d.ts +8 -4
  323. package/dist/types/components.d.ts +357 -55
  324. package/dist/types/utils/accessibility.d.ts +4 -0
  325. package/dist/types/utils/helpers.d.ts +12 -1
  326. package/dist/types/utils/keyboard-event.d.ts +13 -0
  327. package/dist/types/utils/mutable-aria-attribute.d.ts +5 -0
  328. package/dist/wcs/{p-7a3f70da.entry.js → p-00f6a79a.entry.js} +2 -2
  329. package/dist/wcs/{p-ee453b6e.entry.js → p-016e4dd9.entry.js} +2 -2
  330. package/dist/wcs/p-0ae177cf.js +2 -0
  331. package/dist/wcs/p-0ae177cf.js.map +1 -0
  332. package/dist/wcs/{p-f06f48f3.entry.js → p-0d02d9e4.entry.js} +2 -2
  333. package/dist/wcs/p-0d02d9e4.entry.js.map +1 -0
  334. package/dist/wcs/{p-30d8f9c3.entry.js → p-11ab4ffc.entry.js} +2 -2
  335. package/dist/wcs/p-13548191.entry.js +2 -0
  336. package/dist/wcs/p-13548191.entry.js.map +1 -0
  337. package/dist/wcs/p-13ffe5f3.entry.js +2 -0
  338. package/dist/wcs/p-13ffe5f3.entry.js.map +1 -0
  339. package/dist/wcs/{p-dfddec76.entry.js → p-17442a2f.entry.js} +2 -2
  340. package/dist/wcs/p-1d49a02e.entry.js +2 -0
  341. package/dist/wcs/p-1d49a02e.entry.js.map +1 -0
  342. package/dist/wcs/{p-d6c3e615.js → p-24611014.js} +2 -2
  343. package/dist/wcs/p-250b3794.entry.js +2 -0
  344. package/dist/wcs/{p-91b3e4b5.entry.js.map → p-250b3794.entry.js.map} +1 -1
  345. package/dist/wcs/{p-292ca644.entry.js → p-2d62b3dd.entry.js} +2 -2
  346. package/dist/wcs/{p-d6b3f742.entry.js → p-33a5594d.entry.js} +2 -2
  347. package/dist/wcs/p-33a570ee.js +2 -0
  348. package/dist/wcs/p-33a570ee.js.map +1 -0
  349. package/dist/wcs/{p-e86c6cbb.entry.js → p-34079054.entry.js} +2 -2
  350. package/dist/wcs/{p-e86c6cbb.entry.js.map → p-34079054.entry.js.map} +1 -1
  351. package/dist/wcs/{p-257b15b9.entry.js → p-36e83879.entry.js} +2 -2
  352. package/dist/wcs/p-44410e32.entry.js +2 -0
  353. package/dist/wcs/p-44410e32.entry.js.map +1 -0
  354. package/dist/wcs/{p-7269272f.entry.js → p-46184d47.entry.js} +2 -2
  355. package/dist/wcs/p-46975b1e.entry.js +2 -0
  356. package/dist/wcs/p-46975b1e.entry.js.map +1 -0
  357. package/dist/wcs/{p-4a9f8e94.entry.js → p-46d56c4e.entry.js} +3 -3
  358. package/dist/wcs/{p-fc3f5b53.entry.js → p-4820154c.entry.js} +2 -2
  359. package/dist/wcs/p-49b0de03.entry.js +2 -0
  360. package/dist/wcs/p-49b0de03.entry.js.map +1 -0
  361. package/dist/wcs/{p-ff9967eb.entry.js → p-4af68f13.entry.js} +2 -2
  362. package/dist/wcs/{p-1f8c73eb.entry.js → p-5f0ab1dc.entry.js} +2 -2
  363. package/dist/wcs/p-5f0ab1dc.entry.js.map +1 -0
  364. package/dist/wcs/p-5f3e6b0c.entry.js +2 -0
  365. package/dist/wcs/p-5f3e6b0c.entry.js.map +1 -0
  366. package/dist/wcs/{p-50dce764.entry.js → p-61b934a7.entry.js} +2 -2
  367. package/dist/wcs/p-64855188.js +2 -0
  368. package/dist/wcs/p-64855188.js.map +1 -0
  369. package/dist/wcs/p-680b107c.entry.js +2 -0
  370. package/dist/wcs/p-68d654da.js +2 -0
  371. package/dist/wcs/p-68d654da.js.map +1 -0
  372. package/dist/wcs/p-69d1223c.js +3 -0
  373. package/dist/wcs/p-69d1223c.js.map +1 -0
  374. package/dist/wcs/p-6f538b67.entry.js +2 -0
  375. package/dist/wcs/p-6f538b67.entry.js.map +1 -0
  376. package/dist/wcs/p-7c145ed0.entry.js +2 -0
  377. package/dist/wcs/p-7c145ed0.entry.js.map +1 -0
  378. package/dist/wcs/p-8724a296.entry.js +2 -0
  379. package/dist/wcs/p-8724a296.entry.js.map +1 -0
  380. package/dist/wcs/{p-d084dd61.entry.js → p-88b1cdfe.entry.js} +2 -2
  381. package/dist/wcs/{p-c7494651.entry.js → p-8ff7e463.entry.js} +2 -2
  382. package/dist/wcs/p-90a7fd68.entry.js +2 -0
  383. package/dist/wcs/p-90a7fd68.entry.js.map +1 -0
  384. package/dist/wcs/{p-cfcacc44.entry.js → p-914aa964.entry.js} +2 -2
  385. package/dist/wcs/p-93fcef08.entry.js +2 -0
  386. package/dist/wcs/p-93fcef08.entry.js.map +1 -0
  387. package/dist/wcs/{p-429bd9fb.entry.js → p-9b1c73b3.entry.js} +2 -2
  388. package/dist/wcs/p-9cc48d75.js +2 -0
  389. package/dist/wcs/p-9cc48d75.js.map +1 -0
  390. package/dist/wcs/p-a3518f66.entry.js +2 -0
  391. package/dist/wcs/p-a361d9f1.entry.js +2 -0
  392. package/dist/wcs/{p-31a8d23f.entry.js → p-a85208ca.entry.js} +2 -2
  393. package/dist/wcs/{p-d3f1cafe.entry.js → p-b91323fc.entry.js} +2 -2
  394. package/dist/wcs/{p-47d8ece5.entry.js → p-bd4029f8.entry.js} +2 -2
  395. package/dist/wcs/{p-e348058b.entry.js → p-bed4e3ce.entry.js} +2 -2
  396. package/dist/wcs/{p-f489793d.entry.js → p-c261353f.entry.js} +2 -2
  397. package/dist/wcs/p-c261353f.entry.js.map +1 -0
  398. package/dist/wcs/p-c3227f01.entry.js +2 -0
  399. package/dist/wcs/p-c3227f01.entry.js.map +1 -0
  400. package/dist/wcs/{p-810aff71.entry.js → p-c38adf4b.entry.js} +2 -2
  401. package/dist/wcs/{p-2185bf8b.entry.js → p-c6a8c6f9.entry.js} +2 -2
  402. package/dist/wcs/p-c9478849.entry.js +2 -0
  403. package/dist/wcs/p-c9478849.entry.js.map +1 -0
  404. package/dist/wcs/p-ce3ef5d0.entry.js +2 -0
  405. package/dist/wcs/p-ce3ef5d0.entry.js.map +1 -0
  406. package/dist/wcs/{p-54e29233.entry.js → p-ce40b012.entry.js} +2 -2
  407. package/dist/wcs/{p-54e29233.entry.js.map → p-ce40b012.entry.js.map} +1 -1
  408. package/dist/wcs/p-d6c482fc.entry.js +2 -0
  409. package/dist/wcs/p-d6c482fc.entry.js.map +1 -0
  410. package/dist/wcs/{p-1e43122f.entry.js → p-d84cee70.entry.js} +2 -2
  411. package/dist/wcs/p-d895b92c.entry.js +16 -0
  412. package/dist/wcs/p-d895b92c.entry.js.map +1 -0
  413. package/dist/wcs/p-dca2f42c.entry.js +2 -0
  414. package/dist/wcs/{p-7519a270.entry.js → p-e0d5908a.entry.js} +2 -2
  415. package/dist/wcs/{p-a5cd4c07.entry.js → p-e487ff2c.entry.js} +2 -2
  416. package/dist/wcs/p-e487ff2c.entry.js.map +1 -0
  417. package/dist/wcs/{p-3b1fc676.entry.js → p-e52c11e4.entry.js} +2 -2
  418. package/dist/wcs/{p-0ede0c37.entry.js → p-e7661047.entry.js} +2 -2
  419. package/dist/wcs/p-ea6e33ee.entry.js +2 -0
  420. package/dist/wcs/{p-cc03627c.entry.js → p-f7ce4e0d.entry.js} +2 -2
  421. package/dist/wcs/{p-b6160b7c.entry.js → p-faf04401.entry.js} +2 -2
  422. package/dist/wcs/p-fc1767ae.entry.js +2 -0
  423. package/dist/wcs/p-fc1767ae.entry.js.map +1 -0
  424. package/dist/wcs/p-feebc469.entry.js +2 -0
  425. package/dist/wcs/p-feebc469.entry.js.map +1 -0
  426. package/dist/wcs/wcs.css +1 -1
  427. package/dist/wcs/wcs.esm.js +1 -1
  428. package/dist/wcs/wcs.esm.js.map +1 -1
  429. package/package.json +1 -1
  430. package/dist/cjs/accessibility-e99b032d.js.map +0 -1
  431. package/dist/cjs/grid-pagination-4b55c908.js +0 -101
  432. package/dist/cjs/grid-pagination-4b55c908.js.map +0 -1
  433. package/dist/cjs/helpers-4a14051a.js.map +0 -1
  434. package/dist/cjs/index-ca67a6dc.js.map +0 -1
  435. package/dist/cjs/isEqual-9ea7ee49.js.map +0 -1
  436. package/dist/cjs/wcs-button.cjs.entry.js.map +0 -1
  437. package/dist/cjs/wcs-spinner.cjs.entry.js +0 -22
  438. package/dist/cjs/wcs-spinner.cjs.entry.js.map +0 -1
  439. package/dist/esm/accessibility-ffa12842.js.map +0 -1
  440. package/dist/esm/grid-pagination-41354861.js +0 -99
  441. package/dist/esm/grid-pagination-41354861.js.map +0 -1
  442. package/dist/esm/helpers-1d55b67f.js.map +0 -1
  443. package/dist/esm/index-dc4d96d4.js.map +0 -1
  444. package/dist/esm/isEqual-20881bca.js.map +0 -1
  445. package/dist/esm/wcs-button.entry.js.map +0 -1
  446. package/dist/esm/wcs-spinner.entry.js +0 -18
  447. package/dist/esm/wcs-spinner.entry.js.map +0 -1
  448. package/dist/wcs/p-02b95dbf.entry.js +0 -2
  449. package/dist/wcs/p-02b95dbf.entry.js.map +0 -1
  450. package/dist/wcs/p-0f8db386.js +0 -2
  451. package/dist/wcs/p-0f8db386.js.map +0 -1
  452. package/dist/wcs/p-17630eea.entry.js +0 -2
  453. package/dist/wcs/p-1f8c73eb.entry.js.map +0 -1
  454. package/dist/wcs/p-269d244c.entry.js +0 -2
  455. package/dist/wcs/p-269d244c.entry.js.map +0 -1
  456. package/dist/wcs/p-2f63d6c5.entry.js +0 -2
  457. package/dist/wcs/p-2f63d6c5.entry.js.map +0 -1
  458. package/dist/wcs/p-39821dd2.entry.js +0 -2
  459. package/dist/wcs/p-39821dd2.entry.js.map +0 -1
  460. package/dist/wcs/p-3dc6b507.js +0 -2
  461. package/dist/wcs/p-3dc6b507.js.map +0 -1
  462. package/dist/wcs/p-463667c9.entry.js +0 -2
  463. package/dist/wcs/p-475ac7c5.js +0 -2
  464. package/dist/wcs/p-475ac7c5.js.map +0 -1
  465. package/dist/wcs/p-4ffe4539.entry.js +0 -2
  466. package/dist/wcs/p-4ffe4539.entry.js.map +0 -1
  467. package/dist/wcs/p-57560d7d.entry.js +0 -2
  468. package/dist/wcs/p-57560d7d.entry.js.map +0 -1
  469. package/dist/wcs/p-61cab06f.entry.js +0 -2
  470. package/dist/wcs/p-61cab06f.entry.js.map +0 -1
  471. package/dist/wcs/p-627bbb6a.entry.js +0 -2
  472. package/dist/wcs/p-627bbb6a.entry.js.map +0 -1
  473. package/dist/wcs/p-6de70331.entry.js +0 -2
  474. package/dist/wcs/p-6de70331.entry.js.map +0 -1
  475. package/dist/wcs/p-747a5962.entry.js +0 -2
  476. package/dist/wcs/p-8181f8cd.js +0 -2
  477. package/dist/wcs/p-8181f8cd.js.map +0 -1
  478. package/dist/wcs/p-8c4ed883.entry.js +0 -2
  479. package/dist/wcs/p-8c4ed883.entry.js.map +0 -1
  480. package/dist/wcs/p-8d57835f.entry.js +0 -2
  481. package/dist/wcs/p-8fed8b1c.entry.js +0 -2
  482. package/dist/wcs/p-8fed8b1c.entry.js.map +0 -1
  483. package/dist/wcs/p-91b3e4b5.entry.js +0 -2
  484. package/dist/wcs/p-9910fedd.entry.js +0 -2
  485. package/dist/wcs/p-9910fedd.entry.js.map +0 -1
  486. package/dist/wcs/p-9d798de4.entry.js +0 -2
  487. package/dist/wcs/p-9d798de4.entry.js.map +0 -1
  488. package/dist/wcs/p-9ecdeaf9.entry.js +0 -2
  489. package/dist/wcs/p-9ecdeaf9.entry.js.map +0 -1
  490. package/dist/wcs/p-a2df3a49.js +0 -3
  491. package/dist/wcs/p-a2df3a49.js.map +0 -1
  492. package/dist/wcs/p-a5cd4c07.entry.js.map +0 -1
  493. package/dist/wcs/p-ac106663.entry.js +0 -2
  494. package/dist/wcs/p-ac106663.entry.js.map +0 -1
  495. package/dist/wcs/p-cb90bc3a.entry.js +0 -2
  496. package/dist/wcs/p-cb90bc3a.entry.js.map +0 -1
  497. package/dist/wcs/p-cdd172b4.entry.js +0 -2
  498. package/dist/wcs/p-d5a0e271.entry.js +0 -2
  499. package/dist/wcs/p-d5a0e271.entry.js.map +0 -1
  500. package/dist/wcs/p-ec84d6fd.entry.js +0 -16
  501. package/dist/wcs/p-ec84d6fd.entry.js.map +0 -1
  502. package/dist/wcs/p-ed3132be.entry.js +0 -2
  503. package/dist/wcs/p-ed3132be.entry.js.map +0 -1
  504. package/dist/wcs/p-f06f48f3.entry.js.map +0 -1
  505. package/dist/wcs/p-f20b9024.entry.js +0 -2
  506. package/dist/wcs/p-f20b9024.entry.js.map +0 -1
  507. package/dist/wcs/p-f489793d.entry.js.map +0 -1
  508. /package/dist/wcs/{p-7a3f70da.entry.js.map → p-00f6a79a.entry.js.map} +0 -0
  509. /package/dist/wcs/{p-ee453b6e.entry.js.map → p-016e4dd9.entry.js.map} +0 -0
  510. /package/dist/wcs/{p-30d8f9c3.entry.js.map → p-11ab4ffc.entry.js.map} +0 -0
  511. /package/dist/wcs/{p-dfddec76.entry.js.map → p-17442a2f.entry.js.map} +0 -0
  512. /package/dist/wcs/{p-d6c3e615.js.map → p-24611014.js.map} +0 -0
  513. /package/dist/wcs/{p-292ca644.entry.js.map → p-2d62b3dd.entry.js.map} +0 -0
  514. /package/dist/wcs/{p-d6b3f742.entry.js.map → p-33a5594d.entry.js.map} +0 -0
  515. /package/dist/wcs/{p-257b15b9.entry.js.map → p-36e83879.entry.js.map} +0 -0
  516. /package/dist/wcs/{p-7269272f.entry.js.map → p-46184d47.entry.js.map} +0 -0
  517. /package/dist/wcs/{p-4a9f8e94.entry.js.map → p-46d56c4e.entry.js.map} +0 -0
  518. /package/dist/wcs/{p-fc3f5b53.entry.js.map → p-4820154c.entry.js.map} +0 -0
  519. /package/dist/wcs/{p-ff9967eb.entry.js.map → p-4af68f13.entry.js.map} +0 -0
  520. /package/dist/wcs/{p-50dce764.entry.js.map → p-61b934a7.entry.js.map} +0 -0
  521. /package/dist/wcs/{p-17630eea.entry.js.map → p-680b107c.entry.js.map} +0 -0
  522. /package/dist/wcs/{p-d084dd61.entry.js.map → p-88b1cdfe.entry.js.map} +0 -0
  523. /package/dist/wcs/{p-c7494651.entry.js.map → p-8ff7e463.entry.js.map} +0 -0
  524. /package/dist/wcs/{p-cfcacc44.entry.js.map → p-914aa964.entry.js.map} +0 -0
  525. /package/dist/wcs/{p-429bd9fb.entry.js.map → p-9b1c73b3.entry.js.map} +0 -0
  526. /package/dist/wcs/{p-8d57835f.entry.js.map → p-a3518f66.entry.js.map} +0 -0
  527. /package/dist/wcs/{p-463667c9.entry.js.map → p-a361d9f1.entry.js.map} +0 -0
  528. /package/dist/wcs/{p-31a8d23f.entry.js.map → p-a85208ca.entry.js.map} +0 -0
  529. /package/dist/wcs/{p-d3f1cafe.entry.js.map → p-b91323fc.entry.js.map} +0 -0
  530. /package/dist/wcs/{p-47d8ece5.entry.js.map → p-bd4029f8.entry.js.map} +0 -0
  531. /package/dist/wcs/{p-e348058b.entry.js.map → p-bed4e3ce.entry.js.map} +0 -0
  532. /package/dist/wcs/{p-810aff71.entry.js.map → p-c38adf4b.entry.js.map} +0 -0
  533. /package/dist/wcs/{p-2185bf8b.entry.js.map → p-c6a8c6f9.entry.js.map} +0 -0
  534. /package/dist/wcs/{p-1e43122f.entry.js.map → p-d84cee70.entry.js.map} +0 -0
  535. /package/dist/wcs/{p-747a5962.entry.js.map → p-dca2f42c.entry.js.map} +0 -0
  536. /package/dist/wcs/{p-7519a270.entry.js.map → p-e0d5908a.entry.js.map} +0 -0
  537. /package/dist/wcs/{p-3b1fc676.entry.js.map → p-e52c11e4.entry.js.map} +0 -0
  538. /package/dist/wcs/{p-0ede0c37.entry.js.map → p-e7661047.entry.js.map} +0 -0
  539. /package/dist/wcs/{p-cdd172b4.entry.js.map → p-ea6e33ee.entry.js.map} +0 -0
  540. /package/dist/wcs/{p-cc03627c.entry.js.map → p-f7ce4e0d.entry.js.map} +0 -0
  541. /package/dist/wcs/{p-b6160b7c.entry.js.map → p-faf04401.entry.js.map} +0 -0
@@ -1,8 +1,9 @@
1
1
  import { forceUpdate, h, Host } from '@stencil/core';
2
- import { getSortOrderInteger } from './grid-interface';
2
+ import { getSortOrderInteger, } from './grid-interface';
3
3
  import { v4 as uuid } from 'uuid';
4
- import { cloneDeep, isEqual, get } from 'lodash-es';
4
+ import { cloneDeep, get, isEqual } from 'lodash-es';
5
5
  import { GridPagination } from '../grid-pagination/grid-pagination';
6
+ import { getActionForKeyboardEvent } from "./grid-keyboard-event";
6
7
  /**
7
8
  * The grid component is a complex component used as an HTML table to display collections of data.
8
9
  *
@@ -23,6 +24,11 @@ export class Grid {
23
24
  this.columns = undefined;
24
25
  this.paginationEl = undefined;
25
26
  this.rows = [];
27
+ this.cursorPosition = { col: 0, row: 1 };
28
+ }
29
+ onCursorPositionChange(newValue) {
30
+ // Notify all grid columns that the cursorPosition has changed
31
+ this.getGridColumnsFromTemplate().forEach(g => g.cursorPosition = newValue);
26
32
  }
27
33
  onDataChange(newValue) {
28
34
  this.updateGridRows(newValue);
@@ -31,10 +37,145 @@ export class Grid {
31
37
  onSelectedItemsPropertyChange(newValue) {
32
38
  this.updateSelectionWithValues(newValue);
33
39
  }
40
+ onFocus() {
41
+ var _a;
42
+ (_a = this.getElementToFocusAtCursorPosition()) === null || _a === void 0 ? void 0 : _a.focus();
43
+ }
44
+ /**
45
+ * If selectionConfig is different from `none`, that means that an extra column for radio or checkbox is rendered
46
+ * in the table.
47
+ */
48
+ hasSelectionColumn() {
49
+ return this.selectionConfig !== 'none';
50
+ }
51
+ /**
52
+ * Returns the element to focus at the current cursor position : it can be a cell (td, th) to focus or a nested
53
+ * checkbox / radio element if the selection mode is single or multiple
54
+ */
55
+ getElementToFocusAtCursorPosition() {
56
+ var _a, _b;
57
+ const el = (_a = this.gridElementsWithCoordinates.find(cell => { var _a, _b; return cell.col === ((_a = this.cursorPosition) === null || _a === void 0 ? void 0 : _a.col) && cell.row === ((_b = this.cursorPosition) === null || _b === void 0 ? void 0 : _b.row); })) === null || _a === void 0 ? void 0 : _a.el;
58
+ return this.hasSelectionColumn()
59
+ ? (_b = el.querySelector('wcs-checkbox,wcs-radio')) !== null && _b !== void 0 ? _b : el
60
+ : el;
61
+ }
62
+ moveCursorPosition(directionX, directionY) {
63
+ var _a;
64
+ this.cursorPosition = {
65
+ col: directionX === 'first' ? 0 :
66
+ directionX === 'last' ? this.totalDisplayedColumnCount() - 1 :
67
+ Math.min(Math.max(this.cursorPosition.col + directionX, 0), this.totalDisplayedColumnCount() - 1),
68
+ row: directionY === 'first' ? 0 :
69
+ directionY === 'last' ? this.getRowsForCurrentPage().length :
70
+ Math.min(Math.max(this.cursorPosition.row + directionY, 0), this.getRowsForCurrentPage().length)
71
+ };
72
+ this.handleCursorPositionOnEmptyTh();
73
+ (_a = this.getElementToFocusAtCursorPosition()) === null || _a === void 0 ? void 0 : _a.focus();
74
+ }
75
+ /**
76
+ * When the grid has selectionConfig single, an empty th appears at col=0, row=0.
77
+ * It should not be focusable so the cursor navigates to col=1, row=0 instead.
78
+ */
79
+ handleCursorPositionOnEmptyTh() {
80
+ if (this.selectionConfig === 'single' && this.cursorPosition.col === 0 && this.cursorPosition.row === 0) {
81
+ this.cursorPosition = {
82
+ col: 1,
83
+ row: 0
84
+ };
85
+ }
86
+ }
34
87
  onHiddenColumnChange() {
35
88
  // We use forceUpdate because the fact of hiding a column or not does not modify the internal structure of the grid (WcsGridRow).
36
89
  // Hide a column only impacts the way it is rendered but the grid-column remains in the dom and in our internal model.
37
90
  forceUpdate(this);
91
+ this.cursorPosition = { col: 0, row: 1 };
92
+ }
93
+ onKeyDown(_event) {
94
+ var _a;
95
+ if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) === 'WCS-GRID-PAGINATION') {
96
+ return;
97
+ }
98
+ let type;
99
+ switch (this.selectionConfig) {
100
+ case "multiple":
101
+ type = 'grid_selection_multiple';
102
+ break;
103
+ case "single":
104
+ type = 'grid_selection_single';
105
+ break;
106
+ case "none":
107
+ type = 'grid_no_selection';
108
+ break;
109
+ }
110
+ const actionsFromKeyboardEvents = getActionForKeyboardEvent(_event, type);
111
+ // If we have at least one associated actions, we prevent the default behavior of the event.
112
+ // Except if the action is a focus move (we have to handle the preventDefault behavior ourselves in the action implementation)
113
+ if (actionsFromKeyboardEvents.length != 0) {
114
+ _event.preventDefault();
115
+ }
116
+ for (const actionFromKeyboardEvent of actionsFromKeyboardEvents) {
117
+ this.doActionFromKeyboardEventAssociatedAction(actionFromKeyboardEvent, _event);
118
+ }
119
+ }
120
+ doActionFromKeyboardEventAssociatedAction(actionFromKeyboardEvent, event) {
121
+ switch (actionFromKeyboardEvent.kind) {
122
+ case "FocusCell":
123
+ switch (actionFromKeyboardEvent.target) {
124
+ case "up":
125
+ this.moveCursorPosition(0, -1);
126
+ break;
127
+ case "down":
128
+ this.moveCursorPosition(0, 1);
129
+ break;
130
+ case "left":
131
+ this.moveCursorPosition(-1, 0);
132
+ break;
133
+ case "right":
134
+ this.moveCursorPosition(1, 0);
135
+ break;
136
+ case "first_of_row":
137
+ this.moveCursorPosition('first', 0);
138
+ break;
139
+ case "last_of_row":
140
+ this.moveCursorPosition('last', 0);
141
+ break;
142
+ case "first_of_grid":
143
+ this.moveCursorPosition('first', 'first');
144
+ break;
145
+ case "last_of_grid":
146
+ this.moveCursorPosition('last', 'last');
147
+ break;
148
+ default:
149
+ break;
150
+ }
151
+ case "SelectRow":
152
+ switch (actionFromKeyboardEvent.target) {
153
+ case "one":
154
+ event.preventDefault();
155
+ if (this.cursorPosition.row > 0) {
156
+ this.onRowSelection(this.rows[this.cursorPosition.row - 1]);
157
+ }
158
+ break;
159
+ case "all":
160
+ this.selectAllRows();
161
+ break;
162
+ default:
163
+ break;
164
+ }
165
+ break;
166
+ default:
167
+ throw new Error("Internal error");
168
+ }
169
+ }
170
+ onClick(_event) {
171
+ const clickedGridElement = _event.composedPath()
172
+ .filter(x => ['TD', 'TH']
173
+ .includes(x.nodeName))[0];
174
+ const clickedGridElementWithCoordinates = this.gridElementsWithCoordinates.find(e => e.el === clickedGridElement);
175
+ this.cursorPosition = {
176
+ col: clickedGridElementWithCoordinates.col,
177
+ row: clickedGridElementWithCoordinates.row,
178
+ };
38
179
  }
39
180
  updateSelectionWithValues(values) {
40
181
  if (this.selectionConfig === 'single') {
@@ -70,7 +211,10 @@ export class Grid {
70
211
  selected: false,
71
212
  cells: []
72
213
  };
214
+ let index = 0;
73
215
  for (const column of this.columns) {
216
+ column.columnPosition = index + (this.hasSelectionColumn() ? 1 : 0);
217
+ index++;
74
218
  row.cells.push({
75
219
  content: get(data[i], column.path),
76
220
  column,
@@ -98,14 +242,14 @@ export class Grid {
98
242
  * Handle existing column's filters (defined before the grid is instantiated)
99
243
  * @private
100
244
  */
101
- refreshSort(refreshOthersColmumnsSortOrderState) {
245
+ refreshSort(refreshOthersColumnsSortOrderState) {
102
246
  //fixme: why the column property can be null or undefined?
103
247
  if (this.columns) {
104
248
  const [first, ...other] = this.columns.filter(c => c.sortOrder !== 'none');
105
249
  if (first && !this.serverMode) {
106
250
  this.sortBy(first);
107
251
  }
108
- refreshOthersColmumnsSortOrderState && this.disableSortOrderForColumns(other);
252
+ refreshOthersColumnsSortOrderState && this.disableSortOrderForColumns(other);
109
253
  }
110
254
  }
111
255
  disableSortOrderForColumns(columns) {
@@ -119,6 +263,34 @@ export class Grid {
119
263
  const slotted = this.el.shadowRoot.querySelector('slot[name="grid-pagination"]');
120
264
  return slotted.assignedElements();
121
265
  }
266
+ get gridElementsWithCoordinates() {
267
+ const gridElements = [];
268
+ // If selection multiple, the first cell should be added to the list
269
+ if (this.selectionConfig === 'multiple') {
270
+ gridElements.push({
271
+ el: this.el.shadowRoot.querySelector('th'),
272
+ row: 0,
273
+ col: 0
274
+ });
275
+ }
276
+ this.getGridColumnsFromTemplate()
277
+ .filter(col => !col.hidden)
278
+ .forEach((col, index) => {
279
+ gridElements.push({
280
+ el: col.shadowRoot.querySelector('th'),
281
+ row: 0,
282
+ col: index + (this.hasSelectionColumn() ? 1 : 0),
283
+ });
284
+ });
285
+ this.el.shadowRoot.querySelectorAll('td').forEach((cell, index) => {
286
+ gridElements.push({
287
+ el: cell,
288
+ row: 1 + Math.floor(index / this.totalDisplayedColumnCount()),
289
+ col: index % this.totalDisplayedColumnCount(),
290
+ });
291
+ });
292
+ return gridElements;
293
+ }
122
294
  sortChangeEventHandler(event) {
123
295
  if (event.detail.order === 'none')
124
296
  return;
@@ -131,19 +303,19 @@ export class Grid {
131
303
  }
132
304
  /**
133
305
  * Sorts the grid rows according to the given column's configuration
134
- * @param colmun Column from which to extract the sorting configuration
306
+ * @param column Column from which to extract the sorting configuration
135
307
  * @private
136
308
  */
137
- sortBy(colmun) {
138
- if (colmun.sortFn) {
309
+ sortBy(column) {
310
+ if (column.sortFn) {
139
311
  this.rows = cloneDeep(this.rows)
140
- .sort((a, b) => colmun.sortFn(a.data, b.data, colmun) * getSortOrderInteger(colmun.sortOrder));
312
+ .sort((a, b) => column.sortFn(a.data, b.data, column) * getSortOrderInteger(column.sortOrder));
141
313
  }
142
314
  else {
143
315
  this.rows = cloneDeep(this.rows)
144
316
  .sort((a, b) => {
145
- const path = colmun.path;
146
- return ((get(a.data, path) < get(b.data, path)) ? -1 : (get(a.data, path) > get(b.data, path)) ? 1 : 0) * getSortOrderInteger(colmun.sortOrder);
317
+ const path = column.path;
318
+ return ((get(a.data, path) < get(b.data, path)) ? -1 : (get(a.data, path) > get(b.data, path)) ? 1 : 0) * getSortOrderInteger(column.sortOrder);
147
319
  });
148
320
  }
149
321
  }
@@ -184,15 +356,25 @@ export class Grid {
184
356
  }
185
357
  row.selected = !row.selected;
186
358
  if (this.selectionConfig !== 'single' || row.selected) {
187
- this.wcsGridSelectionChange.emit({ row: this.wcsGridRowToWcsGridRowData(row) });
359
+ this.wcsGridSelectionChange.emit({
360
+ selectedRows: this.selectedRows.map(row => this.wcsGridRowToWcsGridRowData(row)),
361
+ changedRow: this.wcsGridRowToWcsGridRowData(row)
362
+ });
188
363
  }
189
364
  this.rows = cloneDeep(this.rows);
190
365
  }
366
+ get selectedRows() {
367
+ return this.rows.filter(r => r.selected);
368
+ }
191
369
  selectAllRows() {
192
370
  const rows = this.getRowsForCurrentPage();
193
371
  const selected = !this.allRowsAreSelected();
194
372
  rows.map(r => r.selected = selected);
195
373
  this.wcsGridAllSelectionChange.emit({ rows: selected ? rows.map(row => this.wcsGridRowToWcsGridRowData(row)) : [] });
374
+ this.wcsGridSelectionChange.emit({
375
+ selectedRows: this.selectedRows.map(row => this.wcsGridRowToWcsGridRowData(row)),
376
+ changedRow: 'allCheckbox'
377
+ });
196
378
  this.rows = cloneDeep(this.rows);
197
379
  }
198
380
  allRowsAreSelected() {
@@ -205,14 +387,15 @@ export class Grid {
205
387
  }
206
388
  return this.rows;
207
389
  }
208
- renderSelectionColumn(row) {
390
+ renderSelectionColumn(row, rowIndex) {
391
+ var _a, _b, _c, _d;
209
392
  switch (this.selectionConfig) {
210
393
  case 'none':
211
394
  return;
212
395
  case 'single':
213
- return h("td", null, h("wcs-radio", { checked: row.selected, onWcsRadioClick: this.onRowSelection.bind(this, row) }));
396
+ return h("td", { "aria-colindex": this.atLeastOneColumnHidden() ? 1 : null, tabIndex: ((_a = this.cursorPosition) === null || _a === void 0 ? void 0 : _a.col) === 0 && rowIndex + 1 === ((_b = this.cursorPosition) === null || _b === void 0 ? void 0 : _b.row) ? 0 : -1 }, h("wcs-radio", { tabIndex: -1, checked: row.selected, onWcsRadioClick: this.onRowSelection.bind(this, row) }));
214
397
  case 'multiple':
215
- return h("td", null, h("wcs-checkbox", { checked: row.selected, onWcsChange: this.onRowSelection.bind(this, row) }));
398
+ return h("td", { "aria-colindex": this.atLeastOneColumnHidden() ? 1 : null, tabIndex: ((_c = this.cursorPosition) === null || _c === void 0 ? void 0 : _c.col) === 0 && rowIndex + 1 === ((_d = this.cursorPosition) === null || _d === void 0 ? void 0 : _d.row) ? 0 : -1 }, h("wcs-checkbox", { tabIndex: -1, checked: row.selected, onWcsChange: this.onRowSelection.bind(this, row) }));
216
399
  }
217
400
  }
218
401
  getCellContent(row, cell) {
@@ -221,30 +404,61 @@ export class Grid {
221
404
  }
222
405
  return cell.content;
223
406
  }
407
+ /**
408
+ * Returns the total number of columns
409
+ * @private
410
+ */
224
411
  totalColumnCount() {
225
412
  if (!this.columns) {
226
413
  return 0;
227
414
  }
228
- return this.columns.length + (this.selectionConfig === 'none' ? 0 : 1);
415
+ return this.columns.length + (this.hasSelectionColumn() ? 1 : 0);
416
+ }
417
+ /**
418
+ * Returns the total number of columns that are not hidden
419
+ * @private
420
+ */
421
+ totalDisplayedColumnCount() {
422
+ var _a, _b;
423
+ return (_b = this.totalColumnCount() - ((_a = this.columns) === null || _a === void 0 ? void 0 : _a.filter(col => col.hidden).length)) !== null && _b !== void 0 ? _b : 0;
424
+ }
425
+ /**
426
+ * Returns true if at least one column is hidden from the table
427
+ * @private
428
+ */
429
+ atLeastOneColumnHidden() {
430
+ return this.totalDisplayedColumnCount() !== this.totalColumnCount();
229
431
  }
230
432
  render() {
231
- var _a;
232
- return (h(Host, null, h("table", null, h("thead", null, this.selectionConfig === 'none' ? ''
433
+ var _a, _b, _c, _d;
434
+ return (h(Host, null, h("table", { role: "grid", "aria-rowcount": !this.loading && ((_a = this.rows) === null || _a === void 0 ? void 0 : _a.length), "aria-colcount": !this.loading && this.totalDisplayedColumnCount() }, h("thead", null, h("tr", { "aria-rowindex": "1" }, this.selectionConfig === 'none' ? ''
233
435
  : h("th", { class: "wcs-grid-selection-column" }, this.selectionConfig === 'single' ? '' :
234
- h("wcs-checkbox", { checked: this.allRowsAreSelected(), onWcsChange: this.selectAllRows.bind(this) })), h("slot", { name: "grid-column" })), h("tbody", null, this.loading
235
- ? h("tr", null, h("td", { colSpan: this.totalColumnCount(), class: "loading" }, h("wcs-spinner", null)))
236
- : (_a = this.rows) === null || _a === void 0 ? void 0 : _a.filter(row => this.serverMode || !this.paginationEl || row.page === this.paginationEl.currentPage).map(row => this.renderRow(row)))), h("slot", { name: "grid-pagination" })));
436
+ h("wcs-checkbox", { tabIndex: ((_b = this.cursorPosition) === null || _b === void 0 ? void 0 : _b.col) === 0
437
+ && ((_c = this.cursorPosition) === null || _c === void 0 ? void 0 : _c.row) === 0 ? 0 : -1, checked: this.allRowsAreSelected(), onWcsChange: this.selectAllRows.bind(this) })), h("slot", { name: "grid-column" }))), h("tbody", null, this.loading
438
+ ? h("tr", { "aria-busy": "true" }, h("td", { colSpan: this.totalColumnCount(), class: "loading" }, h("wcs-spinner", null)))
439
+ : (_d = this.rows) === null || _d === void 0 ? void 0 : _d.filter(row => this.serverMode || !this.paginationEl || row.page === this.paginationEl.currentPage).map((row, index) => this.renderRow(row, index)))), h("slot", { name: "grid-pagination" })));
237
440
  }
238
- renderRow(row) {
441
+ /**
442
+ * Returns the row with all mapped cells inside.
443
+ * The aria-rowindex here starts at 2 because the header row starts at index 1.
444
+ * @private
445
+ */
446
+ renderRow(row, rowIndex) {
239
447
  var _a;
240
- return h("tr", { class: row.selected ? 'selected' : '' }, this.renderSelectionColumn(row), (_a = row.cells) === null || _a === void 0 ? void 0 :
241
- _a.map(cell => {
448
+ let hiddenColumnCount = 0;
449
+ return h("tr", { class: row.selected ? 'selected' : '', "aria-selected": row.selected ? 'true' : null, "aria-rowindex": rowIndex + 2 }, this.renderSelectionColumn(row, rowIndex), (_a = row.cells) === null || _a === void 0 ? void 0 :
450
+ _a.map((cell, cellIndex) => {
451
+ var _a, _b;
242
452
  if (cell.column.hidden) {
453
+ hiddenColumnCount++;
243
454
  return;
244
455
  }
456
+ const nonHiddenColumnIndex = cellIndex - hiddenColumnCount + 1 + (this.hasSelectionColumn() ? 1 : 0);
457
+ const cursorIsOnCell = nonHiddenColumnIndex - 1 === ((_a = this.cursorPosition) === null || _a === void 0 ? void 0 : _a.col)
458
+ && rowIndex + 1 === ((_b = this.cursorPosition) === null || _b === void 0 ? void 0 : _b.row);
245
459
  return cell.column.customCells
246
- ? (h("td", null, h("slot", { name: cell.column.id + '-' + row.data[this.rowIdPath] })))
247
- : (h("td", { part: cell.column.path + '-column' }, this.getCellContent(row, cell)));
460
+ ? (h("td", { tabIndex: cursorIsOnCell ? 0 : -1, "aria-colindex": this.atLeastOneColumnHidden() ? nonHiddenColumnIndex : null }, h("slot", { name: cell.column.id + '-' + row.data[this.rowIdPath] })))
461
+ : (h("td", { tabIndex: cursorIsOnCell ? 0 : -1, "aria-colindex": this.atLeastOneColumnHidden() ? nonHiddenColumnIndex : null, part: cell.column.path + '-column' }, this.getCellContent(row, cell)));
248
462
  }));
249
463
  }
250
464
  static get is() { return "wcs-grid"; }
@@ -392,7 +606,8 @@ export class Grid {
392
606
  return {
393
607
  "columns": {},
394
608
  "paginationEl": {},
395
- "rows": {}
609
+ "rows": {},
610
+ "cursorPosition": {}
396
611
  };
397
612
  }
398
613
  static get events() {
@@ -407,10 +622,10 @@ export class Grid {
407
622
  "text": "Event emitted when a row is selected or unselected"
408
623
  },
409
624
  "complexType": {
410
- "original": "WcsGridRowSelectedEventDetails",
411
- "resolved": "WcsGridRowSelectedEventDetails",
625
+ "original": "WcsGridSelectionEventDetails",
626
+ "resolved": "WcsGridSelectionEventDetails",
412
627
  "references": {
413
- "WcsGridRowSelectedEventDetails": {
628
+ "WcsGridSelectionEventDetails": {
414
629
  "location": "import",
415
630
  "path": "./grid-interface"
416
631
  }
@@ -441,6 +656,9 @@ export class Grid {
441
656
  static get elementRef() { return "el"; }
442
657
  static get watchers() {
443
658
  return [{
659
+ "propName": "cursorPosition",
660
+ "methodName": "onCursorPositionChange"
661
+ }, {
444
662
  "propName": "data",
445
663
  "methodName": "onDataChange"
446
664
  }, {
@@ -450,11 +668,29 @@ export class Grid {
450
668
  }
451
669
  static get listeners() {
452
670
  return [{
671
+ "name": "focus",
672
+ "method": "onFocus",
673
+ "target": undefined,
674
+ "capture": false,
675
+ "passive": false
676
+ }, {
453
677
  "name": "wcsHiddenChange",
454
678
  "method": "onHiddenColumnChange",
455
679
  "target": undefined,
456
680
  "capture": false,
457
681
  "passive": false
682
+ }, {
683
+ "name": "keydown",
684
+ "method": "onKeyDown",
685
+ "target": undefined,
686
+ "capture": false,
687
+ "passive": false
688
+ }, {
689
+ "name": "mousedown",
690
+ "method": "onClick",
691
+ "target": undefined,
692
+ "capture": false,
693
+ "passive": true
458
694
  }, {
459
695
  "name": "wcsSortChange",
460
696
  "method": "sortChangeEventHandler",
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/components/grid/grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EAGT,OAAO,EACP,KAAK,EAEL,WAAW,EACX,CAAC,EACD,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EAEL,KAAK,EACR,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,mBAAmB,EAUtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE;;;;;;;GAOG;AAMH,MAAM,OAAO,IAAI;;sBAKiB,KAAK;;;2BAee,MAAM;yBAInB,EAAE;;;;;gBAeD,EAAE;;EAWxC,YAAY,CAAC,QAAe;IACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,CAAC;EAGD,6BAA6B,CAAC,QAAqB;IAC/C,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;EAC7C,CAAC;EAGD,oBAAoB;IAChB,iIAAiI;IACjI,sHAAsH;IACtH,WAAW,CAAC,IAAI,CAAC,CAAC;EACtB,CAAC;EAEO,yBAAyB,CAAC,MAAmB;IACjD,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;MACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;MACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;UAC3B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;UACpB,MAAM,CAAC,gCAAgC;SAC1C;OACJ;KACJ;SAAM,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE;MAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;MACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;QACzB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;UACxC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;SACvB;OACJ;KACJ;IACD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrC,CAAC;EAEO,0BAA0B,CAAC,GAAe;IAC9C,OAAO,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC;EACpE,CAAC;EAEO,cAAc,CAAC,IAAW;IAC9B,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;MACtB,4DAA4D;MAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,GAAG,GAAe;UACpB,IAAI,EAAE,IAAI,EAAE;UACZ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;UACb,QAAQ,EAAE,KAAK;UACf,KAAK,EAAE,EAAE;SACZ,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;UAC/B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;YAClC,MAAM;YACN,SAAS,EAAE,MAAM,CAAC,SAAS;WAC9B,CAAC,CAAA;SACL;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;OAClB;MACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;MACjB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;EACL,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB;MACxC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAiC;MACnF,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,aAAa,EAAE;MACpB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtD;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC;EAED;;;KAGG;EACK,WAAW,CAAC,mCAA4C;IAC5D,0DAA0D;IAC1D,IAAI,IAAI,CAAC,OAAO,EAAE;MACd,MAAM,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;MAC3E,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;OACtB;MACD,mCAAmC,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;KACjF;EACL,CAAC;EAEO,0BAA0B,CAAC,OAAsD;IACrF,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;EAChD,CAAC;EAEO,0BAA0B;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,0BAA0B,CAAoB,CAAC;IAChG,OAAO,OAAO,CAAC,gBAAgB,EAAuC,CAAC;EAC3E,CAAC;EAEO,8BAA8B;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,8BAA8B,CAAoB,CAAC;IACpG,OAAO,OAAO,CAAC,gBAAgB,EAA2C,CAAC;EAC/E,CAAC;EAGD,sBAAsB,CAAC,KAAuD;IAC1E,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;MAAE,OAAO;IAC1C,sCAAsC;IACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrF,IAAI,IAAI,CAAC,UAAU;MAAE,OAAO;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,eAAe,EAAE,CAAC;EAC3B,CAAC;EAED;;;;KAIG;EACK,MAAM,CAAC,MAAgC;IAC3C,IAAI,MAAM,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KAChH;SAAM;MACH,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;MACpJ,CAAC,CAAC,CAAC;KACV;EACL,CAAC;EAED;;KAEG;EACK,eAAe;IACnB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE;MACvC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;MAChD,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;MAEvF,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,EAAE;QAClC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC,gBAAgB,CAAC;OACnE;WAAM,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;QAC3G,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC;OACnE;MAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAe,EAAE,KAAa,EAAE,EAAE,CAC5C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC5D,CAAC;MACF,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;KACzB;EACL,CAAC;EAGD,4BAA4B;IACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;EAC9B,CAAC;EAGD,mCAAmC,CAAC,KAAuD;IACvF,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,KAAM,KAAK,CAAC,MAAsB,CAAC,EAAE,EAAE;MAC3F,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;EACL,CAAC;EAEO,kBAAkB;IACtB,IAAI,IAAI,CAAC,UAAU;MAAE,OAAO;IAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;EAC3B,CAAC;EAEO,cAAc,CAAC,GAAe;IAClC,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;MACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;KAC3E;IACD,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE;MACnD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;KACjF;IACD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrC,CAAC;EAEO,aAAa;IACjB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC;IACnH,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrC,CAAC;EAEO,kBAAkB;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;EACtF,CAAC;EAEO,qBAAqB;IACzB,IAAI,IAAI,CAAC,YAAY,EAAE;MACnB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;KAC9E;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;EACrB,CAAC;EAED,qBAAqB,CAAC,GAAe;IACjC,QAAQ,IAAI,CAAC,eAAe,EAAE;MAC1B,KAAK,MAAM;QACP,OAAO;MACX,KAAK,QAAQ;QACT,OAAO;UACH,iBAAW,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CACxF,CAAC;MACV,KAAK,UAAU;QACX,OAAO;UACH,oBAAc,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CACvF,CAAC;KACb;EACL,CAAC;EAEO,cAAc,CAAC,GAAe,EAAE,IAAiB;IACrD,IAAI,IAAI,CAAC,SAAS,EAAE;MAChB,OAAO,IAAI,CAAC,SAAS,CAChB,CAAiC,EAClC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CACvC,CAAC;KACL;IACD,OAAO,IAAI,CAAC,OAAO,CAAC;EACxB,CAAC;EAEO,gBAAgB;IACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACf,OAAO,CAAC,CAAC;KACZ;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3E,CAAC;EAED,MAAM;;IACF,OAAO,CACH,EAAC,IAAI;MAEG;QACI;UAEI,IAAI,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;YAChC,CAAC,CAAC,UAAI,KAAK,EAAC,2BAA2B,IAE/B,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;cACpC,oBAAc,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAClC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAElE;UAEb,YAAM,IAAI,EAAC,aAAa,GAAQ,CACxB;QACR,iBAEI,IAAI,CAAC,OAAO;UACR,CAAC,CAAC;YACE,UAAI,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAC,SAAS;cACjD,sBAA2B,CAC1B,CACJ;UACL,CAAC,CAAC,MAAA,IAAI,CAAC,IAAI,0CACL,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,EAClG,GAAG,CAAC,GAAG,CAAC,EAAE,CACP,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CACtB,CAEL,CACJ;MAEZ,YAAM,IAAI,EAAC,iBAAiB,GAAQ,CACjC,CACV,CAAC;EACN,CAAC;EAEO,SAAS,CAAC,GAAe;;IAC7B,OAAO,UAAI,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;MAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAC/B,MAAA,GAAG,CAAC,KAAK;SAAE,GAAG,CAAC,IAAI,CAAC,EAAE;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;UACpB,OAAO;SACV;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW;UAC1B,CAAC,CAAC,CAAC;YACC,YAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAC7D,CAAC;UACN,CAAC,CAAC,CAAC,UAAI,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,IAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAM,CAAC,CAAA;MACzF,CAAC,CACJ,CACA,CAAC;EACV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ;AAED;;;;GAIG","sourcesContent":["import {\n Component,\n ComponentDidLoad,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Prop,\n State,\n VNode,\n Watch\n} from '@stencil/core';\nimport {\n getSortOrderInteger,\n HyperFunc,\n WcsGridAllRowSelectedEventDetails,\n WcsGridCell,\n WcsGridColumnSortChangeEventDetails,\n WcsGridPaginationChangeEventDetails,\n WcsGridRow,\n WcsGridRowData,\n WcsGridRowSelectedEventDetails,\n WcsGridSelectionConfig\n} from './grid-interface';\nimport { v4 as uuid } from 'uuid';\nimport { cloneDeep, isEqual, get } from 'lodash-es';\nimport { GridPagination } from '../grid-pagination/grid-pagination';\n\n/**\n * The grid component is a complex component used as an HTML table to display collections of data.\n *\n * @cssprop --wcs-grid-highlight-color - Color for selected rows\n * @cssprop --wcs-grid-column-border-left - Left border of all grid headers\n * @slot grid-column - The slot containing the column of the grid in the `<thead>`\n * @slot grid-pagination - The slot containing the pagination of the grid below the `<table>`\n */\n@Component({\n tag: 'wcs-grid',\n styleUrl: 'grid.scss',\n shadow: true\n})\nexport class Grid implements ComponentInterface, ComponentDidLoad {\n @Element() private el!: HTMLWcsGridElement;\n /**\n * Manage sort and pagination with a backend server when set to `true`\n */\n @Prop() serverMode: boolean = false;\n /**\n * Contains the data to display in the table from a js object\n */\n @Prop() data: any[];\n /**\n * Flag to display a spinner during data loading\n */\n @Prop() loading: boolean;\n /**\n * Used to manage grid's row selection. \n * \"none\": no row can be selected. \n * \"multiple\": several rows can be selected. \n * \"single\": one row only can be selected. \n */\n @Prop() selectionConfig: WcsGridSelectionConfig = 'none';\n /**\n * Set the selected items (rows)\n */\n @Prop() selectedItems: any | any[] = [];\n /**\n * Automatically set by the component to reference the wcs-grid-pagination HTML element by its id.\n */\n @Prop() wcsGridPaginationId: string;\n /**\n * Name of the object's key that will be used to display the cells whose `keyValue` attribute matches to the\n * object's value for this key.\n */\n @Prop() rowIdPath: string;\n @State() private columns: HTMLWcsGridColumnElement[];\n @State() private paginationEl: HTMLWcsGridPaginationElement;\n /**\n * Rows to display, contains user data and meta data\n */\n @State() private rows: WcsGridRow[] = [];\n /**\n * Event emitted when a row is selected or unselected\n */\n @Event() wcsGridSelectionChange!: EventEmitter<WcsGridRowSelectedEventDetails>;\n /**\n * Event emitted when all rows are selected or unselected\n */\n @Event() wcsGridAllSelectionChange!: EventEmitter<WcsGridAllRowSelectedEventDetails>;\n\n @Watch('data')\n onDataChange(newValue: any[]): void {\n this.updateGridRows(newValue);\n this.refreshSort(false);\n }\n\n @Watch('selectedItems')\n onSelectedItemsPropertyChange(newValue: any | any[]) {\n this.updateSelectionWithValues(newValue);\n }\n\n @Listen('wcsHiddenChange')\n onHiddenColumnChange(): void {\n // We use forceUpdate because the fact of hiding a column or not does not modify the internal structure of the grid (WcsGridRow).\n // Hide a column only impacts the way it is rendered but the grid-column remains in the dom and in our internal model.\n forceUpdate(this);\n }\n\n private updateSelectionWithValues(values: any | any[]) {\n if (this.selectionConfig === 'single') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (isEqual(row.data, values)) {\n row.selected = true;\n break; // only one line can be selected\n }\n }\n } else if (this.selectionConfig === 'multiple') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (values.find(x => isEqual(x, row.data))) {\n row.selected = true;\n }\n }\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private wcsGridRowToWcsGridRowData(row: WcsGridRow): WcsGridRowData {\n return {selected: row.selected, page: row.page, data: row.data};\n }\n\n private updateGridRows(data: any[]): void {\n const rows: WcsGridRow[] = [];\n if (data && this.columns) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < data.length; i++) {\n const row: WcsGridRow = {\n uuid: uuid(),\n data: data[i],\n selected: false,\n cells: []\n };\n for (const column of this.columns) {\n row.cells.push({\n content: get(data[i], column.path),\n column,\n formatter: column.formatter\n })\n }\n rows.push(row);\n }\n this.rows = rows;\n this.updatePageIndex();\n }\n }\n\n componentDidLoad(): void {\n this.columns = this.getGridColumnsFromTemplate();\n this.paginationEl = this.wcsGridPaginationId\n ? document.getElementById(this.wcsGridPaginationId) as HTMLWcsGridPaginationElement\n : this.getGridPaginationsFromTemplate()[0];\n this.updateGridRows(this.data);\n if (this.selectedItems) {\n this.updateSelectionWithValues(this.selectedItems);\n }\n this.refreshSort(true);\n }\n\n /**\n * Handle existing column's filters (defined before the grid is instantiated)\n * @private\n */\n private refreshSort(refreshOthersColmumnsSortOrderState: boolean) {\n //fixme: why the column property can be null or undefined?\n if (this.columns) {\n const [first, ...other] = this.columns.filter(c => c.sortOrder !== 'none');\n if (first && !this.serverMode) {\n this.sortBy(first);\n }\n refreshOthersColmumnsSortOrderState && this.disableSortOrderForColumns(other);\n }\n }\n\n private disableSortOrderForColumns(columns: HTMLWcsGridColumnElement[] | null | undefined): void {\n columns?.forEach(c => c.sortOrder = 'none');\n }\n\n private getGridColumnsFromTemplate(): HTMLWcsGridColumnElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-column\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridColumnElement[];\n }\n\n private getGridPaginationsFromTemplate(): HTMLWcsGridPaginationElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-pagination\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridPaginationElement[];\n }\n\n @Listen('wcsSortChange')\n sortChangeEventHandler(event: CustomEvent<WcsGridColumnSortChangeEventDetails>): void {\n if (event.detail.order === 'none') return;\n // We keep only one active sort column\n this.disableSortOrderForColumns(this.columns.filter(c => c !== event.detail.column));\n if (this.serverMode) return;\n this.sortBy(event.detail.column);\n this.updatePageIndex();\n }\n\n /**\n * Sorts the grid rows according to the given column's configuration\n * @param colmun Column from which to extract the sorting configuration\n * @private\n */\n private sortBy(colmun: HTMLWcsGridColumnElement) {\n if (colmun.sortFn) {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => colmun.sortFn(a.data, b.data, colmun) * getSortOrderInteger(colmun.sortOrder));\n } else {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => {\n const path = colmun.path;\n return ((get(a.data, path) < get(b.data, path)) ? -1 : (get(a.data, path) > get(b.data, path)) ? 1 : 0) * getSortOrderInteger(colmun.sortOrder);\n });\n }\n }\n\n /**\n * Update the page's number of all rows\n */\n private updatePageIndex(): void {\n if (!this.serverMode && this.paginationEl) {\n this.paginationEl.itemsCount = this.data.length;\n this.paginationEl.pageCount = Math.ceil(this.data.length / this.paginationEl.pageSize);\n\n if (this.paginationEl.pageCount <= 1) {\n this.paginationEl.currentPage = GridPagination.INDEX_FIRST_PAGE;\n } else if (this.paginationEl.pageCount > 0 && this.paginationEl.currentPage + 1 > this.paginationEl.pageCount) {\n this.paginationEl.currentPage = this.paginationEl.pageCount - 1;\n }\n\n const rows = cloneDeep(this.rows);\n rows.forEach((row: WcsGridRow, index: number) =>\n row.page = Math.floor(index / this.paginationEl.pageSize)\n );\n this.rows = [...rows];\n }\n }\n\n @Listen('wcsGridPaginationChange')\n paginationChangeEventHandler(): void {\n this.onPaginationChange();\n }\n\n @Listen('wcsGridPaginationChange', {target: 'window'})\n paginationChangeEventHandlerOutside(event: CustomEvent<WcsGridPaginationChangeEventDetails>): void {\n if (this.wcsGridPaginationId && this.wcsGridPaginationId === (event.target as HTMLElement).id) {\n this.onPaginationChange();\n }\n }\n\n private onPaginationChange(): void {\n if (this.serverMode) return;\n this.updatePageIndex();\n }\n\n private onRowSelection(row: WcsGridRow): void {\n if (this.selectionConfig === 'single') {\n this.rows.filter(r => r.uuid !== row.uuid).map(r => r.selected = false);\n }\n row.selected = !row.selected;\n if (this.selectionConfig !== 'single' || row.selected) {\n this.wcsGridSelectionChange.emit({row: this.wcsGridRowToWcsGridRowData(row)});\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private selectAllRows(): void {\n const rows = this.getRowsForCurrentPage();\n const selected = !this.allRowsAreSelected();\n rows.map(r => r.selected = selected);\n this.wcsGridAllSelectionChange.emit({rows: selected ? rows.map(row => this.wcsGridRowToWcsGridRowData(row)) : []});\n this.rows = cloneDeep(this.rows);\n }\n\n private allRowsAreSelected(): boolean {\n const rows = this.getRowsForCurrentPage();\n return rows.length > 0 && rows.filter(row => row.selected).length === rows.length;\n }\n\n private getRowsForCurrentPage(): WcsGridRow[] {\n if (this.paginationEl) {\n return this.rows.filter(row => row.page === this.paginationEl.currentPage);\n }\n return this.rows;\n }\n\n renderSelectionColumn(row: WcsGridRow): any {\n switch (this.selectionConfig) {\n case 'none':\n return;\n case 'single':\n return <td>\n <wcs-radio checked={row.selected} onWcsRadioClick={this.onRowSelection.bind(this, row)}/>\n </td>;\n case 'multiple':\n return <td>\n <wcs-checkbox checked={row.selected} onWcsChange={this.onRowSelection.bind(this, row)}/>\n </td>;\n }\n }\n\n private getCellContent(row: WcsGridRow, cell: WcsGridCell): HTMLElement | HTMLElement[] | string | void {\n if (cell.formatter) {\n return cell.formatter(\n (h as unknown) as HyperFunc<VNode>,\n cell.column,\n this.wcsGridRowToWcsGridRowData(row)\n );\n }\n return cell.content;\n }\n\n private totalColumnCount() {\n if (!this.columns) {\n return 0;\n }\n return this.columns.length + (this.selectionConfig === 'none' ? 0 : 1);\n }\n\n render(): any {\n return (\n <Host>\n {\n <table>\n <thead>\n {\n this.selectionConfig === 'none' ? ''\n : <th class=\"wcs-grid-selection-column\">\n {\n this.selectionConfig === 'single' ? '' :\n <wcs-checkbox checked={this.allRowsAreSelected()}\n onWcsChange={this.selectAllRows.bind(this)}/>\n }\n </th>\n }\n <slot name=\"grid-column\"></slot>\n </thead>\n <tbody>\n {\n this.loading\n ? <tr>\n <td colSpan={this.totalColumnCount()} class=\"loading\">\n <wcs-spinner></wcs-spinner>\n </td>\n </tr>\n : this.rows\n ?.filter(row => this.serverMode || !this.paginationEl || row.page === this.paginationEl.currentPage)\n .map(row =>\n this.renderRow(row)\n )\n }\n </tbody>\n </table>\n }\n <slot name=\"grid-pagination\"></slot>\n </Host>\n );\n }\n\n private renderRow(row: WcsGridRow) {\n return <tr class={row.selected ? 'selected' : ''}>\n {this.renderSelectionColumn(row)}\n {row.cells?.map(cell => {\n if (cell.column.hidden) {\n return;\n }\n return cell.column.customCells\n ? (<td>\n <slot name={cell.column.id + '-' + row.data[this.rowIdPath]}/>\n </td>)\n : (<td part={cell.column.path + '-column'}>{this.getCellContent(row, cell)}</td>)\n }\n )}\n </tr>;\n }\n}\n\n/**\n * Pour resize le tableau\n * https://www.brainbell.com/javascript/making-resizable-table-js.htmls\n *\n */\n"]}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/components/grid/grid.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentDidLoad,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Prop,\n State,\n VNode,\n Watch\n} from '@stencil/core';\nimport {\n getSortOrderInteger,\n HyperFunc,\n WcsGridAllRowSelectedEventDetails,\n WcsGridCell,\n WcsGridColumnSortChangeEventDetails,\n WcsGridPaginationChangeEventDetails,\n WcsGridRow,\n WcsGridRowData,\n WcsGridSelectionConfig, \n WcsGridSelectionEventDetails,\n} from './grid-interface';\nimport { v4 as uuid } from 'uuid';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport { GridPagination } from '../grid-pagination/grid-pagination';\nimport { getActionForKeyboardEvent, KeyboardEventAssociatedAction } from \"./grid-keyboard-event\";\n\ninterface GridElementWithCoordinates {\n el: HTMLTableCellElement,\n row: number,\n col: number,\n}\n\n/**\n * The grid component is a complex component used as an HTML table to display collections of data.\n *\n * @cssprop --wcs-grid-highlight-color - Color for selected rows\n * @cssprop --wcs-grid-column-border-left - Left border of all grid headers\n * @slot grid-column - The slot containing the column of the grid in the `<thead>`\n * @slot grid-pagination - The slot containing the pagination of the grid below the `<table>`\n */\n@Component({\n tag: 'wcs-grid',\n styleUrl: 'grid.scss',\n shadow: true\n})\nexport class Grid implements ComponentInterface, ComponentDidLoad {\n @Element() private el!: HTMLWcsGridElement;\n /**\n * Manage sort and pagination with a backend server when set to `true`\n */\n @Prop() serverMode: boolean = false;\n /**\n * Contains the data to display in the table from a js object\n */\n @Prop() data: any[];\n /**\n * Flag to display a spinner during data loading\n */\n @Prop() loading: boolean;\n /**\n * Used to manage grid's row selection. \n * \"none\": no row can be selected. \n * \"multiple\": several rows can be selected. \n * \"single\": one row only can be selected. \n */\n @Prop() selectionConfig: WcsGridSelectionConfig = 'none';\n /**\n * Set the selected items (rows)\n */\n @Prop() selectedItems: any | any[] = [];\n /**\n * Automatically set by the component to reference the wcs-grid-pagination HTML element by its id.\n */\n @Prop() wcsGridPaginationId: string;\n /**\n * Name of the object's key that will be used to display the cells whose `keyValue` attribute matches to the\n * object's value for this key.\n */\n @Prop() rowIdPath: string;\n @State() private columns: HTMLWcsGridColumnElement[];\n @State() private paginationEl: HTMLWcsGridPaginationElement;\n /**\n * Rows to display, contains user data and meta data\n */\n @State() private rows: WcsGridRow[] = [];\n /**\n * Event emitted when a row is selected or unselected\n */\n @Event() wcsGridSelectionChange!: EventEmitter<WcsGridSelectionEventDetails>;\n /**\n * Event emitted when all rows are selected or unselected\n */\n @Event() wcsGridAllSelectionChange!: EventEmitter<WcsGridAllRowSelectedEventDetails>;\n \n /**\n * Used to track the focus position in the grid for keyboard navigation. \n * Header row : index 0 \n * First column :\n * - index 1 if selection mode multiple or single\n * - index 0 if no selection mode\n * Default position : col 0, row 1\n */\n @State() private cursorPosition: {col: number, row: number} = {col: 0, row: 1};\n \n @Watch('cursorPosition')\n onCursorPositionChange(newValue: {col: number, row: number}): void {\n // Notify all grid columns that the cursorPosition has changed\n this.getGridColumnsFromTemplate().forEach(g => g.cursorPosition = newValue);\n }\n \n @Watch('data')\n onDataChange(newValue: any[]): void {\n this.updateGridRows(newValue);\n this.refreshSort(false);\n }\n\n @Watch('selectedItems')\n onSelectedItemsPropertyChange(newValue: any | any[]) {\n this.updateSelectionWithValues(newValue);\n }\n \n @Listen('focus')\n onFocus() {\n this.getElementToFocusAtCursorPosition()?.focus();\n }\n\n /**\n * If selectionConfig is different from `none`, that means that an extra column for radio or checkbox is rendered\n * in the table.\n */\n hasSelectionColumn() {\n return this.selectionConfig !== 'none';\n }\n \n /**\n * Returns the element to focus at the current cursor position : it can be a cell (td, th) to focus or a nested\n * checkbox / radio element if the selection mode is single or multiple\n */\n getElementToFocusAtCursorPosition(): HTMLTableCellElement | HTMLWcsCheckboxElement | HTMLWcsRadioElement {\n const el = this.gridElementsWithCoordinates.find(cell =>\n cell.col === this.cursorPosition?.col && cell.row === this.cursorPosition?.row)?.el;\n return this.hasSelectionColumn()\n ? el.querySelector('wcs-checkbox,wcs-radio') ?? el\n : el;\n }\n \n moveCursorPosition(directionX: number | 'first' | 'last', directionY: number | 'first' | 'last') {\n this.cursorPosition = {\n col: directionX === 'first' ? 0 :\n directionX === 'last' ? this.totalDisplayedColumnCount() - 1 :\n Math.min(Math.max(this.cursorPosition.col + directionX, 0), this.totalDisplayedColumnCount() - 1),\n row: directionY === 'first' ? 0 :\n directionY === 'last' ? this.getRowsForCurrentPage().length :\n Math.min(Math.max(this.cursorPosition.row + directionY, 0), this.getRowsForCurrentPage().length)\n };\n \n this.handleCursorPositionOnEmptyTh();\n \n this.getElementToFocusAtCursorPosition()?.focus();\n }\n\n /**\n * When the grid has selectionConfig single, an empty th appears at col=0, row=0.\n * It should not be focusable so the cursor navigates to col=1, row=0 instead.\n */\n handleCursorPositionOnEmptyTh() {\n if (this.selectionConfig === 'single' && this.cursorPosition.col === 0 && this.cursorPosition.row === 0) {\n this.cursorPosition = {\n col: 1,\n row: 0\n }\n }\n }\n\n @Listen('wcsHiddenChange')\n onHiddenColumnChange(): void {\n // We use forceUpdate because the fact of hiding a column or not does not modify the internal structure of the grid (WcsGridRow).\n // Hide a column only impacts the way it is rendered but the grid-column remains in the dom and in our internal model.\n forceUpdate(this);\n this.cursorPosition = { col: 0 , row: 1 }\n }\n\n @Listen('keydown')\n onKeyDown(_event: KeyboardEvent) {\n if (document.activeElement?.tagName === 'WCS-GRID-PAGINATION') {\n return;\n }\n \n let type: 'grid_no_selection' | 'grid_selection_single' | 'grid_selection_multiple';\n \n switch (this.selectionConfig) {\n case \"multiple\":\n type = 'grid_selection_multiple';\n break;\n case \"single\":\n type = 'grid_selection_single';\n break;\n case \"none\":\n type = 'grid_no_selection';\n break;\n }\n\n const actionsFromKeyboardEvents: KeyboardEventAssociatedAction[] = getActionForKeyboardEvent(_event, type);\n\n // If we have at least one associated actions, we prevent the default behavior of the event. \n // Except if the action is a focus move (we have to handle the preventDefault behavior ourselves in the action implementation)\n if (actionsFromKeyboardEvents.length != 0) {\n _event.preventDefault();\n }\n\n for (const actionFromKeyboardEvent of actionsFromKeyboardEvents) {\n this.doActionFromKeyboardEventAssociatedAction(actionFromKeyboardEvent, _event);\n }\n }\n\n doActionFromKeyboardEventAssociatedAction(actionFromKeyboardEvent: KeyboardEventAssociatedAction, event: KeyboardEvent) {\n switch (actionFromKeyboardEvent.kind) {\n case \"FocusCell\":\n switch (actionFromKeyboardEvent.target) {\n case \"up\":\n this.moveCursorPosition(0, -1);\n break;\n case \"down\":\n this.moveCursorPosition(0, 1);\n break;\n case \"left\":\n this.moveCursorPosition(-1, 0);\n break;\n case \"right\":\n this.moveCursorPosition(1, 0);\n break;\n case \"first_of_row\":\n this.moveCursorPosition('first', 0);\n break;\n case \"last_of_row\":\n this.moveCursorPosition('last', 0);\n break;\n case \"first_of_grid\":\n this.moveCursorPosition('first', 'first');\n break;\n case \"last_of_grid\":\n this.moveCursorPosition('last', 'last');\n break;\n default:\n break;\n }\n case \"SelectRow\":\n switch (actionFromKeyboardEvent.target) {\n case \"one\":\n event.preventDefault();\n if (this.cursorPosition.row > 0) {\n this.onRowSelection(this.rows[this.cursorPosition.row - 1]);\n }\n break;\n case \"all\":\n this.selectAllRows();\n break;\n default:\n break;\n }\n break;\n default:\n throw new Error(\"Internal error\");\n }\n }\n \n \n @Listen('mousedown')\n onClick(_event: MouseEvent) {\n const clickedGridElement: HTMLTableCellElement = _event.composedPath()\n .filter(x => ['TD', 'TH']\n .includes((x as HTMLElement).nodeName))[0] as HTMLTableCellElement;\n \n const clickedGridElementWithCoordinates = this.gridElementsWithCoordinates.find(e => e.el === clickedGridElement);\n \n this.cursorPosition = {\n col: clickedGridElementWithCoordinates.col,\n row: clickedGridElementWithCoordinates.row,\n }\n }\n\n private updateSelectionWithValues(values: any | any[]) {\n if (this.selectionConfig === 'single') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (isEqual(row.data, values)) {\n row.selected = true;\n break; // only one line can be selected\n }\n }\n } else if (this.selectionConfig === 'multiple') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (values.find(x => isEqual(x, row.data))) {\n row.selected = true;\n }\n }\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private wcsGridRowToWcsGridRowData(row: WcsGridRow): WcsGridRowData {\n return {selected: row.selected, page: row.page, data: row.data};\n }\n\n private updateGridRows(data: any[]): void {\n const rows: WcsGridRow[] = [];\n if (data && this.columns) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < data.length; i++) {\n const row: WcsGridRow = {\n uuid: uuid(),\n data: data[i],\n selected: false,\n cells: []\n };\n let index = 0;\n for (const column of this.columns) {\n column.columnPosition = index + (this.hasSelectionColumn() ? 1 : 0);\n index++;\n row.cells.push({\n content: get(data[i], column.path),\n column,\n formatter: column.formatter\n })\n }\n rows.push(row);\n }\n this.rows = rows;\n this.updatePageIndex();\n }\n }\n\n componentDidLoad(): void {\n this.columns = this.getGridColumnsFromTemplate();\n this.paginationEl = this.wcsGridPaginationId\n ? document.getElementById(this.wcsGridPaginationId) as HTMLWcsGridPaginationElement\n : this.getGridPaginationsFromTemplate()[0];\n this.updateGridRows(this.data);\n if (this.selectedItems) {\n this.updateSelectionWithValues(this.selectedItems);\n }\n this.refreshSort(true);\n }\n\n /**\n * Handle existing column's filters (defined before the grid is instantiated)\n * @private\n */\n private refreshSort(refreshOthersColumnsSortOrderState: boolean) {\n //fixme: why the column property can be null or undefined?\n if (this.columns) {\n const [first, ...other] = this.columns.filter(c => c.sortOrder !== 'none');\n if (first && !this.serverMode) {\n this.sortBy(first);\n }\n refreshOthersColumnsSortOrderState && this.disableSortOrderForColumns(other);\n }\n }\n\n private disableSortOrderForColumns(columns: HTMLWcsGridColumnElement[] | null | undefined): void {\n columns?.forEach(c => c.sortOrder = 'none');\n }\n\n private getGridColumnsFromTemplate(): HTMLWcsGridColumnElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-column\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridColumnElement[];\n }\n\n private getGridPaginationsFromTemplate(): HTMLWcsGridPaginationElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-pagination\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridPaginationElement[];\n }\n \n private get gridElementsWithCoordinates(): GridElementWithCoordinates[] {\n const gridElements: GridElementWithCoordinates[] = [];\n // If selection multiple, the first cell should be added to the list\n if (this.selectionConfig === 'multiple') {\n gridElements.push({\n el: this.el.shadowRoot.querySelector('th'),\n row: 0,\n col: 0\n });\n }\n this.getGridColumnsFromTemplate()\n .filter(col => !col.hidden)\n .forEach((col, index) => {\n gridElements.push({\n el: col.shadowRoot.querySelector('th'),\n row: 0,\n col: index + (this.hasSelectionColumn() ? 1 : 0),\n });\n });\n this.el.shadowRoot.querySelectorAll('td').forEach((cell, index) => {\n gridElements.push({\n el: cell,\n row: 1 + Math.floor(index / this.totalDisplayedColumnCount()),\n col: index % this.totalDisplayedColumnCount(),\n });\n });\n \n return gridElements;\n }\n\n @Listen('wcsSortChange')\n sortChangeEventHandler(event: CustomEvent<WcsGridColumnSortChangeEventDetails>): void {\n if (event.detail.order === 'none') return;\n // We keep only one active sort column\n this.disableSortOrderForColumns(this.columns.filter(c => c !== event.detail.column));\n if (this.serverMode) return;\n this.sortBy(event.detail.column);\n this.updatePageIndex();\n }\n\n /**\n * Sorts the grid rows according to the given column's configuration\n * @param column Column from which to extract the sorting configuration\n * @private\n */\n private sortBy(column: HTMLWcsGridColumnElement) {\n if (column.sortFn) {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => column.sortFn(a.data, b.data, column) * getSortOrderInteger(column.sortOrder));\n } else {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => {\n const path = column.path;\n return ((get(a.data, path) < get(b.data, path)) ? -1 : (get(a.data, path) > get(b.data, path)) ? 1 : 0) * getSortOrderInteger(column.sortOrder);\n });\n }\n }\n\n /**\n * Update the page's number of all rows\n */\n private updatePageIndex(): void {\n if (!this.serverMode && this.paginationEl) {\n this.paginationEl.itemsCount = this.data.length;\n this.paginationEl.pageCount = Math.ceil(this.data.length / this.paginationEl.pageSize);\n\n if (this.paginationEl.pageCount <= 1) {\n this.paginationEl.currentPage = GridPagination.INDEX_FIRST_PAGE;\n } else if (this.paginationEl.pageCount > 0 && this.paginationEl.currentPage + 1 > this.paginationEl.pageCount) {\n this.paginationEl.currentPage = this.paginationEl.pageCount - 1;\n }\n\n const rows = cloneDeep(this.rows);\n rows.forEach((row: WcsGridRow, index: number) =>\n row.page = Math.floor(index / this.paginationEl.pageSize)\n );\n this.rows = [...rows];\n }\n }\n\n @Listen('wcsGridPaginationChange')\n paginationChangeEventHandler(): void {\n this.onPaginationChange();\n }\n\n @Listen('wcsGridPaginationChange', {target: 'window'})\n paginationChangeEventHandlerOutside(event: CustomEvent<WcsGridPaginationChangeEventDetails>): void {\n if (this.wcsGridPaginationId && this.wcsGridPaginationId === (event.target as HTMLElement).id) {\n this.onPaginationChange();\n }\n }\n\n private onPaginationChange(): void {\n if (this.serverMode) return;\n this.updatePageIndex();\n }\n\n private onRowSelection(row: WcsGridRow): void {\n if (this.selectionConfig === 'single') {\n this.rows.filter(r => r.uuid !== row.uuid).map(r => r.selected = false);\n }\n row.selected = !row.selected;\n if (this.selectionConfig !== 'single' || row.selected) {\n this.wcsGridSelectionChange.emit({\n selectedRows: this.selectedRows.map(row => this.wcsGridRowToWcsGridRowData(row)),\n changedRow: this.wcsGridRowToWcsGridRowData(row)\n });\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private get selectedRows(): WcsGridRow[] {\n return this.rows.filter(r => r.selected);\n }\n\n private selectAllRows(): void {\n const rows = this.getRowsForCurrentPage();\n const selected = !this.allRowsAreSelected();\n rows.map(r => r.selected = selected);\n this.wcsGridAllSelectionChange.emit({rows: selected ? rows.map(row => this.wcsGridRowToWcsGridRowData(row)) : []});\n this.wcsGridSelectionChange.emit({ \n selectedRows: this.selectedRows.map(row => this.wcsGridRowToWcsGridRowData(row)),\n changedRow: 'allCheckbox'\n });\n this.rows = cloneDeep(this.rows);\n }\n\n private allRowsAreSelected(): boolean {\n const rows = this.getRowsForCurrentPage();\n return rows.length > 0 && rows.filter(row => row.selected).length === rows.length;\n }\n\n private getRowsForCurrentPage(): WcsGridRow[] {\n if (this.paginationEl) {\n return this.rows.filter(row => row.page === this.paginationEl.currentPage);\n }\n return this.rows;\n }\n\n renderSelectionColumn(row: WcsGridRow, rowIndex: number): any {\n switch (this.selectionConfig) {\n case 'none':\n return;\n case 'single': \n return <td aria-colindex={this.atLeastOneColumnHidden() ? 1 : null}\n tabIndex={this.cursorPosition?.col === 0 && rowIndex + 1 === this.cursorPosition?.row ? 0 : -1}>\n <wcs-radio tabIndex={-1}\n checked={row.selected} onWcsRadioClick={this.onRowSelection.bind(this, row)}/>\n </td>;\n case 'multiple': \n return <td aria-colindex={this.atLeastOneColumnHidden() ? 1 : null}\n tabIndex={this.cursorPosition?.col === 0 && rowIndex + 1 === this.cursorPosition?.row ? 0 : -1}>\n <wcs-checkbox tabIndex={-1}\n checked={row.selected} onWcsChange={this.onRowSelection.bind(this, row)}/>\n </td>;\n }\n }\n\n private getCellContent(row: WcsGridRow, cell: WcsGridCell): HTMLElement | HTMLElement[] | string | void {\n if (cell.formatter) {\n return cell.formatter(\n (h as unknown) as HyperFunc<VNode>,\n cell.column,\n this.wcsGridRowToWcsGridRowData(row)\n );\n }\n return cell.content;\n }\n\n /**\n * Returns the total number of columns\n * @private\n */\n private totalColumnCount() {\n if (!this.columns) {\n return 0;\n }\n return this.columns.length + (this.hasSelectionColumn() ? 1 : 0);\n }\n\n /**\n * Returns the total number of columns that are not hidden\n * @private\n */\n private totalDisplayedColumnCount() {\n return this.totalColumnCount() - this.columns?.filter(col => col.hidden).length ?? 0;\n }\n\n /**\n * Returns true if at least one column is hidden from the table\n * @private\n */\n private atLeastOneColumnHidden() {\n return this.totalDisplayedColumnCount() !== this.totalColumnCount();\n }\n \n render(): any {\n return (\n <Host>\n {\n <table role=\"grid\"\n aria-rowcount={!this.loading && this.rows?.length}\n aria-colcount={!this.loading && this.totalDisplayedColumnCount()}>\n <thead>\n <tr aria-rowindex=\"1\">\n {\n this.selectionConfig === 'none' ? ''\n : <th class=\"wcs-grid-selection-column\">\n {\n this.selectionConfig === 'single' ? '' :\n <wcs-checkbox tabIndex={this.cursorPosition?.col === 0\n && this.cursorPosition?.row === 0 ? 0 : -1}\n checked={this.allRowsAreSelected()}\n onWcsChange={this.selectAllRows.bind(this)}/>\n }\n </th>\n }\n <slot name=\"grid-column\"></slot>\n </tr>\n </thead>\n <tbody>\n {\n this.loading\n ? <tr aria-busy=\"true\">\n <td colSpan={this.totalColumnCount()} class=\"loading\">\n <wcs-spinner></wcs-spinner>\n </td>\n </tr>\n : this.rows\n ?.filter(row => this.serverMode || !this.paginationEl || row.page === this.paginationEl.currentPage)\n .map((row, index) =>\n this.renderRow(row, index)\n )\n }\n </tbody>\n </table>\n }\n <slot name=\"grid-pagination\"></slot>\n </Host>\n );\n }\n\n /**\n * Returns the row with all mapped cells inside. \n * The aria-rowindex here starts at 2 because the header row starts at index 1. \n * @private\n */ \n private renderRow(row: WcsGridRow, rowIndex: number) {\n let hiddenColumnCount = 0;\n return <tr class={row.selected ? 'selected' : ''}\n aria-selected={row.selected ? 'true' : null}\n aria-rowindex={rowIndex + 2}>\n {this.renderSelectionColumn(row, rowIndex)}\n {row.cells?.map((cell, cellIndex) => {\n if (cell.column.hidden) {\n hiddenColumnCount++;\n return;\n }\n const nonHiddenColumnIndex = cellIndex - hiddenColumnCount + 1 + (this.hasSelectionColumn() ? 1 : 0);\n const cursorIsOnCell = nonHiddenColumnIndex - 1 === this.cursorPosition?.col \n && rowIndex + 1 === this.cursorPosition?.row;\n return cell.column.customCells\n ? (<td tabIndex={cursorIsOnCell ? 0 : -1}\n aria-colindex={this.atLeastOneColumnHidden() ? nonHiddenColumnIndex : null}>\n <slot name={cell.column.id + '-' + row.data[this.rowIdPath]}/>\n </td>)\n : (<td tabIndex={cursorIsOnCell ? 0 : -1}\n aria-colindex={this.atLeastOneColumnHidden() ? nonHiddenColumnIndex : null}\n part={cell.column.path + '-column'}>{this.getCellContent(row, cell)}</td>)\n }\n )}\n </tr>;\n }\n}\n\n/**\n * Pour resize le tableau\n * https://www.brainbell.com/javascript/making-resizable-table-js.htmls\n *\n */\n"]}
@@ -16,6 +16,11 @@
16
16
  :host th .grid-column-th-content span {
17
17
  user-select: none;
18
18
  }
19
+ :host th:focus-visible {
20
+ outline: 2px dashed var(--wcs-primary);
21
+ outline-offset: 0;
22
+ border-radius: 0.1rem;
23
+ }
19
24
  :host .pointer {
20
25
  cursor: pointer;
21
26
  }