@xplortech/apollo-core 2.5.0 → 2.7.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 (492) hide show
  1. package/.typings/apollo-components.html-data.json +1156 -115
  2. package/build/style.css +12151 -5333
  3. package/dist/apollo-core/apollo-core.css +68 -37
  4. package/dist/apollo-core/apollo-core.esm.js +1 -1
  5. package/dist/apollo-core/{p-f4c2626d.entry.js → p-084d26ed.entry.js} +1 -1
  6. package/dist/apollo-core/p-146d5d55.entry.js +1 -0
  7. package/dist/apollo-core/p-16742606.entry.js +1 -0
  8. package/dist/apollo-core/{p-0ac33b3a.entry.js → p-28d12fd3.entry.js} +1 -1
  9. package/dist/apollo-core/{p-7d245bf0.entry.js → p-3eb5eb7c.entry.js} +1 -1
  10. package/dist/apollo-core/p-4882f0bd.entry.js +1 -0
  11. package/dist/apollo-core/p-64b34268.entry.js +1 -0
  12. package/dist/apollo-core/p-6c956d4e.entry.js +1 -0
  13. package/dist/apollo-core/p-71b75f36.entry.js +1 -0
  14. package/dist/apollo-core/p-7eb86c63.entry.js +1 -0
  15. package/dist/apollo-core/{p-0e1877a2.entry.js → p-84254a24.entry.js} +1 -1
  16. package/dist/apollo-core/p-9f2a0321.entry.js +1 -0
  17. package/dist/apollo-core/p-C7bgJs6C.js +2 -0
  18. package/dist/apollo-core/p-cde83ab0.entry.js +1 -0
  19. package/dist/apollo-core/p-e7363036.entry.js +1 -0
  20. package/dist/cjs/apollo-core.cjs.js +3 -3
  21. package/dist/cjs/{index-D__N_vw2.js → index-BQ97-AWw.js} +149 -96
  22. package/dist/cjs/loader.cjs.js +2 -2
  23. package/dist/cjs/xpl-accordion.cjs.entry.js +5 -5
  24. package/dist/cjs/xpl-application-shell.cjs.entry.js +4 -4
  25. package/dist/cjs/{xpl-avatar_41.cjs.entry.js → xpl-avatar_61.cjs.entry.js} +9154 -1989
  26. package/dist/cjs/xpl-button-row.cjs.entry.js +4 -4
  27. package/dist/cjs/xpl-calendar.cjs.entry.js +4 -4
  28. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +5 -5
  29. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +5 -5
  30. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +4 -4
  31. package/dist/cjs/xpl-grid-item.cjs.entry.js +4 -4
  32. package/dist/cjs/xpl-grid.cjs.entry.js +4 -4
  33. package/dist/cjs/xpl-large-card.cjs.entry.js +4 -4
  34. package/dist/cjs/xpl-main-nav.cjs.entry.js +4 -4
  35. package/dist/cjs/xpl-toggle.cjs.entry.js +6 -6
  36. package/dist/cjs/xpl-toolbar.cjs.entry.js +5 -5
  37. package/dist/collection/collection-manifest.json +26 -8
  38. package/dist/collection/components/xpl-accordion/accordion.stories.js +4 -0
  39. package/dist/collection/components/xpl-accordion/xpl-accordion.js +3 -3
  40. package/dist/collection/components/xpl-application-shell/application-shell.stories.js +4 -0
  41. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +2 -2
  42. package/dist/collection/components/xpl-avatar/avatar.stories.js +122 -103
  43. package/dist/collection/components/xpl-avatar/xpl-avatar.js +250 -16
  44. package/dist/collection/components/xpl-backdrop/backdrop.stories.js +4 -0
  45. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +2 -2
  46. package/dist/collection/components/xpl-badge/badge.stories.js +76 -33
  47. package/dist/collection/components/xpl-badge/xpl-badge.js +122 -14
  48. package/dist/collection/components/xpl-banner/banner.stories.js +64 -0
  49. package/dist/collection/components/xpl-banner/xpl-banner.js +296 -0
  50. package/dist/collection/components/xpl-breadcrumbs/breadcrumbs.stories.js +4 -0
  51. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +2 -2
  52. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +2 -2
  53. package/dist/collection/components/xpl-button/button.stories.js +102 -98
  54. package/dist/collection/components/xpl-button/xpl-button.js +201 -93
  55. package/dist/collection/components/xpl-button-row/xpl-button-row.js +2 -2
  56. package/dist/collection/components/xpl-calendar/calendar.stories.js +4 -0
  57. package/dist/collection/components/xpl-calendar/xpl-calendar.js +2 -2
  58. package/dist/collection/components/xpl-checkbox/checkbox.stories.js +4 -0
  59. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +48 -26
  60. package/dist/collection/components/xpl-choicelist/choicelist.stories.js +4 -0
  61. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +2 -2
  62. package/dist/collection/components/xpl-content-area/xpl-content-area.js +2 -2
  63. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +2 -2
  64. package/dist/collection/components/xpl-data-card/data-card.stories.js +4 -0
  65. package/dist/collection/components/xpl-data-card/xpl-data-card.js +3 -3
  66. package/dist/collection/components/xpl-divider/divider.stories.js +4 -0
  67. package/dist/collection/components/xpl-divider/xpl-divider.js +2 -2
  68. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +2 -2
  69. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +2 -2
  70. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +29 -4
  71. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +120 -79
  72. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +2 -2
  73. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +3 -3
  74. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +3 -3
  75. package/dist/collection/components/xpl-grid/xpl-grid.js +2 -2
  76. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +2 -2
  77. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +47 -54
  78. package/dist/collection/components/xpl-icon/xpl-icon.js +3 -3
  79. package/dist/collection/components/xpl-input/input.stories.js +170 -9
  80. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +9 -9
  81. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +55 -17
  82. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +5 -5
  83. package/dist/collection/components/xpl-input/xpl-input-phone/phone-country-data.js +58 -0
  84. package/dist/collection/components/xpl-input/xpl-input-phone/phone-format.js +219 -0
  85. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +469 -0
  86. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +485 -0
  87. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +3 -3
  88. package/dist/collection/components/xpl-input/xpl-input.js +223 -17
  89. package/dist/collection/components/xpl-large-card/large-card.stories.js +4 -0
  90. package/dist/collection/components/xpl-large-card/xpl-large-card.js +2 -2
  91. package/dist/collection/components/xpl-list/list.stories.js +300 -63
  92. package/dist/collection/components/xpl-list/xpl-list-item/xpl-list-item.js +818 -0
  93. package/dist/collection/components/xpl-list/xpl-list.js +580 -22
  94. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +2 -2
  95. package/dist/collection/components/xpl-modal/modal.stories.js +4 -0
  96. package/dist/collection/components/xpl-modal/xpl-modal.js +2 -2
  97. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +3 -3
  98. package/dist/collection/components/xpl-pagination/pagination.stories.js +4 -0
  99. package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
  100. package/dist/collection/components/xpl-panel/panel.stories.js +53 -0
  101. package/dist/collection/components/xpl-panel/xpl-panel.js +60 -0
  102. package/dist/collection/components/xpl-popover/popover.stories.js +4 -0
  103. package/dist/collection/components/xpl-popover/xpl-popover.js +5 -5
  104. package/dist/collection/components/xpl-progress-bar/progress-bar.stories.js +96 -0
  105. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +158 -0
  106. package/dist/collection/components/xpl-progress-indicator/progress-indicator.stories.js +118 -0
  107. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +171 -0
  108. package/dist/collection/components/xpl-radio/xpl-radio.js +4 -4
  109. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +2 -2
  110. package/dist/collection/components/xpl-select/xpl-select.js +7 -7
  111. package/dist/collection/components/xpl-side-nav/side-nav.stories.js +519 -0
  112. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +259 -0
  113. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +32 -0
  114. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +2 -2
  115. package/dist/collection/components/xpl-slideout/xpl-slideout.js +2 -2
  116. package/dist/collection/components/xpl-spotlight/spotlight.stories.js +385 -0
  117. package/dist/collection/components/xpl-spotlight/xpl-spotlight.js +1085 -0
  118. package/dist/collection/components/xpl-tab/xpl-tab.js +262 -9
  119. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +23 -16
  120. package/dist/collection/components/xpl-table/table.stories.js +319 -67
  121. package/dist/collection/components/xpl-table/utils/move-row-dom.js +50 -0
  122. package/dist/collection/components/xpl-table/utils/table-internal.js +58 -0
  123. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +7 -0
  124. package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +155 -0
  125. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +7 -0
  126. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +37 -0
  127. package/dist/collection/components/xpl-table/xpl-table-header/table-header.stories.js +131 -0
  128. package/dist/collection/components/xpl-table/xpl-table-header/xpl-table-header.js +7 -0
  129. package/dist/collection/components/xpl-table/xpl-table-header-cell/table-header-cell.stories.js +105 -0
  130. package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +402 -0
  131. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +121 -0
  132. package/dist/collection/components/xpl-table/xpl-table.js +1449 -144
  133. package/dist/collection/components/xpl-tabs/segment-control.stories.js +31 -0
  134. package/dist/collection/components/xpl-tabs/tabs.shared.js +156 -0
  135. package/dist/collection/components/xpl-tabs/tabs.stories.js +10 -60
  136. package/dist/collection/components/xpl-tabs/xpl-tabs.js +339 -63
  137. package/dist/collection/components/xpl-tag/tag.stories.js +153 -0
  138. package/dist/collection/components/xpl-tag/xpl-tag.js +313 -10
  139. package/dist/collection/components/xpl-toast/xpl-toast.js +3 -3
  140. package/dist/collection/components/xpl-toggle/xpl-toggle.js +4 -4
  141. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +3 -3
  142. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +2 -2
  143. package/dist/collection/components/xpl-top-nav/top-nav.stories.js +625 -0
  144. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +122 -0
  145. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +481 -0
  146. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +433 -0
  147. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +2 -2
  148. package/dist/collection/utils/layout-ancestors.js +22 -0
  149. package/dist/collection/utils/lifecycle.js +79 -0
  150. package/dist/collection/utils/tab-a11y-ids.js +22 -0
  151. package/dist/components/floating-ui.dom.js +1 -0
  152. package/dist/components/index.js +1 -1
  153. package/dist/components/lifecycle.js +1 -0
  154. package/dist/components/tab-a11y-ids.js +1 -0
  155. package/dist/components/xpl-accordion.js +1 -1
  156. package/dist/components/xpl-application-shell.js +1 -1
  157. package/dist/components/xpl-avatar.js +1 -1
  158. package/dist/components/xpl-avatar2.js +1 -1
  159. package/dist/components/xpl-backdrop.js +1 -1
  160. package/dist/components/xpl-backdrop2.js +1 -1
  161. package/dist/components/xpl-badge.js +1 -1
  162. package/dist/components/xpl-badge2.js +1 -1
  163. package/dist/components/xpl-banner.d.ts +11 -0
  164. package/dist/components/xpl-banner.js +1 -0
  165. package/dist/components/xpl-breadcrumb-item.js +1 -1
  166. package/dist/components/xpl-breadcrumbs.js +1 -1
  167. package/dist/components/xpl-button-row.js +1 -1
  168. package/dist/components/xpl-button.js +1 -1
  169. package/dist/components/xpl-button2.js +1 -1
  170. package/dist/components/xpl-calendar.js +1 -1
  171. package/dist/components/xpl-checkbox.js +1 -1
  172. package/dist/components/xpl-checkbox2.js +1 -1
  173. package/dist/components/xpl-choicelist.js +1 -1
  174. package/dist/components/xpl-content-area.js +1 -1
  175. package/dist/components/xpl-dashboard.js +1 -1
  176. package/dist/components/xpl-data-card.js +1 -1
  177. package/dist/components/xpl-divider.js +1 -1
  178. package/dist/components/xpl-divider2.js +1 -1
  179. package/dist/components/xpl-dropdown-group.js +1 -1
  180. package/dist/components/xpl-dropdown-group2.js +1 -1
  181. package/dist/components/xpl-dropdown-heading.js +1 -1
  182. package/dist/components/xpl-dropdown-heading2.js +1 -1
  183. package/dist/components/xpl-dropdown-option.js +1 -1
  184. package/dist/components/xpl-dropdown-option2.js +1 -1
  185. package/dist/components/xpl-dropdown.js +1 -1
  186. package/dist/components/xpl-dropdown2.js +1 -1
  187. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  188. package/dist/components/xpl-dynamic-table-row.js +1 -1
  189. package/dist/components/xpl-dynamic-table.js +1 -1
  190. package/dist/components/xpl-grid-item.js +1 -1
  191. package/dist/components/xpl-grid.js +1 -1
  192. package/dist/components/xpl-header-accordion.js +1 -1
  193. package/dist/components/xpl-icon.js +1 -1
  194. package/dist/components/xpl-icon2.js +1 -1
  195. package/dist/components/xpl-input-date.js +1 -1
  196. package/dist/components/xpl-input-date2.js +1 -1
  197. package/dist/components/xpl-input-file.js +1 -1
  198. package/dist/components/xpl-input-file2.js +1 -1
  199. package/dist/components/xpl-input-phone.d.ts +11 -0
  200. package/dist/components/xpl-input-phone.js +1 -0
  201. package/dist/components/xpl-input-search.d.ts +11 -0
  202. package/dist/components/xpl-input-search.js +1 -0
  203. package/dist/components/xpl-input-search2.js +1 -0
  204. package/dist/components/xpl-input-time.js +1 -1
  205. package/dist/components/xpl-input.js +1 -1
  206. package/dist/components/xpl-input2.js +1 -1
  207. package/dist/components/xpl-large-card.js +1 -1
  208. package/dist/components/{xpl-progress.d.ts → xpl-list-item.d.ts} +4 -4
  209. package/dist/components/xpl-list-item.js +1 -0
  210. package/dist/components/xpl-list-item2.js +1 -0
  211. package/dist/components/xpl-list.js +1 -1
  212. package/dist/components/xpl-main-nav.js +1 -1
  213. package/dist/components/xpl-modal.js +1 -1
  214. package/dist/components/xpl-nav-header-menu.d.ts +11 -0
  215. package/dist/components/xpl-nav-header-menu.js +1 -0
  216. package/dist/components/xpl-nav-item.js +1 -1
  217. package/dist/components/xpl-pagination.js +1 -1
  218. package/dist/components/xpl-panel.d.ts +11 -0
  219. package/dist/components/xpl-panel.js +1 -0
  220. package/dist/components/xpl-popover.js +1 -1
  221. package/dist/components/xpl-popover2.js +1 -1
  222. package/dist/components/xpl-progress-bar.d.ts +11 -0
  223. package/dist/components/xpl-progress-bar.js +1 -0
  224. package/dist/components/xpl-progress-indicator.d.ts +11 -0
  225. package/dist/components/xpl-progress-indicator.js +1 -0
  226. package/dist/components/xpl-radio.js +1 -1
  227. package/dist/components/xpl-radio2.js +1 -1
  228. package/dist/components/xpl-secondary-nav.js +1 -1
  229. package/dist/components/xpl-select.js +1 -1
  230. package/dist/components/xpl-select2.js +1 -1
  231. package/dist/components/xpl-side-nav-item.d.ts +11 -0
  232. package/dist/components/xpl-side-nav-item.js +1 -0
  233. package/dist/components/xpl-side-nav.d.ts +11 -0
  234. package/dist/components/xpl-side-nav.js +1 -0
  235. package/dist/components/xpl-skeleton.js +1 -1
  236. package/dist/components/xpl-slideout.js +1 -1
  237. package/dist/components/xpl-spotlight.d.ts +11 -0
  238. package/dist/components/xpl-spotlight.js +1 -0
  239. package/dist/components/xpl-tab-panel.js +1 -1
  240. package/dist/components/xpl-tab.js +1 -1
  241. package/dist/components/xpl-table-body.d.ts +11 -0
  242. package/dist/components/xpl-table-body.js +1 -0
  243. package/dist/components/xpl-table-cell.d.ts +11 -0
  244. package/dist/components/xpl-table-cell.js +1 -0
  245. package/dist/components/xpl-table-cell2.js +1 -0
  246. package/dist/components/xpl-table-footer-cell.d.ts +11 -0
  247. package/dist/components/xpl-table-footer-cell.js +1 -0
  248. package/dist/components/xpl-table-footer-cell2.js +1 -0
  249. package/dist/components/xpl-table-footer.d.ts +11 -0
  250. package/dist/components/xpl-table-footer.js +1 -0
  251. package/dist/components/xpl-table-header-cell.js +1 -1
  252. package/dist/components/xpl-table-header-cell2.js +1 -0
  253. package/dist/components/xpl-table-header.js +1 -1
  254. package/dist/components/xpl-table-row.d.ts +11 -0
  255. package/dist/components/xpl-table-row.js +1 -0
  256. package/dist/components/xpl-table.js +1 -1
  257. package/dist/components/xpl-tabs.js +1 -1
  258. package/dist/components/xpl-tag.js +1 -1
  259. package/dist/components/xpl-tag2.js +1 -1
  260. package/dist/components/xpl-toast.js +1 -1
  261. package/dist/components/xpl-toggle.js +1 -1
  262. package/dist/components/xpl-toolbar.js +1 -1
  263. package/dist/components/xpl-tooltip.js +1 -1
  264. package/dist/components/xpl-tooltip2.js +1 -1
  265. package/dist/components/xpl-top-nav-item.d.ts +11 -0
  266. package/dist/components/xpl-top-nav-item.js +1 -0
  267. package/dist/components/xpl-top-nav-item2.js +1 -0
  268. package/dist/components/xpl-top-nav.d.ts +11 -0
  269. package/dist/components/xpl-top-nav.js +1 -0
  270. package/dist/components/xpl-utility-bar.js +1 -1
  271. package/dist/docs/xpl-accordion/readme.md +4 -0
  272. package/dist/docs/xpl-avatar/readme.md +291 -12
  273. package/dist/docs/xpl-backdrop/readme.md +1 -1
  274. package/dist/docs/xpl-badge/readme.md +104 -6
  275. package/dist/docs/xpl-banner/readme.md +203 -0
  276. package/dist/docs/xpl-button/readme.md +161 -14
  277. package/dist/docs/xpl-button-row/readme.md +1 -0
  278. package/dist/docs/xpl-calendar/readme.md +2 -1
  279. package/dist/docs/xpl-checkbox/readme.md +19 -14
  280. package/dist/docs/xpl-choicelist/readme.md +1 -0
  281. package/dist/docs/xpl-data-card/readme.md +2 -2
  282. package/dist/docs/xpl-divider/readme.md +6 -4
  283. package/dist/docs/xpl-dropdown/readme.md +15 -12
  284. package/dist/docs/xpl-dropdown/xpl-dropdown-group/readme.md +1 -0
  285. package/dist/docs/xpl-dropdown/xpl-dropdown-option/readme.md +6 -0
  286. package/dist/docs/xpl-dynamic-table/readme.md +22 -19
  287. package/dist/docs/xpl-dynamic-table-cell/readme.md +20 -18
  288. package/dist/docs/xpl-dynamic-table-row/readme.md +21 -19
  289. package/dist/docs/xpl-icon/readme.md +27 -3
  290. package/dist/docs/xpl-input/readme.md +72 -37
  291. package/dist/docs/xpl-input/xpl-input-color/readme.md +5 -0
  292. package/dist/docs/xpl-input/xpl-input-phone/readme.md +168 -0
  293. package/dist/docs/xpl-input/xpl-input-search/readme.md +175 -0
  294. package/dist/docs/xpl-input/xpl-input-time/readme.md +5 -0
  295. package/dist/docs/xpl-large-card/readme.md +1 -1
  296. package/dist/docs/xpl-list/readme.md +320 -10
  297. package/dist/docs/xpl-list/xpl-list-item/readme.md +99 -0
  298. package/dist/docs/xpl-modal/readme.md +3 -0
  299. package/dist/docs/xpl-pagination/readme.md +4 -0
  300. package/dist/docs/xpl-panel/readme.md +174 -0
  301. package/dist/docs/xpl-popover/readme.md +3 -1
  302. package/dist/docs/xpl-progress-bar/readme.md +145 -0
  303. package/dist/docs/xpl-progress-indicator/readme.md +234 -0
  304. package/dist/docs/xpl-radio/readme.md +6 -4
  305. package/dist/docs/xpl-select/readme.md +3 -1
  306. package/dist/docs/xpl-side-nav/readme.md +71 -0
  307. package/dist/docs/xpl-side-nav/xpl-side-nav-item/readme.md +115 -0
  308. package/dist/docs/xpl-slideout/readme.md +2 -1
  309. package/dist/docs/xpl-spotlight/readme.md +235 -0
  310. package/dist/docs/xpl-tab/readme.md +43 -7
  311. package/dist/docs/xpl-tab-panel/readme.md +42 -0
  312. package/dist/docs/xpl-table/readme.md +110 -46
  313. package/dist/docs/xpl-table/xpl-table-body/readme.md +10 -0
  314. package/dist/docs/xpl-table/xpl-table-cell/readme.md +33 -0
  315. package/dist/docs/xpl-table/xpl-table-footer/readme.md +10 -0
  316. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +30 -0
  317. package/dist/docs/{xpl-table-header → xpl-table/xpl-table-header}/readme.md +13 -13
  318. package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +66 -0
  319. package/dist/docs/xpl-table/xpl-table-row/readme.md +19 -0
  320. package/dist/docs/xpl-tabs/readme.md +63 -8
  321. package/dist/docs/xpl-tag/readme.md +379 -4
  322. package/dist/docs/xpl-toast/readme.md +56 -1
  323. package/dist/docs/xpl-top-nav/readme.md +179 -0
  324. package/dist/docs/xpl-top-nav/xpl-nav-header-menu/readme.md +81 -0
  325. package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +87 -0
  326. package/dist/esm/apollo-core.js +4 -4
  327. package/dist/esm/{index-DhZas3eX.js → index-C7bgJs6C.js} +149 -97
  328. package/dist/esm/loader.js +3 -3
  329. package/dist/esm/xpl-accordion.entry.js +5 -5
  330. package/dist/esm/xpl-application-shell.entry.js +4 -4
  331. package/dist/esm/{xpl-avatar_41.entry.js → xpl-avatar_61.entry.js} +9087 -1942
  332. package/dist/esm/xpl-button-row.entry.js +4 -4
  333. package/dist/esm/xpl-calendar.entry.js +4 -4
  334. package/dist/esm/xpl-dynamic-table-cell.entry.js +5 -5
  335. package/dist/esm/xpl-dynamic-table-row.entry.js +5 -5
  336. package/dist/esm/xpl-dynamic-table.entry.js +4 -4
  337. package/dist/esm/xpl-grid-item.entry.js +4 -4
  338. package/dist/esm/xpl-grid.entry.js +4 -4
  339. package/dist/esm/xpl-large-card.entry.js +4 -4
  340. package/dist/esm/xpl-main-nav.entry.js +4 -4
  341. package/dist/esm/xpl-toggle.entry.js +6 -6
  342. package/dist/esm/xpl-toolbar.entry.js +5 -5
  343. package/dist/types/components/xpl-accordion/xpl-accordion.d.ts +1 -1
  344. package/dist/types/components/xpl-application-shell/application-shell.stories.d.ts +4 -0
  345. package/dist/types/components/xpl-application-shell/xpl-application-shell.d.ts +1 -1
  346. package/dist/types/components/xpl-avatar/avatar.stories.d.ts +90 -27
  347. package/dist/types/components/xpl-avatar/xpl-avatar.d.ts +30 -3
  348. package/dist/types/components/xpl-backdrop/backdrop.stories.d.ts +4 -0
  349. package/dist/types/components/xpl-backdrop/xpl-backdrop.d.ts +1 -1
  350. package/dist/types/components/xpl-badge/badge.stories.d.ts +47 -11
  351. package/dist/types/components/xpl-badge/xpl-badge.d.ts +9 -2
  352. package/dist/types/components/xpl-banner/banner.stories.d.ts +77 -0
  353. package/dist/types/components/xpl-banner/xpl-banner.d.ts +20 -0
  354. package/dist/types/components/xpl-breadcrumbs/breadcrumbs.stories.d.ts +4 -0
  355. package/dist/types/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.d.ts +1 -1
  356. package/dist/types/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.d.ts +1 -1
  357. package/dist/types/components/xpl-button/button.stories.d.ts +68 -30
  358. package/dist/types/components/xpl-button/xpl-button.d.ts +21 -8
  359. package/dist/types/components/xpl-button-row/xpl-button-row.d.ts +1 -1
  360. package/dist/types/components/xpl-calendar/calendar.stories.d.ts +4 -0
  361. package/dist/types/components/xpl-calendar/xpl-calendar.d.ts +1 -1
  362. package/dist/types/components/xpl-checkbox/checkbox.stories.d.ts +4 -0
  363. package/dist/types/components/xpl-checkbox/xpl-checkbox.d.ts +5 -4
  364. package/dist/types/components/xpl-choicelist/choicelist.stories.d.ts +4 -0
  365. package/dist/types/components/xpl-choicelist/xpl-choicelist.d.ts +1 -1
  366. package/dist/types/components/xpl-content-area/xpl-content-area.d.ts +1 -1
  367. package/dist/types/components/xpl-dashboard/xpl-dashboard.d.ts +1 -1
  368. package/dist/types/components/xpl-data-card/data-card.stories.d.ts +4 -0
  369. package/dist/types/components/xpl-data-card/xpl-data-card.d.ts +1 -1
  370. package/dist/types/components/xpl-divider/divider.stories.d.ts +4 -0
  371. package/dist/types/components/xpl-divider/xpl-divider.d.ts +1 -1
  372. package/dist/types/components/xpl-dropdown/dropdown-option.d.ts +1 -0
  373. package/dist/types/components/xpl-dropdown/dropdown.stories.d.ts +1 -1
  374. package/dist/types/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.d.ts +1 -1
  375. package/dist/types/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.d.ts +1 -1
  376. package/dist/types/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.d.ts +3 -2
  377. package/dist/types/components/xpl-dropdown/xpl-dropdown.d.ts +11 -8
  378. package/dist/types/components/xpl-dynamic-table/xpl-dynamic-table.d.ts +1 -1
  379. package/dist/types/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.d.ts +1 -1
  380. package/dist/types/components/xpl-dynamic-table-row/xpl-dynamic-table-row.d.ts +1 -1
  381. package/dist/types/components/xpl-grid/xpl-grid.d.ts +1 -1
  382. package/dist/types/components/xpl-grid-item/xpl-grid-item.d.ts +1 -1
  383. package/dist/types/components/xpl-header-accordion/xpl-header-accordion.d.ts +10 -11
  384. package/dist/types/components/xpl-icon/xpl-icon.d.ts +1 -1
  385. package/dist/types/components/xpl-input/input.stories.d.ts +37 -7
  386. package/dist/types/components/xpl-input/xpl-input-color/xpl-input-color.d.ts +1 -1
  387. package/dist/types/components/xpl-input/xpl-input-date/xpl-input-date.d.ts +10 -3
  388. package/dist/types/components/xpl-input/xpl-input-file/xpl-input-file.d.ts +1 -1
  389. package/dist/types/components/xpl-input/xpl-input-phone/phone-country-data.d.ts +13 -0
  390. package/dist/types/components/xpl-input/xpl-input-phone/phone-format.d.ts +5 -0
  391. package/dist/types/components/xpl-input/xpl-input-phone/xpl-input-phone.d.ts +48 -0
  392. package/dist/types/components/xpl-input/xpl-input-search/xpl-input-search.d.ts +39 -0
  393. package/dist/types/components/xpl-input/xpl-input-time/xpl-input-time.d.ts +1 -1
  394. package/dist/types/components/xpl-input/xpl-input.d.ts +23 -5
  395. package/dist/types/components/xpl-large-card/large-card.stories.d.ts +4 -0
  396. package/dist/types/components/xpl-large-card/xpl-large-card.d.ts +1 -1
  397. package/dist/types/components/xpl-list/list.stories.d.ts +299 -13
  398. package/dist/types/components/xpl-list/listitem.d.ts +13 -0
  399. package/dist/types/components/xpl-list/xpl-list-item/xpl-list-item.d.ts +71 -0
  400. package/dist/types/components/xpl-list/xpl-list.d.ts +56 -3
  401. package/dist/types/components/xpl-main-nav/xpl-main-nav.d.ts +1 -1
  402. package/dist/types/components/xpl-modal/modal.stories.d.ts +4 -0
  403. package/dist/types/components/xpl-modal/xpl-modal.d.ts +1 -1
  404. package/dist/types/components/xpl-nav-item/xpl-nav-item.d.ts +1 -1
  405. package/dist/types/components/xpl-pagination/pagination.stories.d.ts +4 -0
  406. package/dist/types/components/xpl-pagination/xpl-pagination.d.ts +1 -1
  407. package/dist/types/components/xpl-panel/panel.stories.d.ts +22 -0
  408. package/dist/types/components/xpl-panel/xpl-panel.d.ts +5 -0
  409. package/dist/types/components/xpl-popover/xpl-popover.d.ts +1 -1
  410. package/dist/types/components/xpl-progress-bar/progress-bar.stories.d.ts +73 -0
  411. package/dist/types/components/xpl-progress-bar/xpl-progress-bar.d.ts +15 -0
  412. package/dist/types/components/xpl-progress-indicator/progress-indicator.stories.d.ts +62 -0
  413. package/dist/types/components/xpl-progress-indicator/xpl-progress-indicator.d.ts +11 -0
  414. package/dist/types/components/xpl-radio/xpl-radio.d.ts +1 -1
  415. package/dist/types/components/xpl-secondary-nav/xpl-secondary-nav.d.ts +1 -1
  416. package/dist/types/components/xpl-select/xpl-select.d.ts +1 -1
  417. package/dist/types/components/xpl-side-nav/side-nav.stories.d.ts +80 -0
  418. package/dist/types/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.d.ts +20 -0
  419. package/dist/types/components/xpl-side-nav/xpl-side-nav.d.ts +4 -0
  420. package/dist/types/components/xpl-skeleton/xpl-skeleton.d.ts +1 -1
  421. package/dist/types/components/xpl-slideout/xpl-slideout.d.ts +1 -1
  422. package/dist/types/components/xpl-spotlight/spotlight.stories.d.ts +197 -0
  423. package/dist/types/components/xpl-spotlight/xpl-spotlight.d.ts +101 -0
  424. package/dist/types/components/xpl-tab/xpl-tab.d.ts +15 -2
  425. package/dist/types/components/xpl-tab-panel/xpl-tab-panel.d.ts +3 -2
  426. package/dist/types/components/xpl-table/table.stories.d.ts +161 -19
  427. package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +3 -0
  428. package/dist/types/components/xpl-table/utils/table-internal.d.ts +8 -0
  429. package/dist/types/components/xpl-table/xpl-table-body/xpl-table-body.d.ts +3 -0
  430. package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +11 -0
  431. package/dist/types/components/xpl-table/xpl-table-footer/xpl-table-footer.d.ts +3 -0
  432. package/dist/types/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.d.ts +4 -0
  433. package/dist/types/components/{xpl-table-header → xpl-table/xpl-table-header}/table-header.stories.d.ts +13 -16
  434. package/dist/types/components/xpl-table/xpl-table-header/xpl-table-header.d.ts +3 -0
  435. package/dist/types/components/{xpl-table-header-cell → xpl-table/xpl-table-header-cell}/table-header-cell.stories.d.ts +24 -20
  436. package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +32 -0
  437. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +13 -0
  438. package/dist/types/components/xpl-table/xpl-table.d.ts +124 -22
  439. package/dist/types/components/xpl-tabs/segment-control.stories.d.ts +112 -0
  440. package/dist/types/components/xpl-tabs/tabs.shared.d.ts +156 -0
  441. package/dist/types/components/xpl-tabs/tabs.stories.d.ts +65 -12
  442. package/dist/types/components/xpl-tabs/xpl-tabs.d.ts +38 -19
  443. package/dist/types/components/xpl-tag/tag.stories.d.ts +65 -0
  444. package/dist/types/components/xpl-tag/xpl-tag.d.ts +37 -2
  445. package/dist/types/components/xpl-toast/xpl-toast.d.ts +1 -1
  446. package/dist/types/components/xpl-toggle/xpl-toggle.d.ts +1 -1
  447. package/dist/types/components/xpl-toolbar/xpl-toolbar.d.ts +1 -1
  448. package/dist/types/components/xpl-tooltip/xpl-tooltip.d.ts +1 -1
  449. package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +471 -0
  450. package/dist/types/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.d.ts +18 -0
  451. package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +48 -0
  452. package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +51 -0
  453. package/dist/types/components/xpl-utility-bar/xpl-utility-bar.d.ts +1 -1
  454. package/dist/types/components.d.ts +3059 -278
  455. package/dist/types/stencil-public-runtime.d.ts +23 -2
  456. package/dist/types/utils/layout-ancestors.d.ts +2 -0
  457. package/dist/types/utils/lifecycle.d.ts +16 -0
  458. package/dist/types/utils/tab-a11y-ids.d.ts +4 -0
  459. package/package.json +42 -28
  460. package/dist/apollo-core/p-1c2e4034.entry.js +0 -1
  461. package/dist/apollo-core/p-3b5f8989.entry.js +0 -1
  462. package/dist/apollo-core/p-4fab8172.entry.js +0 -1
  463. package/dist/apollo-core/p-576ce90f.entry.js +0 -1
  464. package/dist/apollo-core/p-5ec45742.entry.js +0 -1
  465. package/dist/apollo-core/p-77f0fd4a.entry.js +0 -1
  466. package/dist/apollo-core/p-7b7db57a.entry.js +0 -1
  467. package/dist/apollo-core/p-7c22b842.entry.js +0 -1
  468. package/dist/apollo-core/p-812bb0e4.entry.js +0 -1
  469. package/dist/apollo-core/p-845eef0d.entry.js +0 -1
  470. package/dist/apollo-core/p-9853028c.entry.js +0 -1
  471. package/dist/apollo-core/p-9d65ece7.entry.js +0 -1
  472. package/dist/apollo-core/p-DhZas3eX.js +0 -2
  473. package/dist/apollo-core/p-be292555.entry.js +0 -1
  474. package/dist/cjs/xpl-list.cjs.entry.js +0 -32
  475. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +0 -57
  476. package/dist/cjs/xpl-table-header.cjs.entry.js +0 -14
  477. package/dist/collection/components/xpl-progress/progress.stories.js +0 -106
  478. package/dist/collection/components/xpl-progress/xpl-progress.js +0 -60
  479. package/dist/collection/components/xpl-table-header/table-header.stories.js +0 -126
  480. package/dist/collection/components/xpl-table-header/xpl-table-header.js +0 -7
  481. package/dist/collection/components/xpl-table-header-cell/table-header-cell.stories.js +0 -75
  482. package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +0 -188
  483. package/dist/components/xpl-progress.js +0 -1
  484. package/dist/docs/xpl-progress/readme.md +0 -22
  485. package/dist/docs/xpl-table-header-cell/readme.md +0 -47
  486. package/dist/esm/xpl-list.entry.js +0 -30
  487. package/dist/esm/xpl-table-header-cell.entry.js +0 -55
  488. package/dist/esm/xpl-table-header.entry.js +0 -12
  489. package/dist/types/components/xpl-progress/progress.stories.d.ts +0 -38
  490. package/dist/types/components/xpl-progress/xpl-progress.d.ts +0 -6
  491. package/dist/types/components/xpl-table-header/xpl-table-header.d.ts +0 -3
  492. package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -13
@@ -1,91 +1,1147 @@
1
1
  import { Host, h, } from "@stencil/core";
2
- const getIconType = (sortType) => {
3
- switch (sortType) {
4
- case 'asc':
5
- return 'arrow-up';
6
- case 'desc':
7
- return 'arrow-down';
8
- default:
9
- return 'dash';
10
- }
11
- };
12
- export class XplTable {
2
+ import { TimerManager } from "../../utils/lifecycle";
3
+ import { cycleSortDirection, getGridColumnWidthFromHeaderCell, getIconType, ROW_REORDER_MARK, SELECTION_MARK, } from "./utils/table-internal";
4
+ import { getNearestTableBodyRowFromNode, getNextVisibleTableBodyRowAfter, moveRowInTableBody, } from "./utils/move-row-dom";
5
+ function bodyRowFromDragTarget(target) {
6
+ return getNearestTableBodyRowFromNode(target);
7
+ }
8
+ function tableBodyRowFromEvent(ev) {
9
+ const path = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
10
+ const row = path.find((n) => n instanceof HTMLElement && n.tagName.toLowerCase() === 'xpl-table-row');
11
+ return row !== null && row !== void 0 ? row : bodyRowFromDragTarget(ev.target);
12
+ }
13
+ function reorderDragHandleFromEvent(ev) {
14
+ const path = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
15
+ const handle = path.find((n) => n instanceof HTMLElement && n.classList.contains('xpl-table__row-drag-handle'));
16
+ return handle !== null && handle !== void 0 ? handle : null;
17
+ }
18
+ export class Table {
13
19
  constructor() {
14
- this.selectedValues = [];
15
- this.isSortable = false;
16
- this.sortableColumns = [];
20
+ this.columnWidthsToken = '';
21
+ this.lastEmittedRowSelectionKey = '';
22
+ this.selectAllValue = Math.random().toString(36).slice(2);
23
+ this.draggedRow = null;
24
+ this.pendingDragRow = null;
25
+ this.pointerUpClearPending = null;
26
+ this.reorderKeyboardTimers = new TimerManager();
27
+ this.onReorderHandleKeydown = (ev) => {
28
+ this.handleReorderHandleKeyDown(ev);
29
+ };
17
30
  this.areAllSelected = false;
31
+ this.colCount = 0;
18
32
  this.hasScrolled = false;
33
+ this.keyboardReorderRowId = null;
34
+ this.reorderLiveMessage = '';
35
+ this.rowData = [];
36
+ this.rowFooterData = [];
37
+ this.selected = [];
38
+ this.selectedRowIds = [];
19
39
  this.sortTypeArray = [];
20
- this.selectAllValue = Math.random().toString(36).slice(2);
40
+ this.isSortable = false;
41
+ this.selectedValues = [];
42
+ this.sortableColumns = [];
43
+ this.onGridScroll = (e) => {
44
+ this.hasScrolled = e.target.scrollLeft > 0;
45
+ };
21
46
  this.selectAll = (e) => {
22
47
  const { target } = e;
23
48
  if (!(target instanceof HTMLInputElement))
24
49
  return;
25
- const { checked } = target;
26
- this.areAllSelected = checked;
27
- this.selected =
28
- this.selectedValues.length > 0
29
- ?
30
- Array.from(this.el.querySelectorAll('tbody td:first-child input')).map((input) => checked ? input === null || input === void 0 ? void 0 : input.value : checked)
31
- : this.selected.map(() => checked);
32
- this.onChange();
33
- };
34
- this.selectOne = (e, checkboxIdx) => {
35
- const { target } = e;
36
- if (!(target instanceof HTMLInputElement))
50
+ const { checked } = target;
51
+ this.areAllSelected = checked;
52
+ this.selected =
53
+ this.selectedValues.length > 0
54
+ ? Array.from(this.el.querySelectorAll('tbody td:first-child input')).map((input) => (checked ? input === null || input === void 0 ? void 0 : input.value : checked))
55
+ : this.selected.map(() => checked);
56
+ this.onSelectionChange();
57
+ };
58
+ this.selectOne = (e, checkboxIdx) => {
59
+ const { target } = e;
60
+ if (!(target instanceof HTMLInputElement))
61
+ return;
62
+ const { checked, value } = target;
63
+ this.areAllSelected = false;
64
+ this.selected = this.selected.map((v, selectedIdx) => {
65
+ if (selectedIdx !== checkboxIdx)
66
+ return v;
67
+ return this.selectedValues.length > 0 ? (checked ? value : checked) : checked;
68
+ });
69
+ this.onSelectionChange();
70
+ };
71
+ this.onSelectionChange = () => {
72
+ this.tableSelect.emit({
73
+ selected: this.selected,
74
+ areAllSelected: this.areAllSelected,
75
+ });
76
+ };
77
+ this.onLegacyScroll = () => {
78
+ this.hasScrolled = this.container.scrollLeft > 0;
79
+ };
80
+ this.sortBy = (col, sortTypeArray) => {
81
+ const handleSort = (a, b) => {
82
+ if (a[col].toLocaleLowerCase() < b[col].toLocaleLowerCase())
83
+ return -1;
84
+ if (a[col].toLocaleLowerCase() > b[col].toLocaleLowerCase())
85
+ return 1;
86
+ return 0;
87
+ };
88
+ switch (sortTypeArray[col]) {
89
+ case 'asc':
90
+ this.rowData.sort((a, b) => handleSort(a, b));
91
+ break;
92
+ case 'desc':
93
+ this.rowData.sort((a, b) => handleSort(b, a));
94
+ break;
95
+ default:
96
+ this.rowData = this.data;
97
+ this.sortTypeArray[col] = null;
98
+ break;
99
+ }
100
+ this.rowData = Array.from(this.rowData);
101
+ };
102
+ this.setData = () => {
103
+ this.rowData = this.data !== undefined ? Array.from(this.data) : [];
104
+ };
105
+ this.setFooterData = () => {
106
+ this.rowFooterData = this.footer !== undefined ? Array.from(this.footer) : [];
107
+ };
108
+ }
109
+ watchColumns() {
110
+ this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
111
+ }
112
+ watchData() {
113
+ this.setData();
114
+ }
115
+ watchFooterData() {
116
+ this.setFooterData();
117
+ }
118
+ watchReorderHandleIcon() {
119
+ if (this.isLegacyMode || !this.rowReorderable)
120
+ return;
121
+ this.syncInjectedReorderHandleIcons();
122
+ }
123
+ watchReorderHandleIconKeyboard() {
124
+ if (this.isLegacyMode || !this.rowReorderable)
125
+ return;
126
+ this.syncInjectedReorderHandleIcons();
127
+ }
128
+ watchRowReorderable(next) {
129
+ if (this.isLegacyMode)
130
+ return;
131
+ if (!next) {
132
+ this.keyboardReorderRowId = null;
133
+ this.syncReorderHandleKeyboardA11y(null);
134
+ this.removeManagedReorderCells();
135
+ this.draggedRow = null;
136
+ this.pendingDragRow = null;
137
+ this.clearPendingDragListeners();
138
+ this.reorderLiveMessage = '';
139
+ this.queryBodyRows().forEach((r) => {
140
+ var _a;
141
+ r.removeAttribute('draggable');
142
+ (_a = r.querySelector('.xpl-table__row-drag-handle')) === null || _a === void 0 ? void 0 : _a.removeAttribute('draggable');
143
+ r.classList.remove('xpl-table-row--dragging', 'xpl-table-row--drag-over');
144
+ });
145
+ this.colCount = 0;
146
+ this.columnWidthsToken = '';
147
+ }
148
+ }
149
+ watchSelectable(next) {
150
+ if (this.isLegacyMode)
151
+ return;
152
+ if (!next) {
153
+ this.selectedRowIds = [];
154
+ this.lastEmittedRowSelectionKey = '';
155
+ this.colCount = 0;
156
+ this.columnWidthsToken = '';
157
+ this.syncRowSelectedProps();
158
+ }
159
+ }
160
+ componentWillLoad() {
161
+ if (this.isLegacyMode) {
162
+ this.areAllSelected = false;
163
+ this.setData();
164
+ this.setFooterData();
165
+ this.selected = new Array(this.rowData.length).fill(false);
166
+ this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
167
+ }
168
+ }
169
+ componentDidLoad() {
170
+ if (!this.isLegacyMode) {
171
+ this.syncCompositionalLayout();
172
+ }
173
+ }
174
+ componentDidUpdate() {
175
+ if (!this.isLegacyMode) {
176
+ this.syncCompositionalLayout();
177
+ }
178
+ }
179
+ disconnectedCallback() {
180
+ this.clearPendingDragListeners();
181
+ this.detachReorderHandleKeydownListeners();
182
+ this.reorderKeyboardTimers.dispose();
183
+ if (this.reorderAnnounceRaf !== undefined) {
184
+ cancelAnimationFrame(this.reorderAnnounceRaf);
185
+ this.reorderAnnounceRaf = undefined;
186
+ }
187
+ }
188
+ handleHeaderCellColumnWidthsChange(ev) {
189
+ if (this.isLegacyMode)
190
+ return;
191
+ const t = ev.target;
192
+ if (!(t instanceof Node) || !this.el.contains(t))
193
+ return;
194
+ this.updateColumnWidths();
195
+ }
196
+ handleCompositionalCheckboxChange(ev) {
197
+ var _a, _b;
198
+ if (this.isLegacyMode || !this.selectable)
199
+ return;
200
+ if (!this.isEventFromThisTable(ev.target))
201
+ return;
202
+ const path = (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)) !== null && _b !== void 0 ? _b : [];
203
+ let checkboxHost = (path.length > 0 ? path : [ev.target].filter((n) => n != null)).find((n) => n instanceof HTMLElement && n.tagName.toLowerCase() === 'xpl-checkbox');
204
+ if (!checkboxHost &&
205
+ ev.target &&
206
+ typeof ev.target.closest === 'function') {
207
+ checkboxHost = ev.target.closest('xpl-checkbox');
208
+ }
209
+ if (!checkboxHost || !this.el.contains(checkboxHost))
210
+ return;
211
+ const row = checkboxHost.closest('xpl-table-row');
212
+ if (!row || !this.isDirectChildBodyRow(row))
213
+ return;
214
+ const cell = checkboxHost.closest('xpl-table-cell');
215
+ if (!cell)
216
+ return;
217
+ const selectionIdx = this.getSelectionColumnIndex();
218
+ if (selectionIdx === null)
219
+ return;
220
+ const bodyCells = Table.getBodyRowCells(row);
221
+ const colIdx = bodyCells.indexOf(cell);
222
+ if (colIdx !== selectionIdx)
223
+ return;
224
+ ev.stopPropagation();
225
+ const rowId = Table.getRowIdForRow(row);
226
+ if (!rowId || row.disabled)
227
+ return;
228
+ const input = checkboxHost.querySelector('input[type="checkbox"]');
229
+ if (!input)
230
+ return;
231
+ const { checked } = input;
232
+ if (checked) {
233
+ if (!this.selectedRowIds.includes(rowId)) {
234
+ this.selectedRowIds = [...this.selectedRowIds, rowId];
235
+ }
236
+ }
237
+ else {
238
+ this.selectedRowIds = this.selectedRowIds.filter((id) => id !== rowId);
239
+ }
240
+ this.applyHeaderCheckboxState();
241
+ this.syncRowSelectedProps();
242
+ this.emitCompositionalSelection();
243
+ }
244
+ handleCompositionalHeaderCheckboxChange(ev) {
245
+ var _a, _b;
246
+ if (this.isLegacyMode || !this.selectable)
247
+ return;
248
+ if (!this.isEventFromThisTable(ev.target))
249
+ return;
250
+ const path = (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)) !== null && _b !== void 0 ? _b : [];
251
+ let headerCell = (path.length > 0 ? path : [ev.target].filter((n) => n != null)).find((n) => n instanceof HTMLElement &&
252
+ n.tagName.toLowerCase() === 'xpl-table-header-cell' &&
253
+ n.getAttribute('type') === 'checkbox');
254
+ if (!headerCell && ev.target && typeof ev.target.closest === 'function') {
255
+ headerCell = ev.target.closest('xpl-table-header-cell[type="checkbox"]');
256
+ }
257
+ if (!headerCell || !this.el.contains(headerCell))
258
+ return;
259
+ if (!this.isCellInOurCompositionalHeader(headerCell))
260
+ return;
261
+ const headerCells = this.getCompositionalHeaderCells();
262
+ if (!headerCells.includes(headerCell))
263
+ return;
264
+ const checked = !!ev.detail;
265
+ const selectableRows = this.querySelectableBodyRows();
266
+ const ids = selectableRows
267
+ .map((r) => Table.getRowIdForRow(r))
268
+ .filter((id) => !!id);
269
+ if (checked) {
270
+ this.selectedRowIds = [...ids];
271
+ }
272
+ else {
273
+ this.selectedRowIds = [];
274
+ }
275
+ this.applyBodyCheckboxStates();
276
+ this.syncRowSelectedProps();
277
+ this.emitCompositionalSelection();
278
+ }
279
+ handlePointerDownExitKeyboardReorder(ev) {
280
+ if (this.isLegacyMode || !this.rowReorderable || this.keyboardReorderRowId === null) {
281
+ return;
282
+ }
283
+ const t = ev.target;
284
+ if (!(t instanceof Node) || !this.el.contains(t)) {
285
+ return;
286
+ }
287
+ const row = t instanceof Element ? t.closest('xpl-table-row') : null;
288
+ if (!row || !this.isDirectChildBodyRow(row)) {
289
+ return;
290
+ }
291
+ this.keyboardReorderRowId = null;
292
+ this.syncReorderHandleKeyboardA11y(null);
293
+ }
294
+ handleReorderHandleKeyDown(ev) {
295
+ var _a;
296
+ if (this.isLegacyMode || !this.rowReorderable) {
297
+ return;
298
+ }
299
+ const rawPath = typeof ev.composedPath === 'function' ? ev.composedPath() : [];
300
+ const path = rawPath.length > 0 ? rawPath : ev.target ? [ev.target] : [];
301
+ let handle = path.find((n) => n instanceof HTMLElement && n.classList.contains('xpl-table__row-drag-handle'));
302
+ if (!handle &&
303
+ ev.target instanceof HTMLElement &&
304
+ ev.target.classList.contains('xpl-table__row-drag-handle')) {
305
+ handle = ev.target;
306
+ }
307
+ if (!handle || !this.el.contains(handle)) {
308
+ return;
309
+ }
310
+ const row = handle.closest('xpl-table-row');
311
+ if (!row || !this.isDirectChildBodyRow(row)) {
312
+ return;
313
+ }
314
+ const rowId = (_a = Table.getRowIdForRow(row)) !== null && _a !== void 0 ? _a : '';
315
+ if (!rowId) {
316
+ return;
317
+ }
318
+ const isKbd = this.keyboardReorderRowId === rowId;
319
+ const isEscapeKey = ev.key === 'Escape' ||
320
+ ev.key === 'Esc' ||
321
+ ev.code === 'Escape' ||
322
+ ev.keyCode === 27;
323
+ if (row.disabled) {
324
+ if (isEscapeKey && isKbd) {
325
+ ev.preventDefault();
326
+ this.keyboardReorderRowId = null;
327
+ this.syncReorderHandleKeyboardA11y(null);
328
+ }
329
+ return;
330
+ }
331
+ if (isEscapeKey) {
332
+ if (isKbd) {
333
+ ev.preventDefault();
334
+ this.keyboardReorderRowId = null;
335
+ this.syncReorderHandleKeyboardA11y(null);
336
+ }
337
+ return;
338
+ }
339
+ if (!isKbd) {
340
+ if (ev.key === 'Enter' || ev.key === ' ') {
341
+ ev.preventDefault();
342
+ this.keyboardReorderRowId = rowId;
343
+ this.syncReorderHandleKeyboardA11y(rowId);
344
+ }
345
+ return;
346
+ }
347
+ if (ev.key === 'ArrowUp' || ev.key === 'ArrowDown') {
348
+ ev.preventDefault();
349
+ const dir = ev.key === 'ArrowUp' ? 'up' : 'down';
350
+ this.performKeyboardRowReorder(rowId, dir);
351
+ }
352
+ }
353
+ handleRowReorderPointerDown(ev) {
354
+ if (this.isLegacyMode || !this.rowReorderable) {
355
+ return;
356
+ }
357
+ const handle = reorderDragHandleFromEvent(ev);
358
+ if (!handle) {
359
+ return;
360
+ }
361
+ const table = handle.closest('xpl-table');
362
+ if (table !== this.el) {
363
+ return;
364
+ }
365
+ const row = bodyRowFromDragTarget(handle);
366
+ if (!row || row.disabled) {
367
+ return;
368
+ }
369
+ const body = this.getDirectChildTableSection('xpl-table-body');
370
+ if (!body || row.parentElement !== body) {
371
+ return;
372
+ }
373
+ this.clearPendingDragListeners();
374
+ this.pendingDragRow = row;
375
+ const onPointerEnd = () => {
376
+ this.clearPendingDragListeners();
377
+ this.pendingDragRow = null;
378
+ };
379
+ document.addEventListener('pointerup', onPointerEnd, true);
380
+ document.addEventListener('pointercancel', onPointerEnd, true);
381
+ this.pointerUpClearPending = () => {
382
+ document.removeEventListener('pointerup', onPointerEnd, true);
383
+ document.removeEventListener('pointercancel', onPointerEnd, true);
384
+ };
385
+ }
386
+ handleRowReorderDragStart(ev) {
387
+ var _a;
388
+ if (this.isLegacyMode || !this.rowReorderable) {
389
+ return;
390
+ }
391
+ const row = tableBodyRowFromEvent(ev);
392
+ if (!row) {
393
+ return;
394
+ }
395
+ if (row.closest('xpl-table') !== this.el) {
396
+ return;
397
+ }
398
+ const body = this.getDirectChildTableSection('xpl-table-body');
399
+ if (!body || row.parentElement !== body) {
400
+ return;
401
+ }
402
+ if (row.disabled || this.pendingDragRow !== row) {
403
+ ev.preventDefault();
404
+ return;
405
+ }
406
+ this.keyboardReorderRowId = null;
407
+ this.syncReorderHandleKeyboardA11y(null);
408
+ this.clearPendingDragListeners();
409
+ this.pendingDragRow = null;
410
+ this.draggedRow = row;
411
+ if (ev.dataTransfer) {
412
+ ev.dataTransfer.effectAllowed = 'move';
413
+ ev.dataTransfer.setData('text/plain', (_a = Table.getRowIdForRow(row)) !== null && _a !== void 0 ? _a : '');
414
+ }
415
+ row.classList.add('xpl-table-row--dragging');
416
+ }
417
+ handleRowReorderDragEnd(ev) {
418
+ if (this.isLegacyMode || !this.rowReorderable) {
419
+ return;
420
+ }
421
+ const row = tableBodyRowFromEvent(ev);
422
+ if (!row || row.closest('xpl-table') !== this.el) {
423
+ return;
424
+ }
425
+ row.classList.remove('xpl-table-row--dragging');
426
+ this.clearReorderDragOverClasses();
427
+ this.draggedRow = null;
428
+ }
429
+ handleRowReorderDragOver(ev) {
430
+ if (this.isLegacyMode || !this.rowReorderable) {
431
+ return;
432
+ }
433
+ const row = tableBodyRowFromEvent(ev);
434
+ if (!row || row.closest('xpl-table') !== this.el) {
435
+ return;
436
+ }
437
+ const body = this.getDirectChildTableSection('xpl-table-body');
438
+ if (!body || row.parentElement !== body || row.disabled) {
439
+ return;
440
+ }
441
+ ev.preventDefault();
442
+ if (ev.dataTransfer) {
443
+ ev.dataTransfer.dropEffect = 'move';
444
+ }
445
+ }
446
+ handleRowReorderDragEnter(ev) {
447
+ if (this.isLegacyMode || !this.rowReorderable) {
448
+ return;
449
+ }
450
+ const row = tableBodyRowFromEvent(ev);
451
+ if (!row || row.closest('xpl-table') !== this.el) {
452
+ return;
453
+ }
454
+ const body = this.getDirectChildTableSection('xpl-table-body');
455
+ if (!body || row.parentElement !== body || row.disabled) {
456
+ return;
457
+ }
458
+ ev.preventDefault();
459
+ row.classList.add('xpl-table-row--drag-over');
460
+ }
461
+ handleRowReorderDragLeave(ev) {
462
+ if (this.isLegacyMode || !this.rowReorderable) {
463
+ return;
464
+ }
465
+ const row = tableBodyRowFromEvent(ev);
466
+ if (!row || row.closest('xpl-table') !== this.el) {
467
+ return;
468
+ }
469
+ const related = ev.relatedTarget;
470
+ if (related && row.contains(related)) {
471
+ return;
472
+ }
473
+ row.classList.remove('xpl-table-row--drag-over');
474
+ }
475
+ handleRowReorderDrop(ev) {
476
+ var _a;
477
+ if (this.isLegacyMode || !this.rowReorderable) {
478
+ return;
479
+ }
480
+ ev.preventDefault();
481
+ const dropRow = tableBodyRowFromEvent(ev);
482
+ if (!dropRow || dropRow.closest('xpl-table') !== this.el) {
483
+ return;
484
+ }
485
+ const body = this.getDirectChildTableSection('xpl-table-body');
486
+ if (!body || dropRow.parentElement !== body || dropRow.disabled) {
487
+ return;
488
+ }
489
+ const source = this.draggedRow;
490
+ if (!source || source.disabled) {
491
+ this.draggedRow = null;
492
+ this.clearReorderDragOverClasses();
493
+ return;
494
+ }
495
+ if (source === dropRow) {
496
+ this.clearReorderDragOverClasses();
497
+ return;
498
+ }
499
+ const visible = this.getVisibleBodyRowsForReorder();
500
+ const fromIndex = visible.indexOf(source);
501
+ const toIndex = visible.indexOf(dropRow);
502
+ if (fromIndex === -1 || toIndex === -1) {
503
+ this.clearReorderDragOverClasses();
504
+ return;
505
+ }
506
+ const direction = fromIndex > toIndex ? 'up' : 'down';
507
+ const rowId = (_a = Table.getRowIdForRow(source)) !== null && _a !== void 0 ? _a : '';
508
+ const runMove = () => {
509
+ moveRowInTableBody(body, source, dropRow);
510
+ };
511
+ runMove();
512
+ const orderedRowIds = this.getVisibleBodyRowsForReorder().map((r) => { var _a; return (_a = Table.getRowIdForRow(r)) !== null && _a !== void 0 ? _a : ''; });
513
+ this.rowOrderChange.emit({
514
+ rowId,
515
+ direction,
516
+ orderedRowIds,
517
+ fromIndex,
518
+ toIndex,
519
+ });
520
+ this.announceRowReorder(rowId, orderedRowIds);
521
+ this.clearReorderDragOverClasses();
522
+ if (this.selectable) {
523
+ this.applyBodyCheckboxStates();
524
+ this.applyHeaderCheckboxState();
525
+ this.syncRowSelectedProps();
526
+ }
527
+ this.updateColumnWidths();
528
+ }
529
+ get isLegacyMode() {
530
+ return this.columns !== undefined || this.data !== undefined || this.footer !== undefined;
531
+ }
532
+ ensureTableInstanceId() {
533
+ if (this.tableInstanceId)
534
+ return;
535
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
536
+ this.tableInstanceId = crypto.randomUUID();
537
+ }
538
+ else {
539
+ this.tableInstanceId = Math.random().toString(36).slice(2);
540
+ }
541
+ }
542
+ generateRowId() {
543
+ this.ensureTableInstanceId();
544
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
545
+ return `${this.tableInstanceId}-${crypto.randomUUID()}`;
546
+ }
547
+ return `${this.tableInstanceId}-${Math.random().toString(36).slice(2)}`;
548
+ }
549
+ syncCompositionalLayout() {
550
+ if (this.isLegacyMode)
551
+ return;
552
+ if (this.rowReorderable) {
553
+ this.syncReorderColumn();
554
+ }
555
+ else {
556
+ this.removeManagedReorderCells();
557
+ }
558
+ if (this.selectable) {
559
+ this.ensureTableInstanceId();
560
+ this.pruneStaleSelectedRowIds();
561
+ this.ensureBodyRowIds();
562
+ this.applyBodyCheckboxStates();
563
+ this.applyHeaderCheckboxState();
564
+ this.syncRowSelectedProps();
565
+ }
566
+ if (this.rowReorderable && this.selectable) {
567
+ this.normalizeManagedColumnsOrder();
568
+ }
569
+ this.updateColumnWidths();
570
+ }
571
+ getDirectChildTableSection(tag) {
572
+ var _a;
573
+ const el = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === tag);
574
+ return (_a = el) !== null && _a !== void 0 ? _a : null;
575
+ }
576
+ isDirectChildBodyRow(row) {
577
+ const body = this.getDirectChildTableSection('xpl-table-body');
578
+ return body !== null && row.parentElement === body;
579
+ }
580
+ isCellInOurCompositionalHeader(cell) {
581
+ const header = cell.closest('xpl-table-header');
582
+ return header !== null && header.parentElement === this.el;
583
+ }
584
+ getSelectionColumnIndex() {
585
+ const headerCells = this.getCompositionalHeaderCells();
586
+ const idx = headerCells.findIndex((c) => c.getAttribute('type') === 'checkbox');
587
+ return idx >= 0 ? idx : null;
588
+ }
589
+ static getBodyRowCells(row) {
590
+ return Array.from(row.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-cell');
591
+ }
592
+ queryBodyRows() {
593
+ const body = this.getDirectChildTableSection('xpl-table-body');
594
+ if (!body)
595
+ return [];
596
+ return Array.from(body.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-row');
597
+ }
598
+ querySelectableBodyRows() {
599
+ return this.queryBodyRows().filter((row) => !row.disabled);
600
+ }
601
+ static getRowIdForRow(row) {
602
+ var _a;
603
+ const id = (_a = row.getAttribute('row-id')) === null || _a === void 0 ? void 0 : _a.trim();
604
+ return id || null;
605
+ }
606
+ ensureBodyRowIds() {
607
+ this.queryBodyRows().forEach((row) => {
608
+ if (Table.getRowIdForRow(row))
609
+ return;
610
+ row.setAttribute('row-id', this.generateRowId());
611
+ });
612
+ }
613
+ removeManagedReorderCells() {
614
+ this.el.querySelectorAll(`[${ROW_REORDER_MARK}]`).forEach((node) => {
615
+ var _a;
616
+ if (!(node instanceof Element))
617
+ return;
618
+ if (node.closest('xpl-table') !== this.el)
619
+ return;
620
+ (_a = node.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(node);
621
+ });
622
+ }
623
+ getSelectionSlotCellForReorderOrder(row) {
624
+ const idx = this.getSelectionColumnIndex();
625
+ if (idx === null) {
626
+ return null;
627
+ }
628
+ const cells = Array.from(row.children);
629
+ const cell = cells[idx];
630
+ if (!cell) {
631
+ return null;
632
+ }
633
+ const tag = cell.tagName.toLowerCase();
634
+ if (tag === 'xpl-table-header-cell') {
635
+ return cell.getAttribute('type') === 'checkbox' ? cell : null;
636
+ }
637
+ if (tag === 'xpl-table-cell') {
638
+ if (cell.hasAttribute(SELECTION_MARK)) {
639
+ return cell;
640
+ }
641
+ return cell.querySelector('xpl-checkbox') ? cell : null;
642
+ }
643
+ if (tag === 'xpl-table-footer-cell') {
644
+ return cell;
645
+ }
646
+ return null;
647
+ }
648
+ normalizeManagedColumnsOrder() {
649
+ var _a;
650
+ const fix = (row) => {
651
+ const re = row.querySelector(`:scope > [${ROW_REORDER_MARK}]`);
652
+ const se = this.getSelectionSlotCellForReorderOrder(row);
653
+ if (!re || !se) {
654
+ return;
655
+ }
656
+ const siblings = Array.from(row.children);
657
+ const iRe = siblings.indexOf(re);
658
+ const iSe = siblings.indexOf(se);
659
+ if (iRe > iSe) {
660
+ row.insertBefore(re, se);
661
+ }
662
+ };
663
+ const header = (_a = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header')) !== null && _a !== void 0 ? _a : null;
664
+ if (header) {
665
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
666
+ const container = firstRow !== null && firstRow !== void 0 ? firstRow : header;
667
+ fix(container);
668
+ }
669
+ this.queryBodyRows().forEach((row) => fix(row));
670
+ const footer = this.getDirectChildTableSection('xpl-table-footer');
671
+ if (footer) {
672
+ Array.from(footer.children)
673
+ .filter((c) => c.tagName.toLowerCase() === 'xpl-table-row')
674
+ .forEach((row) => fix(row));
675
+ }
676
+ }
677
+ syncReorderColumn() {
678
+ if (!this.rowReorderable || this.isLegacyMode)
679
+ return;
680
+ this.ensureBodyRowIds();
681
+ this.ensureHeaderReorderCell();
682
+ this.ensureBodyReorderCells();
683
+ this.ensureFooterReorderCells();
684
+ this.applyReorderRowDraggableState();
685
+ }
686
+ ensureHeaderReorderCell() {
687
+ var _a;
688
+ const header = (_a = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header')) !== null && _a !== void 0 ? _a : null;
689
+ if (!header)
690
+ return;
691
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
692
+ const container = firstRow !== null && firstRow !== void 0 ? firstRow : header;
693
+ if (Array.from(container.children).some((c) => c.tagName.toLowerCase() === 'xpl-table-header-cell' &&
694
+ c.hasAttribute(ROW_REORDER_MARK))) {
695
+ return;
696
+ }
697
+ const cell = document.createElement('xpl-table-header-cell');
698
+ cell.setAttribute(ROW_REORDER_MARK, '');
699
+ cell.setAttribute('type', 'empty');
700
+ cell.setAttribute('width', '48');
701
+ cell.setAttribute('align', 'center');
702
+ container.insertBefore(cell, container.firstChild);
703
+ }
704
+ ensureBodyReorderCells() {
705
+ this.queryBodyRows().forEach((row) => {
706
+ var _a;
707
+ const managed = Array.from(row.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-cell' &&
708
+ c.hasAttribute(ROW_REORDER_MARK));
709
+ if (managed.length > 1) {
710
+ for (let i = 1; i < managed.length; i += 1) {
711
+ managed[i].remove();
712
+ }
713
+ }
714
+ let cell = managed[0];
715
+ if (!cell) {
716
+ const newCell = document.createElement('xpl-table-cell');
717
+ newCell.setAttribute(ROW_REORDER_MARK, '');
718
+ newCell.setAttribute('width', '48');
719
+ newCell.setAttribute('align', 'center');
720
+ const btn = document.createElement('button');
721
+ btn.type = 'button';
722
+ btn.className = 'xpl-table__row-drag-handle';
723
+ btn.setAttribute('aria-label', 'Reorder row');
724
+ btn.setAttribute('aria-pressed', 'false');
725
+ const iconName = this.getResolvedIconForRow((_a = Table.getRowIdForRow(row)) !== null && _a !== void 0 ? _a : '');
726
+ if (iconName) {
727
+ const icon = document.createElement('xpl-icon');
728
+ icon.setAttribute('icon', iconName);
729
+ icon.setAttribute('size', '16');
730
+ btn.appendChild(icon);
731
+ }
732
+ newCell.appendChild(btn);
733
+ row.insertBefore(newCell, row.firstChild);
734
+ cell = newCell;
735
+ }
736
+ else {
737
+ cell.setAttribute('align', 'center');
738
+ }
739
+ const btn = cell.querySelector('.xpl-table__row-drag-handle');
740
+ if (btn) {
741
+ btn.disabled = row.disabled;
742
+ }
743
+ });
744
+ this.syncInjectedReorderHandleIcons();
745
+ this.attachReorderHandleKeydownListeners();
746
+ }
747
+ getResolvedIconForRow(rowId) {
748
+ var _a, _b;
749
+ const inKeyboardMode = this.keyboardReorderRowId !== null &&
750
+ rowId !== '' &&
751
+ rowId === this.keyboardReorderRowId;
752
+ if (inKeyboardMode) {
753
+ if (this.reorderHandleIconKeyboard === '') {
754
+ return null;
755
+ }
756
+ return (_a = this.reorderHandleIconKeyboard) !== null && _a !== void 0 ? _a : 'caret-expand-y';
757
+ }
758
+ if (this.reorderHandleIcon === '') {
759
+ return null;
760
+ }
761
+ return (_b = this.reorderHandleIcon) !== null && _b !== void 0 ? _b : 'grip-dots-vertical';
762
+ }
763
+ syncInjectedReorderHandleIcons() {
764
+ this.queryBodyRows().forEach((row) => {
765
+ var _a;
766
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
767
+ if (!btn) {
768
+ return;
769
+ }
770
+ const rowId = (_a = Table.getRowIdForRow(row)) !== null && _a !== void 0 ? _a : '';
771
+ const iconName = this.getResolvedIconForRow(rowId);
772
+ btn.querySelectorAll('xpl-icon').forEach((n) => n.remove());
773
+ if (iconName) {
774
+ const icon = document.createElement('xpl-icon');
775
+ icon.setAttribute('icon', iconName);
776
+ icon.setAttribute('size', '16');
777
+ btn.appendChild(icon);
778
+ }
779
+ });
780
+ }
781
+ syncReorderHandleKeyboardA11y(activeId) {
782
+ if (this.isLegacyMode || !this.rowReorderable) {
783
+ return;
784
+ }
785
+ this.queryBodyRows().forEach((row) => {
786
+ var _a;
787
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
788
+ if (!btn) {
789
+ return;
790
+ }
791
+ const rid = (_a = Table.getRowIdForRow(row)) !== null && _a !== void 0 ? _a : '';
792
+ const isActive = activeId !== null && rid === activeId;
793
+ btn.classList.toggle('xpl-table__row-drag-handle--keyboard-mode', isActive);
794
+ btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');
795
+ btn.setAttribute('aria-label', isActive
796
+ ? 'Press arrow up or down to reorder, Escape to exit'
797
+ : 'Press Enter or Space to activate keyboard reorder mode, or drag to reorder');
798
+ });
799
+ this.syncInjectedReorderHandleIcons();
800
+ }
801
+ attachReorderHandleKeydownListeners() {
802
+ if (this.isLegacyMode || !this.rowReorderable) {
803
+ return;
804
+ }
805
+ this.queryBodyRows().forEach((row) => {
806
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
807
+ if (!btn || btn.dataset.xplReorderKbdBound === 'true') {
808
+ return;
809
+ }
810
+ btn.dataset.xplReorderKbdBound = 'true';
811
+ btn.addEventListener('keydown', this.onReorderHandleKeydown);
812
+ });
813
+ }
814
+ detachReorderHandleKeydownListeners() {
815
+ if (!this.el) {
816
+ return;
817
+ }
818
+ this.el
819
+ .querySelectorAll('.xpl-table__row-drag-handle[data-xpl-reorder-kbd-bound="true"]')
820
+ .forEach((btn) => {
821
+ btn.removeEventListener('keydown', this.onReorderHandleKeydown);
822
+ delete btn.dataset.xplReorderKbdBound;
823
+ });
824
+ }
825
+ performKeyboardRowReorder(rowId, direction) {
826
+ const body = this.getDirectChildTableSection('xpl-table-body');
827
+ if (!body) {
828
+ return false;
829
+ }
830
+ const visible = this.getVisibleBodyRowsForReorder();
831
+ const itemIndex = visible.findIndex((r) => Table.getRowIdForRow(r) === rowId);
832
+ if (itemIndex === -1) {
833
+ return false;
834
+ }
835
+ const targetIndex = direction === 'up' ? itemIndex - 1 : itemIndex + 1;
836
+ if (targetIndex < 0 || targetIndex >= visible.length) {
837
+ return false;
838
+ }
839
+ const fromIndex = itemIndex;
840
+ const item = visible[itemIndex];
841
+ const targetItem = visible[targetIndex];
842
+ if (direction === 'up') {
843
+ body.insertBefore(item, targetItem);
844
+ }
845
+ else {
846
+ const nextVisible = getNextVisibleTableBodyRowAfter(targetItem);
847
+ if (nextVisible) {
848
+ body.insertBefore(item, nextVisible);
849
+ }
850
+ else {
851
+ body.appendChild(item);
852
+ }
853
+ }
854
+ const orderedRowIds = this.getVisibleBodyRowsForReorder().map((r) => { var _a; return (_a = Table.getRowIdForRow(r)) !== null && _a !== void 0 ? _a : ''; });
855
+ const toIndex = orderedRowIds.indexOf(rowId);
856
+ this.rowOrderChange.emit({
857
+ rowId,
858
+ direction,
859
+ orderedRowIds,
860
+ fromIndex,
861
+ toIndex,
862
+ });
863
+ this.announceRowReorder(rowId, orderedRowIds);
864
+ this.clearReorderDragOverClasses();
865
+ if (this.selectable) {
866
+ this.applyBodyCheckboxStates();
867
+ this.applyHeaderCheckboxState();
868
+ this.syncRowSelectedProps();
869
+ }
870
+ this.updateColumnWidths();
871
+ this.reorderKeyboardTimers.requestAnimationFrame(() => {
872
+ if (!this.el.isConnected) {
873
+ return;
874
+ }
875
+ const moved = this.getVisibleBodyRowsForReorder().find((r) => Table.getRowIdForRow(r) === rowId);
876
+ const btn = moved === null || moved === void 0 ? void 0 : moved.querySelector('.xpl-table__row-drag-handle');
877
+ btn === null || btn === void 0 ? void 0 : btn.focus();
878
+ });
879
+ return true;
880
+ }
881
+ ensureFooterReorderCells() {
882
+ const footer = this.getDirectChildTableSection('xpl-table-footer');
883
+ if (!footer)
884
+ return;
885
+ Array.from(footer.children)
886
+ .filter((c) => c.tagName.toLowerCase() === 'xpl-table-row')
887
+ .forEach((row) => {
888
+ if (Array.from(row.children).some((c) => c.tagName.toLowerCase() === 'xpl-table-footer-cell' &&
889
+ c.hasAttribute(ROW_REORDER_MARK))) {
890
+ return;
891
+ }
892
+ const cell = document.createElement('xpl-table-footer-cell');
893
+ cell.setAttribute(ROW_REORDER_MARK, '');
894
+ cell.setAttribute('width', '48');
895
+ cell.setAttribute('align', 'center');
896
+ row.insertBefore(cell, row.firstChild);
897
+ });
898
+ }
899
+ static supportsSubgridBodyRow() {
900
+ return (typeof CSS !== 'undefined' &&
901
+ typeof CSS.supports === 'function' &&
902
+ CSS.supports('grid-template-columns', 'subgrid'));
903
+ }
904
+ applyReorderRowDraggableState() {
905
+ const useRowDrag = Table.supportsSubgridBodyRow();
906
+ this.queryBodyRows().forEach((row) => {
907
+ const btn = row.querySelector('.xpl-table__row-drag-handle');
908
+ btn === null || btn === void 0 ? void 0 : btn.removeAttribute('draggable');
909
+ row.removeAttribute('draggable');
910
+ if (!this.rowReorderable || row.disabled) {
911
+ return;
912
+ }
913
+ if (!btn) {
914
+ return;
915
+ }
916
+ if (useRowDrag) {
917
+ row.setAttribute('draggable', 'true');
918
+ }
919
+ else {
920
+ btn.setAttribute('draggable', 'true');
921
+ }
922
+ });
923
+ }
924
+ getVisibleBodyRowsForReorder() {
925
+ return this.queryBodyRows().filter((r) => !r.hasAttribute('hidden'));
926
+ }
927
+ clearReorderDragOverClasses() {
928
+ this.queryBodyRows().forEach((r) => r.classList.remove('xpl-table-row--drag-over'));
929
+ }
930
+ clearPendingDragListeners() {
931
+ if (this.pointerUpClearPending) {
932
+ this.pointerUpClearPending();
933
+ this.pointerUpClearPending = null;
934
+ }
935
+ }
936
+ announceRowReorder(movedRowId, orderedRowIds) {
937
+ if (!this.rowReorderable || !movedRowId) {
938
+ return;
939
+ }
940
+ const index = orderedRowIds.indexOf(movedRowId);
941
+ if (index < 0) {
942
+ return;
943
+ }
944
+ this.reorderLiveMessage = '';
945
+ if (this.reorderAnnounceRaf !== undefined) {
946
+ cancelAnimationFrame(this.reorderAnnounceRaf);
947
+ }
948
+ this.reorderAnnounceRaf = requestAnimationFrame(() => {
949
+ this.reorderAnnounceRaf = undefined;
950
+ if (!this.el.isConnected) {
951
+ return;
952
+ }
953
+ this.reorderLiveMessage = `Row ${movedRowId}, now position ${index + 1} of ${orderedRowIds.length}`;
954
+ });
955
+ }
956
+ pruneStaleSelectedRowIds() {
957
+ const validIds = new Set(this.queryBodyRows()
958
+ .map((r) => Table.getRowIdForRow(r))
959
+ .filter((id) => !!id));
960
+ const next = this.selectedRowIds.filter((id) => validIds.has(id));
961
+ if (next.length === this.selectedRowIds.length)
962
+ return;
963
+ this.selectedRowIds = next;
964
+ this.applyBodyCheckboxStates();
965
+ this.applyHeaderCheckboxState();
966
+ this.syncRowSelectedProps();
967
+ this.emitCompositionalSelection();
968
+ }
969
+ static getBodyRowCheckboxAriaLabel(row, selectionColIndex) {
970
+ var _a, _b;
971
+ const cells = Table.getBodyRowCells(row);
972
+ const labelCell = cells.find((c, i) => (selectionColIndex === null || i !== selectionColIndex) &&
973
+ !c.hasAttribute(ROW_REORDER_MARK));
974
+ const first = labelCell !== null && labelCell !== void 0 ? labelCell : cells[0];
975
+ if (!first)
976
+ return 'Select row';
977
+ const raw = (_b = (_a = first.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, ' ').trim()) !== null && _b !== void 0 ? _b : '';
978
+ if (!raw)
979
+ return 'Select row';
980
+ const truncated = raw.length > 100 ? `${raw.slice(0, 100)}…` : raw;
981
+ return `Select row, ${truncated}`;
982
+ }
983
+ applyBodyCheckboxStates() {
984
+ const selectionIdx = this.getSelectionColumnIndex();
985
+ if (selectionIdx === null)
986
+ return;
987
+ this.queryBodyRows().forEach((row) => {
988
+ const rowId = Table.getRowIdForRow(row);
989
+ const cells = Table.getBodyRowCells(row);
990
+ const cell = cells[selectionIdx];
991
+ const cb = cell === null || cell === void 0 ? void 0 : cell.querySelector('xpl-checkbox');
992
+ if (!cb || !rowId)
993
+ return;
994
+ cb.checked = this.selectedRowIds.includes(rowId);
995
+ cb.disabled = row.disabled;
996
+ cb.value = rowId;
997
+ cb.setAttribute('aria-label', Table.getBodyRowCheckboxAriaLabel(row, selectionIdx));
998
+ });
999
+ }
1000
+ getHeaderCheckboxCell() {
1001
+ const idx = this.getSelectionColumnIndex();
1002
+ if (idx === null)
1003
+ return null;
1004
+ const cells = this.getCompositionalHeaderCells();
1005
+ const cell = cells[idx];
1006
+ if (!cell || cell.getAttribute('type') !== 'checkbox')
1007
+ return null;
1008
+ return cell;
1009
+ }
1010
+ applyHeaderCheckboxState() {
1011
+ const cell = this.getHeaderCheckboxCell();
1012
+ if (!cell)
1013
+ return;
1014
+ const selectableRows = this.querySelectableBodyRows();
1015
+ const ids = selectableRows
1016
+ .map((r) => Table.getRowIdForRow(r))
1017
+ .filter((id) => !!id);
1018
+ const selectedCount = ids.filter((id) => this.selectedRowIds.includes(id)).length;
1019
+ const allSelected = ids.length > 0 && selectedCount === ids.length;
1020
+ const indeterminate = selectedCount > 0 && !allSelected;
1021
+ cell.checked = allSelected;
1022
+ cell.indeterminate = indeterminate;
1023
+ }
1024
+ syncRowSelectedProps() {
1025
+ this.queryBodyRows().forEach((row) => {
1026
+ const id = Table.getRowIdForRow(row);
1027
+ const selected = id ? this.selectedRowIds.includes(id) : false;
1028
+ row.selected = selected;
1029
+ });
1030
+ }
1031
+ emitCompositionalSelection() {
1032
+ const ids = this.selectedRowIds;
1033
+ const key = ids.join('\u0001');
1034
+ if (key === this.lastEmittedRowSelectionKey) {
1035
+ return;
1036
+ }
1037
+ this.lastEmittedRowSelectionKey = key;
1038
+ this.rowSelectionChange.emit({ selectedRowIds: [...ids] });
1039
+ }
1040
+ isEventFromThisTable(target) {
1041
+ if (target == null || typeof target !== 'object')
1042
+ return false;
1043
+ const t = target;
1044
+ const start = 'closest' in t && typeof t.closest === 'function'
1045
+ ? t
1046
+ : 'parentElement' in t
1047
+ ? t.parentElement
1048
+ : null;
1049
+ if (!start)
1050
+ return false;
1051
+ const nearest = start.closest('xpl-table');
1052
+ return nearest === this.el;
1053
+ }
1054
+ static sortKeyFromHeaderCell(cell, columnIndex) {
1055
+ var _a, _b;
1056
+ const c = cell;
1057
+ const raw = ((_b = (_a = c.sortKey) !== null && _a !== void 0 ? _a : c.label) !== null && _b !== void 0 ? _b : '').trim();
1058
+ if (raw.length > 0) {
1059
+ return raw.replace(/ /g, '-').toLowerCase();
1060
+ }
1061
+ return `column-${columnIndex}`;
1062
+ }
1063
+ handleCompositionalHeaderSort(ev) {
1064
+ var _a;
1065
+ if (this.isLegacyMode)
1066
+ return;
1067
+ if (!this.isEventFromThisTable(ev.target))
1068
+ return;
1069
+ const source = ev.target;
1070
+ const headerRow = (_a = source.closest('xpl-table-header xpl-table-row')) !== null && _a !== void 0 ? _a : source.closest('xpl-table-row');
1071
+ if (!headerRow || !this.el.contains(headerRow))
1072
+ return;
1073
+ const cells = Array.from(headerRow.querySelectorAll('xpl-table-header-cell'));
1074
+ const { columnIndex } = ev.detail;
1075
+ const target = cells[columnIndex];
1076
+ if (!(target === null || target === void 0 ? void 0 : target.sortable))
1077
+ return;
1078
+ const next = cycleSortDirection(target.sortDirection);
1079
+ cells.forEach((cell, i) => {
1080
+ const hc = cell;
1081
+ if (!hc.sortable)
1082
+ return;
1083
+ hc.sortDirection = i === columnIndex ? next : null;
1084
+ });
1085
+ const sortState = {};
1086
+ cells.forEach((cell, i) => {
1087
+ var _a;
1088
+ const hc = cell;
1089
+ if (!hc.sortable)
37
1090
  return;
38
- const { checked, value } = target;
39
- this.areAllSelected = false;
40
- this.selected = this.selected.map((v, selectedIdx) => {
41
- if (selectedIdx !== checkboxIdx)
42
- return v;
43
- return this.selectedValues.length > 0 ? (checked ? value : checked) : checked;
44
- });
45
- this.onChange();
46
- };
47
- this.onChange = () => {
48
- this.tableSelect.emit({
49
- selected: this.selected,
50
- areAllSelected: this.areAllSelected,
51
- });
52
- };
53
- this.onScroll = () => {
54
- this.hasScrolled = this.container.scrollLeft > 0;
55
- };
56
- this.sortBy = (col, sortTypeArray) => {
57
- const handleSort = (a, b) => {
58
- if (a[col].toLocaleLowerCase() < b[col].toLocaleLowerCase()) {
59
- return -1;
60
- }
61
- if (a[col].toLocaleLowerCase() > b[col].toLocaleLowerCase()) {
62
- return 1;
63
- }
64
- return 0;
65
- };
66
- switch (sortTypeArray[col]) {
67
- case 'asc':
68
- this.rowData.sort((a, b) => handleSort(a, b));
69
- break;
70
- case 'desc':
71
- this.rowData.sort((a, b) => handleSort(b, a));
72
- break;
73
- default:
74
- this.rowData = this.data;
75
- this.sortTypeArray[col] = null;
76
- break;
77
- }
78
- this.rowData = Array.from(this.rowData);
79
- this.render();
80
- };
81
- this.setData = () => {
82
- this.rowData = this.data !== undefined ? Array.from(this.data) : [];
83
- };
84
- this.setFooterData = () => {
85
- this.rowFooterData = this.footer !== undefined ? Array.from(this.footer) : [];
86
- };
1091
+ sortState[Table.sortKeyFromHeaderCell(hc, i)] = (_a = hc.sortDirection) !== null && _a !== void 0 ? _a : null;
1092
+ });
1093
+ const sortTypeArr = cells.map((cell) => {
1094
+ var _a;
1095
+ const hc = cell;
1096
+ return hc.sortable ? ((_a = hc.sortDirection) !== null && _a !== void 0 ? _a : null) : null;
1097
+ });
1098
+ const colName = Table.sortKeyFromHeaderCell(cells[columnIndex], columnIndex);
1099
+ const detail = Object.assign(Object.assign({}, sortState), { colNum: columnIndex, colName,
1100
+ sortTypeArr });
1101
+ this.sortChanged.emit(detail);
1102
+ }
1103
+ legacySortStatePayload() {
1104
+ var _a;
1105
+ const out = {};
1106
+ if (!((_a = this.columns) === null || _a === void 0 ? void 0 : _a.length))
1107
+ return out;
1108
+ this.columns.forEach((col, i) => {
1109
+ var _a;
1110
+ const key = col.replace(/ /g, '-').toLowerCase();
1111
+ out[key] = (_a = this.sortTypeArray[i]) !== null && _a !== void 0 ? _a : null;
1112
+ });
1113
+ return out;
1114
+ }
1115
+ legacySortChangedDetail(colNum) {
1116
+ var _a, _b;
1117
+ const base = this.legacySortStatePayload();
1118
+ const title = (_b = (_a = this.columns) === null || _a === void 0 ? void 0 : _a[colNum]) !== null && _b !== void 0 ? _b : '';
1119
+ const colName = title.replace(/ /g, '-').toLowerCase();
1120
+ return Object.assign(Object.assign({}, base), { colNum,
1121
+ colName, sortTypeArr: [...this.sortTypeArray] });
1122
+ }
1123
+ getCompositionalHeaderCells() {
1124
+ var _a;
1125
+ const header = (_a = Array.from(this.el.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-header')) !== null && _a !== void 0 ? _a : null;
1126
+ if (!header)
1127
+ return [];
1128
+ const firstRow = Array.from(header.children).find((c) => c.tagName.toLowerCase() === 'xpl-table-row');
1129
+ const container = firstRow !== null && firstRow !== void 0 ? firstRow : header;
1130
+ return Array.from(container.children).filter((c) => c.tagName.toLowerCase() === 'xpl-table-header-cell');
87
1131
  }
88
- handleSort(clickEvt, isColumnSortable, colNum, colName) {
1132
+ updateColumnWidths() {
1133
+ const headerCells = this.getCompositionalHeaderCells();
1134
+ const columnWidths = headerCells.map((cell) => getGridColumnWidthFromHeaderCell(cell));
1135
+ const next = columnWidths.join(' ');
1136
+ const n = headerCells.length;
1137
+ if (n === this.colCount && this.colCount > 0 && this.columnWidthsToken === next) {
1138
+ return;
1139
+ }
1140
+ this.el.style.setProperty('--column-widths', next);
1141
+ this.colCount = n;
1142
+ this.columnWidthsToken = next;
1143
+ }
1144
+ handleSort(clickEvt, isColumnSortable, colNum) {
89
1145
  clickEvt.preventDefault();
90
1146
  clickEvt.stopPropagation();
91
1147
  if (!isColumnSortable)
@@ -102,57 +1158,57 @@ export class XplTable {
102
1158
  return 'asc';
103
1159
  }
104
1160
  });
105
- const evt = this.sortChanged.emit({
106
- colNum,
107
- colName,
108
- sortTypeArr: this.sortTypeArray,
109
- });
1161
+ const evt = this.sortChanged.emit(this.legacySortChangedDetail(colNum));
110
1162
  if (!evt.defaultPrevented)
111
1163
  this.sortBy(colNum, this.sortTypeArray);
112
1164
  }
113
- watchData() {
114
- this.setData();
115
- }
116
- watchFooterData() {
117
- this.setFooterData();
118
- }
119
- watchColumns() {
120
- this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
121
- }
122
- componentWillLoad() {
123
- this.areAllSelected = false;
124
- this.setData();
125
- this.setFooterData();
126
- this.selected = new Array(this.rowData.length).fill(false);
127
- this.sortTypeArray = this.columns ? this.columns.map(() => null) : [];
128
- }
129
- render() {
1165
+ renderLegacy() {
130
1166
  var _a;
131
1167
  if (this.columns &&
132
1168
  (!this.sortTypeArray || this.sortTypeArray.length !== this.columns.length)) {
133
1169
  this.sortTypeArray = this.columns.map(() => null);
134
1170
  }
135
- return (h(Host, { key: '3ac2c96a4d691a8e60a2f0f5732787a4dd43e71e' }, h("div", { key: '242225267bf912ae46cf38dd1750dcd66fa627f7', class: "xpl-table-container", onScroll: this.onScroll, ref: (el) => {
1171
+ return (h(Host, null, h("div", { class: "xpl-table-container", onScroll: this.onLegacyScroll, ref: (el) => {
136
1172
  this.container = el;
137
- } }, h("table", { key: '76f22b451b7d09f2843d1afc063f8e287afb419f', class: {
1173
+ } }, h("table", { class: {
138
1174
  'xpl-table': true,
1175
+ 'xpl-table--legacy': true,
139
1176
  'xpl-table--striped': this.striped,
140
1177
  'xpl-table--freeze': this.freeze,
141
1178
  'xpl-table--has-scrolled': this.hasScrolled,
142
- } }, this.columns && (h("thead", { key: 'be12e8292faf5be828c281e3c7d5396652c7e4b8' }, this.columns.map((column, i) => {
143
- var _a;
144
- const iconType = getIconType((_a = this.sortTypeArray) === null || _a === void 0 ? void 0 : _a[i]);
1179
+ } }, this.columns && (h("thead", null, this.columns.map((column, i) => {
1180
+ var _a, _b;
1181
+ const iconType = getIconType((_b = (_a = this.sortTypeArray) === null || _a === void 0 ? void 0 : _a[i]) !== null && _b !== void 0 ? _b : null);
145
1182
  const isColumnSortable = !!(this.isSortable && this.sortableColumns[i]);
146
- return (h("th", null, h("label", { onClick: (e) => this.handleSort(e, isColumnSortable, i, column.replace(/ /g, '-').toLowerCase()), class: isColumnSortable ? 'cursor-pointer' : '' }, this.multiselect && i === 0 && (h("input", { checked: this.areAllSelected, id: "__xpl-table-th", indeterminate: !this.areAllSelected &&
1183
+ return (h("th", null, h("label", { onClick: (e) => this.handleSort(e, isColumnSortable, i), class: isColumnSortable ? 'cursor-pointer' : '' }, this.multiselect && i === 0 && (h("input", { checked: this.areAllSelected, id: "__xpl-table-th", indeterminate: !this.areAllSelected &&
147
1184
  this.selected.some((a) => a), onClick: (e) => {
148
1185
  e.stopPropagation();
149
1186
  this.selectAll(e);
150
1187
  }, type: "checkbox", value: `select-all-${this.selectAllValue}` })), column, isColumnSortable && !!this.sortTypeArray[i] && (h("xpl-icon", { icon: iconType, size: 16 })))));
151
- }))), h("tbody", { key: '94c5ad3a68f1cffa73a55bb106e81c8899ddc2c4' }, this.rowData.map((row, rowNum) => (h("tr", { class: this.selected && this.selected[rowNum]
1188
+ }))), h("tbody", null, this.rowData.map((row, rowNum) => (h("tr", { class: this.selected && this.selected[rowNum]
152
1189
  ? 'xpl-table-row-selected'
153
1190
  : '' }, row.map((cell, i) => (h("td", null, this.multiselect && i === 0 ? (h("label", { htmlFor: `__xpl-table-row-${rowNum}` }, h("input", { id: `__xpl-table-row-${rowNum}`, checked: !!this.selected[rowNum], type: "checkbox", onChange: (e) => this.selectOne(e, rowNum), value: this.selectedValues.length > 0
154
1191
  ? this.selectedValues[rowNum]
155
- : `xpl-table-checkbox-${rowNum}` }), h("div", { innerHTML: cell }))) : (h("div", { innerHTML: cell }))))))))), ((_a = this.rowFooterData) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("tfoot", { key: '2bcfdfed0e5709f60f4beec7f8f58038899b8b30' }, this.rowFooterData.map((row) => (h("tr", null, row.map((cell) => (h("td", null, h("div", { innerHTML: cell })))))))))))));
1192
+ : `xpl-table-checkbox-${rowNum}` }), h("div", { innerHTML: cell }))) : (h("div", { innerHTML: cell }))))))))), ((_a = this.rowFooterData) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("tfoot", null, this.rowFooterData.map((row) => (h("tr", null, row.map((cell) => (h("td", null, h("div", { innerHTML: cell })))))))))))));
1193
+ }
1194
+ renderCompositional() {
1195
+ const selectionToolbarCount = this.selectedRowIds.length;
1196
+ return (h(Host, { role: "grid", "aria-label": this.label, "aria-colcount": this.colCount > 0 ? this.colCount : undefined, class: {
1197
+ 'xpl-table': true,
1198
+ 'xpl-table--striped': this.striped,
1199
+ 'xpl-table--freeze': this.freeze,
1200
+ 'xpl-table--has-scrolled': this.hasScrolled,
1201
+ 'xpl-table--selectable': !!this.selectable,
1202
+ 'xpl-table--selection-active': !!this.selectable && this.selectedRowIds.length > 0,
1203
+ 'xpl-table--row-reorderable': !!this.rowReorderable,
1204
+ }, onScroll: this.onGridScroll }, this.rowReorderable && (h("div", { class: "xpl-table__reorder-live", "aria-live": "assertive", "aria-atomic": "true" }, this.reorderLiveMessage)), this.selectable && (h("div", { class: {
1205
+ 'xpl-toolbar': true,
1206
+ hidden: selectionToolbarCount === 0,
1207
+ 'xpl-table__toolbar': true,
1208
+ } }, h("div", { class: "toolbar" }, h("p", { class: "selected-item-count" }, selectionToolbarCount, " Selected"), h("div", { class: "actions" }, h("slot", { name: "toolbar-actions-left" }), h("slot", { name: "toolbar-actions-right" }))))), h("slot", null)));
1209
+ }
1210
+ render() {
1211
+ return this.isLegacyMode ? this.renderLegacy() : this.renderCompositional();
156
1212
  }
157
1213
  static get is() { return "xpl-table"; }
158
1214
  static get properties() {
@@ -168,8 +1224,11 @@ export class XplTable {
168
1224
  "required": false,
169
1225
  "optional": true,
170
1226
  "docs": {
171
- "tags": [],
172
- "text": "The header values for each column."
1227
+ "tags": [{
1228
+ "name": "deprecated",
1229
+ "text": "Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release.\n\nThe header values for each column."
1230
+ }],
1231
+ "text": ""
173
1232
  },
174
1233
  "getter": false,
175
1234
  "setter": false
@@ -185,8 +1244,11 @@ export class XplTable {
185
1244
  "required": false,
186
1245
  "optional": true,
187
1246
  "docs": {
188
- "tags": [],
189
- "text": "The data for the body of the table."
1247
+ "tags": [{
1248
+ "name": "deprecated",
1249
+ "text": "Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release.\n\nThe data for the body of the table."
1250
+ }],
1251
+ "text": ""
190
1252
  },
191
1253
  "getter": false,
192
1254
  "setter": false
@@ -202,8 +1264,11 @@ export class XplTable {
202
1264
  "required": false,
203
1265
  "optional": true,
204
1266
  "docs": {
205
- "tags": [],
206
- "text": "The data for the footer of the table."
1267
+ "tags": [{
1268
+ "name": "deprecated",
1269
+ "text": "Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release.\n\nThe data for the footer of the table."
1270
+ }],
1271
+ "text": ""
207
1272
  },
208
1273
  "getter": false,
209
1274
  "setter": false
@@ -220,14 +1285,14 @@ export class XplTable {
220
1285
  "optional": true,
221
1286
  "docs": {
222
1287
  "tags": [],
223
- "text": "When true, the first column of the table is sticky and will cover the leftmost rows in a horizontally scrollable container."
1288
+ "text": "When true, the first **data** column (per row) is sticky during horizontal scroll.\nLeading compositional columns are skipped: `selectable` (checkbox) and/or `row-reorderable`\n(grip) are not frozen so they scroll with the grid; the next column stays pinned at `left: 0`."
224
1289
  },
225
1290
  "getter": false,
226
1291
  "setter": false,
227
1292
  "reflect": false,
228
1293
  "attribute": "freeze"
229
1294
  },
230
- "multiselect": {
1295
+ "isSortable": {
231
1296
  "type": "boolean",
232
1297
  "mutable": false,
233
1298
  "complexType": {
@@ -237,16 +1302,39 @@ export class XplTable {
237
1302
  },
238
1303
  "required": false,
239
1304
  "optional": true,
1305
+ "docs": {
1306
+ "tags": [{
1307
+ "name": "deprecated",
1308
+ "text": "Legacy data-driven table API only. May be removed in a future major release.\n\nToggles to show the sort button on each table head."
1309
+ }],
1310
+ "text": ""
1311
+ },
1312
+ "getter": false,
1313
+ "setter": false,
1314
+ "reflect": false,
1315
+ "attribute": "is-sortable",
1316
+ "defaultValue": "false"
1317
+ },
1318
+ "label": {
1319
+ "type": "string",
1320
+ "mutable": false,
1321
+ "complexType": {
1322
+ "original": "string",
1323
+ "resolved": "string",
1324
+ "references": {}
1325
+ },
1326
+ "required": false,
1327
+ "optional": true,
240
1328
  "docs": {
241
1329
  "tags": [],
242
- "text": "Toggles a selectable checkbox for each row in the table"
1330
+ "text": "Accessible label for the table. Maps to `aria-label` in compositional mode."
243
1331
  },
244
1332
  "getter": false,
245
1333
  "setter": false,
246
1334
  "reflect": false,
247
- "attribute": "multiselect"
1335
+ "attribute": "label"
248
1336
  },
249
- "striped": {
1337
+ "multiselect": {
250
1338
  "type": "boolean",
251
1339
  "mutable": false,
252
1340
  "complexType": {
@@ -256,34 +1344,57 @@ export class XplTable {
256
1344
  },
257
1345
  "required": false,
258
1346
  "optional": true,
1347
+ "docs": {
1348
+ "tags": [{
1349
+ "name": "deprecated",
1350
+ "text": "Legacy data-driven table API only. May be removed in a future major release.\n\nToggles a selectable checkbox for each row in the table."
1351
+ }],
1352
+ "text": ""
1353
+ },
1354
+ "getter": false,
1355
+ "setter": false,
1356
+ "reflect": false,
1357
+ "attribute": "multiselect"
1358
+ },
1359
+ "reorderHandleIcon": {
1360
+ "type": "string",
1361
+ "mutable": false,
1362
+ "complexType": {
1363
+ "original": "string",
1364
+ "resolved": "string",
1365
+ "references": {}
1366
+ },
1367
+ "required": false,
1368
+ "optional": true,
259
1369
  "docs": {
260
1370
  "tags": [],
261
- "text": "Toggles an optional styling of the background of each even row of the table body."
1371
+ "text": "Icon name for the optional `xpl-icon` inside each **managed** reorder grip when the row is **not** in\nkeyboard reorder mode (pointer / idle). Set to `\"\"` to omit the icon so you can style the button or author a\nfully custom reorder column in markup. When omitted, defaults to `grip-dots-vertical`."
262
1372
  },
263
1373
  "getter": false,
264
1374
  "setter": false,
265
1375
  "reflect": false,
266
- "attribute": "striped"
1376
+ "attribute": "reorder-handle-icon"
267
1377
  },
268
- "selectedValues": {
269
- "type": "unknown",
1378
+ "reorderHandleIconKeyboard": {
1379
+ "type": "string",
270
1380
  "mutable": false,
271
1381
  "complexType": {
272
- "original": "string[]",
273
- "resolved": "string[]",
1382
+ "original": "string",
1383
+ "resolved": "string",
274
1384
  "references": {}
275
1385
  },
276
1386
  "required": false,
277
1387
  "optional": true,
278
1388
  "docs": {
279
1389
  "tags": [],
280
- "text": "The values for the input for each row when multiselect is activated."
1390
+ "text": "Icon name for the managed reorder grip **while that row is in keyboard reorder mode** (after the user\nactivates the grip with Enter or Space). Use a different icon than `reorder-handle-icon` so users can see\nthey should use arrow keys. When omitted, defaults to `caret-expand-y` (same as `xpl-list` keyboard reorder).\nSet to `\"\"` to show no icon in keyboard mode only (combine with CSS on\n`.xpl-table__row-drag-handle--keyboard-mode` if needed)."
281
1391
  },
282
1392
  "getter": false,
283
1393
  "setter": false,
284
- "defaultValue": "[]"
1394
+ "reflect": false,
1395
+ "attribute": "reorder-handle-icon-keyboard"
285
1396
  },
286
- "isSortable": {
1397
+ "rowReorderable": {
287
1398
  "type": "boolean",
288
1399
  "mutable": false,
289
1400
  "complexType": {
@@ -295,13 +1406,52 @@ export class XplTable {
295
1406
  "optional": true,
296
1407
  "docs": {
297
1408
  "tags": [],
298
- "text": "Toggles to show the sort button on each table head"
1409
+ "text": "When true (compositional mode only), **prepends** a managed reorder column as the **first** grid\ncolumn (empty header + grip button per body row) and enables HTML5 drag-and-drop row reordering\n(same interaction model as `xpl-list`). With `selectable`, DOM order is **reorder | selection |\ndata** unless you author a custom reorder column. The table updates the DOM and emits\n`rowOrderChange`; consumers should persist order if needed. Ignored in legacy `columns`/`data` mode."
299
1410
  },
300
1411
  "getter": false,
301
1412
  "setter": false,
302
1413
  "reflect": false,
303
- "attribute": "is-sortable",
304
- "defaultValue": "false"
1414
+ "attribute": "row-reorderable"
1415
+ },
1416
+ "selectable": {
1417
+ "type": "boolean",
1418
+ "mutable": false,
1419
+ "complexType": {
1420
+ "original": "boolean",
1421
+ "resolved": "boolean",
1422
+ "references": {}
1423
+ },
1424
+ "required": false,
1425
+ "optional": true,
1426
+ "docs": {
1427
+ "tags": [],
1428
+ "text": "When true (compositional mode only), enables row selection state, the selection toolbar\n(\u201CN Selected\u201D), and `rowSelectionChange`. **You must add the selection column in your\nmarkup:** a header cell with `type=\"checkbox\"`, a body cell containing `xpl-checkbox` per row\n(aligned with that column), and matching `xpl-table-footer-cell` cells when you use a footer.\nEach body row should use `row-id` on `xpl-table-row` (or accept auto-generated ids) so\n`rowSelectionChange` can report `selectedRowIds`.\n\nThe toolbar uses the same layout as `xpl-toolbar` and is visible only while at least one row\nis selected. Use `toolbar-actions-left` / `toolbar-actions-right` slots on this host for bulk\nactions."
1429
+ },
1430
+ "getter": false,
1431
+ "setter": false,
1432
+ "reflect": false,
1433
+ "attribute": "selectable"
1434
+ },
1435
+ "selectedValues": {
1436
+ "type": "unknown",
1437
+ "mutable": false,
1438
+ "complexType": {
1439
+ "original": "string[]",
1440
+ "resolved": "string[]",
1441
+ "references": {}
1442
+ },
1443
+ "required": false,
1444
+ "optional": true,
1445
+ "docs": {
1446
+ "tags": [{
1447
+ "name": "deprecated",
1448
+ "text": "Legacy data-driven table API only. May be removed in a future major release.\n\nThe values for the input for each row when multiselect is activated."
1449
+ }],
1450
+ "text": ""
1451
+ },
1452
+ "getter": false,
1453
+ "setter": false,
1454
+ "defaultValue": "[]"
305
1455
  },
306
1456
  "sortableColumns": {
307
1457
  "type": "unknown",
@@ -314,39 +1464,86 @@ export class XplTable {
314
1464
  "required": false,
315
1465
  "optional": true,
316
1466
  "docs": {
317
- "tags": [],
318
- "text": "Manually determined if the column is sortable"
1467
+ "tags": [{
1468
+ "name": "deprecated",
1469
+ "text": "Use the compositional slot-based API instead. Will be removed in a future major release.\n\nManually determined if the column is sortable."
1470
+ }],
1471
+ "text": ""
319
1472
  },
320
1473
  "getter": false,
321
1474
  "setter": false,
322
1475
  "defaultValue": "[]"
1476
+ },
1477
+ "striped": {
1478
+ "type": "boolean",
1479
+ "mutable": false,
1480
+ "complexType": {
1481
+ "original": "boolean",
1482
+ "resolved": "boolean",
1483
+ "references": {}
1484
+ },
1485
+ "required": false,
1486
+ "optional": true,
1487
+ "docs": {
1488
+ "tags": [],
1489
+ "text": "Toggles an optional styling of the background of each even row of the\ntable body."
1490
+ },
1491
+ "getter": false,
1492
+ "setter": false,
1493
+ "reflect": false,
1494
+ "attribute": "striped"
323
1495
  }
324
1496
  };
325
1497
  }
326
1498
  static get states() {
327
1499
  return {
328
1500
  "areAllSelected": {},
1501
+ "colCount": {},
1502
+ "hasScrolled": {},
1503
+ "keyboardReorderRowId": {},
1504
+ "reorderLiveMessage": {},
329
1505
  "rowData": {},
330
1506
  "rowFooterData": {},
331
- "hasScrolled": {},
332
1507
  "selected": {},
1508
+ "selectedRowIds": {},
333
1509
  "sortTypeArray": {}
334
1510
  };
335
1511
  }
336
1512
  static get events() {
337
1513
  return [{
338
- "method": "tableSelect",
339
- "name": "tableSelect",
340
- "bubbles": true,
1514
+ "method": "rowOrderChange",
1515
+ "name": "rowOrderChange",
1516
+ "bubbles": false,
341
1517
  "cancelable": true,
342
1518
  "composed": true,
343
1519
  "docs": {
344
1520
  "tags": [],
345
- "text": "Callback function that is called when the checkbox for a row of a\n`multiselect` table is checked"
1521
+ "text": "Emitted after body rows are reordered via drag-and-drop (compositional `row-reorderable` mode)."
346
1522
  },
347
1523
  "complexType": {
348
- "original": "any",
349
- "resolved": "any",
1524
+ "original": "XplTableRowOrderChangeDetail",
1525
+ "resolved": "XplTableRowOrderChangeDetail",
1526
+ "references": {
1527
+ "XplTableRowOrderChangeDetail": {
1528
+ "location": "local",
1529
+ "path": "/home/runner/work/apollo/apollo/packages/apollo-core/src/components/components/xpl-table/xpl-table.tsx",
1530
+ "id": "src/components/components/xpl-table/xpl-table.tsx::XplTableRowOrderChangeDetail"
1531
+ }
1532
+ }
1533
+ }
1534
+ }, {
1535
+ "method": "rowSelectionChange",
1536
+ "name": "rowSelectionChange",
1537
+ "bubbles": false,
1538
+ "cancelable": true,
1539
+ "composed": true,
1540
+ "docs": {
1541
+ "tags": [],
1542
+ "text": "Emitted when row selection changes in compositional `selectable` mode.\nListen on this `xpl-table` instance only; the event does not bubble to parents\u2014use\n`table.addEventListener('rowSelectionChange', \u2026)` on the same element. When wiring from a\nscript in static HTML, wait for `customElements.whenDefined('xpl-table')` so the host is ready.\n(Named `rowSelectionChange` to avoid clashing with the native `selectionchange` event.)"
1543
+ },
1544
+ "complexType": {
1545
+ "original": "{ selectedRowIds: string[] }",
1546
+ "resolved": "{ selectedRowIds: string[]; }",
350
1547
  "references": {}
351
1548
  }
352
1549
  }, {
@@ -357,11 +1554,32 @@ export class XplTable {
357
1554
  "composed": true,
358
1555
  "docs": {
359
1556
  "tags": [],
360
- "text": "Emits an event whenever the sort changes.\nThe 'sortChanged' event passes an object with colNum (number), colName (string), sortTypeArr(string[]).\nThe default action can be overridden by calling event.preventDefault()."
1557
+ "text": "Emitted when sort changes in **legacy** or **compositional** mode. `event.detail` is a plain\nobject: **sort-key slug \u2192 `'asc' | 'desc' | null`** (null = that column not sorted). Keys match\nlegacy column titles (slugified) or compositional `sort-key` / label slugs. Call\n`event.preventDefault()` in legacy mode to skip built-in row sorting; compositional tables do\nnot reorder rows automatically."
1558
+ },
1559
+ "complexType": {
1560
+ "original": "XplTableSortChangedDetail",
1561
+ "resolved": "XplTableSortChangedDetail",
1562
+ "references": {
1563
+ "XplTableSortChangedDetail": {
1564
+ "location": "local",
1565
+ "path": "/home/runner/work/apollo/apollo/packages/apollo-core/src/components/components/xpl-table/xpl-table.tsx",
1566
+ "id": "src/components/components/xpl-table/xpl-table.tsx::XplTableSortChangedDetail"
1567
+ }
1568
+ }
1569
+ }
1570
+ }, {
1571
+ "method": "tableSelect",
1572
+ "name": "tableSelect",
1573
+ "bubbles": true,
1574
+ "cancelable": true,
1575
+ "composed": true,
1576
+ "docs": {
1577
+ "tags": [],
1578
+ "text": "Callback function that is called when the checkbox for a row of a\n`multiselect` table is checked."
361
1579
  },
362
1580
  "complexType": {
363
- "original": "{\n colNum: number;\n colName: string;\n sortTypeArr: string[];\n }",
364
- "resolved": "{ colNum: number; colName: string; sortTypeArr: string[]; }",
1581
+ "original": "any",
1582
+ "resolved": "any",
365
1583
  "references": {}
366
1584
  }
367
1585
  }];
@@ -369,14 +1587,101 @@ export class XplTable {
369
1587
  static get elementRef() { return "el"; }
370
1588
  static get watchers() {
371
1589
  return [{
1590
+ "propName": "columns",
1591
+ "methodName": "watchColumns"
1592
+ }, {
372
1593
  "propName": "data",
373
1594
  "methodName": "watchData"
374
1595
  }, {
375
1596
  "propName": "footer",
376
1597
  "methodName": "watchFooterData"
377
1598
  }, {
378
- "propName": "columns",
379
- "methodName": "watchColumns"
1599
+ "propName": "reorderHandleIcon",
1600
+ "methodName": "watchReorderHandleIcon"
1601
+ }, {
1602
+ "propName": "reorderHandleIconKeyboard",
1603
+ "methodName": "watchReorderHandleIconKeyboard"
1604
+ }, {
1605
+ "propName": "rowReorderable",
1606
+ "methodName": "watchRowReorderable"
1607
+ }, {
1608
+ "propName": "selectable",
1609
+ "methodName": "watchSelectable"
1610
+ }];
1611
+ }
1612
+ static get listeners() {
1613
+ return [{
1614
+ "name": "xplTableColumnWidthsChange",
1615
+ "method": "handleHeaderCellColumnWidthsChange",
1616
+ "target": undefined,
1617
+ "capture": false,
1618
+ "passive": false
1619
+ }, {
1620
+ "name": "checkboxChange",
1621
+ "method": "handleCompositionalCheckboxChange",
1622
+ "target": undefined,
1623
+ "capture": false,
1624
+ "passive": false
1625
+ }, {
1626
+ "name": "headerCheckboxChange",
1627
+ "method": "handleCompositionalHeaderCheckboxChange",
1628
+ "target": undefined,
1629
+ "capture": false,
1630
+ "passive": false
1631
+ }, {
1632
+ "name": "pointerdown",
1633
+ "method": "handlePointerDownExitKeyboardReorder",
1634
+ "target": undefined,
1635
+ "capture": true,
1636
+ "passive": true
1637
+ }, {
1638
+ "name": "pointerdown",
1639
+ "method": "handleRowReorderPointerDown",
1640
+ "target": undefined,
1641
+ "capture": true,
1642
+ "passive": true
1643
+ }, {
1644
+ "name": "dragstart",
1645
+ "method": "handleRowReorderDragStart",
1646
+ "target": undefined,
1647
+ "capture": true,
1648
+ "passive": true
1649
+ }, {
1650
+ "name": "dragend",
1651
+ "method": "handleRowReorderDragEnd",
1652
+ "target": undefined,
1653
+ "capture": true,
1654
+ "passive": true
1655
+ }, {
1656
+ "name": "dragover",
1657
+ "method": "handleRowReorderDragOver",
1658
+ "target": undefined,
1659
+ "capture": true,
1660
+ "passive": false
1661
+ }, {
1662
+ "name": "dragenter",
1663
+ "method": "handleRowReorderDragEnter",
1664
+ "target": undefined,
1665
+ "capture": true,
1666
+ "passive": false
1667
+ }, {
1668
+ "name": "dragleave",
1669
+ "method": "handleRowReorderDragLeave",
1670
+ "target": undefined,
1671
+ "capture": true,
1672
+ "passive": true
1673
+ }, {
1674
+ "name": "drop",
1675
+ "method": "handleRowReorderDrop",
1676
+ "target": undefined,
1677
+ "capture": true,
1678
+ "passive": false
1679
+ }, {
1680
+ "name": "headerSortChange",
1681
+ "method": "handleCompositionalHeaderSort",
1682
+ "target": undefined,
1683
+ "capture": false,
1684
+ "passive": false
380
1685
  }];
381
1686
  }
382
1687
  }