le-kit 0.3.5 → 0.5.0

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 (235) hide show
  1. package/LLM_CONTEXT.md +1377 -0
  2. package/dist/cjs/{index-BPF04Jvb.js → index-BzadfLTc.js} +6 -3
  3. package/dist/cjs/index-BzadfLTc.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +2 -2
  5. package/dist/cjs/le-bar_16.cjs.entry.js +21 -21
  6. package/dist/cjs/le-box.cjs.entry.js +5 -5
  7. package/dist/cjs/le-card.cjs.entry.js +5 -5
  8. package/dist/cjs/le-code-input.cjs.entry.js +181 -0
  9. package/dist/cjs/le-combobox.cjs.entry.js +2 -2
  10. package/dist/cjs/le-header-placeholder.cjs.entry.js +2 -2
  11. package/dist/cjs/le-kit.cjs.js +2 -2
  12. package/dist/cjs/le-multiselect.cjs.entry.js +4 -4
  13. package/dist/cjs/le-number-input.cjs.entry.js +3 -3
  14. package/dist/cjs/le-round-progress.cjs.entry.js +2 -2
  15. package/dist/cjs/le-segmented-control.cjs.entry.js +2 -2
  16. package/dist/cjs/le-side-panel-toggle.cjs.entry.js +229 -0
  17. package/dist/cjs/le-side-panel.cjs.entry.js +546 -0
  18. package/dist/cjs/le-stack.cjs.entry.js +3 -3
  19. package/dist/cjs/le-tab-bar.cjs.entry.js +2 -2
  20. package/dist/cjs/le-tab-panel.cjs.entry.js +3 -3
  21. package/dist/cjs/le-tab.cjs.entry.js +3 -3
  22. package/dist/cjs/le-tabs.cjs.entry.js +4 -4
  23. package/dist/cjs/le-tag.cjs.entry.js +2 -2
  24. package/dist/cjs/le-text.cjs.entry.js +8 -8
  25. package/dist/cjs/le-turntable.cjs.entry.js +2 -2
  26. package/dist/cjs/loader.cjs.js +2 -2
  27. package/dist/cjs/{utils-BYsLPHN1.js → utils-Dxx9WhWK.js} +3 -3
  28. package/dist/cjs/{utils-BYsLPHN1.js.map → utils-Dxx9WhWK.js.map} +1 -1
  29. package/dist/collection/collection-manifest.json +3 -0
  30. package/dist/collection/components/le-box/le-box.js +3 -3
  31. package/dist/collection/components/le-box/le-box.js.map +1 -1
  32. package/dist/collection/components/le-button/le-button.css +2 -2
  33. package/dist/collection/components/le-button/le-button.js +1 -1
  34. package/dist/collection/components/le-card/le-card.js +3 -3
  35. package/dist/collection/components/le-card/le-card.js.map +1 -1
  36. package/dist/collection/components/le-checkbox/le-checkbox.js +1 -1
  37. package/dist/collection/components/le-code-input/le-code-input.css +106 -0
  38. package/dist/collection/components/le-code-input/le-code-input.js +466 -0
  39. package/dist/collection/components/le-code-input/le-code-input.js.map +1 -0
  40. package/dist/collection/components/le-collapse/le-collapse.js +1 -1
  41. package/dist/collection/components/le-combobox/le-combobox.js +1 -1
  42. package/dist/collection/components/le-current-heading/le-current-heading.js +1 -1
  43. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +1 -1
  44. package/dist/collection/components/le-header/le-header.js +2 -2
  45. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +1 -1
  46. package/dist/collection/components/le-icon/le-icon.js +1 -1
  47. package/dist/collection/components/le-multiselect/le-multiselect.js +3 -3
  48. package/dist/collection/components/le-navigation/le-navigation.css +10 -4
  49. package/dist/collection/components/le-number-input/le-number-input.js +1 -1
  50. package/dist/collection/components/le-popover/le-popover.js +3 -3
  51. package/dist/collection/components/le-round-progress/le-round-progress.js +1 -1
  52. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +1 -1
  53. package/dist/collection/components/le-segmented-control/le-segmented-control.js +1 -1
  54. package/dist/collection/components/le-select/le-select.js +2 -2
  55. package/dist/collection/components/le-side-panel/le-side-panel.css +193 -0
  56. package/dist/collection/components/le-side-panel/le-side-panel.js +953 -0
  57. package/dist/collection/components/le-side-panel/le-side-panel.js.map +1 -0
  58. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js +610 -0
  59. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js.map +1 -0
  60. package/dist/collection/components/le-slot/le-slot.js +1 -1
  61. package/dist/collection/components/le-stack/le-stack.js +1 -1
  62. package/dist/collection/components/le-string-input/le-string-input.js +2 -2
  63. package/dist/collection/components/le-tab/le-tab.js +1 -1
  64. package/dist/collection/components/le-tab-bar/le-tab-bar.js +1 -1
  65. package/dist/collection/components/le-tab-panel/le-tab-panel.js +2 -2
  66. package/dist/collection/components/le-tabs/le-tabs.js +2 -2
  67. package/dist/collection/components/le-tag/le-tag.js +1 -1
  68. package/dist/collection/components/le-text/le-text.js +7 -7
  69. package/dist/collection/components/le-text/le-text.js.map +1 -1
  70. package/dist/collection/components/le-turntable/le-turntable.js +1 -1
  71. package/dist/collection/dist/components/assets/custom-elements.json +5288 -3895
  72. package/dist/collection/dist/components/assets/icons/side-panel.json +61 -0
  73. package/dist/collection/dist/themes/dark.css +1 -0
  74. package/dist/collection/dist/themes/default.css +1 -0
  75. package/dist/collection/dist/themes/gradient.css +1 -0
  76. package/dist/collection/dist/themes/minimal.css +1 -0
  77. package/dist/collection/dist/themes/warm.css +1 -0
  78. package/dist/components/assets/custom-elements.json +5288 -3895
  79. package/dist/components/assets/icons/side-panel.json +61 -0
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/le-box.js +3 -3
  82. package/dist/components/le-box.js.map +1 -1
  83. package/dist/components/le-button2.js +8 -8
  84. package/dist/components/le-button2.js.map +1 -1
  85. package/dist/components/le-card.js +3 -3
  86. package/dist/components/le-card.js.map +1 -1
  87. package/dist/components/le-code-input.d.ts +11 -0
  88. package/dist/components/le-code-input.js +265 -0
  89. package/dist/components/le-code-input.js.map +1 -0
  90. package/dist/components/le-collapse2.js +1 -1
  91. package/dist/components/le-combobox.js +1 -1
  92. package/dist/components/le-current-heading.js +1 -1
  93. package/dist/components/le-dropdown-base2.js +1 -1
  94. package/dist/components/le-header-placeholder.js +1 -1
  95. package/dist/components/le-header.js +2 -2
  96. package/dist/components/le-icon2.js +1 -1
  97. package/dist/components/le-multiselect.js +3 -3
  98. package/dist/components/le-navigation.js +1 -1
  99. package/dist/components/le-navigation.js.map +1 -1
  100. package/dist/components/le-number-input.js +1 -1
  101. package/dist/components/le-popover2.js +3 -3
  102. package/dist/components/le-round-progress.js +1 -1
  103. package/dist/components/le-scroll-progress.js +1 -1
  104. package/dist/components/le-segmented-control.js +1 -1
  105. package/dist/components/le-side-panel-toggle.d.ts +11 -0
  106. package/dist/components/le-side-panel-toggle.js +9 -0
  107. package/dist/components/le-side-panel-toggle.js.map +1 -0
  108. package/dist/components/le-side-panel-toggle2.js +311 -0
  109. package/dist/components/le-side-panel-toggle2.js.map +1 -0
  110. package/dist/components/le-side-panel.d.ts +11 -0
  111. package/dist/components/le-side-panel.js +660 -0
  112. package/dist/components/le-side-panel.js.map +1 -0
  113. package/dist/components/le-stack.js +1 -1
  114. package/dist/components/le-tab-bar.js +1 -1
  115. package/dist/components/le-tab-panel.js +2 -2
  116. package/dist/components/le-tab2.js +1 -1
  117. package/dist/components/le-tabs.js +2 -2
  118. package/dist/components/le-tag2.js +1 -1
  119. package/dist/components/le-text.js +6 -6
  120. package/dist/components/le-text.js.map +1 -1
  121. package/dist/components/le-turntable.js +1 -1
  122. package/dist/docs.json +4829 -3121
  123. package/dist/esm/{index-C-Chwj1b.js → index-DFTm5BqT.js} +7 -4
  124. package/dist/esm/index-DFTm5BqT.js.map +1 -0
  125. package/dist/esm/index.js +2 -2
  126. package/dist/esm/le-bar_16.entry.js +21 -21
  127. package/dist/esm/le-box.entry.js +5 -5
  128. package/dist/esm/le-box.entry.js.map +1 -1
  129. package/dist/esm/le-card.entry.js +5 -5
  130. package/dist/esm/le-card.entry.js.map +1 -1
  131. package/dist/esm/le-code-input.entry.js +179 -0
  132. package/dist/esm/le-code-input.entry.js.map +1 -0
  133. package/dist/esm/le-combobox.entry.js +2 -2
  134. package/dist/esm/le-header-placeholder.entry.js +2 -2
  135. package/dist/esm/le-kit.js +3 -3
  136. package/dist/esm/le-multiselect.entry.js +4 -4
  137. package/dist/esm/le-number-input.entry.js +3 -3
  138. package/dist/esm/le-round-progress.entry.js +2 -2
  139. package/dist/esm/le-segmented-control.entry.js +2 -2
  140. package/dist/esm/le-side-panel-toggle.entry.js +227 -0
  141. package/dist/esm/le-side-panel-toggle.entry.js.map +1 -0
  142. package/dist/esm/le-side-panel.entry.js +544 -0
  143. package/dist/esm/le-side-panel.entry.js.map +1 -0
  144. package/dist/esm/le-stack.entry.js +3 -3
  145. package/dist/esm/le-tab-bar.entry.js +2 -2
  146. package/dist/esm/le-tab-panel.entry.js +3 -3
  147. package/dist/esm/le-tab.entry.js +3 -3
  148. package/dist/esm/le-tabs.entry.js +4 -4
  149. package/dist/esm/le-tag.entry.js +2 -2
  150. package/dist/esm/le-text.entry.js +8 -8
  151. package/dist/esm/le-text.entry.js.map +1 -1
  152. package/dist/esm/le-turntable.entry.js +2 -2
  153. package/dist/esm/loader.js +3 -3
  154. package/dist/esm/{utils-B3alHV04.js → utils-DZYCZLrF.js} +3 -3
  155. package/dist/esm/{utils-B3alHV04.js.map → utils-DZYCZLrF.js.map} +1 -1
  156. package/dist/le-kit/dist/components/assets/custom-elements.json +5288 -3895
  157. package/dist/le-kit/dist/components/assets/icons/side-panel.json +61 -0
  158. package/dist/le-kit/dist/themes/dark.css +1 -0
  159. package/dist/le-kit/dist/themes/default.css +1 -0
  160. package/dist/le-kit/dist/themes/gradient.css +1 -0
  161. package/dist/le-kit/dist/themes/minimal.css +1 -0
  162. package/dist/le-kit/dist/themes/warm.css +1 -0
  163. package/dist/le-kit/index.esm.js +1 -1
  164. package/dist/le-kit/le-kit.css +1 -1
  165. package/dist/le-kit/le-kit.esm.js +1 -1
  166. package/dist/le-kit/p-221d379a.entry.js +2 -0
  167. package/dist/le-kit/p-221d379a.entry.js.map +1 -0
  168. package/dist/le-kit/p-24112ca3.entry.js +2 -0
  169. package/dist/le-kit/{p-e1846fc2.entry.js.map → p-24112ca3.entry.js.map} +1 -1
  170. package/dist/le-kit/p-2c6d080d.entry.js +2 -0
  171. package/dist/le-kit/{p-3ceede4e.entry.js.map → p-2c6d080d.entry.js.map} +1 -1
  172. package/dist/le-kit/{p-ea71f22c.entry.js → p-46276e77.entry.js} +2 -2
  173. package/dist/le-kit/p-46276e77.entry.js.map +1 -0
  174. package/dist/le-kit/p-516c8531.entry.js +2 -0
  175. package/dist/le-kit/p-6b69f9a2.entry.js +2 -0
  176. package/dist/le-kit/{p-f8034500.entry.js.map → p-6b69f9a2.entry.js.map} +1 -1
  177. package/dist/le-kit/p-6d14306f.entry.js +2 -0
  178. package/dist/le-kit/{p-06d2d79c.entry.js.map → p-6d14306f.entry.js.map} +1 -1
  179. package/dist/le-kit/{p-2230ecd7.entry.js → p-7bcdf2d4.entry.js} +2 -2
  180. package/dist/le-kit/{p-3d22aeb2.entry.js → p-7cf1e23c.entry.js} +2 -2
  181. package/dist/le-kit/{p-e6b2cf9a.entry.js → p-85f2fd4d.entry.js} +2 -2
  182. package/dist/le-kit/p-98242429.entry.js +2 -0
  183. package/dist/le-kit/p-98242429.entry.js.map +1 -0
  184. package/dist/le-kit/{p-DFr88Szp.js → p-D8RYDS9p.js} +2 -2
  185. package/dist/le-kit/{p-DFr88Szp.js.map → p-D8RYDS9p.js.map} +1 -1
  186. package/dist/le-kit/{p-C-Chwj1b.js → p-DFTm5BqT.js} +3 -3
  187. package/dist/le-kit/p-DFTm5BqT.js.map +1 -0
  188. package/dist/le-kit/{p-68d836a3.entry.js → p-ab6c1def.entry.js} +2 -2
  189. package/dist/le-kit/{p-3d873cdb.entry.js → p-ae4ead64.entry.js} +2 -2
  190. package/dist/le-kit/{p-d161946c.entry.js → p-b05d4511.entry.js} +2 -2
  191. package/dist/le-kit/{p-923828fe.entry.js → p-b6ac02ff.entry.js} +2 -2
  192. package/dist/le-kit/p-c24769e2.entry.js +2 -0
  193. package/dist/le-kit/{p-33c2168a.entry.js.map → p-c24769e2.entry.js.map} +1 -1
  194. package/dist/le-kit/{p-be2a7276.entry.js → p-dc0445ad.entry.js} +2 -2
  195. package/dist/le-kit/p-eb5286f2.entry.js +2 -0
  196. package/dist/le-kit/p-eb5286f2.entry.js.map +1 -0
  197. package/dist/le-kit/p-eb710c8e.entry.js +2 -0
  198. package/dist/le-kit/p-eb710c8e.entry.js.map +1 -0
  199. package/dist/le-kit/{p-5d72c894.entry.js → p-f78b1ee6.entry.js} +2 -2
  200. package/dist/le-kit/p-f78b1ee6.entry.js.map +1 -0
  201. package/dist/themes/dark.css +1 -0
  202. package/dist/themes/default.css +1 -0
  203. package/dist/themes/gradient.css +1 -0
  204. package/dist/themes/minimal.css +1 -0
  205. package/dist/themes/warm.css +1 -0
  206. package/dist/types/components/le-code-input/le-code-input.d.ts +102 -0
  207. package/dist/types/components/le-side-panel/le-side-panel.d.ts +100 -0
  208. package/dist/types/components/le-side-panel-toggle/le-side-panel-toggle.d.ts +48 -0
  209. package/dist/types/components.d.ts +519 -2
  210. package/package.json +7 -5
  211. package/dist/cjs/index-BPF04Jvb.js.map +0 -1
  212. package/dist/esm/index-C-Chwj1b.js.map +0 -1
  213. package/dist/le-kit/p-05ccab91.entry.js +0 -2
  214. package/dist/le-kit/p-05ccab91.entry.js.map +0 -1
  215. package/dist/le-kit/p-06d2d79c.entry.js +0 -2
  216. package/dist/le-kit/p-33c2168a.entry.js +0 -2
  217. package/dist/le-kit/p-3ceede4e.entry.js +0 -2
  218. package/dist/le-kit/p-4a45ff67.entry.js +0 -2
  219. package/dist/le-kit/p-5d72c894.entry.js.map +0 -1
  220. package/dist/le-kit/p-C-Chwj1b.js.map +0 -1
  221. package/dist/le-kit/p-e1846fc2.entry.js +0 -2
  222. package/dist/le-kit/p-ea71f22c.entry.js.map +0 -1
  223. package/dist/le-kit/p-f8034500.entry.js +0 -2
  224. /package/dist/collection/components/le-box/{le-box.default.css → le-box.css} +0 -0
  225. /package/dist/collection/components/le-card/{le-card.default.css → le-card.css} +0 -0
  226. /package/dist/collection/components/le-text/{le-text.default.css → le-text.css} +0 -0
  227. /package/dist/le-kit/{p-4a45ff67.entry.js.map → p-516c8531.entry.js.map} +0 -0
  228. /package/dist/le-kit/{p-2230ecd7.entry.js.map → p-7bcdf2d4.entry.js.map} +0 -0
  229. /package/dist/le-kit/{p-3d22aeb2.entry.js.map → p-7cf1e23c.entry.js.map} +0 -0
  230. /package/dist/le-kit/{p-e6b2cf9a.entry.js.map → p-85f2fd4d.entry.js.map} +0 -0
  231. /package/dist/le-kit/{p-68d836a3.entry.js.map → p-ab6c1def.entry.js.map} +0 -0
  232. /package/dist/le-kit/{p-3d873cdb.entry.js.map → p-ae4ead64.entry.js.map} +0 -0
  233. /package/dist/le-kit/{p-d161946c.entry.js.map → p-b05d4511.entry.js.map} +0 -0
  234. /package/dist/le-kit/{p-923828fe.entry.js.map → p-b6ac02ff.entry.js.map} +0 -0
  235. /package/dist/le-kit/{p-be2a7276.entry.js.map → p-dc0445ad.entry.js.map} +0 -0
@@ -0,0 +1,544 @@
1
+ import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DFTm5BqT.js';
2
+
3
+ const leSidePanelCss = () => `:host{display:block;height:100%;--le-side-panel-width:280px;--le-side-panel-margin:0px;--le-side-panel-backdrop:var(--le-color-backdrop);--le-side-panel-border-radius:var(--le-radius-lg)}.host{position:relative;height:100%;min-height:0}.layout{display:flex;align-items:stretch;min-width:0;height:100%;min-height:0}.layout.start{flex-direction:row}.layout.end{flex-direction:row-reverse}.inlinePanel{flex:0 0 auto;width:var(--le-side-panel-width);min-width:0;height:100%;overflow:hidden;transition:width var(--le-side-panel-transition, var(--le-transition-normal))}.inlinePanel.hidden{width:0}.inlinePanel .panel{transform:translateX(0);opacity:1;transition:transform var(--le-side-panel-transition, var(--le-transition-normal)),
4
+ opacity var(--le-side-panel-transition, var(--le-transition-normal))}.layout.start .inlinePanel.hidden .panel{transform:translateX(-100%);opacity:0;pointer-events:none}.layout.end .inlinePanel.hidden .panel{transform:translateX(100%);opacity:0;pointer-events:none}.content{flex:1 1 auto;min-width:0;height:100%;min-height:0}.panel{position:relative;height:100%;max-height:min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));margin:var(--le-side-panel-margin);border-radius:var(--le-side-panel-border-radius);background:var(--le-color-surface, #fff);color:var(--le-color-text, #000);border-right:1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));box-sizing:border-box}.panel.end{border-right:0;border-left:1px solid var(--le-color-border, rgba(0, 0, 0, 0.12))}.panel-scroller{height:100%;overflow:auto}.close{position:absolute;top:4px;right:4px;z-index:1;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer}.handle{position:absolute;top:0;bottom:0;width:10px;cursor:col-resize}.handle.start{right:-5px}.handle.end{left:-5px}.overlayRoot{position:absolute;inset:0;background:var(--le-side-panel-backdrop);z-index:var(--le-z-modal-backdrop, 1040);opacity:0;pointer-events:none;transition:opacity var(--le-side-panel-transition, var(--le-transition-normal));height:100%}.overlayRoot.visible{opacity:1;pointer-events:auto}.overlayPanelWrap{position:absolute;top:0;bottom:0;width:min(100%, var(--le-side-panel-width));height:100%;z-index:var(--le-z-modal, 1050);display:flex;align-items:stretch}.overlayPanelWrap.start{left:0;transform:translateX(-100%)}.overlayPanelWrap.end{right:0;transform:translateX(100%)}.overlayPanelWrap.visible.start,.overlayPanelWrap.visible.end{transform:translateX(0)}.overlayPanelWrap{transition:transform var(--le-side-panel-transition, var(--le-transition-normal))}.host[data-resizing='true'] .panel,.host[data-resizing='true'] .overlayPanelWrap,.host[data-resizing='true'] .inlinePanel{transition:none}@media (prefers-reduced-motion: reduce){.overlayPanelWrap,.overlayRoot,.inlinePanel{transition:none}}`;
5
+
6
+ function clamp(value, min, max) {
7
+ return Math.min(max, Math.max(min, value));
8
+ }
9
+ function readCssVariablePixels(varName) {
10
+ const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
11
+ if (!v) {
12
+ return undefined;
13
+ }
14
+ const parsed = Number.parseFloat(v);
15
+ return Number.isFinite(parsed) ? parsed : undefined;
16
+ }
17
+ function parseCollapseAtPx(value) {
18
+ if (!value) {
19
+ return undefined;
20
+ }
21
+ const trimmed = value.trim();
22
+ if (!trimmed) {
23
+ return undefined;
24
+ }
25
+ if (trimmed.startsWith('--')) {
26
+ const fromVar = readCssVariablePixels(trimmed);
27
+ return fromVar;
28
+ }
29
+ const numeric = Number.parseFloat(trimmed);
30
+ return Number.isFinite(numeric) ? numeric : undefined;
31
+ }
32
+ const LeSidePanel = class {
33
+ constructor(hostRef) {
34
+ registerInstance(this, hostRef);
35
+ this.leSidePanelOpenChange = createEvent(this, "leSidePanelOpenChange");
36
+ this.leSidePanelCollapsedChange = createEvent(this, "leSidePanelCollapsedChange");
37
+ this.leSidePanelWidthChange = createEvent(this, "leSidePanelWidthChange");
38
+ }
39
+ get el() { return getElement(this); }
40
+ /**
41
+ * Optional id used to match toggle requests.
42
+ * If set, the panel only responds to toggle events with the same `panelId`.
43
+ */
44
+ panelId;
45
+ /** Which side the panel is attached to. */
46
+ side = 'start';
47
+ /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters "narrow" mode. */
48
+ collapseAt;
49
+ /** Behavior when in narrow mode. */
50
+ narrowBehavior = 'overlay';
51
+ /**
52
+ * Panel open state for narrow mode.
53
+ * - overlay: controls modal drawer visibility
54
+ * - push: controls whether panel is shown (non-modal)
55
+ */
56
+ open = false;
57
+ /** Panel collapsed state for wide mode (fully hidden). */
58
+ collapsed = false;
59
+ /** Default panel width in pixels. */
60
+ panelWidth = 280;
61
+ /** Minimum allowed width when resizable. */
62
+ minPanelWidth = 220;
63
+ /** Maximum allowed width when resizable. */
64
+ maxPanelWidth = 420;
65
+ /** Allows users to resize the panel by dragging its edge. */
66
+ resizable = false;
67
+ /** When set, panel width + collapsed state are persisted in localStorage. */
68
+ persistKey;
69
+ /** Show a close button inside the panel (primarily used in narrow overlay mode). */
70
+ showCloseButton = true;
71
+ /** When crossing to wide mode, automatically show the panel (collapsed=false). */
72
+ autoShowOnWide = true;
73
+ /** When crossing to narrow mode, automatically hide the panel (open=false). */
74
+ autoHideOnNarrow = true;
75
+ /** Accessible label for the panel navigation region. */
76
+ panelLabel = 'Navigation';
77
+ leSidePanelOpenChange;
78
+ leSidePanelCollapsedChange;
79
+ leSidePanelWidthChange;
80
+ isNarrow = false;
81
+ responsiveReady = false;
82
+ overlayMounted = false;
83
+ overlayVisible = false;
84
+ currentWidthPx = this.panelWidth;
85
+ resizing = false;
86
+ resizeObserver;
87
+ panelEl;
88
+ overlayWrapEl;
89
+ focusedBeforeOpen;
90
+ dragPointerId;
91
+ dragStartX;
92
+ dragStartWidth;
93
+ connectedCallback() {
94
+ this.restorePersistedState();
95
+ this.currentWidthPx = clamp(this.currentWidthPx || this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
96
+ if ('ResizeObserver' in window) {
97
+ this.resizeObserver = new ResizeObserver(() => {
98
+ this.recomputeNarrow();
99
+ });
100
+ this.resizeObserver.observe(this.el);
101
+ }
102
+ // Ensure we get at least one post-layout measurement.
103
+ {
104
+ requestAnimationFrame(() => this.recomputeNarrow());
105
+ }
106
+ }
107
+ componentWillLoad() {
108
+ this.recomputeNarrow();
109
+ }
110
+ disconnectedCallback() {
111
+ this.resizeObserver?.disconnect();
112
+ this.teardownDragListeners();
113
+ }
114
+ isModalOverlayActive() {
115
+ return this.isNarrow && this.narrowBehavior === 'overlay' && this.open;
116
+ }
117
+ syncOverlayToState() {
118
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
119
+ if (!shouldUseOverlay) {
120
+ this.overlayVisible = false;
121
+ this.overlayMounted = false;
122
+ return;
123
+ }
124
+ if (this.open) {
125
+ if (!this.overlayMounted) {
126
+ this.overlayMounted = true;
127
+ this.overlayVisible = false;
128
+ requestAnimationFrame(() => {
129
+ if (this.isNarrow && this.narrowBehavior === 'overlay' && this.open) {
130
+ this.overlayVisible = true;
131
+ this.focusFirstInsidePanel();
132
+ }
133
+ });
134
+ }
135
+ return;
136
+ }
137
+ // Closed: allow unmount to be handled by transition end / fallback timeout.
138
+ this.overlayVisible = false;
139
+ }
140
+ onPanelWidthChanged() {
141
+ if (!Number.isFinite(this.panelWidth)) {
142
+ return;
143
+ }
144
+ if (!this.resizing) {
145
+ this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
146
+ this.persistState();
147
+ }
148
+ }
149
+ onCollapsedChanged() {
150
+ this.persistState();
151
+ this.leSidePanelCollapsedChange.emit({ collapsed: this.collapsed, panelId: this.panelId });
152
+ }
153
+ onOpenChanged(newValue) {
154
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
155
+ if (!shouldUseOverlay) {
156
+ this.persistState();
157
+ this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });
158
+ return;
159
+ }
160
+ if (newValue) {
161
+ this.focusedBeforeOpen = document.activeElement || null;
162
+ this.overlayMounted = true;
163
+ this.overlayVisible = false;
164
+ requestAnimationFrame(() => {
165
+ this.overlayVisible = true;
166
+ this.focusFirstInsidePanel();
167
+ });
168
+ }
169
+ else {
170
+ this.overlayVisible = false;
171
+ this.persistState();
172
+ this.restoreFocusAfterClose();
173
+ // Fallback: if transitionend doesn't fire, ensure overlay unmounts.
174
+ // (e.g. interrupted transitions or unusual browser behavior)
175
+ window.setTimeout(() => {
176
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
177
+ if (shouldUseOverlay && !this.open && !this.overlayVisible) {
178
+ this.overlayMounted = false;
179
+ }
180
+ }, 350);
181
+ }
182
+ this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });
183
+ }
184
+ onResponsivePropChanged() {
185
+ this.recomputeNarrow();
186
+ }
187
+ onDocumentKeyDown(ev) {
188
+ if (!this.isModalOverlayActive()) {
189
+ return;
190
+ }
191
+ if (ev.key === 'Escape') {
192
+ ev.preventDefault();
193
+ ev.stopPropagation();
194
+ this.open = false;
195
+ return;
196
+ }
197
+ if (ev.key !== 'Tab') {
198
+ return;
199
+ }
200
+ const panel = this.panelEl;
201
+ if (!panel) {
202
+ return;
203
+ }
204
+ const focusables = this.getFocusableElements(panel);
205
+ if (focusables.length === 0) {
206
+ ev.preventDefault();
207
+ try {
208
+ panel.focus();
209
+ }
210
+ catch {
211
+ // ignore
212
+ }
213
+ return;
214
+ }
215
+ const first = focusables[0];
216
+ const last = focusables[focusables.length - 1];
217
+ const active = document.activeElement;
218
+ if (ev.shiftKey) {
219
+ if (!active || active === first || !panel.contains(active)) {
220
+ ev.preventDefault();
221
+ try {
222
+ last.focus();
223
+ }
224
+ catch {
225
+ // ignore
226
+ }
227
+ }
228
+ }
229
+ else {
230
+ if (active === last) {
231
+ ev.preventDefault();
232
+ try {
233
+ first.focus();
234
+ }
235
+ catch {
236
+ // ignore
237
+ }
238
+ }
239
+ }
240
+ }
241
+ onToggleRequest(ev) {
242
+ const detail = ev.detail;
243
+ if (!detail || !detail.action) {
244
+ return;
245
+ }
246
+ // panelId matching rules:
247
+ // - If this panel has panelId: respond only when detail.panelId matches.
248
+ // - If this panel has no panelId: respond only when detail.panelId is empty.
249
+ const requestedId = detail.panelId || '';
250
+ const myId = this.panelId || '';
251
+ if (myId !== requestedId) {
252
+ return;
253
+ }
254
+ if (this.isNarrow) {
255
+ this.applyActionToOpen(detail.action);
256
+ }
257
+ else {
258
+ this.applyActionToCollapsed(detail.action);
259
+ }
260
+ }
261
+ applyActionToOpen(action) {
262
+ if (action === 'open') {
263
+ this.open = true;
264
+ return;
265
+ }
266
+ if (action === 'close') {
267
+ this.open = false;
268
+ return;
269
+ }
270
+ this.open = !this.open;
271
+ }
272
+ applyActionToCollapsed(action) {
273
+ if (action === 'open') {
274
+ this.collapsed = false;
275
+ return;
276
+ }
277
+ if (action === 'close') {
278
+ this.collapsed = true;
279
+ return;
280
+ }
281
+ this.collapsed = !this.collapsed;
282
+ }
283
+ recomputeNarrow() {
284
+ const collapseAtPx = parseCollapseAtPx(this.collapseAt);
285
+ if (!collapseAtPx) {
286
+ this.isNarrow = false;
287
+ this.responsiveReady = true;
288
+ this.syncOverlayToState();
289
+ return;
290
+ }
291
+ const width = this.el.clientWidth;
292
+ // If we can't measure yet (common on first paint), don't guess a mode.
293
+ // This prevents a brief "wide" flash before ResizeObserver kicks in.
294
+ if (!(width > 0)) {
295
+ this.responsiveReady = false;
296
+ return;
297
+ }
298
+ this.responsiveReady = true;
299
+ const nextIsNarrow = width < collapseAtPx;
300
+ const prevIsNarrow = this.isNarrow;
301
+ this.isNarrow = nextIsNarrow;
302
+ if (prevIsNarrow !== nextIsNarrow) {
303
+ if (nextIsNarrow) {
304
+ if (this.autoHideOnNarrow) {
305
+ this.open = false;
306
+ }
307
+ }
308
+ else {
309
+ // entering wide mode
310
+ this.open = false;
311
+ this.overlayVisible = false;
312
+ this.overlayMounted = false;
313
+ if (this.autoShowOnWide) {
314
+ this.collapsed = false;
315
+ }
316
+ }
317
+ }
318
+ this.syncOverlayToState();
319
+ }
320
+ restorePersistedState() {
321
+ if (!this.persistKey) {
322
+ return;
323
+ }
324
+ try {
325
+ const raw = window.localStorage.getItem(this.persistKey);
326
+ if (!raw) {
327
+ return;
328
+ }
329
+ const parsed = JSON.parse(raw);
330
+ if (typeof parsed.width === 'number' && Number.isFinite(parsed.width)) {
331
+ this.currentWidthPx = parsed.width;
332
+ }
333
+ if (typeof parsed.collapsed === 'boolean') {
334
+ this.collapsed = parsed.collapsed;
335
+ }
336
+ }
337
+ catch {
338
+ // ignore
339
+ }
340
+ }
341
+ persistState() {
342
+ if (!this.persistKey) {
343
+ return;
344
+ }
345
+ const payload = {
346
+ width: this.currentWidthPx,
347
+ collapsed: this.collapsed,
348
+ };
349
+ try {
350
+ window.localStorage.setItem(this.persistKey, JSON.stringify(payload));
351
+ }
352
+ catch {
353
+ // ignore
354
+ }
355
+ }
356
+ focusFirstInsidePanel() {
357
+ const root = this.panelEl;
358
+ if (!root) {
359
+ return;
360
+ }
361
+ const candidates = this.getFocusableElements(root);
362
+ for (const el of candidates) {
363
+ if (el.hasAttribute('disabled')) {
364
+ continue;
365
+ }
366
+ const tabindex = el.getAttribute('tabindex');
367
+ if (tabindex === '-1') {
368
+ continue;
369
+ }
370
+ try {
371
+ el.focus();
372
+ return;
373
+ }
374
+ catch {
375
+ // ignore
376
+ }
377
+ }
378
+ }
379
+ getFocusableElements(root) {
380
+ const selector = 'button,[href],input,select,textarea,[tabindex]:not([tabindex="-1"])';
381
+ const all = Array.from(root.querySelectorAll(selector));
382
+ return all.filter(el => {
383
+ if (el.hasAttribute('disabled')) {
384
+ return false;
385
+ }
386
+ const tabindex = el.getAttribute('tabindex');
387
+ if (tabindex === '-1') {
388
+ return false;
389
+ }
390
+ return true;
391
+ });
392
+ }
393
+ restoreFocusAfterClose() {
394
+ const prev = this.focusedBeforeOpen;
395
+ this.focusedBeforeOpen = null;
396
+ if (prev && document.contains(prev)) {
397
+ try {
398
+ prev.focus();
399
+ }
400
+ catch {
401
+ // ignore
402
+ }
403
+ }
404
+ }
405
+ onOverlayTransitionEnd = (ev) => {
406
+ if (ev.target !== this.overlayWrapEl) {
407
+ return;
408
+ }
409
+ if (ev.propertyName !== 'transform') {
410
+ return;
411
+ }
412
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
413
+ if (!shouldUseOverlay) {
414
+ return;
415
+ }
416
+ if (!this.open && !this.overlayVisible) {
417
+ this.overlayMounted = false;
418
+ }
419
+ };
420
+ onOverlayPointerDown = (ev) => {
421
+ // Close on any click outside the panel.
422
+ const panel = this.panelEl;
423
+ if (!panel) {
424
+ return;
425
+ }
426
+ const path = ev.composedPath();
427
+ if (!path.includes(panel)) {
428
+ this.open = false;
429
+ }
430
+ };
431
+ startResizeDrag = (ev) => {
432
+ if (!this.resizable) {
433
+ return;
434
+ }
435
+ // No resizing if fully hidden.
436
+ if (!this.isNarrow && this.collapsed) {
437
+ return;
438
+ }
439
+ if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
440
+ return;
441
+ }
442
+ if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
443
+ return;
444
+ }
445
+ this.resizing = true;
446
+ this.dragPointerId = ev.pointerId;
447
+ this.dragStartX = ev.clientX;
448
+ this.dragStartWidth = this.currentWidthPx;
449
+ ev.currentTarget?.setPointerCapture?.(ev.pointerId);
450
+ window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
451
+ window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
452
+ window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
453
+ };
454
+ onResizeDragMove = (ev) => {
455
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
456
+ return;
457
+ }
458
+ ev.preventDefault();
459
+ const startX = this.dragStartX ?? ev.clientX;
460
+ const startWidth = this.dragStartWidth ?? this.currentWidthPx;
461
+ const delta = ev.clientX - startX;
462
+ const dir = this.side === 'start' ? 1 : -1;
463
+ const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
464
+ this.currentWidthPx = nextWidth;
465
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
466
+ };
467
+ onResizeDragEnd = (ev) => {
468
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
469
+ return;
470
+ }
471
+ this.resizing = false;
472
+ this.dragPointerId = undefined;
473
+ this.dragStartX = undefined;
474
+ this.dragStartWidth = undefined;
475
+ this.teardownDragListeners();
476
+ this.persistState();
477
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
478
+ };
479
+ teardownDragListeners() {
480
+ window.removeEventListener('pointermove', this.onResizeDragMove);
481
+ window.removeEventListener('pointerup', this.onResizeDragEnd);
482
+ window.removeEventListener('pointercancel', this.onResizeDragEnd);
483
+ }
484
+ renderPanelInner(opts) {
485
+ const renderPanelSlot = opts?.renderPanelSlot ?? true;
486
+ const showClose = this.showCloseButton && this.isNarrow && this.narrowBehavior === 'overlay';
487
+ const tabIndex = this.isNarrow && this.narrowBehavior === 'overlay' ? -1 : null;
488
+ return (h("div", { class: {
489
+ panel: true,
490
+ start: this.side === 'start',
491
+ end: this.side === 'end',
492
+ resizing: this.resizing,
493
+ }, part: "panel", ref: el => (this.panelEl = el), role: "navigation", "aria-label": this.panelLabel, tabindex: tabIndex }, showClose ? (h("le-side-panel-toggle", { "panel-id": "demo-side", action: "toggle", shortcut: "Mod+B", variant: "clear", class: "close", part: "close-button", "aria-label": "Close panel", "icon-only": "true", style: {
494
+ '--le-button-icon-only-padding': 'var(--le-space-sm)',
495
+ }, onClick: () => (this.open = false) }, h("slot", { name: "close-icon", slot: "icon-only" }, h("le-icon", { name: "side-panel" })))) : null, h("div", { class: "panel-scroller", part: "panel-scroller" }, renderPanelSlot ? h("slot", { name: "panel" }) : null), this.resizable ? (h("div", { class: {
496
+ handle: true,
497
+ start: this.side === 'start',
498
+ end: this.side === 'end',
499
+ }, part: "resize-handle", role: "separator", "aria-orientation": "vertical", tabindex: -1, onPointerDown: this.startResizeDrag })) : null));
500
+ }
501
+ render() {
502
+ const widthStyle = {
503
+ '--le-side-panel-width': `${this.currentWidthPx}px`,
504
+ };
505
+ const isOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
506
+ const isModalOverlayOpen = isOverlay && this.open;
507
+ const allowPanel = this.responsiveReady;
508
+ const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;
509
+ const showNarrowPushPanel = allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;
510
+ const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;
511
+ return (h("div", { key: '5ced2e49e6f13628929c54ec931cd44b28908ffa', class: {
512
+ host: true,
513
+ narrow: this.isNarrow,
514
+ wide: !this.isNarrow,
515
+ overlay: isOverlay,
516
+ push: !isOverlay,
517
+ collapsed: !this.isNarrow && this.collapsed,
518
+ }, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: '0fe007d5bfa12f1130f906195a664c8da719ed5e', class: {
519
+ 'layout': true,
520
+ 'has-panel': layoutHasInlinePanel,
521
+ 'start': this.side === 'start',
522
+ 'end': this.side === 'end',
523
+ } }, h("div", { key: 'a44957d185db52f78322216a4b3c8ddff95045d8', class: {
524
+ inlinePanel: true,
525
+ hidden: !layoutHasInlinePanel,
526
+ }, "aria-hidden": !layoutHasInlinePanel ? 'true' : null }, this.renderPanelInner({ renderPanelSlot: !isOverlay })), h("div", { key: 'd1d2f48f442a7394732adff1208636270e4e97e7', class: "content", part: "content", "aria-hidden": isModalOverlayOpen ? 'true' : null }, h("slot", { key: '5cc1bf9fb162cb84cf4a7897da83c3259fb8edba' }))), allowPanel && isOverlay && this.overlayMounted ? (h("div", { class: { overlayRoot: true, visible: this.overlayVisible }, part: "scrim", role: "presentation", onPointerDown: this.onOverlayPointerDown, "aria-hidden": isModalOverlayOpen ? null : 'true' }, h("div", { class: {
527
+ overlayPanelWrap: true,
528
+ visible: this.overlayVisible,
529
+ start: this.side === 'start',
530
+ end: this.side === 'end',
531
+ }, part: "overlay", ref: el => (this.overlayWrapEl = el), onTransitionEnd: this.onOverlayTransitionEnd, role: "dialog", "aria-modal": "true" }, this.renderPanelInner({ renderPanelSlot: true })))) : null));
532
+ }
533
+ static get watchers() { return {
534
+ "panelWidth": ["onPanelWidthChanged"],
535
+ "collapsed": ["onCollapsedChanged"],
536
+ "open": ["onOpenChanged"],
537
+ "collapseAt": ["onResponsivePropChanged"],
538
+ "narrowBehavior": ["onResponsivePropChanged"]
539
+ }; }
540
+ };
541
+ LeSidePanel.style = leSidePanelCss();
542
+
543
+ export { LeSidePanel as le_side_panel };
544
+ //# sourceMappingURL=le-side-panel.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-side-panel.entry.js","sources":["src/components/le-side-panel/le-side-panel.css?tag=le-side-panel&encapsulation=shadow","src/components/le-side-panel/le-side-panel.tsx"],"sourcesContent":[":host {\n display: block;\n height: 100%;\n\n /* Default values */\n --le-side-panel-width: 280px;\n --le-side-panel-margin: 0px;\n --le-side-panel-backdrop: var(--le-color-backdrop);\n --le-side-panel-border-radius: var(--le-radius-lg);\n}\n\n.host {\n position: relative;\n height: 100%;\n min-height: 0;\n}\n\n.layout {\n display: flex;\n align-items: stretch;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.layout.start {\n flex-direction: row;\n}\n\n.layout.end {\n flex-direction: row-reverse;\n}\n\n.inlinePanel {\n flex: 0 0 auto;\n width: var(--le-side-panel-width);\n min-width: 0;\n height: 100%;\n overflow: hidden;\n transition: width var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.inlinePanel.hidden {\n width: 0;\n}\n\n.inlinePanel .panel {\n transform: translateX(0);\n opacity: 1;\n transition:\n transform var(--le-side-panel-transition, var(--le-transition-normal)),\n opacity var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.layout.start .inlinePanel.hidden .panel {\n transform: translateX(-100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.layout.end .inlinePanel.hidden .panel {\n transform: translateX(100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.content {\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.panel {\n position: relative;\n height: 100%;\n max-height: min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));\n margin: var(--le-side-panel-margin);\n border-radius: var(--le-side-panel-border-radius);\n\n background: var(--le-color-surface, #fff);\n color: var(--le-color-text, #000);\n\n border-right: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n box-sizing: border-box;\n}\n\n.panel.end {\n border-right: 0;\n border-left: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n}\n\n.panel-scroller {\n height: 100%;\n overflow: auto;\n}\n\n.close {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 1;\n\n border: 0;\n border-radius: 6px;\n\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.handle {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 10px;\n cursor: col-resize;\n}\n\n.handle.start {\n right: -5px;\n}\n\n.handle.end {\n left: -5px;\n}\n\n/* Overlay (contained within component) */\n.overlayRoot {\n position: absolute;\n inset: 0;\n background: var(--le-side-panel-backdrop);\n z-index: var(--le-z-modal-backdrop, 1040);\n\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--le-side-panel-transition, var(--le-transition-normal));\n\n height: 100%;\n}\n\n.overlayRoot.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.overlayPanelWrap {\n position: absolute;\n top: 0;\n bottom: 0;\n width: min(100%, var(--le-side-panel-width));\n\n height: 100%;\n\n z-index: var(--le-z-modal, 1050);\n\n display: flex;\n align-items: stretch;\n}\n\n.overlayPanelWrap.start {\n left: 0;\n transform: translateX(-100%);\n}\n\n.overlayPanelWrap.end {\n right: 0;\n transform: translateX(100%);\n}\n\n.overlayPanelWrap.visible.start,\n.overlayPanelWrap.visible.end {\n transform: translateX(0);\n}\n\n.overlayPanelWrap {\n transition: transform var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n/* Disable transitions while dragging */\n.host[data-resizing='true'] .panel,\n.host[data-resizing='true'] .overlayPanelWrap,\n.host[data-resizing='true'] .inlinePanel {\n transition: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlayPanelWrap,\n .overlayRoot,\n .inlinePanel {\n transition: none;\n }\n}\n","import {\n Build,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\n\nexport type LeSidePanelSide = 'start' | 'end';\nexport type LeSidePanelNarrowBehavior = 'overlay' | 'push';\nexport type LeSidePanelToggleAction = 'toggle' | 'open' | 'close';\n\nexport type LeSidePanelRequestToggleDetail = {\n panelId?: string;\n action: LeSidePanelToggleAction;\n};\n\ntype PersistedSidePanelState = {\n width?: number;\n collapsed?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction readCssVariablePixels(varName: string): number | undefined {\n if (!Build.isBrowser) {\n return undefined;\n }\n const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n if (!v) {\n return undefined;\n }\n const parsed = Number.parseFloat(v);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseCollapseAtPx(value?: string): number | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.startsWith('--')) {\n const fromVar = readCssVariablePixels(trimmed);\n return fromVar;\n }\n\n const numeric = Number.parseFloat(trimmed);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\n@Component({\n tag: 'le-side-panel',\n styleUrl: 'le-side-panel.css',\n shadow: true,\n})\nexport class LeSidePanel {\n @Element() el: HTMLElement;\n\n /**\n * Optional id used to match toggle requests.\n * If set, the panel only responds to toggle events with the same `panelId`.\n */\n @Prop() panelId?: string;\n\n /** Which side the panel is attached to. */\n @Prop() side: LeSidePanelSide = 'start';\n\n /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters \"narrow\" mode. */\n @Prop() collapseAt?: string;\n\n /** Behavior when in narrow mode. */\n @Prop() narrowBehavior: LeSidePanelNarrowBehavior = 'overlay';\n\n /**\n * Panel open state for narrow mode.\n * - overlay: controls modal drawer visibility\n * - push: controls whether panel is shown (non-modal)\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Panel collapsed state for wide mode (fully hidden). */\n @Prop({ mutable: true, reflect: true }) collapsed: boolean = false;\n\n /** Default panel width in pixels. */\n @Prop() panelWidth: number = 280;\n\n /** Minimum allowed width when resizable. */\n @Prop() minPanelWidth: number = 220;\n\n /** Maximum allowed width when resizable. */\n @Prop() maxPanelWidth: number = 420;\n\n /** Allows users to resize the panel by dragging its edge. */\n @Prop() resizable: boolean = false;\n\n /** When set, panel width + collapsed state are persisted in localStorage. */\n @Prop() persistKey?: string;\n\n /** Show a close button inside the panel (primarily used in narrow overlay mode). */\n @Prop() showCloseButton: boolean = true;\n\n /** When crossing to wide mode, automatically show the panel (collapsed=false). */\n @Prop() autoShowOnWide: boolean = true;\n\n /** When crossing to narrow mode, automatically hide the panel (open=false). */\n @Prop() autoHideOnNarrow: boolean = true;\n\n /** Accessible label for the panel navigation region. */\n @Prop() panelLabel: string = 'Navigation';\n\n @Event({ eventName: 'leSidePanelOpenChange', bubbles: true, composed: true })\n leSidePanelOpenChange: EventEmitter<{ open: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelCollapsedChange', bubbles: true, composed: true })\n leSidePanelCollapsedChange: EventEmitter<{ collapsed: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelWidthChange', bubbles: true, composed: true })\n leSidePanelWidthChange: EventEmitter<{ width: number; panelId?: string }>;\n\n @State() private isNarrow: boolean = false;\n @State() private responsiveReady: boolean = false;\n @State() private overlayMounted: boolean = false;\n @State() private overlayVisible: boolean = false;\n @State() private currentWidthPx: number = this.panelWidth;\n @State() private resizing: boolean = false;\n\n private resizeObserver?: ResizeObserver;\n private panelEl?: HTMLElement;\n private overlayWrapEl?: HTMLElement;\n private focusedBeforeOpen?: HTMLElement | null;\n\n private dragPointerId?: number;\n private dragStartX?: number;\n private dragStartWidth?: number;\n\n connectedCallback() {\n this.restorePersistedState();\n this.currentWidthPx = clamp(\n this.currentWidthPx || this.panelWidth,\n this.minPanelWidth,\n this.maxPanelWidth,\n );\n\n if (Build.isBrowser && 'ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => {\n this.recomputeNarrow();\n });\n this.resizeObserver.observe(this.el);\n }\n\n // Ensure we get at least one post-layout measurement.\n if (Build.isBrowser) {\n requestAnimationFrame(() => this.recomputeNarrow());\n }\n }\n\n componentWillLoad() {\n this.recomputeNarrow();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.teardownDragListeners();\n }\n\n private isModalOverlayActive(): boolean {\n return this.isNarrow && this.narrowBehavior === 'overlay' && this.open;\n }\n\n private syncOverlayToState() {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n this.overlayVisible = false;\n this.overlayMounted = false;\n return;\n }\n\n if (this.open) {\n if (!this.overlayMounted) {\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n if (this.isNarrow && this.narrowBehavior === 'overlay' && this.open) {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n }\n });\n }\n return;\n }\n\n // Closed: allow unmount to be handled by transition end / fallback timeout.\n this.overlayVisible = false;\n }\n\n @Watch('panelWidth')\n protected onPanelWidthChanged() {\n if (!Number.isFinite(this.panelWidth)) {\n return;\n }\n if (!this.resizing) {\n this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);\n this.persistState();\n }\n }\n\n @Watch('collapsed')\n protected onCollapsedChanged() {\n this.persistState();\n this.leSidePanelCollapsedChange.emit({ collapsed: this.collapsed, panelId: this.panelId });\n }\n\n @Watch('open')\n protected onOpenChanged(newValue: boolean) {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n\n if (!shouldUseOverlay) {\n this.persistState();\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n return;\n }\n\n if (newValue) {\n this.focusedBeforeOpen = (document.activeElement as HTMLElement) || null;\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n });\n } else {\n this.overlayVisible = false;\n this.persistState();\n this.restoreFocusAfterClose();\n\n // Fallback: if transitionend doesn't fire, ensure overlay unmounts.\n // (e.g. interrupted transitions or unusual browser behavior)\n window.setTimeout(() => {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (shouldUseOverlay && !this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n }, 350);\n }\n\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n }\n\n @Watch('collapseAt')\n @Watch('narrowBehavior')\n protected onResponsivePropChanged() {\n this.recomputeNarrow();\n }\n\n @Listen('keydown', { target: 'document', capture: true })\n protected onDocumentKeyDown(ev: KeyboardEvent) {\n if (!Build.isBrowser) {\n return;\n }\n if (!this.isModalOverlayActive()) {\n return;\n }\n\n if (ev.key === 'Escape') {\n ev.preventDefault();\n ev.stopPropagation();\n this.open = false;\n return;\n }\n\n if (ev.key !== 'Tab') {\n return;\n }\n\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n\n const focusables = this.getFocusableElements(panel);\n if (focusables.length === 0) {\n ev.preventDefault();\n try {\n panel.focus();\n } catch {\n // ignore\n }\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (ev.shiftKey) {\n if (!active || active === first || !panel.contains(active)) {\n ev.preventDefault();\n try {\n last.focus();\n } catch {\n // ignore\n }\n }\n } else {\n if (active === last) {\n ev.preventDefault();\n try {\n first.focus();\n } catch {\n // ignore\n }\n }\n }\n }\n\n @Listen('leSidePanelRequestToggle', { target: 'document' })\n protected onToggleRequest(ev: CustomEvent<LeSidePanelRequestToggleDetail>) {\n const detail = ev.detail;\n if (!detail || !detail.action) {\n return;\n }\n\n // panelId matching rules:\n // - If this panel has panelId: respond only when detail.panelId matches.\n // - If this panel has no panelId: respond only when detail.panelId is empty.\n const requestedId = detail.panelId || '';\n const myId = this.panelId || '';\n if (myId !== requestedId) {\n return;\n }\n\n if (this.isNarrow) {\n this.applyActionToOpen(detail.action);\n } else {\n this.applyActionToCollapsed(detail.action);\n }\n }\n\n private applyActionToOpen(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.open = true;\n return;\n }\n if (action === 'close') {\n this.open = false;\n return;\n }\n this.open = !this.open;\n }\n\n private applyActionToCollapsed(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.collapsed = false;\n return;\n }\n if (action === 'close') {\n this.collapsed = true;\n return;\n }\n this.collapsed = !this.collapsed;\n }\n\n private recomputeNarrow() {\n const collapseAtPx = parseCollapseAtPx(this.collapseAt);\n if (!collapseAtPx) {\n this.isNarrow = false;\n this.responsiveReady = true;\n this.syncOverlayToState();\n return;\n }\n\n const width = this.el.clientWidth;\n\n // If we can't measure yet (common on first paint), don't guess a mode.\n // This prevents a brief \"wide\" flash before ResizeObserver kicks in.\n if (!(width > 0)) {\n this.responsiveReady = false;\n return;\n }\n\n this.responsiveReady = true;\n const nextIsNarrow = width < collapseAtPx;\n\n const prevIsNarrow = this.isNarrow;\n this.isNarrow = nextIsNarrow;\n\n if (prevIsNarrow !== nextIsNarrow) {\n if (nextIsNarrow) {\n if (this.autoHideOnNarrow) {\n this.open = false;\n }\n } else {\n // entering wide mode\n this.open = false;\n this.overlayVisible = false;\n this.overlayMounted = false;\n\n if (this.autoShowOnWide) {\n this.collapsed = false;\n }\n }\n }\n\n this.syncOverlayToState();\n }\n\n private restorePersistedState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n try {\n const raw = window.localStorage.getItem(this.persistKey);\n if (!raw) {\n return;\n }\n const parsed = JSON.parse(raw) as PersistedSidePanelState;\n if (typeof parsed.width === 'number' && Number.isFinite(parsed.width)) {\n this.currentWidthPx = parsed.width;\n }\n if (typeof parsed.collapsed === 'boolean') {\n this.collapsed = parsed.collapsed;\n }\n } catch {\n // ignore\n }\n }\n\n private persistState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n const payload: PersistedSidePanelState = {\n width: this.currentWidthPx,\n collapsed: this.collapsed,\n };\n try {\n window.localStorage.setItem(this.persistKey, JSON.stringify(payload));\n } catch {\n // ignore\n }\n }\n\n private focusFirstInsidePanel() {\n if (!Build.isBrowser) {\n return;\n }\n\n const root = this.panelEl;\n if (!root) {\n return;\n }\n\n const candidates = this.getFocusableElements(root);\n for (const el of candidates) {\n if (el.hasAttribute('disabled')) {\n continue;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n continue;\n }\n try {\n el.focus();\n return;\n } catch {\n // ignore\n }\n }\n }\n\n private getFocusableElements(root: HTMLElement): HTMLElement[] {\n const selector = 'button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])';\n const all = Array.from(root.querySelectorAll<HTMLElement>(selector));\n return all.filter(el => {\n if (el.hasAttribute('disabled')) {\n return false;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n return false;\n }\n return true;\n });\n }\n\n private restoreFocusAfterClose() {\n if (!Build.isBrowser) {\n return;\n }\n const prev = this.focusedBeforeOpen;\n this.focusedBeforeOpen = null;\n if (prev && document.contains(prev)) {\n try {\n prev.focus();\n } catch {\n // ignore\n }\n }\n }\n\n private onOverlayTransitionEnd = (ev: TransitionEvent) => {\n if (ev.target !== this.overlayWrapEl) {\n return;\n }\n if (ev.propertyName !== 'transform') {\n return;\n }\n\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n return;\n }\n\n if (!this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n };\n\n private onOverlayPointerDown = (ev: PointerEvent) => {\n // Close on any click outside the panel.\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n const path = ev.composedPath();\n if (!path.includes(panel)) {\n this.open = false;\n }\n };\n\n private startResizeDrag = (ev: PointerEvent) => {\n if (!this.resizable) {\n return;\n }\n // No resizing if fully hidden.\n if (!this.isNarrow && this.collapsed) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {\n return;\n }\n\n this.resizing = true;\n this.dragPointerId = ev.pointerId;\n this.dragStartX = ev.clientX;\n this.dragStartWidth = this.currentWidthPx;\n\n (ev.currentTarget as HTMLElement)?.setPointerCapture?.(ev.pointerId);\n\n window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });\n window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });\n window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });\n };\n\n private onResizeDragMove = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n ev.preventDefault();\n\n const startX = this.dragStartX ?? ev.clientX;\n const startWidth = this.dragStartWidth ?? this.currentWidthPx;\n\n const delta = ev.clientX - startX;\n const dir = this.side === 'start' ? 1 : -1;\n const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);\n this.currentWidthPx = nextWidth;\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private onResizeDragEnd = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n\n this.resizing = false;\n this.dragPointerId = undefined;\n this.dragStartX = undefined;\n this.dragStartWidth = undefined;\n\n this.teardownDragListeners();\n this.persistState();\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private teardownDragListeners() {\n window.removeEventListener('pointermove', this.onResizeDragMove as any);\n window.removeEventListener('pointerup', this.onResizeDragEnd as any);\n window.removeEventListener('pointercancel', this.onResizeDragEnd as any);\n }\n\n private renderPanelInner(opts?: { renderPanelSlot?: boolean }) {\n const renderPanelSlot = opts?.renderPanelSlot ?? true;\n const showClose = this.showCloseButton && this.isNarrow && this.narrowBehavior === 'overlay';\n const tabIndex = this.isNarrow && this.narrowBehavior === 'overlay' ? -1 : null;\n\n return (\n <div\n class={{\n panel: true,\n start: this.side === 'start',\n end: this.side === 'end',\n resizing: this.resizing,\n }}\n part=\"panel\"\n ref={el => (this.panelEl = el as HTMLElement)}\n role=\"navigation\"\n aria-label={this.panelLabel}\n tabindex={tabIndex as any}\n >\n {showClose ? (\n <le-side-panel-toggle\n panel-id=\"demo-side\"\n action=\"toggle\"\n shortcut=\"Mod+B\"\n variant=\"clear\"\n class=\"close\"\n part=\"close-button\"\n aria-label=\"Close panel\"\n icon-only=\"true\"\n style={{\n '--le-button-icon-only-padding': 'var(--le-space-sm)',\n }}\n onClick={() => (this.open = false)}\n >\n <slot name=\"close-icon\" slot=\"icon-only\">\n <le-icon name=\"side-panel\" />\n </slot>\n </le-side-panel-toggle>\n ) : null}\n\n <div class=\"panel-scroller\" part=\"panel-scroller\">\n {renderPanelSlot ? <slot name=\"panel\" /> : null}\n </div>\n\n {this.resizable ? (\n <div\n class={{\n handle: true,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex={-1}\n onPointerDown={this.startResizeDrag}\n />\n ) : null}\n </div>\n );\n }\n\n render() {\n const widthStyle = {\n '--le-side-panel-width': `${this.currentWidthPx}px`,\n };\n\n const isOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n const isModalOverlayOpen = isOverlay && this.open;\n\n const allowPanel = this.responsiveReady;\n\n const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;\n const showNarrowPushPanel =\n allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;\n\n const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;\n\n return (\n <div\n class={{\n host: true,\n narrow: this.isNarrow,\n wide: !this.isNarrow,\n overlay: isOverlay,\n push: !isOverlay,\n collapsed: !this.isNarrow && this.collapsed,\n }}\n style={widthStyle as any}\n data-resizing={this.resizing ? 'true' : null}\n >\n {/* Wide + narrow push layout */}\n <div\n class={{\n 'layout': true,\n 'has-panel': layoutHasInlinePanel,\n 'start': this.side === 'start',\n 'end': this.side === 'end',\n }}\n >\n <div\n class={{\n inlinePanel: true,\n hidden: !layoutHasInlinePanel,\n }}\n aria-hidden={!layoutHasInlinePanel ? 'true' : null}\n >\n {/* In narrow overlay mode, only the overlay should own the named slot. */}\n {this.renderPanelInner({ renderPanelSlot: !isOverlay })}\n </div>\n\n <div class=\"content\" part=\"content\" aria-hidden={isModalOverlayOpen ? 'true' : null}>\n <slot />\n </div>\n </div>\n\n {/* Narrow overlay modal (contained within this component) */}\n {allowPanel && isOverlay && this.overlayMounted ? (\n <div\n class={{ overlayRoot: true, visible: this.overlayVisible }}\n part=\"scrim\"\n role=\"presentation\"\n onPointerDown={this.onOverlayPointerDown}\n aria-hidden={isModalOverlayOpen ? null : 'true'}\n >\n <div\n class={{\n overlayPanelWrap: true,\n visible: this.overlayVisible,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"overlay\"\n ref={el => (this.overlayWrapEl = el as HTMLElement)}\n onTransitionEnd={this.onOverlayTransitionEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {this.renderPanelInner({ renderPanelSlot: true })}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { r as registerInstance, c as getElement, h } from './index-C-Chwj1b.js';
2
- import { c as classnames } from './utils-B3alHV04.js';
1
+ import { r as registerInstance, a as getElement, h } from './index-DFTm5BqT.js';
2
+ import { c as classnames } from './utils-DZYCZLrF.js';
3
3
 
4
4
  const leStackDefaultCss = () => `:host{display:block}:host([hidden]){display:none}.stack{gap:var(--le-stack-gap, var(--le-space-md))}:host(.full-width){width:100%}:host(.full-height){height:100%}:host(.direction-horizontal) .stack{min-height:0}:host(.direction-vertical) .stack{min-width:0}`;
5
5
 
@@ -124,7 +124,7 @@ const LeStack = class {
124
124
  });
125
125
  // Slot style for admin mode - make items display in the same direction
126
126
  const slotStyle = `display: flex; flex-direction: ${this.getFlexDirection()}; gap: ${this.gap || 'var(--le-space-md)'}; flex-wrap: ${this.wrap ? 'wrap' : 'nowrap'}; justify-content: ${this.getJustifyContent()}; align-items: ${this.getAlignItems()};`;
127
- return (h("le-component", { key: 'b9fa5837421caadf0bf79a9303a2b279f9efa92c', component: "le-stack", hostClass: hostClass }, h("div", { key: 'a7d39ec296b741f608832d619639e340c42bc652', class: "stack", part: "stack", style: style }, h("le-slot", { key: 'd0a4643dcb137eefc57629ac78579e51e3530fd1', name: "", description: `Items arranged ${this.direction}ly${this.maxItems ? ` (max ${this.maxItems})` : ''}`, type: "slot", "allowed-components": "le-text,le-box,le-card,le-button,le-stack", slotStyle: slotStyle }, h("slot", { key: '70a847ebeebc868a204b9121f922ad70f34186a4' })))));
127
+ return (h("le-component", { key: '465b00b5165b3c19f0043f5ffaab5081464692dc', component: "le-stack", hostClass: hostClass }, h("div", { key: '1787122eea7ee7f2986581ef8ab3c65068ef799f', class: "stack", part: "stack", style: style }, h("le-slot", { key: '5be191bf1ea7d4edc2f27a6f97e57a038dc8cc94', name: "", description: `Items arranged ${this.direction}ly${this.maxItems ? ` (max ${this.maxItems})` : ''}`, type: "slot", "allowed-components": "le-text,le-box,le-card,le-button,le-stack", slotStyle: slotStyle }, h("slot", { key: '9b11206293f60733a0c59de456513088373ce245' })))));
128
128
  }
129
129
  };
130
130
  LeStack.style = leStackDefaultCss();