@xplortech/apollo-core 2.10.0 → 2.11.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 (258) hide show
  1. package/.typings/apollo-components.html-data.json +35 -2
  2. package/build/style.css +259 -34
  3. package/dist/apollo-core/apollo-core.css +12 -12
  4. package/dist/apollo-core/apollo-core.esm.js +1 -1
  5. package/dist/apollo-core/{p-728341d2.entry.js → p-048fdde0.entry.js} +1 -1
  6. package/dist/apollo-core/p-0abc496e.entry.js +1 -0
  7. package/dist/apollo-core/{p-23870463.entry.js → p-1442c052.entry.js} +1 -1
  8. package/dist/apollo-core/p-1e498763.entry.js +1 -0
  9. package/dist/apollo-core/p-26c3a508.entry.js +1 -0
  10. package/dist/apollo-core/p-4ce52107.entry.js +1 -0
  11. package/dist/apollo-core/p-6710fb29.entry.js +1 -0
  12. package/dist/apollo-core/p-7e622809.entry.js +1 -0
  13. package/dist/apollo-core/{p-c17b6351.entry.js → p-87068144.entry.js} +1 -1
  14. package/dist/apollo-core/p-BUgtURvw.js +1 -0
  15. package/dist/apollo-core/p-a3b4820a.entry.js +1 -0
  16. package/dist/apollo-core/p-b2d6dd0e.entry.js +1 -0
  17. package/dist/apollo-core/{p-e9e7577f.entry.js → p-bd2249ef.entry.js} +1 -1
  18. package/dist/apollo-core/p-c96b7957.entry.js +1 -0
  19. package/dist/apollo-core/p-d6be63cd.entry.js +1 -0
  20. package/dist/apollo-core/{p-9adf3694.entry.js → p-ddf76cee.entry.js} +1 -1
  21. package/dist/apollo-core/p-f0554edd.entry.js +1 -0
  22. package/dist/cjs/apollo-core.cjs.js +1 -1
  23. package/dist/cjs/index-BaXVr8ux.js +4 -0
  24. package/dist/cjs/lifecycle-Bf3QwiVa.js +70 -0
  25. package/dist/cjs/loader.cjs.js +1 -1
  26. package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
  27. package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
  28. package/dist/cjs/xpl-avatar_54.cjs.entry.js +292 -243
  29. package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
  30. package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
  31. package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
  32. package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
  33. package/dist/cjs/xpl-dynamic-table.cjs.entry.js +1 -1
  34. package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
  35. package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
  36. package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
  37. package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
  38. package/dist/cjs/xpl-table-header.cjs.entry.js +1 -1
  39. package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
  40. package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
  41. package/dist/cjs/xpl-top-nav-menu.cjs.entry.js +97 -0
  42. package/dist/collection/collection-manifest.json +1 -0
  43. package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
  44. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
  45. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
  46. package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
  47. package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
  48. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
  49. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
  50. package/dist/collection/components/xpl-button/xpl-button.js +1 -1
  51. package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
  52. package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
  53. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +3 -3
  54. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
  55. package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
  56. package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
  57. package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
  58. package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
  59. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
  60. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
  61. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
  62. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +4 -4
  63. package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +1 -1
  64. package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
  65. package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
  66. package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
  67. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
  68. package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
  69. package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
  70. package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
  71. package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
  72. package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
  73. package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
  74. package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
  75. package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
  76. package/dist/collection/components/xpl-input/xpl-input.js +2 -2
  77. package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
  78. package/dist/collection/components/xpl-list/xpl-list.js +2 -2
  79. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
  80. package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
  81. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
  82. package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
  83. package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
  84. package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
  85. package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
  86. package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
  87. package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
  88. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
  89. package/dist/collection/components/xpl-select/xpl-select.js +6 -6
  90. package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
  91. package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
  92. package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
  93. package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
  94. package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
  95. package/dist/collection/components/xpl-table/xpl-table.js +5 -5
  96. package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
  97. package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
  98. package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
  99. package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
  100. package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
  101. package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
  102. package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
  103. package/dist/collection/components/xpl-top-nav/top-nav-constants.js +1 -0
  104. package/dist/collection/components/xpl-top-nav/top-nav.stories.js +131 -11
  105. package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
  106. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/top-nav-item-constants.js +2 -0
  107. package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +305 -85
  108. package/dist/collection/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.js +119 -0
  109. package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +11 -5
  110. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
  111. package/dist/collection/utils/lifecycle.js +18 -0
  112. package/dist/components/index.d.ts +2 -0
  113. package/dist/components/index.js +1 -1
  114. package/dist/components/p-2xGSxBGa.js +1 -0
  115. package/dist/components/p-B8RYNiz-.js +1 -0
  116. package/dist/components/p-BDWXBWGE.js +1 -0
  117. package/dist/components/{p-Bn-27-xj.js → p-BJqNuBZr.js} +1 -1
  118. package/dist/components/p-BUgtURvw.js +1 -0
  119. package/dist/components/{p-DllC7F-H.js → p-B_sq_SAX.js} +1 -1
  120. package/dist/components/{p-hPUzON4O.js → p-Bsy-VVS5.js} +1 -1
  121. package/dist/components/p-BxHFEnPN.js +1 -0
  122. package/dist/components/{p-B1PBAEzg.js → p-ByJRw26d.js} +1 -1
  123. package/dist/components/{p-DPTHmitJ.js → p-C5_Yo0ZP.js} +1 -1
  124. package/dist/components/p-C8rmEAx6.js +1 -0
  125. package/dist/components/p-CF_YTx16.js +1 -0
  126. package/dist/components/{p-BG0-6Xek.js → p-CUYkG-PB.js} +1 -1
  127. package/dist/components/{p-kPHfCq1d.js → p-CaW0fL0P.js} +1 -1
  128. package/dist/components/{p-B_Wi--Ov.js → p-CuisR8WP.js} +1 -1
  129. package/dist/components/{p-D97c0GjM.js → p-D2SFagIb.js} +1 -1
  130. package/dist/components/{p-3qMYyqTe.js → p-DKUNbsb0.js} +1 -1
  131. package/dist/components/p-DcXL24UI.js +1 -0
  132. package/dist/components/{p-CVqbA9op.js → p-Dp3H99Yc.js} +1 -1
  133. package/dist/components/p-M900WO1C.js +1 -0
  134. package/dist/components/{p-DEl4Rvzs.js → p-ZTFt9sBy.js} +1 -1
  135. package/dist/components/{p-CFW_w5Wj.js → p-gfb3l9Pr.js} +1 -1
  136. package/dist/components/{p-C9BO2vL-.js → p-h1Gbk5lO.js} +1 -1
  137. package/dist/components/xpl-accordion.js +1 -1
  138. package/dist/components/xpl-application-shell.js +1 -1
  139. package/dist/components/xpl-avatar.js +1 -1
  140. package/dist/components/xpl-backdrop.js +1 -1
  141. package/dist/components/xpl-badge.js +1 -1
  142. package/dist/components/xpl-banner.js +1 -1
  143. package/dist/components/xpl-breadcrumb-item.js +1 -1
  144. package/dist/components/xpl-breadcrumbs.js +1 -1
  145. package/dist/components/xpl-button-row.js +1 -1
  146. package/dist/components/xpl-button.js +1 -1
  147. package/dist/components/xpl-calendar.js +1 -1
  148. package/dist/components/xpl-checkbox.js +1 -1
  149. package/dist/components/xpl-choicelist.js +1 -1
  150. package/dist/components/xpl-content-area.js +1 -1
  151. package/dist/components/xpl-dashboard.js +1 -1
  152. package/dist/components/xpl-data-card.js +1 -1
  153. package/dist/components/xpl-divider.js +1 -1
  154. package/dist/components/xpl-dropdown-group.js +1 -1
  155. package/dist/components/xpl-dropdown-heading.js +1 -1
  156. package/dist/components/xpl-dropdown-option.js +1 -1
  157. package/dist/components/xpl-dropdown.js +1 -1
  158. package/dist/components/xpl-dynamic-table-cell.js +1 -1
  159. package/dist/components/xpl-dynamic-table-row.js +1 -1
  160. package/dist/components/xpl-dynamic-table.js +1 -1
  161. package/dist/components/xpl-grid-item.js +1 -1
  162. package/dist/components/xpl-grid.js +1 -1
  163. package/dist/components/xpl-header-accordion.js +1 -1
  164. package/dist/components/xpl-icon.js +1 -1
  165. package/dist/components/xpl-input-color.js +1 -1
  166. package/dist/components/xpl-input-date.js +1 -1
  167. package/dist/components/xpl-input-file.js +1 -1
  168. package/dist/components/xpl-input-phone.js +1 -1
  169. package/dist/components/xpl-input-search.js +1 -1
  170. package/dist/components/xpl-input-time.js +1 -1
  171. package/dist/components/xpl-input.js +1 -1
  172. package/dist/components/xpl-large-card.js +1 -1
  173. package/dist/components/xpl-list-item.js +1 -1
  174. package/dist/components/xpl-list.js +1 -1
  175. package/dist/components/xpl-main-nav.js +1 -1
  176. package/dist/components/xpl-modal.js +1 -1
  177. package/dist/components/xpl-nav-header-menu.js +1 -1
  178. package/dist/components/xpl-nav-item.js +1 -1
  179. package/dist/components/xpl-pagination.js +1 -1
  180. package/dist/components/xpl-panel.js +1 -1
  181. package/dist/components/xpl-popover.js +1 -1
  182. package/dist/components/xpl-progress-bar.js +1 -1
  183. package/dist/components/xpl-progress-indicator.js +1 -1
  184. package/dist/components/xpl-radio.js +1 -1
  185. package/dist/components/xpl-secondary-nav.js +1 -1
  186. package/dist/components/xpl-select.js +1 -1
  187. package/dist/components/xpl-side-nav-item.js +1 -1
  188. package/dist/components/xpl-side-nav.js +1 -1
  189. package/dist/components/xpl-skeleton.js +1 -1
  190. package/dist/components/xpl-slideout.js +1 -1
  191. package/dist/components/xpl-spotlight.js +1 -1
  192. package/dist/components/xpl-tab-panel.js +1 -1
  193. package/dist/components/xpl-tab.js +1 -1
  194. package/dist/components/xpl-table-header-cell.js +1 -1
  195. package/dist/components/xpl-table-header.js +1 -1
  196. package/dist/components/xpl-table.js +1 -1
  197. package/dist/components/xpl-tabs.js +1 -1
  198. package/dist/components/xpl-tag.js +1 -1
  199. package/dist/components/xpl-toast.js +1 -1
  200. package/dist/components/xpl-toggle.js +1 -1
  201. package/dist/components/xpl-toolbar.js +1 -1
  202. package/dist/components/xpl-tooltip.js +1 -1
  203. package/dist/components/xpl-top-nav-item.js +1 -1
  204. package/dist/components/xpl-top-nav-menu.d.ts +11 -0
  205. package/dist/components/xpl-top-nav-menu.js +1 -0
  206. package/dist/components/xpl-top-nav.js +1 -1
  207. package/dist/components/xpl-utility-bar.js +1 -1
  208. package/dist/docs/xpl-icon/readme.md +2 -0
  209. package/dist/docs/xpl-top-nav/readme.md +3 -0
  210. package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +79 -20
  211. package/dist/docs/xpl-top-nav/xpl-top-nav-menu/readme.md +96 -0
  212. package/dist/esm/apollo-core.js +1 -1
  213. package/dist/esm/index-CXkZUm1c.js +4 -0
  214. package/dist/esm/lifecycle-BUgtURvw.js +68 -0
  215. package/dist/esm/loader.js +1 -1
  216. package/dist/esm/xpl-accordion.entry.js +2 -2
  217. package/dist/esm/xpl-application-shell.entry.js +1 -1
  218. package/dist/esm/xpl-avatar_54.entry.js +291 -242
  219. package/dist/esm/xpl-button-row.entry.js +1 -1
  220. package/dist/esm/xpl-calendar.entry.js +1 -1
  221. package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
  222. package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
  223. package/dist/esm/xpl-dynamic-table.entry.js +1 -1
  224. package/dist/esm/xpl-grid-item.entry.js +1 -1
  225. package/dist/esm/xpl-grid.entry.js +1 -1
  226. package/dist/esm/xpl-large-card.entry.js +1 -1
  227. package/dist/esm/xpl-main-nav.entry.js +1 -1
  228. package/dist/esm/xpl-table-header.entry.js +1 -1
  229. package/dist/esm/xpl-toggle.entry.js +3 -3
  230. package/dist/esm/xpl-toolbar.entry.js +2 -2
  231. package/dist/esm/xpl-top-nav-menu.entry.js +95 -0
  232. package/dist/types/components/xpl-top-nav/top-nav-constants.d.ts +1 -0
  233. package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +70 -1
  234. package/dist/types/components/xpl-top-nav/xpl-top-nav-item/top-nav-item-constants.d.ts +2 -0
  235. package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +23 -4
  236. package/dist/types/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.d.ts +18 -0
  237. package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +1 -0
  238. package/dist/types/components.d.ts +179 -19
  239. package/dist/types/utils/lifecycle.d.ts +3 -0
  240. package/package.json +21 -11
  241. package/dist/apollo-core/p-0e45f332.entry.js +0 -1
  242. package/dist/apollo-core/p-0f251f98.entry.js +0 -1
  243. package/dist/apollo-core/p-1691c4f3.entry.js +0 -1
  244. package/dist/apollo-core/p-172ac720.entry.js +0 -1
  245. package/dist/apollo-core/p-44a16751.entry.js +0 -1
  246. package/dist/apollo-core/p-4efecab2.entry.js +0 -1
  247. package/dist/apollo-core/p-5094dd97.entry.js +0 -1
  248. package/dist/apollo-core/p-70e7facc.entry.js +0 -1
  249. package/dist/apollo-core/p-910be81f.entry.js +0 -1
  250. package/dist/apollo-core/p-e08b434c.entry.js +0 -1
  251. package/dist/components/p-BWyAzrwu.js +0 -1
  252. package/dist/components/p-Bd6JweBt.js +0 -1
  253. package/dist/components/p-Bs6vq0C6.js +0 -1
  254. package/dist/components/p-CGNq3DyC.js +0 -1
  255. package/dist/components/p-CtIUusUL.js +0 -1
  256. package/dist/components/p-DBWV65V-.js +0 -1
  257. package/dist/components/p-Ds28UyUR.js +0 -1
  258. package/dist/components/p-U5dPMCXE.js +0 -1
@@ -2069,16 +2069,19 @@ export namespace Components {
2069
2069
  "navControl"?: boolean;
2070
2070
  }
2071
2071
  /**
2072
- * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`**. The host uses **`role="listitem"`** when the row
2073
- * participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on **`xpl-top-nav`** (list host is
2074
- * **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of **`xpl-top-nav`**), or default-slot rows
2075
- * under **`xpl-nav-header-menu`**. That flag is
2072
+ * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. The host uses
2073
+ * **`role="listitem"`** when the row participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
2074
+ * **`xpl-top-nav`** (list host is **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
2075
+ * **`xpl-top-nav`**), or default-slot rows under **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. That flag is
2076
2076
  * kept in **`@State`** and refreshed after render plus via **`MutationObserver`** on the host (**`class`**, **`slot`**) and
2077
2077
  * on **`parentElement`** (**`role`**) or on **`.xpl-top-nav__left-primary`** (**`role`**) for **`slot="left-aside"`** under **`xpl-top-nav`**) so DOM context changes
2078
2078
  * without a full reconnect still re-sync. The internal
2079
2079
  * **`xpl-top-nav__brand`** row omits **`listitem`** (it sits in **`.xpl-top-nav__brand-bar`**, not **`.xpl-top-nav__left-primary`**),
2080
2080
  * as do **`slot="right-aside-mobile"`** rows (not a list). **`slot="dropdown"`** uses a local **`.xpl-top-nav-item__dropdown`**
2081
2081
  * panel (not **`xpl-dropdown`**); see **`TECH_DEBT.md`**.
2082
+ * **This component does triple duty:** a plain bar item, a dropdown trigger (**`slot="dropdown"`** present), and a
2083
+ * dropdown/menu **row** (nested inside **`xpl-nav-header-menu`** or **`xpl-top-nav-menu`**). The **`description`** prop
2084
+ * only applies in the row context — bar items and triggers do not show it in Figma.
2082
2085
  * **Default slot (no `label`):** do not put **`xpl-top-nav-item__inner`** or other **`xpl-top-nav-item__*`** classes on
2083
2086
  * custom trigger content — the component renders the inner wrapper and BEM elements.
2084
2087
  * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens resolve to dark-mode
@@ -2090,12 +2093,20 @@ export namespace Components {
2090
2093
  * @default false
2091
2094
  */
2092
2095
  "active": boolean;
2096
+ /**
2097
+ * No-op when there is no **`slot="dropdown"`** panel to open.
2098
+ */
2099
+ "closeMenu": () => Promise<void>;
2100
+ /**
2101
+ * Optional description line shown below **`label`** (row context only, e.g. inside **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**). Ignored when **`label`** is not set.
2102
+ */
2103
+ "description"?: string;
2093
2104
  /**
2094
2105
  * If set without **`slot="dropdown"`**, the inner control renders as a native **`<a href>`** (link mode).
2095
2106
  */
2096
2107
  "href"?: string;
2097
2108
  /**
2098
- * Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set).
2109
+ * Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set). Ignored when **`slot="leading-icon"`** content is present.
2099
2110
  * @default ''
2100
2111
  */
2101
2112
  "icon": string;
@@ -2107,11 +2118,54 @@ export namespace Components {
2107
2118
  * Text label. If omitted, use the default slot for custom trigger content. Long labels use **`text-ellipsis`** on **`.xpl-top-nav-item__label`** (see `top-nav.css`); **`title`** is set to the full string for hover tooltips when the visual line clips.
2108
2119
  */
2109
2120
  "label"?: string;
2121
+ /**
2122
+ * Whether the **`slot="dropdown"`** panel is open. Reflected to the **`open`** attribute so consumers can drive it (controlled) or read it back (uncontrolled, toggled internally on click / hover / keyboard activation). Prefer **`openMenu()`** / **`closeMenu()`** / **`toggleMenu()`** over setting this directly from event handlers.
2123
+ * @default false
2124
+ */
2125
+ "open": boolean;
2126
+ /**
2127
+ * No-op when there is no **`slot="dropdown"`** panel to open.
2128
+ */
2129
+ "openMenu": () => Promise<void>;
2130
+ /**
2131
+ * How the **`slot="dropdown"`** panel opens. **`hover`** is gated on **`TOP_NAV_ITEM_HOVER_OPEN_MQ`** (hover-capable, fine pointer, **`md`** and up) — below that, or on touch / coarse-pointer devices, **`hover`** falls back to click/tap. Keyboard activation (Enter / Space) always toggles regardless of **`openMode`**.
2132
+ * @default 'click'
2133
+ */
2134
+ "openMode": 'click' | 'hover';
2110
2135
  /**
2111
2136
  * When true, sets **`aria-current="page"`** and selected styling.
2112
2137
  * @default false
2113
2138
  */
2114
2139
  "selected": boolean;
2140
+ /**
2141
+ * No-op when there is no **`slot="dropdown"`** panel to open.
2142
+ */
2143
+ "toggleMenu": () => Promise<void>;
2144
+ }
2145
+ /**
2146
+ * Thin grouping container for **`xpl-top-nav-item`** rows — the panel content for a desktop flyout
2147
+ * (**`slot="dropdown"`** on the parent **`xpl-top-nav-item`**) and, on small screens, the **mobile
2148
+ * cascade**: the same markup drills in to a **Level 2** view in place, with an auto-rendered **back
2149
+ * row** (leading **`chevron-left`** + this component's **`label`**) as the first row. Tapping the back
2150
+ * row closes the parent trigger's dropdown (**`closeMenu()`**), returning to **Level 1** and restoring
2151
+ * focus to the parent trigger. No item logic otherwise lives here — row behavior (icons, description,
2152
+ * links, nested dropdowns) is entirely **`xpl-top-nav-item`**.
2153
+ * **One authoring markup, two renderings:** consumers write this once; **`isMobileCascade`** (synced
2154
+ * from **`TOP_NAV_MOBILE_MQ`**) decides whether the back row renders. Desktop never sees it — the
2155
+ * flyout is a single level of links (see `xpl-top-nav-item`'s cascade-depth notes).
2156
+ * **Panel chrome** is shared with **`xpl-nav-header-menu`** (the account menu): width
2157
+ * (**`--xpl-top-nav-panel-width`**), surface, shadow, radius, and vertical padding all come from the
2158
+ * same selector in `top-nav.css` so the desktop flyout, mobile cascade, and account menu read as one
2159
+ * visual family.
2160
+ * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens
2161
+ * resolve to dark-mode values even when the page root is light (consistent with the rest of the
2162
+ * **`xpl-top-nav`** family).
2163
+ */
2164
+ interface XplTopNavMenu {
2165
+ /**
2166
+ * Accessible name for the list (**`aria-label`** on the host) and the label shown in the mobile cascade back row when drilling back out of this group.
2167
+ */
2168
+ "label"?: string;
2115
2169
  }
2116
2170
  interface XplUtilityBar {
2117
2171
  /**
@@ -3178,18 +3232,22 @@ declare global {
3178
3232
  };
3179
3233
  interface HTMLXplTopNavItemElementEventMap {
3180
3234
  "navItemClick": MouseEvent;
3235
+ "openChange": boolean;
3181
3236
  }
3182
3237
  /**
3183
- * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`**. The host uses **`role="listitem"`** when the row
3184
- * participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on **`xpl-top-nav`** (list host is
3185
- * **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of **`xpl-top-nav`**), or default-slot rows
3186
- * under **`xpl-nav-header-menu`**. That flag is
3238
+ * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. The host uses
3239
+ * **`role="listitem"`** when the row participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
3240
+ * **`xpl-top-nav`** (list host is **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
3241
+ * **`xpl-top-nav`**), or default-slot rows under **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. That flag is
3187
3242
  * kept in **`@State`** and refreshed after render plus via **`MutationObserver`** on the host (**`class`**, **`slot`**) and
3188
3243
  * on **`parentElement`** (**`role`**) or on **`.xpl-top-nav__left-primary`** (**`role`**) for **`slot="left-aside"`** under **`xpl-top-nav`**) so DOM context changes
3189
3244
  * without a full reconnect still re-sync. The internal
3190
3245
  * **`xpl-top-nav__brand`** row omits **`listitem`** (it sits in **`.xpl-top-nav__brand-bar`**, not **`.xpl-top-nav__left-primary`**),
3191
3246
  * as do **`slot="right-aside-mobile"`** rows (not a list). **`slot="dropdown"`** uses a local **`.xpl-top-nav-item__dropdown`**
3192
3247
  * panel (not **`xpl-dropdown`**); see **`TECH_DEBT.md`**.
3248
+ * **This component does triple duty:** a plain bar item, a dropdown trigger (**`slot="dropdown"`** present), and a
3249
+ * dropdown/menu **row** (nested inside **`xpl-nav-header-menu`** or **`xpl-top-nav-menu`**). The **`description`** prop
3250
+ * only applies in the row context — bar items and triggers do not show it in Figma.
3193
3251
  * **Default slot (no `label`):** do not put **`xpl-top-nav-item__inner`** or other **`xpl-top-nav-item__*`** classes on
3194
3252
  * custom trigger content — the component renders the inner wrapper and BEM elements.
3195
3253
  * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens resolve to dark-mode
@@ -3209,6 +3267,31 @@ declare global {
3209
3267
  prototype: HTMLXplTopNavItemElement;
3210
3268
  new (): HTMLXplTopNavItemElement;
3211
3269
  };
3270
+ /**
3271
+ * Thin grouping container for **`xpl-top-nav-item`** rows — the panel content for a desktop flyout
3272
+ * (**`slot="dropdown"`** on the parent **`xpl-top-nav-item`**) and, on small screens, the **mobile
3273
+ * cascade**: the same markup drills in to a **Level 2** view in place, with an auto-rendered **back
3274
+ * row** (leading **`chevron-left`** + this component's **`label`**) as the first row. Tapping the back
3275
+ * row closes the parent trigger's dropdown (**`closeMenu()`**), returning to **Level 1** and restoring
3276
+ * focus to the parent trigger. No item logic otherwise lives here — row behavior (icons, description,
3277
+ * links, nested dropdowns) is entirely **`xpl-top-nav-item`**.
3278
+ * **One authoring markup, two renderings:** consumers write this once; **`isMobileCascade`** (synced
3279
+ * from **`TOP_NAV_MOBILE_MQ`**) decides whether the back row renders. Desktop never sees it — the
3280
+ * flyout is a single level of links (see `xpl-top-nav-item`'s cascade-depth notes).
3281
+ * **Panel chrome** is shared with **`xpl-nav-header-menu`** (the account menu): width
3282
+ * (**`--xpl-top-nav-panel-width`**), surface, shadow, radius, and vertical padding all come from the
3283
+ * same selector in `top-nav.css` so the desktop flyout, mobile cascade, and account menu read as one
3284
+ * visual family.
3285
+ * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens
3286
+ * resolve to dark-mode values even when the page root is light (consistent with the rest of the
3287
+ * **`xpl-top-nav`** family).
3288
+ */
3289
+ interface HTMLXplTopNavMenuElement extends Components.XplTopNavMenu, HTMLStencilElement {
3290
+ }
3291
+ var HTMLXplTopNavMenuElement: {
3292
+ prototype: HTMLXplTopNavMenuElement;
3293
+ new (): HTMLXplTopNavMenuElement;
3294
+ };
3212
3295
  interface HTMLXplUtilityBarElementEventMap {
3213
3296
  "navOpen": boolean;
3214
3297
  }
@@ -3295,6 +3378,7 @@ declare global {
3295
3378
  "xpl-tooltip": HTMLXplTooltipElement;
3296
3379
  "xpl-top-nav": HTMLXplTopNavElement;
3297
3380
  "xpl-top-nav-item": HTMLXplTopNavItemElement;
3381
+ "xpl-top-nav-menu": HTMLXplTopNavMenuElement;
3298
3382
  "xpl-utility-bar": HTMLXplUtilityBarElement;
3299
3383
  }
3300
3384
  }
@@ -5567,16 +5651,19 @@ declare namespace LocalJSX {
5567
5651
  "onNavOpen"?: (event: XplTopNavCustomEvent<boolean>) => void;
5568
5652
  }
5569
5653
  /**
5570
- * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`**. The host uses **`role="listitem"`** when the row
5571
- * participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on **`xpl-top-nav`** (list host is
5572
- * **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of **`xpl-top-nav`**), or default-slot rows
5573
- * under **`xpl-nav-header-menu`**. That flag is
5654
+ * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. The host uses
5655
+ * **`role="listitem"`** when the row participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
5656
+ * **`xpl-top-nav`** (list host is **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
5657
+ * **`xpl-top-nav`**), or default-slot rows under **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. That flag is
5574
5658
  * kept in **`@State`** and refreshed after render plus via **`MutationObserver`** on the host (**`class`**, **`slot`**) and
5575
5659
  * on **`parentElement`** (**`role`**) or on **`.xpl-top-nav__left-primary`** (**`role`**) for **`slot="left-aside"`** under **`xpl-top-nav`**) so DOM context changes
5576
5660
  * without a full reconnect still re-sync. The internal
5577
5661
  * **`xpl-top-nav__brand`** row omits **`listitem`** (it sits in **`.xpl-top-nav__brand-bar`**, not **`.xpl-top-nav__left-primary`**),
5578
5662
  * as do **`slot="right-aside-mobile"`** rows (not a list). **`slot="dropdown"`** uses a local **`.xpl-top-nav-item__dropdown`**
5579
5663
  * panel (not **`xpl-dropdown`**); see **`TECH_DEBT.md`**.
5664
+ * **This component does triple duty:** a plain bar item, a dropdown trigger (**`slot="dropdown"`** present), and a
5665
+ * dropdown/menu **row** (nested inside **`xpl-nav-header-menu`** or **`xpl-top-nav-menu`**). The **`description`** prop
5666
+ * only applies in the row context — bar items and triggers do not show it in Figma.
5580
5667
  * **Default slot (no `label`):** do not put **`xpl-top-nav-item__inner`** or other **`xpl-top-nav-item__*`** classes on
5581
5668
  * custom trigger content — the component renders the inner wrapper and BEM elements.
5582
5669
  * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens resolve to dark-mode
@@ -5588,12 +5675,16 @@ declare namespace LocalJSX {
5588
5675
  * @default false
5589
5676
  */
5590
5677
  "active"?: boolean;
5678
+ /**
5679
+ * Optional description line shown below **`label`** (row context only, e.g. inside **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**). Ignored when **`label`** is not set.
5680
+ */
5681
+ "description"?: string;
5591
5682
  /**
5592
5683
  * If set without **`slot="dropdown"`**, the inner control renders as a native **`<a href>`** (link mode).
5593
5684
  */
5594
5685
  "href"?: string;
5595
5686
  /**
5596
- * Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set).
5687
+ * Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set). Ignored when **`slot="leading-icon"`** content is present.
5597
5688
  * @default ''
5598
5689
  */
5599
5690
  "icon"?: string;
@@ -5606,15 +5697,54 @@ declare namespace LocalJSX {
5606
5697
  */
5607
5698
  "label"?: string;
5608
5699
  /**
5609
- * Emitted for plain items (button or link) on pointer **click**, or when keyboard activation produces a **`click`** (native for **Enter** on **`<a href>`**, or programmatic **`.click()`** for **Space** on links). **`detail`** is the **`MouseEvent`** from that activation (synthetic only for **`<div role="button">`** via **Enter** / **Space**). Not emitted when **`slot="dropdown"`** is used.
5700
+ * Emitted for plain items (button or link) on pointer **click**, or when keyboard activation produces a **`click`**: the native **`<button>`** fires a real **`click`** on **Enter** / **Space**, a native **`<a href>`** on **Enter**, and **Space** on a link maps to a programmatic **`.click()`**. **`detail`** is always the real **`MouseEvent`** from that activation (keyboard-driven clicks have **`detail === 0`**). Not emitted when **`slot="dropdown"`** is used.
5610
5701
  */
5611
5702
  "onNavItemClick"?: (event: XplTopNavItemCustomEvent<MouseEvent>) => void;
5703
+ /**
5704
+ * Emitted whenever **`open`** changes (click, hover, keyboard, Escape, outside click, or programmatic).
5705
+ */
5706
+ "onOpenChange"?: (event: XplTopNavItemCustomEvent<boolean>) => void;
5707
+ /**
5708
+ * Whether the **`slot="dropdown"`** panel is open. Reflected to the **`open`** attribute so consumers can drive it (controlled) or read it back (uncontrolled, toggled internally on click / hover / keyboard activation). Prefer **`openMenu()`** / **`closeMenu()`** / **`toggleMenu()`** over setting this directly from event handlers.
5709
+ * @default false
5710
+ */
5711
+ "open"?: boolean;
5712
+ /**
5713
+ * How the **`slot="dropdown"`** panel opens. **`hover`** is gated on **`TOP_NAV_ITEM_HOVER_OPEN_MQ`** (hover-capable, fine pointer, **`md`** and up) — below that, or on touch / coarse-pointer devices, **`hover`** falls back to click/tap. Keyboard activation (Enter / Space) always toggles regardless of **`openMode`**.
5714
+ * @default 'click'
5715
+ */
5716
+ "openMode"?: 'click' | 'hover';
5612
5717
  /**
5613
5718
  * When true, sets **`aria-current="page"`** and selected styling.
5614
5719
  * @default false
5615
5720
  */
5616
5721
  "selected"?: boolean;
5617
5722
  }
5723
+ /**
5724
+ * Thin grouping container for **`xpl-top-nav-item`** rows — the panel content for a desktop flyout
5725
+ * (**`slot="dropdown"`** on the parent **`xpl-top-nav-item`**) and, on small screens, the **mobile
5726
+ * cascade**: the same markup drills in to a **Level 2** view in place, with an auto-rendered **back
5727
+ * row** (leading **`chevron-left`** + this component's **`label`**) as the first row. Tapping the back
5728
+ * row closes the parent trigger's dropdown (**`closeMenu()`**), returning to **Level 1** and restoring
5729
+ * focus to the parent trigger. No item logic otherwise lives here — row behavior (icons, description,
5730
+ * links, nested dropdowns) is entirely **`xpl-top-nav-item`**.
5731
+ * **One authoring markup, two renderings:** consumers write this once; **`isMobileCascade`** (synced
5732
+ * from **`TOP_NAV_MOBILE_MQ`**) decides whether the back row renders. Desktop never sees it — the
5733
+ * flyout is a single level of links (see `xpl-top-nav-item`'s cascade-depth notes).
5734
+ * **Panel chrome** is shared with **`xpl-nav-header-menu`** (the account menu): width
5735
+ * (**`--xpl-top-nav-panel-width`**), surface, shadow, radius, and vertical padding all come from the
5736
+ * same selector in `top-nav.css` so the desktop flyout, mobile cascade, and account menu read as one
5737
+ * visual family.
5738
+ * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens
5739
+ * resolve to dark-mode values even when the page root is light (consistent with the rest of the
5740
+ * **`xpl-top-nav`** family).
5741
+ */
5742
+ interface XplTopNavMenu {
5743
+ /**
5744
+ * Accessible name for the list (**`aria-label`** on the host) and the label shown in the mobile cascade back row when drilling back out of this group.
5745
+ */
5746
+ "label"?: string;
5747
+ }
5618
5748
  interface XplUtilityBar {
5619
5749
  /**
5620
5750
  * @property {boolean} - Optional property that defines whether or not the main nav is open at startup.
@@ -6142,12 +6272,18 @@ declare namespace LocalJSX {
6142
6272
  }
6143
6273
  interface XplTopNavItemAttributes {
6144
6274
  "active": boolean;
6275
+ "description": string;
6145
6276
  "href": string;
6146
6277
  "icon": string;
6147
6278
  "itemAriaLabel": string;
6148
6279
  "label": string;
6280
+ "open": boolean;
6281
+ "openMode": 'click' | 'hover';
6149
6282
  "selected": boolean;
6150
6283
  }
6284
+ interface XplTopNavMenuAttributes {
6285
+ "label": string;
6286
+ }
6151
6287
  interface XplUtilityBarAttributes {
6152
6288
  "navControl": boolean;
6153
6289
  "isNavOpenAtStartup": boolean;
@@ -6222,6 +6358,7 @@ declare namespace LocalJSX {
6222
6358
  "xpl-tooltip": Omit<XplTooltip, keyof XplTooltipAttributes> & { [K in keyof XplTooltip & keyof XplTooltipAttributes]?: XplTooltip[K] } & { [K in keyof XplTooltip & keyof XplTooltipAttributes as `attr:${K}`]?: XplTooltipAttributes[K] } & { [K in keyof XplTooltip & keyof XplTooltipAttributes as `prop:${K}`]?: XplTooltip[K] };
6223
6359
  "xpl-top-nav": Omit<XplTopNav, keyof XplTopNavAttributes> & { [K in keyof XplTopNav & keyof XplTopNavAttributes]?: XplTopNav[K] } & { [K in keyof XplTopNav & keyof XplTopNavAttributes as `attr:${K}`]?: XplTopNavAttributes[K] } & { [K in keyof XplTopNav & keyof XplTopNavAttributes as `prop:${K}`]?: XplTopNav[K] };
6224
6360
  "xpl-top-nav-item": Omit<XplTopNavItem, keyof XplTopNavItemAttributes> & { [K in keyof XplTopNavItem & keyof XplTopNavItemAttributes]?: XplTopNavItem[K] } & { [K in keyof XplTopNavItem & keyof XplTopNavItemAttributes as `attr:${K}`]?: XplTopNavItemAttributes[K] } & { [K in keyof XplTopNavItem & keyof XplTopNavItemAttributes as `prop:${K}`]?: XplTopNavItem[K] };
6361
+ "xpl-top-nav-menu": Omit<XplTopNavMenu, keyof XplTopNavMenuAttributes> & { [K in keyof XplTopNavMenu & keyof XplTopNavMenuAttributes]?: XplTopNavMenu[K] } & { [K in keyof XplTopNavMenu & keyof XplTopNavMenuAttributes as `attr:${K}`]?: XplTopNavMenuAttributes[K] } & { [K in keyof XplTopNavMenu & keyof XplTopNavMenuAttributes as `prop:${K}`]?: XplTopNavMenu[K] };
6225
6362
  "xpl-utility-bar": Omit<XplUtilityBar, keyof XplUtilityBarAttributes> & { [K in keyof XplUtilityBar & keyof XplUtilityBarAttributes]?: XplUtilityBar[K] } & { [K in keyof XplUtilityBar & keyof XplUtilityBarAttributes as `attr:${K}`]?: XplUtilityBarAttributes[K] } & { [K in keyof XplUtilityBar & keyof XplUtilityBarAttributes as `prop:${K}`]?: XplUtilityBar[K] };
6226
6363
  }
6227
6364
  }
@@ -6383,22 +6520,45 @@ declare module "@stencil/core" {
6383
6520
  */
6384
6521
  "xpl-top-nav": LocalJSX.IntrinsicElements["xpl-top-nav"] & JSXBase.HTMLAttributes<HTMLXplTopNavElement>;
6385
6522
  /**
6386
- * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`**. The host uses **`role="listitem"`** when the row
6387
- * participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on **`xpl-top-nav`** (list host is
6388
- * **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of **`xpl-top-nav`**), or default-slot rows
6389
- * under **`xpl-nav-header-menu`**. That flag is
6523
+ * Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. The host uses
6524
+ * **`role="listitem"`** when the row participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
6525
+ * **`xpl-top-nav`** (list host is **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
6526
+ * **`xpl-top-nav`**), or default-slot rows under **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. That flag is
6390
6527
  * kept in **`@State`** and refreshed after render plus via **`MutationObserver`** on the host (**`class`**, **`slot`**) and
6391
6528
  * on **`parentElement`** (**`role`**) or on **`.xpl-top-nav__left-primary`** (**`role`**) for **`slot="left-aside"`** under **`xpl-top-nav`**) so DOM context changes
6392
6529
  * without a full reconnect still re-sync. The internal
6393
6530
  * **`xpl-top-nav__brand`** row omits **`listitem`** (it sits in **`.xpl-top-nav__brand-bar`**, not **`.xpl-top-nav__left-primary`**),
6394
6531
  * as do **`slot="right-aside-mobile"`** rows (not a list). **`slot="dropdown"`** uses a local **`.xpl-top-nav-item__dropdown`**
6395
6532
  * panel (not **`xpl-dropdown`**); see **`TECH_DEBT.md`**.
6533
+ * **This component does triple duty:** a plain bar item, a dropdown trigger (**`slot="dropdown"`** present), and a
6534
+ * dropdown/menu **row** (nested inside **`xpl-nav-header-menu`** or **`xpl-top-nav-menu`**). The **`description`** prop
6535
+ * only applies in the row context — bar items and triggers do not show it in Figma.
6396
6536
  * **Default slot (no `label`):** do not put **`xpl-top-nav-item__inner`** or other **`xpl-top-nav-item__*`** classes on
6397
6537
  * custom trigger content — the component renders the inner wrapper and BEM elements.
6398
6538
  * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens resolve to dark-mode
6399
6539
  * values even when the page root is light (consistent with **`xpl-top-nav`**).
6400
6540
  */
6401
6541
  "xpl-top-nav-item": LocalJSX.IntrinsicElements["xpl-top-nav-item"] & JSXBase.HTMLAttributes<HTMLXplTopNavItemElement>;
6542
+ /**
6543
+ * Thin grouping container for **`xpl-top-nav-item`** rows — the panel content for a desktop flyout
6544
+ * (**`slot="dropdown"`** on the parent **`xpl-top-nav-item`**) and, on small screens, the **mobile
6545
+ * cascade**: the same markup drills in to a **Level 2** view in place, with an auto-rendered **back
6546
+ * row** (leading **`chevron-left`** + this component's **`label`**) as the first row. Tapping the back
6547
+ * row closes the parent trigger's dropdown (**`closeMenu()`**), returning to **Level 1** and restoring
6548
+ * focus to the parent trigger. No item logic otherwise lives here — row behavior (icons, description,
6549
+ * links, nested dropdowns) is entirely **`xpl-top-nav-item`**.
6550
+ * **One authoring markup, two renderings:** consumers write this once; **`isMobileCascade`** (synced
6551
+ * from **`TOP_NAV_MOBILE_MQ`**) decides whether the back row renders. Desktop never sees it — the
6552
+ * flyout is a single level of links (see `xpl-top-nav-item`'s cascade-depth notes).
6553
+ * **Panel chrome** is shared with **`xpl-nav-header-menu`** (the account menu): width
6554
+ * (**`--xpl-top-nav-panel-width`**), surface, shadow, radius, and vertical padding all come from the
6555
+ * same selector in `top-nav.css` so the desktop flyout, mobile cascade, and account menu read as one
6556
+ * visual family.
6557
+ * **Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens
6558
+ * resolve to dark-mode values even when the page root is light (consistent with the rest of the
6559
+ * **`xpl-top-nav`** family).
6560
+ */
6561
+ "xpl-top-nav-menu": LocalJSX.IntrinsicElements["xpl-top-nav-menu"] & JSXBase.HTMLAttributes<HTMLXplTopNavMenuElement>;
6402
6562
  "xpl-utility-bar": LocalJSX.IntrinsicElements["xpl-utility-bar"] & JSXBase.HTMLAttributes<HTMLXplUtilityBarElement>;
6403
6563
  }
6404
6564
  }
@@ -2,12 +2,15 @@ export declare class TimerManager {
2
2
  private timeouts;
3
3
  private intervals;
4
4
  private rafs;
5
+ private coalesced;
5
6
  setTimeout(callback: () => void, delay: number): ReturnType<typeof setTimeout>;
6
7
  clearTimeout(id: ReturnType<typeof setTimeout>): void;
7
8
  setInterval(callback: () => void, delay: number): ReturnType<typeof setInterval>;
8
9
  clearInterval(id: ReturnType<typeof setInterval>): void;
9
10
  requestAnimationFrame(callback: FrameRequestCallback): number;
10
11
  cancelAnimationFrame(id: number): void;
12
+ scheduleCoalesced(key: string, callback: () => void, delay?: number): void;
13
+ clearCoalesced(key: string): void;
11
14
  dispose(): void;
12
15
  }
13
16
  export declare function waitForElement<T extends Element = Element>(selector: string, root?: ParentNode, options?: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xplortech/apollo-core",
3
- "version": "2.10.0",
3
+ "version": "2.11.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -23,6 +23,10 @@
23
23
  "types": "./dist/components/index.d.ts",
24
24
  "import": "./dist/components/index.js"
25
25
  },
26
+ "./components/*.js": {
27
+ "types": "./dist/components/*.d.ts",
28
+ "import": "./dist/components/*.js"
29
+ },
26
30
  "./components/*": {
27
31
  "types": "./dist/components/*.d.ts",
28
32
  "import": "./dist/components/*.js"
@@ -70,13 +74,15 @@
70
74
  "scripts": {
71
75
  "build": "npm run clean && npm-run-all build:*",
72
76
  "build:css": "cross-env NODE_ENV=production postcss src/style.css -o build/style.css && npm-run-all build-partial:css.*",
77
+ "build-partial:css.angular": "cp build/style.css ../apollo-angular/css/apollo.css",
73
78
  "build-partial:css.react": "cp build/style.css ../apollo-react/css/apollo.css",
74
79
  "build-partial:css.storybook": "cp -r build/ .storybook/build",
75
80
  "build-partial:css.vue": "cp build/style.css ../apollo-vue/css/apollo.css",
76
- "build:stencil": "node ../../scripts/generate-icon-docs.mjs && stencil build --docs --prod && cp -r dist .storybook && cp -r loader .storybook && node .storybook/patch-stencil-sourcemaps.mjs",
81
+ "build:stencil": "node ../../scripts/generate-icon-docs.mjs && stencil build --docs --prod && node ../../scripts/patch-angular-value-accessors.mjs && cp -r dist .storybook && cp -r loader .storybook && node .storybook/patch-stencil-sourcemaps.mjs",
77
82
  "postbuild": "node ../../scripts/copy-readmes-to-dist.mjs && node ../../scripts/finalize-apollo-core-cjs.mjs",
78
83
  "clean": "rm -rf dist/ loader/ storybook-static/ www/ build/ src/components/components.d.ts",
79
84
  "dev": "run-p dev:*",
85
+ "dev:angular-patch": "node ../../scripts/patch-angular-value-accessors.mjs --watch",
80
86
  "dev:css": "postcss src/style.css -o build/style.css -w",
81
87
  "dev:stencil": "stencil build --dev --watch --serve",
82
88
  "lint:css": "stylelint 'src/**/*.css'",
@@ -112,21 +118,22 @@
112
118
  "@chromatic-com/storybook": "^4.1.3",
113
119
  "@mdx-js/react": "^3.1.1",
114
120
  "@stencil/core": "^4.43.5",
121
+ "@stencil/angular-output-target": "^1.3.2",
115
122
  "@stencil/react-output-target": "1.6.0",
116
123
  "@stencil/vitest": "^1.13.3",
117
124
  "@stencil/vue-output-target": "^0.14.0",
118
- "@storybook/addon-a11y": "^10.1.3",
119
- "@storybook/addon-designs": "^11.1.1",
120
- "@storybook/addon-docs": "^10.1.3",
121
- "@storybook/addon-links": "^10.1.3",
122
- "@storybook/addon-themes": "^10.1.3",
123
- "@storybook/addon-vitest": "^10.1.3",
125
+ "@storybook/addon-a11y": "^10.5.0",
126
+ "@storybook/addon-designs": "^11.1.4",
127
+ "@storybook/addon-docs": "^10.5.0",
128
+ "@storybook/addon-links": "^10.5.0",
129
+ "@storybook/addon-themes": "^10.5.0",
130
+ "@storybook/addon-vitest": "^10.5.0",
124
131
  "@storybook/builder-vite": "^10.1.3",
125
- "@storybook/web-components-vite": "^10.1.3",
132
+ "@storybook/web-components-vite": "^10.5.0",
126
133
  "@vitest/browser-playwright": "^4.0.13",
127
134
  "@vitest/coverage-v8": "^4.0.13",
128
135
  "@vueless/storybook-dark-mode": "^10.0.3",
129
- "@xplortech/apollo-icons": "0.4.0",
136
+ "@xplortech/apollo-icons": "0.4.1",
130
137
  "autoprefixer": "^10.4.16",
131
138
  "cross-env": "^7.0.3",
132
139
  "eslint-plugin-react": "^7.37.5",
@@ -191,7 +198,10 @@
191
198
  "{workspaceRoot}/packages/apollo-react/src/components/stencil-generated",
192
199
  "{workspaceRoot}/packages/apollo-react/css/apollo.css",
193
200
  "{workspaceRoot}/packages/apollo-vue/src/components.ts",
194
- "{workspaceRoot}/packages/apollo-vue/css/apollo.css"
201
+ "{workspaceRoot}/packages/apollo-vue/css/apollo.css",
202
+ "{workspaceRoot}/packages/apollo-angular/src/directives/proxies.ts",
203
+ "{workspaceRoot}/packages/apollo-angular/src/directives/index.ts",
204
+ "{workspaceRoot}/packages/apollo-angular/css/apollo.css"
195
205
  ]
196
206
  }
197
207
  }
@@ -1 +0,0 @@
1
- import{r as t,c as s,h as i,H as c}from"./p-CXkZUm1c.js";const a=class{constructor(i){t(this,i),this.clickPrimary=s(this,"clickPrimary",7),this.clickSecondary=s(this,"clickSecondary",7),this.clickTertiary=s(this,"clickTertiary",7),this.onPrimary=()=>this.clickPrimary.emit(),this.onSecondary=()=>this.clickSecondary.emit(),this.onTertiary=()=>this.clickTertiary.emit()}render(){return i(c,{key:"cd6436989f07af18d1e696a26e3e990d99859b2e",class:"xpl-button-row"},i("div",{key:"67a9ab3127bdd31d416d716bf06a2548d4b04341",class:"xpl-button-row-inner"},i("div",{key:"f4c9e84868a5476500ffd65381fafe6c427e63ad",class:"xpl-button-row__left"},this.secondary&&i("xpl-button",{key:"9c264293c00634759559c8109657f8a58451dc06",variant:"secondary",type:"button",onClick:this.onSecondary},this.secondary)),i("div",{key:"df3443bd9afa937c4936e7b902da146f4a999f56",class:"xpl-button-row__right"},this.tertiary&&i("xpl-button",{key:"85912cdbc02ac6587085564dbfb4f0647b656d7d",variant:"subtle",type:"button",onClick:this.onTertiary},this.tertiary),this.secondary&&i("xpl-button",{key:"cbb4302e9853d751b7b75e386c6d9441037c301e",variant:"secondary",type:"button",onClick:this.onSecondary},this.secondary),this.primary&&i("xpl-button",{key:"10991142b7062283d129ba3428e5d3f1c060a973",class:"xpl-button-row__primary",onClick:this.onPrimary},this.primary))))}};export{a as xpl_button_row}
@@ -1 +0,0 @@
1
- import{r as e,h as a,H as r}from"./p-CXkZUm1c.js";const c=class{constructor(a){e(this,a)}render(){return a(r,{key:"f50c2c0ca2743e47ad44a368a9ea684c57a72261",role:"row",class:"xpl-table-header"},a("slot",{key:"7a61b45818de8675015ca3defb9ee8c3280e961a"}))}};export{c as xpl_table_header}
@@ -1 +0,0 @@
1
- import{r as e,h as t,H as s}from"./p-CXkZUm1c.js";const a=class{constructor(t){e(this,t),this.disabled=!1,this.selected=!1,this.isDisabled=!1}componentWillLoad(){this.isDisabled=this.disabled}componentDidLoad(){this.updateRowCellsDisabledState()}componentDidUpdate(){this.updateRowCellsDisabledState()}updateRowCellsDisabledState(){this.hostElement.querySelectorAll("xpl-dynamic-table-cell").forEach((e=>{e.disabled=this.isDisabled}))}render(){return t(s,{key:"e070f32db6cee0bcbf0dd84e41e13e6d3b88e8a1",role:"row",class:`xpl-dynamic-table-row\n ${this.isDisabled?"disabled":""}\n ${this.selected?"selected":""}`,ref:e=>{this.hostElement=e}},t("slot",{key:"78ea8e02e97e0017dc4aa35af4883446d4e4c4bf"}))}};export{a as xpl_dynamic_table_row}
@@ -1 +0,0 @@
1
- import{r as a,h as e,H as t,g as s}from"./p-CXkZUm1c.js";const c=class{constructor(e){a(this,e),this.disabled=!1}componentDidLoad(){this.updateSlottedComponentsWhenDisabled()}componentDidUpdate(){this.updateSlottedComponentsWhenDisabled()}updateSlottedComponentsWhenDisabled(){this.hostElement.querySelectorAll("*").forEach((a=>{"disabled"in a&&(a.disabled=this.disabled)}))}render(){const a=Array.from(this.el.parentElement.children).indexOf(this.el)+1;return e(t,{key:"e6e9a3695c9d8ca3743b188284bc8e69f50f3397",role:"gridcell","aria-colindex":a,class:"xpl-dynamic-table-cell",ref:a=>{this.hostElement=a}},e("slot",{key:"abfa632a3ac88d663acaaacbc431d07c9da4b375"}))}get el(){return s(this)}};export{c as xpl_dynamic_table_cell}
@@ -1 +0,0 @@
1
- import{r as s,c as t,h as e,H as l}from"./p-CXkZUm1c.js";import{v as i}from"./p-CK3_k8jD.js";const a=class{constructor(e){s(this,e),this.toggleChange=t(this,"toggleChange",7),this.variant="default",this.id=i(),this.onChange=s=>{this.toggleChange.emit(s.target.checked)}}render(){let s="xpl-toggle-container";this.disabled&&(s+=" xpl-toggle-container--disabled");let t="xpl-toggle";return"small"===this.variant&&(t+=" xpl-toggle--small"),e(l,{key:"bc7363fd59d7cc10f0df644b5c54021ce860dbbc",class:s},(this.heading||this.description)&&e("label",{key:"06b031581d173694651e58265b287865daeaf22b",class:{"xpl-label":!0,"xpl-label--disabled":this.disabled},htmlFor:this.id},this.heading,this.description&&e("small",{key:"a633107a6dcc2c0c43cd626c3013876831535588",class:{"xpl-description":!0,"xpl-description--disabled":this.disabled}},this.description)),e("input",{key:"fc1d734118dafc0a5f64119eb91d19e8af1254a6",class:t,type:"checkbox",checked:this.checked,disabled:this.disabled,id:this.id,name:this.name,onChange:this.onChange}),this.label&&e("label",{key:"7f1a465da3ec136c11797746505c0629fe2d31a9",htmlFor:this.id},this.label))}};export{a as xpl_toggle}