le-kit 0.2.6 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/le-bar.cjs.entry.js +10 -10
- package/dist/cjs/le-navigation.cjs.entry.js +4 -4
- package/dist/collection/components/le-bar/le-bar.js +10 -10
- package/dist/collection/components/le-bar/le-bar.js.map +1 -1
- package/dist/collection/components/le-navigation/le-navigation.js +4 -4
- package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
- package/dist/collection/dist/components/assets/custom-elements.json +331 -313
- package/dist/components/assets/custom-elements.json +331 -313
- package/dist/components/le-bar2.js +10 -10
- package/dist/components/le-bar2.js.map +1 -1
- package/dist/components/le-navigation.js +4 -4
- package/dist/components/le-navigation.js.map +1 -1
- package/dist/docs.json +1 -1
- package/dist/esm/le-bar.entry.js +10 -10
- package/dist/esm/le-bar.entry.js.map +1 -1
- package/dist/esm/le-navigation.entry.js +4 -4
- package/dist/esm/le-navigation.entry.js.map +1 -1
- package/dist/le-kit/dist/components/assets/custom-elements.json +331 -313
- package/dist/le-kit/le-kit.esm.js +1 -1
- package/dist/le-kit/p-0efce278.entry.js +2 -0
- package/dist/le-kit/p-0efce278.entry.js.map +1 -0
- package/dist/le-kit/{p-045e0d4a.entry.js → p-53d9c363.entry.js} +2 -2
- package/dist/le-kit/p-53d9c363.entry.js.map +1 -0
- package/package.json +1 -1
- package/dist/le-kit/p-045e0d4a.entry.js.map +0 -1
- package/dist/le-kit/p-4f11ea11.entry.js +0 -2
- package/dist/le-kit/p-4f11ea11.entry.js.map +0 -1
|
@@ -224,7 +224,7 @@ const LeBar = class {
|
|
|
224
224
|
this.emitOverflowChange();
|
|
225
225
|
}
|
|
226
226
|
// Set container height to show only first row
|
|
227
|
-
if (newOverflowingIds
|
|
227
|
+
if ((newOverflowingIds?.size ?? 0) > 0 && firstRowBottom > 0) {
|
|
228
228
|
this.containerHeight = firstRowBottom;
|
|
229
229
|
}
|
|
230
230
|
else {
|
|
@@ -234,7 +234,7 @@ const LeBar = class {
|
|
|
234
234
|
}
|
|
235
235
|
emitOverflowChange() {
|
|
236
236
|
this.leBarOverflowChange.emit({
|
|
237
|
-
overflowingIds: [...this.overflowingIds],
|
|
237
|
+
overflowingIds: [...(this.overflowingIds ?? [])],
|
|
238
238
|
hamburgerActive: this.hamburgerActive,
|
|
239
239
|
});
|
|
240
240
|
}
|
|
@@ -366,14 +366,14 @@ const LeBar = class {
|
|
|
366
366
|
item,
|
|
367
367
|
}));
|
|
368
368
|
}
|
|
369
|
-
else if (this.overflow === 'more' && this.overflowingIds
|
|
369
|
+
else if (this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) {
|
|
370
370
|
// Show only overflowing items
|
|
371
371
|
itemsToShow = items
|
|
372
372
|
.map((item, index) => ({
|
|
373
373
|
id: this.getItemId(item, index),
|
|
374
374
|
item,
|
|
375
375
|
}))
|
|
376
|
-
.filter(({ id }) => this.overflowingIds
|
|
376
|
+
.filter(({ id }) => this.overflowingIds?.has(id));
|
|
377
377
|
}
|
|
378
378
|
if (itemsToShow.length === 0)
|
|
379
379
|
return null;
|
|
@@ -392,7 +392,7 @@ const LeBar = class {
|
|
|
392
392
|
}
|
|
393
393
|
render() {
|
|
394
394
|
const showOverflowButton = !this.disablePopover &&
|
|
395
|
-
((this.overflow === 'more' && this.overflowingIds
|
|
395
|
+
((this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) ||
|
|
396
396
|
(this.overflow === 'hamburger' && this.hamburgerActive));
|
|
397
397
|
const containerStyle = {};
|
|
398
398
|
if (this.containerHeight !== null &&
|
|
@@ -401,22 +401,22 @@ const LeBar = class {
|
|
|
401
401
|
}
|
|
402
402
|
const showAllMenuAtStart = this.showAllMenu === 'start';
|
|
403
403
|
const showAllMenuAtEnd = this.showAllMenu === true || this.showAllMenu === 'end';
|
|
404
|
-
return (index.h(index.Host, { key: '
|
|
404
|
+
return (index.h(index.Host, { key: 'b15277217f45b9a2b4015e1062192ad7bfcafae3', class: utils.classnames({
|
|
405
405
|
'overflow-more': this.overflow === 'more',
|
|
406
406
|
'overflow-scroll': this.overflow === 'scroll',
|
|
407
407
|
'overflow-hamburger': this.overflow === 'hamburger',
|
|
408
408
|
'overflow-wrap': this.overflow === 'wrap',
|
|
409
409
|
'hamburger-active': this.hamburgerActive,
|
|
410
|
-
'has-overflow': this.overflowingIds
|
|
411
|
-
}) }, index.h("div", { key: '
|
|
410
|
+
'has-overflow': (this.overflowingIds?.size ?? 0) > 0 || this.hamburgerActive,
|
|
411
|
+
}) }, index.h("div", { key: 'cc8ff523ebc98f307cae7313a1998468e98dd712', class: utils.classnames('bar-container', {
|
|
412
412
|
[`align-${this.alignItems}`]: true,
|
|
413
|
-
}), part: "container" }, this.overflow === 'scroll' && this.arrows && (index.h("div", { key: '
|
|
413
|
+
}), part: "container" }, this.overflow === 'scroll' && this.arrows && (index.h("div", { key: '00f0afbd5b4280f4b231fa4d499ef8a7c0e4bd47', class: "bar-controls bar-controls-start" }, this.renderScrollArrows()?.[0])), showAllMenuAtStart && (index.h("div", { key: '57234a8145f97f7a803c0488b520786a25584a9d', class: "bar-controls bar-controls-start" }, this.renderAllMenuPopover())), index.h("div", { key: '15db1e36049182161823998fc1041ad91d327816', class: utils.classnames('bar-items', {
|
|
414
414
|
'is-scrollable': this.overflow === 'scroll',
|
|
415
415
|
'is-wrapping': this.overflow === 'wrap',
|
|
416
416
|
}), style: containerStyle, ref: el => {
|
|
417
417
|
this.itemsContainerEl = el;
|
|
418
418
|
this.observeContainer(el);
|
|
419
|
-
}, onScroll: this.overflow === 'scroll' ? this.handleScroll : undefined }, index.h("slot", { key: '
|
|
419
|
+
}, onScroll: this.overflow === 'scroll' ? this.handleScroll : undefined }, index.h("slot", { key: '6b967b1c0f251e1214b0ae58b18e767ef9d096a8' })), showOverflowButton && (index.h("div", { key: 'b77c30910b01bffae047f9744f2589743a29eb29', class: "bar-controls bar-controls-end" }, this.renderOverflowPopover())), showAllMenuAtEnd && (index.h("div", { key: '971d727e51f4b4682ed1b600e930b2f33b3c0a65', class: "bar-controls bar-controls-end" }, this.renderAllMenuPopover())), this.overflow === 'scroll' && this.arrows && (index.h("div", { key: 'a6b6fc87ceae32503fc55a0da54b1e38f7f95ff7', class: "bar-controls bar-controls-end" }, this.renderScrollArrows()?.[1])))));
|
|
420
420
|
}
|
|
421
421
|
static get watchers() { return {
|
|
422
422
|
"overflow": ["handleOverflowChange"]
|
|
@@ -216,8 +216,8 @@ const LeNavigation = class {
|
|
|
216
216
|
requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
|
|
217
217
|
};
|
|
218
218
|
handleBarOverflowChange = (e) => {
|
|
219
|
-
this.overflowIds = e.detail.overflowingIds;
|
|
220
|
-
this.hamburgerActive = e.detail.hamburgerActive;
|
|
219
|
+
this.overflowIds = e.detail.overflowingIds || [];
|
|
220
|
+
this.hamburgerActive = e.detail.hamburgerActive || false;
|
|
221
221
|
};
|
|
222
222
|
openOverflowPopover = () => {
|
|
223
223
|
this.overflowPopoverOpen = true;
|
|
@@ -333,7 +333,7 @@ const LeNavigation = class {
|
|
|
333
333
|
}
|
|
334
334
|
renderOverflowPopover() {
|
|
335
335
|
const items = this.parsedItems;
|
|
336
|
-
const overflowSet = new Set(this.overflowIds);
|
|
336
|
+
const overflowSet = new Set(this.overflowIds || []);
|
|
337
337
|
// Determine which items to show in the popover
|
|
338
338
|
let itemsToShow;
|
|
339
339
|
if (this.hamburgerActive) {
|
|
@@ -359,7 +359,7 @@ const LeNavigation = class {
|
|
|
359
359
|
renderHorizontal() {
|
|
360
360
|
const items = this.parsedItems;
|
|
361
361
|
const overflowMode = this.getOverflowMode();
|
|
362
|
-
const showOverflowButton = this.overflowIds
|
|
362
|
+
const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;
|
|
363
363
|
return (index.h("div", { class: "nav-horizontal-wrapper" }, index.h("le-bar", { class: utils.classnames('nav-bar', {
|
|
364
364
|
'align-end': this.align === 'end',
|
|
365
365
|
'align-center': this.align === 'center',
|
|
@@ -242,7 +242,7 @@ export class LeBar {
|
|
|
242
242
|
this.emitOverflowChange();
|
|
243
243
|
}
|
|
244
244
|
// Set container height to show only first row
|
|
245
|
-
if (newOverflowingIds
|
|
245
|
+
if ((newOverflowingIds?.size ?? 0) > 0 && firstRowBottom > 0) {
|
|
246
246
|
this.containerHeight = firstRowBottom;
|
|
247
247
|
}
|
|
248
248
|
else {
|
|
@@ -252,7 +252,7 @@ export class LeBar {
|
|
|
252
252
|
}
|
|
253
253
|
emitOverflowChange() {
|
|
254
254
|
this.leBarOverflowChange.emit({
|
|
255
|
-
overflowingIds: [...this.overflowingIds],
|
|
255
|
+
overflowingIds: [...(this.overflowingIds ?? [])],
|
|
256
256
|
hamburgerActive: this.hamburgerActive,
|
|
257
257
|
});
|
|
258
258
|
}
|
|
@@ -384,14 +384,14 @@ export class LeBar {
|
|
|
384
384
|
item,
|
|
385
385
|
}));
|
|
386
386
|
}
|
|
387
|
-
else if (this.overflow === 'more' && this.overflowingIds
|
|
387
|
+
else if (this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) {
|
|
388
388
|
// Show only overflowing items
|
|
389
389
|
itemsToShow = items
|
|
390
390
|
.map((item, index) => ({
|
|
391
391
|
id: this.getItemId(item, index),
|
|
392
392
|
item,
|
|
393
393
|
}))
|
|
394
|
-
.filter(({ id }) => this.overflowingIds
|
|
394
|
+
.filter(({ id }) => this.overflowingIds?.has(id));
|
|
395
395
|
}
|
|
396
396
|
if (itemsToShow.length === 0)
|
|
397
397
|
return null;
|
|
@@ -410,7 +410,7 @@ export class LeBar {
|
|
|
410
410
|
}
|
|
411
411
|
render() {
|
|
412
412
|
const showOverflowButton = !this.disablePopover &&
|
|
413
|
-
((this.overflow === 'more' && this.overflowingIds
|
|
413
|
+
((this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) ||
|
|
414
414
|
(this.overflow === 'hamburger' && this.hamburgerActive));
|
|
415
415
|
const containerStyle = {};
|
|
416
416
|
if (this.containerHeight !== null &&
|
|
@@ -419,22 +419,22 @@ export class LeBar {
|
|
|
419
419
|
}
|
|
420
420
|
const showAllMenuAtStart = this.showAllMenu === 'start';
|
|
421
421
|
const showAllMenuAtEnd = this.showAllMenu === true || this.showAllMenu === 'end';
|
|
422
|
-
return (h(Host, { key: '
|
|
422
|
+
return (h(Host, { key: 'b15277217f45b9a2b4015e1062192ad7bfcafae3', class: classnames({
|
|
423
423
|
'overflow-more': this.overflow === 'more',
|
|
424
424
|
'overflow-scroll': this.overflow === 'scroll',
|
|
425
425
|
'overflow-hamburger': this.overflow === 'hamburger',
|
|
426
426
|
'overflow-wrap': this.overflow === 'wrap',
|
|
427
427
|
'hamburger-active': this.hamburgerActive,
|
|
428
|
-
'has-overflow': this.overflowingIds
|
|
429
|
-
}) }, h("div", { key: '
|
|
428
|
+
'has-overflow': (this.overflowingIds?.size ?? 0) > 0 || this.hamburgerActive,
|
|
429
|
+
}) }, h("div", { key: 'cc8ff523ebc98f307cae7313a1998468e98dd712', class: classnames('bar-container', {
|
|
430
430
|
[`align-${this.alignItems}`]: true,
|
|
431
|
-
}), part: "container" }, this.overflow === 'scroll' && this.arrows && (h("div", { key: '
|
|
431
|
+
}), part: "container" }, this.overflow === 'scroll' && this.arrows && (h("div", { key: '00f0afbd5b4280f4b231fa4d499ef8a7c0e4bd47', class: "bar-controls bar-controls-start" }, this.renderScrollArrows()?.[0])), showAllMenuAtStart && (h("div", { key: '57234a8145f97f7a803c0488b520786a25584a9d', class: "bar-controls bar-controls-start" }, this.renderAllMenuPopover())), h("div", { key: '15db1e36049182161823998fc1041ad91d327816', class: classnames('bar-items', {
|
|
432
432
|
'is-scrollable': this.overflow === 'scroll',
|
|
433
433
|
'is-wrapping': this.overflow === 'wrap',
|
|
434
434
|
}), style: containerStyle, ref: el => {
|
|
435
435
|
this.itemsContainerEl = el;
|
|
436
436
|
this.observeContainer(el);
|
|
437
|
-
}, onScroll: this.overflow === 'scroll' ? this.handleScroll : undefined }, h("slot", { key: '
|
|
437
|
+
}, onScroll: this.overflow === 'scroll' ? this.handleScroll : undefined }, h("slot", { key: '6b967b1c0f251e1214b0ae58b18e767ef9d096a8' })), showOverflowButton && (h("div", { key: 'b77c30910b01bffae047f9744f2589743a29eb29', class: "bar-controls bar-controls-end" }, this.renderOverflowPopover())), showAllMenuAtEnd && (h("div", { key: '971d727e51f4b4682ed1b600e930b2f33b3c0a65', class: "bar-controls bar-controls-end" }, this.renderAllMenuPopover())), this.overflow === 'scroll' && this.arrows && (h("div", { key: 'a6b6fc87ceae32503fc55a0da54b1e38f7f95ff7', class: "bar-controls bar-controls-end" }, this.renderScrollArrows()?.[1])))));
|
|
438
438
|
}
|
|
439
439
|
static get is() { return "le-bar"; }
|
|
440
440
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-bar.js","sourceRoot":"","sources":["../../../src/components/le-bar/le-bar.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Element,\n Watch,\n Host,\n Method,\n Listen,\n} from '@stencil/core';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeBarOverflowChangeDetail {\n /** IDs of items that are currently overflowing (in the \"more\" popover) */\n overflowingIds: string[];\n /** Whether hamburger mode is active */\n hamburgerActive: boolean;\n}\n\n/**\n * A flexible bar component that handles overflow gracefully.\n *\n * Items are slotted children. The bar measures which items fit on the first\n * row and handles overflow according to the `overflow` prop.\n *\n * @slot - Bar items (children will be measured for overflow)\n * @slot more - Custom \"more\" button content\n * @slot hamburger - Custom hamburger button content\n * @slot start-arrow - Custom left scroll arrow\n * @slot end-arrow - Custom right scroll arrow\n * @slot all-menu - Custom \"show all\" menu button\n *\n * @csspart container - The main bar container\n * @csspart item - Individual items in the bar\n * @csspart more-button - The \"more\" overflow button\n * @csspart hamburger-button - The hamburger menu button\n * @csspart arrow-start - The start (left) scroll arrow\n * @csspart arrow-end - The end (right) scroll arrow\n * @csspart all-menu-button - The \"show all\" menu button\n * @csspart popover-content - The popover content wrapper\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-bar',\n styleUrl: 'le-bar.css',\n shadow: true,\n})\nexport class LeBar {\n @Element() el: HTMLElement;\n\n /**\n * Overflow behavior when items don't fit on one row.\n * - `more`: Overflow items appear in a \"more\" dropdown\n * - `scroll`: Items scroll horizontally with optional arrows\n * - `hamburger`: All items go into a hamburger menu if any overflow\n * - `wrap`: Items wrap to additional rows\n */\n @Prop({ reflect: true }) overflow: 'more' | 'scroll' | 'hamburger' | 'wrap' = 'more';\n\n /**\n * Alignment of items within the bar (maps to justify-content).\n */\n @Prop({ reflect: true }) alignItems: 'start' | 'end' | 'center' | 'stretch' = 'start';\n\n /**\n * Show scroll arrows when overflow is \"scroll\".\n */\n @Prop() arrows: boolean = false;\n\n /**\n * Disable the internal overflow popover.\n * When true, the bar still detects overflow and hides items,\n * but doesn't render its own popover. Use this when providing\n * custom overflow handling via the leBarOverflowChange event.\n */\n @Prop() disablePopover: boolean = false;\n\n /**\n * Show an \"all items\" menu button.\n * - `false`: Don't show\n * - `true` or `'end'`: Show at end\n * - `'start'`: Show at start\n */\n @Prop() showAllMenu: boolean | 'start' | 'end' = false;\n\n /**\n * Emitted when overflow state changes.\n */\n @Event() leBarOverflowChange: EventEmitter<LeBarOverflowChangeDetail>;\n\n /** Whether the hamburger/more popover is open */\n @State() private popoverOpen: boolean = false;\n\n /** Whether hamburger mode is active (for hamburger overflow) */\n @State() private hamburgerActive: boolean = false;\n\n /** IDs of items that are overflowing */\n @State() private overflowingIds: Set<string> = new Set();\n\n /** Whether we can scroll left */\n @State() private canScrollStart: boolean = false;\n\n /** Whether we can scroll right */\n @State() private canScrollEnd: boolean = false;\n\n /** Whether the all-menu popover is open */\n @State() private allMenuOpen: boolean = false;\n\n /** Current height of the items container (for overflow handling) */\n @State() private containerHeight: number | null = null;\n\n private itemsContainerEl?: HTMLElement;\n private moreButtonEl?: HTMLElement;\n\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private instanceId: string = generateId('le-bar');\n\n // Map to track item elements and their IDs\n private itemMap: Map<string, HTMLElement> = new Map();\n\n // Prevent multiple recalculations in the same frame\n private pendingRecalc: number | null = null;\n\n @Watch('overflow')\n handleOverflowChange() {\n this.resetOverflowState();\n this.scheduleOverflowRecalc();\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n this.scheduleOverflowRecalc();\n }\n\n connectedCallback() {\n this.setupObservers();\n }\n\n componentDidLoad() {\n this.scheduleOverflowRecalc();\n }\n\n componentDidRender() {\n // Recalculate after render in case children changed\n this.scheduleOverflowRecalc();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n }\n\n /**\n * Force recalculation of overflow state.\n */\n @Method()\n async recalculate() {\n this.computeOverflow();\n }\n\n private setupObservers() {\n // ResizeObserver for container size changes\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n this.computeOverflow();\n this.updateScrollState();\n });\n }\n\n // MutationObserver for child changes\n this.mutationObserver = new MutationObserver(() => {\n this.scheduleOverflowRecalc();\n });\n\n this.mutationObserver.observe(this.el, {\n childList: true,\n subtree: false,\n });\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 // Debounce recalculations to prevent infinite loops\n if (this.pendingRecalc !== null) {\n cancelAnimationFrame(this.pendingRecalc);\n }\n this.pendingRecalc = requestAnimationFrame(() => {\n this.pendingRecalc = null;\n this.computeOverflow();\n });\n }\n\n private resetOverflowState() {\n this.hamburgerActive = false;\n this.overflowingIds = new Set();\n this.containerHeight = null;\n this.popoverOpen = false;\n }\n\n private getSlottedItems(): HTMLElement[] {\n // Get direct children from the light DOM (excluding named slot elements)\n return Array.from(this.el.children).filter(\n (el): el is HTMLElement => el instanceof HTMLElement && !el.hasAttribute('slot'),\n );\n }\n\n private getItemId(el: HTMLElement, index: number): string {\n return el.id || el.dataset.barId || `${this.instanceId}-item-${index}`;\n }\n\n private computeOverflow() {\n if (this.overflow === 'wrap' || this.overflow === 'scroll') {\n // No overflow handling needed for wrap/scroll modes\n this.resetOverflowState();\n this.updateScrollState();\n return;\n }\n\n const container = this.itemsContainerEl;\n if (!container) return;\n\n const items = this.getSlottedItems();\n if (items.length === 0) {\n this.resetOverflowState();\n return;\n }\n\n // Force a layout recalc\n container.offsetHeight;\n\n // Build item map\n this.itemMap.clear();\n items.forEach((item, index) => {\n const id = this.getItemId(item, index);\n this.itemMap.set(id, item);\n });\n\n // Get the position of items to determine which are on the first row\n const itemRects = items.map((item, index) => ({\n item,\n id: this.getItemId(item, index),\n rect: item.getBoundingClientRect(),\n }));\n\n if (itemRects.length === 0) {\n return;\n }\n\n // Find the first row's top position (accounting for vertical alignment)\n const containerRect = container.getBoundingClientRect();\n const topValues = itemRects.map(i => i.rect.top - containerRect.top);\n const minTop = Math.min(...topValues);\n\n // Items are on the first row if their top is close to minTop\n // Allow some tolerance for alignment differences\n const tolerance = 15;\n const firstRowItems = itemRects.filter(\n i => i.rect.top - containerRect.top <= minTop + tolerance,\n );\n const overflowItems = itemRects.filter(\n i => i.rect.top - containerRect.top > minTop + tolerance,\n );\n\n // Calculate the height of the first row\n const firstRowBottom =\n firstRowItems.length > 0\n ? Math.max(...firstRowItems.map(i => i.rect.bottom - containerRect.top))\n : 0;\n\n if (this.overflow === 'hamburger') {\n // In hamburger mode, if ANY item overflows, all go into the menu\n const shouldHamburger = overflowItems.length > 0;\n\n if (shouldHamburger !== this.hamburgerActive) {\n this.hamburgerActive = shouldHamburger;\n this.emitOverflowChange();\n }\n\n // Set height to show only first row (or hide all if hamburger is active)\n if (shouldHamburger && firstRowBottom > 0) {\n this.containerHeight = firstRowBottom;\n } else {\n this.containerHeight = null;\n }\n } else {\n // 'more' mode\n const newOverflowingIds = new Set(overflowItems.map(i => i.id));\n\n // Check if we need to make room for the \"more\" button\n if (newOverflowingIds.size > 0 && this.moreButtonEl) {\n const moreRect = this.moreButtonEl.getBoundingClientRect();\n const moreTop = moreRect.top - containerRect.top;\n\n // If \"more\" button is not on the first row, we need to hide one more item\n if (moreTop > minTop + tolerance) {\n // Find the last visible item and move it to overflow\n const lastVisible = firstRowItems[firstRowItems.length - 1];\n if (lastVisible) {\n newOverflowingIds.add(lastVisible.id);\n }\n }\n }\n\n // Check if overflow state changed\n const hasChanged =\n newOverflowingIds.size !== this.overflowingIds.size ||\n ![...newOverflowingIds].every(id => this.overflowingIds.has(id));\n\n if (hasChanged) {\n this.overflowingIds = newOverflowingIds;\n this.emitOverflowChange();\n }\n\n // Set container height to show only first row\n if (newOverflowingIds.size > 0 && firstRowBottom > 0) {\n this.containerHeight = firstRowBottom;\n } else {\n this.containerHeight = null;\n }\n }\n }\n\n private emitOverflowChange() {\n this.leBarOverflowChange.emit({\n overflowingIds: [...this.overflowingIds],\n hamburgerActive: this.hamburgerActive,\n });\n }\n\n private updateScrollState() {\n if (this.overflow !== 'scroll' || !this.itemsContainerEl) {\n this.canScrollStart = false;\n this.canScrollEnd = false;\n return;\n }\n\n const el = this.itemsContainerEl;\n this.canScrollStart = el.scrollLeft > 0;\n this.canScrollEnd = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;\n }\n\n private handleScroll = () => {\n this.updateScrollState();\n };\n\n private scrollToStart = () => {\n if (!this.itemsContainerEl) return;\n\n const items = this.getSlottedItems();\n const container = this.itemsContainerEl;\n\n // Find the scroll position of the previous item\n const currentScroll = container.scrollLeft;\n let targetScroll = 0;\n\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n // Calculate item's left edge relative to container's scroll position\n const itemLeft = item.offsetLeft - container.offsetLeft;\n\n // If this item starts before current scroll position, scroll to it\n if (itemLeft < currentScroll - 1) {\n targetScroll = itemLeft;\n break;\n }\n }\n\n container.scrollTo({ left: targetScroll, behavior: 'smooth' });\n\n // Update scroll state after animation\n setTimeout(() => this.updateScrollState(), 300);\n };\n\n private scrollToEnd = () => {\n if (!this.itemsContainerEl) return;\n\n const container = this.itemsContainerEl;\n const items = this.getSlottedItems();\n\n if (items.length === 0) return;\n\n const containerWidth = container.clientWidth;\n const currentScroll = container.scrollLeft;\n\n let targetScroll = container.scrollWidth - containerWidth;\n\n for (const item of items) {\n // Calculate item's right edge relative to container\n const itemLeft = item.offsetLeft - container.offsetLeft;\n\n // If this is the next item to scroll to from left to right then scroll to it\n if (itemLeft > currentScroll + 1) {\n targetScroll = itemLeft;\n break;\n }\n }\n\n container.scrollTo({ left: Math.max(0, targetScroll), behavior: 'smooth' });\n\n // Update scroll state after animation\n setTimeout(() => this.updateScrollState(), 300);\n };\n\n private togglePopover = () => {\n this.popoverOpen = !this.popoverOpen;\n };\n\n private closePopover = () => {\n this.popoverOpen = false;\n };\n\n private toggleAllMenu = () => {\n this.allMenuOpen = !this.allMenuOpen;\n };\n\n private closeAllMenu = () => {\n this.allMenuOpen = false;\n };\n\n private handleItemClick = (_e: MouseEvent, id: string) => {\n // Close popover when an item inside is clicked\n const originalItem = this.itemMap.get(id);\n\n if (originalItem) {\n // Clone the click to the original item\n const cloneEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n originalItem.dispatchEvent(cloneEvent);\n }\n\n this.closePopover();\n this.closeAllMenu();\n };\n\n private renderMoreButton() {\n const hasSlottedMore = this.el.querySelector('[slot=\"more\"]');\n\n return (\n <button\n class=\"bar-more-button\"\n part=\"more-button\"\n ref={el => (this.moreButtonEl = el)}\n onClick={this.togglePopover}\n aria-expanded={String(this.popoverOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedMore ? <slot name=\"more\" /> : <le-icon name=\"ellipsis-horizontal\" />}\n </button>\n );\n }\n\n private renderHamburgerButton() {\n const hasSlottedHamburger = this.el.querySelector('[slot=\"hamburger\"]');\n\n return (\n <button\n class=\"bar-hamburger-button\"\n part=\"hamburger-button\"\n onClick={this.togglePopover}\n aria-expanded={String(this.popoverOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedHamburger ? <slot name=\"hamburger\" /> : <le-icon name=\"hamburger\" />}\n </button>\n );\n }\n\n private renderScrollArrows() {\n if (!this.arrows || this.overflow !== 'scroll') return null;\n\n const hasSlottedStartArrow = this.el.querySelector('[slot=\"start-arrow\"]');\n const hasSlottedEndArrow = this.el.querySelector('[slot=\"end-arrow\"]');\n\n return [\n <button\n class={classnames('bar-arrow', 'bar-arrow-start', {\n disabled: !this.canScrollStart,\n })}\n part=\"arrow-start\"\n onClick={this.scrollToStart}\n disabled={!this.canScrollStart}\n aria-label=\"Scroll to start\"\n >\n {hasSlottedStartArrow ? (\n <slot name=\"start-arrow\" />\n ) : (\n <le-icon name=\"chevron-down\" class=\"arrow-icon-start\" />\n )}\n </button>,\n <button\n class={classnames('bar-arrow', 'bar-arrow-end', {\n disabled: !this.canScrollEnd,\n })}\n part=\"arrow-end\"\n onClick={this.scrollToEnd}\n disabled={!this.canScrollEnd}\n aria-label=\"Scroll to end\"\n >\n {hasSlottedEndArrow ? (\n <slot name=\"end-arrow\" />\n ) : (\n <le-icon name=\"chevron-down\" class=\"arrow-icon-end\" />\n )}\n </button>,\n ];\n }\n\n private renderAllMenuButton() {\n if (!this.showAllMenu) return null;\n\n const hasSlottedAllMenu = this.el.querySelector('[slot=\"all-menu\"]');\n\n return (\n <button\n class=\"bar-all-menu-button\"\n part=\"all-menu-button\"\n onClick={this.toggleAllMenu}\n aria-expanded={String(this.allMenuOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedAllMenu ? <slot name=\"all-menu\" /> : <le-icon name=\"hamburger\" />}\n </button>\n );\n }\n\n private renderPopoverContent(itemsToShow: { id: string; item: HTMLElement }[]) {\n return (\n <div class=\"bar-popover-content\" part=\"popover-content\">\n {itemsToShow.map(({ id, item }) => (\n <div\n class=\"bar-popover-item\"\n key={id}\n onClick={(e: MouseEvent) => this.handleItemClick(e, id)}\n innerHTML={item.outerHTML}\n />\n ))}\n </div>\n );\n }\n\n private renderOverflowPopover() {\n if (this.overflow !== 'more' && this.overflow !== 'hamburger') return null;\n\n const items = this.getSlottedItems();\n let itemsToShow: { id: string; item: HTMLElement }[] = [];\n\n if (this.overflow === 'hamburger' && this.hamburgerActive) {\n // Show all items in hamburger mode\n itemsToShow = items.map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }));\n } else if (this.overflow === 'more' && this.overflowingIds.size > 0) {\n // Show only overflowing items\n itemsToShow = items\n .map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }))\n .filter(({ id }) => this.overflowingIds.has(id));\n }\n\n if (itemsToShow.length === 0) return null;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.popoverOpen}\n position=\"bottom\"\n align=\"end\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n onLePopoverClose={this.closePopover}\n >\n <div slot=\"trigger\" class=\"bar-overflow-trigger\">\n {this.overflow === 'hamburger' ? this.renderHamburgerButton() : this.renderMoreButton()}\n </div>\n {this.renderPopoverContent(itemsToShow)}\n </le-popover>\n );\n }\n\n private renderAllMenuPopover() {\n if (!this.showAllMenu) return null;\n\n const items = this.getSlottedItems();\n const itemsToShow = items.map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }));\n\n const position = this.showAllMenu === 'start' ? 'start' : 'end';\n\n return (\n <le-popover\n mode=\"default\"\n open={this.allMenuOpen}\n position=\"bottom\"\n align={position}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n onLePopoverClose={this.closeAllMenu}\n >\n <div slot=\"trigger\" class=\"bar-all-menu-trigger\">\n {this.renderAllMenuButton()}\n </div>\n {this.renderPopoverContent(itemsToShow)}\n </le-popover>\n );\n }\n\n render() {\n const showOverflowButton =\n !this.disablePopover &&\n ((this.overflow === 'more' && this.overflowingIds.size > 0) ||\n (this.overflow === 'hamburger' && this.hamburgerActive));\n\n const containerStyle: { [key: string]: string } = {};\n if (\n this.containerHeight !== null &&\n (this.overflow === 'more' || this.overflow === 'hamburger')\n ) {\n containerStyle.height = `${this.containerHeight}px`;\n }\n\n const showAllMenuAtStart = this.showAllMenu === 'start';\n const showAllMenuAtEnd = this.showAllMenu === true || this.showAllMenu === 'end';\n\n return (\n <Host\n class={classnames({\n 'overflow-more': this.overflow === 'more',\n 'overflow-scroll': this.overflow === 'scroll',\n 'overflow-hamburger': this.overflow === 'hamburger',\n 'overflow-wrap': this.overflow === 'wrap',\n 'hamburger-active': this.hamburgerActive,\n 'has-overflow': this.overflowingIds.size > 0 || this.hamburgerActive,\n })}\n >\n <div\n class={classnames('bar-container', {\n [`align-${this.alignItems}`]: true,\n })}\n part=\"container\"\n >\n {/* Start controls */}\n {this.overflow === 'scroll' && this.arrows && (\n <div class=\"bar-controls bar-controls-start\">{this.renderScrollArrows()?.[0]}</div>\n )}\n\n {showAllMenuAtStart && (\n <div class=\"bar-controls bar-controls-start\">{this.renderAllMenuPopover()}</div>\n )}\n\n {/* Items container */}\n <div\n class={classnames('bar-items', {\n 'is-scrollable': this.overflow === 'scroll',\n 'is-wrapping': this.overflow === 'wrap',\n })}\n style={containerStyle}\n ref={el => {\n this.itemsContainerEl = el;\n this.observeContainer(el);\n }}\n onScroll={this.overflow === 'scroll' ? this.handleScroll : undefined}\n >\n <slot />\n </div>\n\n {/* End controls */}\n {showOverflowButton && (\n <div class=\"bar-controls bar-controls-end\">{this.renderOverflowPopover()}</div>\n )}\n\n {showAllMenuAtEnd && (\n <div class=\"bar-controls bar-controls-end\">{this.renderAllMenuPopover()}</div>\n )}\n\n {this.overflow === 'scroll' && this.arrows && (\n <div class=\"bar-controls bar-controls-end\">{this.renderScrollArrows()?.[1]}</div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"le-bar.js","sourceRoot":"","sources":["../../../src/components/le-bar/le-bar.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Element,\n Watch,\n Host,\n Method,\n Listen,\n} from '@stencil/core';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeBarOverflowChangeDetail {\n /** IDs of items that are currently overflowing (in the \"more\" popover) */\n overflowingIds: string[];\n /** Whether hamburger mode is active */\n hamburgerActive: boolean;\n}\n\n/**\n * A flexible bar component that handles overflow gracefully.\n *\n * Items are slotted children. The bar measures which items fit on the first\n * row and handles overflow according to the `overflow` prop.\n *\n * @slot - Bar items (children will be measured for overflow)\n * @slot more - Custom \"more\" button content\n * @slot hamburger - Custom hamburger button content\n * @slot start-arrow - Custom left scroll arrow\n * @slot end-arrow - Custom right scroll arrow\n * @slot all-menu - Custom \"show all\" menu button\n *\n * @csspart container - The main bar container\n * @csspart item - Individual items in the bar\n * @csspart more-button - The \"more\" overflow button\n * @csspart hamburger-button - The hamburger menu button\n * @csspart arrow-start - The start (left) scroll arrow\n * @csspart arrow-end - The end (right) scroll arrow\n * @csspart all-menu-button - The \"show all\" menu button\n * @csspart popover-content - The popover content wrapper\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-bar',\n styleUrl: 'le-bar.css',\n shadow: true,\n})\nexport class LeBar {\n @Element() el: HTMLElement;\n\n /**\n * Overflow behavior when items don't fit on one row.\n * - `more`: Overflow items appear in a \"more\" dropdown\n * - `scroll`: Items scroll horizontally with optional arrows\n * - `hamburger`: All items go into a hamburger menu if any overflow\n * - `wrap`: Items wrap to additional rows\n */\n @Prop({ reflect: true }) overflow: 'more' | 'scroll' | 'hamburger' | 'wrap' = 'more';\n\n /**\n * Alignment of items within the bar (maps to justify-content).\n */\n @Prop({ reflect: true }) alignItems: 'start' | 'end' | 'center' | 'stretch' = 'start';\n\n /**\n * Show scroll arrows when overflow is \"scroll\".\n */\n @Prop() arrows: boolean = false;\n\n /**\n * Disable the internal overflow popover.\n * When true, the bar still detects overflow and hides items,\n * but doesn't render its own popover. Use this when providing\n * custom overflow handling via the leBarOverflowChange event.\n */\n @Prop() disablePopover: boolean = false;\n\n /**\n * Show an \"all items\" menu button.\n * - `false`: Don't show\n * - `true` or `'end'`: Show at end\n * - `'start'`: Show at start\n */\n @Prop() showAllMenu: boolean | 'start' | 'end' = false;\n\n /**\n * Emitted when overflow state changes.\n */\n @Event() leBarOverflowChange: EventEmitter<LeBarOverflowChangeDetail>;\n\n /** Whether the hamburger/more popover is open */\n @State() private popoverOpen: boolean = false;\n\n /** Whether hamburger mode is active (for hamburger overflow) */\n @State() private hamburgerActive: boolean = false;\n\n /** IDs of items that are overflowing */\n @State() private overflowingIds: Set<string> = new Set();\n\n /** Whether we can scroll left */\n @State() private canScrollStart: boolean = false;\n\n /** Whether we can scroll right */\n @State() private canScrollEnd: boolean = false;\n\n /** Whether the all-menu popover is open */\n @State() private allMenuOpen: boolean = false;\n\n /** Current height of the items container (for overflow handling) */\n @State() private containerHeight: number | null = null;\n\n private itemsContainerEl?: HTMLElement;\n private moreButtonEl?: HTMLElement;\n\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private instanceId: string = generateId('le-bar');\n\n // Map to track item elements and their IDs\n private itemMap: Map<string, HTMLElement> = new Map();\n\n // Prevent multiple recalculations in the same frame\n private pendingRecalc: number | null = null;\n\n @Watch('overflow')\n handleOverflowChange() {\n this.resetOverflowState();\n this.scheduleOverflowRecalc();\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n this.scheduleOverflowRecalc();\n }\n\n connectedCallback() {\n this.setupObservers();\n }\n\n componentDidLoad() {\n this.scheduleOverflowRecalc();\n }\n\n componentDidRender() {\n // Recalculate after render in case children changed\n this.scheduleOverflowRecalc();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n }\n\n /**\n * Force recalculation of overflow state.\n */\n @Method()\n async recalculate() {\n this.computeOverflow();\n }\n\n private setupObservers() {\n // ResizeObserver for container size changes\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n this.computeOverflow();\n this.updateScrollState();\n });\n }\n\n // MutationObserver for child changes\n this.mutationObserver = new MutationObserver(() => {\n this.scheduleOverflowRecalc();\n });\n\n this.mutationObserver.observe(this.el, {\n childList: true,\n subtree: false,\n });\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 // Debounce recalculations to prevent infinite loops\n if (this.pendingRecalc !== null) {\n cancelAnimationFrame(this.pendingRecalc);\n }\n this.pendingRecalc = requestAnimationFrame(() => {\n this.pendingRecalc = null;\n this.computeOverflow();\n });\n }\n\n private resetOverflowState() {\n this.hamburgerActive = false;\n this.overflowingIds = new Set();\n this.containerHeight = null;\n this.popoverOpen = false;\n }\n\n private getSlottedItems(): HTMLElement[] {\n // Get direct children from the light DOM (excluding named slot elements)\n return Array.from(this.el.children).filter(\n (el): el is HTMLElement => el instanceof HTMLElement && !el.hasAttribute('slot'),\n );\n }\n\n private getItemId(el: HTMLElement, index: number): string {\n return el.id || el.dataset.barId || `${this.instanceId}-item-${index}`;\n }\n\n private computeOverflow() {\n if (this.overflow === 'wrap' || this.overflow === 'scroll') {\n // No overflow handling needed for wrap/scroll modes\n this.resetOverflowState();\n this.updateScrollState();\n return;\n }\n\n const container = this.itemsContainerEl;\n if (!container) return;\n\n const items = this.getSlottedItems();\n if (items.length === 0) {\n this.resetOverflowState();\n return;\n }\n\n // Force a layout recalc\n container.offsetHeight;\n\n // Build item map\n this.itemMap.clear();\n items.forEach((item, index) => {\n const id = this.getItemId(item, index);\n this.itemMap.set(id, item);\n });\n\n // Get the position of items to determine which are on the first row\n const itemRects = items.map((item, index) => ({\n item,\n id: this.getItemId(item, index),\n rect: item.getBoundingClientRect(),\n }));\n\n if (itemRects.length === 0) {\n return;\n }\n\n // Find the first row's top position (accounting for vertical alignment)\n const containerRect = container.getBoundingClientRect();\n const topValues = itemRects.map(i => i.rect.top - containerRect.top);\n const minTop = Math.min(...topValues);\n\n // Items are on the first row if their top is close to minTop\n // Allow some tolerance for alignment differences\n const tolerance = 15;\n const firstRowItems = itemRects.filter(\n i => i.rect.top - containerRect.top <= minTop + tolerance,\n );\n const overflowItems = itemRects.filter(\n i => i.rect.top - containerRect.top > minTop + tolerance,\n );\n\n // Calculate the height of the first row\n const firstRowBottom =\n firstRowItems.length > 0\n ? Math.max(...firstRowItems.map(i => i.rect.bottom - containerRect.top))\n : 0;\n\n if (this.overflow === 'hamburger') {\n // In hamburger mode, if ANY item overflows, all go into the menu\n const shouldHamburger = overflowItems.length > 0;\n\n if (shouldHamburger !== this.hamburgerActive) {\n this.hamburgerActive = shouldHamburger;\n this.emitOverflowChange();\n }\n\n // Set height to show only first row (or hide all if hamburger is active)\n if (shouldHamburger && firstRowBottom > 0) {\n this.containerHeight = firstRowBottom;\n } else {\n this.containerHeight = null;\n }\n } else {\n // 'more' mode\n const newOverflowingIds = new Set(overflowItems.map(i => i.id));\n\n // Check if we need to make room for the \"more\" button\n if (newOverflowingIds.size > 0 && this.moreButtonEl) {\n const moreRect = this.moreButtonEl.getBoundingClientRect();\n const moreTop = moreRect.top - containerRect.top;\n\n // If \"more\" button is not on the first row, we need to hide one more item\n if (moreTop > minTop + tolerance) {\n // Find the last visible item and move it to overflow\n const lastVisible = firstRowItems[firstRowItems.length - 1];\n if (lastVisible) {\n newOverflowingIds.add(lastVisible.id);\n }\n }\n }\n\n // Check if overflow state changed\n const hasChanged =\n newOverflowingIds.size !== this.overflowingIds.size ||\n ![...newOverflowingIds].every(id => this.overflowingIds.has(id));\n\n if (hasChanged) {\n this.overflowingIds = newOverflowingIds;\n this.emitOverflowChange();\n }\n\n // Set container height to show only first row\n if ((newOverflowingIds?.size ?? 0) > 0 && firstRowBottom > 0) {\n this.containerHeight = firstRowBottom;\n } else {\n this.containerHeight = null;\n }\n }\n }\n\n private emitOverflowChange() {\n this.leBarOverflowChange.emit({\n overflowingIds: [...(this.overflowingIds ?? [])],\n hamburgerActive: this.hamburgerActive,\n });\n }\n\n private updateScrollState() {\n if (this.overflow !== 'scroll' || !this.itemsContainerEl) {\n this.canScrollStart = false;\n this.canScrollEnd = false;\n return;\n }\n\n const el = this.itemsContainerEl;\n this.canScrollStart = el.scrollLeft > 0;\n this.canScrollEnd = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;\n }\n\n private handleScroll = () => {\n this.updateScrollState();\n };\n\n private scrollToStart = () => {\n if (!this.itemsContainerEl) return;\n\n const items = this.getSlottedItems();\n const container = this.itemsContainerEl;\n\n // Find the scroll position of the previous item\n const currentScroll = container.scrollLeft;\n let targetScroll = 0;\n\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n // Calculate item's left edge relative to container's scroll position\n const itemLeft = item.offsetLeft - container.offsetLeft;\n\n // If this item starts before current scroll position, scroll to it\n if (itemLeft < currentScroll - 1) {\n targetScroll = itemLeft;\n break;\n }\n }\n\n container.scrollTo({ left: targetScroll, behavior: 'smooth' });\n\n // Update scroll state after animation\n setTimeout(() => this.updateScrollState(), 300);\n };\n\n private scrollToEnd = () => {\n if (!this.itemsContainerEl) return;\n\n const container = this.itemsContainerEl;\n const items = this.getSlottedItems();\n\n if (items.length === 0) return;\n\n const containerWidth = container.clientWidth;\n const currentScroll = container.scrollLeft;\n\n let targetScroll = container.scrollWidth - containerWidth;\n\n for (const item of items) {\n // Calculate item's right edge relative to container\n const itemLeft = item.offsetLeft - container.offsetLeft;\n\n // If this is the next item to scroll to from left to right then scroll to it\n if (itemLeft > currentScroll + 1) {\n targetScroll = itemLeft;\n break;\n }\n }\n\n container.scrollTo({ left: Math.max(0, targetScroll), behavior: 'smooth' });\n\n // Update scroll state after animation\n setTimeout(() => this.updateScrollState(), 300);\n };\n\n private togglePopover = () => {\n this.popoverOpen = !this.popoverOpen;\n };\n\n private closePopover = () => {\n this.popoverOpen = false;\n };\n\n private toggleAllMenu = () => {\n this.allMenuOpen = !this.allMenuOpen;\n };\n\n private closeAllMenu = () => {\n this.allMenuOpen = false;\n };\n\n private handleItemClick = (_e: MouseEvent, id: string) => {\n // Close popover when an item inside is clicked\n const originalItem = this.itemMap.get(id);\n\n if (originalItem) {\n // Clone the click to the original item\n const cloneEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n originalItem.dispatchEvent(cloneEvent);\n }\n\n this.closePopover();\n this.closeAllMenu();\n };\n\n private renderMoreButton() {\n const hasSlottedMore = this.el.querySelector('[slot=\"more\"]');\n\n return (\n <button\n class=\"bar-more-button\"\n part=\"more-button\"\n ref={el => (this.moreButtonEl = el)}\n onClick={this.togglePopover}\n aria-expanded={String(this.popoverOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedMore ? <slot name=\"more\" /> : <le-icon name=\"ellipsis-horizontal\" />}\n </button>\n );\n }\n\n private renderHamburgerButton() {\n const hasSlottedHamburger = this.el.querySelector('[slot=\"hamburger\"]');\n\n return (\n <button\n class=\"bar-hamburger-button\"\n part=\"hamburger-button\"\n onClick={this.togglePopover}\n aria-expanded={String(this.popoverOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedHamburger ? <slot name=\"hamburger\" /> : <le-icon name=\"hamburger\" />}\n </button>\n );\n }\n\n private renderScrollArrows() {\n if (!this.arrows || this.overflow !== 'scroll') return null;\n\n const hasSlottedStartArrow = this.el.querySelector('[slot=\"start-arrow\"]');\n const hasSlottedEndArrow = this.el.querySelector('[slot=\"end-arrow\"]');\n\n return [\n <button\n class={classnames('bar-arrow', 'bar-arrow-start', {\n disabled: !this.canScrollStart,\n })}\n part=\"arrow-start\"\n onClick={this.scrollToStart}\n disabled={!this.canScrollStart}\n aria-label=\"Scroll to start\"\n >\n {hasSlottedStartArrow ? (\n <slot name=\"start-arrow\" />\n ) : (\n <le-icon name=\"chevron-down\" class=\"arrow-icon-start\" />\n )}\n </button>,\n <button\n class={classnames('bar-arrow', 'bar-arrow-end', {\n disabled: !this.canScrollEnd,\n })}\n part=\"arrow-end\"\n onClick={this.scrollToEnd}\n disabled={!this.canScrollEnd}\n aria-label=\"Scroll to end\"\n >\n {hasSlottedEndArrow ? (\n <slot name=\"end-arrow\" />\n ) : (\n <le-icon name=\"chevron-down\" class=\"arrow-icon-end\" />\n )}\n </button>,\n ];\n }\n\n private renderAllMenuButton() {\n if (!this.showAllMenu) return null;\n\n const hasSlottedAllMenu = this.el.querySelector('[slot=\"all-menu\"]');\n\n return (\n <button\n class=\"bar-all-menu-button\"\n part=\"all-menu-button\"\n onClick={this.toggleAllMenu}\n aria-expanded={String(this.allMenuOpen)}\n aria-haspopup=\"true\"\n >\n {hasSlottedAllMenu ? <slot name=\"all-menu\" /> : <le-icon name=\"hamburger\" />}\n </button>\n );\n }\n\n private renderPopoverContent(itemsToShow: { id: string; item: HTMLElement }[]) {\n return (\n <div class=\"bar-popover-content\" part=\"popover-content\">\n {itemsToShow.map(({ id, item }) => (\n <div\n class=\"bar-popover-item\"\n key={id}\n onClick={(e: MouseEvent) => this.handleItemClick(e, id)}\n innerHTML={item.outerHTML}\n />\n ))}\n </div>\n );\n }\n\n private renderOverflowPopover() {\n if (this.overflow !== 'more' && this.overflow !== 'hamburger') return null;\n\n const items = this.getSlottedItems();\n let itemsToShow: { id: string; item: HTMLElement }[] = [];\n\n if (this.overflow === 'hamburger' && this.hamburgerActive) {\n // Show all items in hamburger mode\n itemsToShow = items.map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }));\n } else if (this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) {\n // Show only overflowing items\n itemsToShow = items\n .map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }))\n .filter(({ id }) => this.overflowingIds?.has(id));\n }\n\n if (itemsToShow.length === 0) return null;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.popoverOpen}\n position=\"bottom\"\n align=\"end\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n onLePopoverClose={this.closePopover}\n >\n <div slot=\"trigger\" class=\"bar-overflow-trigger\">\n {this.overflow === 'hamburger' ? this.renderHamburgerButton() : this.renderMoreButton()}\n </div>\n {this.renderPopoverContent(itemsToShow)}\n </le-popover>\n );\n }\n\n private renderAllMenuPopover() {\n if (!this.showAllMenu) return null;\n\n const items = this.getSlottedItems();\n const itemsToShow = items.map((item, index) => ({\n id: this.getItemId(item, index),\n item,\n }));\n\n const position = this.showAllMenu === 'start' ? 'start' : 'end';\n\n return (\n <le-popover\n mode=\"default\"\n open={this.allMenuOpen}\n position=\"bottom\"\n align={position}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n onLePopoverClose={this.closeAllMenu}\n >\n <div slot=\"trigger\" class=\"bar-all-menu-trigger\">\n {this.renderAllMenuButton()}\n </div>\n {this.renderPopoverContent(itemsToShow)}\n </le-popover>\n );\n }\n\n render() {\n const showOverflowButton =\n !this.disablePopover &&\n ((this.overflow === 'more' && (this.overflowingIds?.size ?? 0) > 0) ||\n (this.overflow === 'hamburger' && this.hamburgerActive));\n\n const containerStyle: { [key: string]: string } = {};\n if (\n this.containerHeight !== null &&\n (this.overflow === 'more' || this.overflow === 'hamburger')\n ) {\n containerStyle.height = `${this.containerHeight}px`;\n }\n\n const showAllMenuAtStart = this.showAllMenu === 'start';\n const showAllMenuAtEnd = this.showAllMenu === true || this.showAllMenu === 'end';\n\n return (\n <Host\n class={classnames({\n 'overflow-more': this.overflow === 'more',\n 'overflow-scroll': this.overflow === 'scroll',\n 'overflow-hamburger': this.overflow === 'hamburger',\n 'overflow-wrap': this.overflow === 'wrap',\n 'hamburger-active': this.hamburgerActive,\n 'has-overflow': (this.overflowingIds?.size ?? 0) > 0 || this.hamburgerActive,\n })}\n >\n <div\n class={classnames('bar-container', {\n [`align-${this.alignItems}`]: true,\n })}\n part=\"container\"\n >\n {/* Start controls */}\n {this.overflow === 'scroll' && this.arrows && (\n <div class=\"bar-controls bar-controls-start\">{this.renderScrollArrows()?.[0]}</div>\n )}\n\n {showAllMenuAtStart && (\n <div class=\"bar-controls bar-controls-start\">{this.renderAllMenuPopover()}</div>\n )}\n\n {/* Items container */}\n <div\n class={classnames('bar-items', {\n 'is-scrollable': this.overflow === 'scroll',\n 'is-wrapping': this.overflow === 'wrap',\n })}\n style={containerStyle}\n ref={el => {\n this.itemsContainerEl = el;\n this.observeContainer(el);\n }}\n onScroll={this.overflow === 'scroll' ? this.handleScroll : undefined}\n >\n <slot />\n </div>\n\n {/* End controls */}\n {showOverflowButton && (\n <div class=\"bar-controls bar-controls-end\">{this.renderOverflowPopover()}</div>\n )}\n\n {showAllMenuAtEnd && (\n <div class=\"bar-controls bar-controls-end\">{this.renderAllMenuPopover()}</div>\n )}\n\n {this.overflow === 'scroll' && this.arrows && (\n <div class=\"bar-controls bar-controls-end\">{this.renderScrollArrows()?.[1]}</div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -219,8 +219,8 @@ export class LeNavigation {
|
|
|
219
219
|
requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
|
|
220
220
|
};
|
|
221
221
|
handleBarOverflowChange = (e) => {
|
|
222
|
-
this.overflowIds = e.detail.overflowingIds;
|
|
223
|
-
this.hamburgerActive = e.detail.hamburgerActive;
|
|
222
|
+
this.overflowIds = e.detail.overflowingIds || [];
|
|
223
|
+
this.hamburgerActive = e.detail.hamburgerActive || false;
|
|
224
224
|
};
|
|
225
225
|
openOverflowPopover = () => {
|
|
226
226
|
this.overflowPopoverOpen = true;
|
|
@@ -336,7 +336,7 @@ export class LeNavigation {
|
|
|
336
336
|
}
|
|
337
337
|
renderOverflowPopover() {
|
|
338
338
|
const items = this.parsedItems;
|
|
339
|
-
const overflowSet = new Set(this.overflowIds);
|
|
339
|
+
const overflowSet = new Set(this.overflowIds || []);
|
|
340
340
|
// Determine which items to show in the popover
|
|
341
341
|
let itemsToShow;
|
|
342
342
|
if (this.hamburgerActive) {
|
|
@@ -362,7 +362,7 @@ export class LeNavigation {
|
|
|
362
362
|
renderHorizontal() {
|
|
363
363
|
const items = this.parsedItems;
|
|
364
364
|
const overflowMode = this.getOverflowMode();
|
|
365
|
-
const showOverflowButton = this.overflowIds
|
|
365
|
+
const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;
|
|
366
366
|
return (h("div", { class: "nav-horizontal-wrapper" }, h("le-bar", { class: classnames('nav-bar', {
|
|
367
367
|
'align-end': this.align === 'end',
|
|
368
368
|
'align-center': this.align === 'center',
|
|
@@ -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';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\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 /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\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 // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\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 handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds;\n this.hamburgerActive = e.detail.hamburgerActive;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\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\" data-bar-id={id}>\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\" data-bar-id={id}>\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 getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\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';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\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 /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\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 // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\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 handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds || [];\n this.hamburgerActive = e.detail.hamburgerActive || false;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\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\" data-bar-id={id}>\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\" data-bar-id={id}>\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 getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds || []);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\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"]}
|