le-kit 0.3.1 → 0.3.3

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 (155) hide show
  1. package/dist/cjs/{index-CNRmviSz.js → index-BDXkMiZB.js} +27 -2
  2. package/dist/cjs/index-BDXkMiZB.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +3 -2
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/{le-button_13.cjs.entry.js → le-bar_16.cjs.entry.js} +967 -7
  6. package/dist/cjs/le-box.cjs.entry.js +2 -2
  7. package/dist/cjs/le-card.cjs.entry.js +2 -2
  8. package/dist/cjs/le-combobox.cjs.entry.js +1 -1
  9. package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
  10. package/dist/cjs/le-kit.cjs.js +2 -2
  11. package/dist/cjs/le-multiselect.cjs.entry.js +1 -1
  12. package/dist/cjs/le-number-input.cjs.entry.js +2 -2
  13. package/dist/cjs/le-round-progress.cjs.entry.js +1 -1
  14. package/dist/cjs/le-segmented-control.cjs.entry.js +1 -1
  15. package/dist/cjs/le-stack.cjs.entry.js +2 -2
  16. package/dist/cjs/le-tab-bar.cjs.entry.js +1 -1
  17. package/dist/cjs/le-tab-panel.cjs.entry.js +1 -1
  18. package/dist/cjs/le-tab.cjs.entry.js +2 -2
  19. package/dist/cjs/le-tabs.cjs.entry.js +2 -2
  20. package/dist/cjs/le-tag.cjs.entry.js +1 -1
  21. package/dist/cjs/le-text.cjs.entry.js +2 -2
  22. package/dist/cjs/le-turntable.cjs.entry.js +1 -1
  23. package/dist/cjs/loader.cjs.js +2 -2
  24. package/dist/cjs/{utils-CZG22_vQ.js → utils-Co3xnkR-.js} +3 -3
  25. package/dist/cjs/{utils-CZG22_vQ.js.map → utils-Co3xnkR-.js.map} +1 -1
  26. package/dist/collection/components/le-bar/le-bar.js +59 -7
  27. package/dist/collection/components/le-bar/le-bar.js.map +1 -1
  28. package/dist/collection/components/le-component/le-component.js +1 -1
  29. package/dist/collection/components/le-component/le-component.js.map +1 -1
  30. package/dist/collection/components/le-icon/le-icon.js +19 -4
  31. package/dist/collection/components/le-icon/le-icon.js.map +1 -1
  32. package/dist/collection/components/le-navigation/le-navigation.js +3 -3
  33. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
  34. package/dist/collection/components/le-select/le-select.js +3 -3
  35. package/dist/collection/components/le-select/le-select.js.map +1 -1
  36. package/dist/collection/dist/components/assets/custom-elements.json +1057 -1039
  37. package/dist/collection/global/app.js +24 -0
  38. package/dist/collection/global/app.js.map +1 -1
  39. package/dist/collection/index.js +1 -1
  40. package/dist/collection/index.js.map +1 -1
  41. package/dist/components/app.js +194 -0
  42. package/dist/components/app.js.map +1 -0
  43. package/dist/components/assets/custom-elements.json +1057 -1039
  44. package/dist/components/index.js +3 -2
  45. package/dist/components/index.js.map +1 -1
  46. package/dist/components/le-bar2.js +41 -8
  47. package/dist/components/le-bar2.js.map +1 -1
  48. package/dist/components/le-box.js +1 -1
  49. package/dist/components/le-button2.js +6 -5
  50. package/dist/components/le-button2.js.map +1 -1
  51. package/dist/components/le-card.js +1 -1
  52. package/dist/components/le-header.js +1 -1
  53. package/dist/components/le-icon2.js +19 -4
  54. package/dist/components/le-icon2.js.map +1 -1
  55. package/dist/components/le-navigation.js +3 -3
  56. package/dist/components/le-navigation.js.map +1 -1
  57. package/dist/components/le-number-input.js +1 -1
  58. package/dist/components/le-popover2.js +1 -1
  59. package/dist/components/le-stack.js +1 -1
  60. package/dist/components/le-tab2.js +1 -1
  61. package/dist/components/le-tabs.js +1 -1
  62. package/dist/components/utils.js +2 -166
  63. package/dist/components/utils.js.map +1 -1
  64. package/dist/docs.json +33 -4
  65. package/dist/esm/{index-BqH-zsXr.js → index-Bb6rgQY0.js} +27 -3
  66. package/dist/esm/index-Bb6rgQY0.js.map +1 -0
  67. package/dist/esm/index.js +2 -2
  68. package/dist/esm/{le-button_13.entry.js → le-bar_16.entry.js} +965 -8
  69. package/dist/esm/le-box.entry.js +2 -2
  70. package/dist/esm/le-card.entry.js +2 -2
  71. package/dist/esm/le-combobox.entry.js +1 -1
  72. package/dist/esm/le-header-placeholder.entry.js +1 -1
  73. package/dist/esm/le-kit.js +3 -3
  74. package/dist/esm/le-multiselect.entry.js +1 -1
  75. package/dist/esm/le-number-input.entry.js +2 -2
  76. package/dist/esm/le-round-progress.entry.js +1 -1
  77. package/dist/esm/le-segmented-control.entry.js +1 -1
  78. package/dist/esm/le-stack.entry.js +2 -2
  79. package/dist/esm/le-tab-bar.entry.js +1 -1
  80. package/dist/esm/le-tab-panel.entry.js +1 -1
  81. package/dist/esm/le-tab.entry.js +2 -2
  82. package/dist/esm/le-tabs.entry.js +2 -2
  83. package/dist/esm/le-tag.entry.js +1 -1
  84. package/dist/esm/le-text.entry.js +2 -2
  85. package/dist/esm/le-turntable.entry.js +1 -1
  86. package/dist/esm/loader.js +3 -3
  87. package/dist/esm/{utils-CdBk0DdF.js → utils-CDrgAR8V.js} +3 -3
  88. package/dist/esm/{utils-CdBk0DdF.js.map → utils-CDrgAR8V.js.map} +1 -1
  89. package/dist/le-kit/dist/components/assets/custom-elements.json +1057 -1039
  90. package/dist/le-kit/index.esm.js +1 -1
  91. package/dist/le-kit/le-kit.esm.js +1 -1
  92. package/dist/le-kit/{p-ebd86d4f.entry.js → p-166d31fd.entry.js} +2 -2
  93. package/dist/le-kit/{p-73f7de28.entry.js → p-1d4f84f6.entry.js} +2 -2
  94. package/dist/le-kit/{p-4b88b0da.entry.js → p-43a17d84.entry.js} +2 -2
  95. package/dist/le-kit/{p-b21277e8.entry.js → p-52cc2518.entry.js} +2 -2
  96. package/dist/le-kit/p-5a0efabf.entry.js +2 -0
  97. package/dist/le-kit/p-5a0efabf.entry.js.map +1 -0
  98. package/dist/le-kit/{p-b6997587.entry.js → p-5ad31bd2.entry.js} +2 -2
  99. package/dist/le-kit/{p-ac822433.entry.js → p-5e7e2d06.entry.js} +2 -2
  100. package/dist/le-kit/{p-07705c61.entry.js → p-68d94a06.entry.js} +2 -2
  101. package/dist/le-kit/{p-43f87acb.entry.js → p-84a778b1.entry.js} +2 -2
  102. package/dist/le-kit/{p-c0ccc9aa.entry.js → p-957f50aa.entry.js} +2 -2
  103. package/dist/le-kit/p-Bb6rgQY0.js +3 -0
  104. package/dist/le-kit/p-Bb6rgQY0.js.map +1 -0
  105. package/dist/le-kit/{p-VG5nXRzT.js → p-DG6SMiyr.js} +2 -2
  106. package/dist/le-kit/{p-VG5nXRzT.js.map → p-DG6SMiyr.js.map} +1 -1
  107. package/dist/le-kit/{p-249db213.entry.js → p-a44540d7.entry.js} +2 -2
  108. package/dist/le-kit/{p-0a270831.entry.js → p-bb7a199f.entry.js} +2 -2
  109. package/dist/le-kit/{p-3a0a57e9.entry.js → p-c8a9e104.entry.js} +2 -2
  110. package/dist/le-kit/{p-244ff3d7.entry.js → p-ca766522.entry.js} +2 -2
  111. package/dist/le-kit/{p-764005e3.entry.js → p-cb392b4b.entry.js} +2 -2
  112. package/dist/le-kit/{p-61edb398.entry.js → p-eb4b678f.entry.js} +2 -2
  113. package/dist/le-kit/{p-6d0090c1.entry.js → p-f45d86de.entry.js} +2 -2
  114. package/dist/types/components/le-bar/le-bar.d.ts +6 -0
  115. package/dist/types/components.d.ts +14 -4
  116. package/dist/types/global/app.d.ts +22 -0
  117. package/dist/types/index.d.ts +1 -1
  118. package/package.json +1 -1
  119. package/dist/cjs/index-CNRmviSz.js.map +0 -1
  120. package/dist/cjs/le-bar.cjs.entry.js +0 -428
  121. package/dist/cjs/le-icon.cjs.entry.js +0 -110
  122. package/dist/cjs/le-navigation.cjs.entry.js +0 -393
  123. package/dist/esm/index-BqH-zsXr.js.map +0 -1
  124. package/dist/esm/le-bar.entry.js +0 -426
  125. package/dist/esm/le-bar.entry.js.map +0 -1
  126. package/dist/esm/le-icon.entry.js +0 -108
  127. package/dist/esm/le-icon.entry.js.map +0 -1
  128. package/dist/esm/le-navigation.entry.js +0 -391
  129. package/dist/esm/le-navigation.entry.js.map +0 -1
  130. package/dist/le-kit/p-0efce278.entry.js +0 -2
  131. package/dist/le-kit/p-0efce278.entry.js.map +0 -1
  132. package/dist/le-kit/p-2102a152.entry.js +0 -2
  133. package/dist/le-kit/p-2102a152.entry.js.map +0 -1
  134. package/dist/le-kit/p-53d9c363.entry.js +0 -2
  135. package/dist/le-kit/p-53d9c363.entry.js.map +0 -1
  136. package/dist/le-kit/p-94f774af.entry.js +0 -2
  137. package/dist/le-kit/p-94f774af.entry.js.map +0 -1
  138. package/dist/le-kit/p-BqH-zsXr.js +0 -3
  139. package/dist/le-kit/p-BqH-zsXr.js.map +0 -1
  140. /package/dist/le-kit/{p-ebd86d4f.entry.js.map → p-166d31fd.entry.js.map} +0 -0
  141. /package/dist/le-kit/{p-73f7de28.entry.js.map → p-1d4f84f6.entry.js.map} +0 -0
  142. /package/dist/le-kit/{p-4b88b0da.entry.js.map → p-43a17d84.entry.js.map} +0 -0
  143. /package/dist/le-kit/{p-b21277e8.entry.js.map → p-52cc2518.entry.js.map} +0 -0
  144. /package/dist/le-kit/{p-b6997587.entry.js.map → p-5ad31bd2.entry.js.map} +0 -0
  145. /package/dist/le-kit/{p-ac822433.entry.js.map → p-5e7e2d06.entry.js.map} +0 -0
  146. /package/dist/le-kit/{p-07705c61.entry.js.map → p-68d94a06.entry.js.map} +0 -0
  147. /package/dist/le-kit/{p-43f87acb.entry.js.map → p-84a778b1.entry.js.map} +0 -0
  148. /package/dist/le-kit/{p-c0ccc9aa.entry.js.map → p-957f50aa.entry.js.map} +0 -0
  149. /package/dist/le-kit/{p-249db213.entry.js.map → p-a44540d7.entry.js.map} +0 -0
  150. /package/dist/le-kit/{p-0a270831.entry.js.map → p-bb7a199f.entry.js.map} +0 -0
  151. /package/dist/le-kit/{p-3a0a57e9.entry.js.map → p-c8a9e104.entry.js.map} +0 -0
  152. /package/dist/le-kit/{p-244ff3d7.entry.js.map → p-ca766522.entry.js.map} +0 -0
  153. /package/dist/le-kit/{p-764005e3.entry.js.map → p-cb392b4b.entry.js.map} +0 -0
  154. /package/dist/le-kit/{p-61edb398.entry.js.map → p-eb4b678f.entry.js.map} +0 -0
  155. /package/dist/le-kit/{p-6d0090c1.entry.js.map → p-f45d86de.entry.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, h, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$8, f as defineCustomElement$9, g as defineCustomElement$a } from './le-button2.js';
4
4
  import { d as defineCustomElement$7 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$6 } from './le-popover2.js';
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$8, f as defineCustomElement$9, g as defineCustomElement$a } from './le-button2.js';
4
4
  import { d as defineCustomElement$7 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$6 } from './le-popover2.js';
@@ -1,19 +1,34 @@
1
1
  import { proxyCustomElement, HTMLElement, Build, h, transformTag, getAssetPath } from '@stencil/core/internal/client';
2
+ import { e as getAssetBasePath } from './app.js';
2
3
 
3
4
  const leIconCss = () => `:host{display:inline-block;width:var(--le-icon-size, var(--le-size-4));height:var(--le-icon-size, var(--le-size-4));color:var(--le-icon-color, var(--le-color-text-primary))}:host svg{display:block;fill:currentColor}`;
4
5
 
5
6
  const iconCache = {};
6
7
  const requestCache = {};
8
+ /**
9
+ * Get the URL for loading an icon.
10
+ * Uses configurable assetBasePath if set, otherwise falls back to Stencil's getAssetPath.
11
+ */
12
+ function getIconUrl(name) {
13
+ const basePath = getAssetBasePath();
14
+ if (basePath) {
15
+ // Use configured base path - normalize by removing trailing slash
16
+ const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
17
+ return `${normalizedBase}/icons/${name}.json`;
18
+ }
19
+ // Fall back to Stencil's getAssetPath for local development
20
+ return getAssetPath(`./assets/icons/${name}.json`);
21
+ }
7
22
  async function fetchIcon({ name }) {
8
23
  if (iconCache[name]) {
9
24
  return iconCache[name];
10
25
  }
11
26
  if (!requestCache[name]) {
12
- console.log(`Fetching icon "${name}"`, getAssetPath(`./assets/icons/${name}.json`));
13
- requestCache[name] = fetch(getAssetPath(`./assets/icons/${name}.json`))
27
+ const iconUrl = getIconUrl(name);
28
+ requestCache[name] = fetch(iconUrl)
14
29
  .then(resp => resp.json())
15
30
  .catch(() => {
16
- console.error(`"${name}" is not a valid name`);
31
+ console.error(`Icon "${name}" could not be loaded from: ${iconUrl}`);
17
32
  return '';
18
33
  });
19
34
  }
@@ -100,7 +115,7 @@ const LeIcon = /*@__PURE__*/ proxyCustomElement(class LeIcon extends HTMLElement
100
115
  return svgElements;
101
116
  }
102
117
  render() {
103
- return (h("svg", { key: 'ef551908a289cd765ae88ded83b99057d510e142', xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", height: this.size || 16, width: this.size || 16, viewBox: this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}` }, this.renderSVGContent(this.iconData?.children)));
118
+ return (h("svg", { key: '0518b0d454e3f3f171413a8b7f03ea89f6f48c0b', xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", height: this.size || 16, width: this.size || 16, viewBox: this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}` }, this.renderSVGContent(this.iconData?.children)));
104
119
  }
105
120
  static get assetsDirs() { return ["assets/icons"]; }
106
121
  static get watchers() { return {
@@ -1 +1 @@
1
- {"file":"le-icon2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-icon/le-icon.css?tag=le-icon&encapsulation=shadow","src/components/le-icon/le-icon.tsx"],"sourcesContent":[":host {\n display: inline-block;\n\n width: var(--le-icon-size, var(--le-size-4));\n height: var(--le-icon-size, var(--le-size-4));\n\n color: var(--le-icon-color, var(--le-color-text-primary));\n}\n\n:host svg {\n display: block;\n fill: currentColor;\n}\n","/**\n * Based on the script from Paul Andreson's article:\n * https://paulcpederson.com/articles/stencil-icons/\n */\nimport { Build, Component, Element, getAssetPath, h, Prop, State, Watch } from '@stencil/core';\n\nconst iconCache = {};\nconst requestCache = {};\n\nasync function fetchIcon({ name }): Promise<string> {\n if (iconCache[name]) {\n return iconCache[name];\n }\n if (!requestCache[name]) {\n console.log(`Fetching icon \"${name}\"`, getAssetPath(`./assets/icons/${name}.json`));\n requestCache[name] = fetch(getAssetPath(`./assets/icons/${name}.json`))\n .then(resp => resp.json())\n .catch(() => {\n console.error(`\"${name}\" is not a valid name`);\n return '';\n });\n }\n\n const path = await requestCache[name];\n iconCache[name] = path;\n\n return path;\n}\n\n@Component({\n tag: 'le-icon',\n styleUrl: 'le-icon.css',\n shadow: true,\n assetsDirs: ['assets/icons'],\n})\nexport class LeIcon {\n @Element() el: HTMLElement;\n\n /**\n * Name of the icon to display. Corresponds to a JSON file in the assets folder.\n * For example, \"search\" will load the \"search.json\" file.\n */\n @Prop() name: string = null;\n\n /**\n * Size of the icon in pixels. Default is 16.\n */\n @Prop() size: number = 16;\n\n @State() private iconData: any = null;\n\n @State() private visible = false;\n\n @Watch('name') private async loadIconData(): Promise<void> {\n const { name, visible } = this;\n\n if (!Build.isBrowser || !name || !visible) {\n return;\n }\n\n this.iconData = await fetchIcon({ name });\n }\n\n private intersectionObserver: IntersectionObserver;\n\n connectedCallback(): void {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconData();\n });\n }\n\n disconnectedCallback(): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n async componentWillLoad(): Promise<void> {\n this.loadIconData();\n }\n\n private waitUntilVisible(callback: () => void): void {\n if (\n !Build.isBrowser ||\n typeof window === 'undefined' ||\n !(window as any).IntersectionObserver\n ) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n callback();\n }\n });\n },\n { rootMargin: '50px' },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n\n /**\n * Renders the SVG content out of a JSON data in a format:\n * { \"viewBox\": \"...\", children: [{ \"tag\": \"g\", \"\"children\": [ ... ], ...attrs }, ...] }\n *\n * @returns JSX.Element | null\n */\n private renderSVGContent(children?: any[]) {\n if (!children || children.length === 0) {\n return null;\n }\n\n const createElement = node => {\n const { tag, children, ...attrs } = node;\n return h(tag, attrs, children ? children.map(createElement) : null);\n };\n\n const svgElements = children.map(createElement);\n return svgElements;\n }\n\n render() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n height={this.size || 16}\n width={this.size || 16}\n viewBox={this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}`}\n >\n {this.renderSVGContent(this.iconData?.children)}\n </svg>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-icon2.js","mappings":";;;AAAA,MAAM,SAAS,GAAG,MAAM,CAAC,uNAAuN,CAAC;;ACOjP,MAAM,SAAS,GAAwB,EAAE;AACzC,MAAM,YAAY,GAAiC,EAAE;AAErD;;;AAGG;AACH,SAAS,UAAU,CAAC,IAAY,EAAA;AAC9B,IAAA,MAAM,QAAQ,GAAG,gBAAgB,EAAE;IACnC,IAAI,QAAQ,EAAE;;QAEZ,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ;AAChF,QAAA,OAAO,CAAG,EAAA,cAAc,CAAU,OAAA,EAAA,IAAI,OAAO;;;AAG/C,IAAA,OAAO,YAAY,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAA,KAAA,CAAO,CAAC;AACpD;AAEA,eAAe,SAAS,CAAC,EAAE,IAAI,EAAE,EAAA;AAC/B,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACnB,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC;;AAExB,IAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACvB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC;AAChC,QAAA,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;aAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;aACxB,KAAK,CAAC,MAAK;YACV,OAAO,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,IAAI,CAA+B,4BAAA,EAAA,OAAO,CAAE,CAAA,CAAC;AACpE,YAAA,OAAO,EAAE;AACX,SAAC,CAAC;;AAGN,IAAA,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC;AACrC,IAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;AAEtB,IAAA,OAAO,IAAI;AACb;MAQa,MAAM,iBAAAA,kBAAA,CAAA,MAAA,MAAA,SAAA,WAAA,CAAA;;;;;;;;;AAGjB;;;AAGG;IACK,IAAI,GAAW,IAAI;AAE3B;;AAEG;IACK,IAAI,GAAW,EAAE;IAER,QAAQ,GAAQ,IAAI;IAEpB,OAAO,GAAG,KAAK;AAET,IAAA,MAAM,YAAY,GAAA;AACvC,QAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;QAE9B,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACzC;;QAGF,IAAI,CAAC,QAAQ,GAAG,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;;AAGnC,IAAA,oBAAoB;IAE5B,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,YAAY,EAAE;AACrB,SAAC,CAAC;;IAGJ,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;;AAIpC,IAAA,MAAM,iBAAiB,GAAA;QACrB,IAAI,CAAC,YAAY,EAAE;;AAGb,IAAA,gBAAgB,CAAC,QAAoB,EAAA;QAC3C,IACE,CAAC,KAAK,CAAC,SAAS;YAChB,OAAO,MAAM,KAAK,WAAW;AAC7B,YAAA,CAAE,MAAc,CAAC,oBAAoB,EACrC;AACA,YAAA,QAAQ,EAAE;YACV;;QAGF,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAClD,OAAO,IAAG;AACR,YAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AACtB,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE;AACtC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,oBAAA,QAAQ,EAAE;;AAEd,aAAC,CAAC;AACJ,SAAC,EACD,EAAE,UAAU,EAAE,MAAM,EAAE,CACvB;QAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG5C;;;;;AAKG;AACK,IAAA,gBAAgB,CAAC,QAAgB,EAAA;QACvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,aAAa,GAAG,IAAI,IAAG;YAC3B,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI;YACxC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AACrE,SAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;AAC/C,QAAA,OAAO,WAAW;;IAGpB,MAAM,GAAA;AACJ,QAAA,QACE,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,cAAc,EACnB,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EACvB,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EACtB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAE,CAAA,EAAA,EAE7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-icon/le-icon.css?tag=le-icon&encapsulation=shadow","src/components/le-icon/le-icon.tsx"],"sourcesContent":[":host {\n display: inline-block;\n\n width: var(--le-icon-size, var(--le-size-4));\n height: var(--le-icon-size, var(--le-size-4));\n\n color: var(--le-icon-color, var(--le-color-text-primary));\n}\n\n:host svg {\n display: block;\n fill: currentColor;\n}\n","/**\n * Based on the script from Paul Andreson's article:\n * https://paulcpederson.com/articles/stencil-icons/\n */\nimport { Build, Component, Element, getAssetPath, h, Prop, State, Watch } from '@stencil/core';\nimport { getAssetBasePath } from '../../global/app';\n\nconst iconCache: Record<string, any> = {};\nconst requestCache: Record<string, Promise<any>> = {};\n\n/**\n * Get the URL for loading an icon.\n * Uses configurable assetBasePath if set, otherwise falls back to Stencil's getAssetPath.\n */\nfunction getIconUrl(name: string): string {\n const basePath = getAssetBasePath();\n if (basePath) {\n // Use configured base path - normalize by removing trailing slash\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n return `${normalizedBase}/icons/${name}.json`;\n }\n // Fall back to Stencil's getAssetPath for local development\n return getAssetPath(`./assets/icons/${name}.json`);\n}\n\nasync function fetchIcon({ name }): Promise<string> {\n if (iconCache[name]) {\n return iconCache[name];\n }\n if (!requestCache[name]) {\n const iconUrl = getIconUrl(name);\n requestCache[name] = fetch(iconUrl)\n .then(resp => resp.json())\n .catch(() => {\n console.error(`Icon \"${name}\" could not be loaded from: ${iconUrl}`);\n return '';\n });\n }\n\n const path = await requestCache[name];\n iconCache[name] = path;\n\n return path;\n}\n\n@Component({\n tag: 'le-icon',\n styleUrl: 'le-icon.css',\n shadow: true,\n assetsDirs: ['assets/icons'],\n})\nexport class LeIcon {\n @Element() el: HTMLElement;\n\n /**\n * Name of the icon to display. Corresponds to a JSON file in the assets folder.\n * For example, \"search\" will load the \"search.json\" file.\n */\n @Prop() name: string = null;\n\n /**\n * Size of the icon in pixels. Default is 16.\n */\n @Prop() size: number = 16;\n\n @State() private iconData: any = null;\n\n @State() private visible = false;\n\n @Watch('name') private async loadIconData(): Promise<void> {\n const { name, visible } = this;\n\n if (!Build.isBrowser || !name || !visible) {\n return;\n }\n\n this.iconData = await fetchIcon({ name });\n }\n\n private intersectionObserver: IntersectionObserver;\n\n connectedCallback(): void {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconData();\n });\n }\n\n disconnectedCallback(): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n async componentWillLoad(): Promise<void> {\n this.loadIconData();\n }\n\n private waitUntilVisible(callback: () => void): void {\n if (\n !Build.isBrowser ||\n typeof window === 'undefined' ||\n !(window as any).IntersectionObserver\n ) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n callback();\n }\n });\n },\n { rootMargin: '50px' },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n\n /**\n * Renders the SVG content out of a JSON data in a format:\n * { \"viewBox\": \"...\", children: [{ \"tag\": \"g\", \"\"children\": [ ... ], ...attrs }, ...] }\n *\n * @returns JSX.Element | null\n */\n private renderSVGContent(children?: any[]) {\n if (!children || children.length === 0) {\n return null;\n }\n\n const createElement = node => {\n const { tag, children, ...attrs } = node;\n return h(tag, attrs, children ? children.map(createElement) : null);\n };\n\n const svgElements = children.map(createElement);\n return svgElements;\n }\n\n render() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n height={this.size || 16}\n width={this.size || 16}\n viewBox={this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}`}\n >\n {this.renderSVGContent(this.iconData?.children)}\n </svg>\n );\n }\n}\n"],"version":3}
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host, transformTag } from '@stencil/core/internal/client';
2
- import { g as generateId, h as classnames } from './utils.js';
2
+ import { g as generateId, c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$d } from './le-bar2.js';
4
4
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$9, f as defineCustomElement$b, g as defineCustomElement$c } from './le-button2.js';
5
5
  import { d as defineCustomElement$a } from './le-collapse2.js';
@@ -33,7 +33,7 @@ const LeNavigation$1 = /*@__PURE__*/ proxyCustomElement(class LeNavigation exten
33
33
  * Horizontal wrapping behavior.
34
34
  * If false, overflow behavior depends on `overflowMode`.
35
35
  */
36
- wrap = true;
36
+ wrap = false;
37
37
  /**
38
38
  * Overflow behavior for horizontal, non-wrapping menus.
39
39
  * - more: moves overflow items into a "More" popover
@@ -372,7 +372,7 @@ const LeNavigation$1 = /*@__PURE__*/ proxyCustomElement(class LeNavigation exten
372
372
  'align-end': this.align === 'end',
373
373
  'align-center': this.align === 'center',
374
374
  'align-space-between': this.align === 'space-between',
375
- }), overflow: overflowMode, alignItems: this.getBarAlignment(), disablePopover: true, onLeBarOverflowChange: this.handleBarOverflowChange }, items.map((item, index) => this.renderHorizontalItem(item, index))), showOverflowButton && this.renderOverflowPopover()));
375
+ }), overflow: overflowMode, alignItems: this.getBarAlignment(), disablePopover: true, minVisibleItems: this.minVisibleItemsForMore, onLeBarOverflowChange: this.handleBarOverflowChange }, items.map((item, index) => this.renderHorizontalItem(item, index))), showOverflowButton && this.renderOverflowPopover()));
376
376
  }
377
377
  render() {
378
378
  const items = this.parsedItems;
@@ -1 +1 @@
1
- {"file":"le-navigation.js","mappings":"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","names":["LeNavigation","__stencil_proxyCustomElement"],"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 * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\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 (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\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.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/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\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';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds || [];\n this.hamburgerActive = e.detail.hamburgerActive || false;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds || []);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-navigation.js","mappings":"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","names":["LeNavigation","__stencil_proxyCustomElement"],"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 * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\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 (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\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.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/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\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';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = false;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds || [];\n this.hamburgerActive = e.detail.hamburgerActive || false;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds || []);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n minVisibleItems={this.minVisibleItemsForMore}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$8, f as defineCustomElement$9, g as defineCustomElement$a } from './le-button2.js';
4
4
  import { d as defineCustomElement$7 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$6 } from './le-popover2.js';
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
 
4
4
  const lePopoverCss = () => `/* ============================================
5
5
  le-popover.css
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, h, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$8, f as defineCustomElement$9, g as defineCustomElement$a } from './le-button2.js';
4
4
  import { d as defineCustomElement$7 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$6 } from './le-popover2.js';
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host, Fragment, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$1, a as defineCustomElement$2, b as defineCustomElement$3, c as defineCustomElement$4, e as defineCustomElement$7, f as defineCustomElement$8, g as defineCustomElement$9 } from './le-button2.js';
4
4
  import { d as defineCustomElement$6 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$5 } from './le-popover2.js';
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, transformTag } from '@stencil/core/internal/client';
2
- import { h as classnames } from './utils.js';
2
+ import { c as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$3, a as defineCustomElement$4, b as defineCustomElement$5, c as defineCustomElement$6, e as defineCustomElement$9, f as defineCustomElement$a, g as defineCustomElement$b } from './le-button2.js';
4
4
  import { d as defineCustomElement$8 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$7 } from './le-popover2.js';
@@ -1,168 +1,4 @@
1
- import { setMode } from '@stencil/core/internal/client';
2
-
3
- /**
4
- * Global mode initialization for le-kit components.
5
- *
6
- * Mode inheritance works as follows:
7
- * 1. Check the element's own `mode` attribute
8
- * 2. Traverse up the DOM to find a parent with `mode` attribute
9
- * 3. Check the document root element (html) for `mode` attribute
10
- * 4. Fall back to 'default'
11
- *
12
- * This allows setting mode at any level:
13
- * - `<html mode="admin">` - all components in admin mode
14
- * - `<le-card mode="admin">` - this card and its children in admin mode
15
- */
16
- function initializeMode() {
17
- setMode((el) => {
18
- // 1. Check element's own mode attribute
19
- const ownMode = el.getAttribute('mode');
20
- if (ownMode) {
21
- return ownMode;
22
- }
23
- // 2. Traverse up the DOM tree to find inherited mode
24
- let parent = el.parentElement;
25
- while (parent) {
26
- const parentMode = parent.getAttribute('mode');
27
- if (parentMode) {
28
- return parentMode;
29
- }
30
- parent = parent.parentElement;
31
- }
32
- // 3. Check document root element
33
- const rootMode = document.documentElement.getAttribute('mode');
34
- if (rootMode) {
35
- return rootMode;
36
- }
37
- // 4. Default mode
38
- return 'default';
39
- });
40
- }
41
- /**
42
- * Helper function to get the current mode for an element.
43
- * Can be used programmatically in components.
44
- *
45
- * This function traverses both regular DOM and shadow DOM boundaries
46
- * to find the nearest mode attribute.
47
- */
48
- function getMode(el) {
49
- // Check element's own mode
50
- const ownMode = el.getAttribute('mode');
51
- if (ownMode) {
52
- return ownMode;
53
- }
54
- // Traverse up DOM, crossing shadow boundaries
55
- let current = el;
56
- while (current) {
57
- // Try parent element first
58
- if (current instanceof Element && current.parentElement) {
59
- current = current.parentElement;
60
- const mode = current.getAttribute?.('mode');
61
- if (mode) {
62
- return mode;
63
- }
64
- }
65
- else {
66
- // No parent element - check if we're in a shadow root
67
- const root = current.getRootNode();
68
- if (root instanceof ShadowRoot) {
69
- // Cross the shadow boundary to the host element
70
- current = root.host;
71
- const mode = current.getAttribute?.('mode');
72
- if (mode) {
73
- return mode;
74
- }
75
- }
76
- else {
77
- // We've reached the document root
78
- break;
79
- }
80
- }
81
- }
82
- // Check document root
83
- const rootMode = document.documentElement.getAttribute('mode');
84
- if (rootMode) {
85
- return rootMode;
86
- }
87
- return 'default';
88
- }
89
- /**
90
- * Helper function to get the current theme for an element.
91
- * Theme inheritance works the same as mode - cascades through DOM.
92
- */
93
- function getTheme(el) {
94
- // Check element's own theme
95
- const ownTheme = el.getAttribute('theme');
96
- if (ownTheme) {
97
- return ownTheme;
98
- }
99
- // Traverse up DOM
100
- let parent = el.parentElement;
101
- while (parent) {
102
- const parentTheme = parent.getAttribute('theme');
103
- if (parentTheme) {
104
- return parentTheme;
105
- }
106
- parent = parent.parentElement;
107
- }
108
- // Check root
109
- const rootTheme = document.documentElement.getAttribute('theme');
110
- if (rootTheme) {
111
- return rootTheme;
112
- }
113
- return 'default';
114
- }
115
- /**
116
- * Helper function to set mode on the document root.
117
- * Useful for switching all components to admin mode.
118
- */
119
- function setGlobalMode(mode) {
120
- document.documentElement.setAttribute('mode', mode);
121
- }
122
- /**
123
- * Helper function to set theme on the document root.
124
- * Useful for switching all components to a different theme.
125
- */
126
- function setGlobalTheme(theme) {
127
- document.documentElement.setAttribute('theme', theme);
128
- }
129
- /**
130
- * Global configuration for le-kit
131
- */
132
- let leKitConfig = {
133
- /**
134
- * URL to the custom-elements.json manifest.
135
- * Used by admin components (le-component, le-slot) to load component metadata.
136
- *
137
- * Default: '/custom-elements.json' (served from app root)
138
- *
139
- * For apps using le-kit, you may need to:
140
- * 1. Copy the manifest from node_modules/le-kit/custom-elements.json to your public folder
141
- * 2. Or set this to point to where the manifest is served
142
- */
143
- manifestFile: '/custom-elements.json',
144
- };
145
- /**
146
- * Configure le-kit global settings.
147
- *
148
- * @example
149
- * ```ts
150
- * import { configureLeKit } from 'le-kit';
151
- *
152
- * configureLeKit({
153
- * manifestFile: 'custom-elements.json'
154
- * });
155
- * ```
156
- */
157
- function configureLeKit(config) {
158
- leKitConfig = { ...leKitConfig, ...config };
159
- }
160
- /**
161
- * Get the current le-kit configuration.
162
- */
163
- function getLeKitConfig() {
164
- return leKitConfig;
165
- }
1
+ import { g as getMode } from './app.js';
166
2
 
167
3
  /**
168
4
  * Utility functions for le-kit components
@@ -304,7 +140,7 @@ function classnames(...classes) {
304
140
  return result.join(' ');
305
141
  }
306
142
 
307
- export { getMode as a, setGlobalMode as b, getTheme as c, setGlobalTheme as d, configureLeKit as e, getLeKitConfig as f, generateId as g, classnames as h, initializeMode as i, observeModeChanges as o, parseCommaSeparated as p, slotHasContent as s };
143
+ export { classnames as c, generateId as g, observeModeChanges as o, parseCommaSeparated as p, slotHasContent as s };
308
144
  //# sourceMappingURL=utils.js.map
309
145
 
310
146
  //# sourceMappingURL=utils.js.map