le-kit 0.2.4 → 0.2.6

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 (160) hide show
  1. package/dist/cjs/le-bar.cjs.entry.js +428 -0
  2. package/dist/cjs/le-box.cjs.entry.js +1 -1
  3. package/dist/cjs/le-button_13.cjs.entry.js +17 -17
  4. package/dist/cjs/le-card.cjs.entry.js +1 -1
  5. package/dist/cjs/le-combobox.cjs.entry.js +1 -1
  6. package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
  7. package/dist/cjs/le-icon.cjs.entry.js +1 -1
  8. package/dist/cjs/le-kit.cjs.js +1 -1
  9. package/dist/cjs/le-multiselect.cjs.entry.js +3 -3
  10. package/dist/cjs/le-navigation.cjs.entry.js +61 -250
  11. package/dist/cjs/le-number-input.cjs.entry.js +1 -1
  12. package/dist/cjs/le-round-progress.cjs.entry.js +1 -1
  13. package/dist/cjs/le-segmented-control.cjs.entry.js +1 -1
  14. package/dist/cjs/le-stack.cjs.entry.js +1 -1
  15. package/dist/cjs/le-tab-bar.cjs.entry.js +1 -1
  16. package/dist/cjs/le-tab-panel.cjs.entry.js +2 -2
  17. package/dist/cjs/le-tab.cjs.entry.js +1 -1
  18. package/dist/cjs/le-tabs.cjs.entry.js +2 -2
  19. package/dist/cjs/le-tag.cjs.entry.js +1 -1
  20. package/dist/cjs/le-turntable.cjs.entry.js +1 -1
  21. package/dist/cjs/loader.cjs.js +1 -1
  22. package/dist/collection/collection-manifest.json +1 -0
  23. package/dist/collection/components/le-bar/le-bar.css +255 -0
  24. package/dist/collection/components/le-bar/le-bar.js +628 -0
  25. package/dist/collection/components/le-bar/le-bar.js.map +1 -0
  26. package/dist/collection/components/le-box/le-box.js +1 -1
  27. package/dist/collection/components/le-button/le-button.js +1 -1
  28. package/dist/collection/components/le-card/le-card.js +1 -1
  29. package/dist/collection/components/le-checkbox/le-checkbox.js +1 -1
  30. package/dist/collection/components/le-collapse/le-collapse.js +1 -1
  31. package/dist/collection/components/le-combobox/le-combobox.js +1 -1
  32. package/dist/collection/components/le-current-heading/le-current-heading.js +1 -1
  33. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +1 -1
  34. package/dist/collection/components/le-header/le-header.js +2 -2
  35. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +1 -1
  36. package/dist/collection/components/le-icon/le-icon.js +1 -1
  37. package/dist/collection/components/le-multiselect/le-multiselect.js +3 -3
  38. package/dist/collection/components/le-navigation/le-navigation.css +29 -47
  39. package/dist/collection/components/le-navigation/le-navigation.js +62 -251
  40. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
  41. package/dist/collection/components/le-number-input/le-number-input.js +1 -1
  42. package/dist/collection/components/le-popover/le-popover.js +3 -3
  43. package/dist/collection/components/le-popup/le-popup.js +1 -1
  44. package/dist/collection/components/le-round-progress/le-round-progress.js +1 -1
  45. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +1 -1
  46. package/dist/collection/components/le-segmented-control/le-segmented-control.js +1 -1
  47. package/dist/collection/components/le-select/le-select.js +2 -2
  48. package/dist/collection/components/le-slot/le-slot.js +1 -1
  49. package/dist/collection/components/le-stack/le-stack.js +1 -1
  50. package/dist/collection/components/le-string-input/le-string-input.js +2 -2
  51. package/dist/collection/components/le-tab/le-tab.js +1 -1
  52. package/dist/collection/components/le-tab-bar/le-tab-bar.js +1 -1
  53. package/dist/collection/components/le-tab-panel/le-tab-panel.js +2 -2
  54. package/dist/collection/components/le-tabs/le-tabs.js +2 -2
  55. package/dist/collection/components/le-tag/le-tag.js +1 -1
  56. package/dist/collection/components/le-turntable/le-turntable.js +1 -1
  57. package/dist/collection/dist/components/assets/custom-elements.json +2147 -1764
  58. package/dist/components/assets/custom-elements.json +2147 -1764
  59. package/dist/components/le-bar.d.ts +11 -0
  60. package/dist/components/le-bar.js +9 -0
  61. package/dist/components/le-bar.js.map +1 -0
  62. package/dist/components/le-bar2.js +473 -0
  63. package/dist/components/le-bar2.js.map +1 -0
  64. package/dist/components/le-box.js +1 -1
  65. package/dist/components/le-button2.js +8 -8
  66. package/dist/components/le-card.js +1 -1
  67. package/dist/components/le-collapse2.js +1 -1
  68. package/dist/components/le-combobox.js +1 -1
  69. package/dist/components/le-current-heading.js +1 -1
  70. package/dist/components/le-dropdown-base2.js +1 -1
  71. package/dist/components/le-header-placeholder.js +1 -1
  72. package/dist/components/le-header.js +2 -2
  73. package/dist/components/le-icon2.js +1 -1
  74. package/dist/components/le-multiselect.js +3 -3
  75. package/dist/components/le-navigation.js +70 -253
  76. package/dist/components/le-navigation.js.map +1 -1
  77. package/dist/components/le-number-input.js +1 -1
  78. package/dist/components/le-popover2.js +3 -3
  79. package/dist/components/le-round-progress.js +1 -1
  80. package/dist/components/le-scroll-progress.js +1 -1
  81. package/dist/components/le-segmented-control.js +1 -1
  82. package/dist/components/le-stack.js +1 -1
  83. package/dist/components/le-tab-bar.js +1 -1
  84. package/dist/components/le-tab-panel.js +2 -2
  85. package/dist/components/le-tab2.js +1 -1
  86. package/dist/components/le-tabs.js +2 -2
  87. package/dist/components/le-tag2.js +1 -1
  88. package/dist/components/le-turntable.js +1 -1
  89. package/dist/docs.json +404 -13
  90. package/dist/esm/le-bar.entry.js +426 -0
  91. package/dist/esm/le-bar.entry.js.map +1 -0
  92. package/dist/esm/le-box.entry.js +1 -1
  93. package/dist/esm/le-button_13.entry.js +17 -17
  94. package/dist/esm/le-card.entry.js +1 -1
  95. package/dist/esm/le-combobox.entry.js +1 -1
  96. package/dist/esm/le-header-placeholder.entry.js +1 -1
  97. package/dist/esm/le-icon.entry.js +1 -1
  98. package/dist/esm/le-kit.js +1 -1
  99. package/dist/esm/le-multiselect.entry.js +3 -3
  100. package/dist/esm/le-navigation.entry.js +61 -250
  101. package/dist/esm/le-navigation.entry.js.map +1 -1
  102. package/dist/esm/le-number-input.entry.js +1 -1
  103. package/dist/esm/le-round-progress.entry.js +1 -1
  104. package/dist/esm/le-segmented-control.entry.js +1 -1
  105. package/dist/esm/le-stack.entry.js +1 -1
  106. package/dist/esm/le-tab-bar.entry.js +1 -1
  107. package/dist/esm/le-tab-panel.entry.js +2 -2
  108. package/dist/esm/le-tab.entry.js +1 -1
  109. package/dist/esm/le-tabs.entry.js +2 -2
  110. package/dist/esm/le-tag.entry.js +1 -1
  111. package/dist/esm/le-turntable.entry.js +1 -1
  112. package/dist/esm/loader.js +1 -1
  113. package/dist/le-kit/dist/components/assets/custom-elements.json +2147 -1764
  114. package/dist/le-kit/le-kit.esm.js +1 -1
  115. package/dist/le-kit/p-045e0d4a.entry.js +2 -0
  116. package/dist/le-kit/p-045e0d4a.entry.js.map +1 -0
  117. package/dist/le-kit/{p-00cd6dc4.entry.js → p-07705c61.entry.js} +2 -2
  118. package/dist/le-kit/{p-0b5ab6ec.entry.js → p-0a270831.entry.js} +2 -2
  119. package/dist/le-kit/p-2102a152.entry.js +2 -0
  120. package/dist/le-kit/{p-02699578.entry.js.map → p-2102a152.entry.js.map} +1 -1
  121. package/dist/le-kit/{p-76d03b1e.entry.js → p-244ff3d7.entry.js} +2 -2
  122. package/dist/le-kit/{p-a5e21c8e.entry.js → p-249db213.entry.js} +2 -2
  123. package/dist/le-kit/{p-348a4e39.entry.js → p-3a0a57e9.entry.js} +2 -2
  124. package/dist/le-kit/{p-2db32332.entry.js → p-4b88b0da.entry.js} +2 -2
  125. package/dist/le-kit/p-4f11ea11.entry.js +2 -0
  126. package/dist/le-kit/p-4f11ea11.entry.js.map +1 -0
  127. package/dist/le-kit/{p-9f409d74.entry.js → p-61edb398.entry.js} +2 -2
  128. package/dist/le-kit/{p-17ace252.entry.js → p-6d0090c1.entry.js} +2 -2
  129. package/dist/le-kit/{p-91421993.entry.js → p-73f7de28.entry.js} +2 -2
  130. package/dist/le-kit/{p-8907cf95.entry.js → p-764005e3.entry.js} +2 -2
  131. package/dist/le-kit/{p-509caf7f.entry.js → p-94f774af.entry.js} +2 -2
  132. package/dist/le-kit/p-ac822433.entry.js +2 -0
  133. package/dist/le-kit/{p-995f6de8.entry.js → p-b21277e8.entry.js} +2 -2
  134. package/dist/le-kit/{p-65fa68c3.entry.js → p-b6997587.entry.js} +2 -2
  135. package/dist/le-kit/{p-0aab5747.entry.js → p-c0ccc9aa.entry.js} +2 -2
  136. package/dist/le-kit/{p-b4dcb4df.entry.js → p-ebd86d4f.entry.js} +2 -2
  137. package/dist/types/components/le-bar/le-bar.d.ts +125 -0
  138. package/dist/types/components/le-navigation/le-navigation.d.ts +10 -18
  139. package/dist/types/components.d.ts +148 -0
  140. package/package.json +4 -4
  141. package/dist/le-kit/p-02699578.entry.js +0 -2
  142. package/dist/le-kit/p-a1c26c46.entry.js +0 -2
  143. package/dist/le-kit/p-a1c26c46.entry.js.map +0 -1
  144. package/dist/le-kit/p-ccf4c548.entry.js +0 -2
  145. /package/dist/le-kit/{p-00cd6dc4.entry.js.map → p-07705c61.entry.js.map} +0 -0
  146. /package/dist/le-kit/{p-0b5ab6ec.entry.js.map → p-0a270831.entry.js.map} +0 -0
  147. /package/dist/le-kit/{p-76d03b1e.entry.js.map → p-244ff3d7.entry.js.map} +0 -0
  148. /package/dist/le-kit/{p-a5e21c8e.entry.js.map → p-249db213.entry.js.map} +0 -0
  149. /package/dist/le-kit/{p-348a4e39.entry.js.map → p-3a0a57e9.entry.js.map} +0 -0
  150. /package/dist/le-kit/{p-2db32332.entry.js.map → p-4b88b0da.entry.js.map} +0 -0
  151. /package/dist/le-kit/{p-9f409d74.entry.js.map → p-61edb398.entry.js.map} +0 -0
  152. /package/dist/le-kit/{p-17ace252.entry.js.map → p-6d0090c1.entry.js.map} +0 -0
  153. /package/dist/le-kit/{p-91421993.entry.js.map → p-73f7de28.entry.js.map} +0 -0
  154. /package/dist/le-kit/{p-8907cf95.entry.js.map → p-764005e3.entry.js.map} +0 -0
  155. /package/dist/le-kit/{p-509caf7f.entry.js.map → p-94f774af.entry.js.map} +0 -0
  156. /package/dist/le-kit/{p-ccf4c548.entry.js.map → p-ac822433.entry.js.map} +0 -0
  157. /package/dist/le-kit/{p-995f6de8.entry.js.map → p-b21277e8.entry.js.map} +0 -0
  158. /package/dist/le-kit/{p-65fa68c3.entry.js.map → p-b6997587.entry.js.map} +0 -0
  159. /package/dist/le-kit/{p-0aab5747.entry.js.map → p-c0ccc9aa.entry.js.map} +0 -0
  160. /package/dist/le-kit/{p-b4dcb4df.entry.js.map → p-ebd86d4f.entry.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, d as createEvent, c as getElement, h, H as Host } from './index-BqH-zsXr.js';
2
2
  import { g as generateId, c as classnames } from './utils-CdBk0DdF.js';
3
3
 
4
- const leNavigationCss = () => `:host{display:block;--le-nav-radius:var(--le-radius-md);--le-nav-gap:var(--le-spacing-2);--le-nav-item-padding-x:var(--le-spacing-1);--le-nav-item-padding-y:var(--le-spacing-2);--le-nav-item-gap:var(--le-spacing-2);--le-nav-color:var(--le-color-text-primary);--le-nav-muted:var(--le-color-text-secondary);--le-nav-hover-bg:var(--le-color-gray-100);--le-nav-selected-bg:var(--le-color-primary);--le-nav-selected-color:var(--le-color-primary-contrast)}.nav-vertical{display:flex;flex-direction:column;gap:var(--le-nav-gap)}.nav-search{width:100%}.nav-search-input{--le-input-radius:var(--le-radius-md)}.nav-empty{padding:var(--le-spacing-2);color:var(--le-nav-muted);font-size:var(--le-font-size-sm)}.nav-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--le-spacing-1)}.nav-row{display:flex;align-items:stretch;gap:var(--le-spacing-1);border-radius:var(--le-nav-radius)}.nav-row:hover{background:var(--le-nav-hover-bg)}.nav-toggle,.nav-toggle-spacer{box-sizing:border-box;width:var(--le-spacing-4);min-width:var(--le-spacing-4);display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--le-nav-radius);color:inherit}.nav-toggle{background:transparent;cursor:pointer;opacity:0.4}.nav-toggle:hover:not(:disabled){opacity:1}.nav-toggle:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px;opacity:1}.nav-chevron{display:inline-block;transition:transform var(--le-transition-fast)}.nav-chevron svg{display:block;width:var(--le-spacing-4);height:var(--le-spacing-4)}.nav-node>div>button>.nav-chevron{transform:rotate(-90deg)}.nav-node.open>div>button>.nav-chevron{transform:rotate(0deg)}.nav-item{flex:1;display:inline-flex;align-items:center;gap:var(--le-nav-item-gap);padding:var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;text-decoration:none;color:var(--le-nav-color);font-family:var(--le-font-family-base);font-size:var(--le-font-size-md);line-height:var(--le-line-height-tight);cursor:pointer}.nav-item:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.nav-node.selected>.nav-row{background:var(--le-nav-selected-bg);color:var(--le-nav-selected-color)}.nav-node.selected>.nav-row>.nav-item{color:inherit}.nav-node.disabled>.nav-row>.nav-item{opacity:0.5;cursor:not-allowed}.nav-text{display:flex;flex-direction:column;min-width:0}.nav-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav-description{color:color-mix(in srgb, var(--le-nav-muted) 90%, transparent);font-size:var(--le-font-size-sm);line-height:var(--le-line-height-tight)}.nav-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.nav-icon-end{margin-left:auto}.nav-children{margin-top:var(--le-spacing-1)}.nav-horizontal{display:flex;align-items:center;gap:var(--le-spacing-2)}.nav-horizontal.align-end{justify-content:flex-end}.nav-horizontal.align-center{justify-content:center}.nav-horizontal.align-space-between{justify-content:space-between}.nav-horizontal-shell{position:relative}.nav-horizontal-measure{position:absolute;left:-10000px;top:-10000px;visibility:hidden;pointer-events:none;display:flex;align-items:center;gap:var(--le-spacing-2);flex-wrap:wrap}.nav-horizontal.wrap{flex-wrap:wrap}.nav-horizontal.nowrap{flex-wrap:nowrap;overflow:hidden}.h-item{display:flex;align-items:center}.h-link{display:inline-flex;align-items:center;gap:var(--le-spacing-2);padding:var(--le-spacing-2) var(--le-spacing-3);border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;text-decoration:none;color:var(--le-nav-color);font-family:var(--le-font-family-base);font-size:var(--le-font-size-md);cursor:pointer}.h-link:hover{background:var(--le-nav-hover-bg)}.h-link:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.h-link.disabled,.h-trigger.disabled{opacity:0.5;pointer-events:none}.h-link.selected,.h-trigger.selected{background:var(--le-nav-selected-bg);color:var(--le-nav-selected-color)}.h-label{white-space:nowrap}.h-trigger{display:inline-flex;align-items:center;gap:var(--le-spacing-1);border-radius:var(--le-nav-radius)}.h-submenu-toggle{width:var(--le-spacing-3);height:var(--le-spacing-3);display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--le-nav-radius);background:transparent;color:currentColor;cursor:pointer}.h-submenu-toggle:hover{background:var(--le-nav-hover-bg)}.more-trigger-wrap{display:flex;align-items:center}.more-trigger-wrap.is-measure{position:absolute;visibility:hidden;pointer-events:none}.more-trigger-wrap.is-visible{position:static;visibility:visible}.overflow-trigger{display:inline-flex;align-items:center;justify-content:center;gap:var(--le-spacing-2);padding:var(--le-spacing-2) var(--le-spacing-3);border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;color:var(--le-nav-color);cursor:pointer;font-family:var(--le-font-family-base);font-size:var(--le-font-size-md)}.overflow-trigger:hover{background:var(--le-nav-hover-bg)}.overflow-trigger:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}le-popover::part(content){padding:var(--le-spacing-1)}`;
4
+ const leNavigationCss = () => `:host{display:block;--le-nav-radius:var(--le-radius-md);--le-nav-gap:var(--le-spacing-2);--le-nav-item-padding-x:var(--le-spacing-1);--le-nav-item-padding-y:var(--le-spacing-2);--le-nav-item-gap:var(--le-spacing-2);--le-nav-color:var(--le-color-text-primary);--le-nav-muted:var(--le-color-text-secondary);--le-nav-hover-bg:var(--le-color-gray-100);--le-nav-selected-bg:var(--le-color-primary);--le-nav-selected-color:var(--le-color-primary-contrast)}:host([orientation='horizontal']:not([wrap])){flex:1 1 0%;min-width:0}.nav-vertical{display:flex;flex-direction:column;gap:var(--le-nav-gap)}.nav-search{width:100%}.nav-search-input{--le-input-radius:var(--le-radius-md)}.nav-empty{padding:var(--le-spacing-2);color:var(--le-nav-muted);font-size:var(--le-font-size-sm)}.nav-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--le-spacing-1)}.nav-row{display:flex;align-items:stretch;gap:var(--le-spacing-1);border-radius:var(--le-nav-radius)}.nav-row:hover{background:var(--le-nav-hover-bg)}.nav-toggle,.nav-toggle-spacer{box-sizing:border-box;width:var(--le-spacing-4);min-width:var(--le-spacing-4);display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--le-nav-radius);color:inherit}.nav-toggle{background:transparent;cursor:pointer;opacity:0.4}.nav-toggle:hover:not(:disabled){opacity:1}.nav-toggle:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px;opacity:1}.nav-chevron{display:inline-block;transition:transform var(--le-transition-fast)}.nav-chevron svg{display:block;width:var(--le-spacing-4);height:var(--le-spacing-4)}.nav-node>div>button>.nav-chevron{transform:rotate(-90deg)}.nav-node.open>div>button>.nav-chevron{transform:rotate(0deg)}.nav-item{flex:1;display:inline-flex;align-items:center;gap:var(--le-nav-item-gap);padding:var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;text-decoration:none;color:var(--le-nav-color);font-family:var(--le-font-family-base);font-size:var(--le-font-size-md);line-height:var(--le-line-height-tight);cursor:pointer}.nav-item:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.nav-node.selected>.nav-row{background:var(--le-nav-selected-bg);color:var(--le-nav-selected-color)}.nav-node.selected>.nav-row>.nav-item{color:inherit}.nav-node.disabled>.nav-row>.nav-item{opacity:0.5;cursor:not-allowed}.nav-text{display:flex;flex-direction:column;min-width:0}.nav-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav-description{color:color-mix(in srgb, var(--le-nav-muted) 90%, transparent);font-size:var(--le-font-size-sm);line-height:var(--le-line-height-tight)}.nav-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.nav-icon-end{margin-left:auto}.nav-children{margin-top:var(--le-spacing-1)}.nav-horizontal-wrapper{display:flex;align-items:center;gap:var(--le-spacing-2)}.nav-bar{flex:1 1 0%;min-width:0;--le-bar-gap:var(--le-spacing-2)}.nav-bar.align-end{--le-bar-justify:flex-end}.nav-bar.align-center{--le-bar-justify:center}.nav-bar.align-space-between{--le-bar-justify:space-between}.h-item{display:flex;align-items:center}.h-link{display:inline-flex;align-items:center;gap:var(--le-spacing-2);padding:var(--le-spacing-2) var(--le-spacing-3);border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;text-decoration:none;color:var(--le-nav-color);font-family:var(--le-font-family-base);font-size:var(--le-font-size-md);cursor:pointer}.h-link:hover{background:var(--le-nav-hover-bg)}.h-link:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.h-link.disabled,.h-trigger.disabled{opacity:0.5;pointer-events:none}.h-link.selected,.h-trigger.selected{background:var(--le-nav-selected-bg);color:var(--le-nav-selected-color)}.h-label{white-space:nowrap}.h-trigger{display:inline-flex;align-items:center;gap:var(--le-spacing-1);border-radius:var(--le-nav-radius)}.h-submenu-toggle{width:var(--le-spacing-3);height:var(--le-spacing-3);display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--le-nav-radius);background:transparent;color:currentColor;cursor:pointer}.h-submenu-toggle:hover{background:var(--le-nav-hover-bg)}.overflow-trigger{display:inline-flex;align-items:center;justify-content:center;gap:var(--le-spacing-2);padding:var(--le-spacing-2) var(--le-spacing-3);border-radius:var(--le-nav-radius);border:1px solid transparent;background:transparent;color:var(--le-nav-color);cursor:pointer;font-family:var(--le-font-family-base);font-size:var(--le-font-size-md)}.overflow-trigger:hover{background:var(--le-nav-hover-bg)}.overflow-trigger:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.nav-overflow-trigger{display:flex;align-items:center}le-popover::part(content){padding:var(--le-spacing-1)}`;
5
5
 
6
6
  const LeNavigation = class {
7
7
  constructor(hostRef) {
@@ -72,19 +72,14 @@ const LeNavigation = class {
72
72
  leNavItemToggle;
73
73
  searchQuery = '';
74
74
  openState = {};
75
+ /** IDs of items currently in overflow (from le-bar) */
75
76
  overflowIds = [];
77
+ /** Whether hamburger mode is active (from le-bar) */
76
78
  hamburgerActive = false;
77
- fallbackHamburger = false;
78
79
  submenuQueries = {};
79
- navContainerEl;
80
- measureEl;
81
- measureMoreEl;
82
- topItemEls = new Map();
80
+ /** Whether the overflow popover is open */
81
+ overflowPopoverOpen = false;
83
82
  popoverRefs = new Map();
84
- moreTriggerEl;
85
- hamburgerPopoverEl;
86
- morePopoverEl;
87
- resizeObserver;
88
83
  instanceId = generateId('le-nav');
89
84
  partFromOptionPart(base, part) {
90
85
  const raw = (part ?? '').trim();
@@ -99,40 +94,12 @@ const LeNavigation = class {
99
94
  return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');
100
95
  }
101
96
  handleLayoutInputsChange() {
102
- this.scheduleOverflowRecalc();
103
- }
104
- componentDidLoad() {
105
- this.setupResizeObserver();
106
- this.scheduleOverflowRecalc();
97
+ // Reset overflow state when layout inputs change
98
+ this.overflowIds = [];
99
+ this.hamburgerActive = false;
107
100
  }
108
101
  disconnectedCallback() {
109
- this.resizeObserver?.disconnect();
110
- this.resizeObserver = undefined;
111
- }
112
- componentDidRender() {
113
- // In case refs change after render.
114
- this.scheduleOverflowRecalc();
115
- }
116
- setupResizeObserver() {
117
- this.resizeObserver?.disconnect();
118
- if (typeof ResizeObserver === 'undefined')
119
- return;
120
- this.resizeObserver = new ResizeObserver(() => this.computeOverflow());
121
- this.observeContainer(this.navContainerEl);
122
- }
123
- observeContainer(el) {
124
- if (!this.resizeObserver)
125
- return;
126
- this.resizeObserver.disconnect();
127
- if (el)
128
- this.resizeObserver.observe(el);
129
- }
130
- scheduleOverflowRecalc() {
131
- // Avoid work for vertical layout.
132
- if (this.orientation !== 'horizontal')
133
- return;
134
- // Ensure it runs after layout.
135
- requestAnimationFrame(() => this.computeOverflow());
102
+ // Cleanup if needed
136
103
  }
137
104
  get parsedItems() {
138
105
  if (typeof this.items === 'string') {
@@ -246,149 +213,16 @@ const LeNavigation = class {
246
213
  // Position may change as items filter.
247
214
  requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
248
215
  };
249
- getTopLevelIds(items) {
250
- return items.map((item, index) => this.getItemId(item, String(index)));
251
- }
252
- computeOverflow() {
253
- // Only applies to horizontal, non-wrapping navs.
254
- if (this.orientation !== 'horizontal' || this.wrap) {
255
- if (!this.overflowIds || this.overflowIds.length)
256
- this.overflowIds = [];
257
- if (this.hamburgerActive)
258
- this.hamburgerActive = false;
259
- if (this.fallbackHamburger)
260
- this.fallbackHamburger = false;
261
- return;
262
- }
263
- const container = this.navContainerEl;
264
- if (!container)
265
- return;
266
- const topIds = this.getTopLevelIds(this.parsedItems);
267
- const widths = topIds.map(id => this.topItemEls.get(id)?.getBoundingClientRect().width ?? 0);
268
- const totalWidth = widths.reduce((a, b) => a + b, 0);
269
- const availableWidth = container.getBoundingClientRect().width;
270
- if (this.overflowMode === 'hamburger') {
271
- const shouldHamburger = totalWidth > availableWidth;
272
- if (shouldHamburger !== this.hamburgerActive) {
273
- this.hamburgerActive = shouldHamburger;
274
- }
275
- if (!this.overflowIds || this.overflowIds.length)
276
- this.overflowIds = [];
277
- if (this.fallbackHamburger)
278
- this.fallbackHamburger = false;
279
- return;
280
- }
281
- // overflowMode === 'more'
282
- if (this.hamburgerActive)
283
- this.hamburgerActive = false;
284
- const computedOverflow = this.computeOverflowMoreByWrap(availableWidth);
285
- if (!computedOverflow)
286
- return;
287
- // Fallback to hamburger when "More" would leave too few items visible
288
- // or when the trigger itself cannot fit the row.
289
- const visibleCount = this.parsedItems.length - computedOverflow.length;
290
- const moreWidth = this.moreTriggerEl?.getBoundingClientRect().width ?? 0;
291
- const minVisible = Math.max(0, Number(this.minVisibleItemsForMore) || 0);
292
- const shouldFallback = (computedOverflow.length > 0 && visibleCount < minVisible) ||
293
- (moreWidth > 0 && moreWidth > availableWidth);
294
- if (shouldFallback !== this.fallbackHamburger) {
295
- this.fallbackHamburger = shouldFallback;
296
- }
297
- const nextOverflow = shouldFallback ? [] : computedOverflow;
298
- const same = nextOverflow.length === this.overflowIds?.length &&
299
- nextOverflow.every((v, i) => v === this.overflowIds[i]);
300
- if (!same) {
301
- this.overflowIds = nextOverflow;
302
- }
303
- }
304
- computeOverflowMoreByWrap(availableWidth) {
305
- const container = this.navContainerEl;
306
- const measure = this.measureEl;
307
- const measureMore = this.measureMoreEl;
308
- const items = this.parsedItems;
309
- if (!container || !measure)
310
- return null;
311
- // Ensure measurement container matches visible container width.
312
- measure.style.width = `${availableWidth}px`;
313
- // Keep the measured "More" width aligned with the real trigger width (supports slotted content).
314
- const realMoreWidth = this.moreTriggerEl?.getBoundingClientRect().width;
315
- if (measureMore && realMoreWidth && realMoreWidth > 0) {
316
- const btn = measureMore.querySelector('button');
317
- if (btn) {
318
- btn.style.width = `${realMoreWidth}px`;
319
- }
320
- }
321
- const allIds = this.getTopLevelIds(items);
322
- const itemEls = allIds
323
- .map(id => measure.querySelector(`[data-nav-id="${CSS.escape(id)}"]`))
324
- .filter((el) => !!el);
325
- // Reset measurement visibility.
326
- itemEls.forEach(el => {
327
- el.style.display = '';
328
- });
329
- if (measureMore) {
330
- measureMore.style.display = 'none';
331
- }
332
- if (itemEls.length === 0) {
333
- return [];
334
- }
335
- const firstRowTop = Math.min(...itemEls.map(el => el.offsetTop));
336
- const overflowSet = new Set();
337
- // Pass 1: detect which items fall onto rows > 1 (without "More" in flow).
338
- itemEls.forEach(el => {
339
- const id = el.getAttribute('data-nav-id');
340
- if (!id)
341
- return;
342
- if (el.offsetTop > firstRowTop)
343
- overflowSet.add(id);
344
- });
345
- if (overflowSet.size === 0) {
346
- return [];
347
- }
348
- // Pass 2: show "More" and iteratively move items into overflow until "More" fits on row 1.
349
- if (measureMore) {
350
- measureMore.style.display = '';
351
- }
352
- // Hide currently overflowing items.
353
- itemEls.forEach(el => {
354
- const id = el.getAttribute('data-nav-id');
355
- if (!id)
356
- return;
357
- if (overflowSet.has(id))
358
- el.style.display = 'none';
359
- });
360
- const getVisibleItemEls = () => itemEls.filter(el => el.style.display !== 'none');
361
- while (measureMore) {
362
- const visible = getVisibleItemEls();
363
- const rowTop = visible.length ? Math.min(...visible.map(el => el.offsetTop)) : 0;
364
- if (measureMore.offsetTop <= rowTop)
365
- break;
366
- if (visible.length === 0)
367
- break;
368
- // Remove one last visible item and retry.
369
- const last = visible[visible.length - 1];
370
- const lastId = last.getAttribute('data-nav-id');
371
- if (!lastId)
372
- break;
373
- last.style.display = 'none';
374
- overflowSet.add(lastId);
375
- }
376
- const overflowIds = allIds.filter(id => overflowSet.has(id));
377
- return overflowIds;
378
- }
379
- renderHorizontalMeasureItem(item, index) {
380
- const id = this.getItemId(item, String(index));
381
- const children = this.getChildItems(item);
382
- const hasChildren = children.length > 0;
383
- const setRef = (el) => {
384
- if (el)
385
- this.topItemEls.set(id, el);
386
- };
387
- if (!hasChildren) {
388
- return (h("div", { class: "h-item", ref: setRef, "data-nav-id": id }, h("span", { class: "h-link" }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "h-label" }, item.label), item.iconEnd && (h("span", { class: "nav-icon nav-icon-end", "aria-hidden": "true" }, item.iconEnd)))));
389
- }
390
- return (h("div", { class: "h-item", ref: setRef, "data-nav-id": id }, h("span", { class: "h-trigger" }, h("span", { class: "h-link" }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "h-label" }, item.label)), h("span", { class: "h-submenu-toggle", "aria-hidden": "true" }, h("le-icon", { name: "chevron-down" })))));
391
- }
216
+ handleBarOverflowChange = (e) => {
217
+ this.overflowIds = e.detail.overflowingIds;
218
+ this.hamburgerActive = e.detail.hamburgerActive;
219
+ };
220
+ openOverflowPopover = () => {
221
+ this.overflowPopoverOpen = true;
222
+ };
223
+ closeOverflowPopover = () => {
224
+ this.overflowPopoverOpen = false;
225
+ };
392
226
  renderVerticalList(items, { depth, pathPrefix, autoOpenIds, searchable, searchQuery, searchPlaceholder, emptyText, submenuId, closePopover, }) {
393
227
  const query = searchQuery ?? '';
394
228
  const openFromSearch = autoOpenIds ?? new Set();
@@ -439,14 +273,14 @@ const LeNavigation = class {
439
273
  ? { href: item.href, role: 'menuitem' }
440
274
  : { type: 'button', role: 'menuitem' };
441
275
  const itemPart = this.partFromOptionPart('item', item.part);
442
- return (h("div", { class: "h-item" }, h(TagType, { class: classnames('h-link', {
276
+ return (h("div", { class: "h-item", "data-bar-id": id }, h(TagType, { class: classnames('h-link', {
443
277
  disabled: item.disabled,
444
278
  selected: item.selected || (this.activeUrl && item.href === this.activeUrl),
445
279
  }), part: itemPart, ...attrs, "aria-disabled": item.disabled ? 'true' : undefined, onClick: (e) => this.handleItemSelect(e, item, id) }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "h-label" }, item.label), item.iconEnd && (h("span", { class: "nav-icon nav-icon-end", "aria-hidden": "true" }, item.iconEnd)))));
446
280
  }
447
281
  const submenuId = id;
448
282
  const itemPart = this.partFromOptionPart('item', item.part);
449
- return (h("div", { class: "h-item" }, h("le-popover", { ref: el => {
283
+ return (h("div", { class: "h-item", "data-bar-id": id }, h("le-popover", { ref: el => {
450
284
  if (el)
451
285
  this.popoverRefs.set(submenuId, el);
452
286
  }, mode: "default", showClose: false, closeOnClickOutside: true, closeOnEscape: true, position: "bottom", align: "start", minWidth: "240px" }, h("div", { slot: "trigger", class: classnames('h-trigger', {
@@ -483,75 +317,52 @@ const LeNavigation = class {
483
317
  closePopover: () => this.popoverRefs.get(submenuId)?.hide(),
484
318
  })))));
485
319
  }
486
- renderHorizontal() {
320
+ getOverflowMode() {
321
+ if (this.wrap)
322
+ return 'wrap';
323
+ return this.overflowMode;
324
+ }
325
+ getBarAlignment() {
326
+ // Map le-navigation align to le-bar alignItems
327
+ // 'space-between' doesn't map directly, use 'stretch' as closest
328
+ if (this.align === 'space-between')
329
+ return 'stretch';
330
+ return this.align;
331
+ }
332
+ renderOverflowPopover() {
487
333
  const items = this.parsedItems;
488
334
  const overflowSet = new Set(this.overflowIds);
489
- const overflowItems = [];
490
- items.forEach((item, index) => {
491
- const id = this.getItemId(item, String(index));
492
- if (!this.wrap && this.overflowMode === 'more' && overflowSet.has(id)) {
493
- overflowItems.push(item);
494
- }
495
- });
496
- const showHamburger = !this.wrap &&
497
- ((this.overflowMode === 'hamburger' && this.hamburgerActive) ||
498
- (this.overflowMode === 'more' && this.fallbackHamburger));
499
- // Hamburger mode: show a single trigger if anything overflows (or when forced for "more").
500
- if (showHamburger) {
501
- return (h("div", { class: "nav-horizontal-shell" }, h("div", { class: "nav-horizontal-measure", "aria-hidden": "true", ref: el => {
502
- this.measureEl = el;
503
- } }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
504
- this.measureMoreEl = el;
505
- } }, h("button", { type: "button", class: "overflow-trigger" }, "More"))), h("div", { class: classnames('nav-horizontal', {
506
- 'align-end': this.align === 'end',
507
- 'align-center': this.align === 'center',
508
- 'align-space-between': this.align === 'space-between',
509
- }), ref: el => {
510
- this.navContainerEl = el;
511
- this.setupResizeObserver();
512
- this.observeContainer(this.navContainerEl);
513
- } }, h("le-popover", { ref: el => {
514
- this.hamburgerPopoverEl = el;
515
- }, mode: "default", showClose: false, closeOnClickOutside: true, closeOnEscape: true, position: "bottom", align: "end", minWidth: "260px" }, h("button", { slot: "trigger", type: "button", class: "overflow-trigger", part: "hamburger-trigger", "aria-label": "Open menu" }, h("slot", { name: "hamburger-trigger" }, h("le-icon", { name: "hamburger" }))), h("div", { class: "popover-menu" }, this.renderVerticalList(items, {
516
- depth: 0,
517
- pathPrefix: '',
518
- closePopover: () => this.hamburgerPopoverEl?.hide(),
519
- }))))));
335
+ // Determine which items to show in the popover
336
+ let itemsToShow;
337
+ if (this.hamburgerActive) {
338
+ // In hamburger mode, show all items
339
+ itemsToShow = items;
340
+ }
341
+ else {
342
+ // In "more" mode, show only overflow items
343
+ itemsToShow = items.filter((item, index) => {
344
+ const id = this.getItemId(item, String(index));
345
+ return overflowSet.has(id);
346
+ });
520
347
  }
521
- const showMore = !this.wrap && this.overflowMode === 'more' && overflowItems.length > 0;
522
- return (h("div", { class: "nav-horizontal-shell", role: "menubar" }, h("div", { class: "nav-horizontal-measure", "aria-hidden": "true", ref: el => {
523
- this.measureEl = el;
524
- } }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
525
- this.measureMoreEl = el;
526
- } }, h("button", { type: "button", class: "overflow-trigger" }, h("le-icon", { name: "ellipsis-horizontal" })))), h("div", { class: classnames('nav-horizontal', {
527
- 'wrap': this.wrap,
528
- 'nowrap': !this.wrap,
348
+ if (itemsToShow.length === 0)
349
+ return null;
350
+ const isHamburger = this.hamburgerActive;
351
+ return (h("le-popover", { mode: "default", open: this.overflowPopoverOpen, showClose: false, closeOnClickOutside: true, closeOnEscape: true, position: "bottom", align: "end", minWidth: "260px", onLePopoverClose: this.closeOverflowPopover }, h("button", { slot: "trigger", type: "button", class: "overflow-trigger", part: isHamburger ? 'hamburger-trigger' : 'more-trigger', "aria-label": isHamburger ? 'Open menu' : 'More', onClick: this.openOverflowPopover }, h("slot", { name: isHamburger ? 'hamburger-trigger' : 'more-trigger' }, h("le-icon", { name: isHamburger ? 'hamburger' : 'ellipsis-horizontal' }))), h("div", { class: "popover-menu" }, this.renderVerticalList(itemsToShow, {
352
+ depth: 0,
353
+ pathPrefix: '',
354
+ closePopover: this.closeOverflowPopover,
355
+ }))));
356
+ }
357
+ renderHorizontal() {
358
+ const items = this.parsedItems;
359
+ const overflowMode = this.getOverflowMode();
360
+ const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;
361
+ return (h("div", { class: "nav-horizontal-wrapper" }, h("le-bar", { class: classnames('nav-bar', {
529
362
  'align-end': this.align === 'end',
530
363
  'align-center': this.align === 'center',
531
364
  'align-space-between': this.align === 'space-between',
532
- }), ref: el => {
533
- this.navContainerEl = el;
534
- this.setupResizeObserver();
535
- this.observeContainer(this.navContainerEl);
536
- } }, items.map((item, index) => {
537
- const id = this.getItemId(item, String(index));
538
- const isOverflow = !this.wrap && this.overflowMode === 'more' && overflowSet.has(id);
539
- if (isOverflow)
540
- return null;
541
- return this.renderHorizontalItem(item, index);
542
- }), h("div", { class: classnames('more-trigger-wrap', {
543
- 'is-visible': showMore,
544
- 'is-measure': !showMore,
545
- }) }, h("le-popover", { ref: el => {
546
- this.morePopoverEl = el;
547
- }, mode: "default", position: "bottom", align: "end", minWidth: "260px", showClose: false }, h("button", { slot: "trigger", type: "button", class: "overflow-trigger", part: "more-trigger", "aria-label": "More", ref: el => {
548
- if (el)
549
- this.moreTriggerEl = el;
550
- } }, h("slot", { name: "more-trigger" }, h("le-icon", { name: "ellipsis-horizontal" }))), h("div", { class: "popover-menu" }, this.renderVerticalList(overflowItems, {
551
- depth: 0,
552
- pathPrefix: '',
553
- closePopover: () => this.morePopoverEl?.hide(),
554
- })))))));
365
+ }), overflow: overflowMode, alignItems: this.getBarAlignment(), disablePopover: true, onLeBarOverflowChange: this.handleBarOverflowChange }, items.map((item, index) => this.renderHorizontalItem(item, index))), showOverflowButton && this.renderOverflowPopover()));
555
366
  }
556
367
  render() {
557
368
  const items = this.parsedItems;