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,953 @@
1
+ import { Build, h, } from "@stencil/core";
2
+ function clamp(value, min, max) {
3
+ return Math.min(max, Math.max(min, value));
4
+ }
5
+ function readCssVariablePixels(varName) {
6
+ if (!Build.isBrowser) {
7
+ return undefined;
8
+ }
9
+ const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
10
+ if (!v) {
11
+ return undefined;
12
+ }
13
+ const parsed = Number.parseFloat(v);
14
+ return Number.isFinite(parsed) ? parsed : undefined;
15
+ }
16
+ function parseCollapseAtPx(value) {
17
+ if (!value) {
18
+ return undefined;
19
+ }
20
+ const trimmed = value.trim();
21
+ if (!trimmed) {
22
+ return undefined;
23
+ }
24
+ if (trimmed.startsWith('--')) {
25
+ const fromVar = readCssVariablePixels(trimmed);
26
+ return fromVar;
27
+ }
28
+ const numeric = Number.parseFloat(trimmed);
29
+ return Number.isFinite(numeric) ? numeric : undefined;
30
+ }
31
+ export class LeSidePanel {
32
+ el;
33
+ /**
34
+ * Optional id used to match toggle requests.
35
+ * If set, the panel only responds to toggle events with the same `panelId`.
36
+ */
37
+ panelId;
38
+ /** Which side the panel is attached to. */
39
+ side = 'start';
40
+ /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters "narrow" mode. */
41
+ collapseAt;
42
+ /** Behavior when in narrow mode. */
43
+ narrowBehavior = 'overlay';
44
+ /**
45
+ * Panel open state for narrow mode.
46
+ * - overlay: controls modal drawer visibility
47
+ * - push: controls whether panel is shown (non-modal)
48
+ */
49
+ open = false;
50
+ /** Panel collapsed state for wide mode (fully hidden). */
51
+ collapsed = false;
52
+ /** Default panel width in pixels. */
53
+ panelWidth = 280;
54
+ /** Minimum allowed width when resizable. */
55
+ minPanelWidth = 220;
56
+ /** Maximum allowed width when resizable. */
57
+ maxPanelWidth = 420;
58
+ /** Allows users to resize the panel by dragging its edge. */
59
+ resizable = false;
60
+ /** When set, panel width + collapsed state are persisted in localStorage. */
61
+ persistKey;
62
+ /** Show a close button inside the panel (primarily used in narrow overlay mode). */
63
+ showCloseButton = true;
64
+ /** When crossing to wide mode, automatically show the panel (collapsed=false). */
65
+ autoShowOnWide = true;
66
+ /** When crossing to narrow mode, automatically hide the panel (open=false). */
67
+ autoHideOnNarrow = true;
68
+ /** Accessible label for the panel navigation region. */
69
+ panelLabel = 'Navigation';
70
+ leSidePanelOpenChange;
71
+ leSidePanelCollapsedChange;
72
+ leSidePanelWidthChange;
73
+ isNarrow = false;
74
+ responsiveReady = false;
75
+ overlayMounted = false;
76
+ overlayVisible = false;
77
+ currentWidthPx = this.panelWidth;
78
+ resizing = false;
79
+ resizeObserver;
80
+ panelEl;
81
+ overlayWrapEl;
82
+ focusedBeforeOpen;
83
+ dragPointerId;
84
+ dragStartX;
85
+ dragStartWidth;
86
+ connectedCallback() {
87
+ this.restorePersistedState();
88
+ this.currentWidthPx = clamp(this.currentWidthPx || this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
89
+ if (Build.isBrowser && 'ResizeObserver' in window) {
90
+ this.resizeObserver = new ResizeObserver(() => {
91
+ this.recomputeNarrow();
92
+ });
93
+ this.resizeObserver.observe(this.el);
94
+ }
95
+ // Ensure we get at least one post-layout measurement.
96
+ if (Build.isBrowser) {
97
+ requestAnimationFrame(() => this.recomputeNarrow());
98
+ }
99
+ }
100
+ componentWillLoad() {
101
+ this.recomputeNarrow();
102
+ }
103
+ disconnectedCallback() {
104
+ this.resizeObserver?.disconnect();
105
+ this.teardownDragListeners();
106
+ }
107
+ isModalOverlayActive() {
108
+ return this.isNarrow && this.narrowBehavior === 'overlay' && this.open;
109
+ }
110
+ syncOverlayToState() {
111
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
112
+ if (!shouldUseOverlay) {
113
+ this.overlayVisible = false;
114
+ this.overlayMounted = false;
115
+ return;
116
+ }
117
+ if (this.open) {
118
+ if (!this.overlayMounted) {
119
+ this.overlayMounted = true;
120
+ this.overlayVisible = false;
121
+ requestAnimationFrame(() => {
122
+ if (this.isNarrow && this.narrowBehavior === 'overlay' && this.open) {
123
+ this.overlayVisible = true;
124
+ this.focusFirstInsidePanel();
125
+ }
126
+ });
127
+ }
128
+ return;
129
+ }
130
+ // Closed: allow unmount to be handled by transition end / fallback timeout.
131
+ this.overlayVisible = false;
132
+ }
133
+ onPanelWidthChanged() {
134
+ if (!Number.isFinite(this.panelWidth)) {
135
+ return;
136
+ }
137
+ if (!this.resizing) {
138
+ this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
139
+ this.persistState();
140
+ }
141
+ }
142
+ onCollapsedChanged() {
143
+ this.persistState();
144
+ this.leSidePanelCollapsedChange.emit({ collapsed: this.collapsed, panelId: this.panelId });
145
+ }
146
+ onOpenChanged(newValue) {
147
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
148
+ if (!shouldUseOverlay) {
149
+ this.persistState();
150
+ this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });
151
+ return;
152
+ }
153
+ if (newValue) {
154
+ this.focusedBeforeOpen = document.activeElement || null;
155
+ this.overlayMounted = true;
156
+ this.overlayVisible = false;
157
+ requestAnimationFrame(() => {
158
+ this.overlayVisible = true;
159
+ this.focusFirstInsidePanel();
160
+ });
161
+ }
162
+ else {
163
+ this.overlayVisible = false;
164
+ this.persistState();
165
+ this.restoreFocusAfterClose();
166
+ // Fallback: if transitionend doesn't fire, ensure overlay unmounts.
167
+ // (e.g. interrupted transitions or unusual browser behavior)
168
+ window.setTimeout(() => {
169
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
170
+ if (shouldUseOverlay && !this.open && !this.overlayVisible) {
171
+ this.overlayMounted = false;
172
+ }
173
+ }, 350);
174
+ }
175
+ this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });
176
+ }
177
+ onResponsivePropChanged() {
178
+ this.recomputeNarrow();
179
+ }
180
+ onDocumentKeyDown(ev) {
181
+ if (!Build.isBrowser) {
182
+ return;
183
+ }
184
+ if (!this.isModalOverlayActive()) {
185
+ return;
186
+ }
187
+ if (ev.key === 'Escape') {
188
+ ev.preventDefault();
189
+ ev.stopPropagation();
190
+ this.open = false;
191
+ return;
192
+ }
193
+ if (ev.key !== 'Tab') {
194
+ return;
195
+ }
196
+ const panel = this.panelEl;
197
+ if (!panel) {
198
+ return;
199
+ }
200
+ const focusables = this.getFocusableElements(panel);
201
+ if (focusables.length === 0) {
202
+ ev.preventDefault();
203
+ try {
204
+ panel.focus();
205
+ }
206
+ catch {
207
+ // ignore
208
+ }
209
+ return;
210
+ }
211
+ const first = focusables[0];
212
+ const last = focusables[focusables.length - 1];
213
+ const active = document.activeElement;
214
+ if (ev.shiftKey) {
215
+ if (!active || active === first || !panel.contains(active)) {
216
+ ev.preventDefault();
217
+ try {
218
+ last.focus();
219
+ }
220
+ catch {
221
+ // ignore
222
+ }
223
+ }
224
+ }
225
+ else {
226
+ if (active === last) {
227
+ ev.preventDefault();
228
+ try {
229
+ first.focus();
230
+ }
231
+ catch {
232
+ // ignore
233
+ }
234
+ }
235
+ }
236
+ }
237
+ onToggleRequest(ev) {
238
+ const detail = ev.detail;
239
+ if (!detail || !detail.action) {
240
+ return;
241
+ }
242
+ // panelId matching rules:
243
+ // - If this panel has panelId: respond only when detail.panelId matches.
244
+ // - If this panel has no panelId: respond only when detail.panelId is empty.
245
+ const requestedId = detail.panelId || '';
246
+ const myId = this.panelId || '';
247
+ if (myId !== requestedId) {
248
+ return;
249
+ }
250
+ if (this.isNarrow) {
251
+ this.applyActionToOpen(detail.action);
252
+ }
253
+ else {
254
+ this.applyActionToCollapsed(detail.action);
255
+ }
256
+ }
257
+ applyActionToOpen(action) {
258
+ if (action === 'open') {
259
+ this.open = true;
260
+ return;
261
+ }
262
+ if (action === 'close') {
263
+ this.open = false;
264
+ return;
265
+ }
266
+ this.open = !this.open;
267
+ }
268
+ applyActionToCollapsed(action) {
269
+ if (action === 'open') {
270
+ this.collapsed = false;
271
+ return;
272
+ }
273
+ if (action === 'close') {
274
+ this.collapsed = true;
275
+ return;
276
+ }
277
+ this.collapsed = !this.collapsed;
278
+ }
279
+ recomputeNarrow() {
280
+ const collapseAtPx = parseCollapseAtPx(this.collapseAt);
281
+ if (!collapseAtPx) {
282
+ this.isNarrow = false;
283
+ this.responsiveReady = true;
284
+ this.syncOverlayToState();
285
+ return;
286
+ }
287
+ const width = this.el.clientWidth;
288
+ // If we can't measure yet (common on first paint), don't guess a mode.
289
+ // This prevents a brief "wide" flash before ResizeObserver kicks in.
290
+ if (!(width > 0)) {
291
+ this.responsiveReady = false;
292
+ return;
293
+ }
294
+ this.responsiveReady = true;
295
+ const nextIsNarrow = width < collapseAtPx;
296
+ const prevIsNarrow = this.isNarrow;
297
+ this.isNarrow = nextIsNarrow;
298
+ if (prevIsNarrow !== nextIsNarrow) {
299
+ if (nextIsNarrow) {
300
+ if (this.autoHideOnNarrow) {
301
+ this.open = false;
302
+ }
303
+ }
304
+ else {
305
+ // entering wide mode
306
+ this.open = false;
307
+ this.overlayVisible = false;
308
+ this.overlayMounted = false;
309
+ if (this.autoShowOnWide) {
310
+ this.collapsed = false;
311
+ }
312
+ }
313
+ }
314
+ this.syncOverlayToState();
315
+ }
316
+ restorePersistedState() {
317
+ if (!Build.isBrowser || !this.persistKey) {
318
+ return;
319
+ }
320
+ try {
321
+ const raw = window.localStorage.getItem(this.persistKey);
322
+ if (!raw) {
323
+ return;
324
+ }
325
+ const parsed = JSON.parse(raw);
326
+ if (typeof parsed.width === 'number' && Number.isFinite(parsed.width)) {
327
+ this.currentWidthPx = parsed.width;
328
+ }
329
+ if (typeof parsed.collapsed === 'boolean') {
330
+ this.collapsed = parsed.collapsed;
331
+ }
332
+ }
333
+ catch {
334
+ // ignore
335
+ }
336
+ }
337
+ persistState() {
338
+ if (!Build.isBrowser || !this.persistKey) {
339
+ return;
340
+ }
341
+ const payload = {
342
+ width: this.currentWidthPx,
343
+ collapsed: this.collapsed,
344
+ };
345
+ try {
346
+ window.localStorage.setItem(this.persistKey, JSON.stringify(payload));
347
+ }
348
+ catch {
349
+ // ignore
350
+ }
351
+ }
352
+ focusFirstInsidePanel() {
353
+ if (!Build.isBrowser) {
354
+ return;
355
+ }
356
+ const root = this.panelEl;
357
+ if (!root) {
358
+ return;
359
+ }
360
+ const candidates = this.getFocusableElements(root);
361
+ for (const el of candidates) {
362
+ if (el.hasAttribute('disabled')) {
363
+ continue;
364
+ }
365
+ const tabindex = el.getAttribute('tabindex');
366
+ if (tabindex === '-1') {
367
+ continue;
368
+ }
369
+ try {
370
+ el.focus();
371
+ return;
372
+ }
373
+ catch {
374
+ // ignore
375
+ }
376
+ }
377
+ }
378
+ getFocusableElements(root) {
379
+ const selector = 'button,[href],input,select,textarea,[tabindex]:not([tabindex="-1"])';
380
+ const all = Array.from(root.querySelectorAll(selector));
381
+ return all.filter(el => {
382
+ if (el.hasAttribute('disabled')) {
383
+ return false;
384
+ }
385
+ const tabindex = el.getAttribute('tabindex');
386
+ if (tabindex === '-1') {
387
+ return false;
388
+ }
389
+ return true;
390
+ });
391
+ }
392
+ restoreFocusAfterClose() {
393
+ if (!Build.isBrowser) {
394
+ return;
395
+ }
396
+ const prev = this.focusedBeforeOpen;
397
+ this.focusedBeforeOpen = null;
398
+ if (prev && document.contains(prev)) {
399
+ try {
400
+ prev.focus();
401
+ }
402
+ catch {
403
+ // ignore
404
+ }
405
+ }
406
+ }
407
+ onOverlayTransitionEnd = (ev) => {
408
+ if (ev.target !== this.overlayWrapEl) {
409
+ return;
410
+ }
411
+ if (ev.propertyName !== 'transform') {
412
+ return;
413
+ }
414
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
415
+ if (!shouldUseOverlay) {
416
+ return;
417
+ }
418
+ if (!this.open && !this.overlayVisible) {
419
+ this.overlayMounted = false;
420
+ }
421
+ };
422
+ onOverlayPointerDown = (ev) => {
423
+ // Close on any click outside the panel.
424
+ const panel = this.panelEl;
425
+ if (!panel) {
426
+ return;
427
+ }
428
+ const path = ev.composedPath();
429
+ if (!path.includes(panel)) {
430
+ this.open = false;
431
+ }
432
+ };
433
+ startResizeDrag = (ev) => {
434
+ if (!this.resizable) {
435
+ return;
436
+ }
437
+ // No resizing if fully hidden.
438
+ if (!this.isNarrow && this.collapsed) {
439
+ return;
440
+ }
441
+ if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
442
+ return;
443
+ }
444
+ if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
445
+ return;
446
+ }
447
+ this.resizing = true;
448
+ this.dragPointerId = ev.pointerId;
449
+ this.dragStartX = ev.clientX;
450
+ this.dragStartWidth = this.currentWidthPx;
451
+ ev.currentTarget?.setPointerCapture?.(ev.pointerId);
452
+ window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
453
+ window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
454
+ window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
455
+ };
456
+ onResizeDragMove = (ev) => {
457
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
458
+ return;
459
+ }
460
+ ev.preventDefault();
461
+ const startX = this.dragStartX ?? ev.clientX;
462
+ const startWidth = this.dragStartWidth ?? this.currentWidthPx;
463
+ const delta = ev.clientX - startX;
464
+ const dir = this.side === 'start' ? 1 : -1;
465
+ const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
466
+ this.currentWidthPx = nextWidth;
467
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
468
+ };
469
+ onResizeDragEnd = (ev) => {
470
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
471
+ return;
472
+ }
473
+ this.resizing = false;
474
+ this.dragPointerId = undefined;
475
+ this.dragStartX = undefined;
476
+ this.dragStartWidth = undefined;
477
+ this.teardownDragListeners();
478
+ this.persistState();
479
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
480
+ };
481
+ teardownDragListeners() {
482
+ window.removeEventListener('pointermove', this.onResizeDragMove);
483
+ window.removeEventListener('pointerup', this.onResizeDragEnd);
484
+ window.removeEventListener('pointercancel', this.onResizeDragEnd);
485
+ }
486
+ renderPanelInner(opts) {
487
+ const renderPanelSlot = opts?.renderPanelSlot ?? true;
488
+ const showClose = this.showCloseButton && this.isNarrow && this.narrowBehavior === 'overlay';
489
+ const tabIndex = this.isNarrow && this.narrowBehavior === 'overlay' ? -1 : null;
490
+ return (h("div", { class: {
491
+ panel: true,
492
+ start: this.side === 'start',
493
+ end: this.side === 'end',
494
+ resizing: this.resizing,
495
+ }, 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: {
496
+ '--le-button-icon-only-padding': 'var(--le-space-sm)',
497
+ }, 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: {
498
+ handle: true,
499
+ start: this.side === 'start',
500
+ end: this.side === 'end',
501
+ }, part: "resize-handle", role: "separator", "aria-orientation": "vertical", tabindex: -1, onPointerDown: this.startResizeDrag })) : null));
502
+ }
503
+ render() {
504
+ const widthStyle = {
505
+ '--le-side-panel-width': `${this.currentWidthPx}px`,
506
+ };
507
+ const isOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
508
+ const isModalOverlayOpen = isOverlay && this.open;
509
+ const allowPanel = this.responsiveReady;
510
+ const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;
511
+ const showNarrowPushPanel = allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;
512
+ const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;
513
+ return (h("div", { key: '5ced2e49e6f13628929c54ec931cd44b28908ffa', class: {
514
+ host: true,
515
+ narrow: this.isNarrow,
516
+ wide: !this.isNarrow,
517
+ overlay: isOverlay,
518
+ push: !isOverlay,
519
+ collapsed: !this.isNarrow && this.collapsed,
520
+ }, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: '0fe007d5bfa12f1130f906195a664c8da719ed5e', class: {
521
+ 'layout': true,
522
+ 'has-panel': layoutHasInlinePanel,
523
+ 'start': this.side === 'start',
524
+ 'end': this.side === 'end',
525
+ } }, h("div", { key: 'a44957d185db52f78322216a4b3c8ddff95045d8', class: {
526
+ inlinePanel: true,
527
+ hidden: !layoutHasInlinePanel,
528
+ }, "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: {
529
+ overlayPanelWrap: true,
530
+ visible: this.overlayVisible,
531
+ start: this.side === 'start',
532
+ end: this.side === 'end',
533
+ }, part: "overlay", ref: el => (this.overlayWrapEl = el), onTransitionEnd: this.onOverlayTransitionEnd, role: "dialog", "aria-modal": "true" }, this.renderPanelInner({ renderPanelSlot: true })))) : null));
534
+ }
535
+ static get is() { return "le-side-panel"; }
536
+ static get encapsulation() { return "shadow"; }
537
+ static get originalStyleUrls() {
538
+ return {
539
+ "$": ["le-side-panel.css"]
540
+ };
541
+ }
542
+ static get styleUrls() {
543
+ return {
544
+ "$": ["le-side-panel.css"]
545
+ };
546
+ }
547
+ static get properties() {
548
+ return {
549
+ "panelId": {
550
+ "type": "string",
551
+ "mutable": false,
552
+ "complexType": {
553
+ "original": "string",
554
+ "resolved": "string",
555
+ "references": {}
556
+ },
557
+ "required": false,
558
+ "optional": true,
559
+ "docs": {
560
+ "tags": [],
561
+ "text": "Optional id used to match toggle requests.\nIf set, the panel only responds to toggle events with the same `panelId`."
562
+ },
563
+ "getter": false,
564
+ "setter": false,
565
+ "reflect": false,
566
+ "attribute": "panel-id"
567
+ },
568
+ "side": {
569
+ "type": "string",
570
+ "mutable": false,
571
+ "complexType": {
572
+ "original": "LeSidePanelSide",
573
+ "resolved": "\"end\" | \"start\"",
574
+ "references": {
575
+ "LeSidePanelSide": {
576
+ "location": "local",
577
+ "path": "/home/runner/work/le-kit/le-kit/src/components/le-side-panel/le-side-panel.tsx",
578
+ "id": "src/components/le-side-panel/le-side-panel.tsx::LeSidePanelSide"
579
+ }
580
+ }
581
+ },
582
+ "required": false,
583
+ "optional": false,
584
+ "docs": {
585
+ "tags": [],
586
+ "text": "Which side the panel is attached to."
587
+ },
588
+ "getter": false,
589
+ "setter": false,
590
+ "reflect": false,
591
+ "attribute": "side",
592
+ "defaultValue": "'start'"
593
+ },
594
+ "collapseAt": {
595
+ "type": "string",
596
+ "mutable": false,
597
+ "complexType": {
598
+ "original": "string",
599
+ "resolved": "string",
600
+ "references": {}
601
+ },
602
+ "required": false,
603
+ "optional": true,
604
+ "docs": {
605
+ "tags": [],
606
+ "text": "Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters \"narrow\" mode."
607
+ },
608
+ "getter": false,
609
+ "setter": false,
610
+ "reflect": false,
611
+ "attribute": "collapse-at"
612
+ },
613
+ "narrowBehavior": {
614
+ "type": "string",
615
+ "mutable": false,
616
+ "complexType": {
617
+ "original": "LeSidePanelNarrowBehavior",
618
+ "resolved": "\"overlay\" | \"push\"",
619
+ "references": {
620
+ "LeSidePanelNarrowBehavior": {
621
+ "location": "local",
622
+ "path": "/home/runner/work/le-kit/le-kit/src/components/le-side-panel/le-side-panel.tsx",
623
+ "id": "src/components/le-side-panel/le-side-panel.tsx::LeSidePanelNarrowBehavior"
624
+ }
625
+ }
626
+ },
627
+ "required": false,
628
+ "optional": false,
629
+ "docs": {
630
+ "tags": [],
631
+ "text": "Behavior when in narrow mode."
632
+ },
633
+ "getter": false,
634
+ "setter": false,
635
+ "reflect": false,
636
+ "attribute": "narrow-behavior",
637
+ "defaultValue": "'overlay'"
638
+ },
639
+ "open": {
640
+ "type": "boolean",
641
+ "mutable": true,
642
+ "complexType": {
643
+ "original": "boolean",
644
+ "resolved": "boolean",
645
+ "references": {}
646
+ },
647
+ "required": false,
648
+ "optional": false,
649
+ "docs": {
650
+ "tags": [],
651
+ "text": "Panel open state for narrow mode.\n- overlay: controls modal drawer visibility\n- push: controls whether panel is shown (non-modal)"
652
+ },
653
+ "getter": false,
654
+ "setter": false,
655
+ "reflect": true,
656
+ "attribute": "open",
657
+ "defaultValue": "false"
658
+ },
659
+ "collapsed": {
660
+ "type": "boolean",
661
+ "mutable": true,
662
+ "complexType": {
663
+ "original": "boolean",
664
+ "resolved": "boolean",
665
+ "references": {}
666
+ },
667
+ "required": false,
668
+ "optional": false,
669
+ "docs": {
670
+ "tags": [],
671
+ "text": "Panel collapsed state for wide mode (fully hidden)."
672
+ },
673
+ "getter": false,
674
+ "setter": false,
675
+ "reflect": true,
676
+ "attribute": "collapsed",
677
+ "defaultValue": "false"
678
+ },
679
+ "panelWidth": {
680
+ "type": "number",
681
+ "mutable": false,
682
+ "complexType": {
683
+ "original": "number",
684
+ "resolved": "number",
685
+ "references": {}
686
+ },
687
+ "required": false,
688
+ "optional": false,
689
+ "docs": {
690
+ "tags": [],
691
+ "text": "Default panel width in pixels."
692
+ },
693
+ "getter": false,
694
+ "setter": false,
695
+ "reflect": false,
696
+ "attribute": "panel-width",
697
+ "defaultValue": "280"
698
+ },
699
+ "minPanelWidth": {
700
+ "type": "number",
701
+ "mutable": false,
702
+ "complexType": {
703
+ "original": "number",
704
+ "resolved": "number",
705
+ "references": {}
706
+ },
707
+ "required": false,
708
+ "optional": false,
709
+ "docs": {
710
+ "tags": [],
711
+ "text": "Minimum allowed width when resizable."
712
+ },
713
+ "getter": false,
714
+ "setter": false,
715
+ "reflect": false,
716
+ "attribute": "min-panel-width",
717
+ "defaultValue": "220"
718
+ },
719
+ "maxPanelWidth": {
720
+ "type": "number",
721
+ "mutable": false,
722
+ "complexType": {
723
+ "original": "number",
724
+ "resolved": "number",
725
+ "references": {}
726
+ },
727
+ "required": false,
728
+ "optional": false,
729
+ "docs": {
730
+ "tags": [],
731
+ "text": "Maximum allowed width when resizable."
732
+ },
733
+ "getter": false,
734
+ "setter": false,
735
+ "reflect": false,
736
+ "attribute": "max-panel-width",
737
+ "defaultValue": "420"
738
+ },
739
+ "resizable": {
740
+ "type": "boolean",
741
+ "mutable": false,
742
+ "complexType": {
743
+ "original": "boolean",
744
+ "resolved": "boolean",
745
+ "references": {}
746
+ },
747
+ "required": false,
748
+ "optional": false,
749
+ "docs": {
750
+ "tags": [],
751
+ "text": "Allows users to resize the panel by dragging its edge."
752
+ },
753
+ "getter": false,
754
+ "setter": false,
755
+ "reflect": false,
756
+ "attribute": "resizable",
757
+ "defaultValue": "false"
758
+ },
759
+ "persistKey": {
760
+ "type": "string",
761
+ "mutable": false,
762
+ "complexType": {
763
+ "original": "string",
764
+ "resolved": "string",
765
+ "references": {}
766
+ },
767
+ "required": false,
768
+ "optional": true,
769
+ "docs": {
770
+ "tags": [],
771
+ "text": "When set, panel width + collapsed state are persisted in localStorage."
772
+ },
773
+ "getter": false,
774
+ "setter": false,
775
+ "reflect": false,
776
+ "attribute": "persist-key"
777
+ },
778
+ "showCloseButton": {
779
+ "type": "boolean",
780
+ "mutable": false,
781
+ "complexType": {
782
+ "original": "boolean",
783
+ "resolved": "boolean",
784
+ "references": {}
785
+ },
786
+ "required": false,
787
+ "optional": false,
788
+ "docs": {
789
+ "tags": [],
790
+ "text": "Show a close button inside the panel (primarily used in narrow overlay mode)."
791
+ },
792
+ "getter": false,
793
+ "setter": false,
794
+ "reflect": false,
795
+ "attribute": "show-close-button",
796
+ "defaultValue": "true"
797
+ },
798
+ "autoShowOnWide": {
799
+ "type": "boolean",
800
+ "mutable": false,
801
+ "complexType": {
802
+ "original": "boolean",
803
+ "resolved": "boolean",
804
+ "references": {}
805
+ },
806
+ "required": false,
807
+ "optional": false,
808
+ "docs": {
809
+ "tags": [],
810
+ "text": "When crossing to wide mode, automatically show the panel (collapsed=false)."
811
+ },
812
+ "getter": false,
813
+ "setter": false,
814
+ "reflect": false,
815
+ "attribute": "auto-show-on-wide",
816
+ "defaultValue": "true"
817
+ },
818
+ "autoHideOnNarrow": {
819
+ "type": "boolean",
820
+ "mutable": false,
821
+ "complexType": {
822
+ "original": "boolean",
823
+ "resolved": "boolean",
824
+ "references": {}
825
+ },
826
+ "required": false,
827
+ "optional": false,
828
+ "docs": {
829
+ "tags": [],
830
+ "text": "When crossing to narrow mode, automatically hide the panel (open=false)."
831
+ },
832
+ "getter": false,
833
+ "setter": false,
834
+ "reflect": false,
835
+ "attribute": "auto-hide-on-narrow",
836
+ "defaultValue": "true"
837
+ },
838
+ "panelLabel": {
839
+ "type": "string",
840
+ "mutable": false,
841
+ "complexType": {
842
+ "original": "string",
843
+ "resolved": "string",
844
+ "references": {}
845
+ },
846
+ "required": false,
847
+ "optional": false,
848
+ "docs": {
849
+ "tags": [],
850
+ "text": "Accessible label for the panel navigation region."
851
+ },
852
+ "getter": false,
853
+ "setter": false,
854
+ "reflect": false,
855
+ "attribute": "panel-label",
856
+ "defaultValue": "'Navigation'"
857
+ }
858
+ };
859
+ }
860
+ static get states() {
861
+ return {
862
+ "isNarrow": {},
863
+ "responsiveReady": {},
864
+ "overlayMounted": {},
865
+ "overlayVisible": {},
866
+ "currentWidthPx": {},
867
+ "resizing": {}
868
+ };
869
+ }
870
+ static get events() {
871
+ return [{
872
+ "method": "leSidePanelOpenChange",
873
+ "name": "leSidePanelOpenChange",
874
+ "bubbles": true,
875
+ "cancelable": true,
876
+ "composed": true,
877
+ "docs": {
878
+ "tags": [],
879
+ "text": ""
880
+ },
881
+ "complexType": {
882
+ "original": "{ open: boolean; panelId?: string }",
883
+ "resolved": "{ open: boolean; panelId?: string; }",
884
+ "references": {}
885
+ }
886
+ }, {
887
+ "method": "leSidePanelCollapsedChange",
888
+ "name": "leSidePanelCollapsedChange",
889
+ "bubbles": true,
890
+ "cancelable": true,
891
+ "composed": true,
892
+ "docs": {
893
+ "tags": [],
894
+ "text": ""
895
+ },
896
+ "complexType": {
897
+ "original": "{ collapsed: boolean; panelId?: string }",
898
+ "resolved": "{ collapsed: boolean; panelId?: string; }",
899
+ "references": {}
900
+ }
901
+ }, {
902
+ "method": "leSidePanelWidthChange",
903
+ "name": "leSidePanelWidthChange",
904
+ "bubbles": true,
905
+ "cancelable": true,
906
+ "composed": true,
907
+ "docs": {
908
+ "tags": [],
909
+ "text": ""
910
+ },
911
+ "complexType": {
912
+ "original": "{ width: number; panelId?: string }",
913
+ "resolved": "{ width: number; panelId?: string; }",
914
+ "references": {}
915
+ }
916
+ }];
917
+ }
918
+ static get elementRef() { return "el"; }
919
+ static get watchers() {
920
+ return [{
921
+ "propName": "panelWidth",
922
+ "methodName": "onPanelWidthChanged"
923
+ }, {
924
+ "propName": "collapsed",
925
+ "methodName": "onCollapsedChanged"
926
+ }, {
927
+ "propName": "open",
928
+ "methodName": "onOpenChanged"
929
+ }, {
930
+ "propName": "collapseAt",
931
+ "methodName": "onResponsivePropChanged"
932
+ }, {
933
+ "propName": "narrowBehavior",
934
+ "methodName": "onResponsivePropChanged"
935
+ }];
936
+ }
937
+ static get listeners() {
938
+ return [{
939
+ "name": "keydown",
940
+ "method": "onDocumentKeyDown",
941
+ "target": "document",
942
+ "capture": true,
943
+ "passive": false
944
+ }, {
945
+ "name": "leSidePanelRequestToggle",
946
+ "method": "onToggleRequest",
947
+ "target": "document",
948
+ "capture": false,
949
+ "passive": false
950
+ }];
951
+ }
952
+ }
953
+ //# sourceMappingURL=le-side-panel.js.map