@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
|
@@ -2846,20 +2846,24 @@
|
|
|
2846
2846
|
"name": "xpl-top-nav-item",
|
|
2847
2847
|
"description": {
|
|
2848
2848
|
"kind": "markdown",
|
|
2849
|
-
"value": "Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`**. The host uses
|
|
2849
|
+
"value": "Single nav row for **`xpl-top-nav`** / **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. The host uses\n**`role=\"listitem\"`** when the row participates in a list: a **`role=\"list\"`** parent, **`slot=\"left-aside\"`** on\n**`xpl-top-nav`** (list host is **`.xpl-top-nav__left-primary`** while slotted nodes stay light-DOM children of\n**`xpl-top-nav`**), or default-slot rows under **`xpl-nav-header-menu`** / **`xpl-top-nav-menu`**. That flag is\nkept in **`@State`** and refreshed after render plus via **`MutationObserver`** on the host (**`class`**, **`slot`**) and\non **`parentElement`** (**`role`**) or on **`.xpl-top-nav__left-primary`** (**`role`**) for **`slot=\"left-aside\"`** under **`xpl-top-nav`**) so DOM context changes\nwithout a full reconnect still re-sync. The internal\n**`xpl-top-nav__brand`** row omits **`listitem`** (it sits in **`.xpl-top-nav__brand-bar`**, not **`.xpl-top-nav__left-primary`**),\nas do **`slot=\"right-aside-mobile\"`** rows (not a list). **`slot=\"dropdown\"`** uses a local **`.xpl-top-nav-item__dropdown`**\npanel (not **`xpl-dropdown`**); see **`TECH_DEBT.md`**.\n\n**This component does triple duty:** a plain bar item, a dropdown trigger (**`slot=\"dropdown\"`** present), and a\ndropdown/menu **row** (nested inside **`xpl-nav-header-menu`** or **`xpl-top-nav-menu`**). The **`description`** prop\nonly applies in the row context — bar items and triggers do not show it in Figma.\n\n**Default slot (no `label`):** do not put **`xpl-top-nav-item__inner`** or other **`xpl-top-nav-item__*`** classes on\ncustom trigger content — the component renders the inner wrapper and BEM elements.\n\n**Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens resolve to dark-mode\nvalues even when the page root is light (consistent with **`xpl-top-nav`**)."
|
|
2850
2850
|
},
|
|
2851
2851
|
"attributes": [
|
|
2852
2852
|
{
|
|
2853
2853
|
"name": "active",
|
|
2854
2854
|
"description": "When true, adds **`xpl-top-nav-item--active`** for persistent accent styling (e.g. link color on the bar, or\nchrome inside **`xpl-nav-header-menu`**). Separate from **`selected`**, which sets **`aria-current=\"page\"`** and\n**`--selected`**. Use both when the design needs “current page” semantics plus the active visual treatment."
|
|
2855
2855
|
},
|
|
2856
|
+
{
|
|
2857
|
+
"name": "description",
|
|
2858
|
+
"description": "Optional description line shown below **`label`** (row context only, e.g. inside **`xpl-nav-header-menu`** /\n**`xpl-top-nav-menu`**). Ignored when **`label`** is not set."
|
|
2859
|
+
},
|
|
2856
2860
|
{
|
|
2857
2861
|
"name": "href",
|
|
2858
2862
|
"description": "If set without **`slot=\"dropdown\"`**, the inner control renders as a native **`<a href>`** (link mode)."
|
|
2859
2863
|
},
|
|
2860
2864
|
{
|
|
2861
2865
|
"name": "icon",
|
|
2862
|
-
"description": "Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set)."
|
|
2866
|
+
"description": "Icon name from **`@xplortech/apollo-icons`** (shown before the label when **`label`** is set). Ignored when\n**`slot=\"leading-icon\"`** content is present."
|
|
2863
2867
|
},
|
|
2864
2868
|
{
|
|
2865
2869
|
"name": "item-aria-label",
|
|
@@ -2869,12 +2873,41 @@
|
|
|
2869
2873
|
"name": "label",
|
|
2870
2874
|
"description": "Text label. If omitted, use the default slot for custom trigger content. Long labels use **`text-ellipsis`**\non **`.xpl-top-nav-item__label`** (see `top-nav.css`); **`title`** is set to the full string for hover tooltips\nwhen the visual line clips."
|
|
2871
2875
|
},
|
|
2876
|
+
{
|
|
2877
|
+
"name": "open",
|
|
2878
|
+
"description": "Whether the **`slot=\"dropdown\"`** panel is open. Reflected to the **`open`** attribute so consumers can drive it\n(controlled) or read it back (uncontrolled, toggled internally on click / hover / keyboard activation). Prefer\n**`openMenu()`** / **`closeMenu()`** / **`toggleMenu()`** over setting this directly from event handlers."
|
|
2879
|
+
},
|
|
2880
|
+
{
|
|
2881
|
+
"name": "open-mode",
|
|
2882
|
+
"description": "How the **`slot=\"dropdown\"`** panel opens. **`hover`** is gated on **`TOP_NAV_ITEM_HOVER_OPEN_MQ`**\n(hover-capable, fine pointer, **`md`** and up) — below that, or on touch / coarse-pointer devices, **`hover`**\nfalls back to click/tap. Keyboard activation (Enter / Space) always toggles regardless of **`openMode`**.",
|
|
2883
|
+
"values": [
|
|
2884
|
+
{
|
|
2885
|
+
"name": "click"
|
|
2886
|
+
},
|
|
2887
|
+
{
|
|
2888
|
+
"name": "hover"
|
|
2889
|
+
}
|
|
2890
|
+
]
|
|
2891
|
+
},
|
|
2872
2892
|
{
|
|
2873
2893
|
"name": "selected",
|
|
2874
2894
|
"description": "When true, sets **`aria-current=\"page\"`** and selected styling."
|
|
2875
2895
|
}
|
|
2876
2896
|
]
|
|
2877
2897
|
},
|
|
2898
|
+
{
|
|
2899
|
+
"name": "xpl-top-nav-menu",
|
|
2900
|
+
"description": {
|
|
2901
|
+
"kind": "markdown",
|
|
2902
|
+
"value": "Thin grouping container for **`xpl-top-nav-item`** rows — the panel content for a desktop flyout\n(**`slot=\"dropdown\"`** on the parent **`xpl-top-nav-item`**) and, on small screens, the **mobile\ncascade**: the same markup drills in to a **Level 2** view in place, with an auto-rendered **back\nrow** (leading **`chevron-left`** + this component's **`label`**) as the first row. Tapping the back\nrow closes the parent trigger's dropdown (**`closeMenu()`**), returning to **Level 1** and restoring\nfocus to the parent trigger. No item logic otherwise lives here — row behavior (icons, description,\nlinks, nested dropdowns) is entirely **`xpl-top-nav-item`**.\n\n**One authoring markup, two renderings:** consumers write this once; **`isMobileCascade`** (synced\nfrom **`TOP_NAV_MOBILE_MQ`**) decides whether the back row renders. Desktop never sees it — the\nflyout is a single level of links (see `xpl-top-nav-item`'s cascade-depth notes).\n\n**Panel chrome** is shared with **`xpl-nav-header-menu`** (the account menu): width\n(**`--xpl-top-nav-panel-width`**), surface, shadow, radius, and vertical padding all come from the\nsame selector in `top-nav.css` so the desktop flyout, mobile cascade, and account menu read as one\nvisual family.\n\n**Theming:** The host always includes Foundation’s **`dark`** class so **`--xpl-*`** purpose tokens\nresolve to dark-mode values even when the page root is light (consistent with the rest of the\n**`xpl-top-nav`** family)."
|
|
2903
|
+
},
|
|
2904
|
+
"attributes": [
|
|
2905
|
+
{
|
|
2906
|
+
"name": "label",
|
|
2907
|
+
"description": "Accessible name for the list (**`aria-label`** on the host) and the label shown in the mobile\ncascade back row when drilling back out of this group."
|
|
2908
|
+
}
|
|
2909
|
+
]
|
|
2910
|
+
},
|
|
2878
2911
|
{
|
|
2879
2912
|
"name": "xpl-utility-bar",
|
|
2880
2913
|
"description": {
|
package/build/style.css
CHANGED
|
@@ -1419,7 +1419,7 @@ textarea[class^="xpl-"] {
|
|
|
1419
1419
|
--tw-ring-inset: var(--tw-empty, /*!*/ /*!*/);
|
|
1420
1420
|
--tw-ring-offset-width: 0;
|
|
1421
1421
|
--tw-ring-offset-color: #fff;
|
|
1422
|
-
--tw-ring-color:
|
|
1422
|
+
--tw-ring-color: rgb(59 130 246 / 50%);
|
|
1423
1423
|
--tw-ring-offset-shadow: 0 0 #0000;
|
|
1424
1424
|
--tw-ring-shadow: 0 0 #0000;
|
|
1425
1425
|
}
|
|
@@ -6617,7 +6617,6 @@ xpl-list .xpl-list__reorder-live {
|
|
|
6617
6617
|
|
|
6618
6618
|
.xpl-list-item-subtext {
|
|
6619
6619
|
color: var(--xpl-text-subdued);
|
|
6620
|
-
word-wrap: break-word;
|
|
6621
6620
|
overflow-wrap: break-word;
|
|
6622
6621
|
}
|
|
6623
6622
|
|
|
@@ -7132,8 +7131,8 @@ xpl-list-item .xpl-list-item__actions [slot="actions"] xpl-icon[role="button"] {
|
|
|
7132
7131
|
|
|
7133
7132
|
.xpl-modal__dialog {
|
|
7134
7133
|
box-shadow:
|
|
7135
|
-
0 10px 15px -3px
|
|
7136
|
-
0 4px 6px -2px
|
|
7134
|
+
0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
7135
|
+
0 4px 6px -2px rgb(0 0 0 / 0.05);
|
|
7137
7136
|
border-radius: 1rem;
|
|
7138
7137
|
padding: 1rem;
|
|
7139
7138
|
--tw-text-opacity: 1;
|
|
@@ -8297,7 +8296,7 @@ xpl-list-item .xpl-list-item__actions [slot="actions"] xpl-icon[role="button"] {
|
|
|
8297
8296
|
|
|
8298
8297
|
.xpl-secondary-nav nav::after {
|
|
8299
8298
|
content: "";
|
|
8300
|
-
background: linear-gradient(270deg, #fff 13.64%,
|
|
8299
|
+
background: linear-gradient(270deg, #fff 13.64%, rgb(255 255 255 / 0%) 89.53%);
|
|
8301
8300
|
position: absolute;
|
|
8302
8301
|
top: 0px;
|
|
8303
8302
|
bottom: 0px;
|
|
@@ -8307,7 +8306,7 @@ xpl-list-item .xpl-list-item__actions [slot="actions"] xpl-icon[role="button"] {
|
|
|
8307
8306
|
}
|
|
8308
8307
|
|
|
8309
8308
|
.dark .xpl-secondary-nav nav::after {
|
|
8310
|
-
background: linear-gradient(270deg,
|
|
8309
|
+
background: linear-gradient(270deg, rgb(32 30 41 / 100%) 20%, rgb(32 30 41 / 15%) 89%);
|
|
8311
8310
|
}
|
|
8312
8311
|
}
|
|
8313
8312
|
|
|
@@ -8582,8 +8581,8 @@ span.xpl-placeholder--hidden,
|
|
|
8582
8581
|
|
|
8583
8582
|
background-color: var(--xpl-color-foreground-lm);
|
|
8584
8583
|
box-shadow:
|
|
8585
|
-
-10px 0 15px -3px
|
|
8586
|
-
4px 0 6px -2px
|
|
8584
|
+
-10px 0 15px -3px rgb(0 0 0 / 0.1),
|
|
8585
|
+
4px 0 6px -2px rgb(0 0 0 / 0.05);
|
|
8587
8586
|
transform: translateX(0);
|
|
8588
8587
|
transition: transform 0.5s ease-in-out
|
|
8589
8588
|
}
|
|
@@ -8635,10 +8634,10 @@ span.xpl-placeholder--hidden,
|
|
|
8635
8634
|
|
|
8636
8635
|
.xpl-slideout .slideout .content.has-shadow {
|
|
8637
8636
|
box-shadow:
|
|
8638
|
-
inset 0 4px 6px -1px
|
|
8639
|
-
inset 0 2px 4px -1px
|
|
8640
|
-
inset 0 -4px 6px -1px
|
|
8641
|
-
inset 0 -2px 4px -1px
|
|
8637
|
+
inset 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
8638
|
+
inset 0 2px 4px -1px rgb(0 0 0 / 0.06),
|
|
8639
|
+
inset 0 -4px 6px -1px rgb(0 0 0 / 0.1),
|
|
8640
|
+
inset 0 -2px 4px -1px rgb(0 0 0 / 0.06);
|
|
8642
8641
|
}
|
|
8643
8642
|
|
|
8644
8643
|
.xpl-slideout .slideout [slot="content"] {
|
|
@@ -9553,8 +9552,8 @@ span.xpl-placeholder--hidden,
|
|
|
9553
9552
|
background-color: var(--xpl-color-secondary-bg-lm);
|
|
9554
9553
|
|
|
9555
9554
|
box-shadow:
|
|
9556
|
-
0 10px 15px -3px
|
|
9557
|
-
0 4px 6px -2px
|
|
9555
|
+
0 10px 15px -3px rgb(0 0 0/ 0.1),
|
|
9556
|
+
0 4px 6px -2px rgb(0 0 0/ 0.05);
|
|
9558
9557
|
animation: fadeIn 0.5s forwards
|
|
9559
9558
|
}
|
|
9560
9559
|
|
|
@@ -9987,9 +9986,10 @@ span.xpl-placeholder--hidden,
|
|
|
9987
9986
|
/* Constrain width on small screens so a long tooltip cannot overflow the viewport. Figma does not define a desktop max width, so the tooltip sizes to its content there. */
|
|
9988
9987
|
|
|
9989
9988
|
@media screen and (max-width: 768px) {
|
|
9990
|
-
|
|
9991
|
-
|
|
9992
|
-
|
|
9989
|
+
|
|
9990
|
+
.xpl-tooltip {
|
|
9991
|
+
max-width: var(--xpl-size-700)
|
|
9992
|
+
}
|
|
9993
9993
|
}
|
|
9994
9994
|
|
|
9995
9995
|
/* Position variants */
|
|
@@ -10233,7 +10233,9 @@ xpl-top-nav-item.xpl-toolbar[hidden] {
|
|
|
10233
10233
|
font-size: var(--xpl-font-size-title-4);
|
|
10234
10234
|
color: var(--xpl-text-subdued);
|
|
10235
10235
|
font-weight: var(--xpl-font-weight-medium);
|
|
10236
|
-
|
|
10236
|
+
|
|
10237
|
+
/* Figma: 8px gap between label and leading/trailing icon slots (matches every other context override below). */
|
|
10238
|
+
gap: var(--xpl-space-8);
|
|
10237
10239
|
box-sizing: border-box;
|
|
10238
10240
|
display: flex;
|
|
10239
10241
|
height: 100%;
|
|
@@ -10245,21 +10247,23 @@ xpl-top-nav-item.xpl-toolbar[hidden] {
|
|
|
10245
10247
|
white-space: nowrap;
|
|
10246
10248
|
}
|
|
10247
10249
|
|
|
10248
|
-
/* xpl-nav-header-menu — host + inner base before shared bar `:focus-visible` */
|
|
10250
|
+
/* xpl-nav-header-menu / xpl-top-nav-menu — host + inner base before shared bar `:focus-visible` */
|
|
10249
10251
|
|
|
10250
|
-
xpl-nav-header-menu xpl-top-nav-item.xpl-top-nav-item
|
|
10252
|
+
xpl-nav-header-menu xpl-top-nav-item.xpl-top-nav-item,
|
|
10253
|
+
xpl-top-nav-menu xpl-top-nav-item.xpl-top-nav-item {
|
|
10251
10254
|
width: 100%;
|
|
10252
10255
|
border-bottom-width: 0px
|
|
10253
10256
|
}
|
|
10254
10257
|
|
|
10255
|
-
xpl-nav-header-menu xpl-top-nav-item > .xpl-top-nav-item__inner
|
|
10258
|
+
xpl-nav-header-menu xpl-top-nav-item > .xpl-top-nav-item__inner,
|
|
10259
|
+
xpl-top-nav-menu xpl-top-nav-item > .xpl-top-nav-item__inner {
|
|
10256
10260
|
padding: var(--xpl-space-10) var(--xpl-space-12);
|
|
10257
10261
|
gap: var(--xpl-space-8);
|
|
10258
10262
|
color: var(--xpl-text-default);
|
|
10259
10263
|
justify-content: flex-start;
|
|
10260
10264
|
}
|
|
10261
10265
|
|
|
10262
|
-
/* Focus is on the inner `<a>` / `<
|
|
10266
|
+
/* Focus is on the inner `<a>` / `<button>` (tabIndex), not the host — use `:focus-visible` here (see side-nav.css). */
|
|
10263
10267
|
|
|
10264
10268
|
xpl-top-nav-item > .xpl-top-nav-item__inner:focus-visible {
|
|
10265
10269
|
outline-color: var(--xpl-border-focus);
|
|
@@ -10277,14 +10281,63 @@ xpl-top-nav-item > .xpl-top-nav-item__inner:focus-visible {
|
|
|
10277
10281
|
white-space: nowrap;
|
|
10278
10282
|
}
|
|
10279
10283
|
|
|
10284
|
+
/*
|
|
10285
|
+
* Row context only (menu rows with a `description`): wraps label + description in a column so both share the
|
|
10286
|
+
* flex-1 / min-w-0 track that `.xpl-top-nav-item__label` alone occupies in the no-description case above.
|
|
10287
|
+
* No `display` beyond `flex flex-col` here — this wrapper (unlike `__leading` / `__trailing`) is not a bare
|
|
10288
|
+
* icon slot column, it owns its own two-row layout (Figma "Label+Desc.").
|
|
10289
|
+
*/
|
|
10290
|
+
|
|
10291
|
+
.xpl-top-nav-item__label-group {
|
|
10292
|
+
gap: var(--xpl-space-0);
|
|
10293
|
+
display: flex;
|
|
10294
|
+
min-width: 0px;
|
|
10295
|
+
flex: 1 1 0%;
|
|
10296
|
+
flex-direction: column;
|
|
10297
|
+
}
|
|
10298
|
+
|
|
10299
|
+
.xpl-top-nav-item__label-group .xpl-top-nav-item__label {
|
|
10300
|
+
flex: none
|
|
10301
|
+
}
|
|
10302
|
+
|
|
10303
|
+
.xpl-top-nav-item__description {
|
|
10304
|
+
font-size: var(--xpl-font-size-callout);
|
|
10305
|
+
color: var(--xpl-text-subdued);
|
|
10306
|
+
margin: 0px;
|
|
10307
|
+
min-width: 0px;
|
|
10308
|
+
overflow: hidden;
|
|
10309
|
+
text-overflow: ellipsis;
|
|
10310
|
+
white-space: nowrap;
|
|
10311
|
+
}
|
|
10312
|
+
|
|
10313
|
+
/*
|
|
10314
|
+
* Leading / trailing icon slot columns. Deliberately no `display` here (side-nav lesson, see
|
|
10315
|
+
* `xpl-side-nav-item.tsx`): as flex items of `.xpl-top-nav-item__inner` (`display: flex`) they are
|
|
10316
|
+
* blockified automatically, and the slotted `xpl-icon` handles its own internal centering. Adding
|
|
10317
|
+
* `display: flex` / `display: grid` here mis-aligns the slotted icon's SVG.
|
|
10318
|
+
*/
|
|
10319
|
+
|
|
10320
|
+
.xpl-top-nav-item__leading,
|
|
10321
|
+
.xpl-top-nav-item__trailing {
|
|
10322
|
+
flex-shrink: 0
|
|
10323
|
+
}
|
|
10324
|
+
|
|
10280
10325
|
xpl-top-nav-item a,
|
|
10281
10326
|
xpl-top-nav-item button {
|
|
10282
10327
|
cursor: inherit;
|
|
10283
10328
|
font: inherit;
|
|
10329
|
+
|
|
10330
|
+
/* Reset the native `<button>` UA chrome (grey background, system appearance, centered text) so the button-mode
|
|
10331
|
+
* inner control renders identically to the anchor-mode one; `text-align` follows the label's own flex layout. */
|
|
10332
|
+
text-align: inherit;
|
|
10284
10333
|
margin: 0px;
|
|
10285
10334
|
display: flex;
|
|
10335
|
+
-webkit-appearance: none;
|
|
10336
|
+
-moz-appearance: none;
|
|
10337
|
+
appearance: none;
|
|
10286
10338
|
align-items: center;
|
|
10287
10339
|
border-width: 0px;
|
|
10340
|
+
background-color: transparent;
|
|
10288
10341
|
padding: 0px;
|
|
10289
10342
|
}
|
|
10290
10343
|
|
|
@@ -10320,6 +10373,17 @@ xpl-top-nav-item.xpl-top-nav-item--selected > .xpl-top-nav-item__inner {
|
|
|
10320
10373
|
font-weight: var(--xpl-font-weight-medium);
|
|
10321
10374
|
}
|
|
10322
10375
|
|
|
10376
|
+
/*
|
|
10377
|
+
* Active-descendant hook: a dropdown trigger whose panel contains an `--active` / `--selected` row (however deep)
|
|
10378
|
+
* gets the same accent as `--active` itself, so a parent product/group stays highlighted while its current child
|
|
10379
|
+
* is open elsewhere (e.g. desktop flyout, PR 2/3). Synced via `hasActiveDescendant` in `xpl-top-nav-item.tsx`.
|
|
10380
|
+
*/
|
|
10381
|
+
|
|
10382
|
+
xpl-top-nav-item.xpl-top-nav-item--has-active-descendant > .xpl-top-nav-item__inner {
|
|
10383
|
+
color: var(--xpl-text-link-default);
|
|
10384
|
+
font-weight: var(--xpl-font-weight-medium);
|
|
10385
|
+
}
|
|
10386
|
+
|
|
10323
10387
|
/* Right side username (e.g. profile trigger): same as nav header username */
|
|
10324
10388
|
|
|
10325
10389
|
.xpl-nav-right xpl-top-nav-item > .xpl-top-nav-item__inner {
|
|
@@ -10328,9 +10392,10 @@ xpl-top-nav-item.xpl-top-nav-item--selected > .xpl-top-nav-item__inner {
|
|
|
10328
10392
|
gap: var(--xpl-space-8);
|
|
10329
10393
|
}
|
|
10330
10394
|
|
|
10331
|
-
/*
|
|
10395
|
+
/* Menu list rows (`xpl-nav-header-menu` default slot, `xpl-top-nav-menu` default slot): row gap between icon and label */
|
|
10332
10396
|
|
|
10333
|
-
.xpl-nav-header-menu__slot xpl-top-nav-item > .xpl-top-nav-item__inner
|
|
10397
|
+
.xpl-nav-header-menu__slot xpl-top-nav-item > .xpl-top-nav-item__inner,
|
|
10398
|
+
.xpl-top-nav-menu xpl-top-nav-item > .xpl-top-nav-item__inner {
|
|
10334
10399
|
gap: var(--xpl-space-8);
|
|
10335
10400
|
font-size: var(--xpl-font-size-title-5);
|
|
10336
10401
|
font-weight: var(--xpl-font-weight-normal);
|
|
@@ -10393,15 +10458,19 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10393
10458
|
margin-inline-start: var(--xpl-space-8);
|
|
10394
10459
|
}
|
|
10395
10460
|
|
|
10396
|
-
/* xpl-nav-header-menu menu
|
|
10461
|
+
/* xpl-nav-header-menu / xpl-top-nav-menu row overrides after shared/brand bar item states. */
|
|
10397
10462
|
|
|
10398
10463
|
.xpl-nav-header-menu .xpl-top-nav-item:hover > .xpl-top-nav-item__inner,
|
|
10399
|
-
.xpl-nav-header-menu .xpl-top-nav-item > .xpl-top-nav-item__inner:focus-visible
|
|
10464
|
+
.xpl-nav-header-menu .xpl-top-nav-item > .xpl-top-nav-item__inner:focus-visible,
|
|
10465
|
+
.xpl-top-nav-menu .xpl-top-nav-item:hover > .xpl-top-nav-item__inner,
|
|
10466
|
+
.xpl-top-nav-menu .xpl-top-nav-item > .xpl-top-nav-item__inner:focus-visible {
|
|
10400
10467
|
background-color: var(--xpl-background-action-tertiary-hover);
|
|
10401
10468
|
}
|
|
10402
10469
|
|
|
10403
10470
|
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--active,
|
|
10404
|
-
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--selected
|
|
10471
|
+
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--selected,
|
|
10472
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--active,
|
|
10473
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--selected {
|
|
10405
10474
|
border-right-width: 1px;
|
|
10406
10475
|
border-style: solid;
|
|
10407
10476
|
|
|
@@ -10413,7 +10482,8 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10413
10482
|
background-color: var(--xpl-background-surface-transparent-0)
|
|
10414
10483
|
}
|
|
10415
10484
|
|
|
10416
|
-
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--active
|
|
10485
|
+
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--active,
|
|
10486
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--active {
|
|
10417
10487
|
color: var(--xpl-text-link-default);
|
|
10418
10488
|
}
|
|
10419
10489
|
|
|
@@ -10422,7 +10492,9 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10422
10492
|
*/
|
|
10423
10493
|
|
|
10424
10494
|
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--active > .xpl-top-nav-item__inner,
|
|
10425
|
-
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--selected > .xpl-top-nav-item__inner
|
|
10495
|
+
.xpl-nav-header-menu .xpl-top-nav-item.xpl-top-nav-item--selected > .xpl-top-nav-item__inner,
|
|
10496
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--active > .xpl-top-nav-item__inner,
|
|
10497
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--selected > .xpl-top-nav-item__inner {
|
|
10426
10498
|
background-color: var(--xpl-background-surface-information);
|
|
10427
10499
|
color: inherit;
|
|
10428
10500
|
gap: var(--xpl-space-8);
|
|
@@ -10439,6 +10511,14 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10439
10511
|
.xpl-top-nav-item.xpl-top-nav-item--active
|
|
10440
10512
|
> .xpl-top-nav-item__inner:focus-visible,
|
|
10441
10513
|
.xpl-nav-header-menu
|
|
10514
|
+
.xpl-top-nav-item.xpl-top-nav-item--selected
|
|
10515
|
+
> .xpl-top-nav-item__inner:focus-visible,
|
|
10516
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--active:hover > .xpl-top-nav-item__inner,
|
|
10517
|
+
.xpl-top-nav-menu .xpl-top-nav-item.xpl-top-nav-item--selected:hover > .xpl-top-nav-item__inner,
|
|
10518
|
+
.xpl-top-nav-menu
|
|
10519
|
+
.xpl-top-nav-item.xpl-top-nav-item--active
|
|
10520
|
+
> .xpl-top-nav-item__inner:focus-visible,
|
|
10521
|
+
.xpl-top-nav-menu
|
|
10442
10522
|
.xpl-top-nav-item.xpl-top-nav-item--selected
|
|
10443
10523
|
> .xpl-top-nav-item__inner:focus-visible {
|
|
10444
10524
|
background-color: var(--xpl-background-surface-information);
|
|
@@ -10465,18 +10545,27 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10465
10545
|
color: var(--xpl-text-strong);
|
|
10466
10546
|
}
|
|
10467
10547
|
|
|
10468
|
-
/* Non-current `xpl-nav-header-menu` rows: default text on hover/focus/active. */
|
|
10548
|
+
/* Non-current `xpl-nav-header-menu` / `xpl-top-nav-menu` rows: default text on hover/focus/active. */
|
|
10469
10549
|
|
|
10470
10550
|
.xpl-nav-header-menu
|
|
10471
10551
|
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected):hover
|
|
10472
10552
|
> .xpl-top-nav-item__inner,
|
|
10473
10553
|
.xpl-nav-header-menu
|
|
10554
|
+
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected)
|
|
10555
|
+
> .xpl-top-nav-item__inner:focus-visible,
|
|
10556
|
+
.xpl-top-nav-menu
|
|
10557
|
+
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected):hover
|
|
10558
|
+
> .xpl-top-nav-item__inner,
|
|
10559
|
+
.xpl-top-nav-menu
|
|
10474
10560
|
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected)
|
|
10475
10561
|
> .xpl-top-nav-item__inner:focus-visible {
|
|
10476
10562
|
color: var(--xpl-text-default);
|
|
10477
10563
|
}
|
|
10478
10564
|
|
|
10479
10565
|
.xpl-nav-header-menu
|
|
10566
|
+
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected):active
|
|
10567
|
+
> .xpl-top-nav-item__inner,
|
|
10568
|
+
.xpl-top-nav-menu
|
|
10480
10569
|
.xpl-top-nav-item:not(.xpl-top-nav-item--active, .xpl-top-nav-item--selected):active
|
|
10481
10570
|
> .xpl-top-nav-item__inner {
|
|
10482
10571
|
color: var(--xpl-text-default);
|
|
@@ -10523,7 +10612,9 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10523
10612
|
.xpl-top-nav-item .xpl-top-nav-item__dropdown {
|
|
10524
10613
|
background: var(--xpl-background-surface-default);
|
|
10525
10614
|
max-width: var(--xpl-top-nav-dropdown-max-width);
|
|
10526
|
-
|
|
10615
|
+
|
|
10616
|
+
/* Figma: `XPL-Dropdown Menu` panel is bound to `border/radius/small` (4px), not the 8px default. */
|
|
10617
|
+
border-radius: var(--xpl-border-radius-small);
|
|
10527
10618
|
padding: var(--xpl-space-8) var(--xpl-space-0);
|
|
10528
10619
|
z-index: var(--xpl-z-index-600);
|
|
10529
10620
|
position: absolute;
|
|
@@ -10547,6 +10638,24 @@ xpl-top-nav-item.xpl-top-nav-item--selected:active > .xpl-top-nav-item__inner {
|
|
|
10547
10638
|
display: block
|
|
10548
10639
|
}
|
|
10549
10640
|
|
|
10641
|
+
/*
|
|
10642
|
+
* `xpl-top-nav-menu` supplies its own panel chrome (background / shadow / radius — see the shared
|
|
10643
|
+
* selector below) sized to `--xpl-top-nav-panel-width`, not the generic `max-width` this wrapper uses
|
|
10644
|
+
* for arbitrary `slot="dropdown"` markup (e.g. a plain `<ul>`). Defer to it so the flyout doesn't
|
|
10645
|
+
* double up background/shadow/radius — same pattern as `xpl-popover__content:has(xpl-nav-header-menu)`
|
|
10646
|
+
* below deferring padding to the account menu.
|
|
10647
|
+
*/
|
|
10648
|
+
|
|
10649
|
+
.xpl-top-nav-item .xpl-top-nav-item__dropdown:has(xpl-top-nav-menu) {
|
|
10650
|
+
background: none;
|
|
10651
|
+
max-width: none;
|
|
10652
|
+
border-radius: var(--xpl-border-radius-none);
|
|
10653
|
+
padding: var(--xpl-space-0);
|
|
10654
|
+
--tw-shadow: 0 0 #0000;
|
|
10655
|
+
--tw-shadow-colored: 0 0 #0000;
|
|
10656
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
10657
|
+
}
|
|
10658
|
+
|
|
10550
10659
|
/* Slotted links/controls in the local dropdown panel (not `.xpl-top-nav-item__inner`). */
|
|
10551
10660
|
|
|
10552
10661
|
xpl-top-nav-item .xpl-top-nav-item__dropdown :focus-visible {
|
|
@@ -10561,6 +10670,15 @@ xpl-popover .xpl-popover__content:has(xpl-nav-header-menu) {
|
|
|
10561
10670
|
padding: 0px
|
|
10562
10671
|
}
|
|
10563
10672
|
|
|
10673
|
+
/*
|
|
10674
|
+
* Shared panel chrome (desktop flyout, mobile cascade, account menu): same width and vertical
|
|
10675
|
+
* padding for `xpl-top-nav-menu` and `xpl-nav-header-menu`. Background / shadow / radius are
|
|
10676
|
+
* declared on `xpl-top-nav-menu` only, below — `xpl-nav-header-menu` already gets identical values
|
|
10677
|
+
* from its `xpl-popover__content` ancestor (see `popover.css`), so duplicating them here would
|
|
10678
|
+
* stack two shadows at the same edge.
|
|
10679
|
+
*/
|
|
10680
|
+
|
|
10681
|
+
.xpl-top-nav-menu,
|
|
10564
10682
|
.xpl-nav-header-menu {
|
|
10565
10683
|
color: var(--xpl-text-default);
|
|
10566
10684
|
width: var(--xpl-top-nav-panel-width);
|
|
@@ -10570,6 +10688,18 @@ xpl-popover .xpl-popover__content:has(xpl-nav-header-menu) {
|
|
|
10570
10688
|
overflow: hidden;
|
|
10571
10689
|
}
|
|
10572
10690
|
|
|
10691
|
+
.xpl-top-nav-menu {
|
|
10692
|
+
background: var(--xpl-background-surface-default);
|
|
10693
|
+
|
|
10694
|
+
/* Figma: `XPL-Dropdown Menu` panel is bound to `border/radius/small` (4px), matching the
|
|
10695
|
+
* `.xpl-top-nav-item__dropdown` panel this menu renders inside — not the 8px default. */
|
|
10696
|
+
border-radius: var(--xpl-border-radius-small);
|
|
10697
|
+
gap: var(--xpl-space-4);
|
|
10698
|
+
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
10699
|
+
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
|
10700
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
10701
|
+
}
|
|
10702
|
+
|
|
10573
10703
|
.xpl-nav-header-menu__profile {
|
|
10574
10704
|
padding: var(--xpl-space-16) var(--xpl-space-0);
|
|
10575
10705
|
border-bottom: var(--xpl-border-small) solid var(--xpl-border-default);
|
|
@@ -10958,9 +11088,11 @@ xpl-popover.xpl-top-nav__user-popover > .xpl-popover > span[role="button"]:focus
|
|
|
10958
11088
|
color: var(--xpl-icon-subtle);
|
|
10959
11089
|
fill: currentcolor;
|
|
10960
11090
|
|
|
10961
|
-
/*
|
|
10962
|
-
|
|
10963
|
-
|
|
11091
|
+
/* Matches the side-nav drawer toggle glyph size; `xpl-top-nav.tsx` passes `size={32}` for SVG
|
|
11092
|
+
* output. Container (`.xpl-top-nav__nav-control`) stays >= `--xpl-size-250` (40px, see MOBILE
|
|
11093
|
+
* block) so the touch target does not shrink below WCAG target-size guidance as the glyph grows. */
|
|
11094
|
+
height: var(--xpl-size-200);
|
|
11095
|
+
width: var(--xpl-size-200);
|
|
10964
11096
|
flex-shrink: 0;
|
|
10965
11097
|
}
|
|
10966
11098
|
|
|
@@ -11229,6 +11361,99 @@ xpl-popover.xpl-top-nav__user-popover > .xpl-popover > span[role="button"]:focus
|
|
|
11229
11361
|
align-items: stretch;
|
|
11230
11362
|
}
|
|
11231
11363
|
|
|
11364
|
+
/*
|
|
11365
|
+
* Mobile cascade — Level 1 -> Level 2, in place (no second panel): tapping a `left-aside` parent's
|
|
11366
|
+
* dropdown trigger (`xpl-top-nav-item` with `slot="dropdown"` holding an `xpl-top-nav-menu`) hides
|
|
11367
|
+
* every OTHER parent group row, hides the open parent's own trigger row, and lets its
|
|
11368
|
+
* `.xpl-top-nav-item__dropdown` (already `display: block` from `--dropdown-open`) render inline
|
|
11369
|
+
* instead of as an absolute overlay — filling the drawer panel with the group's rows. The auto back
|
|
11370
|
+
* row (leading `chevron-left` + the group's `label`) is rendered by `xpl-top-nav-menu` itself
|
|
11371
|
+
* (`renderBackRow()`, gated on the same `TOP_NAV_MOBILE_MQ`); popping it calls `closeMenu()` on this
|
|
11372
|
+
* same trigger, which removes `--dropdown-open` and reverses every rule below back to Level 1.
|
|
11373
|
+
*/
|
|
11374
|
+
.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11375
|
+
.xpl-top-nav__left-primary:has(
|
|
11376
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11377
|
+
)
|
|
11378
|
+
> xpl-top-nav-item[slot="left-aside"]:not(.xpl-top-nav-item--dropdown-open) {
|
|
11379
|
+
display: none
|
|
11380
|
+
}
|
|
11381
|
+
|
|
11382
|
+
.flatpickr-day.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11383
|
+
.xpl-top-nav__left-primary:has(
|
|
11384
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11385
|
+
)
|
|
11386
|
+
> xpl-top-nav-item[slot="left-aside"]:not(.xpl-top-nav-item--dropdown-open){visibility:hidden}
|
|
11387
|
+
|
|
11388
|
+
.xpl-toolbar.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11389
|
+
.xpl-top-nav__left-primary:has(
|
|
11390
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11391
|
+
)
|
|
11392
|
+
> xpl-top-nav-item[slot="left-aside"]:not(.xpl-top-nav-item--dropdown-open) {
|
|
11393
|
+
display: none;
|
|
11394
|
+
}
|
|
11395
|
+
|
|
11396
|
+
.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11397
|
+
.xpl-top-nav__left-primary
|
|
11398
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11399
|
+
> .xpl-top-nav-item__inner {
|
|
11400
|
+
display: none
|
|
11401
|
+
}
|
|
11402
|
+
|
|
11403
|
+
.flatpickr-day.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11404
|
+
.xpl-top-nav__left-primary
|
|
11405
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11406
|
+
> .xpl-top-nav-item__inner{visibility:hidden}
|
|
11407
|
+
|
|
11408
|
+
.xpl-toolbar.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11409
|
+
.xpl-top-nav__left-primary
|
|
11410
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11411
|
+
> .xpl-top-nav-item__inner {
|
|
11412
|
+
display: none;
|
|
11413
|
+
}
|
|
11414
|
+
|
|
11415
|
+
.xpl-top-nav.xpl-top-nav--nav-control.xpl-top-nav--open
|
|
11416
|
+
.xpl-top-nav__left-primary
|
|
11417
|
+
> xpl-top-nav-item[slot="left-aside"].xpl-top-nav-item--dropdown-open
|
|
11418
|
+
> .xpl-top-nav-item__dropdown {
|
|
11419
|
+
position: static;
|
|
11420
|
+
max-width: none;
|
|
11421
|
+
display: block;
|
|
11422
|
+
width: 100%;
|
|
11423
|
+
}
|
|
11424
|
+
|
|
11425
|
+
/*
|
|
11426
|
+
* `xpl-top-nav-menu` supplies its own self-contained panel chrome for the desktop flyout (see
|
|
11427
|
+
* `top-nav.css` shared-selector block), but inside the mobile drawer it is filling a panel that
|
|
11428
|
+
* already has its OWN background / border / shadow (`.xpl-top-nav__left-primary` above) — suppress
|
|
11429
|
+
* the menu's chrome here so Level 2 reads as one continuous panel, not a nested card.
|
|
11430
|
+
*/
|
|
11431
|
+
.xpl-top-nav__left-primary xpl-top-nav-menu {
|
|
11432
|
+
background: none;
|
|
11433
|
+
width: 100%;
|
|
11434
|
+
border-radius: var(--xpl-border-radius-none);
|
|
11435
|
+
padding: var(--xpl-space-0);
|
|
11436
|
+
--tw-shadow: 0 0 #0000;
|
|
11437
|
+
--tw-shadow-colored: 0 0 #0000;
|
|
11438
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
11439
|
+
}
|
|
11440
|
+
|
|
11441
|
+
/*
|
|
11442
|
+
* Row sizing (mobile — Figma "Sm Screen" menu-item spec): 48px row via title-3 (20px) label height,
|
|
11443
|
+
* 24px icons. Applies to the mobile cascade's Level 2 rows (including the auto back row) and,
|
|
11444
|
+
* consistently, the account menu's rows on the same narrow viewports.
|
|
11445
|
+
*/
|
|
11446
|
+
.xpl-top-nav-menu xpl-top-nav-item > .xpl-top-nav-item__inner,
|
|
11447
|
+
.xpl-nav-header-menu xpl-top-nav-item > .xpl-top-nav-item__inner {
|
|
11448
|
+
font-size: var(--xpl-font-size-title-3);
|
|
11449
|
+
}
|
|
11450
|
+
|
|
11451
|
+
.xpl-top-nav-menu xpl-top-nav-item xpl-icon,
|
|
11452
|
+
.xpl-nav-header-menu xpl-top-nav-item xpl-icon {
|
|
11453
|
+
width: var(--xpl-size-150);
|
|
11454
|
+
height: var(--xpl-size-150);
|
|
11455
|
+
}
|
|
11456
|
+
|
|
11232
11457
|
/*
|
|
11233
11458
|
* Figma (mobile): account menu rows — same hover surface as drawer; beats global `tertiary-hover` for narrow viewports.
|
|
11234
11459
|
*/
|