@xplortech/apollo-core 2.7.0 → 2.7.1

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 (263) hide show
  1. package/.typings/apollo-components.html-data.json +97 -180
  2. package/build/style.css +220 -951
  3. package/dist/apollo-core/apollo-core.css +5 -35
  4. package/dist/apollo-core/apollo-core.esm.js +1 -1
  5. package/dist/apollo-core/{p-6c956d4e.entry.js → p-0bf50890.entry.js} +1 -1
  6. package/dist/apollo-core/p-1947e7a8.entry.js +1 -0
  7. package/dist/apollo-core/p-27928cb0.entry.js +1 -0
  8. package/dist/apollo-core/p-34438721.entry.js +1 -0
  9. package/dist/apollo-core/p-35c2f72d.entry.js +1 -0
  10. package/dist/apollo-core/p-368c81f1.entry.js +1 -0
  11. package/dist/apollo-core/p-36ba29da.entry.js +1 -0
  12. package/dist/apollo-core/p-406b27a8.entry.js +1 -0
  13. package/dist/apollo-core/p-5d63b4ce.entry.js +1 -0
  14. package/dist/apollo-core/{p-7eb86c63.entry.js → p-6a15f1e0.entry.js} +1 -1
  15. package/dist/apollo-core/p-8d692d05.entry.js +1 -0
  16. package/dist/apollo-core/{p-28d12fd3.entry.js → p-b61d7952.entry.js} +1 -1
  17. package/dist/apollo-core/{p-084d26ed.entry.js → p-ca127ee8.entry.js} +1 -1
  18. package/dist/apollo-core/p-d1c9c233.entry.js +1 -0
  19. package/dist/apollo-core/p-dc205893.entry.js +1 -0
  20. package/dist/apollo-core/p-e2a5d41c.entry.js +1 -0
  21. package/dist/cjs/apollo-core.cjs.js +1 -1
  22. package/dist/cjs/index-BQ97-AWw.js +10 -2
  23. package/dist/cjs/loader.cjs.js +1 -1
  24. package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
  25. package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
  26. package/dist/cjs/{xpl-avatar_61.cjs.entry.js → xpl-avatar_54.cjs.entry.js} +238 -1683
  27. package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
  28. package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
  29. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
  30. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
  31. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +1 -1
  32. package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
  33. package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
  34. package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
  35. package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
  36. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +57 -0
  37. package/dist/cjs/xpl-table-header.cjs.entry.js +14 -0
  38. package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
  39. package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
  40. package/dist/collection/collection-manifest.json +2 -7
  41. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  42. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  43. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  44. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  45. package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
  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 +1 -1
  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 +25 -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 +77 -7
  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 +53 -46
  67. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  68. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  69. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  70. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  71. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  72. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
  73. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  74. package/dist/collection/components/xpl-input/xpl-input.js +2 -2
  75. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  76. package/dist/collection/components/xpl-list/xpl-list.js +2 -2
  77. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  78. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  79. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  80. package/dist/collection/components/xpl-pagination/pagination.stories.js +18 -0
  81. package/dist/collection/components/xpl-pagination/xpl-pagination.js +7 -3
  82. package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
  83. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  84. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  85. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
  86. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  87. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  88. package/dist/collection/components/xpl-select/xpl-select.js +58 -6
  89. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  90. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  91. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  92. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  93. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
  94. package/dist/collection/components/xpl-table/table.stories.js +67 -319
  95. package/dist/collection/components/xpl-table/xpl-table.js +151 -1456
  96. package/dist/collection/components/xpl-table-header/table-header.stories.js +126 -0
  97. package/dist/collection/components/xpl-table-header/xpl-table-header.js +7 -0
  98. package/dist/collection/components/xpl-table-header-cell/table-header-cell.stories.js +75 -0
  99. package/dist/collection/components/xpl-table-header-cell/xpl-table-header-cell.js +188 -0
  100. package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
  101. package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
  102. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  103. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  104. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  105. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  106. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
  107. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +2 -2
  108. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +5 -5
  109. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  110. package/dist/components/index.js +1 -1
  111. package/dist/components/xpl-accordion.js +1 -1
  112. package/dist/components/xpl-application-shell.js +1 -1
  113. package/dist/components/xpl-backdrop2.js +1 -1
  114. package/dist/components/xpl-badge2.js +1 -1
  115. package/dist/components/xpl-banner.js +1 -1
  116. package/dist/components/xpl-breadcrumb-item.js +1 -1
  117. package/dist/components/xpl-breadcrumbs.js +1 -1
  118. package/dist/components/xpl-button-row.js +1 -1
  119. package/dist/components/xpl-button2.js +1 -1
  120. package/dist/components/xpl-calendar.js +1 -1
  121. package/dist/components/xpl-checkbox2.js +1 -1
  122. package/dist/components/xpl-choicelist.js +1 -1
  123. package/dist/components/xpl-content-area.js +1 -1
  124. package/dist/components/xpl-dashboard.js +1 -1
  125. package/dist/components/xpl-data-card.js +1 -1
  126. package/dist/components/xpl-divider2.js +1 -1
  127. package/dist/components/xpl-dropdown-group2.js +1 -1
  128. package/dist/components/xpl-dropdown-heading2.js +1 -1
  129. package/dist/components/xpl-dropdown-option2.js +1 -1
  130. package/dist/components/xpl-dropdown2.js +1 -1
  131. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  132. package/dist/components/xpl-dynamic-table-row.js +1 -1
  133. package/dist/components/xpl-dynamic-table.js +1 -1
  134. package/dist/components/xpl-grid-item.js +1 -1
  135. package/dist/components/xpl-grid.js +1 -1
  136. package/dist/components/xpl-header-accordion.js +1 -1
  137. package/dist/components/xpl-icon2.js +1 -1
  138. package/dist/components/xpl-input-date2.js +1 -1
  139. package/dist/components/xpl-input-file2.js +1 -1
  140. package/dist/components/xpl-input-search2.js +1 -1
  141. package/dist/components/xpl-input2.js +1 -1
  142. package/dist/components/xpl-large-card.js +1 -1
  143. package/dist/components/xpl-list.js +1 -1
  144. package/dist/components/xpl-main-nav.js +1 -1
  145. package/dist/components/xpl-modal.js +1 -1
  146. package/dist/components/xpl-nav-header-menu.js +1 -1
  147. package/dist/components/xpl-nav-item.js +1 -1
  148. package/dist/components/xpl-pagination.js +1 -1
  149. package/dist/components/xpl-panel.js +1 -1
  150. package/dist/components/xpl-popover2.js +1 -1
  151. package/dist/components/xpl-progress-bar.js +1 -1
  152. package/dist/components/xpl-progress-indicator.js +1 -1
  153. package/dist/components/xpl-radio2.js +1 -1
  154. package/dist/components/xpl-secondary-nav.js +1 -1
  155. package/dist/components/xpl-select2.js +1 -1
  156. package/dist/components/xpl-side-nav-item.js +1 -1
  157. package/dist/components/xpl-side-nav.js +1 -1
  158. package/dist/components/xpl-skeleton.js +1 -1
  159. package/dist/components/xpl-slideout.js +1 -1
  160. package/dist/components/xpl-tab-panel.js +1 -1
  161. package/dist/components/xpl-table-header-cell.js +1 -1
  162. package/dist/components/xpl-table-header.js +1 -1
  163. package/dist/components/xpl-table.js +1 -1
  164. package/dist/components/xpl-tabs.js +1 -1
  165. package/dist/components/xpl-tag2.js +1 -1
  166. package/dist/components/xpl-toast.js +1 -1
  167. package/dist/components/xpl-toggle.js +1 -1
  168. package/dist/components/xpl-toolbar.js +1 -1
  169. package/dist/components/xpl-tooltip2.js +1 -1
  170. package/dist/components/xpl-top-nav-item2.js +1 -1
  171. package/dist/components/xpl-top-nav.js +1 -1
  172. package/dist/components/xpl-utility-bar.js +1 -1
  173. package/dist/docs/xpl-checkbox/readme.md +5 -7
  174. package/dist/docs/xpl-dropdown/readme.md +13 -11
  175. package/dist/docs/xpl-dynamic-table/readme.md +19 -22
  176. package/dist/docs/xpl-dynamic-table-cell/readme.md +18 -20
  177. package/dist/docs/xpl-dynamic-table-row/readme.md +19 -21
  178. package/dist/docs/xpl-icon/readme.md +1 -1
  179. package/dist/docs/xpl-select/readme.md +17 -15
  180. package/dist/docs/xpl-table/readme.md +46 -110
  181. package/dist/docs/{xpl-table/xpl-table-header → xpl-table-header}/readme.md +13 -13
  182. package/dist/docs/xpl-table-header-cell/readme.md +47 -0
  183. package/dist/esm/apollo-core.js +1 -1
  184. package/dist/esm/index-C7bgJs6C.js +10 -2
  185. package/dist/esm/loader.js +1 -1
  186. package/dist/esm/xpl-accordion.entry.js +2 -2
  187. package/dist/esm/xpl-application-shell.entry.js +1 -1
  188. package/dist/esm/{xpl-avatar_61.entry.js → xpl-avatar_54.entry.js} +239 -1677
  189. package/dist/esm/xpl-button-row.entry.js +1 -1
  190. package/dist/esm/xpl-calendar.entry.js +1 -1
  191. package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
  192. package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
  193. package/dist/esm/xpl-dynamic-table.entry.js +1 -1
  194. package/dist/esm/xpl-grid-item.entry.js +1 -1
  195. package/dist/esm/xpl-grid.entry.js +1 -1
  196. package/dist/esm/xpl-large-card.entry.js +1 -1
  197. package/dist/esm/xpl-main-nav.entry.js +1 -1
  198. package/dist/esm/xpl-table-header-cell.entry.js +55 -0
  199. package/dist/esm/xpl-table-header.entry.js +12 -0
  200. package/dist/esm/xpl-toggle.entry.js +3 -3
  201. package/dist/esm/xpl-toolbar.entry.js +2 -2
  202. package/dist/types/components/xpl-checkbox/xpl-checkbox.d.ts +2 -2
  203. package/dist/types/components/xpl-dropdown/xpl-dropdown.d.ts +5 -0
  204. package/dist/types/components/xpl-header-accordion/xpl-header-accordion.d.ts +10 -9
  205. package/dist/types/components/xpl-pagination/pagination.stories.d.ts +13 -0
  206. package/dist/types/components/xpl-select/xpl-select.d.ts +3 -0
  207. package/dist/types/components/xpl-table/table.stories.d.ts +19 -161
  208. package/dist/types/components/xpl-table/xpl-table.d.ts +21 -123
  209. package/dist/types/components/{xpl-table/xpl-table-header → xpl-table-header}/table-header.stories.d.ts +16 -13
  210. package/dist/types/components/{xpl-table/xpl-table-header-cell → xpl-table-header-cell}/table-header-cell.stories.d.ts +20 -24
  211. package/dist/types/components/xpl-table-header-cell/xpl-table-header-cell.d.ts +13 -0
  212. package/dist/types/components.d.ts +89 -391
  213. package/package.json +10 -1
  214. package/dist/apollo-core/p-146d5d55.entry.js +0 -1
  215. package/dist/apollo-core/p-16742606.entry.js +0 -1
  216. package/dist/apollo-core/p-3eb5eb7c.entry.js +0 -1
  217. package/dist/apollo-core/p-4882f0bd.entry.js +0 -1
  218. package/dist/apollo-core/p-64b34268.entry.js +0 -1
  219. package/dist/apollo-core/p-71b75f36.entry.js +0 -1
  220. package/dist/apollo-core/p-84254a24.entry.js +0 -1
  221. package/dist/apollo-core/p-9f2a0321.entry.js +0 -1
  222. package/dist/apollo-core/p-cde83ab0.entry.js +0 -1
  223. package/dist/apollo-core/p-e7363036.entry.js +0 -1
  224. package/dist/collection/components/xpl-table/utils/move-row-dom.js +0 -50
  225. package/dist/collection/components/xpl-table/utils/table-internal.js +0 -58
  226. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +0 -7
  227. package/dist/collection/components/xpl-table/xpl-table-cell/xpl-table-cell.js +0 -155
  228. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +0 -7
  229. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +0 -37
  230. package/dist/collection/components/xpl-table/xpl-table-header/table-header.stories.js +0 -131
  231. package/dist/collection/components/xpl-table/xpl-table-header/xpl-table-header.js +0 -7
  232. package/dist/collection/components/xpl-table/xpl-table-header-cell/table-header-cell.stories.js +0 -105
  233. package/dist/collection/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.js +0 -402
  234. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +0 -121
  235. package/dist/components/lifecycle.js +0 -1
  236. package/dist/components/xpl-table-body.d.ts +0 -11
  237. package/dist/components/xpl-table-body.js +0 -1
  238. package/dist/components/xpl-table-cell.d.ts +0 -11
  239. package/dist/components/xpl-table-cell.js +0 -1
  240. package/dist/components/xpl-table-cell2.js +0 -1
  241. package/dist/components/xpl-table-footer-cell.d.ts +0 -11
  242. package/dist/components/xpl-table-footer-cell.js +0 -1
  243. package/dist/components/xpl-table-footer-cell2.js +0 -1
  244. package/dist/components/xpl-table-footer.d.ts +0 -11
  245. package/dist/components/xpl-table-footer.js +0 -1
  246. package/dist/components/xpl-table-header-cell2.js +0 -1
  247. package/dist/components/xpl-table-row.d.ts +0 -11
  248. package/dist/components/xpl-table-row.js +0 -1
  249. package/dist/docs/xpl-table/xpl-table-body/readme.md +0 -10
  250. package/dist/docs/xpl-table/xpl-table-cell/readme.md +0 -33
  251. package/dist/docs/xpl-table/xpl-table-footer/readme.md +0 -10
  252. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +0 -30
  253. package/dist/docs/xpl-table/xpl-table-header-cell/readme.md +0 -66
  254. package/dist/docs/xpl-table/xpl-table-row/readme.md +0 -19
  255. package/dist/types/components/xpl-table/utils/move-row-dom.d.ts +0 -3
  256. package/dist/types/components/xpl-table/utils/table-internal.d.ts +0 -8
  257. package/dist/types/components/xpl-table/xpl-table-body/xpl-table-body.d.ts +0 -3
  258. package/dist/types/components/xpl-table/xpl-table-cell/xpl-table-cell.d.ts +0 -11
  259. package/dist/types/components/xpl-table/xpl-table-footer/xpl-table-footer.d.ts +0 -3
  260. package/dist/types/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.d.ts +0 -4
  261. package/dist/types/components/xpl-table/xpl-table-header-cell/xpl-table-header-cell.d.ts +0 -32
  262. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +0 -13
  263. /package/dist/types/components/{xpl-table/xpl-table-header → xpl-table-header}/xpl-table-header.d.ts +0 -0
@@ -1,107 +1,19 @@
1
1
  import { v4 as uuid } from "uuid";
2
- const SLOT_TABLE_WRAPPER_STYLE = 'box-sizing: border-box; display: block; width: 100%; max-width: min(100vw - 2rem, 960px); overflow: auto;';
3
- const PLACEHOLDER_AVATAR_SRC = 'https://placebear.com/128/128';
4
2
  export default {
5
3
  title: 'Components/Table',
4
+ argTypes: {
5
+ freeze: { control: { type: 'boolean' } },
6
+ multiselect: { control: { type: 'boolean' } },
7
+ striped: { control: { type: 'boolean' } },
8
+ columns: { control: { type: 'object' } },
9
+ data: { control: { type: 'object' } },
10
+ footer: { control: { type: 'object' } },
11
+ isSortable: { control: { type: 'boolean' } },
12
+ sortableColumns: { control: { type: 'object' } },
13
+ },
6
14
  parameters: {
7
- controls: {
8
- sort: 'none',
9
- },
10
15
  actions: {
11
- handles: ['tableSelect', 'sortChanged', 'rowSelectionChange', 'rowOrderChange'],
12
- },
13
- docs: {
14
- description: {
15
- component: 'Use **Slot based** for compositional `xpl-table` (`xpl-table-header`, `xpl-table-body`, …). Use **Legacy** for the deprecated `columns` / `data` API (native `<table>`). Compositional mode: `selectable`, `row-reorderable`, toolbar slots, and **header sort** (`sortable` on `xpl-table-header-cell` + `sortChanged` on the table — the story script reorders rows for demo only).',
16
- },
17
- },
18
- },
19
- argTypes: {
20
- type: {
21
- name: 'Type',
22
- control: { type: 'select' },
23
- options: ['Legacy', 'Slot based'],
24
- table: { category: '00 — Mode' },
25
- },
26
- freeze: {
27
- control: { type: 'boolean' },
28
- table: { category: 'Shared' },
29
- },
30
- striped: {
31
- control: { type: 'boolean' },
32
- table: { category: 'Shared' },
33
- },
34
- multiselect: {
35
- control: { type: 'boolean' },
36
- if: { arg: 'type', eq: 'Legacy' },
37
- table: { category: '01 — Legacy' },
38
- },
39
- columns: {
40
- control: { type: 'object' },
41
- if: { arg: 'type', eq: 'Legacy' },
42
- table: { category: '01 — Legacy' },
43
- },
44
- data: {
45
- control: { type: 'object' },
46
- if: { arg: 'type', eq: 'Legacy' },
47
- table: { category: '01 — Legacy' },
48
- },
49
- footer: {
50
- control: { type: 'object' },
51
- if: { arg: 'type', eq: 'Legacy' },
52
- table: { category: '01 — Legacy' },
53
- },
54
- isSortable: {
55
- control: { type: 'boolean' },
56
- if: { arg: 'type', eq: 'Legacy' },
57
- table: { category: '01 — Legacy' },
58
- },
59
- sortableColumns: {
60
- control: { type: 'object' },
61
- if: { arg: 'type', eq: 'Legacy' },
62
- table: { category: '01 — Legacy' },
63
- },
64
- selectedValues: {
65
- control: { type: 'object' },
66
- if: { arg: 'type', eq: 'Legacy' },
67
- description: '**Legacy only** (`columns` / `data` + `multiselect`). Per-row checkbox values. Not used in slot-based mode.',
68
- table: { category: '01 — Legacy' },
69
- },
70
- tableLabel: {
71
- control: 'text',
72
- if: { arg: 'type', eq: 'Slot based' },
73
- description: 'Sets `label` / `aria-label` on `xpl-table`.',
74
- table: { category: '02 — Slot: Table' },
75
- },
76
- showSelectable: {
77
- control: 'boolean',
78
- if: { arg: 'type', eq: 'Slot based' },
79
- description: 'Adds `selectable` and a checkbox column (you must author header + row checkboxes).',
80
- table: { category: '02 — Slot: Table' },
81
- },
82
- showRowReorderable: {
83
- control: 'boolean',
84
- if: { arg: 'type', eq: 'Slot based' },
85
- description: 'Adds `row-reorderable`; Apollo injects the reorder column (grip).',
86
- table: { category: '02 — Slot: Table' },
87
- },
88
- showToolbar: {
89
- control: 'boolean',
90
- if: { arg: 'type', eq: 'Slot based' },
91
- description: 'Renders `slot="toolbar-actions-left"` on the bulk toolbar. Requires **`showSelectable`**: without `selectable`, those slots are not rendered by `xpl-table` and toolbar nodes would break the grid — the story skips them when selection is off.',
92
- table: { category: '02 — Slot: Table' },
93
- },
94
- sortableNameColumn: {
95
- control: 'boolean',
96
- if: { arg: 'type', eq: 'Slot based' },
97
- description: 'Name column uses `sortable` + `sort-key="name"`. Compositional tables emit `sortChanged` only; the story script reorders rows by the active sort-key in `event.detail` (same slug rules as `xpl-table`).',
98
- table: { category: '02 — Slot: Table' },
99
- },
100
- showRichCells: {
101
- control: 'boolean',
102
- if: { arg: 'type', eq: 'Slot based' },
103
- description: 'Name column shows avatar + caption (like the index.html rich demo).',
104
- table: { category: '03 — Slot: Row content' },
16
+ handles: ['tableSelect', 'sortChanged'],
105
17
  },
106
18
  },
107
19
  };
@@ -129,7 +41,7 @@ const selectedValuesDefault = [
129
41
  ];
130
42
  const sortableColumnsDefault = [false, false, false, false, false, false];
131
43
  const footerDefault = [['Total', '676.5', '159.75', 'All Seasons', '26', '106']];
132
- const legacyScript = ({ columns, data, footer, id, selectedValues, isSortable, sortableColumns, }) => `
44
+ const script = ({ columns, data, footer, id, selectedValues, isSortable, sortableColumns }) => `
133
45
  (function() {
134
46
  const table = document.getElementById("${id}");
135
47
  table.columns = ${JSON.stringify(columns)};
@@ -140,206 +52,8 @@ const legacyScript = ({ columns, data, footer, id, selectedValues, isSortable, s
140
52
  table.isSortable = ${isSortable};
141
53
  })();
142
54
  `;
143
- function slotBasedSortScript(tableId) {
144
- const idLiteral = JSON.stringify(tableId);
145
- return `
146
- <script>
147
- (function () {
148
- const table = document.getElementById(${idLiteral});
149
- if (!table) return;
150
-
151
- function sortKeySlug(h, columnIndex) {
152
- var sk = h.getAttribute('sort-key');
153
- var lab = (h.getAttribute('label') || '').trim();
154
- var raw = (sk || lab || '').trim();
155
- if (raw.length > 0) return raw.replace(/ /g, '-').toLowerCase();
156
- return 'column-' + columnIndex;
157
- }
158
-
159
- table.addEventListener('sortChanged', function (e) {
160
- const detail = e.detail;
161
- if (!detail || typeof detail !== 'object') return;
162
-
163
- var activeKey = null;
164
- var dir = null;
165
- Object.keys(detail).forEach(function (k) {
166
- var v = detail[k];
167
- if (v === 'asc' || v === 'desc') {
168
- activeKey = k;
169
- dir = v;
170
- }
171
- });
172
-
173
- const body = table.querySelector('xpl-table-body');
174
- const headerRow = table.querySelector('xpl-table-header xpl-table-row');
175
- if (!body || !headerRow) return;
176
- const headers = Array.from(headerRow.querySelectorAll('xpl-table-header-cell'));
177
- const rows = Array.from(body.querySelectorAll('xpl-table-row'));
178
-
179
- function defaultOrder(row) {
180
- const rid = row.getAttribute('row-id') || '';
181
- const m = rid.match(/-(\\d+)$/);
182
- return m ? parseInt(m[1], 10) : 0;
183
- }
184
-
185
- if (!activeKey) {
186
- rows.sort(function (a, b) {
187
- return defaultOrder(a) - defaultOrder(b);
188
- });
189
- rows.forEach(function (r) {
190
- body.appendChild(r);
191
- });
192
- return;
193
- }
194
-
195
- var sortColIdx = headers.findIndex(function (h, i) {
196
- return sortKeySlug(h, i) === activeKey;
197
- });
198
- if (sortColIdx < 0) return;
199
-
200
- function rowKey(row) {
201
- const cells = row.querySelectorAll('xpl-table-cell');
202
- const c = cells[sortColIdx];
203
- return (c && c.textContent ? c.textContent : '')
204
- .replace(/\\s+/g, ' ')
205
- .trim()
206
- .toLowerCase();
207
- }
208
- rows.sort(function (a, b) {
209
- const cmp = rowKey(a).localeCompare(rowKey(b));
210
- return dir === 'asc' ? cmp : -cmp;
211
- });
212
- rows.forEach(function (r) {
213
- body.appendChild(r);
214
- });
215
- });
216
- })();
217
- </script>`;
218
- }
219
- function slotBasedNameCell(showRichCells, rowIndex, name) {
220
- if (!showRichCells) {
221
- return `<xpl-table-cell>${name}</xpl-table-cell>`;
222
- }
223
- return `<xpl-table-cell>
224
- <div style="display: flex; align-items: center; gap: var(--xpl-space-12);">
225
- <xpl-avatar name="${name}" src="${PLACEHOLDER_AVATAR_SRC}" size="sm"></xpl-avatar>
226
- <div style="display: flex; flex-direction: column; gap: var(--xpl-space-4); min-width: 0;">
227
- <span style="font-weight: var(--xpl-font-weight-semibold)">${name}</span>
228
- <span class="xpl-text-caption">player${rowIndex}@example.com</span>
229
- </div>
230
- </div>
231
- </xpl-table-cell>`;
232
- }
233
- function renderSlotBasedTable(props) {
234
- const tableId = uuid();
235
- const label = props.tableLabel != null && String(props.tableLabel).trim() !== ''
236
- ? String(props.tableLabel)
237
- : 'Team directory';
238
- const labelAttr = ` label="${label.replace(/"/g, '&quot;')}"`;
239
- const attrs = [
240
- ` id="${tableId}"`,
241
- labelAttr,
242
- props.striped ? ' striped' : '',
243
- props.freeze ? ' freeze' : '',
244
- props.showSelectable ? ' selectable' : '',
245
- props.showRowReorderable ? ' row-reorderable' : '',
246
- ].join('');
247
- const toolbar = props.showSelectable && props.showToolbar
248
- ? `
249
- <div slot="toolbar-actions-left" style="display: inline-flex; align-items: center; gap: var(--xpl-space-8)">
250
- <xpl-button size="sm" variant="secondary" type="button">Bulk action</xpl-button>
251
- </div>`
252
- : '';
253
- const headerCheckbox = props.showSelectable
254
- ? `<xpl-table-header-cell type="checkbox" width="48"></xpl-table-header-cell>`
255
- : '';
256
- const nameSort = props.sortableNameColumn ? ' sortable sort-key="name"' : '';
257
- const names = ['Boston Rob Mariano', 'Parvati Shallow', 'Ozzy Lusth'];
258
- const bodyRows = [1, 2, 3]
259
- .map((i) => {
260
- var _a;
261
- const rowCheckbox = props.showSelectable
262
- ? `<xpl-table-cell><xpl-checkbox></xpl-checkbox></xpl-table-cell>`
263
- : '';
264
- const name = (_a = names[i - 1]) !== null && _a !== void 0 ? _a : `Player ${i}`;
265
- return `
266
- <xpl-table-row row-id="story-row-${i}">
267
- ${rowCheckbox}
268
- ${slotBasedNameCell(Boolean(props.showRichCells), i, name)}
269
- <xpl-table-cell>${90 + i * 7}</xpl-table-cell>
270
- <xpl-table-cell>S${10 + i}, S${20 + i}</xpl-table-cell>
271
- </xpl-table-row>`;
272
- })
273
- .join('');
274
- return `
275
- <div style="${SLOT_TABLE_WRAPPER_STYLE}">
276
- <xpl-table${attrs}>
277
- ${toolbar}
278
- <xpl-table-header>
279
- <xpl-table-row>
280
- ${headerCheckbox}
281
- <xpl-table-header-cell label="Name"${nameSort} width="280"></xpl-table-header-cell>
282
- <xpl-table-header-cell label="Days" align="right" width="96"></xpl-table-header-cell>
283
- <xpl-table-header-cell label="Seasons"></xpl-table-header-cell>
284
- </xpl-table-row>
285
- </xpl-table-header>
286
- <xpl-table-body>
287
- ${bodyRows}
288
- </xpl-table-body>
289
- </xpl-table>
290
- </div>${slotBasedSortScript(tableId)}`;
291
- }
292
- const slotBasedExample = `<div style="${SLOT_TABLE_WRAPPER_STYLE}">
293
- <xpl-table label="Team directory" selectable striped freeze row-reorderable>
294
- <div slot="toolbar-actions-left" style="display: inline-flex; align-items: center; gap: var(--xpl-space-8)">
295
- <xpl-button size="sm" variant="secondary" type="button">Bulk action</xpl-button>
296
- </div>
297
- <xpl-table-header>
298
- <xpl-table-row>
299
- <xpl-table-header-cell type="checkbox" width="48"></xpl-table-header-cell>
300
- <xpl-table-header-cell label="Name" sortable sort-key="name" width="280"></xpl-table-header-cell>
301
- <xpl-table-header-cell label="Days" align="right" width="96"></xpl-table-header-cell>
302
- <xpl-table-header-cell label="Seasons"></xpl-table-header-cell>
303
- </xpl-table-row>
304
- </xpl-table-header>
305
- <xpl-table-body>
306
- <xpl-table-row row-id="example-1">
307
- <xpl-table-cell><xpl-checkbox></xpl-checkbox></xpl-table-cell>
308
- <xpl-table-cell>
309
- <div style="display: flex; align-items: center; gap: var(--xpl-space-12);">
310
- <xpl-avatar name="Boston Rob" src="https://placebear.com/128/128" size="sm"></xpl-avatar>
311
- <div style="display: flex; flex-direction: column; gap: var(--xpl-space-4); min-width: 0;">
312
- <span style="font-weight: var(--xpl-font-weight-semibold)">Boston Rob Mariano</span>
313
- <span class="xpl-text-caption">boston@example.com</span>
314
- </div>
315
- </div>
316
- </xpl-table-cell>
317
- <xpl-table-cell align="right">152</xpl-table-cell>
318
- <xpl-table-cell>S4, S8, S20</xpl-table-cell>
319
- </xpl-table-row>
320
- <xpl-table-row row-id="example-2">
321
- <xpl-table-cell><xpl-checkbox></xpl-checkbox></xpl-table-cell>
322
- <xpl-table-cell>
323
- <div style="display: flex; align-items: center; gap: var(--xpl-space-12);">
324
- <xpl-avatar name="Parvati Shallow" size="sm" color="green"></xpl-avatar>
325
- <div style="display: flex; flex-direction: column; gap: var(--xpl-space-4); min-width: 0;">
326
- <span style="font-weight: var(--xpl-font-weight-semibold)">Parvati Shallow</span>
327
- <span class="xpl-text-caption">parvati@example.com</span>
328
- </div>
329
- </div>
330
- </xpl-table-cell>
331
- <xpl-table-cell align="right">149</xpl-table-cell>
332
- <xpl-table-cell>S13, S16, S20</xpl-table-cell>
333
- </xpl-table-row>
334
- </xpl-table-body>
335
- </xpl-table>
336
- </div>`;
337
- export const Table = (props) => {
338
- if (props.type === 'Slot based') {
339
- return renderSlotBasedTable(props);
340
- }
55
+ export const Table = ({ columns, data, footer, freeze, multiselect, selectedValues, striped, isSortable, sortableColumns, }) => {
341
56
  const id = uuid();
342
- const { columns, data, footer, freeze, multiselect, selectedValues, striped, isSortable, sortableColumns, } = props;
343
57
  let attrs = '';
344
58
  if (freeze)
345
59
  attrs += ' freeze';
@@ -354,43 +68,77 @@ export const Table = (props) => {
354
68
  <xpl-table id="${id}"${attrs}></xpl-table>
355
69
  </div>
356
70
  <script>
357
- ${legacyScript({
358
- id,
359
- columns,
360
- data,
361
- footer,
362
- selectedValues,
363
- sortableColumns,
364
- isSortable,
365
- })}
71
+ ${script({ id, columns, data, footer, selectedValues, sortableColumns, isSortable })}
366
72
  </script>
367
73
  `;
368
74
  };
369
75
  Table.args = {
370
- type: 'Slot based',
371
76
  freeze: true,
372
- striped: true,
373
77
  multiselect: false,
78
+ striped: false,
374
79
  columns: columnsDefault,
375
80
  data: dataDefault,
376
81
  footer: footerDefault,
377
82
  selectedValues: selectedValuesDefault,
378
83
  isSortable: false,
379
84
  sortableColumns: sortableColumnsDefault,
380
- tableLabel: 'Team directory',
381
- showSelectable: true,
382
- showRowReorderable: true,
383
- showToolbar: true,
384
- sortableNameColumn: true,
385
- showRichCells: true,
386
85
  };
387
86
  Table.parameters = {
388
- layout: 'padded',
87
+ layout: 'centered',
389
88
  'web-component': {
390
- render: [slotBasedExample],
89
+ render: (({ freeze, multiselect, striped }) => {
90
+ let attrs = '';
91
+ if (freeze)
92
+ attrs += ' freeze';
93
+ if (multiselect)
94
+ attrs += ' multiselect';
95
+ if (striped)
96
+ attrs += ' striped';
97
+ return [
98
+ `<xpl-table${attrs}></xpl-table>`,
99
+ `table.columns = [
100
+ "Name", "Total Days Played", ...
101
+ ];`,
102
+ `table.data = [
103
+ ["Boston Rob Mariano", ...],
104
+ ["Parvati Shallow", ...],
105
+ ...
106
+ ];`,
107
+ ];
108
+ })(Table.args),
391
109
  },
392
110
  html: {
393
- render: slotBasedExample,
111
+ render: (({ freeze, striped }) => {
112
+ let className = 'xpl-table';
113
+ if (striped)
114
+ className += ' xpl-table--striped';
115
+ if (freeze)
116
+ className += ' xpl-table--freeze';
117
+ return [
118
+ `WARNING: For \`multiselect\` tables, there is JS interactivity that is provided only by the web component. The code shown below does not reflect the additional \`multiselect\` table markup and interactivity.`,
119
+ `<div class="xpl-table-container">
120
+ <table class="${className}">
121
+ <thead>
122
+ <th>Name</th>
123
+ <th>Total Days Played</th>
124
+ ...
125
+ </thead>
126
+ <tbody>
127
+ <tr>
128
+ <td>Boston Rob Mariano</td>
129
+ <td>152</td>
130
+ ...
131
+ </tr>
132
+ <tr>
133
+ <td>Parvati Shallow</td>
134
+ <td>149</td>
135
+ ...
136
+ </tr>
137
+ </tbody>
138
+ </table>
139
+ </div>`,
140
+ ];
141
+ })(Table.args),
394
142
  },
395
143
  design: {
396
144
  type: 'figma',