@xplortech/apollo-core 3.1.0 → 3.2.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 (491) hide show
  1. package/.typings/apollo-components.html-data.json +120 -14
  2. package/build/components/avatar.css +1 -1
  3. package/build/components/data-card.css +1 -1
  4. package/build/components/dropdown.css +1 -1
  5. package/build/components/input-time.css +1 -1
  6. package/build/components/large-card.css +1 -1
  7. package/build/components/list-item.css +1 -1
  8. package/build/components/modal.css +1 -1
  9. package/build/components/popover.css +1 -1
  10. package/build/components/side-nav.css +1 -1
  11. package/build/components/spotlight.css +1 -1
  12. package/build/components/table-cell-base.css +1 -0
  13. package/build/components/table-cell.css +1 -0
  14. package/build/components/table-footer-cell.css +1 -1
  15. package/build/components/table-header-cell.css +1 -1
  16. package/build/components/table.css +1 -1
  17. package/build/components/tag.css +1 -1
  18. package/build/components/toast.css +1 -1
  19. package/build/components/toggle.css +1 -1
  20. package/build/components/toolbar.css +1 -1
  21. package/build/components/tooltip.css +1 -1
  22. package/build/components/top-nav.css +1 -1
  23. package/build/components-manifest.json +19 -3
  24. package/build/core.css +1 -1
  25. package/build/style.css +1 -1
  26. package/build/variables/apollo.css +4 -0
  27. package/build/variables/field-edge.css +4 -0
  28. package/build/vendor/flatpickr.css +1 -1
  29. package/dist/apollo-core/apollo-core.css +1 -1
  30. package/dist/apollo-core/apollo-core.esm.js +1 -1
  31. package/dist/apollo-core/p-045a4538.entry.js +1 -0
  32. package/dist/apollo-core/{p-d443291f.entry.js → p-050a8bf2.entry.js} +1 -1
  33. package/dist/apollo-core/p-08767607.entry.js +1 -0
  34. package/dist/apollo-core/{p-149ddd12.entry.js → p-11914cd4.entry.js} +1 -1
  35. package/dist/apollo-core/{p-581b702c.entry.js → p-14e86de8.entry.js} +1 -1
  36. package/dist/apollo-core/p-194c0ccd.entry.js +1 -0
  37. package/dist/apollo-core/p-1c031055.entry.js +1 -0
  38. package/dist/apollo-core/p-24f7280a.entry.js +1 -0
  39. package/dist/apollo-core/{p-47bda204.entry.js → p-24fa8a03.entry.js} +1 -1
  40. package/dist/apollo-core/{p-91895c40.entry.js → p-2971e2ec.entry.js} +1 -1
  41. package/dist/apollo-core/{p-0958c719.entry.js → p-3417c1ce.entry.js} +1 -1
  42. package/dist/apollo-core/p-3713cd77.entry.js +1 -0
  43. package/dist/apollo-core/p-386851a2.entry.js +1 -0
  44. package/dist/apollo-core/p-3cd1238b.entry.js +1 -0
  45. package/dist/apollo-core/{p-b45179fb.entry.js → p-49531864.entry.js} +1 -1
  46. package/dist/apollo-core/p-4e3c6616.entry.js +1 -0
  47. package/dist/apollo-core/p-5b9fd96e.entry.js +1 -0
  48. package/dist/apollo-core/{p-cb5b15c2.entry.js → p-5bfac8fd.entry.js} +1 -1
  49. package/dist/apollo-core/p-5c3be343.entry.js +1 -0
  50. package/dist/apollo-core/p-5cbf5d42.entry.js +1 -0
  51. package/dist/apollo-core/p-5ec2b180.entry.js +1 -0
  52. package/dist/apollo-core/{p-790709c0.entry.js → p-64f5c129.entry.js} +1 -1
  53. package/dist/apollo-core/{p-28bce81a.entry.js → p-65f6b66c.entry.js} +1 -1
  54. package/dist/apollo-core/{p-d9070ae5.entry.js → p-715baae0.entry.js} +1 -1
  55. package/dist/apollo-core/p-72e0455f.entry.js +1 -0
  56. package/dist/apollo-core/p-7ac7fbc0.entry.js +1 -0
  57. package/dist/apollo-core/p-7d70e089.entry.js +1 -0
  58. package/dist/apollo-core/{p-d41b8f46.entry.js → p-7eb02cf3.entry.js} +1 -1
  59. package/dist/apollo-core/p-7f4463ff.entry.js +1 -0
  60. package/dist/apollo-core/p-808f3d9c.entry.js +1 -0
  61. package/dist/apollo-core/p-87582346.entry.js +1 -0
  62. package/dist/apollo-core/{p-2c995d80.entry.js → p-8f8f4759.entry.js} +1 -1
  63. package/dist/apollo-core/{p-5d9a593e.entry.js → p-907bc21e.entry.js} +1 -1
  64. package/dist/apollo-core/p-9905c77c.entry.js +1 -0
  65. package/dist/apollo-core/{p-54903322.entry.js → p-9d731673.entry.js} +1 -1
  66. package/dist/apollo-core/{p-2938ab4f.entry.js → p-9feaa8be.entry.js} +1 -1
  67. package/dist/apollo-core/p-O7gQjVdS.js +1 -0
  68. package/dist/apollo-core/p-a6ecca68.entry.js +1 -0
  69. package/dist/apollo-core/p-a789c272.entry.js +1 -0
  70. package/dist/apollo-core/{p-06a9a27b.entry.js → p-aeb2bcb8.entry.js} +1 -1
  71. package/dist/apollo-core/p-b3b4678b.entry.js +1 -0
  72. package/dist/apollo-core/{p-82812126.entry.js → p-b64ed46d.entry.js} +1 -1
  73. package/dist/apollo-core/{p-0368a1df.entry.js → p-bc821e69.entry.js} +1 -1
  74. package/dist/apollo-core/p-bd493c4a.entry.js +1 -0
  75. package/dist/apollo-core/p-bdcece21.entry.js +1 -0
  76. package/dist/apollo-core/{p-cdb5b5c4.entry.js → p-bfb7a83a.entry.js} +1 -1
  77. package/dist/apollo-core/{p-cdacfcd4.entry.js → p-c22f70f4.entry.js} +1 -1
  78. package/dist/apollo-core/{p-5730d96c.entry.js → p-c5bc3b2c.entry.js} +1 -1
  79. package/dist/apollo-core/{p-4ad79534.entry.js → p-ca83003e.entry.js} +1 -1
  80. package/dist/apollo-core/p-d3230277.entry.js +1 -0
  81. package/dist/apollo-core/p-d3ada7d0.entry.js +1 -0
  82. package/dist/apollo-core/{p-d0bc7c45.entry.js → p-d469bf5d.entry.js} +1 -1
  83. package/dist/apollo-core/p-d7f8ee34.entry.js +1 -0
  84. package/dist/apollo-core/p-d879c349.entry.js +1 -0
  85. package/dist/apollo-core/{p-2139f9f6.entry.js → p-df257cbf.entry.js} +1 -1
  86. package/dist/apollo-core/p-e09d8beb.entry.js +1 -0
  87. package/dist/apollo-core/p-e4d50301.entry.js +1 -0
  88. package/dist/apollo-core/{p-f3a2c79b.entry.js → p-ea9cdd65.entry.js} +1 -1
  89. package/dist/apollo-core/{p-ca4652b3.entry.js → p-eba654a3.entry.js} +1 -1
  90. package/dist/apollo-core/{p-4a2323b3.entry.js → p-ee68bed6.entry.js} +1 -1
  91. package/dist/apollo-core/{p-abdf199b.entry.js → p-f384a990.entry.js} +1 -1
  92. package/dist/apollo-core/{p-4d4acd1f.entry.js → p-f579e4b0.entry.js} +1 -1
  93. package/dist/apollo-core/{p-d724c419.entry.js → p-fcb17ff9.entry.js} +1 -1
  94. package/dist/apollo-core/{p-e2890eb1.entry.js → p-ff16f574.entry.js} +1 -1
  95. package/dist/cjs/apollo-core.cjs.js +1 -1
  96. package/dist/cjs/index-3cBvw409.js +8 -12
  97. package/dist/cjs/loader.cjs.js +1 -1
  98. package/dist/cjs/table-internal-DssCrBs_.js +67 -0
  99. package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
  100. package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
  101. package/dist/cjs/xpl-avatar_3.cjs.entry.js +4 -4
  102. package/dist/cjs/xpl-backdrop.cjs.entry.js +1 -1
  103. package/dist/cjs/xpl-badge.cjs.entry.js +1 -1
  104. package/dist/cjs/xpl-banner.cjs.entry.js +2 -2
  105. package/dist/cjs/xpl-breadcrumb-item.cjs.entry.js +1 -1
  106. package/dist/cjs/xpl-breadcrumbs.cjs.entry.js +1 -1
  107. package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
  108. package/dist/cjs/xpl-button.cjs.entry.js +1 -1
  109. package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
  110. package/dist/cjs/xpl-checkbox.cjs.entry.js +3 -3
  111. package/dist/cjs/xpl-choicelist.cjs.entry.js +1 -1
  112. package/dist/cjs/xpl-content-area.cjs.entry.js +1 -1
  113. package/dist/cjs/xpl-dashboard.cjs.entry.js +1 -1
  114. package/dist/cjs/xpl-data-card.cjs.entry.js +2 -2
  115. package/dist/cjs/xpl-dropdown_4.cjs.entry.js +8 -8
  116. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
  117. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
  118. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
  119. package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
  120. package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
  121. package/dist/cjs/xpl-header-accordion.cjs.entry.js +1 -1
  122. package/dist/cjs/xpl-icon.cjs.entry.js +2 -2
  123. package/dist/cjs/xpl-input-color.cjs.entry.js +8 -8
  124. package/dist/cjs/xpl-input-phone.cjs.entry.js +5 -5
  125. package/dist/cjs/xpl-input-time.cjs.entry.js +2 -2
  126. package/dist/cjs/xpl-input_4.cjs.entry.js +10 -10
  127. package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
  128. package/dist/cjs/xpl-list.cjs.entry.js +2 -2
  129. package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
  130. package/dist/cjs/xpl-modal.cjs.entry.js +1 -1
  131. package/dist/cjs/xpl-nav-header-menu.cjs.entry.js +2 -2
  132. package/dist/cjs/xpl-nav-item.cjs.entry.js +2 -2
  133. package/dist/cjs/xpl-pagination.cjs.entry.js +4 -4
  134. package/dist/cjs/xpl-panel.cjs.entry.js +2 -2
  135. package/dist/cjs/xpl-popover.cjs.entry.js +4 -4
  136. package/dist/cjs/xpl-progress-bar.cjs.entry.js +2 -2
  137. package/dist/cjs/xpl-progress-indicator.cjs.entry.js +1 -1
  138. package/dist/cjs/xpl-secondary-nav.cjs.entry.js +1 -1
  139. package/dist/cjs/xpl-select_2.cjs.entry.js +8 -8
  140. package/dist/cjs/xpl-side-nav-header-item.cjs.entry.js +2 -2
  141. package/dist/cjs/xpl-side-nav-item.cjs.entry.js +2 -2
  142. package/dist/cjs/xpl-side-nav-section.cjs.entry.js +5 -5
  143. package/dist/cjs/xpl-side-nav.cjs.entry.js +2 -2
  144. package/dist/cjs/xpl-skeleton.cjs.entry.js +1 -1
  145. package/dist/cjs/xpl-slideout.cjs.entry.js +1 -1
  146. package/dist/cjs/xpl-tab-panel.cjs.entry.js +2 -2
  147. package/dist/cjs/xpl-table-body.cjs.entry.js +1 -1
  148. package/dist/cjs/xpl-table-cell_3.cjs.entry.js +228 -0
  149. package/dist/cjs/xpl-table-footer.cjs.entry.js +1 -1
  150. package/dist/cjs/xpl-table-header.cjs.entry.js +1 -1
  151. package/dist/cjs/xpl-table-row.cjs.entry.js +43 -2
  152. package/dist/cjs/xpl-table.cjs.entry.js +1204 -80
  153. package/dist/cjs/xpl-tabs.cjs.entry.js +5 -5
  154. package/dist/cjs/xpl-toast.cjs.entry.js +2 -2
  155. package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
  156. package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
  157. package/dist/cjs/xpl-tooltip.cjs.entry.js +1 -1
  158. package/dist/cjs/xpl-top-nav-item.cjs.entry.js +2 -2
  159. package/dist/cjs/xpl-top-nav-menu.cjs.entry.js +2 -2
  160. package/dist/cjs/xpl-top-nav.cjs.entry.js +5 -5
  161. package/dist/cjs/xpl-utility-bar.cjs.entry.js +1 -1
  162. package/dist/collection/collection-manifest.json +2 -1
  163. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  164. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  165. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  166. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  167. package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
  168. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  169. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  170. package/dist/collection/components/xpl-button/xpl-button.js +1 -1
  171. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  172. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  173. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +3 -3
  174. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  175. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  176. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  177. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  178. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  179. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  180. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  181. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  182. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +4 -4
  183. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +2 -2
  184. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  185. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  186. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  187. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  188. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
  189. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  190. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  191. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  192. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  193. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  194. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
  195. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  196. package/dist/collection/components/xpl-input/xpl-input.js +2 -2
  197. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  198. package/dist/collection/components/xpl-list/xpl-list.js +2 -2
  199. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  200. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  201. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  202. package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
  203. package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
  204. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  205. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  206. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
  207. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  208. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  209. package/dist/collection/components/xpl-select/xpl-select.js +6 -6
  210. package/dist/collection/components/xpl-side-nav/xpl-side-nav-header-item/xpl-side-nav-header-item.js +2 -2
  211. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  212. package/dist/collection/components/xpl-side-nav/xpl-side-nav-section/xpl-side-nav-section.js +5 -5
  213. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  214. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  215. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  216. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
  217. package/dist/collection/components/xpl-table/utils/move-row-dom.js +50 -0
  218. package/dist/collection/components/xpl-table/utils/table-internal.js +57 -0
  219. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +1 -1
  220. package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +167 -0
  221. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +1 -1
  222. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +2 -2
  223. package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +402 -0
  224. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +44 -2
  225. package/dist/collection/components/xpl-table/xpl-table.js +1427 -116
  226. package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
  227. package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
  228. package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
  229. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  230. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  231. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  232. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  233. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
  234. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +2 -2
  235. package/dist/collection/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.js +2 -2
  236. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +5 -5
  237. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  238. package/dist/components/index.d.ts +3 -1
  239. package/dist/components/index.js +1 -1
  240. package/dist/components/{p-oIn1krdu.js → p-1D7CWIJ-.js} +1 -1
  241. package/dist/components/{p-xtOHikY0.js → p-2cJsJK3-.js} +1 -1
  242. package/dist/components/{p-DYmvElhR.js → p-8zrW9vEC.js} +1 -1
  243. package/dist/components/p-B56GeUtW.js +1 -0
  244. package/dist/components/p-B6YLKDUX.js +1 -0
  245. package/dist/components/{p-D--kzomA.js → p-B7aaJikj.js} +1 -1
  246. package/dist/components/{p-U0JYwf4c.js → p-BOm_p_mz.js} +1 -1
  247. package/dist/components/p-BZIZSovL.js +1 -0
  248. package/dist/components/{p-EfW0v54z.js → p-BtLC-jpk.js} +1 -1
  249. package/dist/components/{p-xFsB212F.js → p-Btb2UkLz.js} +1 -1
  250. package/dist/components/{p-DAb-txW3.js → p-C0AbGd4t.js} +1 -1
  251. package/dist/components/p-CFXvQqUO.js +1 -0
  252. package/dist/components/{p-l3EZ-agL.js → p-CQjJIHK6.js} +1 -1
  253. package/dist/components/{p-Chpgh5SL.js → p-CV5nn1zR.js} +1 -1
  254. package/dist/components/p-CdRmVtIN.js +1 -0
  255. package/dist/components/p-CgemLtmL.js +1 -0
  256. package/dist/components/p-CmbpWpb0.js +1 -0
  257. package/dist/components/p-CuVYRPvz.js +1 -0
  258. package/dist/components/{p-JyNpXfDe.js → p-D09sGbzs.js} +1 -1
  259. package/dist/components/{p-BdpZR4KO.js → p-DTh_zemx.js} +1 -1
  260. package/dist/components/{p-CiHTfk3E.js → p-DoVubWyd.js} +1 -1
  261. package/dist/components/p-Dp62sBqX.js +1 -0
  262. package/dist/components/p-DqgnC_vS.js +1 -0
  263. package/dist/components/p-DtV4i45B.js +1 -0
  264. package/dist/components/{p-wIU7KUhA.js → p-ohy3NrgH.js} +1 -1
  265. package/dist/components/xpl-accordion.js +1 -1
  266. package/dist/components/xpl-application-shell.js +1 -1
  267. package/dist/components/xpl-avatar.js +1 -1
  268. package/dist/components/xpl-backdrop.js +1 -1
  269. package/dist/components/xpl-badge.js +1 -1
  270. package/dist/components/xpl-banner.js +1 -1
  271. package/dist/components/xpl-breadcrumb-item.js +1 -1
  272. package/dist/components/xpl-breadcrumbs.js +1 -1
  273. package/dist/components/xpl-button-row.js +1 -1
  274. package/dist/components/xpl-button.js +1 -1
  275. package/dist/components/xpl-calendar.js +1 -1
  276. package/dist/components/xpl-checkbox.js +1 -1
  277. package/dist/components/xpl-choicelist.js +1 -1
  278. package/dist/components/xpl-content-area.js +1 -1
  279. package/dist/components/xpl-dashboard.js +1 -1
  280. package/dist/components/xpl-data-card.js +1 -1
  281. package/dist/components/xpl-divider.js +1 -1
  282. package/dist/components/xpl-dropdown-group.js +1 -1
  283. package/dist/components/xpl-dropdown-heading.js +1 -1
  284. package/dist/components/xpl-dropdown-option.js +1 -1
  285. package/dist/components/xpl-dropdown.js +1 -1
  286. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  287. package/dist/components/xpl-dynamic-table-row.js +1 -1
  288. package/dist/components/xpl-dynamic-table.js +1 -1
  289. package/dist/components/xpl-grid-item.js +1 -1
  290. package/dist/components/xpl-grid.js +1 -1
  291. package/dist/components/xpl-header-accordion.js +1 -1
  292. package/dist/components/xpl-icon.js +1 -1
  293. package/dist/components/xpl-input-color.js +1 -1
  294. package/dist/components/xpl-input-date.js +1 -1
  295. package/dist/components/xpl-input-file.js +1 -1
  296. package/dist/components/xpl-input-phone.js +1 -1
  297. package/dist/components/xpl-input-search.js +1 -1
  298. package/dist/components/xpl-input-time.js +1 -1
  299. package/dist/components/xpl-input.js +1 -1
  300. package/dist/components/xpl-large-card.js +1 -1
  301. package/dist/components/xpl-list-item.js +1 -1
  302. package/dist/components/xpl-list.js +1 -1
  303. package/dist/components/xpl-main-nav.js +1 -1
  304. package/dist/components/xpl-modal.js +1 -1
  305. package/dist/components/xpl-nav-header-menu.js +1 -1
  306. package/dist/components/xpl-nav-item.js +1 -1
  307. package/dist/components/xpl-pagination.js +1 -1
  308. package/dist/components/xpl-panel.js +1 -1
  309. package/dist/components/xpl-popover.js +1 -1
  310. package/dist/components/xpl-progress-bar.js +1 -1
  311. package/dist/components/xpl-progress-indicator.js +1 -1
  312. package/dist/components/xpl-radio.js +1 -1
  313. package/dist/components/xpl-secondary-nav.js +1 -1
  314. package/dist/components/xpl-select.js +1 -1
  315. package/dist/components/xpl-side-nav-header-item.js +1 -1
  316. package/dist/components/xpl-side-nav-item.js +1 -1
  317. package/dist/components/xpl-side-nav-section.js +1 -1
  318. package/dist/components/xpl-side-nav.js +1 -1
  319. package/dist/components/xpl-skeleton.js +1 -1
  320. package/dist/components/xpl-slideout.js +1 -1
  321. package/dist/components/xpl-spotlight.js +1 -1
  322. package/dist/components/xpl-tab-panel.js +1 -1
  323. package/dist/components/xpl-tab.js +1 -1
  324. package/dist/components/xpl-table-body.js +1 -1
  325. package/dist/components/xpl-table-cell.d.ts +11 -0
  326. package/dist/components/xpl-table-cell.js +1 -0
  327. package/dist/components/xpl-table-footer-cell.js +1 -1
  328. package/dist/components/xpl-table-footer.js +1 -1
  329. package/dist/components/xpl-table-header-cell.js +1 -1
  330. package/dist/components/xpl-table-header.js +1 -1
  331. package/dist/components/xpl-table-row.js +1 -1
  332. package/dist/components/xpl-table.js +1 -1
  333. package/dist/components/xpl-tabs.js +1 -1
  334. package/dist/components/xpl-tag.js +1 -1
  335. package/dist/components/xpl-toast.js +1 -1
  336. package/dist/components/xpl-toggle.js +1 -1
  337. package/dist/components/xpl-toolbar.js +1 -1
  338. package/dist/components/xpl-tooltip.js +1 -1
  339. package/dist/components/xpl-top-nav-item.js +1 -1
  340. package/dist/components/xpl-top-nav-menu.js +1 -1
  341. package/dist/components/xpl-top-nav.js +1 -1
  342. package/dist/components/xpl-utility-bar.js +1 -1
  343. package/dist/docs/xpl-avatar/readme.md +1 -1
  344. package/dist/docs/xpl-checkbox/readme.md +1 -3
  345. package/dist/docs/xpl-data-card/readme.md +1 -1
  346. package/dist/docs/xpl-dynamic-table/readme.md +4 -1
  347. package/dist/docs/xpl-dynamic-table-cell/readme.md +2 -0
  348. package/dist/docs/xpl-dynamic-table-row/readme.md +2 -0
  349. package/dist/docs/xpl-icon/readme.md +1 -1
  350. package/dist/docs/xpl-input/xpl-input-time/readme.md +1 -1
  351. package/dist/docs/xpl-large-card/readme.md +1 -1
  352. package/dist/docs/xpl-modal/readme.md +2 -2
  353. package/dist/docs/xpl-popover/readme.md +1 -2
  354. package/dist/docs/xpl-slideout/readme.md +1 -1
  355. package/dist/docs/xpl-spotlight/readme.md +1 -0
  356. package/dist/docs/xpl-table/readme.md +178 -20
  357. package/dist/docs/xpl-table/xpl-table-body/readme.md +4 -4
  358. package/dist/docs/xpl-table/xpl-table-cell/readme.md +53 -0
  359. package/dist/docs/xpl-table/xpl-table-footer/readme.md +4 -4
  360. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +24 -15
  361. package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +84 -0
  362. package/dist/docs/xpl-table/xpl-table-row/readme.md +18 -14
  363. package/dist/docs/xpl-toast/readme.md +2 -2
  364. package/dist/docs/xpl-toggle/readme.md +1 -1
  365. package/dist/docs/xpl-toolbar/readme.md +5 -3
  366. package/dist/docs/xpl-tooltip/readme.md +1 -2
  367. package/dist/docs.json +776 -113
  368. package/dist/esm/apollo-core.js +1 -1
  369. package/dist/esm/index-ukZKsqqq.js +8 -12
  370. package/dist/esm/loader.js +1 -1
  371. package/dist/esm/table-internal-O7gQjVdS.js +59 -0
  372. package/dist/esm/xpl-accordion.entry.js +2 -2
  373. package/dist/esm/xpl-application-shell.entry.js +1 -1
  374. package/dist/esm/xpl-avatar_3.entry.js +4 -4
  375. package/dist/esm/xpl-backdrop.entry.js +1 -1
  376. package/dist/esm/xpl-badge.entry.js +1 -1
  377. package/dist/esm/xpl-banner.entry.js +2 -2
  378. package/dist/esm/xpl-breadcrumb-item.entry.js +1 -1
  379. package/dist/esm/xpl-breadcrumbs.entry.js +1 -1
  380. package/dist/esm/xpl-button-row.entry.js +1 -1
  381. package/dist/esm/xpl-button.entry.js +1 -1
  382. package/dist/esm/xpl-calendar.entry.js +1 -1
  383. package/dist/esm/xpl-checkbox.entry.js +3 -3
  384. package/dist/esm/xpl-choicelist.entry.js +1 -1
  385. package/dist/esm/xpl-content-area.entry.js +1 -1
  386. package/dist/esm/xpl-dashboard.entry.js +1 -1
  387. package/dist/esm/xpl-data-card.entry.js +2 -2
  388. package/dist/esm/xpl-dropdown_4.entry.js +8 -8
  389. package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
  390. package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
  391. package/dist/esm/xpl-dynamic-table.entry.js +2 -2
  392. package/dist/esm/xpl-grid-item.entry.js +1 -1
  393. package/dist/esm/xpl-grid.entry.js +1 -1
  394. package/dist/esm/xpl-header-accordion.entry.js +1 -1
  395. package/dist/esm/xpl-icon.entry.js +2 -2
  396. package/dist/esm/xpl-input-color.entry.js +8 -8
  397. package/dist/esm/xpl-input-phone.entry.js +5 -5
  398. package/dist/esm/xpl-input-time.entry.js +2 -2
  399. package/dist/esm/xpl-input_4.entry.js +10 -10
  400. package/dist/esm/xpl-large-card.entry.js +1 -1
  401. package/dist/esm/xpl-list.entry.js +2 -2
  402. package/dist/esm/xpl-main-nav.entry.js +1 -1
  403. package/dist/esm/xpl-modal.entry.js +1 -1
  404. package/dist/esm/xpl-nav-header-menu.entry.js +2 -2
  405. package/dist/esm/xpl-nav-item.entry.js +2 -2
  406. package/dist/esm/xpl-pagination.entry.js +4 -4
  407. package/dist/esm/xpl-panel.entry.js +2 -2
  408. package/dist/esm/xpl-popover.entry.js +4 -4
  409. package/dist/esm/xpl-progress-bar.entry.js +2 -2
  410. package/dist/esm/xpl-progress-indicator.entry.js +1 -1
  411. package/dist/esm/xpl-secondary-nav.entry.js +1 -1
  412. package/dist/esm/xpl-select_2.entry.js +8 -8
  413. package/dist/esm/xpl-side-nav-header-item.entry.js +2 -2
  414. package/dist/esm/xpl-side-nav-item.entry.js +2 -2
  415. package/dist/esm/xpl-side-nav-section.entry.js +5 -5
  416. package/dist/esm/xpl-side-nav.entry.js +2 -2
  417. package/dist/esm/xpl-skeleton.entry.js +1 -1
  418. package/dist/esm/xpl-slideout.entry.js +1 -1
  419. package/dist/esm/xpl-tab-panel.entry.js +2 -2
  420. package/dist/esm/xpl-table-body.entry.js +1 -1
  421. package/dist/esm/xpl-table-cell_3.entry.js +224 -0
  422. package/dist/esm/xpl-table-footer.entry.js +1 -1
  423. package/dist/esm/xpl-table-header.entry.js +1 -1
  424. package/dist/esm/xpl-table-row.entry.js +44 -3
  425. package/dist/esm/xpl-table.entry.js +1204 -80
  426. package/dist/esm/xpl-tabs.entry.js +5 -5
  427. package/dist/esm/xpl-toast.entry.js +2 -2
  428. package/dist/esm/xpl-toggle.entry.js +3 -3
  429. package/dist/esm/xpl-toolbar.entry.js +2 -2
  430. package/dist/esm/xpl-tooltip.entry.js +1 -1
  431. package/dist/esm/xpl-top-nav-item.entry.js +2 -2
  432. package/dist/esm/xpl-top-nav-menu.entry.js +2 -2
  433. package/dist/esm/xpl-top-nav.entry.js +5 -5
  434. package/dist/esm/xpl-utility-bar.entry.js +1 -1
  435. package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +3 -0
  436. package/dist/types/components/xpl-table/utils/table-internal.d.ts +8 -0
  437. package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +11 -0
  438. package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +33 -0
  439. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +7 -0
  440. package/dist/types/components/xpl-table/xpl-table.d.ts +126 -22
  441. package/dist/types/components.d.ts +238 -60
  442. package/hydrate/index.js +1669 -265
  443. package/hydrate/index.mjs +1669 -265
  444. package/package.json +7 -7
  445. package/dist/apollo-core/p-056a99e4.entry.js +0 -1
  446. package/dist/apollo-core/p-068e3532.entry.js +0 -1
  447. package/dist/apollo-core/p-0a0a6e43.entry.js +0 -1
  448. package/dist/apollo-core/p-1a94c2d9.entry.js +0 -1
  449. package/dist/apollo-core/p-2faa7b9c.entry.js +0 -1
  450. package/dist/apollo-core/p-30b1b700.entry.js +0 -1
  451. package/dist/apollo-core/p-32084caf.entry.js +0 -1
  452. package/dist/apollo-core/p-38586952.entry.js +0 -1
  453. package/dist/apollo-core/p-50fae269.entry.js +0 -1
  454. package/dist/apollo-core/p-60cb3cfb.entry.js +0 -1
  455. package/dist/apollo-core/p-722b145a.entry.js +0 -1
  456. package/dist/apollo-core/p-75e5bfe0.entry.js +0 -1
  457. package/dist/apollo-core/p-77fe3cc1.entry.js +0 -1
  458. package/dist/apollo-core/p-83bb7607.entry.js +0 -1
  459. package/dist/apollo-core/p-8664d88b.entry.js +0 -1
  460. package/dist/apollo-core/p-8a925e9d.entry.js +0 -1
  461. package/dist/apollo-core/p-9064badb.entry.js +0 -1
  462. package/dist/apollo-core/p-969d5cca.entry.js +0 -1
  463. package/dist/apollo-core/p-99a79cf4.entry.js +0 -1
  464. package/dist/apollo-core/p-ae8a5f66.entry.js +0 -1
  465. package/dist/apollo-core/p-af8ebf49.entry.js +0 -1
  466. package/dist/apollo-core/p-b29025b2.entry.js +0 -1
  467. package/dist/apollo-core/p-b5a61076.entry.js +0 -1
  468. package/dist/apollo-core/p-bf7d8e18.entry.js +0 -1
  469. package/dist/apollo-core/p-c48e4884.entry.js +0 -1
  470. package/dist/apollo-core/p-cc57f20d.entry.js +0 -1
  471. package/dist/apollo-core/p-dca48977.entry.js +0 -1
  472. package/dist/apollo-core/p-e1833287.entry.js +0 -1
  473. package/dist/apollo-core/p-e2b73b60.entry.js +0 -1
  474. package/dist/apollo-core/p-e7e445b0.entry.js +0 -1
  475. package/dist/apollo-core/p-f1c103ff.entry.js +0 -1
  476. package/dist/apollo-core/p-ffc2f0cf.entry.js +0 -1
  477. package/dist/cjs/xpl-table-footer-cell.cjs.entry.js +0 -18
  478. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +0 -59
  479. package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +0 -190
  480. package/dist/components/p-9VnxPQLs.js +0 -1
  481. package/dist/components/p-B2oLZUDD.js +0 -1
  482. package/dist/components/p-BYYFsuD3.js +0 -1
  483. package/dist/components/p-BZtxVB1R.js +0 -1
  484. package/dist/components/p-CnVGKN63.js +0 -1
  485. package/dist/components/p-Cz7zDaI4.js +0 -1
  486. package/dist/components/p-D4rv6CNJ.js +0 -1
  487. package/dist/components/p-YG9Jza0y.js +0 -1
  488. package/dist/docs/xpl-table-header-cell/readme.md +0 -47
  489. package/dist/esm/xpl-table-footer-cell.entry.js +0 -16
  490. package/dist/esm/xpl-table-header-cell.entry.js +0 -57
  491. package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -13
@@ -1,69 +1,150 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-3cBvw409.js');
4
+ var lifecycle = require('./lifecycle-DeSsFfQZ.js');
5
+ var tableInternal = require('./table-internal-DssCrBs_.js');
4
6
 
5
- const getIconType = (sortType) => {
6
- switch (sortType) {
7
- case 'asc':
8
- return 'arrow-up';
9
- case 'desc':
10
- return 'arrow-down';
11
- default:
12
- return 'dash';
7
+ function getNearestTableBodyRowFromNode(node) {
8
+ const el = node instanceof HTMLElement ? node : null;
9
+ if (!el) {
10
+ return null;
13
11
  }
14
- };
12
+ const row = el.closest('xpl-table-row');
13
+ return row != null ? row : null;
14
+ }
15
+ function getNextVisibleTableBodyRowAfter(element) {
16
+ const parent = element.parentElement;
17
+ if (!parent)
18
+ return null;
19
+ const siblings = Array.from(parent.children);
20
+ const idx = siblings.indexOf(element);
21
+ if (idx === -1)
22
+ return null;
23
+ for (let i = idx + 1; i < siblings.length; i += 1) {
24
+ const n = siblings[i];
25
+ if (n.tagName.toLowerCase() === 'xpl-table-row' && !n.hasAttribute('hidden')) {
26
+ return n;
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ function moveRowInTableBody(body, draggedRow, dropTargetRow) {
32
+ if (draggedRow === dropTargetRow || draggedRow.parentElement !== body) {
33
+ return;
34
+ }
35
+ if (dropTargetRow.parentElement !== body) {
36
+ return;
37
+ }
38
+ const visible = Array.from(body.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-row' && !c.hasAttribute('hidden'));
39
+ const fromIndex = visible.indexOf(draggedRow);
40
+ const toIndex = visible.indexOf(dropTargetRow);
41
+ if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) {
42
+ return;
43
+ }
44
+ if (fromIndex < toIndex) {
45
+ const nextVisible = getNextVisibleTableBodyRowAfter(dropTargetRow);
46
+ if (nextVisible) {
47
+ body.insertBefore(draggedRow, nextVisible);
48
+ }
49
+ else {
50
+ body.insertBefore(draggedRow, null);
51
+ }
52
+ }
53
+ else {
54
+ body.insertBefore(draggedRow, dropTargetRow);
55
+ }
56
+ }
57
+
58
+ function bodyRowFromDragTarget(target) {
59
+ return getNearestTableBodyRowFromNode(target);
60
+ }
61
+ function tableBodyRowFromEvent(ev) {
62
+ const path = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
63
+ const row = path.find((n) => n instanceof HTMLElement && n.tagName.toLowerCase() === 'xpl-table-row');
64
+ return row ?? bodyRowFromDragTarget(ev.target);
65
+ }
66
+ function reorderDragHandleFromEvent(ev) {
67
+ const path = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
68
+ const handle = path.find((n) => n instanceof HTMLElement && n.classList.contains('xpl-table__row-drag-handle'));
69
+ return handle ?? null;
70
+ }
15
71
  const Table = class {
16
72
  constructor(hostRef) {
17
73
  index.registerInstance(this, hostRef);
18
- this.tableSelect = index.createEvent(this, "tableSelect", 7);
74
+ this.rowOrderChange = index.createEvent(this, "rowOrderChange", 3);
75
+ this.rowSelectionChange = index.createEvent(this, "rowSelectionChange", 3);
19
76
  this.sortChanged = index.createEvent(this, "sortChanged", 3);
20
- this.selectedValues = [];
21
- this.isSortable = false;
22
- this.sortableColumns = [];
77
+ this.tableSelect = index.createEvent(this, "tableSelect", 7);
78
+ this.columnWidthsToken = '';
79
+ this.lastEmittedRowSelectionKey = '';
80
+ this.draggedRow = null;
81
+ this.pendingDragRow = null;
82
+ this.pointerUpClearPending = null;
83
+ this.reorderKeyboardTimers = new lifecycle.TimerManager();
84
+ this.onReorderHandleKeydown = (ev) => {
85
+ this.handleReorderHandleKeyDown(ev);
86
+ };
23
87
  this.areAllSelected = false;
88
+ this.colCount = 0;
24
89
  this.hasScrolled = false;
90
+ this.keyboardReorderRowId = null;
91
+ this.reorderLiveMessage = '';
92
+ this.rowData = [];
93
+ this.rowFooterData = [];
94
+ this.selected = [];
95
+ this.selectedRowIds = [];
25
96
  this.sortTypeArray = [];
97
+ this.isSortable = false;
98
+ this.rowReorderable = false;
99
+ this.selectedValues = [];
100
+ this.sortableColumns = [];
101
+ this.onGridScroll = (e) => {
102
+ this.hasScrolled = e.target.scrollLeft > 0;
103
+ };
26
104
  this.selectAll = (e) => {
27
- const checked = e.detail;
105
+ const { target } = e;
106
+ if (!(target instanceof HTMLInputElement))
107
+ return;
108
+ const { checked } = target;
28
109
  this.areAllSelected = checked;
29
110
  this.selected =
30
- this.selectedValues.length > 0
31
- ? Array.from(this.el.querySelectorAll('tbody td:first-child xpl-checkbox')).map((checkbox) => (checked ? (checkbox.value ?? checked) : checked))
111
+ this.selectedValues && this.selectedValues.length > 0
112
+ ? Array.from(this.el.querySelectorAll('tbody td:first-child input')).map((input) => (checked ? input?.value : checked))
32
113
  : this.selected.map(() => checked);
33
- this.onChange();
114
+ this.onSelectionChange();
34
115
  };
35
116
  this.selectOne = (e, checkboxIdx) => {
36
- const checked = e.detail;
37
- const { value } = e.target;
117
+ const { target } = e;
118
+ if (!(target instanceof HTMLInputElement))
119
+ return;
120
+ const { checked, value } = target;
121
+ this.areAllSelected = false;
38
122
  this.selected = this.selected.map((v, selectedIdx) => {
39
123
  if (selectedIdx !== checkboxIdx)
40
124
  return v;
41
- return this.selectedValues.length > 0
125
+ return this.selectedValues && this.selectedValues.length > 0
42
126
  ? checked
43
- ? (value ?? checked)
127
+ ? value
44
128
  : checked
45
129
  : checked;
46
130
  });
47
- this.areAllSelected = this.selected.every((v) => !!v);
48
- this.onChange();
131
+ this.onSelectionChange();
49
132
  };
50
- this.onChange = () => {
133
+ this.onSelectionChange = () => {
51
134
  this.tableSelect.emit({
52
135
  selected: this.selected,
53
136
  areAllSelected: this.areAllSelected,
54
137
  });
55
138
  };
56
- this.onScroll = () => {
139
+ this.onLegacyScroll = () => {
57
140
  this.hasScrolled = this.container.scrollLeft > 0;
58
141
  };
59
142
  this.sortBy = (col, sortTypeArray) => {
60
143
  const handleSort = (a, b) => {
61
- if (a[col].toLocaleLowerCase() < b[col].toLocaleLowerCase()) {
144
+ if (a[col].toLocaleLowerCase() < b[col].toLocaleLowerCase())
62
145
  return -1;
63
- }
64
- if (a[col].toLocaleLowerCase() > b[col].toLocaleLowerCase()) {
146
+ if (a[col].toLocaleLowerCase() > b[col].toLocaleLowerCase())
65
147
  return 1;
66
- }
67
148
  return 0;
68
149
  };
69
150
  switch (sortTypeArray[col]) {
@@ -74,7 +155,7 @@ const Table = class {
74
155
  this.rowData.sort((a, b) => handleSort(b, a));
75
156
  break;
76
157
  default:
77
- this.rowData = this.data ? Array.from(this.data) : [];
158
+ this.rowData = this.data !== undefined ? Array.from(this.data) : [];
78
159
  this.sortTypeArray[col] = null;
79
160
  break;
80
161
  }
@@ -83,44 +164,69 @@ const Table = class {
83
164
  this.setData = () => {
84
165
  this.rowData = this.data !== undefined ? Array.from(this.data) : [];
85
166
  };
167
+ this.setFooterData = () => {
168
+ this.rowFooterData = this.footer !== undefined ? Array.from(this.footer) : [];
169
+ };
86
170
  }
87
- handleSort(clickEvt, isColumnSortable, colNum, colName) {
88
- clickEvt.preventDefault();
89
- clickEvt.stopPropagation();
90
- if (!isColumnSortable)
91
- return;
92
- this.sortTypeArray = this.sortTypeArray.map((val, i) => {
93
- if (i !== colNum)
94
- return null;
95
- switch (val) {
96
- case 'asc':
97
- return 'desc';
98
- case 'desc':
99
- return null;
100
- default:
101
- return 'asc';
102
- }
103
- });
104
- const evt = this.sortChanged.emit({
105
- colNum,
106
- colName,
107
- sortTypeArr: this.sortTypeArray,
108
- });
109
- if (!evt.defaultPrevented)
110
- this.sortBy(colNum, this.sortTypeArray);
171
+ watchColumns() {
172
+ this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
111
173
  }
112
174
  watchData() {
113
175
  this.setData();
114
176
  }
115
- watchColumns() {
116
- this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
177
+ watchFooterData() {
178
+ this.setFooterData();
179
+ }
180
+ watchReorderHandleIcon() {
181
+ if (this.isLegacyMode || !this.rowReorderable)
182
+ return;
183
+ this.syncInjectedReorderHandleIcons();
184
+ }
185
+ watchReorderHandleIconKeyboard() {
186
+ if (this.isLegacyMode || !this.rowReorderable)
187
+ return;
188
+ this.syncInjectedReorderHandleIcons();
189
+ }
190
+ watchRowReorderable(next) {
191
+ if (this.isLegacyMode)
192
+ return;
193
+ if (!next) {
194
+ this.keyboardReorderRowId = null;
195
+ this.syncReorderHandleKeyboardA11y(null);
196
+ this.removeManagedReorderCells();
197
+ this.draggedRow = null;
198
+ this.pendingDragRow = null;
199
+ this.clearPendingDragListeners();
200
+ this.reorderLiveMessage = '';
201
+ this.queryBodyRows().forEach((r) => {
202
+ r.removeAttribute('draggable');
203
+ r.querySelector('.xpl-table__row-drag-handle')?.removeAttribute('draggable');
204
+ r.classList.remove('xpl-table-row--dragging', 'xpl-table-row--drag-over');
205
+ });
206
+ this.colCount = 0;
207
+ this.columnWidthsToken = '';
208
+ }
209
+ }
210
+ watchSelectable(next) {
211
+ if (this.isLegacyMode)
212
+ return;
213
+ if (!next) {
214
+ this.selectedRowIds = [];
215
+ this.lastEmittedRowSelectionKey = '';
216
+ this.colCount = 0;
217
+ this.columnWidthsToken = '';
218
+ this.syncRowSelectedProps();
219
+ }
117
220
  }
118
221
  componentWillLoad() {
119
- this.ensureSelectAllValue();
120
- this.areAllSelected = false;
121
- this.setData();
122
- this.selected = new Array(this.rowData.length).fill(false);
123
- this.ensureSortTypeArray();
222
+ if (this.isLegacyMode) {
223
+ this.ensureSelectAllValue();
224
+ this.areAllSelected = false;
225
+ this.setData();
226
+ this.setFooterData();
227
+ this.selected = new Array(this.rowData.length).fill(false);
228
+ this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
229
+ }
124
230
  }
125
231
  ensureSelectAllValue() {
126
232
  if (this.selectAllValue !== undefined) {
@@ -140,43 +246,1061 @@ const Table = class {
140
246
  this.selectAllValue = `select-all-${Table.selectAllSeq}`;
141
247
  this.el.setAttribute('data-select-all-value', this.selectAllValue);
142
248
  }
143
- ensureSortTypeArray() {
249
+ componentDidLoad() {
250
+ if (!this.isLegacyMode) {
251
+ this.syncCompositionalLayout();
252
+ }
253
+ }
254
+ componentDidUpdate() {
255
+ if (!this.isLegacyMode) {
256
+ this.syncCompositionalLayout();
257
+ }
258
+ }
259
+ disconnectedCallback() {
260
+ this.clearPendingDragListeners();
261
+ this.detachReorderHandleKeydownListeners();
262
+ this.reorderKeyboardTimers.dispose();
263
+ if (this.reorderAnnounceRaf !== undefined) {
264
+ cancelAnimationFrame(this.reorderAnnounceRaf);
265
+ this.reorderAnnounceRaf = undefined;
266
+ }
267
+ }
268
+ handleHeaderCellColumnWidthsChange(ev) {
269
+ if (this.isLegacyMode)
270
+ return;
271
+ const t = ev.target;
272
+ if (!(t instanceof Node) || !this.el.contains(t))
273
+ return;
274
+ this.updateColumnWidths();
275
+ }
276
+ handleCompositionalCheckboxChange(ev) {
277
+ if (this.isLegacyMode || !this.selectable)
278
+ return;
279
+ if (!this.isEventFromThisTable(ev.target))
280
+ return;
281
+ const path = ev.composedPath?.() ?? [];
282
+ let checkboxHost = (path.length > 0 ? path : [ev.target].filter((n) => n != null)).find((n) => n instanceof HTMLElement && n.tagName.toLowerCase() === 'xpl-checkbox');
283
+ if (!checkboxHost &&
284
+ ev.target &&
285
+ typeof ev.target.closest === 'function') {
286
+ checkboxHost = ev.target.closest('xpl-checkbox') ?? undefined;
287
+ }
288
+ if (!checkboxHost || !this.el.contains(checkboxHost))
289
+ return;
290
+ const row = checkboxHost.closest('xpl-table-row');
291
+ if (!row || !this.isDirectChildBodyRow(row))
292
+ return;
293
+ const cell = checkboxHost.closest('xpl-table-cell');
294
+ if (!cell)
295
+ return;
296
+ const selectionIdx = this.getSelectionColumnIndex();
297
+ if (selectionIdx === null)
298
+ return;
299
+ const bodyCells = Table.getBodyRowCells(row);
300
+ const colIdx = bodyCells.indexOf(cell);
301
+ if (colIdx !== selectionIdx)
302
+ return;
303
+ ev.stopPropagation();
304
+ const rowId = Table.getRowIdForRow(row);
305
+ if (!rowId || row.disabled)
306
+ return;
307
+ const input = checkboxHost.querySelector('input[type="checkbox"]');
308
+ if (!input)
309
+ return;
310
+ const { checked } = input;
311
+ if (checked) {
312
+ if (!this.selectedRowIds.includes(rowId)) {
313
+ this.selectedRowIds = [...this.selectedRowIds, rowId];
314
+ }
315
+ }
316
+ else {
317
+ this.selectedRowIds = this.selectedRowIds.filter((id) => id !== rowId);
318
+ }
319
+ this.applyHeaderCheckboxState();
320
+ this.syncRowSelectedProps();
321
+ this.emitCompositionalSelection();
322
+ }
323
+ handleCompositionalHeaderCheckboxChange(ev) {
324
+ if (this.isLegacyMode || !this.selectable)
325
+ return;
326
+ if (!this.isEventFromThisTable(ev.target))
327
+ return;
328
+ const path = ev.composedPath?.() ?? [];
329
+ let headerCell = (path.length > 0 ? path : [ev.target].filter((n) => n != null)).find((n) => n instanceof HTMLElement &&
330
+ n.tagName.toLowerCase() === 'xpl-table-header-cell' &&
331
+ n.getAttribute('type') === 'checkbox');
332
+ if (!headerCell && ev.target && typeof ev.target.closest === 'function') {
333
+ const maybeCell = ev.target.closest('xpl-table-header-cell[type="checkbox"]');
334
+ if (maybeCell instanceof HTMLElement) {
335
+ headerCell = maybeCell;
336
+ }
337
+ }
338
+ if (!headerCell || !this.el.contains(headerCell))
339
+ return;
340
+ if (!this.isCellInOurCompositionalHeader(headerCell))
341
+ return;
342
+ const headerCells = this.getCompositionalHeaderCells();
343
+ if (!headerCells.includes(headerCell))
344
+ return;
345
+ const checked = !!ev.detail;
346
+ const selectableRows = this.querySelectableBodyRows();
347
+ const ids = selectableRows
348
+ .map((r) => Table.getRowIdForRow(r))
349
+ .filter((id) => !!id);
350
+ if (checked) {
351
+ this.selectedRowIds = [...ids];
352
+ }
353
+ else {
354
+ this.selectedRowIds = [];
355
+ }
356
+ this.applyBodyCheckboxStates();
357
+ this.syncRowSelectedProps();
358
+ this.emitCompositionalSelection();
359
+ }
360
+ handlePointerDownExitKeyboardReorder(ev) {
361
+ if (this.isLegacyMode || !this.rowReorderable || this.keyboardReorderRowId === null) {
362
+ return;
363
+ }
364
+ const t = ev.target;
365
+ if (!(t instanceof Node) || !this.el.contains(t)) {
366
+ return;
367
+ }
368
+ const row = t instanceof Element ? t.closest('xpl-table-row') : null;
369
+ if (!row || !this.isDirectChildBodyRow(row)) {
370
+ return;
371
+ }
372
+ this.keyboardReorderRowId = null;
373
+ this.syncReorderHandleKeyboardA11y(null);
374
+ }
375
+ handleReorderHandleKeyDown(ev) {
376
+ if (this.isLegacyMode || !this.rowReorderable) {
377
+ return;
378
+ }
379
+ const rawPath = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
380
+ const path = rawPath.length > 0 ? rawPath : ev.target ? [ev.target] : [];
381
+ let handle = path.find((n) => n instanceof HTMLElement && n.classList.contains('xpl-table__row-drag-handle'));
382
+ if (!handle &&
383
+ ev.target instanceof HTMLElement &&
384
+ ev.target.classList.contains('xpl-table__row-drag-handle')) {
385
+ handle = ev.target;
386
+ }
387
+ if (!handle || !this.el.contains(handle)) {
388
+ return;
389
+ }
390
+ const row = handle.closest('xpl-table-row');
391
+ if (!row || !this.isDirectChildBodyRow(row)) {
392
+ return;
393
+ }
394
+ const rowId = Table.getRowIdForRow(row) ?? '';
395
+ if (!rowId) {
396
+ return;
397
+ }
398
+ const isKbd = this.keyboardReorderRowId === rowId;
399
+ const isEscapeKey = ev.key === 'Escape' ||
400
+ ev.key === 'Esc' ||
401
+ ev.code === 'Escape' ||
402
+ ev.keyCode === 27;
403
+ if (row.disabled) {
404
+ if (isEscapeKey && isKbd) {
405
+ ev.preventDefault();
406
+ this.keyboardReorderRowId = null;
407
+ this.syncReorderHandleKeyboardA11y(null);
408
+ }
409
+ return;
410
+ }
411
+ if (isEscapeKey) {
412
+ if (isKbd) {
413
+ ev.preventDefault();
414
+ this.keyboardReorderRowId = null;
415
+ this.syncReorderHandleKeyboardA11y(null);
416
+ }
417
+ return;
418
+ }
419
+ if (!isKbd) {
420
+ if (ev.key === 'Enter' || ev.key === ' ') {
421
+ ev.preventDefault();
422
+ this.keyboardReorderRowId = rowId;
423
+ this.syncReorderHandleKeyboardA11y(rowId);
424
+ }
425
+ return;
426
+ }
427
+ if (ev.key === 'ArrowUp' || ev.key === 'ArrowDown') {
428
+ ev.preventDefault();
429
+ const dir = ev.key === 'ArrowUp' ? 'up' : 'down';
430
+ this.performKeyboardRowReorder(rowId, dir);
431
+ }
432
+ }
433
+ handleRowReorderPointerDown(ev) {
434
+ if (this.isLegacyMode || !this.rowReorderable) {
435
+ return;
436
+ }
437
+ const handle = reorderDragHandleFromEvent(ev);
438
+ if (!handle) {
439
+ return;
440
+ }
441
+ const table = handle.closest('xpl-table');
442
+ if (table !== this.el) {
443
+ return;
444
+ }
445
+ const row = bodyRowFromDragTarget(handle);
446
+ if (!row || row.disabled) {
447
+ return;
448
+ }
449
+ const body = this.getDirectChildTableSection('xpl-table-body');
450
+ if (!body || row.parentElement !== body) {
451
+ return;
452
+ }
453
+ this.clearPendingDragListeners();
454
+ this.pendingDragRow = row;
455
+ const onPointerEnd = () => {
456
+ this.clearPendingDragListeners();
457
+ this.pendingDragRow = null;
458
+ };
459
+ document.addEventListener('pointerup', onPointerEnd, true);
460
+ document.addEventListener('pointercancel', onPointerEnd, true);
461
+ this.pointerUpClearPending = () => {
462
+ document.removeEventListener('pointerup', onPointerEnd, true);
463
+ document.removeEventListener('pointercancel', onPointerEnd, true);
464
+ };
465
+ }
466
+ handleRowReorderDragStart(ev) {
467
+ if (this.isLegacyMode || !this.rowReorderable) {
468
+ return;
469
+ }
470
+ const row = tableBodyRowFromEvent(ev);
471
+ if (!row) {
472
+ return;
473
+ }
474
+ if (row.closest('xpl-table') !== this.el) {
475
+ return;
476
+ }
477
+ const body = this.getDirectChildTableSection('xpl-table-body');
478
+ if (!body || row.parentElement !== body) {
479
+ return;
480
+ }
481
+ if (row.disabled || this.pendingDragRow !== row) {
482
+ ev.preventDefault();
483
+ return;
484
+ }
485
+ this.keyboardReorderRowId = null;
486
+ this.syncReorderHandleKeyboardA11y(null);
487
+ this.clearPendingDragListeners();
488
+ this.pendingDragRow = null;
489
+ this.draggedRow = row;
490
+ if (ev.dataTransfer) {
491
+ ev.dataTransfer.effectAllowed = 'move';
492
+ ev.dataTransfer.setData('text/plain', Table.getRowIdForRow(row) ?? '');
493
+ }
494
+ row.classList.add('xpl-table-row--dragging');
495
+ }
496
+ handleRowReorderDragEnd(ev) {
497
+ if (this.isLegacyMode || !this.rowReorderable) {
498
+ return;
499
+ }
500
+ const row = tableBodyRowFromEvent(ev);
501
+ if (!row || row.closest('xpl-table') !== this.el) {
502
+ return;
503
+ }
504
+ row.classList.remove('xpl-table-row--dragging');
505
+ this.clearReorderDragOverClasses();
506
+ this.draggedRow = null;
507
+ }
508
+ handleRowReorderDragOver(ev) {
509
+ if (this.isLegacyMode || !this.rowReorderable) {
510
+ return;
511
+ }
512
+ const row = tableBodyRowFromEvent(ev);
513
+ if (!row || row.closest('xpl-table') !== this.el) {
514
+ return;
515
+ }
516
+ const body = this.getDirectChildTableSection('xpl-table-body');
517
+ if (!body || row.parentElement !== body || row.disabled) {
518
+ return;
519
+ }
520
+ ev.preventDefault();
521
+ if (ev.dataTransfer) {
522
+ ev.dataTransfer.dropEffect = 'move';
523
+ }
524
+ }
525
+ handleRowReorderDragEnter(ev) {
526
+ if (this.isLegacyMode || !this.rowReorderable) {
527
+ return;
528
+ }
529
+ const row = tableBodyRowFromEvent(ev);
530
+ if (!row || row.closest('xpl-table') !== this.el) {
531
+ return;
532
+ }
533
+ const body = this.getDirectChildTableSection('xpl-table-body');
534
+ if (!body || row.parentElement !== body || row.disabled) {
535
+ return;
536
+ }
537
+ ev.preventDefault();
538
+ row.classList.add('xpl-table-row--drag-over');
539
+ }
540
+ handleRowReorderDragLeave(ev) {
541
+ if (this.isLegacyMode || !this.rowReorderable) {
542
+ return;
543
+ }
544
+ const row = tableBodyRowFromEvent(ev);
545
+ if (!row || row.closest('xpl-table') !== this.el) {
546
+ return;
547
+ }
548
+ const related = ev.relatedTarget;
549
+ if (related && row.contains(related)) {
550
+ return;
551
+ }
552
+ row.classList.remove('xpl-table-row--drag-over');
553
+ }
554
+ handleRowReorderDrop(ev) {
555
+ if (this.isLegacyMode || !this.rowReorderable) {
556
+ return;
557
+ }
558
+ ev.preventDefault();
559
+ const dropRow = tableBodyRowFromEvent(ev);
560
+ if (!dropRow || dropRow.closest('xpl-table') !== this.el) {
561
+ return;
562
+ }
563
+ const body = this.getDirectChildTableSection('xpl-table-body');
564
+ if (!body || dropRow.parentElement !== body || dropRow.disabled) {
565
+ return;
566
+ }
567
+ const source = this.draggedRow;
568
+ if (!source || source.disabled) {
569
+ this.draggedRow = null;
570
+ this.clearReorderDragOverClasses();
571
+ return;
572
+ }
573
+ if (source === dropRow) {
574
+ this.clearReorderDragOverClasses();
575
+ return;
576
+ }
577
+ const visible = this.getVisibleBodyRowsForReorder();
578
+ const fromIndex = visible.indexOf(source);
579
+ const toIndex = visible.indexOf(dropRow);
580
+ if (fromIndex === -1 || toIndex === -1) {
581
+ this.clearReorderDragOverClasses();
582
+ return;
583
+ }
584
+ const direction = fromIndex > toIndex ? 'up' : 'down';
585
+ const rowId = Table.getRowIdForRow(source) ?? '';
586
+ const runMove = () => {
587
+ moveRowInTableBody(body, source, dropRow);
588
+ };
589
+ runMove();
590
+ const orderedRowIds = this.getVisibleBodyRowsForReorder().map((r) => Table.getRowIdForRow(r) ?? '');
591
+ this.rowOrderChange.emit({
592
+ rowId,
593
+ direction,
594
+ orderedRowIds,
595
+ fromIndex,
596
+ toIndex,
597
+ });
598
+ this.announceRowReorder(rowId, orderedRowIds);
599
+ this.clearReorderDragOverClasses();
600
+ if (this.selectable) {
601
+ this.applyBodyCheckboxStates();
602
+ this.applyHeaderCheckboxState();
603
+ this.syncRowSelectedProps();
604
+ }
605
+ this.updateColumnWidths();
606
+ }
607
+ get isLegacyMode() {
608
+ return this.columns !== undefined || this.data !== undefined || this.footer !== undefined;
609
+ }
610
+ ensureTableInstanceId() {
611
+ if (this.tableInstanceId)
612
+ return;
613
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
614
+ this.tableInstanceId = crypto.randomUUID();
615
+ }
616
+ else {
617
+ this.tableInstanceId = Math.random().toString(36).slice(2);
618
+ }
619
+ }
620
+ generateRowId() {
621
+ this.ensureTableInstanceId();
622
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
623
+ return `${this.tableInstanceId}-${crypto.randomUUID()}`;
624
+ }
625
+ return `${this.tableInstanceId}-${Math.random().toString(36).slice(2)}`;
626
+ }
627
+ syncCompositionalLayout() {
628
+ if (this.isLegacyMode)
629
+ return;
630
+ if (this.rowReorderable) {
631
+ this.syncReorderColumn();
632
+ }
633
+ else {
634
+ this.removeManagedReorderCells();
635
+ }
636
+ if (this.selectable) {
637
+ this.ensureTableInstanceId();
638
+ this.pruneStaleSelectedRowIds();
639
+ this.ensureBodyRowIds();
640
+ this.applyBodyCheckboxStates();
641
+ this.applyHeaderCheckboxState();
642
+ this.syncRowSelectedProps();
643
+ }
644
+ if (this.rowReorderable && this.selectable) {
645
+ this.normalizeManagedColumnsOrder();
646
+ }
647
+ this.updateColumnWidths();
648
+ }
649
+ getDirectChildTableSection(tag) {
650
+ const el = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === tag);
651
+ return el ?? null;
652
+ }
653
+ isDirectChildBodyRow(row) {
654
+ const body = this.getDirectChildTableSection('xpl-table-body');
655
+ return body !== null && row.parentElement === body;
656
+ }
657
+ isCellInOurCompositionalHeader(cell) {
658
+ const header = cell.closest('xpl-table-header');
659
+ return header !== null && header.parentElement === this.el;
660
+ }
661
+ getSelectionColumnIndex() {
662
+ const headerCells = this.getCompositionalHeaderCells();
663
+ const idx = headerCells.findIndex((c) => c.getAttribute('type') === 'checkbox');
664
+ return idx >= 0 ? idx : null;
665
+ }
666
+ static getBodyRowCells(row) {
667
+ return Array.from(row.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-cell');
668
+ }
669
+ queryBodyRows() {
670
+ const body = this.getDirectChildTableSection('xpl-table-body');
671
+ if (!body)
672
+ return [];
673
+ return Array.from(body.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-row');
674
+ }
675
+ querySelectableBodyRows() {
676
+ return this.queryBodyRows().filter((row) => !row.disabled);
677
+ }
678
+ static getRowIdForRow(row) {
679
+ const id = row.getAttribute('row-id')?.trim();
680
+ return id || null;
681
+ }
682
+ ensureBodyRowIds() {
683
+ this.queryBodyRows().forEach((row) => {
684
+ if (Table.getRowIdForRow(row))
685
+ return;
686
+ row.setAttribute('row-id', this.generateRowId());
687
+ });
688
+ }
689
+ removeManagedReorderCells() {
690
+ this.el.querySelectorAll(`[${tableInternal.ROW_REORDER_MARK}]`).forEach((node) => {
691
+ if (!(node instanceof Element))
692
+ return;
693
+ if (node.closest('xpl-table') !== this.el)
694
+ return;
695
+ node.parentElement?.removeChild(node);
696
+ });
697
+ }
698
+ getSelectionSlotCellForReorderOrder(row) {
699
+ const idx = this.getSelectionColumnIndex();
700
+ if (idx === null) {
701
+ return null;
702
+ }
703
+ const cells = Array.from(row.children);
704
+ const cell = cells[idx];
705
+ if (!cell) {
706
+ return null;
707
+ }
708
+ const tag = cell.tagName.toLowerCase();
709
+ if (tag === 'xpl-table-header-cell') {
710
+ return cell.getAttribute('type') === 'checkbox' ? cell : null;
711
+ }
712
+ if (tag === 'xpl-table-cell') {
713
+ if (cell.hasAttribute(tableInternal.SELECTION_MARK)) {
714
+ return cell;
715
+ }
716
+ return cell.querySelector('xpl-checkbox') ? cell : null;
717
+ }
718
+ if (tag === 'xpl-table-footer-cell') {
719
+ return cell;
720
+ }
721
+ return null;
722
+ }
723
+ normalizeManagedColumnsOrder() {
724
+ const fix = (row) => {
725
+ const re = row.querySelector(`:scope > [${tableInternal.ROW_REORDER_MARK}]`);
726
+ const se = this.getSelectionSlotCellForReorderOrder(row);
727
+ if (!re || !se) {
728
+ return;
729
+ }
730
+ const siblings = Array.from(row.children);
731
+ const iRe = siblings.indexOf(re);
732
+ const iSe = siblings.indexOf(se);
733
+ if (iRe > iSe) {
734
+ row.insertBefore(re, se);
735
+ }
736
+ };
737
+ const header = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header') ?? null;
738
+ if (header) {
739
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
740
+ const container = firstRow ?? header;
741
+ fix(container);
742
+ }
743
+ this.queryBodyRows().forEach((row) => fix(row));
744
+ const footer = this.getDirectChildTableSection('xpl-table-footer');
745
+ if (footer) {
746
+ Array.from(footer.children)
747
+ .filter((c) => c.tagName.toLowerCase() === 'xpl-table-row')
748
+ .forEach((row) => fix(row));
749
+ }
750
+ }
751
+ syncReorderColumn() {
752
+ if (!this.rowReorderable || this.isLegacyMode)
753
+ return;
754
+ this.ensureBodyRowIds();
755
+ this.ensureHeaderReorderCell();
756
+ this.ensureBodyReorderCells();
757
+ this.ensureFooterReorderCells();
758
+ this.applyReorderRowDraggableState();
759
+ }
760
+ ensureHeaderReorderCell() {
761
+ const header = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header') ?? null;
762
+ if (!header)
763
+ return;
764
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
765
+ const container = firstRow ?? header;
766
+ if (Array.from(container.children).some((c) => c.tagName.toLowerCase() === 'xpl-table-header-cell' &&
767
+ c.hasAttribute(tableInternal.ROW_REORDER_MARK))) {
768
+ return;
769
+ }
770
+ const cell = document.createElement('xpl-table-header-cell');
771
+ cell.setAttribute(tableInternal.ROW_REORDER_MARK, '');
772
+ cell.setAttribute('type', 'empty');
773
+ cell.setAttribute('width', '48');
774
+ cell.setAttribute('align', 'center');
775
+ container.insertBefore(cell, container.firstChild);
776
+ }
777
+ ensureBodyReorderCells() {
778
+ this.queryBodyRows().forEach((row) => {
779
+ const managed = Array.from(row.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-cell' &&
780
+ c.hasAttribute(tableInternal.ROW_REORDER_MARK));
781
+ if (managed.length > 1) {
782
+ for (let i = 1; i < managed.length; i += 1) {
783
+ managed[i].remove();
784
+ }
785
+ }
786
+ let cell = managed[0];
787
+ if (!cell) {
788
+ const newCell = document.createElement('xpl-table-cell');
789
+ newCell.setAttribute(tableInternal.ROW_REORDER_MARK, '');
790
+ newCell.setAttribute('width', '48');
791
+ newCell.setAttribute('align', 'center');
792
+ const btn = document.createElement('button');
793
+ btn.type = 'button';
794
+ btn.className = 'xpl-table__row-drag-handle';
795
+ btn.setAttribute('aria-label', 'Reorder row');
796
+ btn.setAttribute('aria-pressed', 'false');
797
+ const iconName = this.getResolvedIconForRow(Table.getRowIdForRow(row) ?? '');
798
+ if (iconName) {
799
+ const icon = document.createElement('xpl-icon');
800
+ icon.setAttribute('icon', iconName);
801
+ icon.setAttribute('size', '16');
802
+ btn.appendChild(icon);
803
+ }
804
+ newCell.appendChild(btn);
805
+ row.insertBefore(newCell, row.firstChild);
806
+ cell = newCell;
807
+ }
808
+ else {
809
+ cell.setAttribute('align', 'center');
810
+ }
811
+ const btn = cell.querySelector('.xpl-table__row-drag-handle');
812
+ if (btn) {
813
+ btn.disabled = row.disabled;
814
+ }
815
+ });
816
+ this.syncInjectedReorderHandleIcons();
817
+ this.attachReorderHandleKeydownListeners();
818
+ }
819
+ getResolvedIconForRow(rowId) {
820
+ const inKeyboardMode = this.keyboardReorderRowId !== null &&
821
+ rowId !== '' &&
822
+ rowId === this.keyboardReorderRowId;
823
+ if (inKeyboardMode) {
824
+ if (this.reorderHandleIconKeyboard === '') {
825
+ return null;
826
+ }
827
+ return this.reorderHandleIconKeyboard ?? 'caret-expand-y';
828
+ }
829
+ if (this.reorderHandleIcon === '') {
830
+ return null;
831
+ }
832
+ return this.reorderHandleIcon ?? 'grip-dots-vertical';
833
+ }
834
+ syncInjectedReorderHandleIcons() {
835
+ this.queryBodyRows().forEach((row) => {
836
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
837
+ if (!btn) {
838
+ return;
839
+ }
840
+ const rowId = Table.getRowIdForRow(row) ?? '';
841
+ const iconName = this.getResolvedIconForRow(rowId);
842
+ btn.querySelectorAll('xpl-icon').forEach((n) => n.remove());
843
+ if (iconName) {
844
+ const icon = document.createElement('xpl-icon');
845
+ icon.setAttribute('icon', iconName);
846
+ icon.setAttribute('size', '16');
847
+ btn.appendChild(icon);
848
+ }
849
+ });
850
+ }
851
+ syncReorderHandleKeyboardA11y(activeId) {
852
+ if (this.isLegacyMode || !this.rowReorderable) {
853
+ return;
854
+ }
855
+ this.queryBodyRows().forEach((row) => {
856
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
857
+ if (!btn) {
858
+ return;
859
+ }
860
+ const rid = Table.getRowIdForRow(row) ?? '';
861
+ const isActive = activeId !== null && rid === activeId;
862
+ btn.classList.toggle('xpl-table__row-drag-handle--keyboard-mode', isActive);
863
+ btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');
864
+ btn.setAttribute('aria-label', isActive
865
+ ? 'Press arrow up or down to reorder, Escape to exit'
866
+ : 'Press Enter or Space to activate keyboard reorder mode, or drag to reorder');
867
+ });
868
+ this.syncInjectedReorderHandleIcons();
869
+ }
870
+ attachReorderHandleKeydownListeners() {
871
+ if (this.isLegacyMode || !this.rowReorderable) {
872
+ return;
873
+ }
874
+ this.queryBodyRows().forEach((row) => {
875
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
876
+ if (!btn || btn.dataset.xplReorderKbdBound === 'true') {
877
+ return;
878
+ }
879
+ btn.dataset.xplReorderKbdBound = 'true';
880
+ btn.addEventListener('keydown', this.onReorderHandleKeydown);
881
+ });
882
+ }
883
+ detachReorderHandleKeydownListeners() {
884
+ if (!this.el) {
885
+ return;
886
+ }
887
+ this.el
888
+ .querySelectorAll('.xpl-table__row-drag-handle[data-xpl-reorder-kbd-bound="true"]')
889
+ .forEach((btn) => {
890
+ btn.removeEventListener('keydown', this.onReorderHandleKeydown);
891
+ delete btn.dataset.xplReorderKbdBound;
892
+ });
893
+ }
894
+ performKeyboardRowReorder(rowId, direction) {
895
+ const body = this.getDirectChildTableSection('xpl-table-body');
896
+ if (!body) {
897
+ return false;
898
+ }
899
+ const visible = this.getVisibleBodyRowsForReorder();
900
+ const itemIndex = visible.findIndex((r) => Table.getRowIdForRow(r) === rowId);
901
+ if (itemIndex === -1) {
902
+ return false;
903
+ }
904
+ const targetIndex = direction === 'up' ? itemIndex - 1 : itemIndex + 1;
905
+ if (targetIndex < 0 || targetIndex >= visible.length) {
906
+ return false;
907
+ }
908
+ const fromIndex = itemIndex;
909
+ const item = visible[itemIndex];
910
+ const targetItem = visible[targetIndex];
911
+ if (direction === 'up') {
912
+ body.insertBefore(item, targetItem);
913
+ }
914
+ else {
915
+ const nextVisible = getNextVisibleTableBodyRowAfter(targetItem);
916
+ if (nextVisible) {
917
+ body.insertBefore(item, nextVisible);
918
+ }
919
+ else {
920
+ body.appendChild(item);
921
+ }
922
+ }
923
+ const orderedRowIds = this.getVisibleBodyRowsForReorder().map((r) => Table.getRowIdForRow(r) ?? '');
924
+ const toIndex = orderedRowIds.indexOf(rowId);
925
+ this.rowOrderChange.emit({
926
+ rowId,
927
+ direction,
928
+ orderedRowIds,
929
+ fromIndex,
930
+ toIndex,
931
+ });
932
+ this.announceRowReorder(rowId, orderedRowIds);
933
+ this.clearReorderDragOverClasses();
934
+ if (this.selectable) {
935
+ this.applyBodyCheckboxStates();
936
+ this.applyHeaderCheckboxState();
937
+ this.syncRowSelectedProps();
938
+ }
939
+ this.updateColumnWidths();
940
+ this.reorderKeyboardTimers.requestAnimationFrame(() => {
941
+ if (!this.el.isConnected) {
942
+ return;
943
+ }
944
+ const moved = this.getVisibleBodyRowsForReorder().find((r) => Table.getRowIdForRow(r) === rowId);
945
+ const btn = moved?.querySelector('.xpl-table__row-drag-handle');
946
+ btn?.focus();
947
+ });
948
+ return true;
949
+ }
950
+ ensureFooterReorderCells() {
951
+ const footer = this.getDirectChildTableSection('xpl-table-footer');
952
+ if (!footer)
953
+ return;
954
+ Array.from(footer.children)
955
+ .filter((c) => c.tagName.toLowerCase() === 'xpl-table-row')
956
+ .forEach((row) => {
957
+ if (Array.from(row.children).some((c) => c.tagName.toLowerCase() === 'xpl-table-footer-cell' &&
958
+ c.hasAttribute(tableInternal.ROW_REORDER_MARK))) {
959
+ return;
960
+ }
961
+ const cell = document.createElement('xpl-table-footer-cell');
962
+ cell.setAttribute(tableInternal.ROW_REORDER_MARK, '');
963
+ cell.setAttribute('width', '48');
964
+ cell.setAttribute('align', 'center');
965
+ row.insertBefore(cell, row.firstChild);
966
+ });
967
+ }
968
+ static supportsSubgridBodyRow() {
969
+ return (typeof CSS !== 'undefined' &&
970
+ typeof CSS.supports === 'function' &&
971
+ CSS.supports('grid-template-columns', 'subgrid'));
972
+ }
973
+ applyReorderRowDraggableState() {
974
+ const useRowDrag = Table.supportsSubgridBodyRow();
975
+ this.queryBodyRows().forEach((row) => {
976
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
977
+ btn?.removeAttribute('draggable');
978
+ row.removeAttribute('draggable');
979
+ if (!this.rowReorderable || row.disabled) {
980
+ return;
981
+ }
982
+ if (!btn) {
983
+ return;
984
+ }
985
+ if (useRowDrag) {
986
+ row.setAttribute('draggable', 'true');
987
+ }
988
+ else {
989
+ btn.setAttribute('draggable', 'true');
990
+ }
991
+ });
992
+ }
993
+ getVisibleBodyRowsForReorder() {
994
+ return this.queryBodyRows().filter((r) => !r.hasAttribute('hidden'));
995
+ }
996
+ clearReorderDragOverClasses() {
997
+ this.queryBodyRows().forEach((r) => r.classList.remove('xpl-table-row--drag-over'));
998
+ }
999
+ clearPendingDragListeners() {
1000
+ if (this.pointerUpClearPending) {
1001
+ this.pointerUpClearPending();
1002
+ this.pointerUpClearPending = null;
1003
+ }
1004
+ }
1005
+ announceRowReorder(movedRowId, orderedRowIds) {
1006
+ if (!this.rowReorderable || !movedRowId) {
1007
+ return;
1008
+ }
1009
+ const index = orderedRowIds.indexOf(movedRowId);
1010
+ if (index < 0) {
1011
+ return;
1012
+ }
1013
+ this.reorderLiveMessage = '';
1014
+ if (this.reorderAnnounceRaf !== undefined) {
1015
+ cancelAnimationFrame(this.reorderAnnounceRaf);
1016
+ }
1017
+ this.reorderAnnounceRaf = requestAnimationFrame(() => {
1018
+ this.reorderAnnounceRaf = undefined;
1019
+ if (!this.el.isConnected) {
1020
+ return;
1021
+ }
1022
+ this.reorderLiveMessage = `Row ${movedRowId}, now position ${index + 1} of ${orderedRowIds.length}`;
1023
+ });
1024
+ }
1025
+ pruneStaleSelectedRowIds() {
1026
+ const validIds = new Set(this.queryBodyRows()
1027
+ .map((r) => Table.getRowIdForRow(r))
1028
+ .filter((id) => !!id));
1029
+ const next = this.selectedRowIds.filter((id) => validIds.has(id));
1030
+ if (next.length === this.selectedRowIds.length)
1031
+ return;
1032
+ this.selectedRowIds = next;
1033
+ this.applyBodyCheckboxStates();
1034
+ this.applyHeaderCheckboxState();
1035
+ this.syncRowSelectedProps();
1036
+ this.emitCompositionalSelection();
1037
+ }
1038
+ static getBodyRowCheckboxAriaLabel(row, selectionColIndex) {
1039
+ const cells = Table.getBodyRowCells(row);
1040
+ const labelCell = cells.find((c, i) => (selectionColIndex === null || i !== selectionColIndex) &&
1041
+ !c.hasAttribute(tableInternal.ROW_REORDER_MARK));
1042
+ const first = labelCell ?? cells[0];
1043
+ if (!first)
1044
+ return 'Select row';
1045
+ const raw = first.textContent?.replace(/\s+/g, ' ').trim() ?? '';
1046
+ if (!raw)
1047
+ return 'Select row';
1048
+ const truncated = raw.length > 100 ? `${raw.slice(0, 100)}…` : raw;
1049
+ return `Select row, ${truncated}`;
1050
+ }
1051
+ applyBodyCheckboxStates() {
1052
+ const selectionIdx = this.getSelectionColumnIndex();
1053
+ if (selectionIdx === null)
1054
+ return;
1055
+ this.queryBodyRows().forEach((row) => {
1056
+ const rowId = Table.getRowIdForRow(row);
1057
+ const cells = Table.getBodyRowCells(row);
1058
+ const cell = cells[selectionIdx];
1059
+ const cb = cell?.querySelector('xpl-checkbox');
1060
+ if (!cb || !rowId)
1061
+ return;
1062
+ cb.checked = this.selectedRowIds.includes(rowId);
1063
+ cb.disabled = row.disabled;
1064
+ cb.value = rowId;
1065
+ cb.setAttribute('aria-label', Table.getBodyRowCheckboxAriaLabel(row, selectionIdx));
1066
+ });
1067
+ }
1068
+ getHeaderCheckboxCell() {
1069
+ const idx = this.getSelectionColumnIndex();
1070
+ if (idx === null)
1071
+ return null;
1072
+ const cells = this.getCompositionalHeaderCells();
1073
+ const cell = cells[idx];
1074
+ if (!cell || cell.getAttribute('type') !== 'checkbox')
1075
+ return null;
1076
+ return cell;
1077
+ }
1078
+ applyHeaderCheckboxState() {
1079
+ const cell = this.getHeaderCheckboxCell();
1080
+ if (!cell)
1081
+ return;
1082
+ const selectableRows = this.querySelectableBodyRows();
1083
+ const ids = selectableRows
1084
+ .map((r) => Table.getRowIdForRow(r))
1085
+ .filter((id) => !!id);
1086
+ const selectedCount = ids.filter((id) => this.selectedRowIds.includes(id)).length;
1087
+ const allSelected = ids.length > 0 && selectedCount === ids.length;
1088
+ const indeterminate = selectedCount > 0 && !allSelected;
1089
+ cell.checked = allSelected;
1090
+ cell.indeterminate = indeterminate;
1091
+ }
1092
+ syncRowSelectedProps() {
1093
+ this.queryBodyRows().forEach((row) => {
1094
+ const id = Table.getRowIdForRow(row);
1095
+ const selected = id ? this.selectedRowIds.includes(id) : false;
1096
+ row.selected = selected;
1097
+ });
1098
+ }
1099
+ emitCompositionalSelection() {
1100
+ const ids = this.selectedRowIds;
1101
+ const key = ids.join('\u0001');
1102
+ if (key === this.lastEmittedRowSelectionKey) {
1103
+ return;
1104
+ }
1105
+ this.lastEmittedRowSelectionKey = key;
1106
+ this.rowSelectionChange.emit({ selectedRowIds: [...ids] });
1107
+ }
1108
+ isEventFromThisTable(target) {
1109
+ if (target == null || typeof target !== 'object')
1110
+ return false;
1111
+ const t = target;
1112
+ const start = 'closest' in t && typeof t.closest === 'function'
1113
+ ? t
1114
+ : 'parentElement' in t
1115
+ ? t.parentElement
1116
+ : null;
1117
+ if (!start)
1118
+ return false;
1119
+ const nearest = start.closest('xpl-table');
1120
+ return nearest === this.el;
1121
+ }
1122
+ static sortKeyFromHeaderCell(cell, columnIndex) {
1123
+ const c = cell;
1124
+ const raw = (c.sortKey ?? c.label ?? '').trim();
1125
+ if (raw.length > 0) {
1126
+ return raw.replace(/ /g, '-').toLowerCase();
1127
+ }
1128
+ return `column-${columnIndex}`;
1129
+ }
1130
+ handleCompositionalHeaderSort(ev) {
1131
+ if (this.isLegacyMode)
1132
+ return;
1133
+ if (!this.isEventFromThisTable(ev.target))
1134
+ return;
1135
+ ev.stopPropagation();
1136
+ const source = ev.target;
1137
+ const headerRow = source.closest('xpl-table-header xpl-table-row') ?? source.closest('xpl-table-row');
1138
+ if (!headerRow || !this.el.contains(headerRow))
1139
+ return;
1140
+ const cells = Array.from(headerRow.querySelectorAll('xpl-table-header-cell'));
1141
+ const { columnIndex } = ev.detail;
1142
+ const target = cells[columnIndex];
1143
+ if (!target?.sortable)
1144
+ return;
1145
+ const next = tableInternal.cycleSortDirection(target.sortDirection);
1146
+ cells.forEach((cell, i) => {
1147
+ const hc = cell;
1148
+ if (!hc.sortable)
1149
+ return;
1150
+ hc.sortDirection = i === columnIndex ? next : null;
1151
+ });
1152
+ const sortState = {};
1153
+ cells.forEach((cell, i) => {
1154
+ const hc = cell;
1155
+ if (!hc.sortable)
1156
+ return;
1157
+ sortState[Table.sortKeyFromHeaderCell(hc, i)] = hc.sortDirection ?? null;
1158
+ });
1159
+ const sortTypeArr = cells.map((cell) => {
1160
+ const hc = cell;
1161
+ return hc.sortable ? (hc.sortDirection ?? null) : null;
1162
+ });
1163
+ const colName = Table.sortKeyFromHeaderCell(cells[columnIndex], columnIndex);
1164
+ const detail = {
1165
+ ...sortState,
1166
+ colNum: columnIndex,
1167
+ colName,
1168
+ sortTypeArr,
1169
+ };
1170
+ this.sortChanged.emit(detail);
1171
+ }
1172
+ legacySortStatePayload() {
1173
+ const out = {};
1174
+ if (!this.columns?.length)
1175
+ return out;
1176
+ this.columns.forEach((col, i) => {
1177
+ const key = col.replace(/ /g, '-').toLowerCase();
1178
+ out[key] = this.sortTypeArray[i] ?? null;
1179
+ });
1180
+ return out;
1181
+ }
1182
+ legacySortChangedDetail(colNum) {
1183
+ const base = this.legacySortStatePayload();
1184
+ const title = this.columns?.[colNum] ?? '';
1185
+ const colName = title.replace(/ /g, '-').toLowerCase();
1186
+ return {
1187
+ ...base,
1188
+ colNum,
1189
+ colName,
1190
+ sortTypeArr: [...this.sortTypeArray],
1191
+ };
1192
+ }
1193
+ getCompositionalHeaderCells() {
1194
+ const header = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header') ?? null;
1195
+ if (!header)
1196
+ return [];
1197
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
1198
+ const container = firstRow ?? header;
1199
+ return Array.from(container.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-header-cell');
1200
+ }
1201
+ updateColumnWidths() {
1202
+ const headerCells = this.getCompositionalHeaderCells();
1203
+ const columnWidths = headerCells.map((cell) => tableInternal.getGridColumnWidthFromHeaderCell(cell));
1204
+ const next = columnWidths.join(' ');
1205
+ const n = headerCells.length;
1206
+ if (n === this.colCount && this.colCount > 0 && this.columnWidthsToken === next) {
1207
+ return;
1208
+ }
1209
+ this.el.style.setProperty('--column-widths', next);
1210
+ this.colCount = n;
1211
+ this.columnWidthsToken = next;
1212
+ }
1213
+ handleSort(clickEvt, isColumnSortable, colNum) {
1214
+ clickEvt.preventDefault();
1215
+ clickEvt.stopPropagation();
1216
+ if (!isColumnSortable)
1217
+ return;
1218
+ this.sortTypeArray = this.sortTypeArray.map((val, i) => {
1219
+ if (i !== colNum)
1220
+ return null;
1221
+ switch (val) {
1222
+ case 'asc':
1223
+ return 'desc';
1224
+ case 'desc':
1225
+ return null;
1226
+ default:
1227
+ return 'asc';
1228
+ }
1229
+ });
1230
+ const evt = this.sortChanged.emit(this.legacySortChangedDetail(colNum));
1231
+ if (!evt.defaultPrevented)
1232
+ this.sortBy(colNum, this.sortTypeArray);
1233
+ }
1234
+ renderLegacy() {
144
1235
  if (this.columns &&
145
1236
  (!this.sortTypeArray || this.sortTypeArray.length !== this.columns.length)) {
146
1237
  this.sortTypeArray = this.columns.map(() => null);
147
1238
  }
148
- else if (!this.columns) {
149
- this.sortTypeArray = [];
150
- }
151
- }
152
- render() {
153
- const rowFooterData = this.footer !== undefined ? Array.from(this.footer) : [];
154
- return (index.h(index.Host, { key: '1e6bf436320a44e1e22e8590a881bc90c4a091d5' }, index.h("div", { key: '3d2e5361fbe615a6ae8ebe916ce07e00f82c444c', class: "xpl-table-container", onScroll: this.onScroll, ref: (el) => {
1239
+ return (index.h(index.Host, null, index.h("div", { class: "xpl-table-container", onScroll: this.onLegacyScroll, ref: (el) => {
155
1240
  if (el)
156
1241
  this.container = el;
157
- } }, index.h("table", { key: '036672b3ba45a90a42f906c155ce3d59e33c8a7a', class: {
1242
+ } }, index.h("table", { class: {
158
1243
  'xpl-table': true,
1244
+ 'xpl-table--legacy': true,
159
1245
  'xpl-table--striped': !!this.striped,
160
1246
  'xpl-table--freeze': !!this.freeze,
161
1247
  'xpl-table--has-scrolled': this.hasScrolled,
162
- } }, this.columns && (index.h("thead", { key: 'bf0d5a808624234ba985c1c32064f1dab11bfefa' }, this.columns.map((column, i) => {
163
- const iconType = getIconType(this.sortTypeArray?.[i]);
164
- const isColumnSortable = !!(this.isSortable && this.sortableColumns[i]);
165
- return (index.h("th", null, index.h("label", { onClick: (e) => this.handleSort(e, isColumnSortable, i, column.replace(/ /g, '-').toLowerCase()), class: isColumnSortable ? 'cursor-pointer' : '' }, this.multiselect && i === 0 && (index.h("xpl-checkbox", { checked: this.areAllSelected, indeterminate: !this.areAllSelected &&
166
- this.selected.some((a) => a), onClick: (e) => e.stopPropagation(), onCheckboxChange: (e) => this.selectAll(e), value: this.selectAllValue, "aria-label": "Select all rows" })), column, isColumnSortable && !!this.sortTypeArray[i] && (index.h("xpl-icon", { icon: iconType, size: 16 })))));
167
- }))), index.h("tbody", { key: '7915dbfbf1a9b68719c4168e09c5f0e3ab7fa35a' }, this.rowData.map((row, rowNum) => (index.h("tr", { class: this.selected && this.selected[rowNum]
1248
+ } }, this.columns && (index.h("thead", null, this.columns.map((column, i) => {
1249
+ const iconType = tableInternal.getIconType(this.sortTypeArray?.[i] ?? null);
1250
+ const isColumnSortable = !!(this.isSortable && this.sortableColumns?.[i]);
1251
+ return (index.h("th", null, index.h("label", { onClick: (e) => this.handleSort(e, isColumnSortable, i), class: isColumnSortable ? 'cursor-pointer' : '' }, this.multiselect && i === 0 && (index.h("input", { checked: this.areAllSelected, id: "__xpl-table-th", indeterminate: !this.areAllSelected &&
1252
+ this.selected.some((a) => a), onClick: (e) => {
1253
+ e.stopPropagation();
1254
+ this.selectAll(e);
1255
+ }, type: "checkbox", value: this.selectAllValue })), column, isColumnSortable && !!this.sortTypeArray[i] && (index.h("xpl-icon", { icon: iconType, size: 16 })))));
1256
+ }))), index.h("tbody", null, this.rowData.map((row, rowNum) => (index.h("tr", { class: this.selected && this.selected[rowNum]
168
1257
  ? 'xpl-table-row-selected'
169
- : '' }, row.map((cell, i) => (index.h("td", null, this.multiselect && i === 0 ? (index.h("label", null, index.h("xpl-checkbox", { checked: !!this.selected[rowNum], onCheckboxChange: (e) => this.selectOne(e, rowNum), value: this.selectedValues.length > 0
1258
+ : '' }, row.map((cell, i) => (index.h("td", null, this.multiselect && i === 0 ? (index.h("label", { htmlFor: `__xpl-table-row-${rowNum}` }, index.h("input", { id: `__xpl-table-row-${rowNum}`, checked: !!this.selected[rowNum], type: "checkbox", onChange: (e) => this.selectOne(e, rowNum), value: this.selectedValues &&
1259
+ this.selectedValues.length > 0
170
1260
  ? this.selectedValues[rowNum]
171
- : `xpl-table-checkbox-${rowNum}`, "aria-label": `Select row ${rowNum + 1}` }), index.h("div", { innerHTML: cell }))) : (index.h("div", { innerHTML: cell }))))))))), rowFooterData.length > 0 && (index.h("tfoot", { key: '78ee72f80c77e61c6234be9500770780952ca669' }, rowFooterData.map((row) => (index.h("tr", null, row.map((cell) => (index.h("td", null, index.h("div", { innerHTML: cell })))))))))))));
1261
+ : `xpl-table-checkbox-${rowNum}` }), index.h("div", { innerHTML: cell }))) : (index.h("div", { innerHTML: cell }))))))))), this.rowFooterData?.length > 0 && (index.h("tfoot", null, this.rowFooterData.map((row) => (index.h("tr", null, row.map((cell) => (index.h("td", null, index.h("div", { innerHTML: cell })))))))))))));
1262
+ }
1263
+ renderCompositional() {
1264
+ const selectionToolbarCount = this.selectedRowIds.length;
1265
+ return (index.h(index.Host, { role: "grid", "aria-label": this.label, "aria-colcount": this.colCount > 0 ? this.colCount : undefined, class: {
1266
+ 'xpl-table': true,
1267
+ 'xpl-table--striped': !!this.striped,
1268
+ 'xpl-table--freeze': !!this.freeze,
1269
+ 'xpl-table--has-scrolled': this.hasScrolled,
1270
+ 'xpl-table--selectable': !!this.selectable,
1271
+ 'xpl-table--selection-active': !!this.selectable && this.selectedRowIds.length > 0,
1272
+ 'xpl-table--row-reorderable': !!this.rowReorderable,
1273
+ }, onScroll: this.onGridScroll }, this.rowReorderable && (index.h("div", { class: "xpl-table__reorder-live", "aria-live": "assertive", "aria-atomic": "true" }, this.reorderLiveMessage)), this.selectable && (index.h("div", { class: {
1274
+ 'xpl-toolbar': true,
1275
+ hidden: selectionToolbarCount === 0,
1276
+ 'xpl-table__toolbar': true,
1277
+ } }, index.h("div", { class: "toolbar" }, index.h("p", { class: "selected-item-count" }, selectionToolbarCount, " Selected"), index.h("div", { class: "actions" }, index.h("slot", { name: "toolbar-actions-left" }), index.h("slot", { name: "toolbar-actions-right" }))))), index.h("slot", null)));
1278
+ }
1279
+ render() {
1280
+ return this.isLegacyMode ? this.renderLegacy() : this.renderCompositional();
172
1281
  }
173
1282
  get el() { return index.getElement(this); }
174
1283
  static get watchers() { return {
1284
+ "columns": [{
1285
+ "watchColumns": 0
1286
+ }],
175
1287
  "data": [{
176
1288
  "watchData": 0
177
1289
  }],
178
- "columns": [{
179
- "watchColumns": 0
1290
+ "footer": [{
1291
+ "watchFooterData": 0
1292
+ }],
1293
+ "reorderHandleIcon": [{
1294
+ "watchReorderHandleIcon": 0
1295
+ }],
1296
+ "reorderHandleIconKeyboard": [{
1297
+ "watchReorderHandleIconKeyboard": 0
1298
+ }],
1299
+ "rowReorderable": [{
1300
+ "watchRowReorderable": 0
1301
+ }],
1302
+ "selectable": [{
1303
+ "watchSelectable": 0
180
1304
  }]
181
1305
  }; }
182
1306
  };