@xplortech/apollo-core 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/.typings/apollo-components.html-data.json +120 -14
  2. package/build/components/avatar.css +1 -1
  3. package/build/components/data-card.css +1 -1
  4. package/build/components/dropdown.css +1 -1
  5. package/build/components/input-time.css +1 -1
  6. package/build/components/large-card.css +1 -1
  7. package/build/components/list-item.css +1 -1
  8. package/build/components/modal.css +1 -1
  9. package/build/components/popover.css +1 -1
  10. package/build/components/side-nav.css +1 -1
  11. package/build/components/spotlight.css +1 -1
  12. package/build/components/table-cell-base.css +1 -0
  13. package/build/components/table-cell.css +1 -0
  14. package/build/components/table-footer-cell.css +1 -1
  15. package/build/components/table-header-cell.css +1 -1
  16. package/build/components/table.css +1 -1
  17. package/build/components/tag.css +1 -1
  18. package/build/components/toast.css +1 -1
  19. package/build/components/toggle.css +1 -1
  20. package/build/components/toolbar.css +1 -1
  21. package/build/components/tooltip.css +1 -1
  22. package/build/components/top-nav.css +1 -1
  23. package/build/components-manifest.json +19 -3
  24. package/build/core.css +1 -1
  25. package/build/style.css +1 -1
  26. package/build/variables/apollo.css +4 -0
  27. package/build/variables/field-edge.css +4 -0
  28. package/build/vendor/flatpickr.css +1 -1
  29. package/dist/apollo-core/apollo-core.css +1 -1
  30. package/dist/apollo-core/apollo-core.esm.js +1 -1
  31. package/dist/apollo-core/p-045a4538.entry.js +1 -0
  32. package/dist/apollo-core/{p-d443291f.entry.js → p-050a8bf2.entry.js} +1 -1
  33. package/dist/apollo-core/p-08767607.entry.js +1 -0
  34. package/dist/apollo-core/{p-149ddd12.entry.js → p-11914cd4.entry.js} +1 -1
  35. package/dist/apollo-core/{p-581b702c.entry.js → p-14e86de8.entry.js} +1 -1
  36. package/dist/apollo-core/p-194c0ccd.entry.js +1 -0
  37. package/dist/apollo-core/p-1c031055.entry.js +1 -0
  38. package/dist/apollo-core/p-24f7280a.entry.js +1 -0
  39. package/dist/apollo-core/{p-47bda204.entry.js → p-24fa8a03.entry.js} +1 -1
  40. package/dist/apollo-core/{p-91895c40.entry.js → p-2971e2ec.entry.js} +1 -1
  41. package/dist/apollo-core/{p-0958c719.entry.js → p-3417c1ce.entry.js} +1 -1
  42. package/dist/apollo-core/p-3713cd77.entry.js +1 -0
  43. package/dist/apollo-core/p-386851a2.entry.js +1 -0
  44. package/dist/apollo-core/p-3cd1238b.entry.js +1 -0
  45. package/dist/apollo-core/{p-b45179fb.entry.js → p-49531864.entry.js} +1 -1
  46. package/dist/apollo-core/p-4e3c6616.entry.js +1 -0
  47. package/dist/apollo-core/p-5b9fd96e.entry.js +1 -0
  48. package/dist/apollo-core/{p-cb5b15c2.entry.js → p-5bfac8fd.entry.js} +1 -1
  49. package/dist/apollo-core/p-5c3be343.entry.js +1 -0
  50. package/dist/apollo-core/p-5cbf5d42.entry.js +1 -0
  51. package/dist/apollo-core/p-5ec2b180.entry.js +1 -0
  52. package/dist/apollo-core/{p-790709c0.entry.js → p-64f5c129.entry.js} +1 -1
  53. package/dist/apollo-core/{p-28bce81a.entry.js → p-65f6b66c.entry.js} +1 -1
  54. package/dist/apollo-core/{p-d9070ae5.entry.js → p-715baae0.entry.js} +1 -1
  55. package/dist/apollo-core/p-72e0455f.entry.js +1 -0
  56. package/dist/apollo-core/p-7ac7fbc0.entry.js +1 -0
  57. package/dist/apollo-core/p-7d70e089.entry.js +1 -0
  58. package/dist/apollo-core/{p-d41b8f46.entry.js → p-7eb02cf3.entry.js} +1 -1
  59. package/dist/apollo-core/p-7f4463ff.entry.js +1 -0
  60. package/dist/apollo-core/p-808f3d9c.entry.js +1 -0
  61. package/dist/apollo-core/p-87582346.entry.js +1 -0
  62. package/dist/apollo-core/{p-2c995d80.entry.js → p-8f8f4759.entry.js} +1 -1
  63. package/dist/apollo-core/{p-5d9a593e.entry.js → p-907bc21e.entry.js} +1 -1
  64. package/dist/apollo-core/p-9905c77c.entry.js +1 -0
  65. package/dist/apollo-core/{p-54903322.entry.js → p-9d731673.entry.js} +1 -1
  66. package/dist/apollo-core/{p-2938ab4f.entry.js → p-9feaa8be.entry.js} +1 -1
  67. package/dist/apollo-core/p-O7gQjVdS.js +1 -0
  68. package/dist/apollo-core/p-a6ecca68.entry.js +1 -0
  69. package/dist/apollo-core/p-a789c272.entry.js +1 -0
  70. package/dist/apollo-core/{p-06a9a27b.entry.js → p-aeb2bcb8.entry.js} +1 -1
  71. package/dist/apollo-core/p-b3b4678b.entry.js +1 -0
  72. package/dist/apollo-core/{p-82812126.entry.js → p-b64ed46d.entry.js} +1 -1
  73. package/dist/apollo-core/{p-0368a1df.entry.js → p-bc821e69.entry.js} +1 -1
  74. package/dist/apollo-core/p-bd493c4a.entry.js +1 -0
  75. package/dist/apollo-core/p-bdcece21.entry.js +1 -0
  76. package/dist/apollo-core/{p-cdb5b5c4.entry.js → p-bfb7a83a.entry.js} +1 -1
  77. package/dist/apollo-core/{p-cdacfcd4.entry.js → p-c22f70f4.entry.js} +1 -1
  78. package/dist/apollo-core/{p-5730d96c.entry.js → p-c5bc3b2c.entry.js} +1 -1
  79. package/dist/apollo-core/{p-4ad79534.entry.js → p-ca83003e.entry.js} +1 -1
  80. package/dist/apollo-core/p-d3230277.entry.js +1 -0
  81. package/dist/apollo-core/p-d3ada7d0.entry.js +1 -0
  82. package/dist/apollo-core/{p-d0bc7c45.entry.js → p-d469bf5d.entry.js} +1 -1
  83. package/dist/apollo-core/p-d7f8ee34.entry.js +1 -0
  84. package/dist/apollo-core/p-d879c349.entry.js +1 -0
  85. package/dist/apollo-core/{p-2139f9f6.entry.js → p-df257cbf.entry.js} +1 -1
  86. package/dist/apollo-core/p-e09d8beb.entry.js +1 -0
  87. package/dist/apollo-core/p-e4d50301.entry.js +1 -0
  88. package/dist/apollo-core/{p-f3a2c79b.entry.js → p-ea9cdd65.entry.js} +1 -1
  89. package/dist/apollo-core/{p-ca4652b3.entry.js → p-eba654a3.entry.js} +1 -1
  90. package/dist/apollo-core/{p-4a2323b3.entry.js → p-ee68bed6.entry.js} +1 -1
  91. package/dist/apollo-core/{p-abdf199b.entry.js → p-f384a990.entry.js} +1 -1
  92. package/dist/apollo-core/{p-4d4acd1f.entry.js → p-f579e4b0.entry.js} +1 -1
  93. package/dist/apollo-core/{p-d724c419.entry.js → p-fcb17ff9.entry.js} +1 -1
  94. package/dist/apollo-core/{p-e2890eb1.entry.js → p-ff16f574.entry.js} +1 -1
  95. package/dist/cjs/apollo-core.cjs.js +1 -1
  96. package/dist/cjs/index-3cBvw409.js +8 -12
  97. package/dist/cjs/loader.cjs.js +1 -1
  98. package/dist/cjs/table-internal-DssCrBs_.js +67 -0
  99. package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
  100. package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
  101. package/dist/cjs/xpl-avatar_3.cjs.entry.js +4 -4
  102. package/dist/cjs/xpl-backdrop.cjs.entry.js +1 -1
  103. package/dist/cjs/xpl-badge.cjs.entry.js +1 -1
  104. package/dist/cjs/xpl-banner.cjs.entry.js +2 -2
  105. package/dist/cjs/xpl-breadcrumb-item.cjs.entry.js +1 -1
  106. package/dist/cjs/xpl-breadcrumbs.cjs.entry.js +1 -1
  107. package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
  108. package/dist/cjs/xpl-button.cjs.entry.js +1 -1
  109. package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
  110. package/dist/cjs/xpl-checkbox.cjs.entry.js +3 -3
  111. package/dist/cjs/xpl-choicelist.cjs.entry.js +1 -1
  112. package/dist/cjs/xpl-content-area.cjs.entry.js +1 -1
  113. package/dist/cjs/xpl-dashboard.cjs.entry.js +1 -1
  114. package/dist/cjs/xpl-data-card.cjs.entry.js +2 -2
  115. package/dist/cjs/xpl-dropdown_4.cjs.entry.js +8 -8
  116. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
  117. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
  118. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
  119. package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
  120. package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
  121. package/dist/cjs/xpl-header-accordion.cjs.entry.js +1 -1
  122. package/dist/cjs/xpl-icon.cjs.entry.js +2 -2
  123. package/dist/cjs/xpl-input-color.cjs.entry.js +8 -8
  124. package/dist/cjs/xpl-input-phone.cjs.entry.js +5 -5
  125. package/dist/cjs/xpl-input-time.cjs.entry.js +2 -2
  126. package/dist/cjs/xpl-input_4.cjs.entry.js +10 -10
  127. package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
  128. package/dist/cjs/xpl-list.cjs.entry.js +2 -2
  129. package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
  130. package/dist/cjs/xpl-modal.cjs.entry.js +1 -1
  131. package/dist/cjs/xpl-nav-header-menu.cjs.entry.js +2 -2
  132. package/dist/cjs/xpl-nav-item.cjs.entry.js +2 -2
  133. package/dist/cjs/xpl-pagination.cjs.entry.js +4 -4
  134. package/dist/cjs/xpl-panel.cjs.entry.js +2 -2
  135. package/dist/cjs/xpl-popover.cjs.entry.js +4 -4
  136. package/dist/cjs/xpl-progress-bar.cjs.entry.js +2 -2
  137. package/dist/cjs/xpl-progress-indicator.cjs.entry.js +1 -1
  138. package/dist/cjs/xpl-secondary-nav.cjs.entry.js +1 -1
  139. package/dist/cjs/xpl-select_2.cjs.entry.js +8 -8
  140. package/dist/cjs/xpl-side-nav-header-item.cjs.entry.js +2 -2
  141. package/dist/cjs/xpl-side-nav-item.cjs.entry.js +2 -2
  142. package/dist/cjs/xpl-side-nav-section.cjs.entry.js +5 -5
  143. package/dist/cjs/xpl-side-nav.cjs.entry.js +2 -2
  144. package/dist/cjs/xpl-skeleton.cjs.entry.js +1 -1
  145. package/dist/cjs/xpl-slideout.cjs.entry.js +1 -1
  146. package/dist/cjs/xpl-tab-panel.cjs.entry.js +2 -2
  147. package/dist/cjs/xpl-table-body.cjs.entry.js +1 -1
  148. package/dist/cjs/xpl-table-cell_3.cjs.entry.js +228 -0
  149. package/dist/cjs/xpl-table-footer.cjs.entry.js +1 -1
  150. package/dist/cjs/xpl-table-header.cjs.entry.js +1 -1
  151. package/dist/cjs/xpl-table-row.cjs.entry.js +43 -2
  152. package/dist/cjs/xpl-table.cjs.entry.js +1204 -80
  153. package/dist/cjs/xpl-tabs.cjs.entry.js +5 -5
  154. package/dist/cjs/xpl-toast.cjs.entry.js +2 -2
  155. package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
  156. package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
  157. package/dist/cjs/xpl-tooltip.cjs.entry.js +1 -1
  158. package/dist/cjs/xpl-top-nav-item.cjs.entry.js +2 -2
  159. package/dist/cjs/xpl-top-nav-menu.cjs.entry.js +2 -2
  160. package/dist/cjs/xpl-top-nav.cjs.entry.js +5 -5
  161. package/dist/cjs/xpl-utility-bar.cjs.entry.js +1 -1
  162. package/dist/collection/collection-manifest.json +2 -1
  163. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  164. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  165. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  166. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  167. package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
  168. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  169. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  170. package/dist/collection/components/xpl-button/xpl-button.js +1 -1
  171. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  172. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  173. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +3 -3
  174. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  175. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  176. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  177. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  178. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  179. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  180. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  181. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  182. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +4 -4
  183. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +2 -2
  184. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  185. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  186. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  187. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  188. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
  189. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  190. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  191. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  192. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  193. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  194. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
  195. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  196. package/dist/collection/components/xpl-input/xpl-input.js +2 -2
  197. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  198. package/dist/collection/components/xpl-list/xpl-list.js +2 -2
  199. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  200. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  201. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  202. package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
  203. package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
  204. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  205. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  206. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
  207. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  208. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  209. package/dist/collection/components/xpl-select/xpl-select.js +6 -6
  210. package/dist/collection/components/xpl-side-nav/xpl-side-nav-header-item/xpl-side-nav-header-item.js +2 -2
  211. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  212. package/dist/collection/components/xpl-side-nav/xpl-side-nav-section/xpl-side-nav-section.js +5 -5
  213. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  214. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  215. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  216. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
  217. package/dist/collection/components/xpl-table/utils/move-row-dom.js +50 -0
  218. package/dist/collection/components/xpl-table/utils/table-internal.js +57 -0
  219. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +1 -1
  220. package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +167 -0
  221. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +1 -1
  222. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +2 -2
  223. package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +402 -0
  224. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +44 -2
  225. package/dist/collection/components/xpl-table/xpl-table.js +1427 -116
  226. package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
  227. package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
  228. package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
  229. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  230. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  231. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  232. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  233. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
  234. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +2 -2
  235. package/dist/collection/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.js +2 -2
  236. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +5 -5
  237. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  238. package/dist/components/index.d.ts +3 -1
  239. package/dist/components/index.js +1 -1
  240. package/dist/components/{p-oIn1krdu.js → p-1D7CWIJ-.js} +1 -1
  241. package/dist/components/{p-xtOHikY0.js → p-2cJsJK3-.js} +1 -1
  242. package/dist/components/{p-DYmvElhR.js → p-8zrW9vEC.js} +1 -1
  243. package/dist/components/p-B56GeUtW.js +1 -0
  244. package/dist/components/p-B6YLKDUX.js +1 -0
  245. package/dist/components/{p-D--kzomA.js → p-B7aaJikj.js} +1 -1
  246. package/dist/components/{p-U0JYwf4c.js → p-BOm_p_mz.js} +1 -1
  247. package/dist/components/p-BZIZSovL.js +1 -0
  248. package/dist/components/{p-EfW0v54z.js → p-BtLC-jpk.js} +1 -1
  249. package/dist/components/{p-xFsB212F.js → p-Btb2UkLz.js} +1 -1
  250. package/dist/components/{p-DAb-txW3.js → p-C0AbGd4t.js} +1 -1
  251. package/dist/components/p-CFXvQqUO.js +1 -0
  252. package/dist/components/{p-l3EZ-agL.js → p-CQjJIHK6.js} +1 -1
  253. package/dist/components/{p-Chpgh5SL.js → p-CV5nn1zR.js} +1 -1
  254. package/dist/components/p-CdRmVtIN.js +1 -0
  255. package/dist/components/p-CgemLtmL.js +1 -0
  256. package/dist/components/p-CmbpWpb0.js +1 -0
  257. package/dist/components/p-CuVYRPvz.js +1 -0
  258. package/dist/components/{p-JyNpXfDe.js → p-D09sGbzs.js} +1 -1
  259. package/dist/components/{p-BdpZR4KO.js → p-DTh_zemx.js} +1 -1
  260. package/dist/components/{p-CiHTfk3E.js → p-DoVubWyd.js} +1 -1
  261. package/dist/components/p-Dp62sBqX.js +1 -0
  262. package/dist/components/p-DqgnC_vS.js +1 -0
  263. package/dist/components/p-DtV4i45B.js +1 -0
  264. package/dist/components/{p-wIU7KUhA.js → p-ohy3NrgH.js} +1 -1
  265. package/dist/components/xpl-accordion.js +1 -1
  266. package/dist/components/xpl-application-shell.js +1 -1
  267. package/dist/components/xpl-avatar.js +1 -1
  268. package/dist/components/xpl-backdrop.js +1 -1
  269. package/dist/components/xpl-badge.js +1 -1
  270. package/dist/components/xpl-banner.js +1 -1
  271. package/dist/components/xpl-breadcrumb-item.js +1 -1
  272. package/dist/components/xpl-breadcrumbs.js +1 -1
  273. package/dist/components/xpl-button-row.js +1 -1
  274. package/dist/components/xpl-button.js +1 -1
  275. package/dist/components/xpl-calendar.js +1 -1
  276. package/dist/components/xpl-checkbox.js +1 -1
  277. package/dist/components/xpl-choicelist.js +1 -1
  278. package/dist/components/xpl-content-area.js +1 -1
  279. package/dist/components/xpl-dashboard.js +1 -1
  280. package/dist/components/xpl-data-card.js +1 -1
  281. package/dist/components/xpl-divider.js +1 -1
  282. package/dist/components/xpl-dropdown-group.js +1 -1
  283. package/dist/components/xpl-dropdown-heading.js +1 -1
  284. package/dist/components/xpl-dropdown-option.js +1 -1
  285. package/dist/components/xpl-dropdown.js +1 -1
  286. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  287. package/dist/components/xpl-dynamic-table-row.js +1 -1
  288. package/dist/components/xpl-dynamic-table.js +1 -1
  289. package/dist/components/xpl-grid-item.js +1 -1
  290. package/dist/components/xpl-grid.js +1 -1
  291. package/dist/components/xpl-header-accordion.js +1 -1
  292. package/dist/components/xpl-icon.js +1 -1
  293. package/dist/components/xpl-input-color.js +1 -1
  294. package/dist/components/xpl-input-date.js +1 -1
  295. package/dist/components/xpl-input-file.js +1 -1
  296. package/dist/components/xpl-input-phone.js +1 -1
  297. package/dist/components/xpl-input-search.js +1 -1
  298. package/dist/components/xpl-input-time.js +1 -1
  299. package/dist/components/xpl-input.js +1 -1
  300. package/dist/components/xpl-large-card.js +1 -1
  301. package/dist/components/xpl-list-item.js +1 -1
  302. package/dist/components/xpl-list.js +1 -1
  303. package/dist/components/xpl-main-nav.js +1 -1
  304. package/dist/components/xpl-modal.js +1 -1
  305. package/dist/components/xpl-nav-header-menu.js +1 -1
  306. package/dist/components/xpl-nav-item.js +1 -1
  307. package/dist/components/xpl-pagination.js +1 -1
  308. package/dist/components/xpl-panel.js +1 -1
  309. package/dist/components/xpl-popover.js +1 -1
  310. package/dist/components/xpl-progress-bar.js +1 -1
  311. package/dist/components/xpl-progress-indicator.js +1 -1
  312. package/dist/components/xpl-radio.js +1 -1
  313. package/dist/components/xpl-secondary-nav.js +1 -1
  314. package/dist/components/xpl-select.js +1 -1
  315. package/dist/components/xpl-side-nav-header-item.js +1 -1
  316. package/dist/components/xpl-side-nav-item.js +1 -1
  317. package/dist/components/xpl-side-nav-section.js +1 -1
  318. package/dist/components/xpl-side-nav.js +1 -1
  319. package/dist/components/xpl-skeleton.js +1 -1
  320. package/dist/components/xpl-slideout.js +1 -1
  321. package/dist/components/xpl-spotlight.js +1 -1
  322. package/dist/components/xpl-tab-panel.js +1 -1
  323. package/dist/components/xpl-tab.js +1 -1
  324. package/dist/components/xpl-table-body.js +1 -1
  325. package/dist/components/xpl-table-cell.d.ts +11 -0
  326. package/dist/components/xpl-table-cell.js +1 -0
  327. package/dist/components/xpl-table-footer-cell.js +1 -1
  328. package/dist/components/xpl-table-footer.js +1 -1
  329. package/dist/components/xpl-table-header-cell.js +1 -1
  330. package/dist/components/xpl-table-header.js +1 -1
  331. package/dist/components/xpl-table-row.js +1 -1
  332. package/dist/components/xpl-table.js +1 -1
  333. package/dist/components/xpl-tabs.js +1 -1
  334. package/dist/components/xpl-tag.js +1 -1
  335. package/dist/components/xpl-toast.js +1 -1
  336. package/dist/components/xpl-toggle.js +1 -1
  337. package/dist/components/xpl-toolbar.js +1 -1
  338. package/dist/components/xpl-tooltip.js +1 -1
  339. package/dist/components/xpl-top-nav-item.js +1 -1
  340. package/dist/components/xpl-top-nav-menu.js +1 -1
  341. package/dist/components/xpl-top-nav.js +1 -1
  342. package/dist/components/xpl-utility-bar.js +1 -1
  343. package/dist/docs/xpl-avatar/readme.md +1 -1
  344. package/dist/docs/xpl-checkbox/readme.md +1 -3
  345. package/dist/docs/xpl-data-card/readme.md +1 -1
  346. package/dist/docs/xpl-dynamic-table/readme.md +4 -1
  347. package/dist/docs/xpl-dynamic-table-cell/readme.md +2 -0
  348. package/dist/docs/xpl-dynamic-table-row/readme.md +2 -0
  349. package/dist/docs/xpl-icon/readme.md +1 -1
  350. package/dist/docs/xpl-input/xpl-input-time/readme.md +1 -1
  351. package/dist/docs/xpl-large-card/readme.md +1 -1
  352. package/dist/docs/xpl-modal/readme.md +2 -2
  353. package/dist/docs/xpl-popover/readme.md +1 -2
  354. package/dist/docs/xpl-slideout/readme.md +1 -1
  355. package/dist/docs/xpl-spotlight/readme.md +1 -0
  356. package/dist/docs/xpl-table/readme.md +178 -20
  357. package/dist/docs/xpl-table/xpl-table-body/readme.md +4 -4
  358. package/dist/docs/xpl-table/xpl-table-cell/readme.md +53 -0
  359. package/dist/docs/xpl-table/xpl-table-footer/readme.md +4 -4
  360. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +24 -15
  361. package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +84 -0
  362. package/dist/docs/xpl-table/xpl-table-row/readme.md +18 -14
  363. package/dist/docs/xpl-toast/readme.md +2 -2
  364. package/dist/docs/xpl-toggle/readme.md +1 -1
  365. package/dist/docs/xpl-toolbar/readme.md +5 -3
  366. package/dist/docs/xpl-tooltip/readme.md +1 -2
  367. package/dist/docs.json +776 -113
  368. package/dist/esm/apollo-core.js +1 -1
  369. package/dist/esm/index-ukZKsqqq.js +8 -12
  370. package/dist/esm/loader.js +1 -1
  371. package/dist/esm/table-internal-O7gQjVdS.js +59 -0
  372. package/dist/esm/xpl-accordion.entry.js +2 -2
  373. package/dist/esm/xpl-application-shell.entry.js +1 -1
  374. package/dist/esm/xpl-avatar_3.entry.js +4 -4
  375. package/dist/esm/xpl-backdrop.entry.js +1 -1
  376. package/dist/esm/xpl-badge.entry.js +1 -1
  377. package/dist/esm/xpl-banner.entry.js +2 -2
  378. package/dist/esm/xpl-breadcrumb-item.entry.js +1 -1
  379. package/dist/esm/xpl-breadcrumbs.entry.js +1 -1
  380. package/dist/esm/xpl-button-row.entry.js +1 -1
  381. package/dist/esm/xpl-button.entry.js +1 -1
  382. package/dist/esm/xpl-calendar.entry.js +1 -1
  383. package/dist/esm/xpl-checkbox.entry.js +3 -3
  384. package/dist/esm/xpl-choicelist.entry.js +1 -1
  385. package/dist/esm/xpl-content-area.entry.js +1 -1
  386. package/dist/esm/xpl-dashboard.entry.js +1 -1
  387. package/dist/esm/xpl-data-card.entry.js +2 -2
  388. package/dist/esm/xpl-dropdown_4.entry.js +8 -8
  389. package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
  390. package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
  391. package/dist/esm/xpl-dynamic-table.entry.js +2 -2
  392. package/dist/esm/xpl-grid-item.entry.js +1 -1
  393. package/dist/esm/xpl-grid.entry.js +1 -1
  394. package/dist/esm/xpl-header-accordion.entry.js +1 -1
  395. package/dist/esm/xpl-icon.entry.js +2 -2
  396. package/dist/esm/xpl-input-color.entry.js +8 -8
  397. package/dist/esm/xpl-input-phone.entry.js +5 -5
  398. package/dist/esm/xpl-input-time.entry.js +2 -2
  399. package/dist/esm/xpl-input_4.entry.js +10 -10
  400. package/dist/esm/xpl-large-card.entry.js +1 -1
  401. package/dist/esm/xpl-list.entry.js +2 -2
  402. package/dist/esm/xpl-main-nav.entry.js +1 -1
  403. package/dist/esm/xpl-modal.entry.js +1 -1
  404. package/dist/esm/xpl-nav-header-menu.entry.js +2 -2
  405. package/dist/esm/xpl-nav-item.entry.js +2 -2
  406. package/dist/esm/xpl-pagination.entry.js +4 -4
  407. package/dist/esm/xpl-panel.entry.js +2 -2
  408. package/dist/esm/xpl-popover.entry.js +4 -4
  409. package/dist/esm/xpl-progress-bar.entry.js +2 -2
  410. package/dist/esm/xpl-progress-indicator.entry.js +1 -1
  411. package/dist/esm/xpl-secondary-nav.entry.js +1 -1
  412. package/dist/esm/xpl-select_2.entry.js +8 -8
  413. package/dist/esm/xpl-side-nav-header-item.entry.js +2 -2
  414. package/dist/esm/xpl-side-nav-item.entry.js +2 -2
  415. package/dist/esm/xpl-side-nav-section.entry.js +5 -5
  416. package/dist/esm/xpl-side-nav.entry.js +2 -2
  417. package/dist/esm/xpl-skeleton.entry.js +1 -1
  418. package/dist/esm/xpl-slideout.entry.js +1 -1
  419. package/dist/esm/xpl-tab-panel.entry.js +2 -2
  420. package/dist/esm/xpl-table-body.entry.js +1 -1
  421. package/dist/esm/xpl-table-cell_3.entry.js +224 -0
  422. package/dist/esm/xpl-table-footer.entry.js +1 -1
  423. package/dist/esm/xpl-table-header.entry.js +1 -1
  424. package/dist/esm/xpl-table-row.entry.js +44 -3
  425. package/dist/esm/xpl-table.entry.js +1204 -80
  426. package/dist/esm/xpl-tabs.entry.js +5 -5
  427. package/dist/esm/xpl-toast.entry.js +2 -2
  428. package/dist/esm/xpl-toggle.entry.js +3 -3
  429. package/dist/esm/xpl-toolbar.entry.js +2 -2
  430. package/dist/esm/xpl-tooltip.entry.js +1 -1
  431. package/dist/esm/xpl-top-nav-item.entry.js +2 -2
  432. package/dist/esm/xpl-top-nav-menu.entry.js +2 -2
  433. package/dist/esm/xpl-top-nav.entry.js +5 -5
  434. package/dist/esm/xpl-utility-bar.entry.js +1 -1
  435. package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +3 -0
  436. package/dist/types/components/xpl-table/utils/table-internal.d.ts +8 -0
  437. package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +11 -0
  438. package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +33 -0
  439. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +7 -0
  440. package/dist/types/components/xpl-table/xpl-table.d.ts +126 -22
  441. package/dist/types/components.d.ts +238 -60
  442. package/hydrate/index.js +1669 -265
  443. package/hydrate/index.mjs +1669 -265
  444. package/package.json +7 -7
  445. package/dist/apollo-core/p-056a99e4.entry.js +0 -1
  446. package/dist/apollo-core/p-068e3532.entry.js +0 -1
  447. package/dist/apollo-core/p-0a0a6e43.entry.js +0 -1
  448. package/dist/apollo-core/p-1a94c2d9.entry.js +0 -1
  449. package/dist/apollo-core/p-2faa7b9c.entry.js +0 -1
  450. package/dist/apollo-core/p-30b1b700.entry.js +0 -1
  451. package/dist/apollo-core/p-32084caf.entry.js +0 -1
  452. package/dist/apollo-core/p-38586952.entry.js +0 -1
  453. package/dist/apollo-core/p-50fae269.entry.js +0 -1
  454. package/dist/apollo-core/p-60cb3cfb.entry.js +0 -1
  455. package/dist/apollo-core/p-722b145a.entry.js +0 -1
  456. package/dist/apollo-core/p-75e5bfe0.entry.js +0 -1
  457. package/dist/apollo-core/p-77fe3cc1.entry.js +0 -1
  458. package/dist/apollo-core/p-83bb7607.entry.js +0 -1
  459. package/dist/apollo-core/p-8664d88b.entry.js +0 -1
  460. package/dist/apollo-core/p-8a925e9d.entry.js +0 -1
  461. package/dist/apollo-core/p-9064badb.entry.js +0 -1
  462. package/dist/apollo-core/p-969d5cca.entry.js +0 -1
  463. package/dist/apollo-core/p-99a79cf4.entry.js +0 -1
  464. package/dist/apollo-core/p-ae8a5f66.entry.js +0 -1
  465. package/dist/apollo-core/p-af8ebf49.entry.js +0 -1
  466. package/dist/apollo-core/p-b29025b2.entry.js +0 -1
  467. package/dist/apollo-core/p-b5a61076.entry.js +0 -1
  468. package/dist/apollo-core/p-bf7d8e18.entry.js +0 -1
  469. package/dist/apollo-core/p-c48e4884.entry.js +0 -1
  470. package/dist/apollo-core/p-cc57f20d.entry.js +0 -1
  471. package/dist/apollo-core/p-dca48977.entry.js +0 -1
  472. package/dist/apollo-core/p-e1833287.entry.js +0 -1
  473. package/dist/apollo-core/p-e2b73b60.entry.js +0 -1
  474. package/dist/apollo-core/p-e7e445b0.entry.js +0 -1
  475. package/dist/apollo-core/p-f1c103ff.entry.js +0 -1
  476. package/dist/apollo-core/p-ffc2f0cf.entry.js +0 -1
  477. package/dist/cjs/xpl-table-footer-cell.cjs.entry.js +0 -18
  478. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +0 -59
  479. package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +0 -190
  480. package/dist/components/p-9VnxPQLs.js +0 -1
  481. package/dist/components/p-B2oLZUDD.js +0 -1
  482. package/dist/components/p-BYYFsuD3.js +0 -1
  483. package/dist/components/p-BZtxVB1R.js +0 -1
  484. package/dist/components/p-CnVGKN63.js +0 -1
  485. package/dist/components/p-Cz7zDaI4.js +0 -1
  486. package/dist/components/p-D4rv6CNJ.js +0 -1
  487. package/dist/components/p-YG9Jza0y.js +0 -1
  488. package/dist/docs/xpl-table-header-cell/readme.md +0 -47
  489. package/dist/esm/xpl-table-footer-cell.entry.js +0 -16
  490. package/dist/esm/xpl-table-header-cell.entry.js +0 -57
  491. package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -13
@@ -1,45 +1,203 @@
1
- # xpl-table
1
+ # xpl-table
2
+
3
+ Tables are used to organize and display information from a data set.
4
+
5
+ ## Rendering modes
6
+
7
+ 1. **Compositional (recommended)** — Provide `xpl-table-header`, `xpl-table-body`, and optional `xpl-table-footer` with `xpl-table-row` / `xpl-table-header-cell` / `xpl-table-cell` / `xpl-table-footer-cell`. The host uses CSS grid (`role="grid"`). Column widths come from each **`xpl-table-header-cell`** (`width` in px, or `column-width` for any grid track; default `auto` / content-sized). Use `label` for an accessible name. **Sorting:** set `sortable` (and optional `sort-key`) on label header cells; `xpl-table` emits **`sortChanged`** with sort-key slugs → `asc` / `desc` / `null`. The host does **not** reorder row DOM — listen and update your data (or reorder nodes yourself), same as the main Table Storybook demo.
8
+ 2. **Legacy data-driven** — Set `columns`, `data`, and optionally `footer` for a built-in `<table>` implementation. That path supports `isSortable` / `sortableColumns`, `multiselect`, and emits `sortChanged` / `tableSelect` (legacy can reorder rows unless you `preventDefault`). Prefer compositional markup for new work.
9
+
10
+ Composable **selection** (`selectable`), **toolbar**, and copy-paste examples live under **[Usage](#usage)** below (read the breaking-change note first if you are migrating from auto-injected selection cells).
11
+
12
+ ### Row reorder (`row-reorderable`, managed grip column)
13
+
14
+ When `row-reorderable` is set, Apollo can **inject** a leading reorder column with a native **button** + optional `xpl-icon` on each body row (unless you author that column yourself). Keyboard and pointer reorder share the same grip; **keyboard mode** is indicated by `aria-pressed`, updated labels, the class `xpl-table__row-drag-handle--keyboard-mode`, and optionally a **different icon**.
15
+
16
+ **Pointer drag (full row):** Body rows use CSS **`subgrid`** so `xpl-table-row` is a real grid box (like `xpl-list-item`’s row surface). When `CSS.supports('grid-template-columns','subgrid')` is true, **`draggable`** is set on **`xpl-table-row`** so the browser’s drag image matches the whole row; drag still **starts only from the grip** (pointer-down there sets the drag token—dragging from other cells is ignored). Engines without subgrid keep **`draggable`** on the grip button only.
17
+
18
+ | Attribute | When it applies | Purpose |
19
+ | --------- | ---------------- | ------- |
20
+ | `reorder-handle-icon` | Default / drag affordance | Icon name for `xpl-icon` (default `grip-dots-vertical`). Use `reorder-handle-icon=""` to omit the injected icon and use CSS or your own markup in a **custom** reorder cell instead. |
21
+ | `reorder-handle-icon-keyboard` | While that row is in **keyboard reorder mode** (Enter or Space on the grip) | Icon name for the same grip when the user is using **Arrow Up/Down** to move the row (default `caret-expand-y`, matching `xpl-list`). Use `reorder-handle-icon-keyboard=""` to show **no** icon in keyboard mode only. |
22
+
23
+ **Recommended for product UIs:** Set **both** attributes to your design-system icon names so drag vs keyboard modes are visually distinct. You can still add styles targeting `.xpl-table__row-drag-handle--keyboard-mode` (e.g. outline) for extra clarity.
24
+
25
+ **Interaction:** Focus the grip → **Enter** or **Space** → **Arrow Up/Down** to reorder → **Escape** to exit. Pointer down on the row exits keyboard mode; starting a drag also exits keyboard mode.
26
+
27
+ **Custom reorder column:** If you add reorder cells in your own template (not injected), **you** own icons, keyboard behavior, and `rowOrderChange` — these attributes apply only to **managed** injected grips.
28
+
29
+ ## Usage
30
+
31
+ ### Breaking change — compositional `selectable`
32
+
33
+ **Before:** Setting `selectable` alone caused the table to **inject** selection header/body/footer cells into the light DOM (including nodes marked `data-xpl-selection-managed`).
34
+
35
+ **After:** You **must** add the selection column in your own markup (see **Selection** below). `xpl-table` no longer creates or removes those cells; it only syncs selection state and emits events. If you previously relied on automatic injection, add the header checkbox column, per-row checkbox cells, and (when using a footer) leading footer cells so column counts match.
36
+
37
+ ### Selection (`selectable`) and `rowSelectionChange`
38
+
39
+ Set `selectable` on `xpl-table` and **author the selection column in your template** so the framework that renders the table owns every cell node.
40
+
41
+ **Required pieces:**
42
+
43
+ - **Header:** one [`xpl-table-header-cell`](xpl-table-header-cell) with `type="checkbox"` (tri-state “select all”).
44
+ - **Body:** in each `xpl-table-row`, a cell aligned with that column containing **`xpl-checkbox`** (value is driven from `row-id` on the row).
45
+ - **Footer:** if you use `xpl-table-footer`, add a leading `xpl-table-footer-cell` per row for the selection column (often empty) so column counts stay aligned.
46
+
47
+ **Behavior:** After `customElements.whenDefined('xpl-table')`, listen for **`rowSelectionChange`** on the **same** `<xpl-table>` element (`bubbles: false`, `composed: true`). The event payload is `{ selectedRowIds: string[] }`. The host maintains `selectedRowIds`, syncs `checked` / `indeterminate` on the header and row checkboxes, sets `selected` on rows, and shows the bulk toolbar while at least one row is selected. Row checkbox **`aria-label`** is derived from the first **non-selection** data cell in that row (e.g. `Select row, Jordan Lee`); the header uses “Select all rows” unless you set **`checkbox-aria-label`** on the checkbox header cell.
48
+
49
+ **Example (web component):**
50
+
51
+ ```html
52
+ <xpl-table id="roster" selectable label="Team roster">
53
+ <xpl-table-header>
54
+ <xpl-table-row>
55
+ <xpl-table-header-cell type="checkbox"></xpl-table-header-cell>
56
+ <xpl-table-header-cell label="Name" sortable sort-key="name"></xpl-table-header-cell>
57
+ </xpl-table-row>
58
+ </xpl-table-header>
59
+ <xpl-table-body>
60
+ <xpl-table-row row-id="1">
61
+ <xpl-table-cell><xpl-checkbox></xpl-checkbox></xpl-table-cell>
62
+ <xpl-table-cell>Ada</xpl-table-cell>
63
+ </xpl-table-row>
64
+ </xpl-table-body>
65
+ </xpl-table>
66
+ <script type="module">
67
+ await customElements.whenDefined('xpl-table');
68
+ document.getElementById('roster')?.addEventListener('rowSelectionChange', (e) => {
69
+ console.log(e.detail.selectedRowIds);
70
+ });
71
+ </script>
72
+ ```
73
+
74
+ #### Framework notes (Vue / React / etc.)
75
+
76
+ Use **`xpl-checkbox`** in the selection column so `xpl-table` can sync `checked`, `indeterminate`, and `value` from `row-id`. On **`xpl-table-header-cell`**, the selection header uses **`type="checkbox"`**; the prop is **reflected** to the host attribute so Vue bindings like `:type="'checkbox'"` still expose `type="checkbox"` in the DOM for the table’s column detection and CSS.
77
+
78
+ ### Legacy (`columns` / `data`)
79
+
80
+ Set `columns`, `data`, and optional `footer` as **properties** after `customElements.whenDefined('xpl-table')`, or use attributes where your bundler passes JSON strings.
81
+
82
+ ```html
83
+ <xpl-table id="legacy"></xpl-table>
84
+ <script type="module">
85
+ await customElements.whenDefined('xpl-table');
86
+ const t = document.getElementById('legacy');
87
+ t.columns = ['Name', 'Score'];
88
+ t.data = [
89
+ ['Ada', '100'],
90
+ ['Bob', '95'],
91
+ ];
92
+ t.multiselect = true;
93
+ t.addEventListener('tableSelect', (e) => console.log(e.detail));
94
+ </script>
95
+ ```
96
+
97
+ ## Accessibility
98
+
99
+ | Concern | Behavior |
100
+ | ------- | -------- |
101
+ | Table landmark | Compositional host uses **`role="grid"`**; set **`label`** (maps to `aria-label`). |
102
+ | Columns | Header cells use **`role="columnheader"`** with `aria-colindex`; sortable label headers expose sort state via **`aria-sort`**. |
103
+ | Selection | Checkbox column: header reflects **checked / mixed** via `aria-checked`; row checkboxes get **`aria-label`** from the first non-selection cell’s text (or override with `checkbox-aria-label` on the checkbox header cell). |
104
+ | Sort | Sorting is a **`<button type="button">`** inside the header cell; focus uses **`:focus-visible`** with focus tokens in `table-header-cell.css`. |
105
+ | Row reorder | Managed grip is a **`<button>`** with `aria-label` / `aria-pressed` for keyboard reorder mode; live region announces reorder when enabled. |
106
+
107
+ Keyboard: **Tab** through sort buttons, checkboxes, reorder grips, and cell actions. **Enter** / **Space** activate sort and the reorder grip per native button semantics.
108
+
109
+ ## Design Tokens
110
+
111
+ Compositional grid layout tokens live in `table.css`; cell, row, header, and toolbar tokens are split across sibling CSS files.
112
+
113
+ | Element | Property | Token | Light | Dark |
114
+ | ------- | -------- | ----- | ----- | ---- |
115
+ | Host (compositional) | border | `--xpl-border-small`, `--xpl-border-default` | neutral-200 | neutral-800 |
116
+ | Host (compositional) | border-radius | `--xpl-border-radius-default` | 8px | 8px |
117
+ | Host (compositional) | grid columns | `--column-widths` (runtime from header cells) | — | — |
118
+ | Selection toolbar | sticky z-index | `--xpl-z-index-200` | 200 | 200 |
119
+ | Selection toolbar | min-height | `--xpl-size-350` | 56px | 56px |
120
+ | Freeze shadow | gradient | `--xpl-background-surface-transparent-10` → `-0` | near-black 10% | near-white 10% |
121
+ | Freeze column | sticky z-index | `--xpl-z-index-100` | 100 | 100 |
122
+ | Freeze scroll hint | width | `--xpl-space-24` | 24px | 24px |
123
+ | Striped even rows | cell background | `--xpl-background-surface-subtlest` | neutral-50 | neutral-950 |
124
+ | Striped + selected | cell background | `--xpl-background-surface-information-bold` | blue-100 | blue-900 |
125
+
126
+ ## Icon mapping
127
+
128
+ When Apollo **injects** the reorder column, icons come from table props (override with `""` to omit):
129
+
130
+ | Context | Default `xpl-icon` `icon` value |
131
+ | ------- | -------------------------------- |
132
+ | Pointer / idle grip | `grip-dots-vertical` |
133
+ | Keyboard reorder mode | `caret-expand-y` |
134
+
135
+ Sort direction uses **`xpl-icon`** names from header-cell internals (`graph`, carets, etc.) — see Storybook **Components → Table**.
136
+
137
+ <!-- Auto Generated Below -->
2
138
 
3
- Tables are used to organize and display information from a data set.
4
139
 
5
- <!-- Auto Generated Below -->
140
+ ## Overview
6
141
 
142
+ Compositional tables use CSS grid on the host (`role="grid"`). Legacy mode uses a `<table>`.
7
143
 
8
144
  ## Properties
9
145
 
10
- | Property | Attribute | Description | Type | Default |
11
- | ----------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------- |
12
- | `columns` | -- | The header values for each column. | `string[]` | `undefined` |
13
- | `data` | -- | The data for the body of the table. | `string[][]` | `undefined` |
14
- | `footer` | -- | The data for the footer of the table. | `string[][]` | `undefined` |
15
- | `freeze` | `freeze` | When true, the first column of the table is sticky and will cover the leftmost rows in a horizontally scrollable container. | `boolean` | `undefined` |
16
- | `isSortable` | `is-sortable` | Toggles to show the sort button on each table head | `boolean` | `false` |
17
- | `multiselect` | `multiselect` | Toggles a selectable checkbox for each row in the table | `boolean` | `undefined` |
18
- | `selectedValues` | -- | The values for the input for each row when multiselect is activated. | `string[]` | `[]` |
19
- | `sortableColumns` | -- | Manually determined if the column is sortable | `boolean[]` | `[]` |
20
- | `striped` | `striped` | Toggles an optional styling of the background of each even row of the table body. | `boolean` | `undefined` |
146
+ | Property | Attribute | Description | Type | Default |
147
+ | --------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------- |
148
+ | `columns` | -- | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release. The header values for each column.<br/><br/> | `string[]` | `undefined` |
149
+ | `data` | -- | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release. The data for the body of the table.<br/><br/> | `string[][]` | `undefined` |
150
+ | `footer` | -- | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only (`columns` / `data` / `footer`). May be removed in a future major release. The data for the footer of the table.<br/><br/> | `string[][]` | `undefined` |
151
+ | `freeze` | `freeze` | When true, the first **data** column (per row) is sticky during horizontal scroll. Leading compositional columns are skipped: `selectable` (checkbox) and/or `row-reorderable` (grip) are not frozen so they scroll with the grid; the next column stays pinned at `left: 0`. | `boolean` | `undefined` |
152
+ | `isSortable` | `is-sortable` | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only. May be removed in a future major release. Toggles to show the sort button on each table head.<br/><br/> | `boolean` | `false` |
153
+ | `label` | `label` | Accessible label for the table. Maps to `aria-label` in compositional mode. | `string` | `undefined` |
154
+ | `multiselect` | `multiselect` | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only. May be removed in a future major release. Toggles a selectable checkbox for each row in the table.<br/><br/> | `boolean` | `undefined` |
155
+ | `reorderHandleIcon` | `reorder-handle-icon` | Icon name for the optional `xpl-icon` inside each **managed** reorder grip when the row is **not** in keyboard reorder mode (pointer / idle). Set to `""` to omit the icon so you can style the button or author a fully custom reorder column in markup. When omitted, defaults to `grip-dots-vertical`. | `string` | `undefined` |
156
+ | `reorderHandleIconKeyboard` | `reorder-handle-icon-keyboard` | Icon name for the managed reorder grip **while that row is in keyboard reorder mode** (after the user activates the grip with Enter or Space). Use a different icon than `reorder-handle-icon` so users can see they should use arrow keys. When omitted, defaults to `caret-expand-y` (same as `xpl-list` keyboard reorder). Set to `""` to show no icon in keyboard mode only (combine with CSS on `.xpl-table__row-drag-handle--keyboard-mode` if needed). | `string` | `undefined` |
157
+ | `rowReorderable` | `row-reorderable` | When true (compositional mode only), **prepends** a managed reorder column as the **first** grid column (empty header + grip button per body row) and enables HTML5 drag-and-drop row reordering (same interaction model as `xpl-list`). With `selectable`, DOM order is **reorder \| selection \| data** unless you author a custom reorder column. The table updates the DOM and emits `rowOrderChange`; consumers should persist order if needed. Ignored in legacy `columns`/`data` mode. | `boolean` | `false` |
158
+ | `selectable` | `selectable` | When true (compositional mode only), enables row selection state, the selection toolbar (“N Selected”), and `rowSelectionChange`. **You must add the selection column in your markup:** a header cell with `type="checkbox"`, a body cell containing `xpl-checkbox` per row (aligned with that column), and matching `xpl-table-footer-cell` cells when you use a footer. Each body row should use `row-id` on `xpl-table-row` (or accept auto-generated ids) so `rowSelectionChange` can report `selectedRowIds`. The toolbar uses the same layout as `xpl-toolbar` and is visible only while at least one row is selected. Use `toolbar-actions-left` / `toolbar-actions-right` slots on this host for bulk actions. | `boolean` | `undefined` |
159
+ | `selectedValues` | -- | <span style="color:red">**[DEPRECATED]**</span> Legacy data-driven table API only. May be removed in a future major release. The values for the input for each row when multiselect is activated.<br/><br/> | `string[]` | `[]` |
160
+ | `sortableColumns` | -- | <span style="color:red">**[DEPRECATED]**</span> Use the compositional slot-based API instead. Will be removed in a future major release. Manually determined if the column is sortable.<br/><br/> | `boolean[]` | `[]` |
161
+ | `striped` | `striped` | Toggles an optional styling of the background of each even row of the table body. | `boolean` | `undefined` |
21
162
 
22
163
 
23
164
  ## Events
24
165
 
25
- | Event | Description | Type |
26
- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
27
- | `sortChanged` | Emits an event whenever the sort changes. The 'sortChanged' event passes an object with colNum (number), colName (string), sortTypeArr(('asc' \| 'desc' \| null)[]). The default action can be overridden by calling event.preventDefault(). | `CustomEvent<{ colNum: number; colName: string; sortTypeArr: ("desc" \| "asc")[]; }>` |
28
- | `tableSelect` | Callback function that is called when the checkbox for a row of a `multiselect` table is checked | `CustomEvent<any>` |
166
+ | Event | Description | Type |
167
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
168
+ | `rowOrderChange` | Emitted after body rows are reordered via drag-and-drop (compositional `row-reorderable` mode). | `CustomEvent<XplTableRowOrderChangeDetail>` |
169
+ | `rowSelectionChange` | Emitted when row selection changes in compositional `selectable` mode (`bubbles: false`, `composed: true`). Listen on this `xpl-table` instance only; the event does not bubble to parents—use `table.addEventListener('rowSelectionChange', …)` on the same element. When wiring from a script in static HTML, wait for `customElements.whenDefined('xpl-table')` so the host is ready. (Named `rowSelectionChange` to avoid clashing with the native `selectionchange` event.) | `CustomEvent<{ selectedRowIds: string[]; }>` |
170
+ | `sortChanged` | Emitted when sort changes in **legacy** or **compositional** mode. `event.detail` is a plain object: **sort-key slug → `'asc' \| 'desc' \| null`** (null = that column not sorted). Keys match legacy column titles (slugified) or compositional `sort-key` / label slugs. Call `event.preventDefault()` in legacy mode to skip built-in row sorting; compositional tables do not reorder rows automatically. | `CustomEvent<XplTableSortChangedDetail>` |
171
+ | `tableSelect` | Callback function that is called when the checkbox for a row of a `multiselect` table is checked. | `CustomEvent<any>` |
172
+
173
+
174
+ ## Slots
175
+
176
+ | Slot | Description |
177
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
178
+ | | `xpl-table-header`, `xpl-table-body`, and optional `xpl-table-footer`. |
179
+ | `"toolbar-actions-left"` | Bulk actions in the selection toolbar (left group). Only when `selectable` is set; the toolbar is shown only while at least one row is selected. |
180
+ | `"toolbar-actions-right"` | Bulk actions in the selection toolbar (right group). Same visibility as `toolbar-actions-left`. |
29
181
 
30
182
 
31
183
  ## Dependencies
32
184
 
33
185
  ### Depends on
34
186
 
35
- - [xpl-checkbox](../xpl-checkbox)
187
+ - [xpl-table-header-cell](xpl-table-header-cell)
188
+ - [xpl-table-cell](xpl-table-cell)
36
189
  - [xpl-icon](../xpl-icon)
190
+ - [xpl-table-footer-cell](xpl-table-footer-cell)
37
191
 
38
192
  ### Graph
39
193
  ```mermaid
40
194
  graph TD;
41
- xpl-table --> xpl-checkbox
195
+ xpl-table --> xpl-table-header-cell
196
+ xpl-table --> xpl-table-cell
42
197
  xpl-table --> xpl-icon
198
+ xpl-table --> xpl-table-footer-cell
199
+ xpl-table-header-cell --> xpl-icon
200
+ xpl-table-header-cell --> xpl-checkbox
43
201
  style xpl-table fill:#f9f,stroke:#333,stroke-width:4px
44
202
  ```
45
203
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  Row group for compositional table body content. Uses `display: contents` so slotted rows participate in the parent grid layout.
4
4
 
5
- ### Design Tokens
5
+ ## Design Tokens
6
6
 
7
- | Element | Property | Token | Value |
8
- | -- | -- | -- | -- |
9
- | Host | display | — | `contents` |
7
+ | Element | Property | Token | Light | Dark |
8
+ | ------- | -------- | ----- | ----- | ---- |
9
+ | Host | display | — | `contents` | `contents` |
10
10
 
11
11
  <!-- Auto Generated Below -->
12
12
 
@@ -0,0 +1,53 @@
1
+ # xpl-table-cell
2
+
3
+ Body cell for compositional [`xpl-table`](../readme.md). Place content in the default slot; use `align`, `bold`, and `underline` for typography. Interactive controls inside the cell inherit `disabled` when the parent [`xpl-table-row`](../xpl-table-row) is disabled.
4
+
5
+ ## Design Tokens
6
+
7
+ Extends `.xpl-table-cell-base` (`table-cell-base.css`); row states (selected, disabled, striped) are applied from `table-row.css`.
8
+
9
+ | Element | Property | Token | Light | Dark |
10
+ | ------- | -------- | ----- | ----- | ---- |
11
+ | Cell | background | `--xpl-background-surface-default` | neutral-0 | neutral-1000 |
12
+ | Cell | text | `--xpl-text-default` | neutral-900 | neutral-50 |
13
+ | Cell | border (right/bottom) | `--xpl-border-small`, `--xpl-border-default` | 1px, neutral-200 | 1px, neutral-800 |
14
+ | Cell | padding | `--xpl-space-10`, `--xpl-space-16` | 10px / 16px | 10px / 16px |
15
+ | Cell | min-height | `--xpl-size-350` | 56px | 56px |
16
+ | Cell | typography | `@extend .xpl-text-title-5` | title-5 / medium | title-5 / medium |
17
+ | Bold text | font-weight | `--xpl-font-weight-semibold` | 600 | 600 |
18
+ | Disabled | text | `--xpl-text-disabled` | neutral-400 | neutral-600 |
19
+ | Caption slot | text | `--xpl-text-subdued` | neutral-600 | neutral-400 |
20
+ | Icon | color | `--xpl-icon-default` | neutral-900 | neutral-50 |
21
+ | Reorder grip | color | `--xpl-icon-subtle` | neutral-600 | neutral-400 |
22
+ | Reorder grip focus | outline | `--xpl-border-focus` | purple-500 | purple-400 |
23
+ | Checkbox-only column | padding | `--xpl-space-16` + `--xpl-space-4` | 20px / 16px | 20px / 16px |
24
+
25
+ <!-- Auto Generated Below -->
26
+
27
+
28
+ ## Properties
29
+
30
+ | Property | Attribute | Description | Type | Default |
31
+ | ----------- | ----------- | ----------------------------------------------------------------------------------------------- | ------------------------------- | -------- |
32
+ | `align` | `align` | Horizontal text alignment within the cell. | `"center" \| "left" \| "right"` | `'left'` |
33
+ | `bold` | `bold` | Renders cell text in bold (--xpl-font-weight-semibold). | `boolean` | `false` |
34
+ | `disabled` | `disabled` | Whether the cell and its interactive children are disabled. Set automatically by xpl-table-row. | `boolean` | `false` |
35
+ | `underline` | `underline` | Adds an underline to cell text. | `boolean` | `false` |
36
+
37
+
38
+ ## Dependencies
39
+
40
+ ### Used by
41
+
42
+ - [xpl-table](..)
43
+
44
+ ### Graph
45
+ ```mermaid
46
+ graph TD;
47
+ xpl-table --> xpl-table-cell
48
+ style xpl-table-cell fill:#f9f,stroke:#333,stroke-width:4px
49
+ ```
50
+
51
+ ----------------------------------------------
52
+
53
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -2,11 +2,11 @@
2
2
 
3
3
  Row group for compositional table footer content. Uses `display: contents` so slotted footer rows participate in the parent grid layout.
4
4
 
5
- ### Design Tokens
5
+ ## Design Tokens
6
6
 
7
- | Element | Property | Token | Value |
8
- | -- | -- | -- | -- |
9
- | Host | display | — | `contents` |
7
+ | Element | Property | Token | Light | Dark |
8
+ | ------- | -------- | ----- | ----- | ---- |
9
+ | Host | display | — | `contents` | `contents` |
10
10
 
11
11
  <!-- Auto Generated Below -->
12
12
 
@@ -1,20 +1,16 @@
1
1
  # xpl-table-footer-cell
2
2
 
3
- Footer cell for compositional tables. Extends the shared `.xpl-table-cell-base` styles with a strong top border.
4
-
5
- ### Design Tokens
6
-
7
- | Element | Property | Token | Value |
8
- | -- | -- | -- | -- |
9
- | Cell | extends | `.xpl-table-cell-base` | (shared compositional cell base) |
10
- | Cell | background | `--xpl-background-surface-default` | neutral-0 (lm) / neutral-900 (dm) |
11
- | Cell | text | `--xpl-text-default` | neutral-900 (lm) / neutral-50 (dm) |
12
- | Cell | border (right/bottom) | `--xpl-border-small`, `--xpl-border-default` | 1px, neutral-200 |
13
- | Footer row border | border-top | `--xpl-border-large`, `--xpl-border-strong` | 2px, neutral-300 |
14
- | Cell | height | `--xpl-size-350` | 56px |
15
- | Cell | min-width | `--xpl-size-300` | 48px |
16
- | Cell | padding | `--xpl-space-16` | 16px |
17
- | Cell | typography | `@extend .xpl-text-title-5` | title-5 / medium |
3
+ Footer cell for compositional tables. Extends the shared `.xpl-table-cell-base` styles with footer-row border rules from `table.css`.
4
+
5
+ ## Design Tokens
6
+
7
+ | Element | Property | Token | Light | Dark |
8
+ | ------- | -------- | ----- | ----- | ---- |
9
+ | Cell | extends | `.xpl-table-cell-base` | (shared compositional cell base) | (shared compositional cell base) |
10
+ | Cell | background | `--xpl-background-surface-default` | neutral-0 | neutral-1000 |
11
+ | Cell | text | `--xpl-text-default` | neutral-900 | neutral-50 |
12
+ | Cell | border (right/bottom) | `--xpl-border-small`, `--xpl-border-default` | 1px, neutral-200 | 1px, neutral-800 |
13
+ | Last footer row | border-bottom | none (host draws frame) | — | — |
18
14
 
19
15
  <!-- Auto Generated Below -->
20
16
 
@@ -26,6 +22,19 @@ Footer cell for compositional tables. Extends the shared `.xpl-table-cell-base`
26
22
  | `align` | `align` | Horizontal alignment of footer cell content. | `"center" \| "left" \| "right"` | `'left'` |
27
23
 
28
24
 
25
+ ## Dependencies
26
+
27
+ ### Used by
28
+
29
+ - [xpl-table](..)
30
+
31
+ ### Graph
32
+ ```mermaid
33
+ graph TD;
34
+ xpl-table --> xpl-table-footer-cell
35
+ style xpl-table-footer-cell fill:#f9f,stroke:#333,stroke-width:4px
36
+ ```
37
+
29
38
  ----------------------------------------------
30
39
 
31
40
  *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,84 @@
1
+ # xpl-table-header-cell
2
+
3
+ > **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
4
+
5
+ The `icon` property accepts icon names as strings. See [xpl-icon available icons](../xpl-icon/ICONS.md) for the complete list.
6
+
7
+ When this cell is used inside a compositional [`xpl-table`](../xpl-table) with `selectable`, **you** add a `type="checkbox"` header cell for select-all; `xpl-table` keeps `checked` and `indeterminate` in sync with row selection.
8
+
9
+ **Frameworks (Vue / etc.):** `type` is **reflected** to the DOM. You may bind with `:type="'checkbox'"` or `type="checkbox"`; the host will still expose `type="checkbox"` as an attribute so the table’s selection column logic and styles stay correct.
10
+
11
+ For **sortable** columns (`type="label"`), set **`sortable`** and optionally **`sort-key`**; the parent table emits **`sortChanged`** (see [`xpl-table` events](../xpl-table#events)).
12
+
13
+ **Column width (compositional grid):** Each header cell defines one grid column on the parent `xpl-table`. By default the track is **`auto`** (sizes from content). Set **`width`** for a fixed pixel width (minimum 48px), or **`column-width`** for any CSS grid track string (`1fr`, `minmax(120px, 1fr)`, etc.). When both are set, **`column-width` wins**.
14
+
15
+ ## Design Tokens
16
+
17
+ | Element | Property | Token | Light | Dark |
18
+ | ------- | -------- | ----- | ----- | ---- |
19
+ | Cell | background | `--xpl-background-surface-subtlest` | neutral-50 | neutral-950 |
20
+ | Cell | text | `--xpl-text-subdued` | neutral-600 | neutral-400 |
21
+ | Cell | border (right/bottom) | `--xpl-border-small`, `--xpl-border-default` | 1px, neutral-200 | 1px, neutral-800 |
22
+ | Cell | min-width | `--xpl-size-300` | 48px | 48px |
23
+ | Cell | min-height | `--xpl-size-350` | 56px | 56px |
24
+ | Cell | typography | `@extend .xpl-text-title-5` | title-5 / medium | title-5 / medium |
25
+ | Sort button | padding | `--xpl-space-12`, `--xpl-space-16` | 12px / 16px | 12px / 16px |
26
+ | Sort button focus | outline | `--xpl-border-focus` | purple-500 | purple-400 |
27
+ | Sort icon (default) | color | `--xpl-text-subdued` | neutral-600 | neutral-400 |
28
+ | Sort icon (active) | color | `--xpl-icon-information` | blue-500 | blue-400 |
29
+ | Checkbox column | padding | `--xpl-space-16` + `--xpl-space-4` | 20px / 16px | 20px / 16px |
30
+
31
+ ---
32
+
33
+ <!-- Auto Generated Below -->
34
+
35
+
36
+ ## Properties
37
+
38
+ | Property | Attribute | Description | Type | Default |
39
+ | ------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ----------- |
40
+ | `align` | `align` | Horizontal text alignment within the header cell. | `"center" \| "left" \| "right"` | `'left'` |
41
+ | `checkboxAriaLabel` | `checkbox-aria-label` | Accessible name for the header checkbox (native `aria-label`). Defaults to “Select all rows” when `type` is `checkbox`. | `string` | `undefined` |
42
+ | `checked` | `checked` | Whether the header checkbox is checked | `boolean` | `false` |
43
+ | `columnWidth` | `column-width` | CSS grid track size for this column (e.g. `1fr`, `minmax(120px, 1fr)`, `auto`). When set, overrides `width`. Use this when you need flexible columns; default layout uses `auto` per column unless you set a track here. | `string` | `undefined` |
44
+ | `icon` | `icon` | Icon to display in the cell. See [xpl-icon available icons](../xpl-icon/ICONS.md) for valid icon names. | `string` | `undefined` |
45
+ | `indeterminate` | `indeterminate` | Whether the checkbox is in indeterminate (partially selected) state | `boolean` | `false` |
46
+ | `label` | `label` | Text to display in the cell. | `string` | `''` |
47
+ | `sortDirection` | `sort-direction` | Active sort direction for this column when `sortable`. Set by `xpl-table` when used inside a compositional table; may be set by the app for controlled updates. | `"asc" \| "desc"` | `undefined` |
48
+ | `sortKey` | `sort-key` | When `sortable` is true, optional stable id used as the key in `sortChanged`’s detail object. Falls back to a slug of `label` when omitted. | `string` | `undefined` |
49
+ | `sortable` | `sortable` | When true (and `type` is `label`), renders a sort control (button + affordance icon). | `boolean` | `false` |
50
+ | `type` | `type` | The type of cell to render. **Reflected** to the host `type` attribute so `xpl-table` (and CSS `[type="checkbox"]`) can find the selection column after frameworks set the prop without syncing the attribute (e.g. Vue `:type="'checkbox'"`). | `"checkbox" \| "empty" \| "icon" \| "label"` | `'label'` |
51
+ | `width` | `width` | Fixed width for this column in pixels (minimum 48px). Sets the grid track to `Npx`. Ignored when `columnWidth` is set. When omitted, the column track defaults to `auto` (content-sized). | `number` | `undefined` |
52
+
53
+
54
+ ## Events
55
+
56
+ | Event | Description | Type |
57
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
58
+ | `headerCheckboxChange` | Emitted when header checkbox changes | `CustomEvent<boolean>` |
59
+ | `headerSortChange` | Emitted when a sortable label header is activated. Parent `xpl-table` coordinates columns and emits `sortChanged`. | `CustomEvent<HeaderSortChangeDetail>` |
60
+
61
+
62
+ ## Dependencies
63
+
64
+ ### Used by
65
+
66
+ - [xpl-table](..)
67
+
68
+ ### Depends on
69
+
70
+ - [xpl-icon](../../xpl-icon)
71
+ - [xpl-checkbox](../../xpl-checkbox)
72
+
73
+ ### Graph
74
+ ```mermaid
75
+ graph TD;
76
+ xpl-table-header-cell --> xpl-icon
77
+ xpl-table-header-cell --> xpl-checkbox
78
+ xpl-table --> xpl-table-header-cell
79
+ style xpl-table-header-cell fill:#f9f,stroke:#333,stroke-width:4px
80
+ ```
81
+
82
+ ----------------------------------------------
83
+
84
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -2,20 +2,24 @@
2
2
 
3
3
  Data row for compositional tables. Uses `display: contents` by default so cells align to the parent grid; when the body supports subgrid, the row becomes a full-width subgrid for drag interactions.
4
4
 
5
- ### Design Tokens
6
-
7
- | Element | Property | Token | Value |
8
- | -- | -- | -- | -- |
9
- | Host (default) | display | — | `contents` |
10
- | Host (subgrid body) | display | — | `grid` with `subgrid` |
11
- | Disabled row | background | `--xpl-background-surface-subtlest` | neutral-50 (lm) / neutral-950 (dm) |
12
- | Disabled row | text | `--xpl-text-disabled` | neutral-400 (lm) / neutral-600 (dm) |
13
- | Dragging row | background | `--xpl-background-surface-subtle` | neutral-100 (lm) / neutral-900 (dm) |
14
- | Dragging row | opacity | `--xpl-opacity-75` | 0.75 (custom, mirrors xpl-list) |
15
- | Selected row | background | `--xpl-background-surface-information` | blue-50 (lm) / blue-950 (dm) |
16
- | Drag-over outline | color | `--xpl-border-focus` | purple-500 |
17
- | Striped even | background | `--xpl-background-surface-subtlest` | neutral-50 (lm) / neutral-950 (dm) |
18
- | Striped selected | background | `--xpl-background-surface-information-bold` | blue-100 (lm) / blue-900 (dm) |
5
+ ## Design Tokens
6
+
7
+ Row state styles target descendant `.xpl-table-cell` nodes (see `table-row.css`).
8
+
9
+ | Element | Property | Token | Light | Dark |
10
+ | ------- | -------- | ----- | ----- | ---- |
11
+ | Host (default) | display | — | `contents` | `contents` |
12
+ | Host (subgrid body) | display | — | `grid` with `subgrid` | `grid` with `subgrid` |
13
+ | Disabled row | background | `--xpl-background-surface-subtlest` | neutral-50 | neutral-950 |
14
+ | Disabled row | text | `--xpl-text-disabled` | neutral-400 | neutral-600 |
15
+ | Dragging row | background | `--xpl-background-surface-subtle` | neutral-100 | neutral-900 |
16
+ | Dragging row | opacity | `--xpl-opacity-75` | 0.75 | 0.75 |
17
+ | Selected row | background | `--xpl-background-surface-information` | blue-50 | blue-950 |
18
+ | Selected grip (reorder) | icon color | `--xpl-icon-information` | blue-500 | blue-400 |
19
+ | Drag-over outline | inset ring | `--xpl-border-focus`, `--xpl-border-small` | purple-500 | purple-400 |
20
+ | Striped even | background | `--xpl-background-surface-subtlest` | neutral-50 | neutral-950 |
21
+ | Striped selected | background | `--xpl-background-surface-information-bold` | blue-100 | blue-900 |
22
+ | Keyboard reorder grip | outline | `--xpl-border-focus` | purple-500 | purple-400 |
19
23
 
20
24
  <!-- Auto Generated Below -->
21
25
 
@@ -126,7 +126,7 @@ The mobile breakpoint (≤ 768px) resets the toast to bottom-center. If your app
126
126
  | `&__icon--warning` | color | `--xpl-icon-negative` |
127
127
  | `&__icon--success` | color | `--xpl-icon-positive` |
128
128
  | `&` | body radius | `--xpl-border-radius-small` |
129
- | `&` | shadow color | `--xpl-color-transparent-neutral-10` / `--xpl-color-transparent-neutral-5` |
129
+ | `&` | shadow | `--xpl-elevation-3` (theme-aware) |
130
130
  | `&__title` | typography (size / weight / line-height) | `@extend .xpl-text-title-5` → `title-5` / `medium` / `1.4286` |
131
131
  | `&__caption` | typography (size / weight / line-height) | `@extend .xpl-text-callout` → `callout` / `normal` / `1.3333` |
132
132
  | `&__close` | margin | `@apply ml-4` |
@@ -142,7 +142,7 @@ Like `xpl-banner`, the messaging backgrounds resolve to transparent in dark mode
142
142
  - Toast content is projected through the `title` and `action` slots. Provide the title as text (e.g. `<p slot="title">`) so screen readers announce the message.
143
143
  - Dismissing runs a fade-out animation and then removes the host element from the DOM, so a dismissed toast leaves nothing behind in the accessibility tree.
144
144
 
145
- > **Elevation shadow (interim):** Figma specs the toast shadow as the single "Shadow 4" elevation style (`y=20`, `blur=25`, color `background-surface-transparent-10`). Foundation has no elevation/shadow tokens yet, so the shadow geometry is hand-authored and its color uses the primitive `--xpl-color-transparent-neutral-10 / -5`. This migrates to the purpose-specific `--xpl-background-surface-transparent-10` (theme-aware) once elevation tokens land — tracked in `TECH_DEBT.md`.
145
+ > **Elevation shadow:** the toast uses `--xpl-elevation-3` (theme-aware), re-specified by design during the elevation 1–4 formalization — an earlier note citing the single "Shadow 4" style was superseded. See `TECH_DEBT.md`.
146
146
 
147
147
  <!-- Auto Generated Below -->
148
148
 
@@ -24,7 +24,7 @@ in light and dark mode (no `.dark` overrides).
24
24
  | Track (disabled, on/off) | `background-color` | `--xpl-background-action-disabled` |
25
25
  | Track border | `border-color` | `--xpl-border-default` |
26
26
  | Knob (all states) | `background-color` | `--xpl-background-surface-inverse-on-dark` (always-light — resolves to neutral-0 in both modes) |
27
- | Knob shadow | `box-shadow` color | `--xpl-color-transparent-neutral-10` |
27
+ | Knob shadow | `box-shadow` | `--xpl-elevation-1` (theme-aware) |
28
28
  | Focus ring | `outline-color` | `--xpl-border-focus` (2px outline, 2px offset) |
29
29
  | Heading | `color` | `--xpl-text-strong` |
30
30
  | Heading | typography | `@extend .xpl-text-title-5` — 14px / medium / 1.4286 (via shared `label.css`) |
@@ -12,15 +12,17 @@ in both light and dark themes. Styling comes from Apollo Foundation tokens
12
12
  | --- | --- | --- | --- |
13
13
  | `.toolbar` surface | `background-color` | `--xpl-background-surface-inverse-on-light` | neutral-1000 / neutral-1000 |
14
14
  | `.toolbar` top/bottom border | `border-color` | `--xpl-border-default` | neutral-600 (always-dark host) |
15
- | `.toolbar` elevation | `box-shadow` | `--xpl-color-transparent-neutral-10`, `--xpl-color-transparent-neutral-5` | fixed neutral transparent |
15
+ | `.toolbar` elevation | `box-shadow` | `--xpl-elevation-1` | theme-aware (near-black light / near-white dark) |
16
16
  | `.toolbar` height | `height` | `--xpl-size-350` | 56px |
17
17
  | `.selected-item-count` text | `color` | `--xpl-text-inverse-on-dark` | white / white |
18
18
  | `.selected-item-count` divider | `border-color` | `--xpl-border-default` | neutral-600 (always-dark host) |
19
19
  | `.selected-item-count` label | `font-size` / `font-weight` / `line-height` | `@extend .xpl-text-title-5` (14px, medium, 1.4286) | — |
20
20
 
21
21
  > **Design note:** the always-dark surface decision is confirmed (there is no
22
- > toolbar node in `figma-manifest.json`). Foundation defines no shadow tokens, so the
23
- > elevation uses the neutral transparent primitives. See `TECH_DEBT.md`.
22
+ > toolbar node in `figma-manifest.json`). The elevation uses the theme-aware
23
+ > `--xpl-elevation-1` token: in dark mode the shadow color flips to near-white, so
24
+ > the always-dark bar gets a light halo beneath it — flagged for design verification
25
+ > (see `TECH_DEBT.md`).
24
26
 
25
27
  <!-- Auto Generated Below -->
26
28
 
@@ -12,8 +12,7 @@ Tokens used by this component from `@xplortech/apollo-foundation`.
12
12
 
13
13
  **Color**
14
14
  - `--xpl-background-surface-default` — tooltip background and arrow fill
15
- - `--xpl-background-surface-transparent-10` — shadow primary layer
16
- - `--xpl-background-surface-transparent-5` — shadow secondary layer
15
+ - `--xpl-elevation-3` — tooltip shadow (theme-aware)
17
16
  - `--xpl-text-default` — tooltip text color
18
17
  - `--xpl-border-default` — tooltip border and arrow stroke (keeps the arrow edge theme-aware in dark mode)
19
18