@xplortech/apollo-core 2.12.0 → 3.1.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 (551) hide show
  1. package/.typings/apollo-components.html-data.json +61 -0
  2. package/AGENTS.md +4 -4
  3. package/README.md +30 -3
  4. package/build/components/modal.css +1 -1
  5. package/build/components/table-body.css +1 -0
  6. package/build/components/table-footer-cell.css +1 -0
  7. package/build/components/table-footer.css +1 -0
  8. package/build/components/table-row.css +1 -0
  9. package/build/components/top-nav.css +1 -1
  10. package/build/components-manifest.json +13 -1
  11. package/build/core.css +1 -1
  12. package/build/style.css +1 -1
  13. package/dist/apollo-core/apollo-core.css +1 -1
  14. package/dist/apollo-core/apollo-core.esm.js +1 -1
  15. package/dist/apollo-core/{p-d37488d4.entry.js → p-0368a1df.entry.js} +1 -1
  16. package/dist/apollo-core/p-056a99e4.entry.js +1 -0
  17. package/dist/apollo-core/p-068e3532.entry.js +1 -0
  18. package/dist/apollo-core/{p-121d1a4b.entry.js → p-06a9a27b.entry.js} +1 -1
  19. package/dist/apollo-core/{p-9747cf43.entry.js → p-0958c719.entry.js} +1 -1
  20. package/dist/apollo-core/p-0a0a6e43.entry.js +1 -0
  21. package/dist/apollo-core/{p-643c8038.entry.js → p-149ddd12.entry.js} +1 -1
  22. package/dist/apollo-core/p-1a94c2d9.entry.js +1 -0
  23. package/dist/apollo-core/{p-efa21ec0.entry.js → p-2139f9f6.entry.js} +1 -1
  24. package/dist/apollo-core/{p-76f64d65.entry.js → p-28bce81a.entry.js} +1 -1
  25. package/dist/apollo-core/{p-1a417191.entry.js → p-2938ab4f.entry.js} +1 -1
  26. package/dist/apollo-core/{p-4e61587f.entry.js → p-2c995d80.entry.js} +1 -1
  27. package/dist/apollo-core/p-2faa7b9c.entry.js +1 -0
  28. package/dist/apollo-core/p-30b1b700.entry.js +1 -0
  29. package/dist/apollo-core/p-32084caf.entry.js +1 -0
  30. package/dist/apollo-core/p-38586952.entry.js +1 -0
  31. package/dist/apollo-core/{p-707b1918.entry.js → p-47bda204.entry.js} +1 -1
  32. package/dist/apollo-core/{p-f199ad66.entry.js → p-4a2323b3.entry.js} +1 -1
  33. package/dist/apollo-core/{p-c25aebe5.entry.js → p-4ad79534.entry.js} +1 -1
  34. package/dist/apollo-core/{p-e4ae3f60.entry.js → p-4d4acd1f.entry.js} +1 -1
  35. package/dist/apollo-core/p-50fae269.entry.js +1 -0
  36. package/dist/apollo-core/{p-7f105d63.entry.js → p-54903322.entry.js} +1 -1
  37. package/dist/apollo-core/{p-8a81ef98.entry.js → p-5730d96c.entry.js} +1 -1
  38. package/dist/apollo-core/{p-46d21684.entry.js → p-581b702c.entry.js} +1 -1
  39. package/dist/apollo-core/{p-853418be.entry.js → p-5d9a593e.entry.js} +1 -1
  40. package/dist/apollo-core/{p-e00ed4f4.entry.js → p-60cb3cfb.entry.js} +1 -1
  41. package/dist/apollo-core/p-722b145a.entry.js +1 -0
  42. package/dist/apollo-core/p-75e5bfe0.entry.js +1 -0
  43. package/dist/apollo-core/p-77fe3cc1.entry.js +1 -0
  44. package/dist/apollo-core/{p-26861d09.entry.js → p-790709c0.entry.js} +1 -1
  45. package/dist/apollo-core/{p-7976cd3b.entry.js → p-82812126.entry.js} +1 -1
  46. package/dist/apollo-core/{p-c427a31d.entry.js → p-83bb7607.entry.js} +1 -1
  47. package/dist/apollo-core/p-8664d88b.entry.js +1 -0
  48. package/dist/apollo-core/{p-3d9c90ee.entry.js → p-9064badb.entry.js} +1 -1
  49. package/dist/apollo-core/{p-5ca18bc1.entry.js → p-91895c40.entry.js} +1 -1
  50. package/dist/apollo-core/p-969d5cca.entry.js +1 -0
  51. package/dist/apollo-core/p-99a79cf4.entry.js +1 -0
  52. package/dist/apollo-core/p-abdf199b.entry.js +1 -0
  53. package/dist/apollo-core/p-ae8a5f66.entry.js +1 -0
  54. package/dist/apollo-core/{p-9b0174b1.entry.js → p-af8ebf49.entry.js} +1 -1
  55. package/dist/apollo-core/p-b29025b2.entry.js +1 -0
  56. package/dist/apollo-core/{p-fd2756d8.entry.js → p-b45179fb.entry.js} +1 -1
  57. package/dist/apollo-core/p-b5a61076.entry.js +1 -0
  58. package/dist/apollo-core/p-bf7d8e18.entry.js +1 -0
  59. package/dist/apollo-core/p-c48e4884.entry.js +1 -0
  60. package/dist/apollo-core/{p-b537f72d.entry.js → p-ca4652b3.entry.js} +1 -1
  61. package/dist/apollo-core/{p-bb22ed2a.entry.js → p-cb5b15c2.entry.js} +1 -1
  62. package/dist/apollo-core/p-cc57f20d.entry.js +1 -0
  63. package/dist/apollo-core/{p-fef6c256.entry.js → p-cdacfcd4.entry.js} +1 -1
  64. package/dist/apollo-core/{p-616c5a32.entry.js → p-cdb5b5c4.entry.js} +1 -1
  65. package/dist/apollo-core/p-d0bc7c45.entry.js +1 -0
  66. package/dist/apollo-core/{p-ff8acf15.entry.js → p-d41b8f46.entry.js} +1 -1
  67. package/dist/apollo-core/{p-9bf2ff9f.entry.js → p-d443291f.entry.js} +1 -1
  68. package/dist/apollo-core/p-d724c419.entry.js +1 -0
  69. package/dist/apollo-core/p-d9070ae5.entry.js +1 -0
  70. package/dist/apollo-core/p-dca48977.entry.js +1 -0
  71. package/dist/apollo-core/p-e1833287.entry.js +1 -0
  72. package/dist/apollo-core/{p-601b3ab5.entry.js → p-e2890eb1.entry.js} +1 -1
  73. package/dist/apollo-core/p-e2b73b60.entry.js +1 -0
  74. package/dist/apollo-core/p-e7e445b0.entry.js +1 -0
  75. package/dist/apollo-core/p-f1c103ff.entry.js +1 -0
  76. package/dist/apollo-core/{p-0463c29f.entry.js → p-f3a2c79b.entry.js} +1 -1
  77. package/dist/apollo-core/p-ffc2f0cf.entry.js +1 -0
  78. package/dist/cjs/apollo-core.cjs.js +1 -1
  79. package/dist/cjs/index-3cBvw409.js +16 -0
  80. package/dist/cjs/loader.cjs.js +1 -1
  81. package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
  82. package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
  83. package/dist/cjs/xpl-avatar_3.cjs.entry.js +5 -4
  84. package/dist/cjs/xpl-backdrop.cjs.entry.js +1 -1
  85. package/dist/cjs/xpl-badge.cjs.entry.js +1 -1
  86. package/dist/cjs/xpl-banner.cjs.entry.js +2 -2
  87. package/dist/cjs/xpl-breadcrumb-item.cjs.entry.js +1 -1
  88. package/dist/cjs/xpl-breadcrumbs.cjs.entry.js +1 -1
  89. package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
  90. package/dist/cjs/xpl-button.cjs.entry.js +1 -1
  91. package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
  92. package/dist/cjs/xpl-checkbox.cjs.entry.js +3 -3
  93. package/dist/cjs/xpl-choicelist.cjs.entry.js +1 -1
  94. package/dist/cjs/xpl-content-area.cjs.entry.js +1 -1
  95. package/dist/cjs/xpl-dashboard.cjs.entry.js +1 -1
  96. package/dist/cjs/xpl-data-card.cjs.entry.js +2 -2
  97. package/dist/cjs/xpl-dropdown_4.cjs.entry.js +14 -11
  98. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
  99. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
  100. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
  101. package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
  102. package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
  103. package/dist/cjs/xpl-header-accordion.cjs.entry.js +1 -1
  104. package/dist/cjs/xpl-icon.cjs.entry.js +2 -2
  105. package/dist/cjs/xpl-input-color.cjs.entry.js +13 -13
  106. package/dist/cjs/xpl-input-phone.cjs.entry.js +5 -5
  107. package/dist/cjs/xpl-input-time.cjs.entry.js +2 -2
  108. package/dist/cjs/xpl-input_4.cjs.entry.js +15 -14
  109. package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
  110. package/dist/cjs/xpl-list.cjs.entry.js +2 -2
  111. package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
  112. package/dist/cjs/xpl-modal.cjs.entry.js +50 -21
  113. package/dist/cjs/xpl-nav-header-menu.cjs.entry.js +2 -2
  114. package/dist/cjs/xpl-nav-item.cjs.entry.js +2 -2
  115. package/dist/cjs/xpl-pagination.cjs.entry.js +4 -4
  116. package/dist/cjs/xpl-panel.cjs.entry.js +2 -2
  117. package/dist/cjs/xpl-popover.cjs.entry.js +4 -4
  118. package/dist/cjs/xpl-progress-bar.cjs.entry.js +2 -2
  119. package/dist/cjs/xpl-progress-indicator.cjs.entry.js +1 -1
  120. package/dist/cjs/xpl-secondary-nav.cjs.entry.js +1 -1
  121. package/dist/cjs/xpl-select_2.cjs.entry.js +8 -8
  122. package/dist/cjs/xpl-side-nav-header-item.cjs.entry.js +2 -2
  123. package/dist/cjs/xpl-side-nav-item.cjs.entry.js +2 -2
  124. package/dist/cjs/xpl-side-nav-section.cjs.entry.js +5 -5
  125. package/dist/cjs/xpl-side-nav.cjs.entry.js +7 -3
  126. package/dist/cjs/xpl-skeleton.cjs.entry.js +1 -1
  127. package/dist/cjs/xpl-slideout.cjs.entry.js +1 -1
  128. package/dist/cjs/xpl-tab-panel.cjs.entry.js +2 -2
  129. package/dist/cjs/xpl-table-body.cjs.entry.js +14 -0
  130. package/dist/cjs/xpl-table-footer-cell.cjs.entry.js +18 -0
  131. package/dist/cjs/xpl-table-footer.cjs.entry.js +14 -0
  132. package/dist/cjs/xpl-table-header.cjs.entry.js +1 -1
  133. package/dist/cjs/xpl-table-row.cjs.entry.js +20 -0
  134. package/dist/cjs/xpl-table.cjs.entry.js +5 -5
  135. package/dist/cjs/xpl-tabs.cjs.entry.js +5 -5
  136. package/dist/cjs/xpl-toast.cjs.entry.js +2 -2
  137. package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
  138. package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
  139. package/dist/cjs/xpl-tooltip.cjs.entry.js +1 -1
  140. package/dist/cjs/xpl-top-nav-item.cjs.entry.js +2 -2
  141. package/dist/cjs/xpl-top-nav-menu.cjs.entry.js +2 -2
  142. package/dist/cjs/xpl-top-nav.cjs.entry.js +5 -5
  143. package/dist/cjs/xpl-utility-bar.cjs.entry.js +1 -1
  144. package/dist/collection/collection-manifest.json +4 -0
  145. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  146. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  147. package/dist/collection/components/xpl-avatar/xpl-avatar.js +1 -0
  148. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  149. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  150. package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
  151. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  152. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  153. package/dist/collection/components/xpl-button/xpl-button.js +1 -1
  154. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  155. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  156. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +3 -3
  157. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  158. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  159. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  160. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  161. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  162. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  163. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  164. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  165. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +10 -7
  166. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +2 -2
  167. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  168. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  169. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  170. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  171. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
  172. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  173. package/dist/collection/components/xpl-input/xpl-input-color/color-utils.js +5 -5
  174. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  175. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  176. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  177. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  178. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
  179. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  180. package/dist/collection/components/xpl-input/xpl-input.js +7 -6
  181. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  182. package/dist/collection/components/xpl-list/xpl-list.js +2 -2
  183. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  184. package/dist/collection/components/xpl-modal/xpl-modal.js +50 -21
  185. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  186. package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
  187. package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
  188. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  189. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  190. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
  191. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  192. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  193. package/dist/collection/components/xpl-select/select.shared.js +82 -0
  194. package/dist/collection/components/xpl-select/xpl-select.js +6 -6
  195. package/dist/collection/components/xpl-side-nav/xpl-side-nav-header-item/xpl-side-nav-header-item.js +2 -2
  196. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  197. package/dist/collection/components/xpl-side-nav/xpl-side-nav-section/xpl-side-nav-section.js +5 -5
  198. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +8 -4
  199. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  200. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  201. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
  202. package/dist/collection/components/xpl-table/xpl-table-body/xpl-table-body.js +7 -0
  203. package/dist/collection/components/xpl-table/xpl-table-footer/xpl-table-footer.js +7 -0
  204. package/dist/collection/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.js +37 -0
  205. package/dist/collection/components/xpl-table/xpl-table-row/xpl-table-row.js +78 -0
  206. package/dist/collection/components/xpl-table/xpl-table.js +5 -5
  207. package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
  208. package/dist/collection/components/xpl-tabs/tabs.shared.js +0 -33
  209. package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
  210. package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
  211. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  212. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  213. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  214. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  215. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
  216. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +2 -2
  217. package/dist/collection/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.js +2 -2
  218. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +5 -5
  219. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  220. package/dist/components/index.d.ts +8 -0
  221. package/dist/components/index.js +1 -1
  222. package/dist/components/p-9VnxPQLs.js +1 -0
  223. package/dist/components/p-B2oLZUDD.js +1 -0
  224. package/dist/components/p-BYYFsuD3.js +1 -0
  225. package/dist/components/p-BZtxVB1R.js +1 -0
  226. package/dist/components/{p-BGqQbjLl.js → p-BdpZR4KO.js} +1 -1
  227. package/dist/components/{p-DywQ3S73.js → p-Chpgh5SL.js} +1 -1
  228. package/dist/components/{p-2jYZ7ACH.js → p-CiHTfk3E.js} +1 -1
  229. package/dist/components/p-CnVGKN63.js +1 -0
  230. package/dist/components/p-Cz7zDaI4.js +1 -0
  231. package/dist/components/{p-CjbPCnPP.js → p-D--kzomA.js} +1 -1
  232. package/dist/components/p-D4rv6CNJ.js +1 -0
  233. package/dist/components/{p-Dzp5p-eh.js → p-DAb-txW3.js} +1 -1
  234. package/dist/components/p-DYmvElhR.js +1 -0
  235. package/dist/components/{p-DsRsm61K.js → p-EfW0v54z.js} +1 -1
  236. package/dist/components/{p-DWUJ_jsx.js → p-JyNpXfDe.js} +1 -1
  237. package/dist/components/{p-DS2Kv5fl.js → p-U0JYwf4c.js} +1 -1
  238. package/dist/components/p-YG9Jza0y.js +1 -0
  239. package/dist/components/{p-imCMp2Nl.js → p-l3EZ-agL.js} +1 -1
  240. package/dist/components/p-oIn1krdu.js +1 -0
  241. package/dist/components/p-wIU7KUhA.js +1 -0
  242. package/dist/components/{p-BnTsRbko.js → p-xFsB212F.js} +1 -1
  243. package/dist/components/p-xtOHikY0.js +1 -0
  244. package/dist/components/xpl-accordion.js +1 -1
  245. package/dist/components/xpl-application-shell.js +1 -1
  246. package/dist/components/xpl-avatar.js +1 -1
  247. package/dist/components/xpl-backdrop.js +1 -1
  248. package/dist/components/xpl-badge.js +1 -1
  249. package/dist/components/xpl-banner.js +1 -1
  250. package/dist/components/xpl-breadcrumb-item.js +1 -1
  251. package/dist/components/xpl-breadcrumbs.js +1 -1
  252. package/dist/components/xpl-button-row.js +1 -1
  253. package/dist/components/xpl-button.js +1 -1
  254. package/dist/components/xpl-calendar.js +1 -1
  255. package/dist/components/xpl-checkbox.js +1 -1
  256. package/dist/components/xpl-choicelist.js +1 -1
  257. package/dist/components/xpl-content-area.js +1 -1
  258. package/dist/components/xpl-dashboard.js +1 -1
  259. package/dist/components/xpl-data-card.js +1 -1
  260. package/dist/components/xpl-divider.js +1 -1
  261. package/dist/components/xpl-dropdown-group.js +1 -1
  262. package/dist/components/xpl-dropdown-heading.js +1 -1
  263. package/dist/components/xpl-dropdown-option.js +1 -1
  264. package/dist/components/xpl-dropdown.js +1 -1
  265. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  266. package/dist/components/xpl-dynamic-table-row.js +1 -1
  267. package/dist/components/xpl-dynamic-table.js +1 -1
  268. package/dist/components/xpl-grid-item.js +1 -1
  269. package/dist/components/xpl-grid.js +1 -1
  270. package/dist/components/xpl-header-accordion.js +1 -1
  271. package/dist/components/xpl-icon.js +1 -1
  272. package/dist/components/xpl-input-color.js +1 -1
  273. package/dist/components/xpl-input-date.js +1 -1
  274. package/dist/components/xpl-input-file.js +1 -1
  275. package/dist/components/xpl-input-phone.js +1 -1
  276. package/dist/components/xpl-input-search.js +1 -1
  277. package/dist/components/xpl-input-time.js +1 -1
  278. package/dist/components/xpl-input.js +1 -1
  279. package/dist/components/xpl-large-card.js +1 -1
  280. package/dist/components/xpl-list-item.js +1 -1
  281. package/dist/components/xpl-list.js +1 -1
  282. package/dist/components/xpl-main-nav.js +1 -1
  283. package/dist/components/xpl-modal.js +1 -1
  284. package/dist/components/xpl-nav-header-menu.js +1 -1
  285. package/dist/components/xpl-nav-item.js +1 -1
  286. package/dist/components/xpl-pagination.js +1 -1
  287. package/dist/components/xpl-panel.js +1 -1
  288. package/dist/components/xpl-popover.js +1 -1
  289. package/dist/components/xpl-progress-bar.js +1 -1
  290. package/dist/components/xpl-progress-indicator.js +1 -1
  291. package/dist/components/xpl-radio.js +1 -1
  292. package/dist/components/xpl-secondary-nav.js +1 -1
  293. package/dist/components/xpl-select.js +1 -1
  294. package/dist/components/xpl-side-nav-header-item.js +1 -1
  295. package/dist/components/xpl-side-nav-item.js +1 -1
  296. package/dist/components/xpl-side-nav-section.js +1 -1
  297. package/dist/components/xpl-side-nav.js +1 -1
  298. package/dist/components/xpl-skeleton.js +1 -1
  299. package/dist/components/xpl-slideout.js +1 -1
  300. package/dist/components/xpl-spotlight.js +1 -1
  301. package/dist/components/xpl-tab-panel.js +1 -1
  302. package/dist/components/xpl-tab.js +1 -1
  303. package/dist/components/xpl-table-body.d.ts +11 -0
  304. package/dist/components/xpl-table-body.js +1 -0
  305. package/dist/components/xpl-table-footer-cell.d.ts +11 -0
  306. package/dist/components/xpl-table-footer-cell.js +1 -0
  307. package/dist/components/xpl-table-footer.d.ts +11 -0
  308. package/dist/components/xpl-table-footer.js +1 -0
  309. package/dist/components/xpl-table-header-cell.js +1 -1
  310. package/dist/components/xpl-table-header.js +1 -1
  311. package/dist/components/xpl-table-row.d.ts +11 -0
  312. package/dist/components/xpl-table-row.js +1 -0
  313. package/dist/components/xpl-table.js +1 -1
  314. package/dist/components/xpl-tabs.js +1 -1
  315. package/dist/components/xpl-tag.js +1 -1
  316. package/dist/components/xpl-toast.js +1 -1
  317. package/dist/components/xpl-toggle.js +1 -1
  318. package/dist/components/xpl-toolbar.js +1 -1
  319. package/dist/components/xpl-tooltip.js +1 -1
  320. package/dist/components/xpl-top-nav-item.js +1 -1
  321. package/dist/components/xpl-top-nav-menu.js +1 -1
  322. package/dist/components/xpl-top-nav.js +1 -1
  323. package/dist/components/xpl-utility-bar.js +1 -1
  324. package/dist/docs/xpl-modal/readme.md +18 -2
  325. package/dist/docs/xpl-table/xpl-table-body/readme.md +16 -0
  326. package/dist/docs/xpl-table/xpl-table-footer/readme.md +16 -0
  327. package/dist/docs/xpl-table/xpl-table-footer-cell/readme.md +31 -0
  328. package/dist/docs/xpl-table/xpl-table-row/readme.md +34 -0
  329. package/dist/docs.json +207 -6
  330. package/dist/esm/apollo-core.js +1 -1
  331. package/dist/esm/index-ukZKsqqq.js +16 -0
  332. package/dist/esm/loader.js +1 -1
  333. package/dist/esm/xpl-accordion.entry.js +2 -2
  334. package/dist/esm/xpl-application-shell.entry.js +1 -1
  335. package/dist/esm/xpl-avatar_3.entry.js +5 -4
  336. package/dist/esm/xpl-backdrop.entry.js +1 -1
  337. package/dist/esm/xpl-badge.entry.js +1 -1
  338. package/dist/esm/xpl-banner.entry.js +2 -2
  339. package/dist/esm/xpl-breadcrumb-item.entry.js +1 -1
  340. package/dist/esm/xpl-breadcrumbs.entry.js +1 -1
  341. package/dist/esm/xpl-button-row.entry.js +1 -1
  342. package/dist/esm/xpl-button.entry.js +1 -1
  343. package/dist/esm/xpl-calendar.entry.js +1 -1
  344. package/dist/esm/xpl-checkbox.entry.js +3 -3
  345. package/dist/esm/xpl-choicelist.entry.js +1 -1
  346. package/dist/esm/xpl-content-area.entry.js +1 -1
  347. package/dist/esm/xpl-dashboard.entry.js +1 -1
  348. package/dist/esm/xpl-data-card.entry.js +2 -2
  349. package/dist/esm/xpl-dropdown_4.entry.js +14 -11
  350. package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
  351. package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
  352. package/dist/esm/xpl-dynamic-table.entry.js +2 -2
  353. package/dist/esm/xpl-grid-item.entry.js +1 -1
  354. package/dist/esm/xpl-grid.entry.js +1 -1
  355. package/dist/esm/xpl-header-accordion.entry.js +1 -1
  356. package/dist/esm/xpl-icon.entry.js +2 -2
  357. package/dist/esm/xpl-input-color.entry.js +13 -13
  358. package/dist/esm/xpl-input-phone.entry.js +5 -5
  359. package/dist/esm/xpl-input-time.entry.js +2 -2
  360. package/dist/esm/xpl-input_4.entry.js +15 -14
  361. package/dist/esm/xpl-large-card.entry.js +1 -1
  362. package/dist/esm/xpl-list.entry.js +2 -2
  363. package/dist/esm/xpl-main-nav.entry.js +1 -1
  364. package/dist/esm/xpl-modal.entry.js +50 -21
  365. package/dist/esm/xpl-nav-header-menu.entry.js +2 -2
  366. package/dist/esm/xpl-nav-item.entry.js +2 -2
  367. package/dist/esm/xpl-pagination.entry.js +4 -4
  368. package/dist/esm/xpl-panel.entry.js +2 -2
  369. package/dist/esm/xpl-popover.entry.js +4 -4
  370. package/dist/esm/xpl-progress-bar.entry.js +2 -2
  371. package/dist/esm/xpl-progress-indicator.entry.js +1 -1
  372. package/dist/esm/xpl-secondary-nav.entry.js +1 -1
  373. package/dist/esm/xpl-select_2.entry.js +8 -8
  374. package/dist/esm/xpl-side-nav-header-item.entry.js +2 -2
  375. package/dist/esm/xpl-side-nav-item.entry.js +2 -2
  376. package/dist/esm/xpl-side-nav-section.entry.js +5 -5
  377. package/dist/esm/xpl-side-nav.entry.js +8 -4
  378. package/dist/esm/xpl-skeleton.entry.js +1 -1
  379. package/dist/esm/xpl-slideout.entry.js +1 -1
  380. package/dist/esm/xpl-tab-panel.entry.js +2 -2
  381. package/dist/esm/xpl-table-body.entry.js +12 -0
  382. package/dist/esm/xpl-table-footer-cell.entry.js +16 -0
  383. package/dist/esm/xpl-table-footer.entry.js +12 -0
  384. package/dist/esm/xpl-table-header.entry.js +1 -1
  385. package/dist/esm/xpl-table-row.entry.js +18 -0
  386. package/dist/esm/xpl-table.entry.js +5 -5
  387. package/dist/esm/xpl-tabs.entry.js +5 -5
  388. package/dist/esm/xpl-toast.entry.js +2 -2
  389. package/dist/esm/xpl-toggle.entry.js +3 -3
  390. package/dist/esm/xpl-toolbar.entry.js +2 -2
  391. package/dist/esm/xpl-tooltip.entry.js +1 -1
  392. package/dist/esm/xpl-top-nav-item.entry.js +2 -2
  393. package/dist/esm/xpl-top-nav-menu.entry.js +2 -2
  394. package/dist/esm/xpl-top-nav.entry.js +5 -5
  395. package/dist/esm/xpl-utility-bar.entry.js +1 -1
  396. package/dist/types/components/xpl-modal/xpl-modal.d.ts +7 -1
  397. package/dist/types/components/xpl-select/select.shared.d.ts +23 -0
  398. package/dist/types/components/xpl-table/xpl-table-body/xpl-table-body.d.ts +3 -0
  399. package/dist/types/components/xpl-table/xpl-table-footer/xpl-table-footer.d.ts +3 -0
  400. package/dist/types/components/xpl-table/xpl-table-footer-cell/xpl-table-footer-cell.d.ts +4 -0
  401. package/dist/types/components/xpl-table/xpl-table-row/xpl-table-row.d.ts +6 -0
  402. package/dist/types/components/xpl-tabs/tabs.shared.d.ts +0 -2
  403. package/dist/types/components.d.ts +98 -0
  404. package/hydrate/index.js +302 -176
  405. package/hydrate/index.mjs +302 -176
  406. package/package.json +42 -46
  407. package/dist/apollo-core/p-0095174c.entry.js +0 -1
  408. package/dist/apollo-core/p-020ecd66.entry.js +0 -1
  409. package/dist/apollo-core/p-091411e3.entry.js +0 -1
  410. package/dist/apollo-core/p-0be4dbb8.entry.js +0 -1
  411. package/dist/apollo-core/p-1139fac0.entry.js +0 -1
  412. package/dist/apollo-core/p-140a96c7.entry.js +0 -1
  413. package/dist/apollo-core/p-26b6a0ed.entry.js +0 -1
  414. package/dist/apollo-core/p-39e71d86.entry.js +0 -1
  415. package/dist/apollo-core/p-3dd1de49.entry.js +0 -1
  416. package/dist/apollo-core/p-4129d971.entry.js +0 -1
  417. package/dist/apollo-core/p-5afc9831.entry.js +0 -1
  418. package/dist/apollo-core/p-5d25a84a.entry.js +0 -1
  419. package/dist/apollo-core/p-5e5c5016.entry.js +0 -1
  420. package/dist/apollo-core/p-638fd9b1.entry.js +0 -1
  421. package/dist/apollo-core/p-724c5038.entry.js +0 -1
  422. package/dist/apollo-core/p-80a11cad.entry.js +0 -1
  423. package/dist/apollo-core/p-875e0eaa.entry.js +0 -1
  424. package/dist/apollo-core/p-8ddbf2e2.entry.js +0 -1
  425. package/dist/apollo-core/p-a33b0943.entry.js +0 -1
  426. package/dist/apollo-core/p-ba41bbd5.entry.js +0 -1
  427. package/dist/apollo-core/p-cde21f72.entry.js +0 -1
  428. package/dist/apollo-core/p-d288c1d1.entry.js +0 -1
  429. package/dist/apollo-core/p-d3f2b8b8.entry.js +0 -1
  430. package/dist/apollo-core/p-dfaba114.entry.js +0 -1
  431. package/dist/apollo-core/p-e2a16242.entry.js +0 -1
  432. package/dist/apollo-core/p-ec488f9c.entry.js +0 -1
  433. package/dist/apollo-core/p-f2bfe6a6.entry.js +0 -1
  434. package/dist/collection/components/xpl-accordion/accordion.stories.js +0 -84
  435. package/dist/collection/components/xpl-application-shell/application-shell.stories.js +0 -755
  436. package/dist/collection/components/xpl-avatar/avatar.stories.js +0 -157
  437. package/dist/collection/components/xpl-backdrop/backdrop.stories.js +0 -38
  438. package/dist/collection/components/xpl-badge/badge.stories.js +0 -104
  439. package/dist/collection/components/xpl-banner/banner.stories.js +0 -69
  440. package/dist/collection/components/xpl-breadcrumbs/breadcrumbs.stories.js +0 -139
  441. package/dist/collection/components/xpl-button/button.stories.js +0 -144
  442. package/dist/collection/components/xpl-button-row/button-row.stories.js +0 -68
  443. package/dist/collection/components/xpl-calendar/calendar.stories.js +0 -71
  444. package/dist/collection/components/xpl-checkbox/checkbox.stories.js +0 -92
  445. package/dist/collection/components/xpl-choicelist/choicelist.stories.js +0 -162
  446. package/dist/collection/components/xpl-content-area/content-area.stories.js +0 -44
  447. package/dist/collection/components/xpl-dashboard/dashboard.stories.js +0 -57
  448. package/dist/collection/components/xpl-data-card/data-card.stories.js +0 -170
  449. package/dist/collection/components/xpl-divider/divider.stories.js +0 -47
  450. package/dist/collection/components/xpl-dropdown/dropdown.stories.js +0 -395
  451. package/dist/collection/components/xpl-dynamic-table/dynamic-table.stories.js +0 -169
  452. package/dist/collection/components/xpl-grid/grid.stories.js +0 -85
  453. package/dist/collection/components/xpl-header-accordion/header-accordion.stories.js +0 -56
  454. package/dist/collection/components/xpl-icon/icons.stories.js +0 -161
  455. package/dist/collection/components/xpl-input/input.stories.js +0 -712
  456. package/dist/collection/components/xpl-large-card/large-card.stories.js +0 -155
  457. package/dist/collection/components/xpl-list/list.stories.js +0 -398
  458. package/dist/collection/components/xpl-main-nav/main-nav.stories.js +0 -312
  459. package/dist/collection/components/xpl-modal/modal.stories.js +0 -100
  460. package/dist/collection/components/xpl-pagination/pagination.stories.js +0 -65
  461. package/dist/collection/components/xpl-panel/panel.stories.js +0 -62
  462. package/dist/collection/components/xpl-popover/popover.stories.js +0 -174
  463. package/dist/collection/components/xpl-progress-bar/progress-bar.stories.js +0 -105
  464. package/dist/collection/components/xpl-progress-indicator/progress-indicator.stories.js +0 -126
  465. package/dist/collection/components/xpl-radio/radio.stories.js +0 -115
  466. package/dist/collection/components/xpl-secondary-nav/secondary-nav.stories.js +0 -83
  467. package/dist/collection/components/xpl-select/select.stories.js +0 -300
  468. package/dist/collection/components/xpl-side-nav/side-nav.stories.js +0 -1070
  469. package/dist/collection/components/xpl-skeleton/skeleton.stories.js +0 -80
  470. package/dist/collection/components/xpl-slideout/slideout.stories.js +0 -122
  471. package/dist/collection/components/xpl-spotlight/spotlight.stories.js +0 -392
  472. package/dist/collection/components/xpl-table/table.stories.js +0 -156
  473. package/dist/collection/components/xpl-table-header/table-header.stories.js +0 -134
  474. package/dist/collection/components/xpl-table-header-cell/table-header-cell.stories.js +0 -83
  475. package/dist/collection/components/xpl-tabs/segment-control.stories.js +0 -40
  476. package/dist/collection/components/xpl-tabs/tabs.stories.js +0 -43
  477. package/dist/collection/components/xpl-tag/tag.stories.js +0 -159
  478. package/dist/collection/components/xpl-toast/toast.stories.js +0 -112
  479. package/dist/collection/components/xpl-toggle/toggle.stories.js +0 -95
  480. package/dist/collection/components/xpl-toolbar/toolbar.stories.js +0 -39
  481. package/dist/collection/components/xpl-tooltip/tooltip.stories.js +0 -67
  482. package/dist/collection/components/xpl-top-nav/top-nav.stories.js +0 -764
  483. package/dist/collection/components/xpl-utility-bar/utility-bar.stories.js +0 -94
  484. package/dist/components/p-Bseq_BgD.js +0 -1
  485. package/dist/components/p-CCgZCY_A.js +0 -1
  486. package/dist/components/p-CJzsLWeV.js +0 -1
  487. package/dist/components/p-CRKY79vL.js +0 -1
  488. package/dist/components/p-Cjxw-qOg.js +0 -1
  489. package/dist/components/p-D6JUVA1x.js +0 -1
  490. package/dist/components/p-DFGw0APN.js +0 -1
  491. package/dist/components/p-DLLQBDCb.js +0 -1
  492. package/dist/components/p-Di1NDy0w.js +0 -1
  493. package/dist/components/p-DkM7jyQB.js +0 -1
  494. package/dist/components/p-Mehog36m.js +0 -1
  495. package/dist/components/p-RYnBuuDE.js +0 -1
  496. package/dist/css/typography.stories.js +0 -153
  497. package/dist/types/components/xpl-accordion/accordion.stories.d.ts +0 -46
  498. package/dist/types/components/xpl-application-shell/application-shell.stories.d.ts +0 -46
  499. package/dist/types/components/xpl-avatar/avatar.stories.d.ts +0 -39
  500. package/dist/types/components/xpl-backdrop/backdrop.stories.d.ts +0 -23
  501. package/dist/types/components/xpl-badge/badge.stories.d.ts +0 -87
  502. package/dist/types/components/xpl-banner/banner.stories.d.ts +0 -79
  503. package/dist/types/components/xpl-breadcrumbs/breadcrumbs.stories.d.ts +0 -40
  504. package/dist/types/components/xpl-button/button.stories.d.ts +0 -136
  505. package/dist/types/components/xpl-button-row/button-row.stories.d.ts +0 -34
  506. package/dist/types/components/xpl-calendar/calendar.stories.d.ts +0 -45
  507. package/dist/types/components/xpl-checkbox/checkbox.stories.d.ts +0 -51
  508. package/dist/types/components/xpl-choicelist/choicelist.stories.d.ts +0 -30
  509. package/dist/types/components/xpl-content-area/content-area.stories.d.ts +0 -19
  510. package/dist/types/components/xpl-dashboard/dashboard.stories.d.ts +0 -22
  511. package/dist/types/components/xpl-data-card/data-card.stories.d.ts +0 -113
  512. package/dist/types/components/xpl-divider/divider.stories.d.ts +0 -28
  513. package/dist/types/components/xpl-dropdown/dropdown.stories.d.ts +0 -177
  514. package/dist/types/components/xpl-dynamic-table/dynamic-table.stories.d.ts +0 -30
  515. package/dist/types/components/xpl-grid/grid.stories.d.ts +0 -109
  516. package/dist/types/components/xpl-header-accordion/header-accordion.stories.d.ts +0 -32
  517. package/dist/types/components/xpl-icon/icons.stories.d.ts +0 -31
  518. package/dist/types/components/xpl-input/input.stories.d.ts +0 -441
  519. package/dist/types/components/xpl-large-card/large-card.stories.d.ts +0 -57
  520. package/dist/types/components/xpl-list/list.stories.d.ts +0 -385
  521. package/dist/types/components/xpl-main-nav/main-nav.stories.d.ts +0 -19
  522. package/dist/types/components/xpl-modal/modal.stories.d.ts +0 -103
  523. package/dist/types/components/xpl-pagination/pagination.stories.d.ts +0 -31
  524. package/dist/types/components/xpl-panel/panel.stories.d.ts +0 -30
  525. package/dist/types/components/xpl-popover/popover.stories.d.ts +0 -21
  526. package/dist/types/components/xpl-progress-bar/progress-bar.stories.d.ts +0 -62
  527. package/dist/types/components/xpl-progress-indicator/progress-indicator.stories.d.ts +0 -64
  528. package/dist/types/components/xpl-radio/radio.stories.d.ts +0 -96
  529. package/dist/types/components/xpl-secondary-nav/secondary-nav.stories.d.ts +0 -8
  530. package/dist/types/components/xpl-select/select.stories.d.ts +0 -158
  531. package/dist/types/components/xpl-side-nav/side-nav.stories.d.ts +0 -173
  532. package/dist/types/components/xpl-skeleton/skeleton.stories.d.ts +0 -36
  533. package/dist/types/components/xpl-slideout/slideout.stories.d.ts +0 -124
  534. package/dist/types/components/xpl-spotlight/spotlight.stories.d.ts +0 -203
  535. package/dist/types/components/xpl-table/table.stories.d.ts +0 -67
  536. package/dist/types/components/xpl-table-header/table-header.stories.d.ts +0 -80
  537. package/dist/types/components/xpl-table-header-cell/table-header-cell.stories.d.ts +0 -36
  538. package/dist/types/components/xpl-tabs/segment-control.stories.d.ts +0 -134
  539. package/dist/types/components/xpl-tabs/tabs.stories.d.ts +0 -107
  540. package/dist/types/components/xpl-tag/tag.stories.d.ts +0 -68
  541. package/dist/types/components/xpl-toast/toast.stories.d.ts +0 -70
  542. package/dist/types/components/xpl-toggle/toggle.stories.d.ts +0 -53
  543. package/dist/types/components/xpl-toolbar/toolbar.stories.d.ts +0 -35
  544. package/dist/types/components/xpl-tooltip/tooltip.stories.d.ts +0 -29
  545. package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +0 -549
  546. package/dist/types/components/xpl-utility-bar/utility-bar.stories.d.ts +0 -27
  547. package/dist/types/home/runner/work/apollo/apollo/packages/apollo-core/.stencil/.storybook/utils/story-function.d.ts +0 -11
  548. package/dist/types/home/runner/work/apollo/apollo/packages/apollo-core/.stencil/.storybook/utils/wait-for-hydration.d.ts +0 -1
  549. package/dist/types/home/runner/work/apollo/apollo/packages/apollo-core/.stencil/src/css/typography.stories.d.ts +0 -76
  550. /package/dist/types/home/runner/work/apollo/apollo/packages/apollo-core/.stencil/{src/utils → utils}/form-bindings.d.ts +0 -0
  551. /package/dist/types/home/runner/work/apollo/apollo/packages/apollo-core/.stencil/{src/utils → utils}/story-vrt.d.ts +0 -0
@@ -1,764 +0,0 @@
1
- import { addons } from "storybook/preview-api";
2
- import { INITIAL_VIEWPORTS } from "storybook/viewport";
3
- import { setAutoSnapshotOptions } from "vitest-plugin-vis";
4
- const UPDATE_GLOBALS = 'updateGlobals';
5
- const TOP_NAV_MOBILE600_VIEWPORT = {
6
- name: 'Mobile (600px)',
7
- styles: { width: '600px', height: '900px' },
8
- type: 'mobile',
9
- };
10
- const TOP_NAV_STORY_STYLE_ID = 'sb-top-nav-story-styles';
11
- const TOP_NAV_STORY_CSS = `
12
- .sb-top-nav-story-canvas {
13
- box-sizing: border-box;
14
- min-height: 100vh;
15
- width: 100%;
16
- padding: var(--xpl-space-0);
17
- }
18
- .sb-top-nav-html-root { width: 100%; }
19
- .sb-top-nav-html-bar {
20
- display: flex;
21
- justify-content: space-between;
22
- align-items: center;
23
- padding: var(--xpl-space-8) var(--xpl-space-16);
24
- height: var(--xpl-size-350);
25
- background: var(--xpl-background-surface-default);
26
- color: var(--xpl-text-subdued);
27
- border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
28
- }
29
- .sb-top-nav-html-inner-left { display: flex; align-items: center; }
30
- .sb-top-nav-html-nav-control {
31
- margin-right: var(--xpl-space-16);
32
- border: none;
33
- padding: var(--xpl-space-0);
34
- cursor: pointer;
35
- }
36
- .sb-top-nav-html-aside-left {
37
- display: flex;
38
- align-items: center;
39
- gap: var(--xpl-space-8);
40
- flex: 1;
41
- }
42
- .sb-top-nav-html-brand-link {
43
- display: flex;
44
- align-items: center;
45
- gap: var(--xpl-space-8);
46
- text-decoration: none;
47
- color: inherit;
48
- }
49
- .sb-top-nav-html-brand-img { height: var(--xpl-size-100); width: auto; }
50
- .sb-top-nav-html-brand-text,
51
- .sb-top-nav-html-brand-text-link {
52
- font-size: var(--xpl-font-size-title-4);
53
- font-weight: var(--xpl-font-weight-medium);
54
- color: var(--xpl-text-strong);
55
- }
56
- .sb-top-nav-html-brand-text-link { text-decoration: none; }
57
- .sb-top-nav-html-brand-row {
58
- display: flex;
59
- align-items: center;
60
- gap: var(--xpl-space-8);
61
- }
62
- .sb-top-nav-html-nav-link {
63
- padding: var(--xpl-space-8);
64
- font-size: var(--xpl-font-size-body);
65
- }
66
- .sb-top-nav-html-aside-right {
67
- display: flex;
68
- align-items: center;
69
- justify-content: flex-end;
70
- gap: var(--xpl-space-8);
71
- flex: 1;
72
- }
73
- .sb-top-nav-html-account-btn {
74
- display: inline-flex;
75
- align-items: center;
76
- gap: var(--xpl-space-8);
77
- padding: var(--xpl-space-8);
78
- font-size: var(--xpl-font-size-title-4);
79
- font-weight: var(--xpl-font-weight-medium);
80
- color: var(--xpl-text-strong);
81
- border: none;
82
- background-color: var(--xpl-background-surface-transparent-0);
83
- cursor: pointer;
84
- }
85
- .sb-top-nav-item-story-bar {
86
- display: flex;
87
- align-items: center;
88
- height: var(--xpl-size-350);
89
- padding: var(--xpl-space-0) var(--xpl-space-16);
90
- gap: var(--xpl-space-8);
91
- background: var(--xpl-background-surface-default);
92
- border: var(--xpl-border-small) solid var(--xpl-border-default);
93
- border-radius: var(--xpl-border-radius-default);
94
- }
95
- .sb-top-nav-html-item-icon {
96
- width: var(--xpl-size-100);
97
- height: var(--xpl-size-100);
98
- display: inline-block;
99
- margin-right: var(--xpl-space-8);
100
- }
101
- .sb-top-nav-html-item-inner {
102
- padding: var(--xpl-space-8);
103
- font: inherit;
104
- font-size: var(--xpl-font-size-body);
105
- border: 0;
106
- border-radius: var(--xpl-border-radius-small);
107
- appearance: none;
108
- background: transparent;
109
- display: flex;
110
- align-items: center;
111
- gap: var(--xpl-space-8);
112
- cursor: pointer;
113
- text-align: inherit;
114
- text-decoration: none;
115
- color: inherit;
116
- }
117
- .sb-top-nav-html-item-inner--selected { color: var(--xpl-text-strong); }
118
- .sb-top-nav-menu-shell {
119
- background: var(--xpl-background-surface-default);
120
- border: var(--xpl-border-small) solid var(--xpl-border-default);
121
- border-radius: var(--xpl-border-radius-default);
122
- width: var(--xpl-top-nav-panel-width);
123
- display: flex;
124
- flex-direction: column;
125
- overflow: hidden;
126
- padding: var(--xpl-space-0);
127
- }
128
- .sb-top-nav-menu-shell--min {
129
- min-width: var(--xpl-top-nav-panel-width);
130
- border: var(--xpl-border-small) solid var(--xpl-border-default);
131
- border-radius: var(--xpl-border-radius-default);
132
- overflow: hidden;
133
- }
134
- .sb-top-nav-menu-profile {
135
- display: flex;
136
- flex-direction: column;
137
- align-items: center;
138
- text-align: center;
139
- padding: var(--xpl-space-16);
140
- border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
141
- }
142
- .sb-top-nav-menu-profile-inner { width: 100%; min-width: 0; }
143
- .sb-top-nav-menu-username {
144
- font-weight: var(--xpl-font-weight-medium);
145
- color: var(--xpl-text-strong);
146
- }
147
- .sb-top-nav-menu-email {
148
- font-size: var(--xpl-font-size-caption);
149
- color: var(--xpl-text-subdued);
150
- }
151
- .sb-top-nav-menu-list {
152
- padding: var(--xpl-space-8) var(--xpl-space-0);
153
- }
154
- .sb-top-nav-menu-list a {
155
- display: flex;
156
- align-items: center;
157
- gap: var(--xpl-space-8);
158
- padding: var(--xpl-space-8) var(--xpl-space-16);
159
- color: var(--xpl-text-default);
160
- text-decoration: none;
161
- }
162
- .sb-top-nav-menu-right-aside-mobile {
163
- display: flex;
164
- flex-direction: column;
165
- gap: var(--xpl-space-4);
166
- padding: var(--xpl-space-4) var(--xpl-space-0);
167
- border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
168
- }
169
- .sb-top-nav-menu-right-aside-mobile a {
170
- display: flex;
171
- align-items: center;
172
- gap: var(--xpl-space-8);
173
- padding: var(--xpl-space-10) var(--xpl-space-12);
174
- color: var(--xpl-text-default);
175
- text-decoration: none;
176
- }
177
- `.trim();
178
- function ensureTopNavStoryStyles() {
179
- if (typeof document === 'undefined')
180
- return;
181
- if (document.getElementById(TOP_NAV_STORY_STYLE_ID))
182
- return;
183
- const style = document.createElement('style');
184
- style.id = TOP_NAV_STORY_STYLE_ID;
185
- style.textContent = TOP_NAV_STORY_CSS;
186
- document.head.appendChild(style);
187
- }
188
- function syncTopNavPreviewViewportToGlobals(previewViewport, globalsSnapshot) {
189
- const next = previewViewport ?? 'responsive';
190
- const raw = globalsSnapshot?.viewport?.value;
191
- const normalizedCurrent = raw == null || raw === '' || raw === 'reset' ? undefined : String(raw);
192
- const desiredValue = next === 'responsive' ? undefined : next;
193
- if (normalizedCurrent === desiredValue) {
194
- return;
195
- }
196
- const channel = addons.getChannel();
197
- if (channel == null) {
198
- return;
199
- }
200
- if (next === 'responsive') {
201
- channel.emit(UPDATE_GLOBALS, {
202
- globals: { viewport: { value: undefined, isRotated: false } },
203
- });
204
- return;
205
- }
206
- channel.emit(UPDATE_GLOBALS, {
207
- globals: { viewport: { value: next, isRotated: false } },
208
- });
209
- }
210
- function topNavPreviewViewportDecorator(story, context) {
211
- const viewport = context.globals?.viewport;
212
- syncTopNavPreviewViewportToGlobals(context.args.previewViewport, { viewport });
213
- return story();
214
- }
215
- function topNavDarkStoryDecorator(story) {
216
- ensureTopNavStoryStyles();
217
- const wrap = document.createElement('div');
218
- wrap.className = 'dark sb-top-nav-story-canvas';
219
- const result = story();
220
- if (typeof result === 'string') {
221
- const fragment = document.createRange().createContextualFragment(result);
222
- wrap.append(fragment);
223
- }
224
- else if (result != null &&
225
- typeof Node !== 'undefined' &&
226
- result.nodeType !== undefined) {
227
- wrap.appendChild(result);
228
- }
229
- return wrap;
230
- }
231
- const TOP_NAV_FIGMA_DESIGN = {
232
- type: 'figma',
233
- url: 'https://www.figma.com/design/MjjYek73MFnHmVNdm45Sd1/Apollo-Web?node-id=36021-13064&p=f&t=zPkMI4H5nK5XE3ZU-11',
234
- };
235
- const topNavFamilyDocsDescription = [
236
- 'Horizontal top bar (`xpl-top-nav`), nav items (`xpl-top-nav-item`), grouping container (`xpl-top-nav-menu`), and profile header (`xpl-nav-header-menu`). **`xpl-top-nav`** supports **`brand-name`**, **`brand-href`**, **`brand-logo`** (image URL), and **`slot="brand-logo"`** for the built-in brand row; **`slot="left-aside"`** holds primary links; **`slot="right-aside"`** then **`slot="user-menu"`**; on narrow viewports (**one pixel below Tailwind `md`** — **`max-width: 767px`** with default **`screens.md`**) **`right-aside`** is hidden in the bar — duplicate those actions into **`slot="right-aside-mobile"`** on **`xpl-nav-header-menu`**. The account region uses an **internal** **`xpl-popover`** (**`bottom-end`**, **`display="menu"`**): set **`child-account-label`** for the built-in trigger label beside **`chevron-down`**, put the panel in **`slot="user-menu"`**, or use **`slot="user-menu-trigger"`** to replace the built-in trigger. Use **Top Navigation** Controls for props + **Actions** for **`navOpen`** / **`brandClick`**. With **`nav-control`**, the hamburger is visible only on those narrow widths (CSS **`top-nav.css`**). **`brandClick`** fires when the built-in brand is activated and **`brand-href`** is **not** set.',
237
- '',
238
- 'Group a parent nav item\'s children with **`xpl-top-nav-menu`** in its **`slot="dropdown"`**: on desktop it opens as a flyout under the parent; on narrow viewports the **same markup** drives a mobile cascade — the drawer swaps its top-level list for the group\'s rows in place (auto back row + `chevron-left`, no second panel). See the **`TopNavItem`** story\'s **`showDropdown`** control, or the grouped "Xplor Ops" item in this story\'s Controls, and switch **`previewViewport`** to a narrow preset to try the cascade.',
239
- '',
240
- '**Storybook:** These stories wrap the canvas in Foundation **`dark`** so previews match the components’ dark palette. The manager **moon** toggle targets the addon store and may still look “light” in the chrome; the preview area uses dark tokens regardless.',
241
- '',
242
- '### Events',
243
- '',
244
- '| Component | Event | When it fires | `event.detail` |',
245
- '| --- | --- | --- | --- |',
246
- '| **`xpl-top-nav`** | `navOpen` | Mobile menu toggled via control, or drawer closed with **Escape** (`nav-control` must be set). | `boolean` — `true` when open, `false` when closed. |',
247
- '| **`xpl-top-nav`** | `brandClick` | Built-in brand is activated (click or keyboard) and **`brand-href`** is unset. | `MouseEvent` — same as **`navItemClick`** on the internal brand **`xpl-top-nav-item`**. |',
248
- '| **`xpl-top-nav-item`** | `navItemClick` | User activates a plain item (click or Enter/Space). Not emitted for dropdown items (`slot="dropdown"`) or for internal chevron-only toggles. | `MouseEvent` (the original click). |',
249
- '| **`xpl-top-nav-item`** | `openChange` | `open` changes (click, hover, keyboard, Escape, outside click, or programmatic). | `boolean` — new open state. |',
250
- '| **`xpl-nav-header-menu`** | — | No custom events. | — |',
251
- '| **`xpl-top-nav-menu`** | — | No custom events — the back row calls `closeMenu()` on the parent trigger directly. | — |',
252
- ].join('\n');
253
- const meta = {
254
- title: 'Components/Navigation/Top Navigation',
255
- component: 'xpl-top-nav',
256
- tags: ['vrt'],
257
- decorators: [topNavDarkStoryDecorator],
258
- beforeEach() {
259
- setAutoSnapshotOptions({ enable: true });
260
- },
261
- parameters: {
262
- design: TOP_NAV_FIGMA_DESIGN,
263
- darkMode: {
264
- current: 'dark',
265
- },
266
- actions: {
267
- handles: ['navOpen', 'brandClick'],
268
- },
269
- docs: {
270
- description: {
271
- component: topNavFamilyDocsDescription,
272
- },
273
- },
274
- },
275
- };
276
- export default meta;
277
- function escapeAttr(value) {
278
- return value.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;');
279
- }
280
- function topNavLabelAttr(label) {
281
- if (label == null || String(label).trim() === '') {
282
- return '';
283
- }
284
- return ` label="${String(label).replace(/"/g, '&quot;')}"`;
285
- }
286
- function topNavBrandAttrs(brandName, brandHref, brandLogo) {
287
- const parts = [];
288
- if (brandName != null && String(brandName).trim() !== '') {
289
- parts.push(` brand-name="${escapeAttr(String(brandName))}"`);
290
- }
291
- if (brandHref != null && String(brandHref).trim() !== '') {
292
- parts.push(` brand-href="${escapeAttr(String(brandHref))}"`);
293
- }
294
- if (brandLogo != null && String(brandLogo).trim() !== '') {
295
- parts.push(` brand-logo="${escapeAttr(String(brandLogo).trim())}"`);
296
- }
297
- return parts.join('');
298
- }
299
- function topNavChildAccountLabelAttr(childAccountLabel) {
300
- if (childAccountLabel == null || String(childAccountLabel).trim() === '') {
301
- return '';
302
- }
303
- return ` child-account-label="${escapeAttr(String(childAccountLabel).trim())}"`;
304
- }
305
- export const TopNavigation = (args) => {
306
- const { navControl, label, childAccountLabel, brandName, brandHref, brandLogo, menuUsername = 'Jane', menuEmail = 'jane@example.com', } = args;
307
- const navControlAttr = navControl === true ? ' nav-control' : '';
308
- const labelAttr = topNavLabelAttr(label);
309
- const childAccountAttr = topNavChildAccountLabelAttr(childAccountLabel);
310
- const brandAttr = topNavBrandAttrs(brandName, brandHref, brandLogo);
311
- const username = menuUsername?.trim() ? escapeAttr(menuUsername.trim()) : '';
312
- const email = menuEmail?.trim() ? escapeAttr(menuEmail.trim()) : '';
313
- const navHeaderMenuAttrs = [
314
- username ? `username="${username}"` : '',
315
- email ? `email="${email}"` : '',
316
- ]
317
- .filter(Boolean)
318
- .join(' ');
319
- const brandLogoSlot = brandLogo != null && String(brandLogo).trim() !== ''
320
- ? ''
321
- : `
322
- <xpl-icon slot="brand-logo" icon="rocket" size="24"></xpl-icon>`;
323
- const rightAsideBlock = `
324
- <xpl-button variant="tertiary" size="lg" slot="right-aside">
325
- <xpl-icon icon="message-writing" size="20"></xpl-icon>
326
- Inbox
327
- <xpl-badge dot-only>7</xpl-badge>
328
- </xpl-button>`;
329
- const rightAsideMobileBlock = `
330
- <xpl-top-nav-item slot="right-aside-mobile" label="Inbox" icon="message-writing"></xpl-top-nav-item>
331
- `;
332
- const groupedNavItem = `
333
- <xpl-top-nav-item slot="left-aside" label="Xplor Ops" open-mode="hover">
334
- <xpl-top-nav-menu slot="dropdown" label="Xplor Ops">
335
- <xpl-top-nav-item label="Payroll" href="#"></xpl-top-nav-item>
336
- <xpl-top-nav-item label="Capital" href="#">
337
- <xpl-icon slot="trailing-icon" icon="open-rect-arrow-out"></xpl-icon>
338
- </xpl-top-nav-item>
339
- </xpl-top-nav-menu>
340
- </xpl-top-nav-item>`;
341
- return `
342
- <xpl-top-nav${navControlAttr}${labelAttr}${childAccountAttr}${brandAttr}>
343
- ${brandLogoSlot}
344
- <xpl-top-nav-item slot="left-aside" label="Home" selected></xpl-top-nav-item>
345
- <xpl-top-nav-item slot="left-aside" label="Dashboard"></xpl-top-nav-item>
346
- <xpl-top-nav-item slot="left-aside" label="Settings"></xpl-top-nav-item>${groupedNavItem}${rightAsideBlock}
347
- <xpl-nav-header-menu slot="user-menu" ${navHeaderMenuAttrs}>${rightAsideMobileBlock}
348
- <xpl-top-nav-item label="View Account" icon="house-4" selected></xpl-top-nav-item>
349
- <xpl-top-nav-item
350
- label="Change Account"
351
- icon="refresh"
352
- description="Acme Corp — Downtown Location"
353
- ></xpl-top-nav-item>
354
- <xpl-top-nav-item label="Logout" icon="open-rect-arrow-out"></xpl-top-nav-item>
355
- </xpl-nav-header-menu>
356
- </xpl-top-nav>
357
- `.trim();
358
- };
359
- const HtmlTopNavigation = (args) => {
360
- const { navControl, label, childAccountLabel, brandName, brandHref, brandLogo } = args;
361
- const navAriaLabel = label != null && String(label).trim() !== '' ? String(label) : 'top-navigation-bar';
362
- const demoBrand = brandName != null && String(brandName).trim() !== '' ? String(brandName).trim() : 'My App';
363
- const demoBrandLink = brandHref != null && String(brandHref).trim() !== '' ? brandHref : '#';
364
- const safeBrandText = demoBrand
365
- .replace(/&/g, '&amp;')
366
- .replace(/</g, '&lt;')
367
- .replace(/>/g, '&gt;');
368
- const logoUrl = brandLogo != null && String(brandLogo).trim() !== '' ? String(brandLogo).trim() : '';
369
- const showChildRow = childAccountLabel != null && String(childAccountLabel).trim() !== '';
370
- const safeChildLabel = showChildRow && childAccountLabel != null
371
- ? String(childAccountLabel)
372
- .replace(/&/g, '&amp;')
373
- .replace(/</g, '&lt;')
374
- .replace(/>/g, '&gt;')
375
- : '';
376
- const lines = [
377
- '<div class="dark xpl-top-nav sb-top-nav-html-root">',
378
- ` <nav aria-label="${navAriaLabel.replace(/"/g, '&quot;')}" class="xpl-top-nav__bar sb-top-nav-html-bar">`,
379
- ' <div class="xpl-top-nav__inner-left sb-top-nav-html-inner-left">',
380
- ];
381
- if (navControl) {
382
- lines.push(' <button type="button" class="xpl-top-nav__nav-control sb-top-nav-html-nav-control" aria-expanded="false" aria-label="Open navigation menu">', ' <xpl-icon icon="menu" class="xpl-top-nav__control-icon" aria-hidden="true"></xpl-icon>', ' </button>');
383
- }
384
- lines.push(' <div class="xpl-top-nav__aside xpl-nav-left sb-top-nav-html-aside-left">');
385
- if (logoUrl) {
386
- const alt = demoBrand ? escapeAttr(demoBrand) : 'Brand';
387
- lines.push(` <a href="${demoBrandLink.replace(/"/g, '&quot;')}" class="sb-top-nav-html-brand-link">`, ` <img src="${escapeAttr(logoUrl)}" alt="${alt}" class="sb-top-nav-html-brand-img" />`);
388
- if (demoBrand) {
389
- lines.push(` <span class="sb-top-nav-html-brand-text">${safeBrandText}</span>`);
390
- }
391
- lines.push(' </a>');
392
- }
393
- else {
394
- lines.push(' <div class="sb-top-nav-html-brand-row">', ' <xpl-icon icon="rocket" size="24"></xpl-icon>', ` <a href="${demoBrandLink.replace(/"/g, '&quot;')}" class="sb-top-nav-html-brand-text-link">${safeBrandText}</a>`, ' </div>');
395
- }
396
- lines.push(' <a href="#" class="sb-top-nav-html-nav-link">Home</a>', ' <a href="#" class="sb-top-nav-html-nav-link">Dashboard</a>', ' <a href="#" class="sb-top-nav-html-nav-link">Settings</a>', ' </div>', ' </div>', ' <div class="xpl-top-nav__aside xpl-nav-right sb-top-nav-html-aside-right">', ' <xpl-button variant="tertiary" size="lg">', ' <xpl-icon icon="message-writing" size="20"></xpl-icon>', ' Inbox', ' <xpl-badge dot-only>7</xpl-badge>', ' </xpl-button>');
397
- if (showChildRow) {
398
- lines.push(` <button type="button" class="sb-top-nav-html-account-btn">${safeChildLabel} <xpl-icon icon="chevron-down" size="20"></xpl-icon></button>`);
399
- }
400
- lines.push(` <!-- user-menu: internal xpl-popover opened by the built-in child-account trigger -->`, ' </div>', ' </nav>', '</div>');
401
- return lines.join('\n');
402
- };
403
- TopNavigation.args = {
404
- previewViewport: 'responsive',
405
- navControl: true,
406
- label: 'Main navigation',
407
- childAccountLabel: 'Child Account',
408
- brandName: 'My App',
409
- brandHref: '#',
410
- brandLogo: '',
411
- menuUsername: 'Jane',
412
- menuEmail: 'jane@example.com',
413
- };
414
- TopNavigation.decorators = [topNavPreviewViewportDecorator];
415
- TopNavigation.argTypes = {
416
- previewViewport: {
417
- control: 'select',
418
- options: ['responsive', 'iphone12'],
419
- description: '**Storybook preview width** (updates **`globals.viewport`** — same as the viewport toolbar). **`responsive`** = full iframe (desktop nav). **`iphone12`** / narrow the iframe so **`top-nav.css`** mobile rules apply. Switch back to **Responsive** before leaving this story if other stories need a wide canvas.',
420
- table: { category: 'Storybook' },
421
- },
422
- brandName: {
423
- control: 'text',
424
- description: 'Built-in **`brand-name`** attribute (shown next to **`slot="brand-logo"`** / **`brand-logo`** URL). Clear both **`brand-name`** and **`brand-href`** in Controls to hide the brand row in the Web Component panel (keep **`slot="brand-logo"`** only if you still need a logo-only row).',
425
- },
426
- brandHref: {
427
- control: 'text',
428
- description: 'Built-in **`brand-href`** — native navigation for the brand control. **`#`** is fine for Storybook. **Clear** this field so the brand uses **`role="button"`** and emits **`brandClick`** (see **Actions**).',
429
- },
430
- brandLogo: {
431
- control: 'text',
432
- description: 'Optional **`brand-logo`** image URL. When set, the built-in **`&lt;img&gt;`** is used and **`slot="brand-logo"`** (icon) is omitted in this story.',
433
- table: { category: 'Brand' },
434
- },
435
- childAccountLabel: {
436
- control: 'text',
437
- description: '**`child-account-label`** — label beside the chevron on the built-in account menu trigger (with **`slot="user-menu"`**). Clear for chevron-only trigger.',
438
- },
439
- navControl: {
440
- control: 'boolean',
441
- description: 'Renders the hamburger in the DOM. CSS shows it only below **`md`** (**max-width 767px** at default Tailwind); **`left-aside`** is hidden at that width until the drawer opens. When **off**, **`left-aside`** stays hidden on narrow viewports **with no drawer**. Emits **`navOpen`** when the control is used.',
442
- },
443
- label: {
444
- control: 'text',
445
- description: 'Accessible name for the `<nav>` landmark (`aria-label`). Use a unique value when the page has multiple navigation regions. Clear to use default `top-navigation-bar`.',
446
- },
447
- menuUsername: {
448
- control: 'text',
449
- description: '**`username`** on **`xpl-nav-header-menu`**.',
450
- table: { category: 'User menu (panel)' },
451
- },
452
- menuEmail: {
453
- control: 'text',
454
- description: '**`email`** on **`xpl-nav-header-menu`**.',
455
- table: { category: 'User menu (panel)' },
456
- },
457
- navOpen: {
458
- control: false,
459
- description: '**Event** (not a prop): `navOpen` — `CustomEvent<boolean>`; `detail` is the new open state when the nav control is used or **Escape** closes the mobile drawer (when **`nav-control`** is set).',
460
- table: { category: 'Events' },
461
- },
462
- brandClick: {
463
- control: false,
464
- description: '**Event** (not a prop): `brandClick` — `CustomEvent<MouseEvent>`; fires when the built-in brand is activated and **`brand-href`** is **not** set. Clear **`brand-href`** in Controls, then click the brand.',
465
- table: { category: 'Events' },
466
- },
467
- };
468
- TopNavigation.parameters = {
469
- layout: 'fullscreen',
470
- design: TOP_NAV_FIGMA_DESIGN,
471
- viewport: {
472
- viewports: {
473
- ...INITIAL_VIEWPORTS,
474
- mobile600: TOP_NAV_MOBILE600_VIEWPORT,
475
- },
476
- },
477
- 'web-component': {
478
- render: TopNavigation(TopNavigation.args),
479
- },
480
- html: {
481
- render: HtmlTopNavigation(TopNavigation.args),
482
- },
483
- };
484
- export const TopNavItem = (args) => {
485
- const attrs = [
486
- args.active === true ? ' active' : '',
487
- args.href != null && args.href !== '' ? `href="${escapeAttr(args.href)}"` : '',
488
- args.label != null && args.label !== '' ? `label="${escapeAttr(args.label)}"` : '',
489
- args.icon != null && args.icon !== '' ? `icon="${escapeAttr(args.icon)}"` : '',
490
- args.description != null && args.description !== ''
491
- ? `description="${escapeAttr(args.description)}"`
492
- : '',
493
- args.itemAriaLabel != null && args.itemAriaLabel !== ''
494
- ? `item-aria-label="${escapeAttr(args.itemAriaLabel)}"`
495
- : '',
496
- args.openMode === 'hover' ? ' open-mode="hover"' : '',
497
- args.selected === true ? ' selected' : '',
498
- ]
499
- .filter(Boolean)
500
- .join(' ');
501
- const hasLabel = args.label != null && args.label !== '';
502
- const trailingIconSlot = args.trailingIcon != null && args.trailingIcon !== ''
503
- ? `\n <xpl-icon slot="trailing-icon" icon="${escapeAttr(args.trailingIcon)}"></xpl-icon>`
504
- : '';
505
- const dropdownSlot = args.showDropdown === true
506
- ? `\n <xpl-top-nav-menu slot="dropdown" label="${escapeAttr(args.label ?? 'Menu')}">
507
- <xpl-top-nav-item label="Payroll" href="#"></xpl-top-nav-item>
508
- <xpl-top-nav-item label="Capital" href="#" selected>
509
- <xpl-icon slot="trailing-icon" icon="open-rect-arrow-out"></xpl-icon>
510
- </xpl-top-nav-item>
511
- </xpl-top-nav-menu>`
512
- : '';
513
- return `
514
- <div class="dark sb-top-nav-item-story-bar">
515
- <xpl-top-nav-item ${attrs.trim()}>
516
- ${hasLabel ? '' : ' <span>Custom slot content</span>'}${trailingIconSlot}${dropdownSlot}
517
- </xpl-top-nav-item>
518
- </div>
519
- `.trim();
520
- };
521
- const HtmlTopNavItem = (args) => {
522
- const label = args.label != null && args.label !== '' ? args.label : 'Custom slot content';
523
- const selected = args.selected === true;
524
- const hasIcon = args.icon != null && args.icon !== '';
525
- const hasHref = args.href != null && args.href !== '';
526
- const ariaCurrent = selected ? ' aria-current="page"' : '';
527
- const iconPlaceholder = hasIcon ? '<span class="sb-top-nav-html-item-icon">◆</span>' : '';
528
- const innerContent = hasIcon
529
- ? ` ${iconPlaceholder}\n <span>${label}</span>`
530
- : ` <span>${label}</span>`;
531
- const innerClasses = [
532
- 'sb-top-nav-html-item-inner',
533
- selected ? 'sb-top-nav-html-item-inner--selected' : '',
534
- ]
535
- .filter(Boolean)
536
- .join(' ');
537
- const innerTag = hasHref
538
- ? ` <a href="${escapeAttr(args.href ?? '')}"${ariaCurrent} class="${innerClasses}">`
539
- : ` <button type="button"${ariaCurrent} class="${innerClasses}">`;
540
- const innerClose = hasHref ? ' </a>' : ' </button>';
541
- const lines = [
542
- '<div class="dark sb-top-nav-item-story-bar">',
543
- ' <div role="listitem">',
544
- innerTag,
545
- innerContent,
546
- innerClose,
547
- ' </div>',
548
- '</div>',
549
- ];
550
- return lines.join('\n');
551
- };
552
- TopNavItem.args = {
553
- href: '',
554
- label: 'Nav item',
555
- selected: false,
556
- openMode: 'click',
557
- showDropdown: false,
558
- };
559
- TopNavItem.argTypes = {
560
- active: {
561
- control: 'boolean',
562
- description: 'Adds `xpl-top-nav-item--active` for accent styling (separate from `selected` / current page).',
563
- },
564
- href: {
565
- control: 'text',
566
- description: 'When set, the item renders as a native `<a>` link instead of a native `<button>`. Use `#` for in-page demo. Clear to switch back to button mode.',
567
- },
568
- label: {
569
- control: 'text',
570
- description: 'Optional label to display as text. Omit to use the default slot for custom content.',
571
- },
572
- icon: {
573
- control: 'text',
574
- description: 'Icon name from the Apollo icon set for `slot="leading-icon"`\'s fallback (e.g. house-4, wrench). Empty = no icon. Ignored when `slot="leading-icon"` content is present.',
575
- },
576
- description: {
577
- control: 'text',
578
- description: 'Optional second line below `label` (row context — e.g. inside `xpl-nav-header-menu`). Empty = single-line row.',
579
- },
580
- trailingIcon: {
581
- control: 'text',
582
- description: 'Storybook-only: demos `slot="trailing-icon"` with the given icon name (e.g. `open-rect-arrow-out` for "opens in new window"). When `showDropdown` is also on, this replaces the auto `chevron-down`.',
583
- table: { category: 'Storybook' },
584
- },
585
- itemAriaLabel: {
586
- control: 'text',
587
- description: 'Maps to `item-aria-label`: accessible name for icon-only items (no label / default-slot text).',
588
- },
589
- openMode: {
590
- control: 'select',
591
- options: ['click', 'hover'],
592
- description: 'How `slot="dropdown"` opens. `hover` only activates on hover-capable, fine-pointer, `md`-and-up devices (falls back to click/tap otherwise); Enter/Space always toggles regardless. Requires `showDropdown`.',
593
- },
594
- selected: {
595
- control: 'boolean',
596
- description: 'Whether the item is selected. Sets aria-current="page" and selected styling.',
597
- },
598
- showDropdown: {
599
- control: 'boolean',
600
- description: 'Storybook-only: demos this item as a dropdown trigger with `slot="dropdown"` content (auto chevron, `open` state, `openMode`).',
601
- table: { category: 'Storybook' },
602
- },
603
- navItemClick: {
604
- control: false,
605
- description: '**Event** (not a prop): `navItemClick` — `CustomEvent<MouseEvent>`; `detail` is the originating click. Not emitted when `slot="dropdown"` is used.',
606
- table: { category: 'Events' },
607
- },
608
- openChange: {
609
- control: false,
610
- description: '**Event** (not a prop): `openChange` — `CustomEvent<boolean>`; fires whenever `open` changes (click, hover, keyboard, Escape, outside click, or programmatic).',
611
- table: { category: 'Events' },
612
- },
613
- };
614
- TopNavItem.parameters = {
615
- layout: 'centered',
616
- design: TOP_NAV_FIGMA_DESIGN,
617
- 'web-component': {
618
- render: TopNavItem(TopNavItem.args),
619
- },
620
- html: {
621
- render: HtmlTopNavItem(TopNavItem.args),
622
- },
623
- };
624
- export const TopNavMenuGroup = (args) => {
625
- const label = args.label != null && args.label !== '' ? args.label : 'Xplor Ops';
626
- return `
627
- <div class="dark sb-top-nav-menu-shell--min">
628
- <xpl-top-nav-menu label="${escapeAttr(label)}">
629
- <xpl-top-nav-item label="Payroll" href="#"></xpl-top-nav-item>
630
- <xpl-top-nav-item label="Capital" href="#" selected>
631
- <xpl-icon slot="trailing-icon" icon="open-rect-arrow-out"></xpl-icon>
632
- </xpl-top-nav-item>
633
- <xpl-top-nav-item label="Xplor Ops Home" description="xplorops.com" href="#"></xpl-top-nav-item>
634
- </xpl-top-nav-menu>
635
- </div>
636
- `.trim();
637
- };
638
- const HtmlTopNavMenuGroup = (args) => {
639
- const label = args.label != null && args.label !== '' ? args.label : 'Xplor Ops';
640
- return [
641
- '<div class="dark sb-top-nav-menu-shell--min">',
642
- ` <div role="list" aria-label="${escapeAttr(label)}" class="sb-top-nav-menu-list">`,
643
- ' <a href="#">Payroll</a>',
644
- ' <a href="#">Capital</a>',
645
- ' <a href="#">Xplor Ops Home</a>',
646
- ' </div>',
647
- '</div>',
648
- ].join('\n');
649
- };
650
- TopNavMenuGroup.storyName = 'Nav Menu (grouping container)';
651
- TopNavMenuGroup.args = {
652
- label: 'Xplor Ops',
653
- };
654
- TopNavMenuGroup.argTypes = {
655
- label: {
656
- control: 'text',
657
- description: 'Accessible name for the list (`aria-label`) and, on small screens, the mobile cascade back-row label for this group.',
658
- },
659
- };
660
- TopNavMenuGroup.parameters = {
661
- layout: 'centered',
662
- design: TOP_NAV_FIGMA_DESIGN,
663
- docs: {
664
- description: {
665
- story: '**`xpl-top-nav-menu`** — a thin grouping container for `xpl-top-nav-item` rows. It is the panel ' +
666
- 'content for a **dropdown nav item**: nest it in a parent `xpl-top-nav-item`\'s `slot="dropdown"` ' +
667
- "(see the `TopNavItem` story's `showDropdown` control). On desktop it renders as a flyout under the " +
668
- 'parent; on narrow viewports the same markup drives the **mobile cascade** (drill-in with an auto ' +
669
- 'back row). This is **not** the account menu — for the profile/account panel see **Nav Header Menu ' +
670
- '(account)** (`xpl-nav-header-menu`). The two only share panel chrome (width, surface, shadow, radius, ' +
671
- 'padding); their roles differ.',
672
- },
673
- },
674
- 'web-component': {
675
- render: TopNavMenuGroup(TopNavMenuGroup.args),
676
- },
677
- html: {
678
- render: HtmlTopNavMenuGroup(TopNavMenuGroup.args),
679
- },
680
- };
681
- export const TopNavMenu = (args) => {
682
- const attrs = [
683
- args.username != null && args.username !== ''
684
- ? `username="${escapeAttr(args.username)}"`
685
- : '',
686
- args.email != null && args.email !== '' ? `email="${escapeAttr(args.email)}"` : '',
687
- ]
688
- .filter(Boolean)
689
- .join(' ');
690
- const rightAsideMobile = args.showRightAsideMobile !== false
691
- ? `
692
- <xpl-top-nav-item slot="right-aside-mobile" label="Inbox" icon="message-writing"></xpl-top-nav-item>`
693
- : '';
694
- return `
695
- <div class="dark sb-top-nav-menu-shell">
696
- <xpl-nav-header-menu ${attrs.trim()}>${rightAsideMobile}
697
- <xpl-top-nav-item label="View Account" icon="house-4" selected></xpl-top-nav-item>
698
- <xpl-top-nav-item label="Change Account" icon="refresh"></xpl-top-nav-item>
699
- <xpl-top-nav-item label="Logout" icon="open-rect-arrow-out"></xpl-top-nav-item>
700
- </xpl-nav-header-menu>
701
- </div>
702
- `.trim();
703
- };
704
- const HtmlTopNavMenu = (args) => {
705
- const username = args.username != null && args.username !== '' ? args.username : '';
706
- const email = args.email != null && args.email !== '' ? args.email : '';
707
- const lines = [
708
- '<div class="dark sb-top-nav-menu-shell--min">',
709
- ' <div class="sb-top-nav-menu-profile">',
710
- ' <div class="sb-top-nav-menu-profile-inner">',
711
- ];
712
- if (username) {
713
- lines.push(` <div class="sb-top-nav-menu-username">${escapeAttr(username)}</div>`);
714
- }
715
- if (email) {
716
- lines.push(` <div class="sb-top-nav-menu-email">${escapeAttr(email)}</div>`);
717
- }
718
- lines.push(' </div>', ' </div>');
719
- if (args.showRightAsideMobile !== false) {
720
- lines.push(' <div class="sb-top-nav-menu-right-aside-mobile">', ' <a href="#">Inbox</a>', ' </div>');
721
- }
722
- lines.push(' <div role="list" class="sb-top-nav-menu-list">', ' <a href="#">View Account</a>', ' <a href="#">Change Account</a>', ' <a href="#">Logout</a>', ' </div>', '</div>');
723
- return lines.join('\n');
724
- };
725
- TopNavMenu.storyName = 'Nav Header Menu (account)';
726
- TopNavMenu.args = {
727
- username: 'Katie Wilson',
728
- email: 'katie01@email.com',
729
- showRightAsideMobile: true,
730
- };
731
- TopNavMenu.argTypes = {
732
- username: {
733
- control: 'text',
734
- description: 'Username to display.',
735
- },
736
- email: {
737
- control: 'text',
738
- description: 'Email to display.',
739
- },
740
- showRightAsideMobile: {
741
- control: 'boolean',
742
- description: '**`slot="right-aside-mobile"`** strip (Inbox) between profile and list — matches **`xpl-top-nav`** narrow **`right-aside`** duplication.',
743
- },
744
- };
745
- TopNavMenu.parameters = {
746
- layout: 'centered',
747
- design: TOP_NAV_FIGMA_DESIGN,
748
- docs: {
749
- description: {
750
- story: '**`xpl-nav-header-menu`** — the account/profile panel: a profile header (`username`, `email`), an ' +
751
- 'optional narrow-only `slot="right-aside-mobile"` strip, and a default slot of `xpl-top-nav-item` ' +
752
- 'rows. It is usually slotted into `xpl-top-nav` `slot="user-menu"` and shown inside the account ' +
753
- 'popover. This is **not** the dropdown grouping container — for grouping child links under a parent ' +
754
- 'nav item (desktop flyout / mobile cascade) see **Nav Menu (grouping container)** ' +
755
- '(`xpl-top-nav-menu`).',
756
- },
757
- },
758
- 'web-component': {
759
- render: TopNavMenu(TopNavMenu.args),
760
- },
761
- html: {
762
- render: HtmlTopNavMenu(TopNavMenu.args),
763
- },
764
- };