@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.
- package/.typings/apollo-components.html-data.json +35 -2
- package/build/style.css +259 -34
- package/dist/apollo-core/apollo-core.css +12 -12
- package/dist/apollo-core/apollo-core.esm.js +1 -1
- package/dist/apollo-core/{p-728341d2.entry.js → p-048fdde0.entry.js} +1 -1
- package/dist/apollo-core/p-0abc496e.entry.js +1 -0
- package/dist/apollo-core/{p-23870463.entry.js → p-1442c052.entry.js} +1 -1
- package/dist/apollo-core/p-1e498763.entry.js +1 -0
- package/dist/apollo-core/p-26c3a508.entry.js +1 -0
- package/dist/apollo-core/p-4ce52107.entry.js +1 -0
- package/dist/apollo-core/p-6710fb29.entry.js +1 -0
- package/dist/apollo-core/p-7e622809.entry.js +1 -0
- package/dist/apollo-core/{p-c17b6351.entry.js → p-87068144.entry.js} +1 -1
- package/dist/apollo-core/p-BUgtURvw.js +1 -0
- package/dist/apollo-core/p-a3b4820a.entry.js +1 -0
- package/dist/apollo-core/p-b2d6dd0e.entry.js +1 -0
- package/dist/apollo-core/{p-e9e7577f.entry.js → p-bd2249ef.entry.js} +1 -1
- package/dist/apollo-core/p-c96b7957.entry.js +1 -0
- package/dist/apollo-core/p-d6be63cd.entry.js +1 -0
- package/dist/apollo-core/{p-9adf3694.entry.js → p-ddf76cee.entry.js} +1 -1
- package/dist/apollo-core/p-f0554edd.entry.js +1 -0
- package/dist/cjs/apollo-core.cjs.js +1 -1
- package/dist/cjs/index-BaXVr8ux.js +4 -0
- package/dist/cjs/lifecycle-Bf3QwiVa.js +70 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/xpl-accordion.cjs.entry.js +2 -2
- package/dist/cjs/xpl-application-shell.cjs.entry.js +1 -1
- package/dist/cjs/xpl-avatar_54.cjs.entry.js +292 -243
- package/dist/cjs/xpl-button-row.cjs.entry.js +1 -1
- package/dist/cjs/xpl-calendar.cjs.entry.js +1 -1
- package/dist/cjs/xpl-dynamic-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/xpl-dynamic-table-row.cjs.entry.js +2 -2
- package/dist/cjs/xpl-dynamic-table.cjs.entry.js +1 -1
- package/dist/cjs/xpl-grid-item.cjs.entry.js +1 -1
- package/dist/cjs/xpl-grid.cjs.entry.js +1 -1
- package/dist/cjs/xpl-large-card.cjs.entry.js +1 -1
- package/dist/cjs/xpl-main-nav.cjs.entry.js +1 -1
- package/dist/cjs/xpl-table-header.cjs.entry.js +1 -1
- package/dist/cjs/xpl-toggle.cjs.entry.js +3 -3
- package/dist/cjs/xpl-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/xpl-top-nav-menu.cjs.entry.js +97 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/xpl-accordion/xpl-accordion.js +2 -2
- package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +1 -1
- package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +1 -1
- package/dist/collection/components/xpl-badge/xpl-badge.js +1 -1
- package/dist/collection/components/xpl-banner/xpl-banner.js +2 -2
- package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +1 -1
- package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +1 -1
- package/dist/collection/components/xpl-button/xpl-button.js +1 -1
- package/dist/collection/components/xpl-button-row/xpl-button-row.js +1 -1
- package/dist/collection/components/xpl-calendar/xpl-calendar.js +1 -1
- package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +3 -3
- package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +1 -1
- package/dist/collection/components/xpl-content-area/xpl-content-area.js +1 -1
- package/dist/collection/components/xpl-dashboard/xpl-dashboard.js +1 -1
- package/dist/collection/components/xpl-data-card/xpl-data-card.js +2 -2
- package/dist/collection/components/xpl-divider/xpl-divider.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +1 -1
- package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +2 -2
- package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +4 -4
- package/dist/collection/components/xpl-dynamic-table/xpl-dynamic-table.js +1 -1
- package/dist/collection/components/xpl-dynamic-table-cell/xpl-dynamic-table-cell.js +2 -2
- package/dist/collection/components/xpl-dynamic-table-row/xpl-dynamic-table-row.js +2 -2
- package/dist/collection/components/xpl-grid/xpl-grid.js +1 -1
- package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +1 -1
- package/dist/collection/components/xpl-header-accordion/xpl-header-accordion.js +1 -1
- package/dist/collection/components/xpl-icon/xpl-icon.js +2 -2
- package/dist/collection/components/xpl-input/xpl-input-color/xpl-input-color.js +8 -8
- package/dist/collection/components/xpl-input/xpl-input-date/xpl-input-date.js +3 -3
- package/dist/collection/components/xpl-input/xpl-input-file/xpl-input-file.js +4 -4
- package/dist/collection/components/xpl-input/xpl-input-phone/xpl-input-phone.js +5 -5
- package/dist/collection/components/xpl-input/xpl-input-search/xpl-input-search.js +1 -1
- package/dist/collection/components/xpl-input/xpl-input-time/xpl-input-time.js +2 -2
- package/dist/collection/components/xpl-input/xpl-input.js +2 -2
- package/dist/collection/components/xpl-large-card/xpl-large-card.js +1 -1
- package/dist/collection/components/xpl-list/xpl-list.js +2 -2
- package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +1 -1
- package/dist/collection/components/xpl-modal/xpl-modal.js +1 -1
- package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +2 -2
- package/dist/collection/components/xpl-pagination/xpl-pagination.js +4 -4
- package/dist/collection/components/xpl-panel/xpl-panel.js +2 -2
- package/dist/collection/components/xpl-popover/xpl-popover.js +4 -4
- package/dist/collection/components/xpl-progress-bar/xpl-progress-bar.js +2 -2
- package/dist/collection/components/xpl-progress-indicator/xpl-progress-indicator.js +1 -1
- package/dist/collection/components/xpl-radio/xpl-radio.js +3 -3
- package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +1 -1
- package/dist/collection/components/xpl-select/xpl-select.js +6 -6
- package/dist/collection/components/xpl-side-nav/xpl-side-nav-item/xpl-side-nav-item.js +2 -2
- package/dist/collection/components/xpl-side-nav/xpl-side-nav.js +2 -2
- package/dist/collection/components/xpl-skeleton/xpl-skeleton.js +1 -1
- package/dist/collection/components/xpl-slideout/xpl-slideout.js +1 -1
- package/dist/collection/components/xpl-tab-panel/xpl-tab-panel.js +2 -2
- package/dist/collection/components/xpl-table/xpl-table.js +5 -5
- package/dist/collection/components/xpl-table-header/xpl-table-header.js +1 -1
- package/dist/collection/components/xpl-tabs/xpl-tabs.js +5 -5
- package/dist/collection/components/xpl-tag/xpl-tag.js +2 -2
- package/dist/collection/components/xpl-toast/xpl-toast.js +2 -2
- package/dist/collection/components/xpl-toggle/xpl-toggle.js +3 -3
- package/dist/collection/components/xpl-toolbar/xpl-toolbar.js +2 -2
- package/dist/collection/components/xpl-tooltip/xpl-tooltip.js +1 -1
- package/dist/collection/components/xpl-top-nav/top-nav-constants.js +1 -0
- package/dist/collection/components/xpl-top-nav/top-nav.stories.js +131 -11
- package/dist/collection/components/xpl-top-nav/xpl-nav-header-menu/xpl-nav-header-menu.js +2 -2
- package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/top-nav-item-constants.js +2 -0
- package/dist/collection/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.js +305 -85
- package/dist/collection/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.js +119 -0
- package/dist/collection/components/xpl-top-nav/xpl-top-nav.js +11 -5
- package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +1 -1
- package/dist/collection/utils/lifecycle.js +18 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -1
- package/dist/components/p-2xGSxBGa.js +1 -0
- package/dist/components/p-B8RYNiz-.js +1 -0
- package/dist/components/p-BDWXBWGE.js +1 -0
- package/dist/components/{p-Bn-27-xj.js → p-BJqNuBZr.js} +1 -1
- package/dist/components/p-BUgtURvw.js +1 -0
- package/dist/components/{p-DllC7F-H.js → p-B_sq_SAX.js} +1 -1
- package/dist/components/{p-hPUzON4O.js → p-Bsy-VVS5.js} +1 -1
- package/dist/components/p-BxHFEnPN.js +1 -0
- package/dist/components/{p-B1PBAEzg.js → p-ByJRw26d.js} +1 -1
- package/dist/components/{p-DPTHmitJ.js → p-C5_Yo0ZP.js} +1 -1
- package/dist/components/p-C8rmEAx6.js +1 -0
- package/dist/components/p-CF_YTx16.js +1 -0
- package/dist/components/{p-BG0-6Xek.js → p-CUYkG-PB.js} +1 -1
- package/dist/components/{p-kPHfCq1d.js → p-CaW0fL0P.js} +1 -1
- package/dist/components/{p-B_Wi--Ov.js → p-CuisR8WP.js} +1 -1
- package/dist/components/{p-D97c0GjM.js → p-D2SFagIb.js} +1 -1
- package/dist/components/{p-3qMYyqTe.js → p-DKUNbsb0.js} +1 -1
- package/dist/components/p-DcXL24UI.js +1 -0
- package/dist/components/{p-CVqbA9op.js → p-Dp3H99Yc.js} +1 -1
- package/dist/components/p-M900WO1C.js +1 -0
- package/dist/components/{p-DEl4Rvzs.js → p-ZTFt9sBy.js} +1 -1
- package/dist/components/{p-CFW_w5Wj.js → p-gfb3l9Pr.js} +1 -1
- package/dist/components/{p-C9BO2vL-.js → p-h1Gbk5lO.js} +1 -1
- package/dist/components/xpl-accordion.js +1 -1
- package/dist/components/xpl-application-shell.js +1 -1
- package/dist/components/xpl-avatar.js +1 -1
- package/dist/components/xpl-backdrop.js +1 -1
- package/dist/components/xpl-badge.js +1 -1
- package/dist/components/xpl-banner.js +1 -1
- package/dist/components/xpl-breadcrumb-item.js +1 -1
- package/dist/components/xpl-breadcrumbs.js +1 -1
- package/dist/components/xpl-button-row.js +1 -1
- package/dist/components/xpl-button.js +1 -1
- package/dist/components/xpl-calendar.js +1 -1
- package/dist/components/xpl-checkbox.js +1 -1
- package/dist/components/xpl-choicelist.js +1 -1
- package/dist/components/xpl-content-area.js +1 -1
- package/dist/components/xpl-dashboard.js +1 -1
- package/dist/components/xpl-data-card.js +1 -1
- package/dist/components/xpl-divider.js +1 -1
- package/dist/components/xpl-dropdown-group.js +1 -1
- package/dist/components/xpl-dropdown-heading.js +1 -1
- package/dist/components/xpl-dropdown-option.js +1 -1
- package/dist/components/xpl-dropdown.js +1 -1
- package/dist/components/xpl-dynamic-table-cell.js +1 -1
- package/dist/components/xpl-dynamic-table-row.js +1 -1
- package/dist/components/xpl-dynamic-table.js +1 -1
- package/dist/components/xpl-grid-item.js +1 -1
- package/dist/components/xpl-grid.js +1 -1
- package/dist/components/xpl-header-accordion.js +1 -1
- package/dist/components/xpl-icon.js +1 -1
- package/dist/components/xpl-input-color.js +1 -1
- package/dist/components/xpl-input-date.js +1 -1
- package/dist/components/xpl-input-file.js +1 -1
- package/dist/components/xpl-input-phone.js +1 -1
- package/dist/components/xpl-input-search.js +1 -1
- package/dist/components/xpl-input-time.js +1 -1
- package/dist/components/xpl-input.js +1 -1
- package/dist/components/xpl-large-card.js +1 -1
- package/dist/components/xpl-list-item.js +1 -1
- package/dist/components/xpl-list.js +1 -1
- package/dist/components/xpl-main-nav.js +1 -1
- package/dist/components/xpl-modal.js +1 -1
- package/dist/components/xpl-nav-header-menu.js +1 -1
- package/dist/components/xpl-nav-item.js +1 -1
- package/dist/components/xpl-pagination.js +1 -1
- package/dist/components/xpl-panel.js +1 -1
- package/dist/components/xpl-popover.js +1 -1
- package/dist/components/xpl-progress-bar.js +1 -1
- package/dist/components/xpl-progress-indicator.js +1 -1
- package/dist/components/xpl-radio.js +1 -1
- package/dist/components/xpl-secondary-nav.js +1 -1
- package/dist/components/xpl-select.js +1 -1
- package/dist/components/xpl-side-nav-item.js +1 -1
- package/dist/components/xpl-side-nav.js +1 -1
- package/dist/components/xpl-skeleton.js +1 -1
- package/dist/components/xpl-slideout.js +1 -1
- package/dist/components/xpl-spotlight.js +1 -1
- package/dist/components/xpl-tab-panel.js +1 -1
- package/dist/components/xpl-tab.js +1 -1
- package/dist/components/xpl-table-header-cell.js +1 -1
- package/dist/components/xpl-table-header.js +1 -1
- package/dist/components/xpl-table.js +1 -1
- package/dist/components/xpl-tabs.js +1 -1
- package/dist/components/xpl-tag.js +1 -1
- package/dist/components/xpl-toast.js +1 -1
- package/dist/components/xpl-toggle.js +1 -1
- package/dist/components/xpl-toolbar.js +1 -1
- package/dist/components/xpl-tooltip.js +1 -1
- package/dist/components/xpl-top-nav-item.js +1 -1
- package/dist/components/xpl-top-nav-menu.d.ts +11 -0
- package/dist/components/xpl-top-nav-menu.js +1 -0
- package/dist/components/xpl-top-nav.js +1 -1
- package/dist/components/xpl-utility-bar.js +1 -1
- package/dist/docs/xpl-icon/readme.md +2 -0
- package/dist/docs/xpl-top-nav/readme.md +3 -0
- package/dist/docs/xpl-top-nav/xpl-top-nav-item/readme.md +79 -20
- package/dist/docs/xpl-top-nav/xpl-top-nav-menu/readme.md +96 -0
- package/dist/esm/apollo-core.js +1 -1
- package/dist/esm/index-CXkZUm1c.js +4 -0
- package/dist/esm/lifecycle-BUgtURvw.js +68 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/xpl-accordion.entry.js +2 -2
- package/dist/esm/xpl-application-shell.entry.js +1 -1
- package/dist/esm/xpl-avatar_54.entry.js +291 -242
- package/dist/esm/xpl-button-row.entry.js +1 -1
- package/dist/esm/xpl-calendar.entry.js +1 -1
- package/dist/esm/xpl-dynamic-table-cell.entry.js +2 -2
- package/dist/esm/xpl-dynamic-table-row.entry.js +2 -2
- package/dist/esm/xpl-dynamic-table.entry.js +1 -1
- package/dist/esm/xpl-grid-item.entry.js +1 -1
- package/dist/esm/xpl-grid.entry.js +1 -1
- package/dist/esm/xpl-large-card.entry.js +1 -1
- package/dist/esm/xpl-main-nav.entry.js +1 -1
- package/dist/esm/xpl-table-header.entry.js +1 -1
- package/dist/esm/xpl-toggle.entry.js +3 -3
- package/dist/esm/xpl-toolbar.entry.js +2 -2
- package/dist/esm/xpl-top-nav-menu.entry.js +95 -0
- package/dist/types/components/xpl-top-nav/top-nav-constants.d.ts +1 -0
- package/dist/types/components/xpl-top-nav/top-nav.stories.d.ts +70 -1
- package/dist/types/components/xpl-top-nav/xpl-top-nav-item/top-nav-item-constants.d.ts +2 -0
- package/dist/types/components/xpl-top-nav/xpl-top-nav-item/xpl-top-nav-item.d.ts +23 -4
- package/dist/types/components/xpl-top-nav/xpl-top-nav-menu/xpl-top-nav-menu.d.ts +18 -0
- package/dist/types/components/xpl-top-nav/xpl-top-nav.d.ts +1 -0
- package/dist/types/components.d.ts +179 -19
- package/dist/types/utils/lifecycle.d.ts +3 -0
- package/package.json +21 -11
- package/dist/apollo-core/p-0e45f332.entry.js +0 -1
- package/dist/apollo-core/p-0f251f98.entry.js +0 -1
- package/dist/apollo-core/p-1691c4f3.entry.js +0 -1
- package/dist/apollo-core/p-172ac720.entry.js +0 -1
- package/dist/apollo-core/p-44a16751.entry.js +0 -1
- package/dist/apollo-core/p-4efecab2.entry.js +0 -1
- package/dist/apollo-core/p-5094dd97.entry.js +0 -1
- package/dist/apollo-core/p-70e7facc.entry.js +0 -1
- package/dist/apollo-core/p-910be81f.entry.js +0 -1
- package/dist/apollo-core/p-e08b434c.entry.js +0 -1
- package/dist/components/p-BWyAzrwu.js +0 -1
- package/dist/components/p-Bd6JweBt.js +0 -1
- package/dist/components/p-Bs6vq0C6.js +0 -1
- package/dist/components/p-CGNq3DyC.js +0 -1
- package/dist/components/p-CtIUusUL.js +0 -1
- package/dist/components/p-DBWV65V-.js +0 -1
- package/dist/components/p-Ds28UyUR.js +0 -1
- 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
|
|
2073
|
-
* participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
|
|
2074
|
-
* **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
|
|
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
|
|
3184
|
-
* participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
|
|
3185
|
-
* **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
|
|
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
|
|
5571
|
-
* participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
|
|
5572
|
-
* **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
|
|
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
|
|
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
|
|
6387
|
-
* participates in a list: a **`role="list"`** parent, **`slot="left-aside"`** on
|
|
6388
|
-
* **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of
|
|
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.
|
|
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.
|
|
119
|
-
"@storybook/addon-designs": "^11.1.
|
|
120
|
-
"@storybook/addon-docs": "^10.
|
|
121
|
-
"@storybook/addon-links": "^10.
|
|
122
|
-
"@storybook/addon-themes": "^10.
|
|
123
|
-
"@storybook/addon-vitest": "^10.
|
|
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.
|
|
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.
|
|
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}
|