le-kit 0.1.19 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/cjs/index-pT2cVC5w.js.map +1 -1
  2. package/dist/cjs/le-button_13.cjs.entry.js +17 -21
  3. package/dist/cjs/le-icon.cjs.entry.js +108 -0
  4. package/dist/cjs/le-kit.cjs.js +1 -1
  5. package/dist/cjs/le-multiselect.cjs.entry.js +3 -3
  6. package/dist/cjs/le-navigation.cjs.entry.js +505 -0
  7. package/dist/cjs/le-number-input.cjs.entry.js +1 -1
  8. package/dist/cjs/le-round-progress.cjs.entry.js +1 -1
  9. package/dist/cjs/le-segmented-control.cjs.entry.js +1 -1
  10. package/dist/cjs/le-stack.cjs.entry.js +1 -1
  11. package/dist/cjs/le-tab-bar.cjs.entry.js +1 -1
  12. package/dist/cjs/le-tab-panel.cjs.entry.js +2 -2
  13. package/dist/cjs/le-tab.cjs.entry.js +1 -1
  14. package/dist/cjs/le-tabs.cjs.entry.js +2 -2
  15. package/dist/cjs/le-tag.cjs.entry.js +1 -1
  16. package/dist/cjs/le-turntable.cjs.entry.js +1 -1
  17. package/dist/cjs/loader.cjs.js +1 -1
  18. package/dist/collection/assets/icons/chevron-down.svg +3 -0
  19. package/dist/collection/collection-manifest.json +2 -0
  20. package/dist/collection/components/le-collapse/le-collapse.css +3 -3
  21. package/dist/collection/components/le-collapse/le-collapse.js +11 -15
  22. package/dist/collection/components/le-collapse/le-collapse.js.map +1 -1
  23. package/dist/collection/components/le-icon/le-icon.css +13 -0
  24. package/dist/collection/components/le-icon/le-icon.js +168 -0
  25. package/dist/collection/components/le-icon/le-icon.js.map +1 -0
  26. package/dist/collection/components/le-multiselect/le-multiselect.js +3 -3
  27. package/dist/collection/components/le-navigation/le-navigation.css +323 -0
  28. package/dist/collection/components/le-navigation/le-navigation.js +768 -0
  29. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -0
  30. package/dist/collection/components/le-number-input/le-number-input.js +1 -1
  31. package/dist/collection/components/le-popover/le-popover.js +3 -3
  32. package/dist/collection/components/le-popup/le-popup.js +7 -7
  33. package/dist/collection/components/le-round-progress/le-round-progress.js +1 -1
  34. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +1 -1
  35. package/dist/collection/components/le-segmented-control/le-segmented-control.js +1 -1
  36. package/dist/collection/components/le-select/le-select.js +2 -2
  37. package/dist/collection/components/le-slot/le-slot.js +1 -1
  38. package/dist/collection/components/le-stack/le-stack.js +1 -1
  39. package/dist/collection/components/le-string-input/le-string-input.js +2 -2
  40. package/dist/collection/components/le-tab/le-tab.js +1 -1
  41. package/dist/collection/components/le-tab-bar/le-tab-bar.js +1 -1
  42. package/dist/collection/components/le-tab-panel/le-tab-panel.js +2 -2
  43. package/dist/collection/components/le-tabs/le-tabs.js +2 -2
  44. package/dist/collection/components/le-tag/le-tag.js +1 -1
  45. package/dist/collection/components/le-turntable/le-turntable.js +1 -1
  46. package/dist/collection/dist/components/assets/custom-elements.json +1278 -533
  47. package/dist/collection/dist/components/assets/icons/chevron-down.json +13 -0
  48. package/dist/collection/dist/components/assets/icons/chevron-down.svg +3 -0
  49. package/dist/collection/types/options.js.map +1 -1
  50. package/dist/components/assets/custom-elements.json +1278 -533
  51. package/dist/components/assets/icons/chevron-down.json +13 -0
  52. package/dist/components/assets/icons/chevron-down.svg +3 -0
  53. package/dist/components/index.js.map +1 -1
  54. package/dist/components/le-button2.js +5 -5
  55. package/dist/components/le-collapse.js +1 -137
  56. package/dist/components/le-collapse.js.map +1 -1
  57. package/dist/components/le-collapse2.js +138 -0
  58. package/dist/components/le-collapse2.js.map +1 -0
  59. package/dist/components/le-icon.d.ts +11 -0
  60. package/dist/components/le-icon.js +9 -0
  61. package/dist/components/le-icon.js.map +1 -0
  62. package/dist/components/le-icon2.js +133 -0
  63. package/dist/components/le-icon2.js.map +1 -0
  64. package/dist/components/le-multiselect.js +3 -3
  65. package/dist/components/le-navigation.d.ts +11 -0
  66. package/dist/components/le-navigation.js +605 -0
  67. package/dist/components/le-navigation.js.map +1 -0
  68. package/dist/components/le-number-input.js +1 -1
  69. package/dist/components/le-popover2.js +3 -3
  70. package/dist/components/le-round-progress.js +1 -1
  71. package/dist/components/le-scroll-progress.js +1 -1
  72. package/dist/components/le-segmented-control.js +1 -1
  73. package/dist/components/le-stack.js +1 -1
  74. package/dist/components/le-tab-bar.js +1 -1
  75. package/dist/components/le-tab-panel.js +2 -2
  76. package/dist/components/le-tab2.js +1 -1
  77. package/dist/components/le-tabs.js +2 -2
  78. package/dist/components/le-tag2.js +1 -1
  79. package/dist/components/le-turntable.js +1 -1
  80. package/dist/docs.json +544 -27
  81. package/dist/esm/index-CNv6tzAt.js.map +1 -1
  82. package/dist/esm/le-button_13.entry.js +17 -21
  83. package/dist/esm/le-icon.entry.js +106 -0
  84. package/dist/esm/le-icon.entry.js.map +1 -0
  85. package/dist/esm/le-kit.js +1 -1
  86. package/dist/esm/le-multiselect.entry.js +3 -3
  87. package/dist/esm/le-navigation.entry.js +503 -0
  88. package/dist/esm/le-navigation.entry.js.map +1 -0
  89. package/dist/esm/le-number-input.entry.js +1 -1
  90. package/dist/esm/le-round-progress.entry.js +1 -1
  91. package/dist/esm/le-segmented-control.entry.js +1 -1
  92. package/dist/esm/le-stack.entry.js +1 -1
  93. package/dist/esm/le-tab-bar.entry.js +1 -1
  94. package/dist/esm/le-tab-panel.entry.js +2 -2
  95. package/dist/esm/le-tab.entry.js +1 -1
  96. package/dist/esm/le-tabs.entry.js +2 -2
  97. package/dist/esm/le-tag.entry.js +1 -1
  98. package/dist/esm/le-turntable.entry.js +1 -1
  99. package/dist/esm/loader.js +1 -1
  100. package/dist/le-kit/dist/components/assets/custom-elements.json +1278 -533
  101. package/dist/le-kit/dist/components/assets/icons/chevron-down.json +13 -0
  102. package/dist/le-kit/dist/components/assets/icons/chevron-down.svg +3 -0
  103. package/dist/le-kit/le-kit.esm.js +1 -1
  104. package/dist/le-kit/{p-3327b089.entry.js → p-0ac4397c.entry.js} +2 -2
  105. package/dist/le-kit/{p-dfd20890.entry.js → p-25a29e69.entry.js} +2 -2
  106. package/dist/le-kit/{p-64c2cee1.entry.js → p-511fbb63.entry.js} +2 -2
  107. package/dist/le-kit/{p-4bdb03cb.entry.js → p-58120921.entry.js} +2 -2
  108. package/dist/le-kit/{p-b7c008de.entry.js → p-5ceb06d8.entry.js} +2 -2
  109. package/dist/le-kit/{p-e3f3cc8f.entry.js → p-9a3bdbe1.entry.js} +2 -2
  110. package/dist/le-kit/p-CNv6tzAt.js.map +1 -1
  111. package/dist/le-kit/{p-f88c804a.entry.js → p-a0d2c580.entry.js} +2 -2
  112. package/dist/le-kit/p-b1dc7e06.entry.js +2 -0
  113. package/dist/le-kit/p-b1dc7e06.entry.js.map +1 -0
  114. package/dist/le-kit/p-bb160082.entry.js +2 -0
  115. package/dist/le-kit/p-bb160082.entry.js.map +1 -0
  116. package/dist/le-kit/{p-da0265c5.entry.js → p-de5638c9.entry.js} +2 -2
  117. package/dist/le-kit/{p-1733d907.entry.js → p-e24d3e33.entry.js} +2 -2
  118. package/dist/le-kit/{p-6acdf000.entry.js → p-ec20e438.entry.js} +2 -2
  119. package/dist/le-kit/p-f2fa3bf5.entry.js +2 -0
  120. package/dist/le-kit/p-f2fa3bf5.entry.js.map +1 -0
  121. package/dist/le-kit/{p-02532919.entry.js → p-f4f2c3e7.entry.js} +2 -2
  122. package/dist/types/components/le-collapse/le-collapse.d.ts +5 -3
  123. package/dist/types/components/le-icon/le-icon.d.ts +28 -0
  124. package/dist/types/components/le-navigation/le-navigation.d.ts +116 -0
  125. package/dist/types/components.d.ts +204 -10
  126. package/dist/types/types/options.d.ts +5 -0
  127. package/package.json +1 -1
  128. package/dist/collection/dist/components/assets/.gitkeep +0 -1
  129. package/dist/components/assets/.gitkeep +0 -1
  130. package/dist/le-kit/dist/components/assets/.gitkeep +0 -1
  131. package/dist/le-kit/p-83007215.entry.js +0 -2
  132. package/dist/le-kit/p-83007215.entry.js.map +0 -1
  133. /package/dist/le-kit/{p-3327b089.entry.js.map → p-0ac4397c.entry.js.map} +0 -0
  134. /package/dist/le-kit/{p-dfd20890.entry.js.map → p-25a29e69.entry.js.map} +0 -0
  135. /package/dist/le-kit/{p-64c2cee1.entry.js.map → p-511fbb63.entry.js.map} +0 -0
  136. /package/dist/le-kit/{p-4bdb03cb.entry.js.map → p-58120921.entry.js.map} +0 -0
  137. /package/dist/le-kit/{p-b7c008de.entry.js.map → p-5ceb06d8.entry.js.map} +0 -0
  138. /package/dist/le-kit/{p-e3f3cc8f.entry.js.map → p-9a3bdbe1.entry.js.map} +0 -0
  139. /package/dist/le-kit/{p-f88c804a.entry.js.map → p-a0d2c580.entry.js.map} +0 -0
  140. /package/dist/le-kit/{p-da0265c5.entry.js.map → p-de5638c9.entry.js.map} +0 -0
  141. /package/dist/le-kit/{p-1733d907.entry.js.map → p-e24d3e33.entry.js.map} +0 -0
  142. /package/dist/le-kit/{p-6acdf000.entry.js.map → p-ec20e438.entry.js.map} +0 -0
  143. /package/dist/le-kit/{p-02532919.entry.js.map → p-f4f2c3e7.entry.js.map} +0 -0
@@ -0,0 +1,503 @@
1
+ import { r as registerInstance, d as createEvent, c as getElement, h, H as Host } from './index-CNv6tzAt.js';
2
+ import { g as generateId, c as classnames } from './utils-BzC2tvPX.js';
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-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)}`;
5
+
6
+ const LeNavigation = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ this.leNavItemSelect = createEvent(this, "leNavItemSelect");
10
+ this.leNavItemToggle = createEvent(this, "leNavItemToggle");
11
+ }
12
+ get el() { return getElement(this); }
13
+ /**
14
+ * Navigation items.
15
+ * Can be passed as an array or JSON string (same pattern as le-select).
16
+ */
17
+ items = [];
18
+ /**
19
+ * Layout orientation.
20
+ */
21
+ orientation = 'horizontal';
22
+ /**
23
+ * Horizontal wrapping behavior.
24
+ * If false, overflow behavior depends on `overflowMode`.
25
+ */
26
+ wrap = true;
27
+ /**
28
+ * Overflow behavior for horizontal, non-wrapping menus.
29
+ * - more: moves overflow items into a "More" popover
30
+ * - hamburger: turns the whole nav into a hamburger popover
31
+ */
32
+ overflowMode = 'more';
33
+ /**
34
+ * Active url for automatic selection.
35
+ */
36
+ activeUrl = '';
37
+ /**
38
+ * Enables a search input for the vertical navigation.
39
+ */
40
+ searchable = false;
41
+ /**
42
+ * Placeholder text for the search input.
43
+ */
44
+ searchPlaceholder = 'Search...';
45
+ /**
46
+ * Text shown when no items match the filter.
47
+ */
48
+ emptyText = 'No results found';
49
+ /**
50
+ * Whether submenu popovers should include a filter input.
51
+ */
52
+ submenuSearchable = false;
53
+ /**
54
+ * Fired when a navigation item is activated.
55
+ *
56
+ * This event is cancelable. Call `event.preventDefault()` to prevent
57
+ * default browser navigation and implement custom routing.
58
+ */
59
+ leNavItemSelect;
60
+ /**
61
+ * Fired when a tree branch is toggled.
62
+ */
63
+ leNavItemToggle;
64
+ searchQuery = '';
65
+ openState = {};
66
+ overflowIds = [];
67
+ hamburgerActive = false;
68
+ submenuQueries = {};
69
+ navContainerEl;
70
+ measureEl;
71
+ measureMoreEl;
72
+ topItemEls = new Map();
73
+ popoverRefs = new Map();
74
+ resizeObserver;
75
+ instanceId = generateId('le-nav');
76
+ handleLayoutInputsChange() {
77
+ this.scheduleOverflowRecalc();
78
+ }
79
+ componentDidLoad() {
80
+ this.setupResizeObserver();
81
+ this.scheduleOverflowRecalc();
82
+ }
83
+ disconnectedCallback() {
84
+ this.resizeObserver?.disconnect();
85
+ this.resizeObserver = undefined;
86
+ }
87
+ componentDidRender() {
88
+ // In case refs change after render.
89
+ this.scheduleOverflowRecalc();
90
+ }
91
+ setupResizeObserver() {
92
+ this.resizeObserver?.disconnect();
93
+ if (typeof ResizeObserver === 'undefined')
94
+ return;
95
+ this.resizeObserver = new ResizeObserver(() => this.computeOverflow());
96
+ this.observeContainer(this.navContainerEl);
97
+ }
98
+ observeContainer(el) {
99
+ if (!this.resizeObserver)
100
+ return;
101
+ this.resizeObserver.disconnect();
102
+ if (el)
103
+ this.resizeObserver.observe(el);
104
+ }
105
+ scheduleOverflowRecalc() {
106
+ // Avoid work for vertical layout.
107
+ if (this.orientation !== 'horizontal')
108
+ return;
109
+ // Ensure it runs after layout.
110
+ requestAnimationFrame(() => this.computeOverflow());
111
+ }
112
+ get parsedItems() {
113
+ if (typeof this.items === 'string') {
114
+ try {
115
+ return JSON.parse(this.items);
116
+ }
117
+ catch {
118
+ return [];
119
+ }
120
+ }
121
+ return this.items;
122
+ }
123
+ getItemId(item, path) {
124
+ return item.id ?? `${this.instanceId}:${path}`;
125
+ }
126
+ getChildItems(item) {
127
+ return Array.isArray(item.children) ? item.children : [];
128
+ }
129
+ isOpen(item, id) {
130
+ const fromState = this.openState[id];
131
+ if (typeof fromState === 'boolean')
132
+ return fromState;
133
+ return !!item.open;
134
+ }
135
+ setOpen(id, open) {
136
+ if (this.openState[id] === open)
137
+ return;
138
+ this.openState = {
139
+ ...this.openState,
140
+ [id]: open,
141
+ };
142
+ }
143
+ matchesQuery(option, query) {
144
+ if (!query)
145
+ return true;
146
+ const q = query.toLowerCase();
147
+ return (option.label.toLowerCase().includes(q) ||
148
+ (option.description?.toLowerCase().includes(q) ?? false));
149
+ }
150
+ filterTree(items, query, pathPrefix, autoOpen) {
151
+ if (!query)
152
+ return items;
153
+ const result = [];
154
+ items.forEach((item, index) => {
155
+ const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);
156
+ const id = this.getItemId(item, path);
157
+ const children = this.getChildItems(item);
158
+ const filteredChildren = this.filterTree(children, query, path, autoOpen);
159
+ const selfMatch = this.matchesQuery(item, query);
160
+ const childMatch = filteredChildren.length > 0;
161
+ if (selfMatch || childMatch) {
162
+ if (childMatch) {
163
+ autoOpen.add(id);
164
+ }
165
+ if (childMatch && filteredChildren !== children) {
166
+ result.push({
167
+ ...item,
168
+ children: filteredChildren,
169
+ });
170
+ }
171
+ else {
172
+ result.push(item);
173
+ }
174
+ }
175
+ });
176
+ return result;
177
+ }
178
+ handleItemSelect = (e, item, id) => {
179
+ if (item.disabled) {
180
+ e.preventDefault();
181
+ e.stopPropagation();
182
+ return;
183
+ }
184
+ const emitted = this.leNavItemSelect.emit({
185
+ item,
186
+ id,
187
+ href: item.href,
188
+ originalEvent: e,
189
+ });
190
+ if (emitted.defaultPrevented) {
191
+ e.preventDefault();
192
+ }
193
+ };
194
+ handleToggle = (e, item, id) => {
195
+ e.preventDefault();
196
+ e.stopPropagation();
197
+ if (item.disabled)
198
+ return;
199
+ const next = !this.isOpen(item, id);
200
+ this.setOpen(id, next);
201
+ this.leNavItemToggle.emit({
202
+ item,
203
+ id,
204
+ open: next,
205
+ originalEvent: e,
206
+ });
207
+ };
208
+ handleSearchInput = (e) => {
209
+ const target = e.target;
210
+ this.searchQuery = target.value;
211
+ };
212
+ handleSubmenuSearchInput = (submenuId, e) => {
213
+ const target = e.target;
214
+ const value = target.value;
215
+ if (this.submenuQueries[submenuId] === value)
216
+ return;
217
+ this.submenuQueries = {
218
+ ...this.submenuQueries,
219
+ [submenuId]: value,
220
+ };
221
+ // Position may change as items filter.
222
+ requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
223
+ };
224
+ getTopLevelIds(items) {
225
+ return items.map((item, index) => this.getItemId(item, String(index)));
226
+ }
227
+ computeOverflow() {
228
+ // Only applies to horizontal, non-wrapping navs.
229
+ if (this.orientation !== 'horizontal' || this.wrap) {
230
+ if (this.overflowIds.length)
231
+ this.overflowIds = [];
232
+ if (this.hamburgerActive)
233
+ this.hamburgerActive = false;
234
+ return;
235
+ }
236
+ const container = this.navContainerEl;
237
+ if (!container)
238
+ return;
239
+ const topIds = this.getTopLevelIds(this.parsedItems);
240
+ const widths = topIds.map(id => this.topItemEls.get(id)?.getBoundingClientRect().width ?? 0);
241
+ const totalWidth = widths.reduce((a, b) => a + b, 0);
242
+ const availableWidth = container.getBoundingClientRect().width;
243
+ if (this.overflowMode === 'hamburger') {
244
+ const shouldHamburger = totalWidth > availableWidth;
245
+ if (shouldHamburger !== this.hamburgerActive) {
246
+ this.hamburgerActive = shouldHamburger;
247
+ }
248
+ if (this.overflowIds.length)
249
+ this.overflowIds = [];
250
+ return;
251
+ }
252
+ // overflowMode === 'more'
253
+ this.computeOverflowMoreByWrap(availableWidth);
254
+ }
255
+ computeOverflowMoreByWrap(availableWidth) {
256
+ const container = this.navContainerEl;
257
+ const measure = this.measureEl;
258
+ const measureMore = this.measureMoreEl;
259
+ const items = this.parsedItems;
260
+ if (!container || !measure)
261
+ return;
262
+ // Ensure measurement container matches visible container width.
263
+ measure.style.width = `${availableWidth}px`;
264
+ const allIds = this.getTopLevelIds(items);
265
+ const itemEls = allIds
266
+ .map(id => measure.querySelector(`[data-nav-id="${CSS.escape(id)}"]`))
267
+ .filter((el) => !!el);
268
+ // Reset measurement visibility.
269
+ itemEls.forEach(el => {
270
+ el.style.display = '';
271
+ });
272
+ if (measureMore) {
273
+ measureMore.style.display = 'none';
274
+ }
275
+ if (itemEls.length === 0) {
276
+ if (!this.overflowIds || this.overflowIds.length) {
277
+ this.overflowIds = [];
278
+ }
279
+ return;
280
+ }
281
+ const firstRowTop = Math.min(...itemEls.map(el => el.offsetTop));
282
+ const overflowSet = new Set();
283
+ // Pass 1: detect which items fall onto rows > 1 (without "More" in flow).
284
+ itemEls.forEach(el => {
285
+ const id = el.getAttribute('data-nav-id');
286
+ if (!id)
287
+ return;
288
+ if (el.offsetTop > firstRowTop)
289
+ overflowSet.add(id);
290
+ });
291
+ if (overflowSet.size === 0) {
292
+ if (!this.overflowIds || this.overflowIds.length) {
293
+ this.overflowIds = [];
294
+ }
295
+ return;
296
+ }
297
+ // Pass 2: show "More" and iteratively move items into overflow until "More" fits on row 1.
298
+ if (measureMore) {
299
+ measureMore.style.display = '';
300
+ }
301
+ // Hide currently overflowing items.
302
+ itemEls.forEach(el => {
303
+ const id = el.getAttribute('data-nav-id');
304
+ if (!id)
305
+ return;
306
+ if (overflowSet.has(id))
307
+ el.style.display = 'none';
308
+ });
309
+ const getVisibleItemEls = () => itemEls.filter(el => el.style.display !== 'none');
310
+ while (measureMore) {
311
+ const visible = getVisibleItemEls();
312
+ const rowTop = visible.length ? Math.min(...visible.map(el => el.offsetTop)) : 0;
313
+ if (measureMore.offsetTop <= rowTop)
314
+ break;
315
+ if (visible.length === 0)
316
+ break;
317
+ // Remove one last visible item and retry.
318
+ const last = visible[visible.length - 1];
319
+ const lastId = last.getAttribute('data-nav-id');
320
+ if (!lastId)
321
+ break;
322
+ last.style.display = 'none';
323
+ overflowSet.add(lastId);
324
+ }
325
+ const overflowIds = allIds.filter(id => overflowSet.has(id));
326
+ const same = overflowIds.length === this.overflowIds.length &&
327
+ overflowIds.every((v, i) => v === this.overflowIds[i]);
328
+ if (!same) {
329
+ this.overflowIds = overflowIds;
330
+ }
331
+ }
332
+ renderHorizontalMeasureItem(item, index) {
333
+ const id = this.getItemId(item, String(index));
334
+ const children = this.getChildItems(item);
335
+ const hasChildren = children.length > 0;
336
+ const setRef = (el) => {
337
+ if (el)
338
+ this.topItemEls.set(id, el);
339
+ };
340
+ if (!hasChildren) {
341
+ 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)))));
342
+ }
343
+ 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("span", { class: "nav-chevron" }, "\u25BC")))));
344
+ }
345
+ renderVerticalList(items, { depth, pathPrefix, autoOpenIds, searchable, searchQuery, searchPlaceholder, emptyText, submenuId, }) {
346
+ const query = searchQuery ?? '';
347
+ const openFromSearch = autoOpenIds ?? new Set();
348
+ const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;
349
+ return (h("div", { class: classnames('nav-vertical', { 'is-submenu': !!submenuId }) }, searchable && (h("div", { class: "nav-search" }, h("le-string-input", { mode: "default", class: "nav-search-input", placeholder: searchPlaceholder ?? 'Search...', value: query, onInput: (e) => submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e) }))), filtered.length === 0 ? (h("div", { class: "nav-empty" }, emptyText ?? this.emptyText)) : (h("ul", { class: "nav-list", role: "tree" }, filtered.map((item, index) => {
350
+ const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);
351
+ const id = this.getItemId(item, path);
352
+ const children = this.getChildItems(item);
353
+ const hasChildren = children.length > 0;
354
+ const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));
355
+ const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;
356
+ const TagType = item.href && !item.disabled ? 'a' : 'button';
357
+ const attrs = TagType === 'a'
358
+ ? { href: item.href, role: 'treeitem' }
359
+ : { type: 'button', role: 'treeitem' };
360
+ return (h("li", { class: classnames('nav-node', {
361
+ 'disabled': item.disabled,
362
+ 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),
363
+ open,
364
+ 'has-children': hasChildren,
365
+ }), key: id, role: "none" }, h("div", { class: "nav-row", style: { paddingLeft } }, hasChildren ? (h("button", { type: "button", class: "nav-toggle", "aria-label": open ? 'Collapse' : 'Expand', "aria-expanded": open ? 'true' : 'false', onClick: (e) => this.handleToggle(e, item, id), disabled: item.disabled }, h("le-icon", { name: "chevron-down", class: "nav-chevron", "aria-hidden": "true" }))) : (h("span", { class: "nav-toggle-spacer", "aria-hidden": "true" })), h(TagType, { class: "nav-item", ...attrs, "aria-disabled": item.disabled ? 'true' : undefined, onClick: (e) => {
366
+ // For buttons, also toggle if this is a purely structural node.
367
+ this.handleItemSelect(e, item, id);
368
+ if (!item.href && hasChildren && !item.disabled) {
369
+ this.handleToggle(e, item, id);
370
+ }
371
+ } }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "nav-text" }, h("span", { class: "nav-label" }, item.label), item.description && (h("span", { class: "nav-description" }, item.description))), item.iconEnd && (h("span", { class: "nav-icon nav-icon-end", "aria-hidden": "true" }, item.iconEnd)))), hasChildren && (h("le-collapse", { class: "nav-children", closed: !open, noFading: true, role: "group" }, this.renderVerticalList(children, {
372
+ depth: depth + 1,
373
+ pathPrefix: path,
374
+ autoOpenIds: openFromSearch,
375
+ })))));
376
+ })))));
377
+ }
378
+ renderHorizontalItem(item, index) {
379
+ const id = this.getItemId(item, String(index));
380
+ const children = this.getChildItems(item);
381
+ const hasChildren = children.length > 0;
382
+ if (!hasChildren) {
383
+ const TagType = item.href && !item.disabled ? 'a' : 'button';
384
+ const attrs = TagType === 'a'
385
+ ? { href: item.href, role: 'menuitem' }
386
+ : { type: 'button', role: 'menuitem' };
387
+ return (h("div", { class: "h-item" }, h(TagType, { class: classnames('h-link', {
388
+ disabled: item.disabled,
389
+ selected: item.selected || (this.activeUrl && item.href === this.activeUrl),
390
+ }), ...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)))));
391
+ }
392
+ const submenuId = id;
393
+ return (h("div", { class: "h-item" }, h("le-popover", { ref: el => {
394
+ if (el)
395
+ this.popoverRefs.set(submenuId, el);
396
+ }, mode: "default", showClose: false, closeOnClickOutside: true, closeOnEscape: true, position: "bottom", align: "start", minWidth: "240px" }, h("div", { slot: "trigger", class: classnames('h-trigger', {
397
+ disabled: item.disabled,
398
+ selected: item.selected || (this.activeUrl && item.href === this.activeUrl),
399
+ }), role: "menuitem", "aria-disabled": item.disabled ? 'true' : undefined, onClick: (e) => {
400
+ // Don’t let le-popover auto-toggle from its internal wrapper.
401
+ e.stopPropagation();
402
+ if (item.disabled)
403
+ return;
404
+ if (item.href) {
405
+ this.handleItemSelect(e, item, id);
406
+ }
407
+ else {
408
+ this.popoverRefs.get(submenuId)?.toggle();
409
+ }
410
+ } }, item.href ? (h("a", { class: "h-link", href: item.href, onClick: (e) => {
411
+ e.stopPropagation();
412
+ this.handleItemSelect(e, item, id);
413
+ } }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "h-label" }, item.label))) : (h("button", { type: "button", class: "h-link", onClick: (e) => {
414
+ e.stopPropagation();
415
+ if (item.disabled)
416
+ return;
417
+ this.popoverRefs.get(submenuId)?.toggle();
418
+ } }, item.iconStart && (h("span", { class: "nav-icon", "aria-hidden": "true" }, item.iconStart)), h("span", { class: "h-label" }, item.label))), h("button", { type: "button", class: "h-submenu-toggle", "aria-label": "Open submenu", onClick: (e) => {
419
+ e.preventDefault();
420
+ e.stopPropagation();
421
+ if (item.disabled)
422
+ return;
423
+ this.popoverRefs.get(submenuId)?.toggle();
424
+ } }, h("span", { class: "nav-chevron", "aria-hidden": "true" }, h("le-icon", { name: "chevron-down" })))), h("div", { class: "popover-menu" }, this.renderVerticalList(children, {
425
+ depth: 0,
426
+ pathPrefix: String(index),
427
+ searchable: this.submenuSearchable,
428
+ searchQuery: this.submenuQueries[submenuId] ?? '',
429
+ searchPlaceholder: this.searchPlaceholder,
430
+ emptyText: this.emptyText,
431
+ submenuId,
432
+ })))));
433
+ }
434
+ renderHorizontal() {
435
+ const items = this.parsedItems;
436
+ const overflowSet = new Set(this.overflowIds);
437
+ const overflowItems = [];
438
+ items.forEach((item, index) => {
439
+ const id = this.getItemId(item, String(index));
440
+ if (!this.wrap && this.overflowMode === 'more' && overflowSet.has(id)) {
441
+ overflowItems.push(item);
442
+ }
443
+ });
444
+ // Hamburger mode: show a single trigger if anything overflows.
445
+ if (!this.wrap && this.overflowMode === 'hamburger' && this.hamburgerActive) {
446
+ return (h("div", { class: "nav-horizontal-shell" }, h("div", { class: "nav-horizontal-measure", "aria-hidden": "true", ref: el => {
447
+ this.measureEl = el;
448
+ } }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
449
+ this.measureMoreEl = el;
450
+ } }, h("button", { type: "button", class: "overflow-trigger" }, "More"))), h("div", { class: "nav-horizontal", ref: el => {
451
+ this.navContainerEl = el;
452
+ this.setupResizeObserver();
453
+ this.observeContainer(this.navContainerEl);
454
+ } }, h("le-popover", { mode: "default", showClose: false, closeOnClickOutside: true, closeOnEscape: true, position: "bottom", align: "end", minWidth: "260px" }, h("button", { slot: "trigger", type: "button", class: "overflow-trigger", "aria-label": "Open menu" }, "\u2630"), h("div", { class: "popover-menu" }, this.renderVerticalList(items, { depth: 0, pathPrefix: '' }))))));
455
+ }
456
+ const showMore = !this.wrap && this.overflowMode === 'more' && overflowItems.length > 0;
457
+ return (h("div", { class: "nav-horizontal-shell", role: "menubar" }, h("div", { class: "nav-horizontal-measure", "aria-hidden": "true", ref: el => {
458
+ this.measureEl = el;
459
+ } }, items.map((item, index) => this.renderHorizontalMeasureItem(item, index)), h("div", { class: "h-item", ref: el => {
460
+ this.measureMoreEl = el;
461
+ } }, h("button", { type: "button", class: "overflow-trigger" }, "More"))), h("div", { class: classnames('nav-horizontal', {
462
+ wrap: this.wrap,
463
+ nowrap: !this.wrap,
464
+ }), ref: el => {
465
+ this.navContainerEl = el;
466
+ this.setupResizeObserver();
467
+ this.observeContainer(this.navContainerEl);
468
+ } }, items.map((item, index) => {
469
+ const id = this.getItemId(item, String(index));
470
+ const isOverflow = !this.wrap && this.overflowMode === 'more' && overflowSet.has(id);
471
+ if (isOverflow)
472
+ return null;
473
+ return this.renderHorizontalItem(item, index);
474
+ }), h("div", { class: classnames('more-trigger-wrap', {
475
+ 'is-visible': showMore,
476
+ 'is-measure': !showMore,
477
+ }) }, h("le-popover", { mode: "default", position: "bottom", align: "end", minWidth: "260px", showClose: false }, h("button", { slot: "trigger", type: "button", class: "overflow-trigger", "aria-label": "More" }, "More"), h("div", { class: "popover-menu" }, this.renderVerticalList(overflowItems, { depth: 0, pathPrefix: '' })))))));
478
+ }
479
+ render() {
480
+ const items = this.parsedItems;
481
+ if (this.orientation === 'horizontal') {
482
+ return (h(Host, null, h("le-component", { component: "le-navigation" }, this.renderHorizontal())));
483
+ }
484
+ return (h(Host, null, h("le-component", { component: "le-navigation" }, this.renderVerticalList(items, {
485
+ depth: 0,
486
+ pathPrefix: '',
487
+ searchable: this.searchable,
488
+ searchQuery: this.searchQuery,
489
+ searchPlaceholder: this.searchPlaceholder,
490
+ emptyText: this.emptyText,
491
+ }))));
492
+ }
493
+ static get watchers() { return {
494
+ "items": ["handleLayoutInputsChange"],
495
+ "orientation": ["handleLayoutInputsChange"],
496
+ "wrap": ["handleLayoutInputsChange"],
497
+ "overflowMode": ["handleLayoutInputsChange"]
498
+ }; }
499
+ };
500
+ LeNavigation.style = leNavigationCss();
501
+
502
+ export { LeNavigation as le_navigation };
503
+ //# sourceMappingURL=le-navigation.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-navigation.entry.js","sources":["src/components/le-navigation/le-navigation.css?tag=le-navigation&encapsulation=shadow","src/components/le-navigation/le-navigation.tsx"],"sourcesContent":[":host {\n display: block;\n\n --le-nav-radius: var(--le-radius-md);\n --le-nav-gap: var(--le-spacing-2);\n --le-nav-item-padding-x: var(--le-spacing-1);\n --le-nav-item-padding-y: var(--le-spacing-2);\n --le-nav-item-gap: var(--le-spacing-2);\n\n --le-nav-color: var(--le-color-text-primary);\n --le-nav-muted: var(--le-color-text-secondary);\n --le-nav-hover-bg: var(--le-color-gray-100);\n --le-nav-selected-bg: var(--le-color-primary);\n --le-nav-selected-color: var(--le-color-primary-contrast);\n}\n\n/* ==========================================\n * Vertical navigation\n * ========================================== */\n\n.nav-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--le-nav-gap);\n}\n\n.nav-search {\n width: 100%;\n}\n\n.nav-search-input {\n --le-input-radius: var(--le-radius-md);\n}\n\n.nav-empty {\n padding: var(--le-spacing-2);\n color: var(--le-nav-muted);\n font-size: var(--le-font-size-sm);\n}\n\n.nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--le-spacing-1);\n}\n\n.nav-row {\n display: flex;\n align-items: stretch;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.nav-row:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.nav-toggle,\n.nav-toggle-spacer {\n box-sizing: border-box;\n width: var(--le-spacing-4);\n min-width: var(--le-spacing-4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n color: inherit;\n}\n\n.nav-toggle {\n background: transparent;\n cursor: pointer;\n opacity: 0.4;\n}\n\n.nav-toggle:hover:not(:disabled) {\n opacity: 1;\n}\n\n.nav-toggle:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n opacity: 1;\n}\n\n.nav-chevron {\n display: inline-block;\n transition: transform var(--le-transition-fast);\n}\n\n.nav-chevron svg {\n display: block;\n width: var(--le-spacing-4);\n height: var(--le-spacing-4);\n}\n\n.nav-node > div > button > .nav-chevron {\n transform: rotate(-90deg);\n}\n.nav-node.open > div > button > .nav-chevron {\n transform: rotate(0deg);\n}\n\n.nav-item {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--le-nav-item-gap);\n padding: var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n line-height: var(--le-line-height-tight);\n cursor: pointer;\n}\n\n.nav-item:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.nav-node.selected > .nav-row {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n.nav-node.selected > .nav-row > .nav-item {\n color: inherit;\n}\n\n.nav-node.disabled > .nav-row > .nav-item {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.nav-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.nav-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-description {\n color: color-mix(in srgb, var(--le-nav-muted) 90%, transparent);\n font-size: var(--le-font-size-sm);\n line-height: var(--le-line-height-tight);\n}\n\n.nav-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-icon-end {\n margin-left: auto;\n}\n\n.nav-children {\n margin-top: var(--le-spacing-1);\n}\n\n/* ==========================================\n * Horizontal navigation\n * ========================================== */\n\n.nav-horizontal {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-horizontal-shell {\n position: relative;\n}\n\n.nav-horizontal-measure {\n position: absolute;\n left: -10000px;\n top: -10000px;\n visibility: hidden;\n pointer-events: none;\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n flex-wrap: wrap;\n}\n\n.nav-horizontal.wrap {\n flex-wrap: wrap;\n}\n\n.nav-horizontal.nowrap {\n flex-wrap: nowrap;\n overflow: hidden;\n}\n\n.h-item {\n display: flex;\n align-items: center;\n}\n\n.h-link {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n cursor: pointer;\n}\n\n.h-link:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.h-link:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.h-link.disabled,\n.h-trigger.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.h-link.selected,\n.h-trigger.selected {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n\n.h-label {\n white-space: nowrap;\n}\n\n.h-trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.h-submenu-toggle {\n width: var(--le-spacing-3);\n height: var(--le-spacing-3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n background: transparent;\n color: currentColor;\n cursor: pointer;\n}\n\n.h-submenu-toggle:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.more-trigger-wrap {\n display: flex;\n align-items: center;\n}\n\n.more-trigger-wrap.is-measure {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n}\n\n.more-trigger-wrap.is-visible {\n position: static;\n visibility: visible;\n}\n\n.overflow-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n color: var(--le-nav-color);\n cursor: pointer;\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n}\n\n.overflow-trigger:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Popover list container */\nle-popover::part(content) {\n padding: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n @State() private overflowIds: string[] = [];\n\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n private navContainerEl?: HTMLElement;\n\n private measureEl?: HTMLElement;\n private measureMoreEl?: HTMLElement;\n\n private topItemEls: Map<string, HTMLElement> = new Map();\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private resizeObserver?: ResizeObserver;\n\n private instanceId: string = generateId('le-nav');\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n this.scheduleOverflowRecalc();\n }\n\n componentDidLoad() {\n this.setupResizeObserver();\n this.scheduleOverflowRecalc();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n }\n\n componentDidRender() {\n // In case refs change after render.\n this.scheduleOverflowRecalc();\n }\n\n private setupResizeObserver() {\n this.resizeObserver?.disconnect();\n\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => this.computeOverflow());\n this.observeContainer(this.navContainerEl);\n }\n\n private observeContainer(el?: HTMLElement) {\n if (!this.resizeObserver) return;\n this.resizeObserver.disconnect();\n if (el) this.resizeObserver.observe(el);\n }\n\n private scheduleOverflowRecalc() {\n // Avoid work for vertical layout.\n if (this.orientation !== 'horizontal') return;\n\n // Ensure it runs after layout.\n requestAnimationFrame(() => this.computeOverflow());\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private getTopLevelIds(items: LeOption[]): string[] {\n return items.map((item, index) => this.getItemId(item, String(index)));\n }\n\n private computeOverflow() {\n // Only applies to horizontal, non-wrapping navs.\n if (this.orientation !== 'horizontal' || this.wrap) {\n if (this.overflowIds.length) this.overflowIds = [];\n if (this.hamburgerActive) this.hamburgerActive = false;\n return;\n }\n\n const container = this.navContainerEl;\n if (!container) return;\n\n const topIds = this.getTopLevelIds(this.parsedItems);\n const widths = topIds.map(id => this.topItemEls.get(id)?.getBoundingClientRect().width ?? 0);\n\n const totalWidth = widths.reduce((a, b) => a + b, 0);\n const availableWidth = container.getBoundingClientRect().width;\n\n if (this.overflowMode === 'hamburger') {\n const shouldHamburger = totalWidth > availableWidth;\n if (shouldHamburger !== this.hamburgerActive) {\n this.hamburgerActive = shouldHamburger;\n }\n if (this.overflowIds.length) this.overflowIds = [];\n return;\n }\n\n // overflowMode === 'more'\n this.computeOverflowMoreByWrap(availableWidth);\n }\n\n private computeOverflowMoreByWrap(availableWidth: number) {\n const container = this.navContainerEl;\n const measure = this.measureEl;\n const measureMore = this.measureMoreEl;\n const items = this.parsedItems;\n\n if (!container || !measure) return;\n\n // Ensure measurement container matches visible container width.\n measure.style.width = `${availableWidth}px`;\n\n const allIds = this.getTopLevelIds(items);\n const itemEls = allIds\n .map(id => measure.querySelector<HTMLElement>(`[data-nav-id=\"${CSS.escape(id)}\"]`))\n .filter((el): el is HTMLElement => !!el);\n\n // Reset measurement visibility.\n itemEls.forEach(el => {\n el.style.display = '';\n });\n if (measureMore) {\n measureMore.style.display = 'none';\n }\n\n if (itemEls.length === 0) {\n if (!this.overflowIds || this.overflowIds.length) {\n this.overflowIds = [];\n }\n return;\n }\n\n const firstRowTop = Math.min(...itemEls.map(el => el.offsetTop));\n const overflowSet = new Set<string>();\n\n // Pass 1: detect which items fall onto rows > 1 (without \"More\" in flow).\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (el.offsetTop > firstRowTop) overflowSet.add(id);\n });\n\n if (overflowSet.size === 0) {\n if (!this.overflowIds || this.overflowIds.length) {\n this.overflowIds = [];\n }\n return;\n }\n\n // Pass 2: show \"More\" and iteratively move items into overflow until \"More\" fits on row 1.\n if (measureMore) {\n measureMore.style.display = '';\n }\n\n // Hide currently overflowing items.\n itemEls.forEach(el => {\n const id = el.getAttribute('data-nav-id');\n if (!id) return;\n if (overflowSet.has(id)) el.style.display = 'none';\n });\n\n const getVisibleItemEls = () => itemEls.filter(el => el.style.display !== 'none');\n\n while (measureMore) {\n const visible = getVisibleItemEls();\n const rowTop = visible.length ? Math.min(...visible.map(el => el.offsetTop)) : 0;\n\n if (measureMore.offsetTop <= rowTop) break;\n if (visible.length === 0) break;\n\n // Remove one last visible item and retry.\n const last = visible[visible.length - 1];\n const lastId = last.getAttribute('data-nav-id');\n if (!lastId) break;\n\n last.style.display = 'none';\n overflowSet.add(lastId);\n }\n\n const overflowIds = allIds.filter(id => overflowSet.has(id));\n\n const same =\n overflowIds.length === this.overflowIds.length &&\n overflowIds.every((v, i) => v === this.overflowIds[i]);\n\n if (!same) {\n this.overflowIds = overflowIds;\n }\n }\n\n private renderHorizontalMeasureItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n const setRef = (el?: HTMLElement) => {\n if (el) this.topItemEls.set(id, el);\n };\n\n if (!hasChildren) {\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </span>\n </div>\n );\n }\n\n return (\n <div class=\"h-item\" ref={setRef} data-nav-id={id}>\n <span class=\"h-trigger\">\n <span class=\"h-link\">\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n </span>\n <span class=\"h-submenu-toggle\" aria-hidden=\"true\">\n <span class=\"nav-chevron\">▼</span>\n </span>\n </span>\n </div>\n );\n }\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n return (\n <div class=\"h-item\">\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n return (\n <div class=\"h-item\">\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n </button>\n )}\n\n <button\n type=\"button\"\n class=\"h-submenu-toggle\"\n aria-label=\"Open submenu\"\n onClick={(e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n\n const overflowSet = new Set(this.overflowIds);\n\n const overflowItems: LeOption[] = [];\n items.forEach((item, index) => {\n const id = this.getItemId(item, String(index));\n if (!this.wrap && this.overflowMode === 'more' && overflowSet.has(id)) {\n overflowItems.push(item);\n }\n });\n\n // Hamburger mode: show a single trigger if anything overflows.\n if (!this.wrap && this.overflowMode === 'hamburger' && this.hamburgerActive) {\n return (\n <div class=\"nav-horizontal-shell\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n More\n </button>\n </div>\n </div>\n\n <div\n class=\"nav-horizontal\"\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n <le-popover\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n >\n <button slot=\"trigger\" type=\"button\" class=\"overflow-trigger\" aria-label=\"Open menu\">\n ☰\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(items, { depth: 0, pathPrefix: '' })}\n </div>\n </le-popover>\n </div>\n </div>\n );\n }\n\n const showMore = !this.wrap && this.overflowMode === 'more' && overflowItems.length > 0;\n\n return (\n <div class=\"nav-horizontal-shell\" role=\"menubar\">\n <div\n class=\"nav-horizontal-measure\"\n aria-hidden=\"true\"\n ref={el => {\n this.measureEl = el as HTMLElement;\n }}\n >\n {items.map((item, index) => this.renderHorizontalMeasureItem(item, index))}\n <div\n class=\"h-item\"\n ref={el => {\n this.measureMoreEl = el as HTMLElement;\n }}\n >\n <button type=\"button\" class=\"overflow-trigger\">\n More\n </button>\n </div>\n </div>\n\n <div\n class={classnames('nav-horizontal', {\n wrap: this.wrap,\n nowrap: !this.wrap,\n })}\n ref={el => {\n this.navContainerEl = el as HTMLElement;\n this.setupResizeObserver();\n this.observeContainer(this.navContainerEl);\n }}\n >\n {items.map((item, index) => {\n const id = this.getItemId(item, String(index));\n const isOverflow = !this.wrap && this.overflowMode === 'more' && overflowSet.has(id);\n if (isOverflow) return null;\n return this.renderHorizontalItem(item, index);\n })}\n\n {/* Render a hidden trigger for measurement when not visible */}\n <div\n class={classnames('more-trigger-wrap', {\n 'is-visible': showMore,\n 'is-measure': !showMore,\n })}\n >\n <le-popover\n mode=\"default\"\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n showClose={false}\n >\n <button slot=\"trigger\" type=\"button\" class=\"overflow-trigger\" aria-label=\"More\">\n More\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(overflowItems, { depth: 0, pathPrefix: '' })}\n </div>\n </le-popover>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}