@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,30 @@
1
+ # xpl-table-footer-cell
2
+
3
+
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
+
14
+
15
+ ## Dependencies
16
+
17
+ ### Used by
18
+
19
+ - [xpl-table](..)
20
+
21
+ ### Graph
22
+ ```mermaid
23
+ graph TD;
24
+ xpl-table --> xpl-table-footer-cell
25
+ style xpl-table-footer-cell fill:#f9f,stroke:#333,stroke-width:4px
26
+ ```
27
+
28
+ ----------------------------------------------
29
+
30
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -1,13 +1,13 @@
1
- # xpl-table-header
2
-
3
- Component parts used to assemble the Dynamic Table.
4
-
5
- > **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
6
-
7
-
8
- <!-- Auto Generated Below -->
9
-
10
-
11
- ----------------------------------------------
12
-
13
- *Built with [StencilJS](https://stenciljs.com/)*
1
+ # xpl-table-header
2
+
3
+ Semantic wrapper for the header **row group** in a compositional `xpl-table` (`role="rowgroup"`). Place one `xpl-table-row` (with `xpl-table-header-cell` children) inside.
4
+
5
+ > **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
6
+
7
+
8
+ <!-- Auto Generated Below -->
9
+
10
+
11
+ ----------------------------------------------
12
+
13
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,66 @@
1
+ # xpl-table-header-cell
2
+
3
+ > **Note:** This component is currently in beta. Use with caution as it may have breaking changes in future releases.
4
+
5
+ The `icon` property accepts icon names as strings. See [xpl-icon available icons](../xpl-icon/ICONS.md) for the complete list.
6
+
7
+ When this cell is used inside a compositional [`xpl-table`](../xpl-table) with `selectable`, **you** add a `type="checkbox"` header cell for select-all; `xpl-table` keeps `checked` and `indeterminate` in sync with row selection.
8
+
9
+ For **sortable** columns (`type="label"`), set **`sortable`** and optionally **`sort-key`**; the parent table emits **`sortChanged`** (see [`xpl-table` events](../xpl-table#events)).
10
+
11
+ **Column width (compositional grid):** Each header cell defines one grid column on the parent `xpl-table`. By default the track is **`auto`** (sizes from content). Set **`width`** for a fixed pixel width (minimum 48px), or **`column-width`** for any CSS grid track string (`1fr`, `minmax(120px, 1fr)`, etc.). When both are set, **`column-width` wins**.
12
+
13
+ ---
14
+
15
+ <!-- Auto Generated Below -->
16
+
17
+
18
+ ## Properties
19
+
20
+ | Property | Attribute | Description | Type | Default |
21
+ | ------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | ----------- |
22
+ | `align` | `align` | Horizontal text alignment within the header cell. | `"center" \| "left" \| "right"` | `'left'` |
23
+ | `checkboxAriaLabel` | `checkbox-aria-label` | Accessible name for the header checkbox (native `aria-label`). Defaults to “Select all rows” when `type` is `checkbox`. | `string` | `undefined` |
24
+ | `checked` | `checked` | Whether the header checkbox is checked | `boolean` | `false` |
25
+ | `columnWidth` | `column-width` | CSS grid track size for this column (e.g. `1fr`, `minmax(120px, 1fr)`, `auto`). When set, overrides `width`. Use this when you need flexible columns; default layout uses `auto` per column unless you set a track here. | `string` | `undefined` |
26
+ | `icon` | `icon` | Icon to display in the cell. See [xpl-icon available icons](../xpl-icon/ICONS.md) for valid icon names. | `string` | `undefined` |
27
+ | `indeterminate` | `indeterminate` | Whether the checkbox is in indeterminate (partially selected) state | `boolean` | `false` |
28
+ | `label` | `label` | Text to display in the cell. | `string` | `''` |
29
+ | `sortDirection` | `sort-direction` | Active sort direction for this column when `sortable`. Set by `xpl-table` when used inside a compositional table; may be set by the app for controlled updates. | `"asc" \| "desc"` | `undefined` |
30
+ | `sortKey` | `sort-key` | When `sortable` is true, optional stable id used as the key in `sortChanged`’s detail object. Falls back to a slug of `label` when omitted. | `string` | `undefined` |
31
+ | `sortable` | `sortable` | When true (and `type` is `label`), renders a sort control (button + affordance icon). | `boolean` | `false` |
32
+ | `type` | `type` | The type of cell to render. | `"checkbox" \| "empty" \| "icon" \| "label"` | `'label'` |
33
+ | `width` | `width` | Fixed width for this column in pixels (minimum 48px). Sets the grid track to `Npx`. Ignored when `columnWidth` is set. When omitted, the column track defaults to `auto` (content-sized). | `number` | `undefined` |
34
+
35
+
36
+ ## Events
37
+
38
+ | Event | Description | Type |
39
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
40
+ | `headerCheckboxChange` | Emitted when header checkbox changes | `CustomEvent<boolean>` |
41
+ | `headerSortChange` | Emitted when a sortable label header is activated. Parent `xpl-table` coordinates columns and emits `sortChanged`. | `CustomEvent<HeaderSortChangeDetail>` |
42
+
43
+
44
+ ## Dependencies
45
+
46
+ ### Used by
47
+
48
+ - [xpl-table](..)
49
+
50
+ ### Depends on
51
+
52
+ - [xpl-icon](../../xpl-icon)
53
+ - [xpl-checkbox](../../xpl-checkbox)
54
+
55
+ ### Graph
56
+ ```mermaid
57
+ graph TD;
58
+ xpl-table-header-cell --> xpl-icon
59
+ xpl-table-header-cell --> xpl-checkbox
60
+ xpl-table --> xpl-table-header-cell
61
+ style xpl-table-header-cell fill:#f9f,stroke:#333,stroke-width:4px
62
+ ```
63
+
64
+ ----------------------------------------------
65
+
66
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -0,0 +1,19 @@
1
+ # xpl-table-row
2
+
3
+
4
+
5
+ <!-- Auto Generated Below -->
6
+
7
+
8
+ ## Properties
9
+
10
+ | Property | Attribute | Description | Type | Default |
11
+ | ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------- | ----------- |
12
+ | `disabled` | `disabled` | Whether the row and its cells are disabled. | `boolean` | `false` |
13
+ | `rowId` | `row-id` | Stable identifier for this row when used with a selectable compositional `xpl-table`. If omitted, the parent table assigns a unique id. | `string` | `undefined` |
14
+ | `selected` | `selected` | Whether the row is visually selected. | `boolean` | `false` |
15
+
16
+
17
+ ----------------------------------------------
18
+
19
+ *Built with [StencilJS](https://stenciljs.com/)*
@@ -1,23 +1,76 @@
1
1
  # xpl-tabs
2
2
 
3
- Tabs organize content across different screens, data sets, and other interactions.
3
+ `xpl-tabs` groups related views into a single surface: users pick a **tab** to show the matching **panel**. It implements the WAI-ARIA tabs pattern with a horizontal tab list, optional full-width layout, and two visual styles—**underline** (`type="tabs"`, default) and **segment** (`type="segment"`, pill controls in a bordered track)—selected with the **`type`** prop. On narrow viewports the heading row is replaced by an `xpl-select` so the same targets and keyboard behavior stay consistent.
4
+
5
+ The **Tabs** and **Segment control** Storybook entries document this **one component** with different defaults and Figma references. Each page adds variant-specific guidance (when to use, examples, tokens); the sections below describe behavior that is **the same for both** styles.
6
+
7
+ Pair **`xpl-tab` (slot `heading`)** with **`xpl-tab-panel` (slot `panel`)** and use the same **`target`** string on each pair so selection stays in sync.
8
+
9
+ ## Usage
10
+
11
+ ### Web component (`<xpl-tabs>`)
12
+
13
+ Minimal group with two tabs: each `xpl-tab` and `xpl-tab-panel` shares a `target` value. Set `value` on `xpl-tabs` to control the selected tab (defaults to the first tab’s `target` if omitted).
14
+
15
+ ```html
16
+ <xpl-tabs value="one">
17
+ <xpl-tab slot="heading" target="one">First</xpl-tab>
18
+ <xpl-tab slot="heading" target="two">Second</xpl-tab>
19
+ <xpl-tab-panel slot="panel" target="one">Content for first tab.</xpl-tab-panel>
20
+ <xpl-tab-panel slot="panel" target="two">Content for second tab.</xpl-tab-panel>
21
+ </xpl-tabs>
22
+ ```
23
+
24
+ Listen for selection changes with the **`tabChange`** event (detail is the selected `target` string):
25
+
26
+ ```html
27
+ <xpl-tabs id="demo" value="a">
28
+ <xpl-tab slot="heading" target="a">A</xpl-tab>
29
+ <xpl-tab slot="heading" target="b">B</xpl-tab>
30
+ <xpl-tab-panel slot="panel" target="a">…</xpl-tab-panel>
31
+ <xpl-tab-panel slot="panel" target="b">…</xpl-tab-panel>
32
+ </xpl-tabs>
33
+ <script>
34
+ document.getElementById('demo').addEventListener('tabChange', (e) => {
35
+ console.log(e.detail); // "a" | "b"
36
+ });
37
+ </script>
38
+ ```
39
+
40
+ Disable the entire group (headings, mobile select, and segment pills) with **`disabled`** on `xpl-tabs`. Disable individual tabs with **`disabled`** on `xpl-tab`.
41
+
42
+ ### Plain HTML (BEM classes)
43
+
44
+ When styling with `tabs.css` without the Stencil component, mirror the structure: `xpl-tabs`, `xpl-tabs__headings` with `role="tablist"` and `aria-orientation="horizontal"`, `xpl-tabs__active-bar` for the underline variant (position/size normally set by JS), **`button.xpl-tab__button`** with **`role="tab"`** (not links), and **`xpl-tab-panel`** for panels. For **segment** (`xpl-tabs--segment`), each heading is **`xpl-tab.xpl-tab--segment`** wrapping **`xpl-button`** (not `.xpl-tab__button`). On small viewports, include **`xpl-tabs__mobile-select`** with **`xpl-select`** for parity with the component.
45
+
46
+ ## Accessibility
47
+
48
+ - Each **`xpl-tabs`** root gets a unique **`data-tabs-instance-id`** (for example `xpl-tg-1`). **`xpl-tab`** and **`xpl-tab-panel`** derive matching DOM **`id`** values from that id plus the shared **`target`** string: the tab control is **`…-tab-<target>`**, the panel is **`…-panel-<target>`** (with `target` sanitized for HTML `id` rules). The tab exposes **`aria-controls`** pointing at the panel id, **`aria-selected`**, and the panel uses **`aria-labelledby`** pointing at the tab id. **Segment (pill) tabs** render **`xpl-button`**; because **`xpl-button`** does not forward **`id`** / **`role`** / **`aria-*`** to its inner `<button>`, **`xpl-tab`** sets those on the native button after render so focus order and **`aria-labelledby`** stay correct (same pattern as underline tabs, different host element).
49
+ - The tab list container is **`role="tablist"`** with **`aria-orientation="horizontal"`**. Underline tabs use **`role="tab"`** on the inner `<button>`; panels use **`role="tabpanel"`** on **`xpl-tab-panel`**.
50
+ - **Roving tabindex:** only the active tab’s control is in the tab order (`tabindex="0"`); others use `tabindex="-1"` until focused with arrows.
51
+ - **Keyboard:** **Arrow Left/Right** (and **Arrow Up/Down** as next/previous), **Home**, and **End** move between enabled tabs; **Enter** and **Space** activate (via `xpl-button` in segment mode). Direction mirrors in **RTL**.
52
+ - When **`disabled`** is set on `xpl-tabs`, tab keyboard navigation and selection are suppressed for the group.
53
+
54
+ Variant-specific Foundation mappings for underline vs. segment live in the **Tabs** and **Segment control** Storybook pages. The **`xpl-select`** mobile row reuses **`xpl-select`** / **`xpl-dropdown`** tokens from those components.
4
55
 
5
56
  <!-- Auto Generated Below -->
6
57
 
7
58
 
8
59
  ## Properties
9
60
 
10
- | Property | Attribute | Description | Type | Default |
11
- | ----------- | ------------ | -------------------------------------------------------- | --------- | ----------- |
12
- | `fullWidth` | `full-width` | Whether to make the tabs full width | `boolean` | `false` |
13
- | `value` | `value` | The selected tab target value, defaults to the first tab | `string` | `undefined` |
61
+ | Property | Attribute | Description | Type | Default |
62
+ | ----------- | ------------ | ----------------------------------------------------------------------------- | --------------------- | ----------- |
63
+ | `disabled` | `disabled` | Disables the whole tab group (headings, mobile select, and segment pills). | `boolean` | `false` |
64
+ | `fullWidth` | `full-width` | Whether to make the tabs full width | `boolean` | `false` |
65
+ | `type` | `type` | Visual and layout variant: classic underline tabs or segment (pill) controls. | `"segment" \| "tabs"` | `'tabs'` |
66
+ | `value` | `value` | The selected tab target value, defaults to the first tab | `string` | `undefined` |
14
67
 
15
68
 
16
69
  ## Events
17
70
 
18
- | Event | Description | Type |
19
- | ----------- | ----------------------------------------------- | --------------------- |
20
- | `tabChange` | Event that emits the target of the selected tab | `CustomEvent<string>` |
71
+ | Event | Description | Type |
72
+ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
73
+ | `tabChange` | Emitted when the selected tab changes (click, keyboard, or mobile `xpl-select`). The event `detail` is the selected tab’s `target` string. Always dispatched from this host (including after heading clicks) so `event.target` is consistent for listeners on `xpl-tabs` or bubbling ancestors. | `CustomEvent<string>` |
21
74
 
22
75
 
23
76
  ## Slots
@@ -41,6 +94,7 @@ graph TD;
41
94
  xpl-select --> xpl-tag
42
95
  xpl-select --> xpl-icon
43
96
  xpl-select --> xpl-dropdown
97
+ xpl-tag --> xpl-icon
44
98
  xpl-dropdown --> xpl-dropdown-group
45
99
  xpl-dropdown --> xpl-dropdown-option
46
100
  xpl-dropdown-group --> xpl-dropdown-group
@@ -1,15 +1,385 @@
1
1
  # xpl-tag
2
2
 
3
- Tags represent a set of interactive keywords that help label, organize, and categorize objects. Tags can be added or removed from an object by the user. Unlike Badges, Tags are clickable, draggable, used in dropdowns, multi-select, search bars, etc..
3
+ Tags represent a set of interactive keywords that help label, organize, and categorize objects. Tags can be added or removed from an object by the user. Unlike Badges, Tags are clickable, used in dropdowns, multi-select, search bars, etc.
4
+
5
+ ## Usage Examples
6
+
7
+ ### Basic tag with dismiss
8
+
9
+ ```html
10
+ <xpl-tag>Label</xpl-tag>
11
+ ```
12
+
13
+ ### Small size variant
14
+
15
+ ```html
16
+ <xpl-tag size="sm">Small Tag</xpl-tag>
17
+ ```
18
+
19
+ ### Non-dismissible tag (no close button)
20
+
21
+ ```html
22
+ <xpl-tag dismissible="false">Static Tag</xpl-tag>
23
+ ```
24
+
25
+ ### Disabled tag
26
+
27
+ ```html
28
+ <xpl-tag disabled>Disabled Tag</xpl-tag>
29
+ ```
30
+
31
+ ### Handling events
32
+
33
+ > **⚠️ Deprecation Notice:** The `close` event is **deprecated** and will be removed in a future major version. Use `tagRemove` for dismiss button clicks only.
34
+
35
+ #### Why This Change?
36
+
37
+ The `close` event name conflicts with a **native HTML event** used by `<dialog>` elements. The React wrapper's `isCoveredByReact()` function detects `onclose` as a native event and passes handlers to React's synthetic event system — but React doesn't actually handle `close` events this way, so handlers silently fail in React applications.
38
+
39
+ **Why `tagRemove` works:** `ontagremove` is not a native event, so the wrapper correctly falls back to `addEventListener`.
40
+
41
+ #### Event Behavior
42
+
43
+ | Interaction | `close` (deprecated) | `tagRemove` (use this) |
44
+ |-------------|------------------------|------------------------|
45
+ | Dismiss (×) button clicked | ✅ Fires | ✅ Fires |
46
+ | Content clicked (non-draggable) | ✅ Fires | ❌ Does NOT fire |
47
+ | Content clicked (draggable) | ❌ Does NOT fire | ❌ Does NOT fire |
48
+ | Keyboard Space/Enter on content (non-draggable) | ✅ Fires | ❌ Does NOT fire |
49
+ | Keyboard Space/Enter on draggable label | ❌ Does NOT fire | ❌ Does NOT fire |
50
+
51
+ #### Migration Examples
52
+
53
+ **Before (deprecated):**
54
+ ```tsx
55
+ // React — this may silently fail!
56
+ <XplTag onClose={() => tag.remove()}>Label</XplTag>
57
+
58
+ // Vanilla JS
59
+ const tag = document.querySelector('xpl-tag');
60
+ tag.addEventListener('close', () => tag.remove());
61
+ ```
62
+
63
+ **After (recommended):**
64
+ ```tsx
65
+ // React — works reliably
66
+ <XplTag onTagRemove={() => tag.remove()}>Label</XplTag>
67
+
68
+ // Vanilla JS — same pattern, clearer intent
69
+ const tag = document.querySelector('xpl-tag');
70
+ tag.addEventListener('tagRemove', () => tag.remove());
71
+ ```
72
+
73
+ **React with Refs (if you must use deprecated `close`):**
74
+ ```tsx
75
+ import { useEffect, useRef } from 'react';
76
+ import { XplTag } from '@xplortech/apollo-react';
77
+
78
+ function MyComponent() {
79
+ const tagRef = useRef<HTMLElement | null>(null);
80
+
81
+ useEffect(() => {
82
+ const el = tagRef.current;
83
+ if (!el) return;
84
+
85
+ const handleClose = () => el.remove();
86
+ el.addEventListener('close', handleClose);
87
+ return () => el.removeEventListener('close', handleClose);
88
+ }, []);
89
+
90
+ return <XplTag ref={tagRef}>Label</XplTag>;
91
+ }
92
+ ```
93
+
94
+ ## Drag and drop
95
+
96
+ Tags support **native HTML5 drag and drop**. Set the boolean prop **`isDraggable`** (HTML attribute **`is-draggable`**) to enable dragging. Optionally set **`tag-id`** so `dataTransfer` and `tagDragStart` / `tagDragEnd` detail carry a stable id.
97
+
98
+ ### How it works (important for handlers)
99
+
100
+ - The **drag source** is an inner **label** element (a `div` with `role="button"`), not the `<xpl-tag>` host. Browsers do not start drags reliably on the custom element host; the **`is-draggable`** prop does **not** mirror the native host **`draggable`** attribute (see the `isDraggable` prop docs below).
101
+ - On **`dragstart`**, the component uses **`setDragImage`** so the floating preview (“ghost”) looks like the **whole tag** (label + dismiss control), not only the label strip.
102
+ - **Start the drag from the label text**, not from the dismiss (×) button.
103
+ - In container listeners, **`dragstart`** may bubble with `event.target` equal to that inner node. Resolve the tag with:
104
+
105
+ ```js
106
+ const tag = event.target instanceof Element ? event.target.closest('xpl-tag') : null;
107
+ ```
108
+
109
+ ### Making a tag draggable
110
+
111
+ ```html
112
+ <xpl-tag is-draggable>Draggable tag</xpl-tag>
113
+
114
+ <xpl-tag is-draggable tag-id="my-tag-1">Design</xpl-tag>
115
+ ```
116
+
117
+ ### Reordering tags within a container
118
+
119
+ ```html
120
+ <div id="tag-container" style="display: flex; flex-wrap: wrap; gap: 8px">
121
+ <xpl-tag tag-id="t1" is-draggable>Design</xpl-tag>
122
+ <xpl-tag tag-id="t2" is-draggable>Development</xpl-tag>
123
+ <xpl-tag tag-id="t3" is-draggable>QA</xpl-tag>
124
+ </div>
125
+
126
+ <script>
127
+ const container = document.getElementById('tag-container');
128
+ let draggedEl = null;
129
+
130
+ container.addEventListener('dragstart', (e) => {
131
+ const tag = e.target instanceof Element ? e.target.closest('xpl-tag') : null;
132
+ if (tag) draggedEl = tag;
133
+ });
134
+
135
+ container.addEventListener('dragend', () => {
136
+ draggedEl = null;
137
+ });
138
+
139
+ container.addEventListener('dragover', (e) => {
140
+ e.preventDefault();
141
+ if (!draggedEl) return;
142
+ const afterEl = getDragAfterElement(container, e.clientX);
143
+ if (afterEl == null) container.appendChild(draggedEl);
144
+ else container.insertBefore(draggedEl, afterEl);
145
+ });
146
+
147
+ function getDragAfterElement(container, x) {
148
+ const tags = [...container.querySelectorAll('xpl-tag')].filter((el) => el !== draggedEl);
149
+ return tags.reduce(
150
+ (closest, child) => {
151
+ const box = child.getBoundingClientRect();
152
+ const offset = x - box.left - box.width / 2;
153
+ return offset < 0 && offset > closest.offset ? { offset, element: child } : closest;
154
+ },
155
+ { offset: Number.NEGATIVE_INFINITY },
156
+ ).element;
157
+ }
158
+ </script>
159
+ ```
160
+
161
+ ### Dragging tags between containers
162
+
163
+ ```html
164
+ <div
165
+ class="drop-zone"
166
+ style="display: flex; gap: 8px; padding: 16px; border: 2px dashed var(--xpl-border-default); border-radius: 8px"
167
+ >
168
+ <xpl-tag tag-id="a1" is-draggable>Frontend</xpl-tag>
169
+ <xpl-tag tag-id="a2" is-draggable>Backend</xpl-tag>
170
+ </div>
171
+
172
+ <div
173
+ class="drop-zone"
174
+ style="
175
+ display: flex;
176
+ gap: 8px;
177
+ padding: 16px;
178
+ border: 2px dashed var(--xpl-border-default);
179
+ border-radius: 8px;
180
+ margin-top: 8px;
181
+ "
182
+ >
183
+ <xpl-tag tag-id="b1" is-draggable>DevOps</xpl-tag>
184
+ </div>
185
+
186
+ <script>
187
+ document.querySelectorAll('.drop-zone').forEach((zone) => {
188
+ let draggedEl = null;
189
+
190
+ zone.addEventListener('dragstart', (e) => {
191
+ const tag = e.target instanceof Element ? e.target.closest('xpl-tag') : null;
192
+ if (tag) draggedEl = tag;
193
+ });
194
+
195
+ zone.addEventListener('dragend', () => {
196
+ draggedEl = null;
197
+ });
198
+
199
+ zone.addEventListener('dragover', (e) => e.preventDefault());
200
+
201
+ zone.addEventListener('drop', (e) => {
202
+ e.preventDefault();
203
+ if (draggedEl && draggedEl.parentNode !== zone) zone.appendChild(draggedEl);
204
+ });
205
+ });
206
+ </script>
207
+ ```
208
+
209
+ ### `tagDragStart` / `tagDragEnd` events
210
+
211
+ The component emits **`tagDragStart`** and **`tagDragEnd`** (Stencil camelCase). They bubble and are composed.
212
+
213
+ ```html
214
+ <xpl-tag is-draggable tag-id="my-tag">Drag me</xpl-tag>
215
+
216
+ <script>
217
+ const tag = document.querySelector('xpl-tag[tag-id="my-tag"]');
218
+
219
+ tag.addEventListener('tagDragStart', (e) => {
220
+ const { tagId, content, originalEvent } = e.detail;
221
+ });
222
+
223
+ tag.addEventListener('tagDragEnd', (e) => {
224
+ const { dropped, tagId, originalEvent } = e.detail;
225
+ if (dropped) {
226
+ /* dropEffect was 'move' */
227
+ }
228
+ });
229
+ </script>
230
+ ```
231
+
232
+ ### React (`@xplortech/apollo-react`)
233
+
234
+ Ensure the app loads Apollo **defineCustomElements** (see the main React package docs). Import **`XplTag`** and use **`isDraggable`**, **`tagId`**, and children for the label.
235
+
236
+ `HTMLXplTagElement` is provided by Apollo’s Stencil typings (the same setup that types `defineCustomElements`). If your editor cannot resolve it, use `useRef<HTMLElement | null>(null)` and attach listeners on `ref.current`.
237
+
238
+ `XplTag` is a thin wrapper around the web component. Custom events use the same names as in the DOM (`tagDragStart`, `tagDragEnd`, `tagRemove`). If your TypeScript definitions use different prop names for listeners, attach them with a **ref** (always works):
239
+
240
+ ```tsx
241
+ import { useEffect, useRef } from 'react';
242
+ import { XplTag } from '@xplortech/apollo-react';
243
+
244
+ function TagBoard() {
245
+ const tagRef = useRef<HTMLXplTagElement | null>(null);
246
+
247
+ useEffect(() => {
248
+ const el = tagRef.current;
249
+ if (!el) return;
250
+
251
+ const onDragStart = (e: CustomEvent) => {
252
+ const { tagId, content } = e.detail;
253
+ };
254
+ const onDragEnd = (e: CustomEvent) => {
255
+ const { dropped, tagId } = e.detail;
256
+ };
257
+ const onTagRemove = () => {
258
+ el.remove(); // Handle dismiss button click
259
+ };
260
+
261
+ el.addEventListener('tagDragStart', onDragStart as EventListener);
262
+ el.addEventListener('tagDragEnd', onDragEnd as EventListener);
263
+ el.addEventListener('tagRemove', onTagRemove);
264
+ return () => {
265
+ el.removeEventListener('tagDragStart', onDragStart as EventListener);
266
+ el.removeEventListener('tagDragEnd', onDragEnd as EventListener);
267
+ el.removeEventListener('tagRemove', onTagRemove);
268
+ };
269
+ }, []);
270
+
271
+ return (
272
+ <XplTag ref={tagRef} isDraggable tagId="react-1">
273
+ Movable
274
+ </XplTag>
275
+ );
276
+ }
277
+ ```
278
+
279
+ Reorder / multi-container logic is unchanged: listen for native `dragstart`, `dragover`, `drop` on a React parent `div` (use refs) and call `closest('xpl-tag')` as in the HTML examples.
280
+
281
+ ### `DataTransfer` payload
282
+
283
+ | MIME type | Value | Purpose |
284
+ |-----------|-------|---------|
285
+ | `application/x-tag-id` | `tag-id` prop, if set | Identify the tag in drop handlers |
286
+ | `text/plain` | Trimmed text content of the tag | Fallback for external targets |
287
+
288
+ `effectAllowed` is set to `move`.
289
+
290
+ **`originalEvent` in `tagDragStart` / `tagDragEnd`:** the native `DragEvent` is included for convenience, but browsers may clear `dataTransfer` after the synchronous handler completes. Use `tagId`, `content`, and `dropped` from the custom event detail for anything needed after the current turn; only read `originalEvent.dataTransfer` synchronously in the listener.
291
+
292
+ ### Disabled tags
293
+
294
+ `disabled` wins: the tag is not draggable and keep using a normal `<button>` label (no HTML5 drag on the host).
295
+
296
+ ```html
297
+ <xpl-tag is-draggable disabled>Cannot drag</xpl-tag>
298
+ ```
299
+
300
+ ## Design Tokens
301
+
302
+ | Property | Token |
303
+ |----------|-------|
304
+ | Border (default) | `var(--xpl-border-accent-information)` |
305
+ | Border (disabled) | `var(--xpl-border-accent-subtle)` |
306
+ | Background (default) | `var(--xpl-background-surface-default)` |
307
+ | Background (hover) | `var(--xpl-background-surface-information-bold)` |
308
+ | Background (disabled) | `var(--xpl-background-surface-subtle)` |
309
+ | Text | `var(--xpl-text-strong)` |
310
+ | Text (disabled) | `var(--xpl-text-disabled)` |
311
+ | Dismiss icon | `var(--xpl-icon-default)` |
312
+ | Dismiss icon (disabled) | `var(--xpl-icon-disabled)` |
313
+ | Spacing (default) | `var(--xpl-space-2)` vertical, `var(--xpl-space-12)` horizontal |
314
+ | Spacing (small) | `var(--xpl-space-2)` vertical, `var(--xpl-space-8)` horizontal |
315
+ | Height (default) | `var(--xpl-size-150)` (24px) |
316
+ | Height (small) | `var(--xpl-size-125)` (20px) |
317
+ | Border radius | `var(--xpl-border-radius-button)` |
318
+ | Typography (default) | `var(--xpl-font-size-body)` / `var(--xpl-font-weight-normal)` |
319
+ | Typography (small) | `var(--xpl-font-size-callout)` / `var(--xpl-font-weight-semibold)` |
320
+ | Background (dragging) | `var(--xpl-background-surface-information-bold)` |
321
+ | Cursor (draggable) | `cursor: grab` → `cursor: grabbing` while dragging |
322
+
323
+ ## Accessibility
324
+
325
+ ### Keyboard Navigation
326
+
327
+ | Key | Action |
328
+ |-----|--------|
329
+ | Tab | Focus tag content or dismiss button |
330
+ | Enter/Space | Activate the focused control: on **dismiss**, emits deprecated `close` and `tagRemove`; on **content**, emits deprecated `close` only when the tag is **not** in drag mode (native `<button>` behavior). |
331
+
332
+ ### Drag mode
333
+
334
+ - With `isDraggable`, focus moves to the **label** (`role="button"`). Enter/Space on the label does **not** dismiss the tag (same as click on draggable content).
335
+ - Start drags from the **label**; the dismiss control remains a separate focus stop and is not the drag handle.
336
+
337
+ ### ARIA Attributes
338
+
339
+ - Dismiss button sets `aria-label` to `Dismiss` plus the host element’s `textContent` (trimmed), or the word `tag` when empty, so multiple tags stay distinguishable in screen readers
340
+ - When `disabled={true}`, buttons have `disabled` attribute preventing interaction
341
+ - When `isDraggable` is set, **`aria-grabbed`** on the **label** reflects drag state (`"false"` at rest, `"true"` while dragging)
342
+
343
+ ### Icon Mapping
344
+
345
+ | Element | Icon |
346
+ |---------|------|
347
+ | Dismiss button | `xmark` (size 10) |
348
+
349
+ ## Backward Compatibility (CSS class aliases)
350
+
351
+ The refactored component preserves legacy CSS classes so existing consumer selectors keep working:
352
+
353
+ | Legacy class | Element | Replaces / alias for |
354
+ |---|---|---|
355
+ | `xpl-tag-container` | Host (`<xpl-tag>`) | Old root class — now an alias; styles come from `.xpl-tag` |
356
+ | `xpl-tag` | Content `<button>` / `<div>` | Old content selector (`button.xpl-tag`) — kept so `.xpl-tag-container .xpl-tag` selectors match |
357
+ | `xpl-tag__close` | Dismiss `<button>` | Old dismiss selector — alias for `.xpl-tag__dismiss` |
358
+
359
+ These aliases will be removed in a future major version. New code should target `.xpl-tag`, `.xpl-tag__content`, and `.xpl-tag__dismiss`.
4
360
 
5
361
  <!-- Auto Generated Below -->
6
362
 
7
363
 
364
+ ## Properties
365
+
366
+ | Property | Attribute | Description | Type | Default |
367
+ | ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- | ----------- |
368
+ | `disabled` | `disabled` | Whether the tag is disabled | `boolean` | `false` |
369
+ | `dismissible` | `dismissible` | Whether the tag shows a dismiss button | `boolean` | `true` |
370
+ | `isDraggable` | `is-draggable` | When true, the tag label uses native HTML5 drag (the inner label is the drag source). Named `isDraggable` so the Stencil prop does not collide with the native `HTMLElement.draggable` API. `reflect: false` avoids syncing a `draggable` attribute onto the host; the inner label remains the drag source. Host `onDragStart` still suppresses stray native drags from host chrome. | `boolean` | `false` |
371
+ | `size` | `size` | The size of the tag | `"default" \| "sm"` | `'default'` |
372
+ | `tagId` | `tag-id` | Optional stable id for the tag. When set, it is included in `tagDragStart` / `tagDragEnd` detail and written to `dataTransfer` as `application/x-tag-id`. | `string` | `undefined` |
373
+
374
+
8
375
  ## Events
9
376
 
10
- | Event | Description | Type |
11
- | ------- | --------------------------------------------------------------------- | ------------------ |
12
- | `close` | Callback function that is called when tag text or `x` icon is clicked | `CustomEvent<any>` |
377
+ | Event | Description | Type |
378
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- |
379
+ | `close` | <span style="color:red">**[DEPRECATED]**</span> Use `tagRemove` for dismiss button clicks only. The `close` event will be removed in a future major version.<br/><br/>Emitted when the tag is dismissed (content click when `isDraggable` is false, or dismiss button click). | `CustomEvent<void>` |
380
+ | `tagDragEnd` | Emitted when a drag operation ends. `event.detail`: `{ tagId?, dropped, originalEvent }`. `dropped` is `true` when `dataTransfer.dropEffect === 'move'`. `originalEvent` is the native `DragEvent`; browsers may clear `dataTransfer` after the synchronous handler runs — do not read `originalEvent.dataTransfer.getData(...)` asynchronously. | `CustomEvent<TagDragEndDetail>` |
381
+ | `tagDragStart` | Emitted when a drag operation starts (native `dragstart` on the inner label). `event.detail`: `{ tagId?, content, originalEvent }`. `originalEvent` is the native `DragEvent`; browsers may clear `dataTransfer` after the synchronous handler runs — do not read `originalEvent.dataTransfer.getData(...)` asynchronously. | `CustomEvent<TagDragStartDetail>` |
382
+ | `tagRemove` | Emitted when the tag dismiss (×) button is clicked | `CustomEvent<void>` |
13
383
 
14
384
 
15
385
  ## Dependencies
@@ -18,9 +388,14 @@ Tags represent a set of interactive keywords that help label, organize, and cate
18
388
 
19
389
  - [xpl-select](../xpl-select)
20
390
 
391
+ ### Depends on
392
+
393
+ - [xpl-icon](../xpl-icon)
394
+
21
395
  ### Graph
22
396
  ```mermaid
23
397
  graph TD;
398
+ xpl-tag --> xpl-icon
24
399
  xpl-select --> xpl-tag
25
400
  style xpl-tag fill:#f9f,stroke:#333,stroke-width:4px
26
401
  ```