le-kit 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/cjs/{le-button_13.cjs.entry.js → le-bar_16.cjs.entry.js} +951 -5
  2. package/dist/cjs/le-kit.cjs.js +1 -1
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/collection/components/le-bar/le-bar.js +59 -7
  5. package/dist/collection/components/le-bar/le-bar.js.map +1 -1
  6. package/dist/collection/components/le-component/le-component.js +1 -1
  7. package/dist/collection/components/le-component/le-component.js.map +1 -1
  8. package/dist/collection/components/le-navigation/le-navigation.js +3 -3
  9. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
  10. package/dist/collection/components/le-select/le-select.js +3 -3
  11. package/dist/collection/components/le-select/le-select.js.map +1 -1
  12. package/dist/collection/dist/components/assets/custom-elements.json +1169 -1151
  13. package/dist/components/assets/custom-elements.json +1169 -1151
  14. package/dist/components/le-bar2.js +40 -7
  15. package/dist/components/le-bar2.js.map +1 -1
  16. package/dist/components/le-button2.js +4 -4
  17. package/dist/components/le-button2.js.map +1 -1
  18. package/dist/components/le-navigation.js +2 -2
  19. package/dist/components/le-navigation.js.map +1 -1
  20. package/dist/docs.json +33 -4
  21. package/dist/esm/{le-button_13.entry.js → le-bar_16.entry.js} +951 -8
  22. package/dist/esm/le-kit.js +1 -1
  23. package/dist/esm/loader.js +1 -1
  24. package/dist/le-kit/dist/components/assets/custom-elements.json +1169 -1151
  25. package/dist/le-kit/le-kit.esm.js +1 -1
  26. package/dist/le-kit/p-dea78542.entry.js +2 -0
  27. package/dist/le-kit/p-dea78542.entry.js.map +1 -0
  28. package/dist/types/components/le-bar/le-bar.d.ts +6 -0
  29. package/dist/types/components.d.ts +14 -4
  30. package/package.json +1 -1
  31. package/dist/cjs/le-bar.cjs.entry.js +0 -428
  32. package/dist/cjs/le-icon.cjs.entry.js +0 -110
  33. package/dist/cjs/le-navigation.cjs.entry.js +0 -393
  34. package/dist/esm/le-bar.entry.js +0 -426
  35. package/dist/esm/le-bar.entry.js.map +0 -1
  36. package/dist/esm/le-icon.entry.js +0 -108
  37. package/dist/esm/le-icon.entry.js.map +0 -1
  38. package/dist/esm/le-navigation.entry.js +0 -391
  39. package/dist/esm/le-navigation.entry.js.map +0 -1
  40. package/dist/le-kit/p-0efce278.entry.js +0 -2
  41. package/dist/le-kit/p-0efce278.entry.js.map +0 -1
  42. package/dist/le-kit/p-2102a152.entry.js +0 -2
  43. package/dist/le-kit/p-2102a152.entry.js.map +0 -1
  44. package/dist/le-kit/p-53d9c363.entry.js +0 -2
  45. package/dist/le-kit/p-53d9c363.entry.js.map +0 -1
  46. package/dist/le-kit/p-94f774af.entry.js +0 -2
  47. package/dist/le-kit/p-94f774af.entry.js.map +0 -1
@@ -38,6 +38,12 @@ const LeBar = /*@__PURE__*/ proxyCustomElement(class LeBar extends HTMLElement {
38
38
  * custom overflow handling via the leBarOverflowChange event.
39
39
  */
40
40
  disablePopover = false;
41
+ /**
42
+ * Minimum number of visible items required when using "more" overflow mode.
43
+ * If fewer items would be visible, the bar falls back to hamburger mode.
44
+ * Only applies when overflow is "more".
45
+ */
46
+ minVisibleItems = 0;
41
47
  /**
42
48
  * Show an "all items" menu button.
43
49
  * - `false`: Don't show
@@ -206,7 +212,7 @@ const LeBar = /*@__PURE__*/ proxyCustomElement(class LeBar extends HTMLElement {
206
212
  }
207
213
  else {
208
214
  // 'more' mode
209
- const newOverflowingIds = new Set(overflowItems.map(i => i.id));
215
+ let newOverflowingIds = new Set(overflowItems.map(i => i.id));
210
216
  // Check if we need to make room for the "more" button
211
217
  if (newOverflowingIds.size > 0 && this.moreButtonEl) {
212
218
  const moreRect = this.moreButtonEl.getBoundingClientRect();
@@ -220,9 +226,35 @@ const LeBar = /*@__PURE__*/ proxyCustomElement(class LeBar extends HTMLElement {
220
226
  }
221
227
  }
222
228
  }
229
+ // Check if we should fallback to hamburger mode
230
+ // This happens when minVisibleItems is set and fewer items would be visible
231
+ const visibleCount = items.length - newOverflowingIds.size;
232
+ const shouldFallbackToHamburger = this.minVisibleItems > 0 &&
233
+ newOverflowingIds.size > 0 &&
234
+ visibleCount < this.minVisibleItems;
235
+ if (shouldFallbackToHamburger) {
236
+ // Switch to hamburger mode - all items go into the menu
237
+ if (!this.hamburgerActive) {
238
+ this.hamburgerActive = true;
239
+ this.overflowingIds = new Set();
240
+ this.emitOverflowChange();
241
+ }
242
+ // Set height to show only first row
243
+ if (firstRowBottom > 0) {
244
+ this.containerHeight = firstRowBottom;
245
+ }
246
+ else {
247
+ this.containerHeight = null;
248
+ }
249
+ return;
250
+ }
251
+ // Not falling back to hamburger - ensure hamburgerActive is false
252
+ if (this.hamburgerActive) {
253
+ this.hamburgerActive = false;
254
+ }
223
255
  // Check if overflow state changed
224
- const hasChanged = newOverflowingIds.size !== this.overflowingIds.size ||
225
- ![...newOverflowingIds].every(id => this.overflowingIds.has(id));
256
+ const hasChanged = (newOverflowingIds?.size ?? 0) !== (this.overflowingIds?.size ?? 0) ||
257
+ ![...newOverflowingIds].every(id => this.overflowingIds?.has(id));
226
258
  if (hasChanged) {
227
259
  this.overflowingIds = newOverflowingIds;
228
260
  this.emitOverflowChange();
@@ -405,22 +437,22 @@ const LeBar = /*@__PURE__*/ proxyCustomElement(class LeBar extends HTMLElement {
405
437
  }
406
438
  const showAllMenuAtStart = this.showAllMenu === 'start';
407
439
  const showAllMenuAtEnd = this.showAllMenu === true || this.showAllMenu === 'end';
408
- return (h(Host, { key: 'b15277217f45b9a2b4015e1062192ad7bfcafae3', class: classnames({
440
+ return (h(Host, { key: '56d04e4504ed7ce1d8e78a825c71c71c074d0b62', class: classnames({
409
441
  'overflow-more': this.overflow === 'more',
410
442
  'overflow-scroll': this.overflow === 'scroll',
411
443
  'overflow-hamburger': this.overflow === 'hamburger',
412
444
  'overflow-wrap': this.overflow === 'wrap',
413
445
  'hamburger-active': this.hamburgerActive,
414
446
  'has-overflow': (this.overflowingIds?.size ?? 0) > 0 || this.hamburgerActive,
415
- }) }, h("div", { key: 'cc8ff523ebc98f307cae7313a1998468e98dd712', class: classnames('bar-container', {
447
+ }) }, h("div", { key: '4e7aeb4c84a9964e19012c3d05827fa8406988b0', class: classnames('bar-container', {
416
448
  [`align-${this.alignItems}`]: true,
417
- }), 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', {
449
+ }), part: "container" }, this.overflow === 'scroll' && this.arrows && (h("div", { key: '2e3ae04c00e88e5055216dbc5b6d53574c450470', class: "bar-controls bar-controls-start" }, this.renderScrollArrows()?.[0])), showAllMenuAtStart && (h("div", { key: '9628c8dc2b15d9358baad63b19c75fd933eeb19a', class: "bar-controls bar-controls-start" }, this.renderAllMenuPopover())), h("div", { key: 'd1feb9603d0ff4247852aadb62cb920a5f5a1921', class: classnames('bar-items', {
418
450
  'is-scrollable': this.overflow === 'scroll',
419
451
  'is-wrapping': this.overflow === 'wrap',
420
452
  }), style: containerStyle, ref: el => {
421
453
  this.itemsContainerEl = el;
422
454
  this.observeContainer(el);
423
- }, 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])))));
455
+ }, onScroll: this.overflow === 'scroll' ? this.handleScroll : undefined }, h("slot", { key: '338698e038b9df4c7b163017ceb0675b834160e4' })), showOverflowButton && (h("div", { key: 'd619fcda1b0c28247af60899f73cc076b0517787', class: "bar-controls bar-controls-end" }, this.renderOverflowPopover())), showAllMenuAtEnd && (h("div", { key: 'fd9fef90194aabb8d48e77c8f7615daa5d7297ac', class: "bar-controls bar-controls-end" }, this.renderAllMenuPopover())), this.overflow === 'scroll' && this.arrows && (h("div", { key: 'bcffb914e2788767c3765351a3eeae771f3e115f', class: "bar-controls bar-controls-end" }, this.renderScrollArrows()?.[1])))));
424
456
  }
425
457
  static get watchers() { return {
426
458
  "overflow": ["handleOverflowChange"]
@@ -431,6 +463,7 @@ const LeBar = /*@__PURE__*/ proxyCustomElement(class LeBar extends HTMLElement {
431
463
  "alignItems": [513, "align-items"],
432
464
  "arrows": [4],
433
465
  "disablePopover": [4, "disable-popover"],
466
+ "minVisibleItems": [2, "min-visible-items"],
434
467
  "showAllMenu": [8, "show-all-menu"],
435
468
  "popoverOpen": [32],
436
469
  "hamburgerActive": [32],
@@ -1 +1 @@
1
- {"file":"le-bar2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-bar/le-bar.css?tag=le-bar&encapsulation=shadow","src/components/le-bar/le-bar.tsx"],"sourcesContent":["/**\n * le-bar - Flexible bar with overflow handling\n */\n\n:host {\n display: block;\n\n /* Spacing & sizing */\n --le-bar-gap: var(--le-spacing-2);\n --le-bar-padding: var(--le-spacing-2);\n --le-bar-min-height: 2.5rem;\n\n /* Colors */\n --le-bar-background: transparent;\n --le-bar-border-color: var(--le-color-border);\n --le-bar-border-radius: var(--le-radius-md);\n\n /* Button styling */\n --le-bar-button-size: 2rem;\n --le-bar-button-color: var(--le-color-text-primary);\n --le-bar-button-hover-bg: var(--le-color-gray-100);\n --le-bar-button-border-radius: var(--le-radius-sm);\n\n /* Arrow styling */\n --le-bar-arrow-size: 1.5rem;\n\n /* Popover */\n --le-bar-popover-min-width: 200px;\n --le-bar-popover-gap: var(--le-spacing-1);\n}\n\n/* ============================================\n * MAIN CONTAINER\n * ============================================ */\n\n.bar-container {\n display: flex;\n align-items: center;\n gap: var(--le-bar-gap);\n min-height: var(--le-bar-min-height);\n background: var(--le-bar-background);\n border-radius: var(--le-bar-border-radius);\n padding: var(--le-bar-padding);\n}\n\n/* Alignment variations */\n.bar-container.align-start {\n justify-content: flex-start;\n}\n\n.bar-container.align-end .bar-items {\n justify-content: flex-end;\n}\n\n.bar-container.align-center .bar-items {\n justify-content: center;\n}\n\n.bar-container.align-stretch .bar-items {\n /* justify-content: stretch; */\n justify-content: space-evenly;\n}\n\n\n/* ============================================\n * ITEMS CONTAINER\n * ============================================ */\n\n.bar-items {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--le-bar-gap);\n overflow: hidden;\n min-width: 0;\n flex: 1 1 0%;\n position: relative;\n}\n\n/* When height is set (overflow mode), clip content */\n.bar-items[style*=\"height\"] {\n overflow: hidden;\n}\n\n/* Scroll mode */\n.bar-items.is-scrollable {\n flex-wrap: nowrap;\n overflow-x: auto;\n overflow-y: hidden;\n scroll-behavior: smooth;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n\n /* Hide scrollbar but keep functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.bar-items.is-scrollable::-webkit-scrollbar {\n display: none;\n}\n\n.bar-items.is-scrollable ::slotted(*) {\n scroll-snap-align: start;\n flex-shrink: 0;\n}\n\n/* Wrap mode */\n.bar-items.is-wrapping {\n flex-wrap: wrap;\n overflow: visible;\n height: auto !important;\n}\n\n/* ============================================\n * CONTROLS (arrows, buttons)\n * ============================================ */\n\n.bar-controls {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-1);\n flex-shrink: 0;\n}\n\n.bar-controls-start {\n order: -1;\n}\n\n.bar-controls-end {\n order: 1;\n}\n\n/* ============================================\n * BUTTONS (more, hamburger, all-menu)\n * ============================================ */\n\n.bar-more-button,\n.bar-hamburger-button,\n.bar-all-menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--le-bar-button-size);\n height: var(--le-bar-button-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-bar-button-color);\n border-radius: var(--le-bar-button-border-radius);\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.bar-more-button:hover,\n.bar-hamburger-button:hover,\n.bar-all-menu-button:hover {\n background: var(--le-bar-button-hover-bg);\n}\n\n.bar-more-button:focus-visible,\n.bar-hamburger-button:focus-visible,\n.bar-all-menu-button:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* ============================================\n * SCROLL ARROWS\n * ============================================ */\n\n.bar-arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--le-bar-arrow-size);\n height: var(--le-bar-arrow-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-bar-button-color);\n border-radius: var(--le-bar-button-border-radius);\n cursor: pointer;\n transition: background-color 0.15s ease, opacity 0.15s ease;\n}\n\n.bar-arrow:hover:not(:disabled) {\n background: var(--le-bar-button-hover-bg);\n}\n\n.bar-arrow:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.bar-arrow:disabled,\n.bar-arrow.disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n/* Rotate chevron icons for arrows */\n.arrow-icon-start {\n transform: rotate(90deg);\n}\n\n.arrow-icon-end {\n transform: rotate(-90deg);\n}\n\n/* ============================================\n * POPOVER TRIGGERS\n * ============================================ */\n\n.bar-overflow-trigger,\n.bar-all-menu-trigger {\n display: inline-flex;\n}\n\n/* ============================================\n * POPOVER CONTENT\n * ============================================ */\n\n.bar-popover-content {\n display: flex;\n flex-direction: column;\n gap: var(--le-bar-popover-gap);\n min-width: var(--le-bar-popover-min-width);\n padding: var(--le-spacing-2);\n}\n\n.bar-popover-item {\n cursor: pointer;\n}\n\n.bar-popover-item:hover {\n background: var(--le-bar-button-hover-bg);\n border-radius: var(--le-bar-button-border-radius);\n}\n\n/* ============================================\n * HAMBURGER MODE - HIDE ITEMS\n * ============================================ */\n\n:host(.hamburger-active) .bar-items {\n visibility: hidden;\n pointer-events: none;\n}\n\n\n/* ============================================\n * HOST VARIANTS\n * ============================================ */\n\n/* Remove redundant flex:1 since bar-items already has it */\n","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"],"version":3}
1
+ {"file":"le-bar2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-bar/le-bar.css?tag=le-bar&encapsulation=shadow","src/components/le-bar/le-bar.tsx"],"sourcesContent":["/**\n * le-bar - Flexible bar with overflow handling\n */\n\n:host {\n display: block;\n\n /* Spacing & sizing */\n --le-bar-gap: var(--le-spacing-2);\n --le-bar-padding: var(--le-spacing-2);\n --le-bar-min-height: 2.5rem;\n\n /* Colors */\n --le-bar-background: transparent;\n --le-bar-border-color: var(--le-color-border);\n --le-bar-border-radius: var(--le-radius-md);\n\n /* Button styling */\n --le-bar-button-size: 2rem;\n --le-bar-button-color: var(--le-color-text-primary);\n --le-bar-button-hover-bg: var(--le-color-gray-100);\n --le-bar-button-border-radius: var(--le-radius-sm);\n\n /* Arrow styling */\n --le-bar-arrow-size: 1.5rem;\n\n /* Popover */\n --le-bar-popover-min-width: 200px;\n --le-bar-popover-gap: var(--le-spacing-1);\n}\n\n/* ============================================\n * MAIN CONTAINER\n * ============================================ */\n\n.bar-container {\n display: flex;\n align-items: center;\n gap: var(--le-bar-gap);\n min-height: var(--le-bar-min-height);\n background: var(--le-bar-background);\n border-radius: var(--le-bar-border-radius);\n padding: var(--le-bar-padding);\n}\n\n/* Alignment variations */\n.bar-container.align-start {\n justify-content: flex-start;\n}\n\n.bar-container.align-end .bar-items {\n justify-content: flex-end;\n}\n\n.bar-container.align-center .bar-items {\n justify-content: center;\n}\n\n.bar-container.align-stretch .bar-items {\n /* justify-content: stretch; */\n justify-content: space-evenly;\n}\n\n\n/* ============================================\n * ITEMS CONTAINER\n * ============================================ */\n\n.bar-items {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--le-bar-gap);\n overflow: hidden;\n min-width: 0;\n flex: 1 1 0%;\n position: relative;\n}\n\n/* When height is set (overflow mode), clip content */\n.bar-items[style*=\"height\"] {\n overflow: hidden;\n}\n\n/* Scroll mode */\n.bar-items.is-scrollable {\n flex-wrap: nowrap;\n overflow-x: auto;\n overflow-y: hidden;\n scroll-behavior: smooth;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n\n /* Hide scrollbar but keep functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.bar-items.is-scrollable::-webkit-scrollbar {\n display: none;\n}\n\n.bar-items.is-scrollable ::slotted(*) {\n scroll-snap-align: start;\n flex-shrink: 0;\n}\n\n/* Wrap mode */\n.bar-items.is-wrapping {\n flex-wrap: wrap;\n overflow: visible;\n height: auto !important;\n}\n\n/* ============================================\n * CONTROLS (arrows, buttons)\n * ============================================ */\n\n.bar-controls {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-1);\n flex-shrink: 0;\n}\n\n.bar-controls-start {\n order: -1;\n}\n\n.bar-controls-end {\n order: 1;\n}\n\n/* ============================================\n * BUTTONS (more, hamburger, all-menu)\n * ============================================ */\n\n.bar-more-button,\n.bar-hamburger-button,\n.bar-all-menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--le-bar-button-size);\n height: var(--le-bar-button-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-bar-button-color);\n border-radius: var(--le-bar-button-border-radius);\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.bar-more-button:hover,\n.bar-hamburger-button:hover,\n.bar-all-menu-button:hover {\n background: var(--le-bar-button-hover-bg);\n}\n\n.bar-more-button:focus-visible,\n.bar-hamburger-button:focus-visible,\n.bar-all-menu-button:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* ============================================\n * SCROLL ARROWS\n * ============================================ */\n\n.bar-arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--le-bar-arrow-size);\n height: var(--le-bar-arrow-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-bar-button-color);\n border-radius: var(--le-bar-button-border-radius);\n cursor: pointer;\n transition: background-color 0.15s ease, opacity 0.15s ease;\n}\n\n.bar-arrow:hover:not(:disabled) {\n background: var(--le-bar-button-hover-bg);\n}\n\n.bar-arrow:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.bar-arrow:disabled,\n.bar-arrow.disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n/* Rotate chevron icons for arrows */\n.arrow-icon-start {\n transform: rotate(90deg);\n}\n\n.arrow-icon-end {\n transform: rotate(-90deg);\n}\n\n/* ============================================\n * POPOVER TRIGGERS\n * ============================================ */\n\n.bar-overflow-trigger,\n.bar-all-menu-trigger {\n display: inline-flex;\n}\n\n/* ============================================\n * POPOVER CONTENT\n * ============================================ */\n\n.bar-popover-content {\n display: flex;\n flex-direction: column;\n gap: var(--le-bar-popover-gap);\n min-width: var(--le-bar-popover-min-width);\n padding: var(--le-spacing-2);\n}\n\n.bar-popover-item {\n cursor: pointer;\n}\n\n.bar-popover-item:hover {\n background: var(--le-bar-button-hover-bg);\n border-radius: var(--le-bar-button-border-radius);\n}\n\n/* ============================================\n * HAMBURGER MODE - HIDE ITEMS\n * ============================================ */\n\n:host(.hamburger-active) .bar-items {\n visibility: hidden;\n pointer-events: none;\n}\n\n\n/* ============================================\n * HOST VARIANTS\n * ============================================ */\n\n/* Remove redundant flex:1 since bar-items already has it */\n","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 * Minimum number of visible items required when using \"more\" overflow mode.\n * If fewer items would be visible, the bar falls back to hamburger mode.\n * Only applies when overflow is \"more\".\n */\n @Prop() minVisibleItems: number = 0;\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 let 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 we should fallback to hamburger mode\n // This happens when minVisibleItems is set and fewer items would be visible\n const visibleCount = items.length - newOverflowingIds.size;\n const shouldFallbackToHamburger =\n this.minVisibleItems > 0 &&\n newOverflowingIds.size > 0 &&\n visibleCount < this.minVisibleItems;\n\n if (shouldFallbackToHamburger) {\n // Switch to hamburger mode - all items go into the menu\n if (!this.hamburgerActive) {\n this.hamburgerActive = true;\n this.overflowingIds = new Set();\n this.emitOverflowChange();\n }\n\n // Set height to show only first row\n if (firstRowBottom > 0) {\n this.containerHeight = firstRowBottom;\n } else {\n this.containerHeight = null;\n }\n return;\n }\n\n // Not falling back to hamburger - ensure hamburgerActive is false\n if (this.hamburgerActive) {\n this.hamburgerActive = false;\n }\n\n // Check if overflow state changed\n const hasChanged =\n (newOverflowingIds?.size ?? 0) !== (this.overflowingIds?.size ?? 0) ||\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"],"version":3}
@@ -639,7 +639,7 @@ const LeSelect = /*@__PURE__*/ proxyCustomElement(class LeSelect extends HTMLEle
639
639
  this.__registerHost();
640
640
  }
641
641
  this.__attachShadow();
642
- this.leChange = createEvent(this, "leChange", 7);
642
+ this.leChange = createEvent(this, "change", 7);
643
643
  this.leOpen = createEvent(this, "leOpen", 7);
644
644
  this.leClose = createEvent(this, "leClose", 7);
645
645
  }
@@ -801,13 +801,13 @@ const LeSelect = /*@__PURE__*/ proxyCustomElement(class LeSelect extends HTMLEle
801
801
  }
802
802
  render() {
803
803
  const hasValue = this.selectedOption !== undefined;
804
- return (h("le-component", { key: '1659550d258d0d647cefa5715cc9cbcf5ac3b6c7', component: "le-select" }, h("le-dropdown-base", { key: '4210afe927afaf35adeb25794d684d8bf6265604', ref: el => (this.dropdownEl = el), options: this.parsedOptions, value: this.value, disabled: this.disabled, filterFn: this.searchable ? this.filterOption : undefined, filterQuery: this.searchQuery, onLeOptionSelect: this.handleOptionSelect, onLeDropdownOpen: this.handleDropdownOpen, onLeDropdownClose: this.handleDropdownClose, fullWidth: this.fullWidth }, h("le-button", { key: '204b62bae909fb979f84f79ab64a7405f44df0a7', variant: this.variant && this.variant !== 'default' ? this.variant : 'outlined', slot: "trigger", align: "space-between", class: {
804
+ return (h("le-component", { key: '1d67b699f3638ef75a15fecdbba80a531ea90681', component: "le-select" }, h("le-dropdown-base", { key: '9a52d99cdf1f0f0c1b9de6e10f5a694b580469ab', ref: el => (this.dropdownEl = el), options: this.parsedOptions, value: this.value, disabled: this.disabled, filterFn: this.searchable ? this.filterOption : undefined, filterQuery: this.searchQuery, onLeOptionSelect: this.handleOptionSelect, onLeDropdownOpen: this.handleDropdownOpen, onLeDropdownClose: this.handleDropdownClose, fullWidth: this.fullWidth }, h("le-button", { key: '20c02507679ed44cca089e15801ac8f57cbe3938', variant: this.variant && this.variant !== 'default' ? this.variant : 'outlined', slot: "trigger", align: "space-between", class: {
805
805
  'select-trigger': true,
806
806
  'has-value': hasValue,
807
807
  'is-open': this.open,
808
808
  }, mode: "default", size: this.size, disabled: this.disabled, "aria-haspopup": "listbox", "aria-expanded": this.open ? 'true' : 'false', onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown, fullWidth: this.fullWidth, iconStart: hasValue && this.selectedOption?.iconStart
809
809
  ? this.renderIcon(this.selectedOption.iconStart)
810
- : null, iconEnd: h("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("path", { d: "M4 6l4 4 4-4" })) }, h("span", { key: 'abb56957a4ddf6b39c3554b26e46c0ad51e022be', class: "trigger-label" }, hasValue ? this.selectedOption.label : this.placeholder)), this.searchable && this.open && (h("div", { key: '25d58fdfddc45f7fde1a41defdbd50dbddd70ea5', class: "multiselect-search", slot: "header" }, h("le-string-input", { key: '81b290d28bed6190b9ec165897ec2e7d758575bf', mode: "default", inputRef: el => (this.inputEl = el), class: "search-input", placeholder: "Search...", value: this.searchQuery, onInput: this.handleSearchInput })))), this.name && h("input", { key: '70e413d81035cdd61bfdaeae27ba3ced0a25f544', type: "hidden", name: this.name, value: this.value?.toString() ?? '' })));
810
+ : null, iconEnd: h("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("path", { d: "M4 6l4 4 4-4" })) }, h("span", { key: '5eea76015ea63775315e5bf46e7b99c65cd5bc22', class: "trigger-label" }, hasValue ? this.selectedOption.label : this.placeholder)), this.searchable && this.open && (h("div", { key: 'c3cb84ae7d333ee84d40639fae5ebea7ba4eda36', class: "multiselect-search", slot: "header" }, h("le-string-input", { key: '1e887755cb1ec376f49d4bda1e86d5bb0709fbce', mode: "default", inputRef: el => (this.inputEl = el), class: "search-input", placeholder: "Search...", value: this.searchQuery, onInput: this.handleSearchInput })))), this.name && h("input", { key: '1cbcbe00822aeda2ccfecedef506f0de01c1b010', type: "hidden", name: this.name, value: this.value?.toString() ?? '' })));
811
811
  }
812
812
  static get watchers() { return {
813
813
  "value": ["handleValueChange"],
@@ -1399,7 +1399,7 @@ const LeComponent = /*@__PURE__*/ proxyCustomElement(class LeComponent extends H
1399
1399
  const enumMatch = type.match(/^'[^']+'/);
1400
1400
  if (enumMatch) {
1401
1401
  const options = type.split('|').map(opt => opt.trim().replace(/'/g, ''));
1402
- return (h("div", { class: "property-field" }, h("label", { htmlFor: `prop-${attr.name}` }, attr.name, attr.description && h("span", { class: "property-hint" }, attr.description)), h("le-select", { options: [...options.map(opt => ({ label: opt, value: opt }))], "full-width": true, value: value ?? attr.default?.replace(/'/g, ''), placeholder: attr.default?.replace(/'/g, ''), onLeChange: (e) => this.handlePropertyChange(attr.name, e.detail.value, type) })));
1402
+ return (h("div", { class: "property-field" }, h("label", { htmlFor: `prop-${attr.name}` }, attr.name, attr.description && h("span", { class: "property-hint" }, attr.description)), h("le-select", { options: [...options.map(opt => ({ label: opt, value: opt }))], "full-width": true, value: value ?? attr.default?.replace(/'/g, ''), placeholder: attr.default?.replace(/'/g, ''), onChange: (e) => this.handlePropertyChange(attr.name, e.detail.value, type) })));
1403
1403
  }
1404
1404
  // Boolean type
1405
1405
  if (type === 'boolean') {