le-kit 0.2.2 → 0.2.4
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/dist/cjs/{index-pT2cVC5w.js → index-CNRmviSz.js} +4 -2
- package/dist/cjs/{index-pT2cVC5w.js.map → index-CNRmviSz.js.map} +1 -1
- package/dist/cjs/index.cjs.js +3 -2
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/le-box.cjs.entry.js +2 -2
- package/dist/cjs/le-button_13.cjs.entry.js +2 -2
- package/dist/cjs/le-card.cjs.entry.js +2 -2
- package/dist/cjs/le-combobox.cjs.entry.js +1 -1
- package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
- package/dist/cjs/le-icon.cjs.entry.js +4 -2
- package/dist/cjs/le-kit.cjs.js +2 -2
- package/dist/cjs/le-multiselect.cjs.entry.js +1 -1
- package/dist/cjs/le-navigation.cjs.entry.js +16 -11
- package/dist/cjs/le-number-input.cjs.entry.js +2 -2
- package/dist/cjs/le-round-progress.cjs.entry.js +1 -1
- package/dist/cjs/le-segmented-control.cjs.entry.js +1 -1
- package/dist/cjs/le-stack.cjs.entry.js +2 -2
- package/dist/cjs/le-tab-bar.cjs.entry.js +1 -1
- package/dist/cjs/le-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/le-tab.cjs.entry.js +2 -2
- package/dist/cjs/le-tabs.cjs.entry.js +2 -2
- package/dist/cjs/le-tag.cjs.entry.js +1 -1
- package/dist/cjs/le-text.cjs.entry.js +2 -2
- package/dist/cjs/le-turntable.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{utils-ByTskwtC.js → utils-CZG22_vQ.js} +3 -3
- package/dist/cjs/{utils-ByTskwtC.js.map → utils-CZG22_vQ.js.map} +1 -1
- package/dist/collection/components/le-icon/le-icon.js +3 -1
- package/dist/collection/components/le-icon/le-icon.js.map +1 -1
- package/dist/collection/components/le-navigation/le-navigation.css +9 -1
- package/dist/collection/components/le-navigation/le-navigation.js +18 -13
- package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
- package/dist/collection/dist/components/assets/custom-elements.json +942 -942
- package/dist/collection/index.js +2 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/components/assets/custom-elements.json +942 -942
- package/dist/components/le-icon2.js +3 -1
- package/dist/components/le-icon2.js.map +1 -1
- package/dist/components/le-navigation.js +15 -10
- package/dist/components/le-navigation.js.map +1 -1
- package/dist/docs.json +32 -24
- package/dist/esm/{index-CNv6tzAt.js → index-BqH-zsXr.js} +4 -3
- package/dist/esm/{index-CNv6tzAt.js.map → index-BqH-zsXr.js.map} +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/le-box.entry.js +2 -2
- package/dist/esm/le-button_13.entry.js +2 -2
- package/dist/esm/le-card.entry.js +2 -2
- package/dist/esm/le-combobox.entry.js +1 -1
- package/dist/esm/le-header-placeholder.entry.js +1 -1
- package/dist/esm/le-icon.entry.js +4 -2
- package/dist/esm/le-icon.entry.js.map +1 -1
- package/dist/esm/le-kit.js +3 -3
- package/dist/esm/le-multiselect.entry.js +1 -1
- package/dist/esm/le-navigation.entry.js +16 -11
- package/dist/esm/le-navigation.entry.js.map +1 -1
- package/dist/esm/le-number-input.entry.js +2 -2
- package/dist/esm/le-round-progress.entry.js +1 -1
- package/dist/esm/le-segmented-control.entry.js +1 -1
- package/dist/esm/le-stack.entry.js +2 -2
- package/dist/esm/le-tab-bar.entry.js +1 -1
- package/dist/esm/le-tab-panel.entry.js +1 -1
- package/dist/esm/le-tab.entry.js +2 -2
- package/dist/esm/le-tabs.entry.js +2 -2
- package/dist/esm/le-tag.entry.js +1 -1
- package/dist/esm/le-text.entry.js +2 -2
- package/dist/esm/le-turntable.entry.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{utils-BzC2tvPX.js → utils-CdBk0DdF.js} +3 -3
- package/dist/esm/{utils-BzC2tvPX.js.map → utils-CdBk0DdF.js.map} +1 -1
- package/dist/le-kit/dist/components/assets/custom-elements.json +942 -942
- package/dist/le-kit/index.esm.js +1 -1
- package/dist/le-kit/le-kit.esm.js +1 -1
- package/dist/le-kit/{p-e24d3e33.entry.js → p-00cd6dc4.entry.js} +2 -2
- package/dist/le-kit/p-02699578.entry.js +2 -0
- package/dist/le-kit/p-02699578.entry.js.map +1 -0
- package/dist/le-kit/{p-9a3bdbe1.entry.js → p-0aab5747.entry.js} +2 -2
- package/dist/le-kit/{p-a8963634.entry.js → p-0b5ab6ec.entry.js} +2 -2
- package/dist/le-kit/{p-f4f2c3e7.entry.js → p-17ace252.entry.js} +2 -2
- package/dist/le-kit/{p-8a78110f.entry.js → p-2db32332.entry.js} +2 -2
- package/dist/le-kit/{p-df9389f0.entry.js → p-348a4e39.entry.js} +2 -2
- package/dist/le-kit/{p-aaec0169.entry.js → p-43f87acb.entry.js} +2 -2
- package/dist/le-kit/{p-b1dc7e06.entry.js → p-509caf7f.entry.js} +2 -2
- package/dist/le-kit/{p-0ac4397c.entry.js → p-65fa68c3.entry.js} +2 -2
- package/dist/le-kit/{p-58120921.entry.js → p-76d03b1e.entry.js} +2 -2
- package/dist/le-kit/{p-de5638c9.entry.js → p-8907cf95.entry.js} +2 -2
- package/dist/le-kit/{p-511fbb63.entry.js → p-91421993.entry.js} +2 -2
- package/dist/le-kit/{p-5ceb06d8.entry.js → p-995f6de8.entry.js} +2 -2
- package/dist/le-kit/{p-a0d2c580.entry.js → p-9f409d74.entry.js} +2 -2
- package/dist/le-kit/p-BqH-zsXr.js +3 -0
- package/dist/le-kit/{p-CNv6tzAt.js.map → p-BqH-zsXr.js.map} +1 -1
- package/dist/le-kit/{p-W4FbLlut.js → p-VG5nXRzT.js} +2 -2
- package/dist/le-kit/{p-W4FbLlut.js.map → p-VG5nXRzT.js.map} +1 -1
- package/dist/le-kit/p-a1c26c46.entry.js +2 -0
- package/dist/le-kit/p-a1c26c46.entry.js.map +1 -0
- package/dist/le-kit/{p-25a29e69.entry.js → p-a5e21c8e.entry.js} +2 -2
- package/dist/le-kit/{p-ec20e438.entry.js → p-b4dcb4df.entry.js} +2 -2
- package/dist/le-kit/p-ccf4c548.entry.js +2 -0
- package/dist/types/components/le-navigation/le-navigation.d.ts +2 -2
- package/dist/types/components.d.ts +10 -10
- package/dist/types/index.d.ts +2 -1
- package/package.json +2 -2
- package/dist/le-kit/dist/components/themes/base.css +0 -89
- package/dist/le-kit/dist/components/themes/dark.css +0 -103
- package/dist/le-kit/dist/components/themes/default.css +0 -111
- package/dist/le-kit/dist/components/themes/gradient.css +0 -103
- package/dist/le-kit/dist/components/themes/index.css +0 -76
- package/dist/le-kit/dist/components/themes/minimal.css +0 -103
- package/dist/le-kit/dist/components/themes/warm.css +0 -103
- package/dist/le-kit/p-2ec60692.entry.js +0 -2
- package/dist/le-kit/p-CNv6tzAt.js +0 -3
- package/dist/le-kit/p-bb160082.entry.js +0 -2
- package/dist/le-kit/p-bb160082.entry.js.map +0 -1
- package/dist/le-kit/p-c08fcb00.entry.js +0 -2
- package/dist/le-kit/p-c08fcb00.entry.js.map +0 -1
- /package/dist/collection/dist/{components/themes → themes}/base.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/dark.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/default.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/gradient.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/index.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/minimal.css +0 -0
- /package/dist/collection/dist/{components/themes → themes}/warm.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/base.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/dark.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/default.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/gradient.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/index.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/minimal.css +0 -0
- /package/dist/{components → le-kit/dist}/themes/warm.css +0 -0
- /package/dist/le-kit/{p-e24d3e33.entry.js.map → p-00cd6dc4.entry.js.map} +0 -0
- /package/dist/le-kit/{p-9a3bdbe1.entry.js.map → p-0aab5747.entry.js.map} +0 -0
- /package/dist/le-kit/{p-a8963634.entry.js.map → p-0b5ab6ec.entry.js.map} +0 -0
- /package/dist/le-kit/{p-f4f2c3e7.entry.js.map → p-17ace252.entry.js.map} +0 -0
- /package/dist/le-kit/{p-8a78110f.entry.js.map → p-2db32332.entry.js.map} +0 -0
- /package/dist/le-kit/{p-df9389f0.entry.js.map → p-348a4e39.entry.js.map} +0 -0
- /package/dist/le-kit/{p-aaec0169.entry.js.map → p-43f87acb.entry.js.map} +0 -0
- /package/dist/le-kit/{p-b1dc7e06.entry.js.map → p-509caf7f.entry.js.map} +0 -0
- /package/dist/le-kit/{p-0ac4397c.entry.js.map → p-65fa68c3.entry.js.map} +0 -0
- /package/dist/le-kit/{p-58120921.entry.js.map → p-76d03b1e.entry.js.map} +0 -0
- /package/dist/le-kit/{p-de5638c9.entry.js.map → p-8907cf95.entry.js.map} +0 -0
- /package/dist/le-kit/{p-511fbb63.entry.js.map → p-91421993.entry.js.map} +0 -0
- /package/dist/le-kit/{p-5ceb06d8.entry.js.map → p-995f6de8.entry.js.map} +0 -0
- /package/dist/le-kit/{p-a0d2c580.entry.js.map → p-9f409d74.entry.js.map} +0 -0
- /package/dist/le-kit/{p-25a29e69.entry.js.map → p-a5e21c8e.entry.js.map} +0 -0
- /package/dist/le-kit/{p-ec20e438.entry.js.map → p-b4dcb4df.entry.js.map} +0 -0
- /package/dist/le-kit/{p-2ec60692.entry.js.map → p-ccf4c548.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils-
|
|
1
|
+
{"version":3,"file":"utils-CZG22_vQ.js","sources":["src/utils/utils.ts"],"sourcesContent":["/**\n * Utility functions for le-kit components\n */\n\nimport { getMode } from '../global/app';\n\n/**\n * Generates a unique ID for component instances\n */\nexport function generateId(prefix: string = 'le'): string {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Parses a comma-separated string into an array\n */\nexport function parseCommaSeparated(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(',')\n .map(s => s.trim())\n .filter(Boolean);\n}\n\n/**\n * Checks if a slot has content\n */\nexport function slotHasContent(el: HTMLElement, slotName: string = ''): boolean {\n const selector = slotName ? `[slot=\"${slotName}\"]` : ':not([slot])';\n return el.querySelector(selector) !== null;\n}\n\n/**\n * Sets up a MutationObserver to track mode changes on ancestor elements.\n * Returns a cleanup function to disconnect the observer.\n * \n * If the element or any ancestor has an explicit `mode` attribute, that creates\n * a \"mode boundary\" - the mode is determined from that point, not from further up.\n * This allows components like le-popover to force default mode for their children.\n * \n * @param el - The component's host element\n * @param callback - Function to call when mode changes, receives the new mode\n * @returns Cleanup function to disconnect the observer\n * \n * @example\n * ```tsx\n * export class MyComponent {\n * @Element() el: HTMLElement;\n * @State() adminMode: boolean = false;\n * private disconnectModeObserver?: () => void;\n * \n * connectedCallback() {\n * this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {\n * this.adminMode = mode === 'admin';\n * });\n * }\n * \n * disconnectedCallback() {\n * this.disconnectModeObserver?.();\n * }\n * }\n * ```\n */\nexport function observeModeChanges(\n el: HTMLElement,\n callback: (mode: string) => void\n): () => void {\n // Call immediately with current mode\n callback(getMode(el));\n\n // Set up observer for mode attribute changes\n const observer = new MutationObserver(() => {\n callback(getMode(el));\n });\n\n // Observe the element itself (for mode boundary changes)\n observer.observe(el, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n\n // Observe document root\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n\n // Traverse up, crossing shadow boundaries, and observe each element\n let current: Node | null = el;\n while (current) {\n if (current instanceof Element && current.parentElement) {\n current = current.parentElement;\n observer.observe(current, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n // If this element has an explicit mode, it's a boundary\n if ((current as Element).hasAttribute('mode')) {\n break;\n }\n } else {\n // Check if we're in a shadow root\n const root = current.getRootNode();\n if (root instanceof ShadowRoot) {\n // Cross the shadow boundary and observe the host\n current = root.host;\n observer.observe(current, {\n attributes: true,\n attributeFilter: ['mode'],\n });\n // If the host has an explicit mode, it's a boundary\n if ((current as Element).hasAttribute('mode')) {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n // Return cleanup function\n return () => observer.disconnect();\n}\n\n/**\n * Combines multiple class names into a single string, filtering out falsy values.\n * \n * @param classes - arguments of class names, undefined, arrays, objects with boolean values and nested combinations of these\n * @returns Combined class names string\n */\nexport function classnames(...classes: any[]): string {\n const result: string[] = [];\n\n classes.forEach(cls => {\n if (!cls) return;\n\n if (typeof cls === 'string') {\n result.push(cls);\n } else if (Array.isArray(cls)) {\n result.push(classnames(...cls));\n } else if (typeof cls === 'object') {\n Object.entries(cls).forEach(([key, value]) => {\n if (value) {\n result.push(key);\n }\n });\n }\n });\n\n return result.join(' ');\n}\n"],"names":["getMode"],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ async function fetchIcon({ name }) {
|
|
|
10
10
|
return iconCache[name];
|
|
11
11
|
}
|
|
12
12
|
if (!requestCache[name]) {
|
|
13
|
+
console.log(`Fetching icon "${name}"`, getAssetPath(`./assets/icons/${name}.json`));
|
|
13
14
|
requestCache[name] = fetch(getAssetPath(`./assets/icons/${name}.json`))
|
|
14
15
|
.then(resp => resp.json())
|
|
15
16
|
.catch(() => {
|
|
@@ -93,7 +94,7 @@ export class LeIcon {
|
|
|
93
94
|
return svgElements;
|
|
94
95
|
}
|
|
95
96
|
render() {
|
|
96
|
-
return (h("svg", { key: '
|
|
97
|
+
return (h("svg", { key: '591fdb4f5bd1a8621886ff16b01e97e3d6b83a84', xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", height: this.size || 16, width: this.size || 16, viewBox: this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}` }, this.renderSVGContent(this.iconData?.children)));
|
|
97
98
|
}
|
|
98
99
|
static get is() { return "le-icon"; }
|
|
99
100
|
static get encapsulation() { return "shadow"; }
|
|
@@ -107,6 +108,7 @@ export class LeIcon {
|
|
|
107
108
|
"$": ["le-icon.css"]
|
|
108
109
|
};
|
|
109
110
|
}
|
|
111
|
+
static get assetsDirs() { return ["assets/icons"]; }
|
|
110
112
|
static get properties() {
|
|
111
113
|
return {
|
|
112
114
|
"name": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-icon.js","sourceRoot":"","sources":["../../../src/components/le-icon/le-icon.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE/F,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,KAAK,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE;IAC/B,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,IAAI,OAAO,CAAC,CAAC;aACpE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aACzB,KAAK,CAAC,GAAG,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,uBAAuB,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvB,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"le-icon.js","sourceRoot":"","sources":["../../../src/components/le-icon/le-icon.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Based on the script from Paul Andreson's article:\n * https://paulcpederson.com/articles/stencil-icons/\n */\nimport { Build, Component, Element, getAssetPath, h, Prop, State, Watch } from '@stencil/core';\n\nconst iconCache = {};\nconst requestCache = {};\n\nasync function fetchIcon({ name }): Promise<string> {\n if (iconCache[name]) {\n return iconCache[name];\n }\n if (!requestCache[name]) {\n console.log(`Fetching icon \"${name}\"`, getAssetPath(`./assets/icons/${name}.json`));\n requestCache[name] = fetch(getAssetPath(`./assets/icons/${name}.json`))\n .then(resp => resp.json())\n .catch(() => {\n console.error(`\"${name}\" is not a valid name`);\n return '';\n });\n }\n\n const path = await requestCache[name];\n iconCache[name] = path;\n\n return path;\n}\n\n@Component({\n tag: 'le-icon',\n styleUrl: 'le-icon.css',\n shadow: true,\n assetsDirs: ['assets/icons'],\n})\nexport class LeIcon {\n @Element() el: HTMLElement;\n\n /**\n * Name of the icon to display. Corresponds to a JSON file in the assets folder.\n * For example, \"search\" will load the \"search.json\" file.\n */\n @Prop() name: string = null;\n\n /**\n * Size of the icon in pixels. Default is 16.\n */\n @Prop() size: number = 16;\n\n @State() private iconData: any = null;\n\n @State() private visible = false;\n\n @Watch('name') private async loadIconData(): Promise<void> {\n const { name, visible } = this;\n\n if (!Build.isBrowser || !name || !visible) {\n return;\n }\n\n this.iconData = await fetchIcon({ name });\n }\n\n private intersectionObserver: IntersectionObserver;\n\n connectedCallback(): void {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconData();\n });\n }\n\n disconnectedCallback(): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n async componentWillLoad(): Promise<void> {\n this.loadIconData();\n }\n\n private waitUntilVisible(callback: () => void): void {\n if (\n !Build.isBrowser ||\n typeof window === 'undefined' ||\n !(window as any).IntersectionObserver\n ) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n callback();\n }\n });\n },\n { rootMargin: '50px' },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n\n /**\n * Renders the SVG content out of a JSON data in a format:\n * { \"viewBox\": \"...\", children: [{ \"tag\": \"g\", \"\"children\": [ ... ], ...attrs }, ...] }\n *\n * @returns JSX.Element | null\n */\n private renderSVGContent(children?: any[]) {\n if (!children || children.length === 0) {\n return null;\n }\n\n const createElement = node => {\n const { tag, children, ...attrs } = node;\n return h(tag, attrs, children ? children.map(createElement) : null);\n };\n\n const svgElements = children.map(createElement);\n return svgElements;\n }\n\n render() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n height={this.size || 16}\n width={this.size || 16}\n viewBox={this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}`}\n >\n {this.renderSVGContent(this.iconData?.children)}\n </svg>\n );\n }\n}\n"]}
|
|
@@ -183,10 +183,18 @@
|
|
|
183
183
|
gap: var(--le-spacing-2);
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
.nav-horizontal.
|
|
186
|
+
.nav-horizontal.align-end {
|
|
187
187
|
justify-content: flex-end;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
+
.nav-horizontal.align-center {
|
|
191
|
+
justify-content: center;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.nav-horizontal.align-space-between {
|
|
195
|
+
justify-content: space-between;
|
|
196
|
+
}
|
|
197
|
+
|
|
190
198
|
.nav-horizontal-shell {
|
|
191
199
|
position: relative;
|
|
192
200
|
}
|
|
@@ -41,9 +41,9 @@ export class LeNavigation {
|
|
|
41
41
|
*/
|
|
42
42
|
minVisibleItemsForMore = 2;
|
|
43
43
|
/**
|
|
44
|
-
* Alignment of the
|
|
44
|
+
* Alignment of the menu items within the navigation bar.
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
align = 'start';
|
|
47
47
|
/**
|
|
48
48
|
* Active url for automatic selection.
|
|
49
49
|
*/
|
|
@@ -257,7 +257,7 @@ export class LeNavigation {
|
|
|
257
257
|
computeOverflow() {
|
|
258
258
|
// Only applies to horizontal, non-wrapping navs.
|
|
259
259
|
if (this.orientation !== 'horizontal' || this.wrap) {
|
|
260
|
-
if (this.overflowIds.length)
|
|
260
|
+
if (!this.overflowIds || this.overflowIds.length)
|
|
261
261
|
this.overflowIds = [];
|
|
262
262
|
if (this.hamburgerActive)
|
|
263
263
|
this.hamburgerActive = false;
|
|
@@ -277,7 +277,7 @@ export class LeNavigation {
|
|
|
277
277
|
if (shouldHamburger !== this.hamburgerActive) {
|
|
278
278
|
this.hamburgerActive = shouldHamburger;
|
|
279
279
|
}
|
|
280
|
-
if (this.overflowIds.length)
|
|
280
|
+
if (!this.overflowIds || this.overflowIds.length)
|
|
281
281
|
this.overflowIds = [];
|
|
282
282
|
if (this.fallbackHamburger)
|
|
283
283
|
this.fallbackHamburger = false;
|
|
@@ -300,7 +300,7 @@ export class LeNavigation {
|
|
|
300
300
|
this.fallbackHamburger = shouldFallback;
|
|
301
301
|
}
|
|
302
302
|
const nextOverflow = shouldFallback ? [] : computedOverflow;
|
|
303
|
-
const same = nextOverflow.length === this.overflowIds
|
|
303
|
+
const same = nextOverflow.length === this.overflowIds?.length &&
|
|
304
304
|
nextOverflow.every((v, i) => v === this.overflowIds[i]);
|
|
305
305
|
if (!same) {
|
|
306
306
|
this.overflowIds = nextOverflow;
|
|
@@ -508,7 +508,9 @@ export class LeNavigation {
|
|
|
508
508
|
} }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
|
|
509
509
|
this.measureMoreEl = el;
|
|
510
510
|
} }, h("button", { type: "button", class: "overflow-trigger" }, "More"))), h("div", { class: classnames('nav-horizontal', {
|
|
511
|
-
'
|
|
511
|
+
'align-end': this.align === 'end',
|
|
512
|
+
'align-center': this.align === 'center',
|
|
513
|
+
'align-space-between': this.align === 'space-between',
|
|
512
514
|
}), ref: el => {
|
|
513
515
|
this.navContainerEl = el;
|
|
514
516
|
this.setupResizeObserver();
|
|
@@ -527,8 +529,11 @@ export class LeNavigation {
|
|
|
527
529
|
} }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
|
|
528
530
|
this.measureMoreEl = el;
|
|
529
531
|
} }, h("button", { type: "button", class: "overflow-trigger" }, h("le-icon", { name: "ellipsis-horizontal" })))), h("div", { class: classnames('nav-horizontal', {
|
|
530
|
-
wrap: this.wrap,
|
|
531
|
-
nowrap: !this.wrap,
|
|
532
|
+
'wrap': this.wrap,
|
|
533
|
+
'nowrap': !this.wrap,
|
|
534
|
+
'align-end': this.align === 'end',
|
|
535
|
+
'align-center': this.align === 'center',
|
|
536
|
+
'align-space-between': this.align === 'space-between',
|
|
532
537
|
}), ref: el => {
|
|
533
538
|
this.navContainerEl = el;
|
|
534
539
|
this.setupResizeObserver();
|
|
@@ -687,24 +692,24 @@ export class LeNavigation {
|
|
|
687
692
|
"attribute": "min-visible-items-for-more",
|
|
688
693
|
"defaultValue": "2"
|
|
689
694
|
},
|
|
690
|
-
"
|
|
695
|
+
"align": {
|
|
691
696
|
"type": "string",
|
|
692
697
|
"mutable": false,
|
|
693
698
|
"complexType": {
|
|
694
|
-
"original": "'start' | 'end'",
|
|
695
|
-
"resolved": "\"end\" | \"start\"",
|
|
699
|
+
"original": "'start' | 'end' | 'center' | 'space-between'",
|
|
700
|
+
"resolved": "\"center\" | \"end\" | \"space-between\" | \"start\"",
|
|
696
701
|
"references": {}
|
|
697
702
|
},
|
|
698
703
|
"required": false,
|
|
699
704
|
"optional": false,
|
|
700
705
|
"docs": {
|
|
701
706
|
"tags": [],
|
|
702
|
-
"text": "Alignment of the
|
|
707
|
+
"text": "Alignment of the menu items within the navigation bar."
|
|
703
708
|
},
|
|
704
709
|
"getter": false,
|
|
705
710
|
"setter": false,
|
|
706
711
|
"reflect": true,
|
|
707
|
-
"attribute": "
|
|
712
|
+
"attribute": "align",
|
|
708
713
|
"defaultValue": "'start'"
|
|
709
714
|
},
|
|
710
715
|
"activeUrl": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-navigation.js","sourceRoot":"","sources":["../../../src/components/le-navigation/le-navigation.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the hamburger trigger within the row.\n */\n @Prop({ reflect: true }) hamburgerAlign: 'start' | 'end' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n @State() private overflowIds: string[] = [];\n\n @State() private hamburgerActive: boolean = false;\n\n @State() private fallbackHamburger: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n private navContainerEl?: HTMLElement;\n\n private measureEl?: HTMLElement;\n private measureMoreEl?: HTMLElement;\n\n private topItemEls: Map<string, HTMLElement> = new Map();\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private moreTriggerEl?: HTMLElement;\n\n private hamburgerPopoverEl?: HTMLLePopoverElement;\n private morePopoverEl?: HTMLLePopoverElement;\n\n private resizeObserver?: ResizeObserver;\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n this.scheduleOverflowRecalc();\n }\n\n componentDidLoad() {\n this.setupResizeObserver();\n this.scheduleOverflowRecalc();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n }\n\n componentDidRender() {\n // In case refs change after render.\n this.scheduleOverflowRecalc();\n }\n\n private setupResizeObserver() {\n this.resizeObserver?.disconnect();\n\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => this.computeOverflow());\n this.observeContainer(this.navContainerEl);\n }\n\n private observeContainer(el?: HTMLElement) {\n if (!this.resizeObserver) return;\n this.resizeObserver.disconnect();\n if (el) this.resizeObserver.observe(el);\n }\n\n private scheduleOverflowRecalc() {\n // Avoid work for vertical layout.\n if (this.orientation !== 'horizontal') return;\n\n // Ensure it runs after layout.\n requestAnimationFrame(() => this.computeOverflow());\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private getTopLevelIds(items: LeOption[]): string[] {\n return items.map((item, index) => this.getItemId(item, String(index)));\n }\n\n private computeOverflow() {\n // Only applies to horizontal, non-wrapping navs.\n if (this.orientation !== 'horizontal' || this.wrap) {\n if (this.overflowIds.length) this.overflowIds = [];\n if (this.hamburgerActive) this.hamburgerActive = false;\n if (this.fallbackHamburger) this.fallbackHamburger = false;\n return;\n }\n\n const container = this.navContainerEl;\n if (!container) return;\n\n const topIds = this.getTopLevelIds(this.parsedItems);\n const widths = topIds.map(id => this.topItemEls.get(id)?.getBoundingClientRect().width ?? 0);\n\n const totalWidth = widths.reduce((a, b) => a + b, 0);\n const availableWidth = container.getBoundingClientRect().width;\n\n if (this.overflowMode === 'hamburger') {\n const shouldHamburger = totalWidth > availableWidth;\n if (shouldHamburger !== this.hamburgerActive) {\n this.hamburgerActive = shouldHamburger;\n }\n if (this.overflowIds.length) this.overflowIds = [];\n if (this.fallbackHamburger) this.fallbackHamburger = false;\n return;\n }\n\n // overflowMode === 'more'\n if (this.hamburgerActive) this.hamburgerActive = false;\n\n const computedOverflow = this.computeOverflowMoreByWrap(availableWidth);\n if (!computedOverflow) return;\n\n // Fallback to hamburger when \"More\" would leave too few items visible\n // or when the trigger itself cannot fit the row.\n const visibleCount = this.parsedItems.length - computedOverflow.length;\n const moreWidth = this.moreTriggerEl?.getBoundingClientRect().width ?? 0;\n\n const minVisible = Math.max(0, Number(this.minVisibleItemsForMore) || 0);\n const shouldFallback =\n (computedOverflow.length > 0 && visibleCount < minVisible) ||\n (moreWidth > 0 && moreWidth > availableWidth);\n\n if (shouldFallback !== this.fallbackHamburger) {\n this.fallbackHamburger = shouldFallback;\n }\n\n const nextOverflow = shouldFallback ? [] : computedOverflow;\n const same =\n nextOverflow.length === this.overflowIds.length &&\n nextOverflow.every((v, i) => v === this.overflowIds[i]);\n if (!same) {\n this.overflowIds = nextOverflow;\n }\n }\n\n private computeOverflowMoreByWrap(availableWidth: number): string[] | null {\n const container = this.navContainerEl;\n const measure = this.measureEl;\n const measureMore = this.measureMoreEl;\n const items = this.parsedItems;\n\n if (!container || !measure) return null;\n\n // Ensure measurement container matches visible container width.\n measure.style.width = `${availableWidth}px`;\n\n // Keep the measured \"More\" width aligned with the real trigger width (supports slotted content).\n const realMoreWidth = this.moreTriggerEl?.getBoundingClientRect().width;\n if (measureMore && realMoreWidth && realMoreWidth > 0) {\n const btn = measureMore.querySelector<HTMLElement>('button');\n if (btn) {\n btn.style.width = `${realMoreWidth}px`;\n }\n }\n\n const allIds = this.getTopLevelIds(items);\n const itemEls = allIds\n .map(id => measure.querySelector<HTMLElement>(`[data-nav-id=\"${CSS.escape(id)}\"]`))\n .filter((el): el is HTMLElement => !!el);\n\n // Reset measurement visibility.\n itemEls.forEach(el => {\n el.style.display = '';\n });\n if (measureMore) {\n measureMore.style.display = 'none';\n }\n\n if (itemEls.length === 0) {\n return [];\n }\n\n const firstRowTop = Math.min(...itemEls.map(el => el.offsetTop));\n const overflowSet = new Set<string>();\n\n // Pass 1: detect which items fall onto rows > 1 (without \"More\" in flow).\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (el.offsetTop > firstRowTop) overflowSet.add(id);\n });\n\n if (overflowSet.size === 0) {\n return [];\n }\n\n // Pass 2: show \"More\" and iteratively move items into overflow until \"More\" fits on row 1.\n if (measureMore) {\n measureMore.style.display = '';\n }\n\n // Hide currently overflowing items.\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (overflowSet.has(id)) el.style.display = 'none';\n });\n\n const getVisibleItemEls = () => itemEls.filter(el => el.style.display !== 'none');\n\n while (measureMore) {\n const visible = getVisibleItemEls();\n const rowTop = visible.length ? Math.min(...visible.map(el => el.offsetTop)) : 0;\n\n if (measureMore.offsetTop <= rowTop) break;\n if (visible.length === 0) break;\n\n // Remove one last visible item and retry.\n const last = visible[visible.length - 1];\n const lastId = last.getAttribute('data-nav-id');\n if (!lastId) break;\n\n last.style.display = 'none';\n overflowSet.add(lastId);\n }\n\n const overflowIds = allIds.filter(id => overflowSet.has(id));\n\n return overflowIds;\n }\n\n private renderHorizontalMeasureItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n const setRef = (el?: HTMLElement) => {\n if (el) this.topItemEls.set(id, el);\n };\n\n if (!hasChildren) {\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </span>\n </div>\n );\n }\n\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-trigger\">\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n </span>\n <span class=\"h-submenu-toggle\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </span>\n </div>\n );\n }\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\">\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\">\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n\n const overflowSet = new Set(this.overflowIds);\n\n const overflowItems: LeOption[] = [];\n items.forEach((item, index) => {\n const id = this.getItemId(item, String(index));\n if (!this.wrap && this.overflowMode === 'more' && overflowSet.has(id)) {\n overflowItems.push(item);\n }\n });\n\n const showHamburger =\n !this.wrap &&\n ((this.overflowMode === 'hamburger' && this.hamburgerActive) ||\n (this.overflowMode === 'more' && this.fallbackHamburger));\n\n // Hamburger mode: show a single trigger if anything overflows (or when forced for \"more\").\n if (showHamburger) {\n return (\n <div class=\"nav-horizontal-shell\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n More\n </button>\n </div>\n </div>\n\n <div\n class={classnames('nav-horizontal', {\n 'hamburger-align-end': this.hamburgerAlign === 'end',\n })}\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n <le-popover\n ref={el => {\n this.hamburgerPopoverEl = el as HTMLLePopoverElement;\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part=\"hamburger-trigger\"\n aria-label=\"Open menu\"\n >\n <slot name=\"hamburger-trigger\">\n <le-icon name=\"hamburger\" />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n closePopover: () => this.hamburgerPopoverEl?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n </div>\n );\n }\n\n const showMore = !this.wrap && this.overflowMode === 'more' && overflowItems.length > 0;\n\n return (\n <div class=\"nav-horizontal-shell\" role=\"menubar\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n <le-icon name=\"ellipsis-horizontal\" />\n </button>\n </div>\n </div>\n\n <div\n class={classnames('nav-horizontal', {\n wrap: this.wrap,\n nowrap: !this.wrap,\n })}\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n {items.map((item, index) => {\n const id = this.getItemId(item, String(index));\n const isOverflow = !this.wrap && this.overflowMode === 'more' && overflowSet.has(id);\n if (isOverflow) return null;\n return this.renderHorizontalItem(item, index);\n })}\n\n {/* Render a hidden trigger for measurement when not visible */}\n <div\n class={classnames('more-trigger-wrap', {\n 'is-visible': showMore,\n 'is-measure': !showMore,\n })}\n >\n <le-popover\n ref={el => {\n this.morePopoverEl = el as HTMLLePopoverElement;\n }}\n mode=\"default\"\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n showClose={false}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part=\"more-trigger\"\n aria-label=\"More\"\n ref={el => {\n if (el) this.moreTriggerEl = el as HTMLElement;\n }}\n >\n <slot name=\"more-trigger\">\n <le-icon name=\"ellipsis-horizontal\" />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(overflowItems, {\n depth: 0,\n pathPrefix: '',\n closePopover: () => this.morePopoverEl?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"le-navigation.js","sourceRoot":"","sources":["../../../src/components/le-navigation/le-navigation.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n @State() private overflowIds: string[] = [];\n\n @State() private hamburgerActive: boolean = false;\n\n @State() private fallbackHamburger: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n private navContainerEl?: HTMLElement;\n\n private measureEl?: HTMLElement;\n private measureMoreEl?: HTMLElement;\n\n private topItemEls: Map<string, HTMLElement> = new Map();\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private moreTriggerEl?: HTMLElement;\n\n private hamburgerPopoverEl?: HTMLLePopoverElement;\n private morePopoverEl?: HTMLLePopoverElement;\n\n private resizeObserver?: ResizeObserver;\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n this.scheduleOverflowRecalc();\n }\n\n componentDidLoad() {\n this.setupResizeObserver();\n this.scheduleOverflowRecalc();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n }\n\n componentDidRender() {\n // In case refs change after render.\n this.scheduleOverflowRecalc();\n }\n\n private setupResizeObserver() {\n this.resizeObserver?.disconnect();\n\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => this.computeOverflow());\n this.observeContainer(this.navContainerEl);\n }\n\n private observeContainer(el?: HTMLElement) {\n if (!this.resizeObserver) return;\n this.resizeObserver.disconnect();\n if (el) this.resizeObserver.observe(el);\n }\n\n private scheduleOverflowRecalc() {\n // Avoid work for vertical layout.\n if (this.orientation !== 'horizontal') return;\n\n // Ensure it runs after layout.\n requestAnimationFrame(() => this.computeOverflow());\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private getTopLevelIds(items: LeOption[]): string[] {\n return items.map((item, index) => this.getItemId(item, String(index)));\n }\n\n private computeOverflow() {\n // Only applies to horizontal, non-wrapping navs.\n if (this.orientation !== 'horizontal' || this.wrap) {\n if (!this.overflowIds || this.overflowIds.length) this.overflowIds = [];\n if (this.hamburgerActive) this.hamburgerActive = false;\n if (this.fallbackHamburger) this.fallbackHamburger = false;\n return;\n }\n\n const container = this.navContainerEl;\n if (!container) return;\n\n const topIds = this.getTopLevelIds(this.parsedItems);\n const widths = topIds.map(id => this.topItemEls.get(id)?.getBoundingClientRect().width ?? 0);\n\n const totalWidth = widths.reduce((a, b) => a + b, 0);\n const availableWidth = container.getBoundingClientRect().width;\n\n if (this.overflowMode === 'hamburger') {\n const shouldHamburger = totalWidth > availableWidth;\n if (shouldHamburger !== this.hamburgerActive) {\n this.hamburgerActive = shouldHamburger;\n }\n if (!this.overflowIds || this.overflowIds.length) this.overflowIds = [];\n if (this.fallbackHamburger) this.fallbackHamburger = false;\n return;\n }\n\n // overflowMode === 'more'\n if (this.hamburgerActive) this.hamburgerActive = false;\n\n const computedOverflow = this.computeOverflowMoreByWrap(availableWidth);\n if (!computedOverflow) return;\n\n // Fallback to hamburger when \"More\" would leave too few items visible\n // or when the trigger itself cannot fit the row.\n const visibleCount = this.parsedItems.length - computedOverflow.length;\n const moreWidth = this.moreTriggerEl?.getBoundingClientRect().width ?? 0;\n\n const minVisible = Math.max(0, Number(this.minVisibleItemsForMore) || 0);\n const shouldFallback =\n (computedOverflow.length > 0 && visibleCount < minVisible) ||\n (moreWidth > 0 && moreWidth > availableWidth);\n\n if (shouldFallback !== this.fallbackHamburger) {\n this.fallbackHamburger = shouldFallback;\n }\n\n const nextOverflow = shouldFallback ? [] : computedOverflow;\n const same =\n nextOverflow.length === this.overflowIds?.length &&\n nextOverflow.every((v, i) => v === this.overflowIds[i]);\n if (!same) {\n this.overflowIds = nextOverflow;\n }\n }\n\n private computeOverflowMoreByWrap(availableWidth: number): string[] | null {\n const container = this.navContainerEl;\n const measure = this.measureEl;\n const measureMore = this.measureMoreEl;\n const items = this.parsedItems;\n\n if (!container || !measure) return null;\n\n // Ensure measurement container matches visible container width.\n measure.style.width = `${availableWidth}px`;\n\n // Keep the measured \"More\" width aligned with the real trigger width (supports slotted content).\n const realMoreWidth = this.moreTriggerEl?.getBoundingClientRect().width;\n if (measureMore && realMoreWidth && realMoreWidth > 0) {\n const btn = measureMore.querySelector<HTMLElement>('button');\n if (btn) {\n btn.style.width = `${realMoreWidth}px`;\n }\n }\n\n const allIds = this.getTopLevelIds(items);\n const itemEls = allIds\n .map(id => measure.querySelector<HTMLElement>(`[data-nav-id=\"${CSS.escape(id)}\"]`))\n .filter((el): el is HTMLElement => !!el);\n\n // Reset measurement visibility.\n itemEls.forEach(el => {\n el.style.display = '';\n });\n if (measureMore) {\n measureMore.style.display = 'none';\n }\n\n if (itemEls.length === 0) {\n return [];\n }\n\n const firstRowTop = Math.min(...itemEls.map(el => el.offsetTop));\n const overflowSet = new Set<string>();\n\n // Pass 1: detect which items fall onto rows > 1 (without \"More\" in flow).\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (el.offsetTop > firstRowTop) overflowSet.add(id);\n });\n\n if (overflowSet.size === 0) {\n return [];\n }\n\n // Pass 2: show \"More\" and iteratively move items into overflow until \"More\" fits on row 1.\n if (measureMore) {\n measureMore.style.display = '';\n }\n\n // Hide currently overflowing items.\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (overflowSet.has(id)) el.style.display = 'none';\n });\n\n const getVisibleItemEls = () => itemEls.filter(el => el.style.display !== 'none');\n\n while (measureMore) {\n const visible = getVisibleItemEls();\n const rowTop = visible.length ? Math.min(...visible.map(el => el.offsetTop)) : 0;\n\n if (measureMore.offsetTop <= rowTop) break;\n if (visible.length === 0) break;\n\n // Remove one last visible item and retry.\n const last = visible[visible.length - 1];\n const lastId = last.getAttribute('data-nav-id');\n if (!lastId) break;\n\n last.style.display = 'none';\n overflowSet.add(lastId);\n }\n\n const overflowIds = allIds.filter(id => overflowSet.has(id));\n\n return overflowIds;\n }\n\n private renderHorizontalMeasureItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n const setRef = (el?: HTMLElement) => {\n if (el) this.topItemEls.set(id, el);\n };\n\n if (!hasChildren) {\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </span>\n </div>\n );\n }\n\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-trigger\">\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n </span>\n <span class=\"h-submenu-toggle\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </span>\n </div>\n );\n }\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\">\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\">\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n\n const overflowSet = new Set(this.overflowIds);\n\n const overflowItems: LeOption[] = [];\n items.forEach((item, index) => {\n const id = this.getItemId(item, String(index));\n if (!this.wrap && this.overflowMode === 'more' && overflowSet.has(id)) {\n overflowItems.push(item);\n }\n });\n\n const showHamburger =\n !this.wrap &&\n ((this.overflowMode === 'hamburger' && this.hamburgerActive) ||\n (this.overflowMode === 'more' && this.fallbackHamburger));\n\n // Hamburger mode: show a single trigger if anything overflows (or when forced for \"more\").\n if (showHamburger) {\n return (\n <div class=\"nav-horizontal-shell\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n More\n </button>\n </div>\n </div>\n\n <div\n class={classnames('nav-horizontal', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n <le-popover\n ref={el => {\n this.hamburgerPopoverEl = el as HTMLLePopoverElement;\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part=\"hamburger-trigger\"\n aria-label=\"Open menu\"\n >\n <slot name=\"hamburger-trigger\">\n <le-icon name=\"hamburger\" />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n closePopover: () => this.hamburgerPopoverEl?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n </div>\n );\n }\n\n const showMore = !this.wrap && this.overflowMode === 'more' && overflowItems.length > 0;\n\n return (\n <div class=\"nav-horizontal-shell\" role=\"menubar\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n <le-icon name=\"ellipsis-horizontal\" />\n </button>\n </div>\n </div>\n\n <div\n class={classnames('nav-horizontal', {\n 'wrap': this.wrap,\n 'nowrap': !this.wrap,\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n {items.map((item, index) => {\n const id = this.getItemId(item, String(index));\n const isOverflow = !this.wrap && this.overflowMode === 'more' && overflowSet.has(id);\n if (isOverflow) return null;\n return this.renderHorizontalItem(item, index);\n })}\n\n {/* Render a hidden trigger for measurement when not visible */}\n <div\n class={classnames('more-trigger-wrap', {\n 'is-visible': showMore,\n 'is-measure': !showMore,\n })}\n >\n <le-popover\n ref={el => {\n this.morePopoverEl = el as HTMLLePopoverElement;\n }}\n mode=\"default\"\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n showClose={false}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part=\"more-trigger\"\n aria-label=\"More\"\n ref={el => {\n if (el) this.moreTriggerEl = el as HTMLElement;\n }}\n >\n <slot name=\"more-trigger\">\n <le-icon name=\"ellipsis-horizontal\" />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(overflowItems, {\n depth: 0,\n pathPrefix: '',\n closePopover: () => this.morePopoverEl?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"]}
|