@xplortech/apollo-core 2.6.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 (310) hide show
  1. package/.typings/apollo-components.html-data.json +626 -35
  2. package/build/style.css +5949 -3070
  3. package/dist/apollo-core/apollo-core.css +29 -19
  4. package/dist/apollo-core/apollo-core.esm.js +1 -1
  5. package/dist/apollo-core/p-0bf50890.entry.js +1 -0
  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-5549756c.entry.js → p-34438721.entry.js} +1 -1
  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-f5af9539.entry.js → p-36ba29da.entry.js} +1 -1
  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-02167464.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-C_Z2nG0p.js → p-C7bgJs6C.js} +2 -2
  17. package/dist/apollo-core/{p-42016063.entry.js → p-b61d7952.entry.js} +1 -1
  18. package/dist/apollo-core/{p-8a1affce.entry.js → p-ca127ee8.entry.js} +1 -1
  19. package/dist/apollo-core/p-d1c9c233.entry.js +1 -0
  20. package/dist/apollo-core/p-dc205893.entry.js +1 -0
  21. package/dist/apollo-core/p-e2a5d41c.entry.js +1 -0
  22. package/dist/cjs/apollo-core.cjs.js +3 -3
  23. package/dist/cjs/{index-DH6pgWru.js → index-BQ97-AWw.js} +18 -7
  24. package/dist/cjs/loader.cjs.js +2 -2
  25. package/dist/cjs/xpl-accordion.cjs.entry.js +3 -3
  26. package/dist/cjs/xpl-application-shell.cjs.entry.js +2 -2
  27. package/dist/cjs/{xpl-avatar_47.cjs.entry.js → xpl-avatar_54.cjs.entry.js} +3726 -536
  28. package/dist/cjs/xpl-button-row.cjs.entry.js +2 -2
  29. package/dist/cjs/xpl-calendar.cjs.entry.js +2 -2
  30. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +3 -3
  31. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +3 -3
  32. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +2 -2
  33. package/dist/cjs/xpl-grid-item.cjs.entry.js +2 -2
  34. package/dist/cjs/xpl-grid.cjs.entry.js +2 -2
  35. package/dist/cjs/xpl-large-card.cjs.entry.js +2 -2
  36. package/dist/cjs/xpl-main-nav.cjs.entry.js +2 -2
  37. package/dist/cjs/xpl-table-header-cell.cjs.entry.js +1 -1
  38. package/dist/cjs/xpl-table-header.cjs.entry.js +2 -2
  39. package/dist/cjs/xpl-toggle.cjs.entry.js +4 -4
  40. package/dist/cjs/xpl-toolbar.cjs.entry.js +3 -3
  41. package/dist/collection/collection-manifest.json +11 -5
  42. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  43. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  44. package/dist/collection/components/xpl-avatar/avatar.stories.js +122 -107
  45. package/dist/collection/components/xpl-avatar/xpl-avatar.js +249 -15
  46. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  47. package/dist/collection/components/xpl-badge/badge.stories.js +1 -33
  48. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  49. package/dist/collection/components/xpl-banner/xpl-banner.js +4 -3
  50. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  51. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  52. package/dist/collection/components/xpl-button/xpl-button.js +21 -3
  53. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  54. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  55. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +25 -3
  56. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  57. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  58. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  59. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  60. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  61. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  62. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  63. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  64. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +77 -7
  65. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +1 -1
  66. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  67. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  68. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  69. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  70. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
  71. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  72. package/dist/collection/components/xpl-input/input.stories.js +96 -1
  73. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  74. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  75. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  76. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  77. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +485 -0
  78. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  79. package/dist/collection/components/xpl-input/xpl-input.js +130 -18
  80. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  81. package/dist/collection/components/xpl-list/list.stories.js +300 -63
  82. package/dist/collection/components/xpl-list/xpl-list-item/xpl-list-item.js +818 -0
  83. package/dist/collection/components/xpl-list/xpl-list.js +579 -21
  84. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  85. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  86. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  87. package/dist/collection/components/xpl-pagination/pagination.stories.js +18 -0
  88. package/dist/collection/components/xpl-pagination/xpl-pagination.js +7 -3
  89. package/dist/collection/components/xpl-panel/panel.stories.js +5 -3
  90. package/dist/collection/components/xpl-panel/xpl-panel.js +3 -3
  91. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  92. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  93. package/dist/collection/components/xpl-progress-indicator/progress-indicator.stories.js +118 -0
  94. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +171 -0
  95. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  96. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  97. package/dist/collection/components/xpl-select/xpl-select.js +58 -6
  98. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  99. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  100. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  101. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  102. package/dist/collection/components/xpl-spotlight/spotlight.stories.js +385 -0
  103. package/dist/collection/components/xpl-spotlight/xpl-spotlight.js +1085 -0
  104. package/dist/collection/components/xpl-tab/xpl-tab.js +261 -8
  105. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +22 -15
  106. package/dist/collection/components/xpl-table/xpl-table.js +5 -5
  107. package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
  108. package/dist/collection/components/xpl-tabs/segment-control.stories.js +31 -0
  109. package/dist/collection/components/xpl-tabs/tabs.shared.js +156 -0
  110. package/dist/collection/components/xpl-tabs/tabs.stories.js +10 -60
  111. package/dist/collection/components/xpl-tabs/xpl-tabs.js +338 -62
  112. package/dist/collection/components/xpl-tag/tag.stories.js +153 -0
  113. package/dist/collection/components/xpl-tag/xpl-tag.js +312 -9
  114. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  115. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  116. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  117. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  118. package/dist/collection/components/xpl-top-nav/top-nav.stories.js +625 -0
  119. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +122 -0
  120. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +481 -0
  121. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +433 -0
  122. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  123. package/dist/collection/utils/lifecycle.js +79 -0
  124. package/dist/collection/utils/tab-a11y-ids.js +22 -0
  125. package/dist/components/floating-ui.dom.js +1 -0
  126. package/dist/components/index.js +1 -1
  127. package/dist/components/tab-a11y-ids.js +1 -0
  128. package/dist/components/xpl-accordion.js +1 -1
  129. package/dist/components/xpl-application-shell.js +1 -1
  130. package/dist/components/xpl-avatar2.js +1 -1
  131. package/dist/components/xpl-backdrop2.js +1 -1
  132. package/dist/components/xpl-badge2.js +1 -1
  133. package/dist/components/xpl-banner.js +1 -1
  134. package/dist/components/xpl-breadcrumb-item.js +1 -1
  135. package/dist/components/xpl-breadcrumbs.js +1 -1
  136. package/dist/components/xpl-button-row.js +1 -1
  137. package/dist/components/xpl-button2.js +1 -1
  138. package/dist/components/xpl-calendar.js +1 -1
  139. package/dist/components/xpl-checkbox2.js +1 -1
  140. package/dist/components/xpl-choicelist.js +1 -1
  141. package/dist/components/xpl-content-area.js +1 -1
  142. package/dist/components/xpl-dashboard.js +1 -1
  143. package/dist/components/xpl-data-card.js +1 -1
  144. package/dist/components/xpl-divider2.js +1 -1
  145. package/dist/components/xpl-dropdown-group2.js +1 -1
  146. package/dist/components/xpl-dropdown-heading2.js +1 -1
  147. package/dist/components/xpl-dropdown-option2.js +1 -1
  148. package/dist/components/xpl-dropdown2.js +1 -1
  149. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  150. package/dist/components/xpl-dynamic-table-row.js +1 -1
  151. package/dist/components/xpl-dynamic-table.js +1 -1
  152. package/dist/components/xpl-grid-item.js +1 -1
  153. package/dist/components/xpl-grid.js +1 -1
  154. package/dist/components/xpl-header-accordion.js +1 -1
  155. package/dist/components/xpl-icon2.js +1 -1
  156. package/dist/components/xpl-input-date2.js +1 -1
  157. package/dist/components/xpl-input-file2.js +1 -1
  158. package/dist/components/xpl-input-search.d.ts +11 -0
  159. package/dist/components/xpl-input-search.js +1 -0
  160. package/dist/components/xpl-input-search2.js +1 -0
  161. package/dist/components/xpl-input2.js +1 -1
  162. package/dist/components/xpl-large-card.js +1 -1
  163. package/dist/components/{xpl-progress.d.ts → xpl-list-item.d.ts} +4 -4
  164. package/dist/components/xpl-list-item.js +1 -0
  165. package/dist/components/xpl-list-item2.js +1 -0
  166. package/dist/components/xpl-list.js +1 -1
  167. package/dist/components/xpl-main-nav.js +1 -1
  168. package/dist/components/xpl-modal.js +1 -1
  169. package/dist/components/xpl-nav-header-menu.d.ts +11 -0
  170. package/dist/components/xpl-nav-header-menu.js +1 -0
  171. package/dist/components/xpl-nav-item.js +1 -1
  172. package/dist/components/xpl-pagination.js +1 -1
  173. package/dist/components/xpl-panel.js +1 -1
  174. package/dist/components/xpl-popover2.js +1 -1
  175. package/dist/components/xpl-progress-bar.js +1 -1
  176. package/dist/components/xpl-progress-indicator.d.ts +11 -0
  177. package/dist/components/xpl-progress-indicator.js +1 -0
  178. package/dist/components/xpl-radio2.js +1 -1
  179. package/dist/components/xpl-secondary-nav.js +1 -1
  180. package/dist/components/xpl-select2.js +1 -1
  181. package/dist/components/xpl-side-nav-item.js +1 -1
  182. package/dist/components/xpl-side-nav.js +1 -1
  183. package/dist/components/xpl-skeleton.js +1 -1
  184. package/dist/components/xpl-slideout.js +1 -1
  185. package/dist/components/xpl-spotlight.d.ts +11 -0
  186. package/dist/components/xpl-spotlight.js +1 -0
  187. package/dist/components/xpl-tab-panel.js +1 -1
  188. package/dist/components/xpl-tab.js +1 -1
  189. package/dist/components/xpl-table-header.js +1 -1
  190. package/dist/components/xpl-table.js +1 -1
  191. package/dist/components/xpl-tabs.js +1 -1
  192. package/dist/components/xpl-tag2.js +1 -1
  193. package/dist/components/xpl-toast.js +1 -1
  194. package/dist/components/xpl-toggle.js +1 -1
  195. package/dist/components/xpl-toolbar.js +1 -1
  196. package/dist/components/xpl-tooltip2.js +1 -1
  197. package/dist/components/xpl-top-nav-item.d.ts +11 -0
  198. package/dist/components/xpl-top-nav-item.js +1 -0
  199. package/dist/components/xpl-top-nav-item2.js +1 -0
  200. package/dist/components/xpl-top-nav.d.ts +11 -0
  201. package/dist/components/xpl-top-nav.js +1 -0
  202. package/dist/components/xpl-utility-bar.js +1 -1
  203. package/dist/docs/xpl-avatar/readme.md +289 -15
  204. package/dist/docs/xpl-badge/readme.md +14 -9
  205. package/dist/docs/xpl-banner/readme.md +48 -11
  206. package/dist/docs/xpl-button/readme.md +28 -18
  207. package/dist/docs/xpl-calendar/readme.md +1 -1
  208. package/dist/docs/xpl-checkbox/readme.md +12 -11
  209. package/dist/docs/xpl-divider/readme.md +6 -4
  210. package/dist/docs/xpl-dropdown/readme.md +14 -12
  211. package/dist/docs/xpl-icon/readme.md +14 -2
  212. package/dist/docs/xpl-input/readme.md +66 -41
  213. package/dist/docs/xpl-input/xpl-input-color/readme.md +1 -0
  214. package/dist/docs/xpl-input/xpl-input-phone/readme.md +1 -0
  215. package/dist/docs/xpl-input/xpl-input-search/readme.md +175 -0
  216. package/dist/docs/xpl-input/xpl-input-time/readme.md +1 -0
  217. package/dist/docs/xpl-list/readme.md +320 -10
  218. package/dist/docs/xpl-list/xpl-list-item/readme.md +99 -0
  219. package/dist/docs/xpl-pagination/readme.md +1 -0
  220. package/dist/docs/xpl-panel/readme.md +108 -17
  221. package/dist/docs/xpl-popover/readme.md +2 -0
  222. package/dist/docs/xpl-progress-indicator/readme.md +234 -0
  223. package/dist/docs/xpl-radio/readme.md +6 -4
  224. package/dist/docs/xpl-select/readme.md +19 -16
  225. package/dist/docs/xpl-side-nav/readme.md +2 -2
  226. package/dist/docs/xpl-slideout/readme.md +1 -1
  227. package/dist/docs/xpl-spotlight/readme.md +235 -0
  228. package/dist/docs/xpl-tab/readme.md +43 -7
  229. package/dist/docs/xpl-tab-panel/readme.md +42 -0
  230. package/dist/docs/xpl-tabs/readme.md +62 -8
  231. package/dist/docs/xpl-tag/readme.md +379 -4
  232. package/dist/docs/xpl-toast/readme.md +1 -1
  233. package/dist/docs/xpl-top-nav/readme.md +179 -0
  234. package/dist/docs/xpl-top-nav/xpl-nav-header-menu/readme.md +81 -0
  235. package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +87 -0
  236. package/dist/esm/apollo-core.js +4 -4
  237. package/dist/esm/{index-C_Z2nG0p.js → index-C7bgJs6C.js} +18 -8
  238. package/dist/esm/loader.js +3 -3
  239. package/dist/esm/xpl-accordion.entry.js +3 -3
  240. package/dist/esm/xpl-application-shell.entry.js +2 -2
  241. package/dist/esm/{xpl-avatar_47.entry.js → xpl-avatar_54.entry.js} +3719 -536
  242. package/dist/esm/xpl-button-row.entry.js +2 -2
  243. package/dist/esm/xpl-calendar.entry.js +2 -2
  244. package/dist/esm/xpl-dynamic-table-cell.entry.js +3 -3
  245. package/dist/esm/xpl-dynamic-table-row.entry.js +3 -3
  246. package/dist/esm/xpl-dynamic-table.entry.js +2 -2
  247. package/dist/esm/xpl-grid-item.entry.js +2 -2
  248. package/dist/esm/xpl-grid.entry.js +2 -2
  249. package/dist/esm/xpl-large-card.entry.js +2 -2
  250. package/dist/esm/xpl-main-nav.entry.js +2 -2
  251. package/dist/esm/xpl-table-header-cell.entry.js +1 -1
  252. package/dist/esm/xpl-table-header.entry.js +2 -2
  253. package/dist/esm/xpl-toggle.entry.js +4 -4
  254. package/dist/esm/xpl-toolbar.entry.js +3 -3
  255. package/dist/types/components/xpl-avatar/avatar.stories.d.ts +88 -29
  256. package/dist/types/components/xpl-avatar/xpl-avatar.d.ts +29 -2
  257. package/dist/types/components/xpl-badge/badge.stories.d.ts +0 -19
  258. package/dist/types/components/xpl-button/xpl-button.d.ts +7 -0
  259. package/dist/types/components/xpl-checkbox/xpl-checkbox.d.ts +2 -1
  260. package/dist/types/components/xpl-dropdown/xpl-dropdown.d.ts +5 -0
  261. package/dist/types/components/xpl-input/input.stories.d.ts +1 -0
  262. package/dist/types/components/xpl-input/xpl-input-search/xpl-input-search.d.ts +39 -0
  263. package/dist/types/components/xpl-input/xpl-input.d.ts +13 -5
  264. package/dist/types/components/xpl-list/list.stories.d.ts +299 -13
  265. package/dist/types/components/xpl-list/listitem.d.ts +13 -0
  266. package/dist/types/components/xpl-list/xpl-list-item/xpl-list-item.d.ts +71 -0
  267. package/dist/types/components/xpl-list/xpl-list.d.ts +55 -2
  268. package/dist/types/components/xpl-pagination/pagination.stories.d.ts +13 -0
  269. package/dist/types/components/xpl-panel/panel.stories.d.ts +2 -0
  270. package/dist/types/components/xpl-progress-indicator/progress-indicator.stories.d.ts +62 -0
  271. package/dist/types/components/xpl-progress-indicator/xpl-progress-indicator.d.ts +11 -0
  272. package/dist/types/components/xpl-select/xpl-select.d.ts +3 -0
  273. package/dist/types/components/xpl-spotlight/spotlight.stories.d.ts +197 -0
  274. package/dist/types/components/xpl-spotlight/xpl-spotlight.d.ts +101 -0
  275. package/dist/types/components/xpl-tab/xpl-tab.d.ts +14 -1
  276. package/dist/types/components/xpl-tab-panel/xpl-tab-panel.d.ts +2 -1
  277. package/dist/types/components/xpl-tabs/segment-control.stories.d.ts +112 -0
  278. package/dist/types/components/xpl-tabs/tabs.shared.d.ts +156 -0
  279. package/dist/types/components/xpl-tabs/tabs.stories.d.ts +65 -12
  280. package/dist/types/components/xpl-tabs/xpl-tabs.d.ts +37 -18
  281. package/dist/types/components/xpl-tag/tag.stories.d.ts +65 -0
  282. package/dist/types/components/xpl-tag/xpl-tag.d.ts +36 -1
  283. package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +471 -0
  284. package/dist/types/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.d.ts +18 -0
  285. package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +48 -0
  286. package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +51 -0
  287. package/dist/types/components.d.ts +1521 -83
  288. package/dist/types/utils/lifecycle.d.ts +16 -0
  289. package/dist/types/utils/tab-a11y-ids.d.ts +4 -0
  290. package/package.json +12 -3
  291. package/dist/apollo-core/p-0bce3874.entry.js +0 -1
  292. package/dist/apollo-core/p-1fd3dc87.entry.js +0 -1
  293. package/dist/apollo-core/p-56fa4941.entry.js +0 -1
  294. package/dist/apollo-core/p-76c324da.entry.js +0 -1
  295. package/dist/apollo-core/p-7a3224b4.entry.js +0 -1
  296. package/dist/apollo-core/p-7e924697.entry.js +0 -1
  297. package/dist/apollo-core/p-9efca9e1.entry.js +0 -1
  298. package/dist/apollo-core/p-b252b380.entry.js +0 -1
  299. package/dist/apollo-core/p-c91daac1.entry.js +0 -1
  300. package/dist/apollo-core/p-d9b62508.entry.js +0 -1
  301. package/dist/apollo-core/p-eaea16d1.entry.js +0 -1
  302. package/dist/apollo-core/p-eed13bca.entry.js +0 -1
  303. package/dist/cjs/xpl-list.cjs.entry.js +0 -32
  304. package/dist/collection/components/xpl-progress/progress.stories.js +0 -106
  305. package/dist/collection/components/xpl-progress/xpl-progress.js +0 -60
  306. package/dist/components/xpl-progress.js +0 -1
  307. package/dist/docs/xpl-progress/readme.md +0 -22
  308. package/dist/esm/xpl-list.entry.js +0 -30
  309. package/dist/types/components/xpl-progress/progress.stories.d.ts +0 -38
  310. package/dist/types/components/xpl-progress/xpl-progress.d.ts +0 -6
@@ -0,0 +1,625 @@
1
+ import { addons } from "storybook/preview-api";
2
+ import { INITIAL_VIEWPORTS } from "storybook/viewport";
3
+ const UPDATE_GLOBALS = 'updateGlobals';
4
+ const TOP_NAV_MOBILE600_VIEWPORT = {
5
+ name: 'Mobile (600px)',
6
+ styles: { width: '600px', height: '900px' },
7
+ type: 'mobile',
8
+ };
9
+ const TOP_NAV_STORY_STYLE_ID = 'sb-top-nav-story-styles';
10
+ const TOP_NAV_STORY_CSS = `
11
+ .sb-top-nav-story-canvas {
12
+ box-sizing: border-box;
13
+ min-height: 100vh;
14
+ width: 100%;
15
+ padding: var(--xpl-space-0);
16
+ }
17
+ .sb-top-nav-html-root { width: 100%; }
18
+ .sb-top-nav-html-bar {
19
+ display: flex;
20
+ justify-content: space-between;
21
+ align-items: center;
22
+ padding: var(--xpl-space-8) var(--xpl-space-16);
23
+ height: var(--xpl-size-350);
24
+ background: var(--xpl-background-surface-default);
25
+ color: var(--xpl-text-subdued);
26
+ border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
27
+ }
28
+ .sb-top-nav-html-inner-left { display: flex; align-items: center; }
29
+ .sb-top-nav-html-nav-control {
30
+ margin-right: var(--xpl-space-16);
31
+ border: none;
32
+ padding: var(--xpl-space-0);
33
+ cursor: pointer;
34
+ }
35
+ .sb-top-nav-html-aside-left {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: var(--xpl-space-8);
39
+ flex: 1;
40
+ }
41
+ .sb-top-nav-html-brand-link {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: var(--xpl-space-8);
45
+ text-decoration: none;
46
+ color: inherit;
47
+ }
48
+ .sb-top-nav-html-brand-img { height: var(--xpl-size-100); width: auto; }
49
+ .sb-top-nav-html-brand-text,
50
+ .sb-top-nav-html-brand-text-link {
51
+ font-size: var(--xpl-font-size-title-4);
52
+ font-weight: var(--xpl-font-weight-medium);
53
+ color: var(--xpl-text-strong);
54
+ }
55
+ .sb-top-nav-html-brand-text-link { text-decoration: none; }
56
+ .sb-top-nav-html-brand-row {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--xpl-space-8);
60
+ }
61
+ .sb-top-nav-html-nav-link {
62
+ padding: var(--xpl-space-8);
63
+ font-size: var(--xpl-font-size-body);
64
+ }
65
+ .sb-top-nav-html-aside-right {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: flex-end;
69
+ gap: var(--xpl-space-8);
70
+ flex: 1;
71
+ }
72
+ .sb-top-nav-html-account-btn {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ gap: var(--xpl-space-8);
76
+ padding: var(--xpl-space-8);
77
+ font-size: var(--xpl-font-size-title-4);
78
+ font-weight: var(--xpl-font-weight-medium);
79
+ color: var(--xpl-text-strong);
80
+ border: none;
81
+ background-color: var(--xpl-background-surface-transparent-0);
82
+ cursor: pointer;
83
+ }
84
+ .sb-top-nav-item-story-bar {
85
+ display: flex;
86
+ align-items: center;
87
+ height: var(--xpl-size-350);
88
+ padding: var(--xpl-space-0) var(--xpl-space-16);
89
+ gap: var(--xpl-space-8);
90
+ background: var(--xpl-background-surface-default);
91
+ border: var(--xpl-border-small) solid var(--xpl-border-default);
92
+ border-radius: var(--xpl-border-radius-default);
93
+ }
94
+ .sb-top-nav-html-item-icon {
95
+ width: var(--xpl-size-100);
96
+ height: var(--xpl-size-100);
97
+ display: inline-block;
98
+ margin-right: var(--xpl-space-8);
99
+ }
100
+ .sb-top-nav-html-item-inner {
101
+ padding: var(--xpl-space-8);
102
+ font-size: var(--xpl-font-size-body);
103
+ border-radius: var(--xpl-border-radius-small);
104
+ display: flex;
105
+ align-items: center;
106
+ gap: var(--xpl-space-8);
107
+ cursor: pointer;
108
+ text-decoration: none;
109
+ color: inherit;
110
+ }
111
+ .sb-top-nav-html-item-inner--selected { color: var(--xpl-text-strong); }
112
+ .sb-top-nav-menu-shell {
113
+ background: var(--xpl-background-surface-default);
114
+ border: var(--xpl-border-small) solid var(--xpl-border-default);
115
+ border-radius: var(--xpl-border-radius-default);
116
+ width: var(--xpl-top-nav-panel-width);
117
+ display: flex;
118
+ flex-direction: column;
119
+ overflow: hidden;
120
+ padding: var(--xpl-space-0);
121
+ }
122
+ .sb-top-nav-menu-shell--min {
123
+ min-width: var(--xpl-top-nav-panel-width);
124
+ border: var(--xpl-border-small) solid var(--xpl-border-default);
125
+ border-radius: var(--xpl-border-radius-default);
126
+ overflow: hidden;
127
+ }
128
+ .sb-top-nav-menu-profile {
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: center;
132
+ text-align: center;
133
+ padding: var(--xpl-space-16);
134
+ border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
135
+ }
136
+ .sb-top-nav-menu-profile-inner { width: 100%; min-width: 0; }
137
+ .sb-top-nav-menu-username { font-weight: var(--xpl-font-weight-medium); }
138
+ .sb-top-nav-menu-email {
139
+ font-size: var(--xpl-font-size-caption);
140
+ color: var(--xpl-text-subdued);
141
+ }
142
+ .sb-top-nav-menu-list {
143
+ padding: var(--xpl-space-8) var(--xpl-space-0);
144
+ }
145
+ .sb-top-nav-menu-list a {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: var(--xpl-space-8);
149
+ padding: var(--xpl-space-8) var(--xpl-space-16);
150
+ color: inherit;
151
+ text-decoration: none;
152
+ }
153
+ .sb-top-nav-menu-right-aside-mobile {
154
+ display: flex;
155
+ flex-direction: column;
156
+ gap: var(--xpl-space-4);
157
+ padding: var(--xpl-space-4) var(--xpl-space-0);
158
+ border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
159
+ }
160
+ .sb-top-nav-menu-right-aside-mobile a {
161
+ display: flex;
162
+ align-items: center;
163
+ gap: var(--xpl-space-8);
164
+ padding: var(--xpl-space-10) var(--xpl-space-12);
165
+ color: inherit;
166
+ text-decoration: none;
167
+ }
168
+ `.trim();
169
+ function ensureTopNavStoryStyles() {
170
+ if (typeof document === 'undefined')
171
+ return;
172
+ if (document.getElementById(TOP_NAV_STORY_STYLE_ID))
173
+ return;
174
+ const style = document.createElement('style');
175
+ style.id = TOP_NAV_STORY_STYLE_ID;
176
+ style.textContent = TOP_NAV_STORY_CSS;
177
+ document.head.appendChild(style);
178
+ }
179
+ function syncTopNavPreviewViewportToGlobals(previewViewport, globalsSnapshot) {
180
+ var _a;
181
+ const next = previewViewport !== null && previewViewport !== void 0 ? previewViewport : 'responsive';
182
+ const raw = (_a = globalsSnapshot === null || globalsSnapshot === void 0 ? void 0 : globalsSnapshot.viewport) === null || _a === void 0 ? void 0 : _a.value;
183
+ const normalizedCurrent = raw == null || raw === '' || raw === 'reset' ? undefined : String(raw);
184
+ const desiredValue = next === 'responsive' ? undefined : next;
185
+ if (normalizedCurrent === desiredValue) {
186
+ return;
187
+ }
188
+ const channel = addons.getChannel();
189
+ if (channel == null) {
190
+ return;
191
+ }
192
+ if (next === 'responsive') {
193
+ channel.emit(UPDATE_GLOBALS, {
194
+ globals: { viewport: { value: undefined, isRotated: false } },
195
+ });
196
+ return;
197
+ }
198
+ channel.emit(UPDATE_GLOBALS, {
199
+ globals: { viewport: { value: next, isRotated: false } },
200
+ });
201
+ }
202
+ function topNavPreviewViewportDecorator(story, context) {
203
+ var _a;
204
+ const viewport = (_a = context.globals) === null || _a === void 0 ? void 0 : _a.viewport;
205
+ syncTopNavPreviewViewportToGlobals(context.args.previewViewport, { viewport });
206
+ return story();
207
+ }
208
+ function topNavDarkStoryDecorator(story) {
209
+ ensureTopNavStoryStyles();
210
+ const wrap = document.createElement('div');
211
+ wrap.className = 'dark sb-top-nav-story-canvas';
212
+ const result = story();
213
+ if (typeof result === 'string') {
214
+ const fragment = document.createRange().createContextualFragment(result);
215
+ wrap.append(fragment);
216
+ }
217
+ else if (result != null &&
218
+ typeof Node !== 'undefined' &&
219
+ result.nodeType !== undefined) {
220
+ wrap.appendChild(result);
221
+ }
222
+ return wrap;
223
+ }
224
+ const TOP_NAV_FIGMA_DESIGN = {
225
+ type: 'figma',
226
+ url: 'https://www.figma.com/design/MjjYek73MFnHmVNdm45Sd1/Apollo-Web?node-id=36021-13064&p=f&t=zPkMI4H5nK5XE3ZU-11',
227
+ };
228
+ const topNavFamilyDocsDescription = [
229
+ 'Horizontal top bar (`xpl-top-nav`), nav items (`xpl-top-nav-item`), 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.',
230
+ '',
231
+ '**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.',
232
+ '',
233
+ '### Events',
234
+ '',
235
+ '| Component | Event | When it fires | `event.detail` |',
236
+ '| --- | --- | --- | --- |',
237
+ '| **`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. |',
238
+ '| **`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`**. |',
239
+ '| **`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). |',
240
+ '| **`xpl-nav-header-menu`** | — | No custom events. | — |',
241
+ ].join('\n');
242
+ const meta = {
243
+ title: 'Components/Navigation/Top Navigation',
244
+ component: 'xpl-top-nav',
245
+ decorators: [topNavDarkStoryDecorator],
246
+ parameters: {
247
+ design: TOP_NAV_FIGMA_DESIGN,
248
+ darkMode: {
249
+ current: 'dark',
250
+ },
251
+ actions: {
252
+ handles: ['navOpen', 'brandClick'],
253
+ },
254
+ docs: {
255
+ description: {
256
+ component: topNavFamilyDocsDescription,
257
+ },
258
+ },
259
+ },
260
+ };
261
+ export default meta;
262
+ function escapeAttr(value) {
263
+ return value.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;');
264
+ }
265
+ function topNavLabelAttr(label) {
266
+ if (label == null || String(label).trim() === '') {
267
+ return '';
268
+ }
269
+ return ` label="${String(label).replace(/"/g, '&quot;')}"`;
270
+ }
271
+ function topNavBrandAttrs(brandName, brandHref, brandLogo) {
272
+ const parts = [];
273
+ if (brandName != null && String(brandName).trim() !== '') {
274
+ parts.push(` brand-name="${escapeAttr(String(brandName))}"`);
275
+ }
276
+ if (brandHref != null && String(brandHref).trim() !== '') {
277
+ parts.push(` brand-href="${escapeAttr(String(brandHref))}"`);
278
+ }
279
+ if (brandLogo != null && String(brandLogo).trim() !== '') {
280
+ parts.push(` brand-logo="${escapeAttr(String(brandLogo).trim())}"`);
281
+ }
282
+ return parts.join('');
283
+ }
284
+ function topNavChildAccountLabelAttr(childAccountLabel) {
285
+ if (childAccountLabel == null || String(childAccountLabel).trim() === '') {
286
+ return '';
287
+ }
288
+ return ` child-account-label="${escapeAttr(String(childAccountLabel).trim())}"`;
289
+ }
290
+ export const TopNavigation = (args) => {
291
+ const { navControl, label, childAccountLabel, brandName, brandHref, brandLogo, menuUsername = 'Jane', menuEmail = 'jane@example.com', } = args;
292
+ const navControlAttr = navControl === true ? ' nav-control' : '';
293
+ const labelAttr = topNavLabelAttr(label);
294
+ const childAccountAttr = topNavChildAccountLabelAttr(childAccountLabel);
295
+ const brandAttr = topNavBrandAttrs(brandName, brandHref, brandLogo);
296
+ const username = (menuUsername === null || menuUsername === void 0 ? void 0 : menuUsername.trim()) ? escapeAttr(menuUsername.trim()) : '';
297
+ const email = (menuEmail === null || menuEmail === void 0 ? void 0 : menuEmail.trim()) ? escapeAttr(menuEmail.trim()) : '';
298
+ const navHeaderMenuAttrs = [
299
+ username ? `username="${username}"` : '',
300
+ email ? `email="${email}"` : '',
301
+ ]
302
+ .filter(Boolean)
303
+ .join(' ');
304
+ const brandLogoSlot = brandLogo != null && String(brandLogo).trim() !== ''
305
+ ? ''
306
+ : `
307
+ <xpl-icon slot="brand-logo" icon="rocket" size="24"></xpl-icon>`;
308
+ const rightAsideBlock = `
309
+ <xpl-button variant="tertiary" size="lg" slot="right-aside">
310
+ <xpl-icon icon="message-writing" size="20"></xpl-icon>
311
+ Inbox
312
+ <xpl-badge dot-only>7</xpl-badge>
313
+ </xpl-button>`;
314
+ const rightAsideMobileBlock = `
315
+ <xpl-top-nav-item slot="right-aside-mobile" label="Inbox" icon="message-writing"></xpl-top-nav-item>
316
+ `;
317
+ return `
318
+ <xpl-top-nav${navControlAttr}${labelAttr}${childAccountAttr}${brandAttr}>
319
+ ${brandLogoSlot}
320
+ <xpl-top-nav-item slot="left-aside" label="Home" selected></xpl-top-nav-item>
321
+ <xpl-top-nav-item slot="left-aside" label="Dashboard"></xpl-top-nav-item>
322
+ <xpl-top-nav-item slot="left-aside" label="Settings"></xpl-top-nav-item>${rightAsideBlock}
323
+ <xpl-nav-header-menu slot="user-menu" ${navHeaderMenuAttrs}>${rightAsideMobileBlock}
324
+ <xpl-top-nav-item label="View Account" icon="house-4" selected></xpl-top-nav-item>
325
+ <xpl-top-nav-item label="Change Account" icon="refresh"></xpl-top-nav-item>
326
+ <xpl-top-nav-item label="Logout" icon="open-rect-arrow-out"></xpl-top-nav-item>
327
+ </xpl-nav-header-menu>
328
+ </xpl-top-nav>
329
+ `.trim();
330
+ };
331
+ const HtmlTopNavigation = (args) => {
332
+ const { navControl, label, childAccountLabel, brandName, brandHref, brandLogo } = args;
333
+ const navAriaLabel = label != null && String(label).trim() !== '' ? String(label) : 'top-navigation-bar';
334
+ const demoBrand = brandName != null && String(brandName).trim() !== '' ? String(brandName).trim() : 'My App';
335
+ const demoBrandLink = brandHref != null && String(brandHref).trim() !== '' ? brandHref : '#';
336
+ const safeBrandText = demoBrand
337
+ .replace(/&/g, '&amp;')
338
+ .replace(/</g, '&lt;')
339
+ .replace(/>/g, '&gt;');
340
+ const logoUrl = brandLogo != null && String(brandLogo).trim() !== '' ? String(brandLogo).trim() : '';
341
+ const showChildRow = childAccountLabel != null && String(childAccountLabel).trim() !== '';
342
+ const safeChildLabel = showChildRow && childAccountLabel != null
343
+ ? String(childAccountLabel)
344
+ .replace(/&/g, '&amp;')
345
+ .replace(/</g, '&lt;')
346
+ .replace(/>/g, '&gt;')
347
+ : '';
348
+ const lines = [
349
+ '<div class="dark xpl-top-nav sb-top-nav-html-root">',
350
+ ` <nav aria-label="${navAriaLabel.replace(/"/g, '&quot;')}" class="xpl-top-nav__bar sb-top-nav-html-bar">`,
351
+ ' <div class="xpl-top-nav__inner-left sb-top-nav-html-inner-left">',
352
+ ];
353
+ if (navControl) {
354
+ 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>');
355
+ }
356
+ lines.push(' <div class="xpl-top-nav__aside xpl-nav-left sb-top-nav-html-aside-left">');
357
+ if (logoUrl) {
358
+ const alt = demoBrand ? escapeAttr(demoBrand) : 'Brand';
359
+ 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" />`);
360
+ if (demoBrand) {
361
+ lines.push(` <span class="sb-top-nav-html-brand-text">${safeBrandText}</span>`);
362
+ }
363
+ lines.push(' </a>');
364
+ }
365
+ else {
366
+ 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>');
367
+ }
368
+ 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>');
369
+ if (showChildRow) {
370
+ lines.push(` <button type="button" class="sb-top-nav-html-account-btn">${safeChildLabel} <xpl-icon icon="chevron-down" size="20"></xpl-icon></button>`);
371
+ }
372
+ lines.push(` <!-- user-menu: internal xpl-popover opened by the built-in child-account trigger -->`, ' </div>', ' </nav>', '</div>');
373
+ return lines.join('\n');
374
+ };
375
+ TopNavigation.args = {
376
+ previewViewport: 'responsive',
377
+ navControl: true,
378
+ label: 'Main navigation',
379
+ childAccountLabel: 'Child Account',
380
+ brandName: 'My App',
381
+ brandHref: '#',
382
+ brandLogo: '',
383
+ menuUsername: 'Jane',
384
+ menuEmail: 'jane@example.com',
385
+ };
386
+ TopNavigation.decorators = [topNavPreviewViewportDecorator];
387
+ TopNavigation.argTypes = {
388
+ previewViewport: {
389
+ control: 'select',
390
+ options: ['responsive', 'iphone12'],
391
+ 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.',
392
+ table: { category: 'Storybook' },
393
+ },
394
+ brandName: {
395
+ control: 'text',
396
+ 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).',
397
+ },
398
+ brandHref: {
399
+ control: 'text',
400
+ 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**).',
401
+ },
402
+ brandLogo: {
403
+ control: 'text',
404
+ 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.',
405
+ table: { category: 'Brand' },
406
+ },
407
+ childAccountLabel: {
408
+ control: 'text',
409
+ description: '**`child-account-label`** — label beside the chevron on the built-in account menu trigger (with **`slot="user-menu"`**). Clear for chevron-only trigger.',
410
+ },
411
+ navControl: {
412
+ control: 'boolean',
413
+ 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.',
414
+ },
415
+ label: {
416
+ control: 'text',
417
+ 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`.',
418
+ },
419
+ menuUsername: {
420
+ control: 'text',
421
+ description: '**`username`** on **`xpl-nav-header-menu`**.',
422
+ table: { category: 'User menu (panel)' },
423
+ },
424
+ menuEmail: {
425
+ control: 'text',
426
+ description: '**`email`** on **`xpl-nav-header-menu`**.',
427
+ table: { category: 'User menu (panel)' },
428
+ },
429
+ navOpen: {
430
+ control: false,
431
+ 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).',
432
+ table: { category: 'Events' },
433
+ },
434
+ brandClick: {
435
+ control: false,
436
+ 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.',
437
+ table: { category: 'Events' },
438
+ },
439
+ };
440
+ TopNavigation.parameters = {
441
+ layout: 'fullscreen',
442
+ design: TOP_NAV_FIGMA_DESIGN,
443
+ viewport: {
444
+ viewports: Object.assign(Object.assign({}, INITIAL_VIEWPORTS), { mobile600: TOP_NAV_MOBILE600_VIEWPORT }),
445
+ },
446
+ 'web-component': {
447
+ render: TopNavigation(TopNavigation.args),
448
+ },
449
+ html: {
450
+ render: HtmlTopNavigation(TopNavigation.args),
451
+ },
452
+ };
453
+ export const TopNavItem = (args) => {
454
+ const attrs = [
455
+ args.active === true ? ' active' : '',
456
+ args.href != null && args.href !== '' ? `href="${escapeAttr(args.href)}"` : '',
457
+ args.label != null && args.label !== '' ? `label="${escapeAttr(args.label)}"` : '',
458
+ args.icon != null && args.icon !== '' ? `icon="${escapeAttr(args.icon)}"` : '',
459
+ args.itemAriaLabel != null && args.itemAriaLabel !== ''
460
+ ? `item-aria-label="${escapeAttr(args.itemAriaLabel)}"`
461
+ : '',
462
+ args.selected === true ? ' selected' : '',
463
+ ]
464
+ .filter(Boolean)
465
+ .join(' ');
466
+ const hasLabel = args.label != null && args.label !== '';
467
+ return `
468
+ <div class="dark sb-top-nav-item-story-bar">
469
+ <xpl-top-nav-item ${attrs.trim()}>
470
+ ${hasLabel ? '' : ' <span>Custom slot content</span>'}
471
+ </xpl-top-nav-item>
472
+ </div>
473
+ `.trim();
474
+ };
475
+ const HtmlTopNavItem = (args) => {
476
+ var _a;
477
+ const label = args.label != null && args.label !== '' ? args.label : 'Custom slot content';
478
+ const selected = args.selected === true;
479
+ const hasIcon = args.icon != null && args.icon !== '';
480
+ const hasHref = args.href != null && args.href !== '';
481
+ const ariaCurrent = selected ? ' aria-current="page"' : '';
482
+ const iconPlaceholder = hasIcon ? '<span class="sb-top-nav-html-item-icon">◆</span>' : '';
483
+ const innerContent = hasIcon
484
+ ? ` ${iconPlaceholder}\n <span>${label}</span>`
485
+ : ` <span>${label}</span>`;
486
+ const innerClasses = [
487
+ 'sb-top-nav-html-item-inner',
488
+ selected ? 'sb-top-nav-html-item-inner--selected' : '',
489
+ ]
490
+ .filter(Boolean)
491
+ .join(' ');
492
+ const innerTag = hasHref
493
+ ? ` <a href="${escapeAttr((_a = args.href) !== null && _a !== void 0 ? _a : '')}"${ariaCurrent} class="${innerClasses}">`
494
+ : ` <div role="button" tabindex="0"${ariaCurrent} class="${innerClasses}">`;
495
+ const innerClose = hasHref ? ' </a>' : ' </div>';
496
+ const lines = [
497
+ '<div class="dark sb-top-nav-item-story-bar">',
498
+ ' <div role="listitem">',
499
+ innerTag,
500
+ innerContent,
501
+ innerClose,
502
+ ' </div>',
503
+ '</div>',
504
+ ];
505
+ return lines.join('\n');
506
+ };
507
+ TopNavItem.args = {
508
+ href: '',
509
+ label: 'Nav item',
510
+ selected: false,
511
+ };
512
+ TopNavItem.argTypes = {
513
+ active: {
514
+ control: 'boolean',
515
+ description: 'Adds `xpl-top-nav-item--active` for accent styling (separate from `selected` / current page).',
516
+ },
517
+ href: {
518
+ control: 'text',
519
+ description: 'When set, the item renders as a native `<a>` link instead of a `div[role="button"]`. Use `#` for in-page demo. Clear to switch back to button mode.',
520
+ },
521
+ label: {
522
+ control: 'text',
523
+ description: 'Optional label to display as text. Omit to use the default slot for custom content.',
524
+ },
525
+ icon: {
526
+ control: 'text',
527
+ description: 'Icon name from the Apollo icon set to display before the label (e.g. house-4, wrench). Empty = no icon.',
528
+ },
529
+ itemAriaLabel: {
530
+ control: 'text',
531
+ description: 'Maps to `item-aria-label`: accessible name for icon-only items (no label / default-slot text).',
532
+ },
533
+ selected: {
534
+ control: 'boolean',
535
+ description: 'Whether the item is selected. Sets aria-current="page" and selected styling.',
536
+ },
537
+ navItemClick: {
538
+ control: false,
539
+ description: '**Event** (not a prop): `navItemClick` — `CustomEvent<MouseEvent>`; `detail` is the originating click. Not emitted when `slot="dropdown"` is used.',
540
+ table: { category: 'Events' },
541
+ },
542
+ };
543
+ TopNavItem.parameters = {
544
+ layout: 'centered',
545
+ design: TOP_NAV_FIGMA_DESIGN,
546
+ 'web-component': {
547
+ render: TopNavItem(TopNavItem.args),
548
+ },
549
+ html: {
550
+ render: HtmlTopNavItem(TopNavItem.args),
551
+ },
552
+ };
553
+ export const TopNavMenu = (args) => {
554
+ const attrs = [
555
+ args.username != null && args.username !== ''
556
+ ? `username="${escapeAttr(args.username)}"`
557
+ : '',
558
+ args.email != null && args.email !== '' ? `email="${escapeAttr(args.email)}"` : '',
559
+ ]
560
+ .filter(Boolean)
561
+ .join(' ');
562
+ const rightAsideMobile = args.showRightAsideMobile !== false
563
+ ? `
564
+ <xpl-top-nav-item slot="right-aside-mobile" label="Inbox" icon="message-writing"></xpl-top-nav-item>`
565
+ : '';
566
+ return `
567
+ <div class="dark sb-top-nav-menu-shell">
568
+ <xpl-nav-header-menu ${attrs.trim()}>${rightAsideMobile}
569
+ <xpl-top-nav-item label="View Account" icon="house-4" selected></xpl-top-nav-item>
570
+ <xpl-top-nav-item label="Change Account" icon="refresh"></xpl-top-nav-item>
571
+ <xpl-top-nav-item label="Logout" icon="open-rect-arrow-out"></xpl-top-nav-item>
572
+ </xpl-nav-header-menu>
573
+ </div>
574
+ `.trim();
575
+ };
576
+ const HtmlTopNavMenu = (args) => {
577
+ const username = args.username != null && args.username !== '' ? args.username : '';
578
+ const email = args.email != null && args.email !== '' ? args.email : '';
579
+ const lines = [
580
+ '<div class="dark sb-top-nav-menu-shell--min">',
581
+ ' <div class="sb-top-nav-menu-profile">',
582
+ ' <div class="sb-top-nav-menu-profile-inner">',
583
+ ];
584
+ if (username) {
585
+ lines.push(` <div class="sb-top-nav-menu-username">${escapeAttr(username)}</div>`);
586
+ }
587
+ if (email) {
588
+ lines.push(` <div class="sb-top-nav-menu-email">${escapeAttr(email)}</div>`);
589
+ }
590
+ lines.push(' </div>', ' </div>');
591
+ if (args.showRightAsideMobile !== false) {
592
+ lines.push(' <div class="sb-top-nav-menu-right-aside-mobile">', ' <a href="#">Inbox</a>', ' </div>');
593
+ }
594
+ 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>');
595
+ return lines.join('\n');
596
+ };
597
+ TopNavMenu.args = {
598
+ username: 'Katie Wilson',
599
+ email: 'katie01@email.com',
600
+ showRightAsideMobile: true,
601
+ };
602
+ TopNavMenu.argTypes = {
603
+ username: {
604
+ control: 'text',
605
+ description: 'Username to display.',
606
+ },
607
+ email: {
608
+ control: 'text',
609
+ description: 'Email to display.',
610
+ },
611
+ showRightAsideMobile: {
612
+ control: 'boolean',
613
+ description: '**`slot="right-aside-mobile"`** strip (Inbox) between profile and list — matches **`xpl-top-nav`** narrow **`right-aside`** duplication.',
614
+ },
615
+ };
616
+ TopNavMenu.parameters = {
617
+ layout: 'centered',
618
+ design: TOP_NAV_FIGMA_DESIGN,
619
+ 'web-component': {
620
+ render: TopNavMenu(TopNavMenu.args),
621
+ },
622
+ html: {
623
+ render: HtmlTopNavMenu(TopNavMenu.args),
624
+ },
625
+ };