@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
@@ -1,31 +1,341 @@
1
1
  # xpl-list
2
2
 
3
- A list item is a card with interactive states. List items allow users to select items from a list of items and view more information or make edits.
3
+ ## Description
4
+
5
+ **`xpl-list`** is the list **container** (`role="list"`). It coordinates **single selection** (shared radio group), **reordering** (drag-and-drop and keyboard), and assigns default **`item-id`** values when missing.
6
+
7
+ **`xpl-list-item`** is one **row**. In **slot-based** mode, `role="listitem"` is on the row surface inside the host (not on `<xpl-list-item>`), so list semantics work with the host’s `display: contents` layout. Legacy **`item`** rows keep `role="listitem"` on the host. Place items **inside** **`xpl-list`** (default slot). Compose each row with **named slots** (recommended) or use the **legacy** `item` prop / list-level `items` array. Row-level props, events, and dependencies: [xpl-list-item readme](./xpl-list-item/readme.md).
8
+
9
+ When the list is **`selectable`**, pressing **Escape** while focus is on the **selected** row clears the radio selection (same as **`clearSelection()`**). Clicking elsewhere does not clear selection. Row radios use the **title** slot for their accessible name when present; with no title slot, the label is **`Select <item-id>`** when **`item-id`** or **`id`** is set, otherwise a generic default.
10
+
11
+ **Single-select vs multi-select:** **`selectable`** on **`xpl-list`** is for **exactly one chosen row** (implemented with **`xpl-radio`** and a shared group **`name`**). For **multi-select** or **independent** toggles per row, do **not** use this flag; compose **`xpl-checkbox`** (or your own controls) in row slots and manage state in the app.
12
+
13
+ ---
14
+
15
+ ## Slot-based vs legacy integration
16
+
17
+
18
+ | | **Slot-based (recommended)** | **Legacy prop-based (deprecated)** |
19
+ | ----------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
20
+ | **Where content lives** | Light DOM: named slots on each `<xpl-list-item>` | Data: `items` on `<xpl-list>` and/or `item` on `<xpl-list-item>` |
21
+ | **Row markup** | You author `<xpl-list-item>` children with `slot="…"` content | List renders rows from `items`, or item renders from `item` object |
22
+ | **Flexibility** | Full UI composition (avatar, actions, errors, extras) | Fixed layout from `ListItem` fields |
23
+ | **Identity** | Set `item-id` (or `id`) on each row | Legacy rows from `items` use `ListItem.id` when set, else `item-0`, `item-1`, … |
24
+ | **Reordering** | `reorderable` on `xpl-list`: drag handle + keyboard on each slot row | **No reorder UI:** legacy `items` / `item` rows do not render a handle; use slots if you need reorder. |
25
+ | **Notes** | Do not set `item` on rows in this mode | `items` logs a console warning when non-empty; mixing `items` **and** slotted children renders **both** (legacy rows first) |
26
+
27
+
28
+ ---
29
+
30
+ ## Slot-based integration
31
+
32
+ Put one or more `<xpl-list-item>` elements **inside** `<xpl-list>`. Do **not** set the **`item`** prop on a row when using slots—if `item` is set, that row uses **legacy** rendering and ignores slot composition.
33
+
34
+ On **`xpl-list`**, set `selectable` and/or `reorderable` as needed; the list mirrors `radio-name`, `reorderable`, and `keyboard-active` onto **slot-based** direct child rows only (nested lists in slots are unchanged). Rows using the deprecated **`item`** prop or list-level **`items`** array are **legacy** markup: the list does **not** set `selectable`, `radio-name`, or `reorderable` on them, because that UI exists only in slot-based mode—migrate to slotted `<xpl-list-item>` children if you need selection or reorder.
35
+
36
+ ### Slots (on `xpl-list-item`)
37
+
38
+ All slots are **named**. Use `slot="<name>"` on light-DOM children.
39
+
40
+
41
+ | Slot | Role | HTML example |
42
+ | ----------------- | --------------------------------------------------------- | ----------------------------------------------------------------- |
43
+ | `title` | Primary title line | `<span slot="title">Account name</span>` |
44
+ | `metadata` | Secondary lines under the title | `<ul slot="metadata"><li>Line one</li></ul>` |
45
+ | `avatar` | Leading avatar or custom media | `<xpl-avatar slot="avatar" name="JD"></xpl-avatar>` |
46
+ | `details` | Right column: supporting text | `<span slot="details">Last updated</span>` |
47
+ | `badges` | Right column: badges / tags | `<span slot="badges"><xpl-badge>New</xpl-badge></span>` |
48
+ | `actions` | Trailing actions; clicks do **not** follow `href` | `<span slot="actions"><xpl-button type="button" variant="tertiary" size="sm">Edit</xpl-button></span>` |
49
+ | `error-text` | Message below the row; affects error styling when present | `<span slot="error-text">This field is required.</span>` |
50
+ | `stacked-extra-1` | Optional stacked block | `<div slot="stacked-extra-1">Extra block 1</div>` |
51
+ | `stacked-extra-2` | Second optional stacked block | `<div slot="stacked-extra-2">Extra block 2</div>` |
52
+ | `stacked-extra-3` | Third optional stacked block | `<div slot="stacked-extra-3">Extra block 3</div>` |
53
+
54
+
55
+ **Dot badge next to the title:** set **`title-badge-variant`** on **`xpl-list-item`** (same variants as `xpl-badge`), not inside the title slot.
56
+
57
+ **Divider under the title row:** set **`show-divider`** on **`xpl-list-item`**.
58
+
59
+ **Minimal example:**
60
+
61
+ ```html
62
+ <xpl-list selectable reorderable>
63
+ <xpl-list-item item-id="row-1" href="/settings">
64
+ <xpl-avatar slot="avatar" name="AC"></xpl-avatar>
65
+ <span slot="title">Settings</span>
66
+ <span slot="metadata">Workspace</span>
67
+ <span slot="details">Updated today</span>
68
+ <span slot="actions"><xpl-button type="button" variant="tertiary" size="sm">Open</xpl-button></span>
69
+ </xpl-list-item>
70
+ </xpl-list>
71
+ ```
72
+
73
+ ---
74
+
75
+ ### Attributes: where to set them
76
+
77
+ #### `xpl-list` (container)
78
+
79
+
80
+ | Attribute | Purpose |
81
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
82
+ | `label` | Accessible name: sets `aria-label` on the list host when there is no visible heading. **Not used** if `labelled-by` is also set. |
83
+ | `labelled-by` | Space-separated element ids: sets `aria-labelledby` on the host. Takes precedence over `label` so both are never applied together. |
84
+ | `selectable` | Enables radio selection; list assigns shared `radio-name`. **Escape** on the **selected** row clears selection (no extra attribute). |
85
+ | `reorderable` | Enables drag handles and reorder behavior on **slot-based** rows only (see legacy section). |
86
+
87
+ Use **`label`** *or* **`labelled-by`**, not both. If both attributes are present, only **`labelled-by`** affects the accessible name.
88
+
89
+
90
+ #### `xpl-list-item` (row, slot mode — omit `item`)
91
+
92
+
93
+ | Attribute | Purpose |
94
+ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------- |
95
+ | `item-id` | Stable id for selection and reorder events (or use host `id`). If omitted, the list may assign `item-0`, `item-1`, … |
96
+ | `href` | Optional: row acts as a link; `actions` / `avatar` clicks do not navigate. |
97
+ | `disabled`, `error` | Row state: non-interactive row and/or error styling (border, `error-text` slot). |
98
+ | `hidden` | Hides the row from layout and from visible-only list behavior; see **Hidden rows** below. |
99
+ | `selected` | Controlled selected state when the list is `selectable`. |
100
+ | `show-divider` | Divider under the title area. |
101
+ | `title-badge-variant` | Dot badge beside the title. |
102
+
103
+
104
+ #### Usually set by `xpl-list` on items (avoid overriding unless needed)
105
+
106
+
107
+ | Attribute | Meaning |
108
+ | --------------------------- | --------------------------------------------------- |
109
+ | `selectable`, `reorderable` | Mirrored from the list (**slot-based** rows only; not legacy `item` / `items` rows). |
110
+ | `radio-name` | Shared radio group when the list is `selectable` (slot-based rows only). |
111
+ | `keyboard-active` | Set on the row in keyboard reorder mode (slot-based rows only). |
112
+
113
+
114
+ ### Hidden rows
115
+
116
+ Set the **`hidden`** attribute (or **`hidden`** prop) on **`xpl-list-item`** when a row should not appear in the list or take up space, but you still want it in the DOM. Typical use cases:
117
+
118
+ - **Filtering or search** — hide rows that do not match without tearing down markup or losing local state.
119
+ - **Progressive disclosure or permissions** — keep a stable **`item-id`** and show the row only when a condition becomes true.
120
+ - **Temporary removal** — same as filtering when the row may return without re-creating the element.
121
+
122
+ **List behavior:** Hidden rows are omitted from **`orderChange`**’s **`orderedItemIds`** and from drag-and-drop / keyboard reorder among **visible** rows only (see tests and list implementation). They do not receive focus while hidden.
123
+
124
+ **Accessibility:** Native **`hidden`** removes the row from the accessibility tree while it is hidden. If users need an equivalent announcement elsewhere (for example, “3 results hidden by filter”), provide that in your application UI.
125
+
126
+ ---
127
+
128
+ ### Events and programmatic API
129
+
130
+ #### `xpl-list` — listen on the list host
131
+
132
+
133
+ | Event | When | `detail` |
134
+ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
135
+ | `itemSelect` | Radio selection changes; when clearing via **`clearSelection()`** or **Escape** on the selected row, emitted **once per** previously selected row (typically one) | `{ itemId?: string }` |
136
+ | `orderChange` | After a successful reorder (drag/drop or keyboard); DOM is already updated | `{ itemId?: string; direction: 'up' \| 'down'; orderedItemIds: string[] }` |
137
+
138
+
139
+ **`orderedItemIds`:** visible rows only (DOM order); hidden `xpl-list-item` rows are omitted.
140
+
141
+ **TypeScript:** `orderChange` detail is typed as **`XplListOrderChangeDetail`** (exported from `@xplortech/apollo-core` alongside **`ListItem`**).
142
+
143
+ **Legacy:** `xplListReorder` may also fire (bubbles, composed). Prefer **`orderChange`** for new code. Legacy `detail` includes `orderedItemIds` as well.
144
+
145
+
146
+ | Method | Notes |
147
+ | ------------------ | --------------------------------------------------------------------------------------------------- |
148
+ | `clearSelection()` | Promise. Clears radios when `selectable`. Same effect as **Escape** with focus on the selected row. |
149
+
150
+
151
+ ```html
152
+ <xpl-list id="my-list" selectable reorderable>...</xpl-list>
153
+ <script type="module">
154
+ const list = document.getElementById('my-list');
155
+ list.addEventListener('itemSelect', (e) => {
156
+ /* handle selection: */ void e.detail.itemId;
157
+ });
158
+ list.addEventListener('orderChange', (e) => {
159
+ /* handle reorder: */ void e.detail.direction;
160
+ void e.detail.orderedItemIds;
161
+ });
162
+ </script>
163
+ ```
164
+
165
+ #### `xpl-list-item` — optional row-level listeners
166
+
167
+
168
+ | Event | When | `detail` |
169
+ | --------------- | ---------------------------------------------- | ---------------------------------------- |
170
+ | `itemSelect` | Radio change on this row | `{ itemId?: string }` |
171
+ | `itemDragStart` | Drag started from reorder handle | `{ itemId?: string; item: HTMLElement }` |
172
+ | `itemDragEnd` | Drag ended on this row (after drop or cancel) | `{ itemId?: string; item: HTMLElement }` |
173
+ | `itemDrop` | Drop target during reorder | `{ itemId?: string; item: HTMLElement }` |
174
+
175
+
176
+ ---
177
+
178
+ ## Legacy prop-based integration
179
+
180
+ Use only for migration or data-driven rows. **Prefer slots for new work.**
181
+
182
+ ### At-a-glance migration
183
+
184
+ | | **Before (deprecated)** | **After (recommended)** |
185
+ | --- | --- | --- |
186
+ | **Data** | `items` array on `xpl-list`, or `item` object on each row | Light DOM: `<xpl-list-item>` children with named slots |
187
+ | **Identity** | Optional `ListItem.id`; else `item-0`, `item-1`, … | Explicit `item-id` (or host `id`) per row |
188
+
189
+ ```html
190
+ <!-- Before: data-driven rows -->
191
+ <xpl-list id="legacy-list"></xpl-list>
192
+ <script type="module">
193
+ document.getElementById('legacy-list').items = [{ title: 'Acme Co.', href: '/acme' }];
194
+ </script>
195
+
196
+ <!-- After: slot-based rows -->
197
+ <xpl-list>
198
+ <xpl-list-item item-id="acme" href="/acme">
199
+ <span slot="title">Acme Co.</span>
200
+ </xpl-list-item>
201
+ </xpl-list>
202
+ ```
203
+
204
+ ### `xpl-list` — `items` (deprecated)
205
+
206
+
207
+ | Prop | Type | Description |
208
+ | ------- | ------------ | ------------------------------------------------------------------------------------------------------- |
209
+ | `items` | `ListItem[]` | **Deprecated.** Renders internal `<xpl-list-item>` rows with `item={...}` and ids `item-0`, `item-1`, … |
210
+
211
+
212
+ A **console warning** runs when `items` is non-empty. Using **`items`** and slotted children renders **both**.
213
+
214
+ ### `xpl-list-item` — `item` (deprecated)
215
+
216
+
217
+ | Prop | Type | Description |
218
+ | ------ | ---------- | ---------------------------------------------------------------------------- |
219
+ | `item` | `ListItem` | **Deprecated.** Prop-driven row; **no named slots**. Prefer slot-based rows. |
220
+
221
+
222
+ ### `ListItem` (`listitem.ts`, deprecated)
223
+
224
+
225
+ | Field | Type | Notes |
226
+ | ---------- | -------------------------------- | ---------------------- |
227
+ | `id` | `string` | Optional stable row id (`item-id` when rendered from `items`) |
228
+ | `title` | `string` | Required |
229
+ | `href` | `string` | Optional |
230
+ | `avatar` | `string` | Image URL or icon name |
231
+ | `metadata` | `string[]` or `{ icon, text }[]` | |
232
+ | `subtext` | `string` | |
233
+ | `avatars` | `string[]` | |
234
+ | `badges` | `string[]` or badge objects | |
235
+
236
+
237
+ **Legacy layout:** Rows rendered from the deprecated `item` / inner `.xpl-list-item` flex markup use the **same layout at all viewport widths** (there is no dedicated narrow-viewport stacking breakpoint in `list-item.css`). If you need stacked mobile behavior for legacy lists, handle it in the app (e.g. layout wrapper or scoped CSS).
238
+
239
+ **Legacy reordering:** The list does **not** set `reorderable` (or `selectable` / `radio-name`) on legacy **`items`** / **`item`** rows—there is **no** drag handle or keyboard reorder entry point in prop-driven mode. Only **slot-composed** rows participate in reorder and list-level selection UI; migrate from `items` / `item` to slotted `<xpl-list-item>` children if you need those features.
240
+
241
+ ---
242
+
243
+ ## Dependencies
244
+
245
+ - **Rows:** `xpl-list-item` uses [xpl-avatar](../xpl-avatar), [xpl-icon](../xpl-icon), [xpl-badge](../xpl-badge), [xpl-divider](../xpl-divider).
246
+
247
+ ```mermaid
248
+ graph TD;
249
+ xpl-list-item --> xpl-avatar
250
+ xpl-list-item --> xpl-icon
251
+ xpl-list-item --> xpl-badge
252
+ xpl-list-item --> xpl-divider
253
+ xpl-list --> xpl-list-item
254
+ ```
255
+
256
+
257
+
258
+ ## Design tokens
259
+
260
+ List styling is split across [`list.css`](https://github.com/xplor/apollo/blob/main/packages/apollo-core/src/css/list.css) (the `xpl-list` host), [`list-item.css`](https://github.com/xplor/apollo/blob/main/packages/apollo-core/src/css/list-item.css) (legacy vs slot-based row layout, error/disabled/hidden, title/metadata columns), and [`list-action.css`](https://github.com/xplor/apollo/blob/main/packages/apollo-core/src/css/list-action.css) (reorder handle, selectable radio chrome, legacy action-button modifiers). All are imported from the package `style` entry. Visual values use **Apollo Foundation** CSS variables (`--xpl-*`); no raw hex colors in those stylesheets.
261
+
262
+
263
+ | Category | Tokens (representative) |
264
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
265
+ | **Layout / spacing** | `--xpl-space-4`, `--xpl-space-8`, `--xpl-space-12`, `--xpl-space-16`, `--xpl-space-40` |
266
+ | **Sizing** | `--xpl-size-050`, `--xpl-size-075`, `--xpl-size-350` |
267
+ | **Borders** | `--xpl-border-small`, `--xpl-border-large`, `--xpl-border-default`, `--xpl-border-hover`, `--xpl-border-focus`, `--xpl-border-negative`, `--xpl-border-subtle`, `--xpl-border-strong` |
268
+ | **Radius** | `--xpl-border-radius-default`, `--xpl-border-radius-small`, `--xpl-border-radius-full` |
269
+ | **Text** | `--xpl-text-default`, `--xpl-text-subdued`, `--xpl-text-disabled`, `--xpl-text-negative` |
270
+ | **Icons / surfaces** | `--xpl-icon-default`, `--xpl-icon-subtle`, `--xpl-background-surface-default`, `--xpl-background-action-disabled`, `--xpl-background-surface-subtle` |
271
+ | **Typography** | `--xpl-font-family-default`, `--xpl-font-size-body`, `--xpl-font-size-title-5`, `--xpl-font-size-callout`, `--xpl-font-size-caption`, `--xpl-font-weight-normal`, `--xpl-font-weight-medium` |
272
+
273
+
274
+ ## Accessibility
275
+
276
+ - **`xpl-list`** sets `role="list"` on the host. Use **`label`** / **`labelled-by`** when the list has no visible caption.
277
+ - **`xpl-list-item`**: **`role="listitem"`** is on the **inner row surface** in **slot-based** mode (see intro above); **legacy** `item` rows keep it on the **host**. When the list is **`selectable`**, the row renders **`xpl-radio`** with a shared group **`name`** and visually hidden label text (from the title slot when present, else a default).
278
+ - With **`selectable`**, **Escape** while focus is on the **selected** row **clears selection** (same behavior as **`clearSelection()`**).
279
+ - **Reorder**: the drag handle is a native **`<button>`** inside **`xpl-button`** (focusable, with **`aria-pressed`** in keyboard reorder mode and **`aria-label`** instructions for keyboard vs drag). Row links use `:focus-visible` for focus indication.
280
+ - **`hidden`** on a row removes it from layout and visible reorder semantics; see **[Hidden rows](#hidden-rows)** for use cases and accessibility notes.
281
+
282
+ ---
4
283
 
5
284
  <!-- Auto Generated Below -->
6
285
 
7
286
 
8
287
  ## Properties
9
288
 
10
- | Property | Attribute | Description | Type | Default |
11
- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------- |
12
- | `items` | -- | `items` should be an array of objects with the following signature: { avatar?: string; // The URL of the avatar, or the placeholder initials (ex. "SPD"). avatars?: string[]; // The URLs of multiple avatars to be displayed in a group on the right. badges?: string[] \| { // An array of strings or badge-like objects to be displayed as badges dot?: boolean; // in a group on the right. See <xpl-badge> for more details. text: string; variant?: string; }[]; href?: string; // A URL, if this list item is meant to link somewhere. title: string; // The text to be displayed for the list item. metadata?: string[] \| { // An array of strings or strings with icons (reference the allowed icon: string; // Apollo icons) to be displayed as metadata below the title. text: string; }[]; subtext?: string; // Subtext to be displayed on the right. } - Note that you should *only use one of* `avatars`, `badges`, or `subtext`, to avoid cluttering the right-hand side of the list item. | `ListItem[]` | `[]` |
289
+ | Property | Attribute | Description | Type | Default |
290
+ | ------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------- |
291
+ | `items` | -- | Array of list items to render. Each item should follow the ListItem interface. **Deprecated.** Use slot-based xpl-list-item children instead. | `ListItem[]` | `[]` |
292
+ | `label` | `label` | Accessible name for the list, exposed as `aria-label` on the host when set. Use when the list has no visible heading. Ignored when `labelledBy` is set (see `labelledBy` for precedence). | `string` | `undefined` |
293
+ | `labelledBy` | `labelled-by` | Element id(s) that label this list (space-separated), exposed as `aria-labelledby` when set. When set, `label` is not applied as `aria-label` so the list has a single naming source. | `string` | `undefined` |
294
+ | `reorderable` | `reorderable` | When true, enables reorder UI and behavior for **slot-based** child rows (drag handle + keyboard). Legacy rows rendered from the deprecated `items` prop do **not** show a drag handle; migrate to slots if reorder is required. | `boolean` | `false` |
295
+ | `selectable` | `selectable` | Determines if this list is selectable (shows `xpl-radio` per row in a shared group). Press Escape while focus is on the **selected** row to clear selection (same as `clearSelection()`). | `boolean` | `false` |
296
+
297
+
298
+ ## Events
299
+
300
+ | Event | Description | Type |
301
+ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
302
+ | `itemSelect` | Emitted when an item is selected. | `CustomEvent<{ itemId?: string; }>` |
303
+ | `orderChange` | Emitted when the order of items changes (after the DOM has been updated). `orderedItemIds` lists **visible** row ids only (hidden rows excluded). | `CustomEvent<XplListOrderChangeDetail>` |
304
+
305
+
306
+ ## Methods
307
+
308
+ ### `clearSelection() => Promise<void>`
309
+
310
+ Clears all radio selections in the list.
311
+ Also runs when `selectable` is true, the user presses Escape, and focus is on the selected row.
312
+ Emits `itemSelect` once per row that was selected (checked radio or `selected` prop), typically one.
313
+
314
+ #### Returns
315
+
316
+ Type: `Promise<void>`
317
+
318
+
13
319
 
14
320
 
15
321
  ## Dependencies
16
322
 
17
323
  ### Depends on
18
324
 
19
- - [xpl-avatar](../xpl-avatar)
20
- - [xpl-icon](../xpl-icon)
21
- - [xpl-badge](../xpl-badge)
325
+ - [xpl-list-item](xpl-list-item)
22
326
 
23
327
  ### Graph
24
328
  ```mermaid
25
329
  graph TD;
26
- xpl-list --> xpl-avatar
27
- xpl-list --> xpl-icon
28
- xpl-list --> xpl-badge
330
+ xpl-list --> xpl-list-item
331
+ xpl-list-item --> xpl-avatar
332
+ xpl-list-item --> xpl-icon
333
+ xpl-list-item --> xpl-badge
334
+ xpl-list-item --> xpl-button
335
+ xpl-list-item --> xpl-radio
336
+ xpl-list-item --> xpl-divider
337
+ xpl-avatar --> xpl-badge
338
+ xpl-button --> xpl-icon
29
339
  style xpl-list fill:#f9f,stroke:#333,stroke-width:4px
30
340
  ```
31
341
 
@@ -0,0 +1,99 @@
1
+ # xpl-list-item
2
+
3
+ Single row for [`xpl-list`](../xpl-list/readme.md). **Slot-based** rows expose `role="listitem"` on the inner row surface (`.xpl-list-item__wrapper` or `.xpl-list-item__listitem-shell` when `href` is set); **legacy** `item` rows use `role="listitem"` on the host. Hand-written integration notes for slots, attributes, and events live in the [list readme](../xpl-list/readme.md); the section below is Stencil-generated API for this component.
4
+
5
+ **Reorder handle (slot mode):** When `reorderable` is enabled and the row uses **slot-based** content, the handle is an **`xpl-button`** wrapping a native **`<button>`**. Reorder logic is wired on the **`xpl-button` host** (`mousedown` / `keydown`); those events originate on the inner `<button>` and **bubble** to the host, which is how the list item receives them today. If `xpl-button` ever stopped bubbling for those events, reorder handlers would need to attach directly to the inner button (similar to `componentDidRender` syncing `aria-*` on that element).
6
+
7
+ **Legacy `item` prop:** Prop-driven rows **do not** render the reorder handle, radios, or keyboard reorder affordances. Parent `xpl-list` **does not** set `selectable`, `radio-name`, or `reorderable` on those rows (those attributes are removed so they are not mistaken for supported behavior). Use slots if you need selection, drag, or keyboard reorder.
8
+
9
+ ### Accessibility
10
+
11
+ - **`role="listitem"`** is on the inner row surface (`.xpl-list-item__wrapper` for non-link rows, `.xpl-list-item__listitem-shell` for link rows), not on the `<xpl-list-item>` host. This avoids older browser issues with `display: contents` and ARIA.
12
+ - **Hidden rows** render an empty host with the native `hidden` attribute only — no `role="listitem"` — so hidden rows are removed from the accessibility tree entirely.
13
+ - **Selectable rows** render `xpl-radio` with an accessible label derived from the **title** slot text, falling back to `Select <item-id>`, then `Select list item`.
14
+ - **Reorder handle** (`xpl-button`) syncs `aria-label` and `aria-pressed` on the inner native `<button>` via `componentDidRender`. Labels change between drag and keyboard modes.
15
+ - **Focus indicators** use `:focus-visible` with `outline-color: var(--xpl-border-focus)` and `outline-2 outline-offset-2`.
16
+ - **Disabled rows** use `--xpl-background-action-disabled` and `--xpl-text-disabled`; link anchors get `pointer-events: none`.
17
+ - **Keyboard reorder**: Enter/Space activates mode, ArrowUp/ArrowDown moves the row, Escape exits.
18
+
19
+ ### Design tokens
20
+
21
+ | Role | Token |
22
+ |------|-------|
23
+ | Row background | `--xpl-background-surface-default` |
24
+ | Row border | `--xpl-border-default` (default), `--xpl-border-hover` (hover), `--xpl-border-negative` (error), `--xpl-border-focus` (focus/drag-over) |
25
+ | Row border-radius | `--xpl-border-radius-default` |
26
+ | Text | `--xpl-text-default` (primary), `--xpl-text-subdued` (metadata/details), `--xpl-text-negative` (error), `--xpl-text-disabled` |
27
+ | Icon | `--xpl-icon-subtle` (chevron) |
28
+ | Spacing | `--xpl-space-4` through `--xpl-space-40` (padding, gap, margins) |
29
+ | Sizing | `--xpl-size-050` (dot badge), `--xpl-size-350` (min-height) |
30
+ | Typography | `--xpl-font-size-body`, `--xpl-font-size-title-5`, `--xpl-font-size-callout`, `--xpl-font-size-caption` |
31
+ | Disabled background | `--xpl-background-action-disabled` |
32
+ | Selected background | `--xpl-background-surface-subtle` |
33
+ | Drag opacity | `--xpl-opacity-75` (custom token in `:root`) |
34
+
35
+ <!-- Auto Generated Below -->
36
+
37
+
38
+ ## Properties
39
+
40
+ | Property | Attribute | Description | Type | Default |
41
+ | ------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------- |
42
+ | `disabled` | `disabled` | Whether the item is disabled. | `boolean` | `false` |
43
+ | `error` | `error` | Whether to show the item in an error state. | `boolean` | `false` |
44
+ | `hidden` | `hidden` | When true, the row is not shown and does not participate in visible-only list behavior (e.g. `orderChange` / `orderedItemIds`, reorder targets). Use for filtering, conditional display, or keeping stable `item-id` while the row is off-screen. See `xpl-list` readme “Hidden rows”. **Accessibility:** Renders an empty host with the native `hidden` attribute only (no `role="listitem"`), consistent with the row not participating as a list item while hidden. | `boolean` | `false` |
45
+ | `href` | `href` | URL for link behavior. When provided, the entire row becomes clickable. Clicks on `actions` or `avatar` slots are prevented from triggering navigation. | `string` | `undefined` |
46
+ | `item` | -- | Optional item data for prop-based rendering. When provided, this takes precedence over slotted content and renders using the legacy ListItem interface. **Deprecated.** Prefer slot-based composition (named slots on `xpl-list-item`). | `ListItem` | `undefined` |
47
+ | `itemId` | `item-id` | Unique identifier for this item. Used for selection and drag/drop. Mutable so the host can sync from `item-id` / `id` in `componentWillLoad` without breaking one-way data flow. | `string` | `undefined` |
48
+ | `keyboardActive` | `keyboard-active` | When set by the parent, indicates this item is the active keyboard reorder item. | `boolean` | `false` |
49
+ | `radioName` | `radio-name` | Name attribute for radio inputs (shared across selectable items in a list). | `string` | `undefined` |
50
+ | `reorderable` | `reorderable` | Whether this item is reorderable (shows a drag handle in **slot-based** layout). When the deprecated `item` prop is used, legacy markup has **no** reorder handle even if this is true. | `boolean` | `false` |
51
+ | `selectable` | `selectable` | Whether this item is selectable (shows `xpl-radio` in a shared group). | `boolean` | `false` |
52
+ | `selected` | `selected` | Whether this item is selected (radio checked state). | `boolean` | `false` |
53
+ | `showDivider` | `show-divider` | Whether to show a divider below the item. | `boolean` | `false` |
54
+ | `titleBadgeVariant` | `title-badge-variant` | Optional badge to display next to the title (dot badge). Only used when `item` prop is not provided (slot mode). Matches `xpl-badge` variant values (e.g. purple, green, red). | `"blue" \| "error" \| "gray" \| "green" \| "inactive" \| "orange" \| "purple" \| "red" \| "success" \| "warning" \| "yellow"` | `undefined` |
55
+
56
+
57
+ ## Events
58
+
59
+ | Event | Description | Type |
60
+ | --------------- | ----------------------------------------------------------------------- | ------------------------------------------------------ |
61
+ | `itemDragEnd` | Emitted when a drag operation ends on this item (after drop or cancel). | `CustomEvent<{ itemId?: string; item: HTMLElement; }>` |
62
+ | `itemDragStart` | Emitted when drag starts on this item. | `CustomEvent<{ itemId?: string; item: HTMLElement; }>` |
63
+ | `itemDrop` | Emitted when an item is dropped on this item. | `CustomEvent<{ itemId?: string; item: HTMLElement; }>` |
64
+ | `itemSelect` | Emitted when the item is selected (radio change). | `CustomEvent<{ itemId?: string; }>` |
65
+
66
+
67
+ ## Dependencies
68
+
69
+ ### Used by
70
+
71
+ - [xpl-list](..)
72
+
73
+ ### Depends on
74
+
75
+ - [xpl-avatar](../../xpl-avatar)
76
+ - [xpl-icon](../../xpl-icon)
77
+ - [xpl-badge](../../xpl-badge)
78
+ - [xpl-button](../../xpl-button)
79
+ - [xpl-radio](../../xpl-radio)
80
+ - [xpl-divider](../../xpl-divider)
81
+
82
+ ### Graph
83
+ ```mermaid
84
+ graph TD;
85
+ xpl-list-item --> xpl-avatar
86
+ xpl-list-item --> xpl-icon
87
+ xpl-list-item --> xpl-badge
88
+ xpl-list-item --> xpl-button
89
+ xpl-list-item --> xpl-radio
90
+ xpl-list-item --> xpl-divider
91
+ xpl-avatar --> xpl-badge
92
+ xpl-button --> xpl-icon
93
+ xpl-list --> xpl-list-item
94
+ style xpl-list-item fill:#f9f,stroke:#333,stroke-width:4px
95
+ ```
96
+
97
+ ----------------------------------------------
98
+
99
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -41,6 +41,7 @@ graph TD;
41
41
  xpl-select --> xpl-tag
42
42
  xpl-select --> xpl-icon
43
43
  xpl-select --> xpl-dropdown
44
+ xpl-tag --> xpl-icon
44
45
  xpl-dropdown --> xpl-dropdown-group
45
46
  xpl-dropdown --> xpl-dropdown-option
46
47
  xpl-dropdown-group --> xpl-dropdown-group