@xplortech/apollo-core 2.6.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 (362) hide show
  1. package/.typings/apollo-components.html-data.json +737 -63
  2. package/build/style.css +5415 -1805
  3. package/dist/apollo-core/apollo-core.css +62 -22
  4. package/dist/apollo-core/apollo-core.esm.js +1 -1
  5. package/dist/apollo-core/{p-8a1affce.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-42016063.entry.js → p-28d12fd3.entry.js} +1 -1
  9. package/dist/apollo-core/p-3eb5eb7c.entry.js +1 -0
  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-02167464.entry.js → p-7eb86c63.entry.js} +1 -1
  15. package/dist/apollo-core/{p-1fd3dc87.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-C_Z2nG0p.js → p-C7bgJs6C.js} +2 -2
  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-DH6pgWru.js → index-BQ97-AWw.js} +18 -15
  22. package/dist/cjs/loader.cjs.js +2 -2
  23. package/dist/cjs/xpl-accordion.cjs.entry.js +3 -3
  24. package/dist/cjs/xpl-application-shell.cjs.entry.js +2 -2
  25. package/dist/cjs/{xpl-avatar_47.cjs.entry.js → xpl-avatar_61.cjs.entry.js} +6096 -1461
  26. package/dist/cjs/xpl-button-row.cjs.entry.js +2 -2
  27. package/dist/cjs/xpl-calendar.cjs.entry.js +2 -2
  28. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +3 -3
  29. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +3 -3
  30. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
  31. package/dist/cjs/xpl-grid-item.cjs.entry.js +2 -2
  32. package/dist/cjs/xpl-grid.cjs.entry.js +2 -2
  33. package/dist/cjs/xpl-large-card.cjs.entry.js +2 -2
  34. package/dist/cjs/xpl-main-nav.cjs.entry.js +2 -2
  35. package/dist/cjs/xpl-toggle.cjs.entry.js +4 -4
  36. package/dist/cjs/xpl-toolbar.cjs.entry.js +3 -3
  37. package/dist/collection/collection-manifest.json +18 -7
  38. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  39. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  40. package/dist/collection/components/xpl-avatar/avatar.stories.js +122 -107
  41. package/dist/collection/components/xpl-avatar/xpl-avatar.js +249 -15
  42. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  43. package/dist/collection/components/xpl-badge/badge.stories.js +1 -33
  44. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  45. package/dist/collection/components/xpl-banner/xpl-banner.js +4 -3
  46. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  47. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  48. package/dist/collection/components/xpl-button/xpl-button.js +21 -3
  49. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  50. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  51. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +47 -25
  52. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  53. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  54. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  55. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  56. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  57. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  58. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  59. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  60. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +2 -2
  61. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +1 -1
  62. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  63. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  64. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  65. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  66. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +46 -53
  67. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  68. package/dist/collection/components/xpl-input/input.stories.js +96 -1
  69. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  70. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  71. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  72. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  73. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +485 -0
  74. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  75. package/dist/collection/components/xpl-input/xpl-input.js +130 -18
  76. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  77. package/dist/collection/components/xpl-list/list.stories.js +300 -63
  78. package/dist/collection/components/xpl-list/xpl-list-item/xpl-list-item.js +818 -0
  79. package/dist/collection/components/xpl-list/xpl-list.js +579 -21
  80. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  81. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  82. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  83. package/dist/collection/components/xpl-pagination/xpl-pagination.js +3 -3
  84. package/dist/collection/components/xpl-panel/panel.stories.js +5 -3
  85. package/dist/collection/components/xpl-panel/xpl-panel.js +3 -3
  86. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  87. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  88. package/dist/collection/components/xpl-progress-indicator/progress-indicator.stories.js +118 -0
  89. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +171 -0
  90. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  91. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  92. package/dist/collection/components/xpl-select/xpl-select.js +6 -6
  93. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  94. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  95. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  96. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  97. package/dist/collection/components/xpl-spotlight/spotlight.stories.js +385 -0
  98. package/dist/collection/components/xpl-spotlight/xpl-spotlight.js +1085 -0
  99. package/dist/collection/components/xpl-tab/xpl-tab.js +261 -8
  100. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +22 -15
  101. package/dist/collection/components/xpl-table/table.stories.js +319 -67
  102. package/dist/collection/components/xpl-table/utils/move-row-dom.js +50 -0
  103. package/dist/collection/components/xpl-table/utils/table-internal.js +58 -0
  104. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +7 -0
  105. package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +155 -0
  106. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +7 -0
  107. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +37 -0
  108. package/dist/collection/components/xpl-table/xpl-table-header/table-header.stories.js +131 -0
  109. package/dist/collection/components/xpl-table/xpl-table-header/xpl-table-header.js +7 -0
  110. package/dist/collection/components/xpl-table/xpl-table-header-cell/table-header-cell.stories.js +105 -0
  111. package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +402 -0
  112. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +121 -0
  113. package/dist/collection/components/xpl-table/xpl-table.js +1448 -143
  114. package/dist/collection/components/xpl-tabs/segment-control.stories.js +31 -0
  115. package/dist/collection/components/xpl-tabs/tabs.shared.js +156 -0
  116. package/dist/collection/components/xpl-tabs/tabs.stories.js +10 -60
  117. package/dist/collection/components/xpl-tabs/xpl-tabs.js +338 -62
  118. package/dist/collection/components/xpl-tag/tag.stories.js +153 -0
  119. package/dist/collection/components/xpl-tag/xpl-tag.js +312 -9
  120. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  121. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  122. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  123. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  124. package/dist/collection/components/xpl-top-nav/top-nav.stories.js +625 -0
  125. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +122 -0
  126. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +481 -0
  127. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +433 -0
  128. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  129. package/dist/collection/utils/lifecycle.js +79 -0
  130. package/dist/collection/utils/tab-a11y-ids.js +22 -0
  131. package/dist/components/floating-ui.dom.js +1 -0
  132. package/dist/components/index.js +1 -1
  133. package/dist/components/lifecycle.js +1 -0
  134. package/dist/components/tab-a11y-ids.js +1 -0
  135. package/dist/components/xpl-accordion.js +1 -1
  136. package/dist/components/xpl-application-shell.js +1 -1
  137. package/dist/components/xpl-avatar2.js +1 -1
  138. package/dist/components/xpl-backdrop2.js +1 -1
  139. package/dist/components/xpl-badge2.js +1 -1
  140. package/dist/components/xpl-banner.js +1 -1
  141. package/dist/components/xpl-breadcrumb-item.js +1 -1
  142. package/dist/components/xpl-breadcrumbs.js +1 -1
  143. package/dist/components/xpl-button-row.js +1 -1
  144. package/dist/components/xpl-button2.js +1 -1
  145. package/dist/components/xpl-calendar.js +1 -1
  146. package/dist/components/xpl-checkbox2.js +1 -1
  147. package/dist/components/xpl-choicelist.js +1 -1
  148. package/dist/components/xpl-content-area.js +1 -1
  149. package/dist/components/xpl-dashboard.js +1 -1
  150. package/dist/components/xpl-data-card.js +1 -1
  151. package/dist/components/xpl-divider2.js +1 -1
  152. package/dist/components/xpl-dropdown-group2.js +1 -1
  153. package/dist/components/xpl-dropdown-heading2.js +1 -1
  154. package/dist/components/xpl-dropdown-option2.js +1 -1
  155. package/dist/components/xpl-dropdown2.js +1 -1
  156. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  157. package/dist/components/xpl-dynamic-table-row.js +1 -1
  158. package/dist/components/xpl-dynamic-table.js +1 -1
  159. package/dist/components/xpl-grid-item.js +1 -1
  160. package/dist/components/xpl-grid.js +1 -1
  161. package/dist/components/xpl-header-accordion.js +1 -1
  162. package/dist/components/xpl-icon2.js +1 -1
  163. package/dist/components/xpl-input-date2.js +1 -1
  164. package/dist/components/xpl-input-file2.js +1 -1
  165. package/dist/components/xpl-input-search.d.ts +11 -0
  166. package/dist/components/xpl-input-search.js +1 -0
  167. package/dist/components/xpl-input-search2.js +1 -0
  168. package/dist/components/xpl-input2.js +1 -1
  169. package/dist/components/xpl-large-card.js +1 -1
  170. package/dist/components/{xpl-progress.d.ts → xpl-list-item.d.ts} +4 -4
  171. package/dist/components/xpl-list-item.js +1 -0
  172. package/dist/components/xpl-list-item2.js +1 -0
  173. package/dist/components/xpl-list.js +1 -1
  174. package/dist/components/xpl-main-nav.js +1 -1
  175. package/dist/components/xpl-modal.js +1 -1
  176. package/dist/components/xpl-nav-header-menu.d.ts +11 -0
  177. package/dist/components/xpl-nav-header-menu.js +1 -0
  178. package/dist/components/xpl-nav-item.js +1 -1
  179. package/dist/components/xpl-pagination.js +1 -1
  180. package/dist/components/xpl-panel.js +1 -1
  181. package/dist/components/xpl-popover2.js +1 -1
  182. package/dist/components/xpl-progress-bar.js +1 -1
  183. package/dist/components/xpl-progress-indicator.d.ts +11 -0
  184. package/dist/components/xpl-progress-indicator.js +1 -0
  185. package/dist/components/xpl-radio2.js +1 -1
  186. package/dist/components/xpl-secondary-nav.js +1 -1
  187. package/dist/components/xpl-select2.js +1 -1
  188. package/dist/components/xpl-side-nav-item.js +1 -1
  189. package/dist/components/xpl-side-nav.js +1 -1
  190. package/dist/components/xpl-skeleton.js +1 -1
  191. package/dist/components/xpl-slideout.js +1 -1
  192. package/dist/components/xpl-spotlight.d.ts +11 -0
  193. package/dist/components/xpl-spotlight.js +1 -0
  194. package/dist/components/xpl-tab-panel.js +1 -1
  195. package/dist/components/xpl-tab.js +1 -1
  196. package/dist/components/xpl-table-body.d.ts +11 -0
  197. package/dist/components/xpl-table-body.js +1 -0
  198. package/dist/components/xpl-table-cell.d.ts +11 -0
  199. package/dist/components/xpl-table-cell.js +1 -0
  200. package/dist/components/xpl-table-cell2.js +1 -0
  201. package/dist/components/xpl-table-footer-cell.d.ts +11 -0
  202. package/dist/components/xpl-table-footer-cell.js +1 -0
  203. package/dist/components/xpl-table-footer-cell2.js +1 -0
  204. package/dist/components/xpl-table-footer.d.ts +11 -0
  205. package/dist/components/xpl-table-footer.js +1 -0
  206. package/dist/components/xpl-table-header-cell.js +1 -1
  207. package/dist/components/xpl-table-header-cell2.js +1 -0
  208. package/dist/components/xpl-table-header.js +1 -1
  209. package/dist/components/xpl-table-row.d.ts +11 -0
  210. package/dist/components/xpl-table-row.js +1 -0
  211. package/dist/components/xpl-table.js +1 -1
  212. package/dist/components/xpl-tabs.js +1 -1
  213. package/dist/components/xpl-tag2.js +1 -1
  214. package/dist/components/xpl-toast.js +1 -1
  215. package/dist/components/xpl-toggle.js +1 -1
  216. package/dist/components/xpl-toolbar.js +1 -1
  217. package/dist/components/xpl-tooltip2.js +1 -1
  218. package/dist/components/xpl-top-nav-item.d.ts +11 -0
  219. package/dist/components/xpl-top-nav-item.js +1 -0
  220. package/dist/components/xpl-top-nav-item2.js +1 -0
  221. package/dist/components/xpl-top-nav.d.ts +11 -0
  222. package/dist/components/xpl-top-nav.js +1 -0
  223. package/dist/components/xpl-utility-bar.js +1 -1
  224. package/dist/docs/xpl-avatar/readme.md +289 -15
  225. package/dist/docs/xpl-badge/readme.md +14 -9
  226. package/dist/docs/xpl-banner/readme.md +48 -11
  227. package/dist/docs/xpl-button/readme.md +28 -18
  228. package/dist/docs/xpl-calendar/readme.md +1 -1
  229. package/dist/docs/xpl-checkbox/readme.md +19 -16
  230. package/dist/docs/xpl-divider/readme.md +6 -4
  231. package/dist/docs/xpl-dropdown/readme.md +1 -1
  232. package/dist/docs/xpl-dynamic-table/readme.md +22 -19
  233. package/dist/docs/xpl-dynamic-table-cell/readme.md +20 -18
  234. package/dist/docs/xpl-dynamic-table-row/readme.md +21 -19
  235. package/dist/docs/xpl-icon/readme.md +15 -3
  236. package/dist/docs/xpl-input/readme.md +66 -41
  237. package/dist/docs/xpl-input/xpl-input-color/readme.md +1 -0
  238. package/dist/docs/xpl-input/xpl-input-phone/readme.md +1 -0
  239. package/dist/docs/xpl-input/xpl-input-search/readme.md +175 -0
  240. package/dist/docs/xpl-input/xpl-input-time/readme.md +1 -0
  241. package/dist/docs/xpl-list/readme.md +320 -10
  242. package/dist/docs/xpl-list/xpl-list-item/readme.md +99 -0
  243. package/dist/docs/xpl-pagination/readme.md +1 -0
  244. package/dist/docs/xpl-panel/readme.md +108 -17
  245. package/dist/docs/xpl-popover/readme.md +2 -0
  246. package/dist/docs/xpl-progress-indicator/readme.md +234 -0
  247. package/dist/docs/xpl-radio/readme.md +6 -4
  248. package/dist/docs/xpl-select/readme.md +2 -1
  249. package/dist/docs/xpl-side-nav/readme.md +2 -2
  250. package/dist/docs/xpl-slideout/readme.md +1 -1
  251. package/dist/docs/xpl-spotlight/readme.md +235 -0
  252. package/dist/docs/xpl-tab/readme.md +43 -7
  253. package/dist/docs/xpl-tab-panel/readme.md +42 -0
  254. package/dist/docs/xpl-table/readme.md +110 -46
  255. package/dist/docs/xpl-table/xpl-table-body/readme.md +10 -0
  256. package/dist/docs/xpl-table/xpl-table-cell/readme.md +33 -0
  257. package/dist/docs/xpl-table/xpl-table-footer/readme.md +10 -0
  258. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +30 -0
  259. package/dist/docs/{xpl-table-header → xpl-table/xpl-table-header}/readme.md +13 -13
  260. package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +66 -0
  261. package/dist/docs/xpl-table/xpl-table-row/readme.md +19 -0
  262. package/dist/docs/xpl-tabs/readme.md +62 -8
  263. package/dist/docs/xpl-tag/readme.md +379 -4
  264. package/dist/docs/xpl-toast/readme.md +1 -1
  265. package/dist/docs/xpl-top-nav/readme.md +179 -0
  266. package/dist/docs/xpl-top-nav/xpl-nav-header-menu/readme.md +81 -0
  267. package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +87 -0
  268. package/dist/esm/apollo-core.js +4 -4
  269. package/dist/esm/{index-C_Z2nG0p.js → index-C7bgJs6C.js} +18 -16
  270. package/dist/esm/loader.js +3 -3
  271. package/dist/esm/xpl-accordion.entry.js +3 -3
  272. package/dist/esm/xpl-application-shell.entry.js +2 -2
  273. package/dist/esm/{xpl-avatar_47.entry.js → xpl-avatar_61.entry.js} +6082 -1461
  274. package/dist/esm/xpl-button-row.entry.js +2 -2
  275. package/dist/esm/xpl-calendar.entry.js +2 -2
  276. package/dist/esm/xpl-dynamic-table-cell.entry.js +3 -3
  277. package/dist/esm/xpl-dynamic-table-row.entry.js +3 -3
  278. package/dist/esm/xpl-dynamic-table.entry.js +2 -2
  279. package/dist/esm/xpl-grid-item.entry.js +2 -2
  280. package/dist/esm/xpl-grid.entry.js +2 -2
  281. package/dist/esm/xpl-large-card.entry.js +2 -2
  282. package/dist/esm/xpl-main-nav.entry.js +2 -2
  283. package/dist/esm/xpl-toggle.entry.js +4 -4
  284. package/dist/esm/xpl-toolbar.entry.js +3 -3
  285. package/dist/types/components/xpl-avatar/avatar.stories.d.ts +88 -29
  286. package/dist/types/components/xpl-avatar/xpl-avatar.d.ts +29 -2
  287. package/dist/types/components/xpl-badge/badge.stories.d.ts +0 -19
  288. package/dist/types/components/xpl-button/xpl-button.d.ts +7 -0
  289. package/dist/types/components/xpl-checkbox/xpl-checkbox.d.ts +4 -3
  290. package/dist/types/components/xpl-header-accordion/xpl-header-accordion.d.ts +9 -10
  291. package/dist/types/components/xpl-input/input.stories.d.ts +1 -0
  292. package/dist/types/components/xpl-input/xpl-input-search/xpl-input-search.d.ts +39 -0
  293. package/dist/types/components/xpl-input/xpl-input.d.ts +13 -5
  294. package/dist/types/components/xpl-list/list.stories.d.ts +299 -13
  295. package/dist/types/components/xpl-list/listitem.d.ts +13 -0
  296. package/dist/types/components/xpl-list/xpl-list-item/xpl-list-item.d.ts +71 -0
  297. package/dist/types/components/xpl-list/xpl-list.d.ts +55 -2
  298. package/dist/types/components/xpl-panel/panel.stories.d.ts +2 -0
  299. package/dist/types/components/xpl-progress-indicator/progress-indicator.stories.d.ts +62 -0
  300. package/dist/types/components/xpl-progress-indicator/xpl-progress-indicator.d.ts +11 -0
  301. package/dist/types/components/xpl-spotlight/spotlight.stories.d.ts +197 -0
  302. package/dist/types/components/xpl-spotlight/xpl-spotlight.d.ts +101 -0
  303. package/dist/types/components/xpl-tab/xpl-tab.d.ts +14 -1
  304. package/dist/types/components/xpl-tab-panel/xpl-tab-panel.d.ts +2 -1
  305. package/dist/types/components/xpl-table/table.stories.d.ts +161 -19
  306. package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +3 -0
  307. package/dist/types/components/xpl-table/utils/table-internal.d.ts +8 -0
  308. package/dist/types/components/xpl-table/xpl-table-body/xpl-table-body.d.ts +3 -0
  309. package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +11 -0
  310. package/dist/types/components/xpl-table/xpl-table-footer/xpl-table-footer.d.ts +3 -0
  311. package/dist/types/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.d.ts +4 -0
  312. package/dist/types/components/{xpl-table-header → xpl-table/xpl-table-header}/table-header.stories.d.ts +13 -16
  313. package/dist/types/components/{xpl-table-header-cell → xpl-table/xpl-table-header-cell}/table-header-cell.stories.d.ts +24 -20
  314. package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +32 -0
  315. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +13 -0
  316. package/dist/types/components/xpl-table/xpl-table.d.ts +123 -21
  317. package/dist/types/components/xpl-tabs/segment-control.stories.d.ts +112 -0
  318. package/dist/types/components/xpl-tabs/tabs.shared.d.ts +156 -0
  319. package/dist/types/components/xpl-tabs/tabs.stories.d.ts +65 -12
  320. package/dist/types/components/xpl-tabs/xpl-tabs.d.ts +37 -18
  321. package/dist/types/components/xpl-tag/tag.stories.d.ts +65 -0
  322. package/dist/types/components/xpl-tag/xpl-tag.d.ts +36 -1
  323. package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +471 -0
  324. package/dist/types/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.d.ts +18 -0
  325. package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +48 -0
  326. package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +51 -0
  327. package/dist/types/components.d.ts +1888 -148
  328. package/dist/types/utils/lifecycle.d.ts +16 -0
  329. package/dist/types/utils/tab-a11y-ids.d.ts +4 -0
  330. package/package.json +3 -3
  331. package/dist/apollo-core/p-0bce3874.entry.js +0 -1
  332. package/dist/apollo-core/p-5549756c.entry.js +0 -1
  333. package/dist/apollo-core/p-56fa4941.entry.js +0 -1
  334. package/dist/apollo-core/p-76c324da.entry.js +0 -1
  335. package/dist/apollo-core/p-7a3224b4.entry.js +0 -1
  336. package/dist/apollo-core/p-7e924697.entry.js +0 -1
  337. package/dist/apollo-core/p-9efca9e1.entry.js +0 -1
  338. package/dist/apollo-core/p-b252b380.entry.js +0 -1
  339. package/dist/apollo-core/p-c91daac1.entry.js +0 -1
  340. package/dist/apollo-core/p-d9b62508.entry.js +0 -1
  341. package/dist/apollo-core/p-eaea16d1.entry.js +0 -1
  342. package/dist/apollo-core/p-eed13bca.entry.js +0 -1
  343. package/dist/apollo-core/p-f5af9539.entry.js +0 -1
  344. package/dist/cjs/xpl-list.cjs.entry.js +0 -32
  345. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +0 -57
  346. package/dist/cjs/xpl-table-header.cjs.entry.js +0 -14
  347. package/dist/collection/components/xpl-progress/progress.stories.js +0 -106
  348. package/dist/collection/components/xpl-progress/xpl-progress.js +0 -60
  349. package/dist/collection/components/xpl-table-header/table-header.stories.js +0 -126
  350. package/dist/collection/components/xpl-table-header/xpl-table-header.js +0 -7
  351. package/dist/collection/components/xpl-table-header-cell/table-header-cell.stories.js +0 -75
  352. package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +0 -188
  353. package/dist/components/xpl-progress.js +0 -1
  354. package/dist/docs/xpl-progress/readme.md +0 -22
  355. package/dist/docs/xpl-table-header-cell/readme.md +0 -47
  356. package/dist/esm/xpl-list.entry.js +0 -30
  357. package/dist/esm/xpl-table-header-cell.entry.js +0 -55
  358. package/dist/esm/xpl-table-header.entry.js +0 -12
  359. package/dist/types/components/xpl-progress/progress.stories.d.ts +0 -38
  360. package/dist/types/components/xpl-progress/xpl-progress.d.ts +0 -6
  361. package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -13
  362. /package/dist/types/components/{xpl-table-header → xpl-table/xpl-table-header}/xpl-table-header.d.ts +0 -0
@@ -0,0 +1,235 @@
1
+ # xpl-spotlight
2
+
3
+ `xpl-spotlight` renders a guided-tour callout with an anchor dot, optional media, step messaging, and prop-driven footer actions. It can either render inline using the requested `anchorPosition` or attach to a target element with Floating UI when `target` is provided.
4
+
5
+ ## Usage Examples
6
+
7
+ Use the built-in title/body props and default actions for a simple tour step:
8
+
9
+ ```html
10
+ <xpl-spotlight
11
+ heading="Review recent activity"
12
+ body="Check status updates here before moving to the next step."
13
+ action-layout="default"
14
+ anchor-position="top-right"
15
+ current-step="2"
16
+ total-steps="5"
17
+ is-dismissible="true"
18
+ is-open="true"
19
+ primary-action-label="Next"
20
+ secondary-action-label="Back"
21
+ show-actions="true"
22
+ show-image="true"
23
+ show-steps="true"
24
+ target=""
25
+ ></xpl-spotlight>
26
+ ```
27
+
28
+ Anchor the spotlight to a specific element and provide custom media content:
29
+
30
+ ```html
31
+ <button id="dashboard-filter-button" type="button">Filters</button>
32
+
33
+ <xpl-spotlight
34
+ target="#dashboard-filter-button"
35
+ heading="Narrow the results"
36
+ body="Use filters to focus on the accounts or activity that matter most."
37
+ current-step="1"
38
+ total-steps="3"
39
+ primary-action-label="Next"
40
+ secondary-action-label="Skip"
41
+ >
42
+ <div slot="image">
43
+ <img src="/assets/spotlight-filter-preview.png" alt="Preview of filter controls" />
44
+ </div>
45
+ </xpl-spotlight>
46
+ ```
47
+
48
+
49
+ Control visibility from the parent with `is-open` and close it by responding to `dismiss`:
50
+
51
+ ```html
52
+ <xpl-spotlight
53
+ id="guided-tour-step"
54
+ is-open="true"
55
+ heading="Review recent activity"
56
+ body="Check status updates here before moving to the next step."
57
+ ></xpl-spotlight>
58
+
59
+ <script>
60
+ const spotlight = document.getElementById('guided-tour-step');
61
+
62
+ spotlight?.addEventListener('dismiss', () => {
63
+ spotlight.setAttribute('is-open', 'false');
64
+ });
65
+ </script>
66
+ ```
67
+
68
+ Mirror the same layout in plain HTML when documenting or prototyping the component structure outside the custom element:
69
+
70
+ ```html
71
+ <div class="xpl-spotlight xpl-spotlight--top-left xpl-spotlight--visible"
72
+ role="dialog" aria-modal="false" aria-labelledby="spotlight-title" tabindex="-1">
73
+ <button type="button" class="xpl-spotlight__target" aria-label="Spotlight indicator">
74
+ <div class="xpl-spotlight__target-outer"></div>
75
+ <div class="xpl-spotlight__target-inner"></div>
76
+ </button>
77
+ <div class="xpl-spotlight__dismiss">
78
+ <xpl-button variant="secondary" size="sm" icon-only aria-label="Dismiss tour step">
79
+ <xpl-icon icon="xmark" size="16"></xpl-icon>
80
+ </xpl-button>
81
+ </div>
82
+ <div class="xpl-spotlight__frame">
83
+ <div class="xpl-spotlight__image-container">
84
+ <img src="/assets/spotlight-preview.png" alt="Feature preview" />
85
+ </div>
86
+ <div class="xpl-spotlight__content">
87
+ <div class="xpl-spotlight__header">
88
+ <span class="xpl-spotlight__title" id="spotlight-title">Tour Title</span>
89
+ <p class="xpl-spotlight__body">Copy about the feature and/or functionality the dot is pointing to.</p>
90
+ </div>
91
+ <div class="xpl-spotlight__actions xpl-spotlight__actions--dual xpl-spotlight__actions--with-steps">
92
+ <div class="xpl-spotlight__action-slot xpl-spotlight__action-slot--secondary">
93
+ <xpl-button variant="secondary">Back</xpl-button>
94
+ </div>
95
+ <span class="xpl-spotlight__step-text">2 of 5</span>
96
+ <div class="xpl-spotlight__action-slot xpl-spotlight__action-slot--primary">
97
+ <xpl-button variant="primary">Next</xpl-button>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ </div>
103
+ ```
104
+
105
+ ## Accessibility
106
+
107
+ `xpl-spotlight` renders with `role="dialog"` and `aria-modal="false"` so assistive technologies treat it as a **non-modal** tour callout: focus is not trapped inside the card, and users can tab to the rest of the page while the step is open. The accessible name comes from the title region:
108
+
109
+ - When the default title is used, the generated heading element receives the internal `aria-labelledby` id.
110
+ - When a custom `title` slot is provided, the component assigns that same id to the first slotted title element if it does not already have one. If the slotted element already has an `id`, that value is kept and `aria-labelledby` references it (the host does not point at a missing id).
111
+ - When neither a `heading` prop nor a `title` slot is provided, the dialog falls back to `aria-label="Tour step"` so that assistive technologies always have an accessible name.
112
+
113
+ ### Keyboard navigation
114
+
115
+ | Key | Behavior |
116
+ |-----|----------|
117
+ | `Tab` / `Shift+Tab` | Moves focus between interactive controls (dismiss button, secondary action, primary action). Focus is **not** trapped — users can tab out of the spotlight to the rest of the page. |
118
+ | `Escape` | Emits `dismiss` when `isDismissible` is true and focus is inside the spotlight. Does nothing when focus is outside the component or the spotlight is closed. |
119
+ | `Enter` / `Space` | Activates the focused button (dismiss, primary, or secondary action) via standard `xpl-button` behavior. |
120
+
121
+ ### Focus management
122
+
123
+ - **On open:** focus moves automatically to the dismiss button (if `isDismissible` is true) or the first action button. When neither a dismiss button nor action buttons are rendered, the host element itself receives focus via `tabindex="-1"`.
124
+ - **On close:** focus returns to the element that was focused before the spotlight opened, provided that element is still in the DOM.
125
+ - The decorative anchor dot (`.xpl-spotlight__target`) is marked `aria-hidden="true"` so it is not announced or focusable.
126
+
127
+
128
+ ## Design Tokens
129
+
130
+ The component relies on Foundation purpose tokens in `spotlight.css` so light/dark mode works without component-level `.dark` overrides.
131
+
132
+ | Property | Token |
133
+ |----------|-------|
134
+ | Card width | `var(--xpl-spotlight-width)` on the host (defined in `spotlight.css`; design-specific width until shared layout tokens exist — see `TECH_DEBT.md`) |
135
+ | Image region min-height | `var(--xpl-spotlight-image-min-height)` on `.xpl-spotlight__image-container` (same note as card width) |
136
+ | Card background | `var(--xpl-background-surface-default)` |
137
+ | Host stacking | `var(--xpl-z-index-800)` |
138
+ | Placeholder pattern | `var(--xpl-background-surface-subtle)` |
139
+ | Heading text | `var(--xpl-text-default)` |
140
+ | Body text | `var(--xpl-text-default)` |
141
+ | Step text | `var(--xpl-text-subdued)` |
142
+ | Open/closed visibility | `opacity` transition on `.xpl-spotlight--visible` |
143
+ | Anchor outer ring | `var(--xpl-background-surface-information-bold)` |
144
+ | Anchor inner dot | `var(--xpl-background-accent-default)` |
145
+ | Image placeholder icon/text | `var(--xpl-icon-subtle)` |
146
+ | Focus outline | `var(--xpl-border-focus)` |
147
+ | Anchored host (when `target` is set) | `position: fixed` via `.xpl-spotlight--anchored`; `left` / `top` set from Floating UI (`strategy: 'fixed'`) |
148
+
149
+ ## Icon Mapping
150
+
151
+ `xpl-spotlight` uses Apollo icons for fixed controls and fallback media placeholders:
152
+
153
+ | UI area | `xpl-icon` name |
154
+ |---------|------------------|
155
+ | Dismiss button | `xmark` |
156
+ | Empty image placeholder, image affordance | `photo` |
157
+ | Empty image placeholder, video affordance | `video` |
158
+
159
+ ## Deprecated props
160
+
161
+ None.
162
+
163
+ ## Notes
164
+
165
+ - `showImage="false"` hides the media region even if `slot="image"` content is present.
166
+ - When `showImage` is left enabled and no `slot="image"` content is provided, the component renders the built-in placeholder instead of collapsing the media region.
167
+ - `showActions="false"` removes the default actions row entirely.
168
+ - `is-open="false"` keeps the host element mounted but renders no spotlight UI until it is opened again.
169
+ - `action-layout` defaults to `"default"`. `action-layout="default"` renders the Back/Next pair with **disabled** edge buttons at step boundaries (Back disabled on step 1, Next disabled on the last step). `action-layout="dual"` renders the Back/Next pair with **hidden** edge buttons at step boundaries. `action-layout="single"` renders a single primary action.
170
+ - `primary-action-label` and `secondary-action-label` control the default button text without needing action slots.
171
+ - `target` enables Floating UI positioning with `offset`, `flip`, `shift`, and `autoUpdate` so the spotlight follows the referenced element on resize and scroll. Default offset and shift padding match Foundation spacing (`--xpl-space-12` / `--xpl-space-8`).
172
+ - If `target` is missing or contains an invalid CSS selector, the component safely falls back to the requested `anchor-position` instead of throwing.
173
+ - **Storybook:** open **Components → Spotlight** to adjust props via controls. Set `target` to `#spotlight-story-anchor` to preview Floating UI anchoring against the demo button on the canvas. The **Design** addon links to the Apollo Web Figma file (replace the `node-id` in Storybook with the Spotlight frame when Design publishes a dedicated link).
174
+
175
+ <!-- Auto Generated Below -->
176
+
177
+
178
+ ## Properties
179
+
180
+ | Property | Attribute | Description | Type | Default |
181
+ | ---------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------ |
182
+ | `actionLayout` | `action-layout` | Footer action layout. `default` and `dual` both render the standard Back/Next layout, while `single` renders a single acknowledgement CTA (e.g. "Got it!"). Only applies when `showActions` is `true`. | `"default" \| "dual" \| "single"` | `'default'` |
183
+ | `anchorPosition` | `anchor-position` | Which corner of the card the anchor dot uses when not using `target`, or as the preferred side for Floating UI. | `"bottom-left" \| "bottom-right" \| "top-left" \| "top-right"` | `'top-left'` |
184
+ | `body` | `body` | Body copy when the `body` slot has no slotted content. Whitespace-only values are treated as empty (no fallback paragraph). | `string` | `undefined` |
185
+ | `currentStep` | `current-step` | Current step index (1-based). Used with `totalSteps` for the step label and for disabling default Back/Next when `showSteps` is true. | `number` | `1` |
186
+ | `heading` | `heading` | Heading when the `title` slot has no slotted content. Whitespace-only values are treated as empty (no fallback title span). | `string` | `undefined` |
187
+ | `isDismissible` | `is-dismissible` | Whether to show the dismiss (close) control. | `boolean` | `true` |
188
+ | `isOpen` | `is-open` | Controls whether the spotlight is rendered. When false, the host remains in the DOM but the spotlight UI is hidden. | `boolean` | `true` |
189
+ | `primaryActionLabel` | `primary-action-label` | Label used for the default primary action button. Only applies when `showActions` is `true`. | `string` | `'Next'` |
190
+ | `secondaryActionLabel` | `secondary-action-label` | Label used for the default secondary action button. Only applies when `showActions` is `true`. | `string` | `'Back'` |
191
+ | `showActions` | `show-actions` | Whether to show the actions row (primary / secondary and optional step counter). When `false`, the spotlight has no action buttons — useful for single-step informational callouts that rely solely on the dismiss control. | `boolean` | `true` |
192
+ | `showImage` | `show-image` | When true, the media region is shown. Slotted `image` content is rendered when present; otherwise the built-in placeholder UI is shown. When false, the entire media block is hidden. | `boolean` | `true` |
193
+ | `showSteps` | `show-steps` | Whether to show the step counter between actions (`currentStep` of `totalSteps`) and whether default Back/Next use step-based disabled state. | `boolean` | `true` |
194
+ | `target` | `target` | CSS selector for the element this spotlight anchors to. When set, placement uses Floating UI (`computePosition` with `strategy: 'fixed'`, plus `flip`, `shift`, `offset`) and `autoUpdate` for scroll/resize. The host receives `left` / `top` and the `xpl-spotlight--anchored` class. Invalid selectors are ignored; layout falls back to `anchor-position`. | `string` | `undefined` |
195
+ | `totalSteps` | `total-steps` | Total number of steps (1-based upper bound). Used with `currentStep` for the step label and for disabling default Back/Next when `showSteps` is true. | `number` | `1` |
196
+
197
+
198
+ ## Events
199
+
200
+ | Event | Description | Type |
201
+ | ----------------- | ---------------------------------------------------------------------------------------------- | ------------------- |
202
+ | `dismiss` | Emitted when the dismiss control is activated or Escape is pressed (when dismissible). | `CustomEvent<void>` |
203
+ | `primaryAction` | Emitted when the primary action control is activated (default: Next). | `CustomEvent<void>` |
204
+ | `secondaryAction` | Emitted when the secondary action control is activated (default: Back). | `CustomEvent<void>` |
205
+ | `targetClick` | Emitted when the target indicator is clicked. Consumers typically toggle `isOpen` in response. | `CustomEvent<void>` |
206
+
207
+
208
+ ## Slots
209
+
210
+ | Slot | Description |
211
+ | --------- | -------------------------------------------------------------------------------------------------------------- |
212
+ | `"body"` | Main description; falls back to the `body` prop when the slot is empty and `body` has non-whitespace text |
213
+ | `"image"` | Optional media slot. When empty and `showImage` is true, the component renders a built-in placeholder instead. |
214
+ | `"title"` | Step title; falls back to the `heading` prop when the slot is empty and `heading` has non-whitespace text |
215
+
216
+
217
+ ## Dependencies
218
+
219
+ ### Depends on
220
+
221
+ - [xpl-button](../xpl-button)
222
+ - [xpl-icon](../xpl-icon)
223
+
224
+ ### Graph
225
+ ```mermaid
226
+ graph TD;
227
+ xpl-spotlight --> xpl-button
228
+ xpl-spotlight --> xpl-icon
229
+ xpl-button --> xpl-icon
230
+ style xpl-spotlight fill:#f9f,stroke:#333,stroke-width:4px
231
+ ```
232
+
233
+ ----------------------------------------------
234
+
235
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -1,24 +1,60 @@
1
1
  # xpl-tab
2
2
 
3
+ `xpl-tab` is the **label / trigger** for one tab in an `xpl-tabs` group. Place each instance in the **`heading`** slot of `xpl-tabs`. The **`target`** string links this tab to the matching **`xpl-tab-panel`** (same `target` value). The parent sets **`selected`** and syncs **`value`**; you normally do not set `selected` by hand.
3
4
 
5
+ Underline tabs render a native **`<button role="tab">`**; segment tabs render **`xpl-button`** with the same tab semantics on the inner control. For variant-specific examples, icon usage, and token tables, see the matching section on the **Tabs** or **Segment control** Storybook page.
6
+
7
+ **`group-disabled`** is applied by `xpl-tabs` when the group has **`disabled`**; it keeps pills and underline buttons in a disabled state together with the parent.
8
+
9
+ ## Accessibility
10
+
11
+ - **IDs and ARIA:** With a parent **`xpl-tabs`**, the tab control and matching **`xpl-tab-panel`** share scoped DOM ids derived from **`data-tabs-instance-id`** on the group and each pair’s **`target`** (see **`xpl-tabs`** accessibility notes). Underline tabs set **`id`**, **`role="tab"`**, **`aria-controls`**, and **`aria-selected`** on the native `<button>`. Segment tabs wrap **`xpl-button`**, which forwards **`id`**, **`role`**, and **`aria-*`** attributes to its inner `<button>` so focus and **`aria-labelledby`** stay correct.
12
+ - Underline tabs expose a **single focusable button** per tab.
13
+ - Segment tabs delegate rendering to **`xpl-button`** with the same tab semantics as underline mode; activation follows the same **`tabChange`** event.
14
+ - Disabled tabs are skipped when moving with arrow keys.
4
15
 
5
16
  <!-- Auto Generated Below -->
6
17
 
7
18
 
8
19
  ## Properties
9
20
 
10
- | Property | Attribute | Description | Type | Default |
11
- | ---------- | ---------- | ---------------------------------------------------------- | --------- | ----------- |
12
- | `selected` | `selected` | Whether the tab is selected | `boolean` | `false` |
13
- | `target` | `target` | The target of the tab, required for the tab to be selected | `string` | `undefined` |
21
+ | Property | Attribute | Description | Type | Default |
22
+ | --------------- | --------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
23
+ | `disabled` | `disabled` | Disables this tab (pill or underline). | `boolean` | `false` |
24
+ | `groupDisabled` | `data-group-disabled` | Set when the parent `xpl-tabs` has `disabled` (group-disabled). | `boolean` | `false` |
25
+ | `icon` | `icon` | Optional icon name for segment-style pills (`type="segment"` on parent `xpl-tabs`). Ignored for default tabs. | `string` | `undefined` |
26
+ | `iconPosition` | `icon-position` | Icon position for segment-style pills. | `"end" \| "start"` | `'start'` |
27
+ | `selected` | `selected` | Whether the tab is selected | `boolean` | `false` |
28
+ | `target` | `target` | The target of the tab, required for the tab to be selected | `string` | `undefined` |
14
29
 
15
30
 
16
31
  ## Events
17
32
 
18
- | Event | Description | Type |
19
- | ----------- | ----------------------------------------------- | --------------------- |
20
- | `tabChange` | Event that emits the target of the selected tab | `CustomEvent<string>` |
33
+ | Event | Description | Type |
34
+ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
35
+ | `tabChange` | Emitted when this tab is activated (if not disabled). The event `detail` is this tab’s `target` string. Parent `xpl-tabs` listens and updates selection; use `tabChange` on `xpl-tabs` for the group-level event. | `CustomEvent<string>` |
36
+
37
+
38
+ ## Slots
39
+
40
+ | Slot | Description |
41
+ | ---- | ---------------------------------------------------------------------------------- |
42
+ | | The label for the tab (or pill label when parent `xpl-tabs` has `type="segment"`). |
43
+
44
+
45
+ ## Dependencies
46
+
47
+ ### Depends on
48
+
49
+ - [xpl-button](../xpl-button)
21
50
 
51
+ ### Graph
52
+ ```mermaid
53
+ graph TD;
54
+ xpl-tab --> xpl-button
55
+ xpl-button --> xpl-icon
56
+ style xpl-tab fill:#f9f,stroke:#333,stroke-width:4px
57
+ ```
22
58
 
23
59
  ----------------------------------------------
24
60
 
@@ -1,6 +1,41 @@
1
1
  # xpl-tab-panel
2
2
 
3
+ `xpl-tab-panel` is the **content region** for one tab. Place each panel in the **`panel`** slot of `xpl-tabs` and set **`target`** to the same string as its paired **`xpl-tab`**. Only the panel whose `target` matches the group’s selection is visible; others stay hidden via CSS until selected.
3
4
 
5
+ ## When to use
6
+
7
+ - One panel per tab in the same `xpl-tabs` as the corresponding `xpl-tab`.
8
+ - Put any markup or other components in the **default slot** (panel body).
9
+
10
+ ## Usage
11
+
12
+ ```html
13
+ <xpl-tabs value="overview">
14
+ <xpl-tab slot="heading" target="overview">Overview</xpl-tab>
15
+ <xpl-tab slot="heading" target="activity">Activity</xpl-tab>
16
+ <xpl-tab-panel slot="panel" target="overview">
17
+ <p class="xpl-text-body">Overview content.</p>
18
+ </xpl-tab-panel>
19
+ <xpl-tab-panel slot="panel" target="activity">
20
+ <p class="xpl-text-body">Activity content.</p>
21
+ </xpl-tab-panel>
22
+ </xpl-tabs>
23
+ ```
24
+
25
+ The parent **`xpl-tabs`** updates each panel’s **`selected`** state from **`value`** / user interaction; consumers typically only set **`target`** and slot content.
26
+
27
+ ## Accessibility
28
+
29
+ - The host sets **`role="tabpanel"`**, a stable **`id`** (`…-panel-<target>` scoped by the parent **`xpl-tabs`** instance), and **`aria-labelledby`** referencing the paired tab control’s **`id`**. Use the same **`target`** on **`xpl-tab`** and **`xpl-tab-panel`** so the references stay aligned (see **`xpl-tabs`** accessibility section for the full id pattern).
30
+ - Hidden panels use display toggling (`xpl-tab-panel` / `--selected` in `tabs.css`), not `aria-hidden` on the host; panel content stays in the DOM for simpler state sync.
31
+
32
+ ## Token use
33
+
34
+ | Part | Token / approach |
35
+ | ---- | ---------------- |
36
+ | Panel visibility | `tabs.css`: hidden unless `xpl-tab-panel--selected` (`display` via Tailwind `@apply`) |
37
+ | Default padding | `py-6` in `tabs.css` on `.xpl-tab-panel` |
38
+ | Inner content | Use typography classes (`xpl-text-body`, etc.) and Foundation tokens as elsewhere in Apollo |
4
39
 
5
40
  <!-- Auto Generated Below -->
6
41
 
@@ -13,6 +48,13 @@
13
48
  | `target` | `target` | The target of the tab, required for the tab to be selected | `string` | `undefined` |
14
49
 
15
50
 
51
+ ## Slots
52
+
53
+ | Slot | Description |
54
+ | ---- | ------------------------------------- |
55
+ | | Content rendered inside of the panel. |
56
+
57
+
16
58
  ----------------------------------------------
17
59
 
18
60
  *Built with [StencilJS](https://stenciljs.com/)*
@@ -1,46 +1,110 @@
1
- # xpl-table
2
-
3
- Tables are used to organize and display information from a data set.
4
-
5
- <!-- Auto Generated Below -->
6
-
7
-
8
- ## Properties
9
-
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` |
21
-
22
-
23
- ## Events
24
-
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(string[]). The default action can be overridden by calling event.preventDefault(). | `CustomEvent<{ colNum: number; colName: string; sortTypeArr: string[]; }>` |
28
- | `tableSelect` | Callback function that is called when the checkbox for a row of a `multiselect` table is checked | `CustomEvent<any>` |
29
-
30
-
31
- ## Dependencies
32
-
33
- ### Depends on
34
-
35
- - [xpl-icon](../xpl-icon)
36
-
37
- ### Graph
38
- ```mermaid
39
- graph TD;
40
- xpl-table --> xpl-icon
41
- style xpl-table fill:#f9f,stroke:#333,stroke-width:4px
42
- ```
43
-
44
- ----------------------------------------------
45
-
46
- *Built with [StencilJS](https://stenciljs.com/)*
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
+ **Selection (compositional only):** Set `selectable` on `xpl-table` and **author the selection column in your template** so the framework that renders the table (Ember, React, Angular, etc.) owns every cell node. Required pieces:
11
+
12
+ - **Header:** one `xpl-table-header-cell` with `type="checkbox"` (tri-state “select all”).
13
+ - **Body:** in each `xpl-table-row`, a cell aligned with that column containing `xpl-checkbox` (value is driven from `row-id` on the row).
14
+ - **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.
15
+
16
+ `xpl-table` keeps `selectedRowIds`, syncs `checked` / `indeterminate` on the header and row checkboxes, sets `selected` on rows, shows the bulk toolbar, and emits `rowSelectionChange` **on the `xpl-table` element** (`bubbles: false`). From a static script, use `customElements.whenDefined('xpl-table')` before `addEventListener`. Row checkboxes get an accessible name 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.
17
+
18
+ ### Breaking change compositional `selectable`
19
+
20
+ **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`).
21
+
22
+ **After:** You **must** add the selection column in your own markup, as described above. `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.
23
+
24
+ ### Row reorder (`row-reorderable`, managed grip column)
25
+
26
+ 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**.
27
+
28
+ **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.
29
+
30
+ | Attribute | When it applies | Purpose |
31
+ | --------- | ---------------- | ------- |
32
+ | `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. |
33
+ | `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. |
34
+
35
+ **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.
36
+
37
+ **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.
38
+
39
+ **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.
40
+
41
+ <!-- Auto Generated Below -->
42
+
43
+
44
+ ## Overview
45
+
46
+ Compositional tables use CSS grid on the host (`role="grid"`). Legacy mode uses a `<table>`.
47
+
48
+ ## Properties
49
+
50
+ | Property | Attribute | Description | Type | Default |
51
+ | --------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------- |
52
+ | `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` |
53
+ | `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` |
54
+ | `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` |
55
+ | `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` |
56
+ | `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` |
57
+ | `label` | `label` | Accessible label for the table. Maps to `aria-label` in compositional mode. | `string` | `undefined` |
58
+ | `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` |
59
+ | `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` |
60
+ | `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` |
61
+ | `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` | `undefined` |
62
+ | `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` |
63
+ | `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[]` | `[]` |
64
+ | `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[]` | `[]` |
65
+ | `striped` | `striped` | Toggles an optional styling of the background of each even row of the table body. | `boolean` | `undefined` |
66
+
67
+
68
+ ## Events
69
+
70
+ | Event | Description | Type |
71
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
72
+ | `rowOrderChange` | Emitted after body rows are reordered via drag-and-drop (compositional `row-reorderable` mode). | `CustomEvent<XplTableRowOrderChangeDetail>` |
73
+ | `rowSelectionChange` | Emitted when row selection changes in compositional `selectable` mode. 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[]; }>` |
74
+ | `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>` |
75
+ | `tableSelect` | Callback function that is called when the checkbox for a row of a `multiselect` table is checked. | `CustomEvent<any>` |
76
+
77
+
78
+ ## Slots
79
+
80
+ | Slot | Description |
81
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
82
+ | | `xpl-table-header`, `xpl-table-body`, and optional `xpl-table-footer`. |
83
+ | `"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. |
84
+ | `"toolbar-actions-right"` | Bulk actions in the selection toolbar (right group). Same visibility as `toolbar-actions-left`. |
85
+
86
+
87
+ ## Dependencies
88
+
89
+ ### Depends on
90
+
91
+ - [xpl-table-header-cell](xpl-table-header-cell)
92
+ - [xpl-table-cell](xpl-table-cell)
93
+ - [xpl-icon](../xpl-icon)
94
+ - [xpl-table-footer-cell](xpl-table-footer-cell)
95
+
96
+ ### Graph
97
+ ```mermaid
98
+ graph TD;
99
+ xpl-table --> xpl-table-header-cell
100
+ xpl-table --> xpl-table-cell
101
+ xpl-table --> xpl-icon
102
+ xpl-table --> xpl-table-footer-cell
103
+ xpl-table-header-cell --> xpl-icon
104
+ xpl-table-header-cell --> xpl-checkbox
105
+ style xpl-table fill:#f9f,stroke:#333,stroke-width:4px
106
+ ```
107
+
108
+ ----------------------------------------------
109
+
110
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,10 @@
1
+ # xpl-table-body
2
+
3
+
4
+
5
+ <!-- Auto Generated Below -->
6
+
7
+
8
+ ----------------------------------------------
9
+
10
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,33 @@
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
+ <!-- Auto Generated Below -->
6
+
7
+
8
+ ## Properties
9
+
10
+ | Property | Attribute | Description | Type | Default |
11
+ | ----------- | ----------- | ----------------------------------------------------------------------------------------------- | ------------------------------- | -------- |
12
+ | `align` | `align` | Horizontal text alignment within the cell. | `"center" \| "left" \| "right"` | `'left'` |
13
+ | `bold` | `bold` | Renders cell text in bold (--xpl-font-weight-semibold). | `boolean` | `false` |
14
+ | `disabled` | `disabled` | Whether the cell and its interactive children are disabled. Set automatically by xpl-table-row. | `boolean` | `false` |
15
+ | `underline` | `underline` | Adds an underline to cell text. | `boolean` | `false` |
16
+
17
+
18
+ ## Dependencies
19
+
20
+ ### Used by
21
+
22
+ - [xpl-table](..)
23
+
24
+ ### Graph
25
+ ```mermaid
26
+ graph TD;
27
+ xpl-table --> xpl-table-cell
28
+ style xpl-table-cell fill:#f9f,stroke:#333,stroke-width:4px
29
+ ```
30
+
31
+ ----------------------------------------------
32
+
33
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,10 @@
1
+ # xpl-table-footer
2
+
3
+
4
+
5
+ <!-- Auto Generated Below -->
6
+
7
+
8
+ ----------------------------------------------
9
+
10
+ *Built with [StencilJS](https://stenciljs.com/)*