le-kit 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LLM_CONTEXT.md +22 -0
  2. package/dist/cjs/le-bar_16.cjs.entry.js +945 -1257
  3. package/dist/cjs/le-box.cjs.entry.js +40 -88
  4. package/dist/cjs/le-breadcrumbs.cjs.entry.js +223 -0
  5. package/dist/cjs/le-card.cjs.entry.js +11 -11
  6. package/dist/cjs/le-code-input.cjs.entry.js +76 -110
  7. package/dist/cjs/le-combobox.cjs.entry.js +126 -153
  8. package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
  9. package/dist/cjs/le-kit.cjs.js +1 -1
  10. package/dist/cjs/le-multiselect.cjs.entry.js +149 -171
  11. package/dist/cjs/le-number-input.cjs.entry.js +89 -129
  12. package/dist/cjs/le-round-progress.cjs.entry.js +6 -11
  13. package/dist/cjs/le-segmented-control.cjs.entry.js +77 -87
  14. package/dist/cjs/le-side-panel-toggle.cjs.entry.js +59 -75
  15. package/dist/cjs/le-side-panel.cjs.entry.js +130 -137
  16. package/dist/cjs/le-stack.cjs.entry.js +38 -51
  17. package/dist/cjs/le-tab-bar.cjs.entry.js +80 -89
  18. package/dist/cjs/le-tab-panel.cjs.entry.js +21 -39
  19. package/dist/cjs/le-tab.cjs.entry.js +53 -91
  20. package/dist/cjs/le-tabs.cjs.entry.js +112 -122
  21. package/dist/cjs/le-tag.cjs.entry.js +23 -40
  22. package/dist/cjs/le-text.cjs.entry.js +131 -148
  23. package/dist/cjs/le-turntable.cjs.entry.js +17 -25
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/collection/collection-manifest.json +1 -0
  26. package/dist/collection/components/le-bar/le-bar.js +132 -139
  27. package/dist/collection/components/le-bar/le-bar.js.map +1 -1
  28. package/dist/collection/components/le-box/le-box.js +41 -88
  29. package/dist/collection/components/le-box/le-box.js.map +1 -1
  30. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.css +72 -0
  31. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js +372 -0
  32. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js.map +1 -0
  33. package/dist/collection/components/le-button/le-button.js +50 -79
  34. package/dist/collection/components/le-button/le-button.js.map +1 -1
  35. package/dist/collection/components/le-card/le-card.js +12 -11
  36. package/dist/collection/components/le-card/le-card.js.map +1 -1
  37. package/dist/collection/components/le-checkbox/le-checkbox.js +27 -42
  38. package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -1
  39. package/dist/collection/components/le-code-input/le-code-input.js +77 -110
  40. package/dist/collection/components/le-code-input/le-code-input.js.map +1 -1
  41. package/dist/collection/components/le-collapse/le-collapse.js +15 -14
  42. package/dist/collection/components/le-collapse/le-collapse.js.map +1 -1
  43. package/dist/collection/components/le-combobox/le-combobox.js +127 -153
  44. package/dist/collection/components/le-combobox/le-combobox.js.map +1 -1
  45. package/dist/collection/components/le-component/le-component.js +14 -38
  46. package/dist/collection/components/le-component/le-component.js.map +1 -1
  47. package/dist/collection/components/le-current-heading/le-current-heading.js +6 -5
  48. package/dist/collection/components/le-current-heading/le-current-heading.js.map +1 -1
  49. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +139 -165
  50. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js.map +1 -1
  51. package/dist/collection/components/le-header/le-header.js +22 -45
  52. package/dist/collection/components/le-header/le-header.js.map +1 -1
  53. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +1 -1
  54. package/dist/collection/components/le-icon/le-icon.js +14 -14
  55. package/dist/collection/components/le-icon/le-icon.js.map +1 -1
  56. package/dist/collection/components/le-multiselect/le-multiselect.js +150 -171
  57. package/dist/collection/components/le-multiselect/le-multiselect.js.map +1 -1
  58. package/dist/collection/components/le-navigation/le-navigation.js +118 -128
  59. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
  60. package/dist/collection/components/le-number-input/le-number-input.js +90 -129
  61. package/dist/collection/components/le-number-input/le-number-input.js.map +1 -1
  62. package/dist/collection/components/le-popover/le-popover.css +2 -1
  63. package/dist/collection/components/le-popover/le-popover.js +101 -126
  64. package/dist/collection/components/le-popover/le-popover.js.map +1 -1
  65. package/dist/collection/components/le-popup/le-popup.js +89 -115
  66. package/dist/collection/components/le-popup/le-popup.js.map +1 -1
  67. package/dist/collection/components/le-round-progress/le-round-progress.js +7 -12
  68. package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -1
  69. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +6 -7
  70. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js.map +1 -1
  71. package/dist/collection/components/le-segmented-control/le-segmented-control.js +78 -87
  72. package/dist/collection/components/le-segmented-control/le-segmented-control.js.map +1 -1
  73. package/dist/collection/components/le-select/le-select.js +88 -110
  74. package/dist/collection/components/le-select/le-select.js.map +1 -1
  75. package/dist/collection/components/le-side-panel/le-side-panel.css +10 -1
  76. package/dist/collection/components/le-side-panel/le-side-panel.js +131 -136
  77. package/dist/collection/components/le-side-panel/le-side-panel.js.map +1 -1
  78. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js +60 -75
  79. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js.map +1 -1
  80. package/dist/collection/components/le-slot/le-slot.js +96 -144
  81. package/dist/collection/components/le-slot/le-slot.js.map +1 -1
  82. package/dist/collection/components/le-stack/le-stack.js +39 -51
  83. package/dist/collection/components/le-stack/le-stack.js.map +1 -1
  84. package/dist/collection/components/le-string-input/le-string-input.js +41 -84
  85. package/dist/collection/components/le-string-input/le-string-input.js.map +1 -1
  86. package/dist/collection/components/le-tab/le-tab.js +54 -91
  87. package/dist/collection/components/le-tab/le-tab.js.map +1 -1
  88. package/dist/collection/components/le-tab-bar/le-tab-bar.js +81 -89
  89. package/dist/collection/components/le-tab-bar/le-tab-bar.js.map +1 -1
  90. package/dist/collection/components/le-tab-panel/le-tab-panel.js +22 -39
  91. package/dist/collection/components/le-tab-panel/le-tab-panel.js.map +1 -1
  92. package/dist/collection/components/le-tabs/le-tabs.js +113 -122
  93. package/dist/collection/components/le-tabs/le-tabs.js.map +1 -1
  94. package/dist/collection/components/le-tag/le-tag.js +25 -40
  95. package/dist/collection/components/le-tag/le-tag.js.map +1 -1
  96. package/dist/collection/components/le-text/le-text.js +132 -148
  97. package/dist/collection/components/le-text/le-text.js.map +1 -1
  98. package/dist/collection/components/le-turntable/le-turntable.js +18 -26
  99. package/dist/collection/components/le-turntable/le-turntable.js.map +1 -1
  100. package/dist/collection/dist/components/assets/custom-elements.json +973 -645
  101. package/dist/collection/dist/components/assets/icons/arrow-left.json +21 -0
  102. package/dist/collection/dist/components/assets/icons/arrow-right.json +21 -0
  103. package/dist/collection/dist/components/assets/icons/check.json +12 -0
  104. package/dist/collection/dist/components/assets/icons/chevron-down.json +1 -2
  105. package/dist/collection/dist/components/assets/icons/chevron-left.json +12 -0
  106. package/dist/collection/dist/components/assets/icons/chevron-right.json +12 -0
  107. package/dist/collection/dist/components/assets/icons/chevron-up.json +12 -0
  108. package/dist/components/assets/custom-elements.json +973 -645
  109. package/dist/components/assets/icons/arrow-left.json +21 -0
  110. package/dist/components/assets/icons/arrow-right.json +21 -0
  111. package/dist/components/assets/icons/check.json +12 -0
  112. package/dist/components/assets/icons/chevron-down.json +1 -2
  113. package/dist/components/assets/icons/chevron-left.json +12 -0
  114. package/dist/components/assets/icons/chevron-right.json +12 -0
  115. package/dist/components/assets/icons/chevron-up.json +12 -0
  116. package/dist/components/le-bar2.js +132 -140
  117. package/dist/components/le-bar2.js.map +1 -1
  118. package/dist/components/le-box.js +41 -89
  119. package/dist/components/le-box.js.map +1 -1
  120. package/dist/components/le-breadcrumbs.d.ts +11 -0
  121. package/dist/components/le-breadcrumbs.js +327 -0
  122. package/dist/components/le-breadcrumbs.js.map +1 -0
  123. package/dist/components/le-button2.js +405 -619
  124. package/dist/components/le-button2.js.map +1 -1
  125. package/dist/components/le-card.js +12 -12
  126. package/dist/components/le-card.js.map +1 -1
  127. package/dist/components/le-code-input.js +77 -111
  128. package/dist/components/le-code-input.js.map +1 -1
  129. package/dist/components/le-collapse2.js +15 -15
  130. package/dist/components/le-collapse2.js.map +1 -1
  131. package/dist/components/le-combobox.js +127 -154
  132. package/dist/components/le-combobox.js.map +1 -1
  133. package/dist/components/le-current-heading.js +6 -6
  134. package/dist/components/le-current-heading.js.map +1 -1
  135. package/dist/components/le-dropdown-base2.js +139 -166
  136. package/dist/components/le-dropdown-base2.js.map +1 -1
  137. package/dist/components/le-header-placeholder.js +1 -1
  138. package/dist/components/le-header.js +22 -46
  139. package/dist/components/le-header.js.map +1 -1
  140. package/dist/components/le-icon2.js +14 -15
  141. package/dist/components/le-icon2.js.map +1 -1
  142. package/dist/components/le-multiselect.js +150 -172
  143. package/dist/components/le-multiselect.js.map +1 -1
  144. package/dist/components/le-navigation.js +1 -494
  145. package/dist/components/le-navigation.js.map +1 -1
  146. package/dist/components/le-navigation2.js +488 -0
  147. package/dist/components/le-navigation2.js.map +1 -0
  148. package/dist/components/le-number-input.js +90 -130
  149. package/dist/components/le-number-input.js.map +1 -1
  150. package/dist/components/le-popover2.js +103 -128
  151. package/dist/components/le-popover2.js.map +1 -1
  152. package/dist/components/le-round-progress.js +7 -12
  153. package/dist/components/le-round-progress.js.map +1 -1
  154. package/dist/components/le-scroll-progress.js +6 -8
  155. package/dist/components/le-scroll-progress.js.map +1 -1
  156. package/dist/components/le-segmented-control.js +78 -88
  157. package/dist/components/le-segmented-control.js.map +1 -1
  158. package/dist/components/le-side-panel-toggle2.js +60 -76
  159. package/dist/components/le-side-panel-toggle2.js.map +1 -1
  160. package/dist/components/le-side-panel.js +133 -139
  161. package/dist/components/le-side-panel.js.map +1 -1
  162. package/dist/components/le-stack.js +39 -52
  163. package/dist/components/le-stack.js.map +1 -1
  164. package/dist/components/le-tab-bar.js +81 -90
  165. package/dist/components/le-tab-bar.js.map +1 -1
  166. package/dist/components/le-tab-panel.js +22 -40
  167. package/dist/components/le-tab-panel.js.map +1 -1
  168. package/dist/components/le-tab2.js +54 -92
  169. package/dist/components/le-tab2.js.map +1 -1
  170. package/dist/components/le-tabs.js +113 -123
  171. package/dist/components/le-tabs.js.map +1 -1
  172. package/dist/components/le-tag2.js +24 -41
  173. package/dist/components/le-tag2.js.map +1 -1
  174. package/dist/components/le-text.js +132 -149
  175. package/dist/components/le-text.js.map +1 -1
  176. package/dist/components/le-turntable.js +18 -26
  177. package/dist/components/le-turntable.js.map +1 -1
  178. package/dist/docs.json +294 -2
  179. package/dist/esm/le-bar_16.entry.js +946 -1258
  180. package/dist/esm/le-box.entry.js +41 -89
  181. package/dist/esm/le-box.entry.js.map +1 -1
  182. package/dist/esm/le-breadcrumbs.entry.js +221 -0
  183. package/dist/esm/le-breadcrumbs.entry.js.map +1 -0
  184. package/dist/esm/le-card.entry.js +12 -12
  185. package/dist/esm/le-card.entry.js.map +1 -1
  186. package/dist/esm/le-code-input.entry.js +77 -111
  187. package/dist/esm/le-code-input.entry.js.map +1 -1
  188. package/dist/esm/le-combobox.entry.js +127 -154
  189. package/dist/esm/le-combobox.entry.js.map +1 -1
  190. package/dist/esm/le-header-placeholder.entry.js +1 -1
  191. package/dist/esm/le-kit.js +1 -1
  192. package/dist/esm/le-multiselect.entry.js +150 -172
  193. package/dist/esm/le-multiselect.entry.js.map +1 -1
  194. package/dist/esm/le-number-input.entry.js +90 -130
  195. package/dist/esm/le-number-input.entry.js.map +1 -1
  196. package/dist/esm/le-round-progress.entry.js +7 -12
  197. package/dist/esm/le-round-progress.entry.js.map +1 -1
  198. package/dist/esm/le-segmented-control.entry.js +78 -88
  199. package/dist/esm/le-segmented-control.entry.js.map +1 -1
  200. package/dist/esm/le-side-panel-toggle.entry.js +60 -76
  201. package/dist/esm/le-side-panel-toggle.entry.js.map +1 -1
  202. package/dist/esm/le-side-panel.entry.js +131 -138
  203. package/dist/esm/le-side-panel.entry.js.map +1 -1
  204. package/dist/esm/le-stack.entry.js +39 -52
  205. package/dist/esm/le-stack.entry.js.map +1 -1
  206. package/dist/esm/le-tab-bar.entry.js +81 -90
  207. package/dist/esm/le-tab-bar.entry.js.map +1 -1
  208. package/dist/esm/le-tab-panel.entry.js +22 -40
  209. package/dist/esm/le-tab-panel.entry.js.map +1 -1
  210. package/dist/esm/le-tab.entry.js +54 -92
  211. package/dist/esm/le-tab.entry.js.map +1 -1
  212. package/dist/esm/le-tabs.entry.js +113 -123
  213. package/dist/esm/le-tabs.entry.js.map +1 -1
  214. package/dist/esm/le-tag.entry.js +23 -40
  215. package/dist/esm/le-tag.entry.js.map +1 -1
  216. package/dist/esm/le-text.entry.js +132 -149
  217. package/dist/esm/le-text.entry.js.map +1 -1
  218. package/dist/esm/le-turntable.entry.js +18 -26
  219. package/dist/esm/le-turntable.entry.js.map +1 -1
  220. package/dist/esm/loader.js +1 -1
  221. package/dist/le-kit/dist/components/assets/custom-elements.json +973 -645
  222. package/dist/le-kit/dist/components/assets/icons/arrow-left.json +21 -0
  223. package/dist/le-kit/dist/components/assets/icons/arrow-right.json +21 -0
  224. package/dist/le-kit/dist/components/assets/icons/check.json +12 -0
  225. package/dist/le-kit/dist/components/assets/icons/chevron-down.json +1 -2
  226. package/dist/le-kit/dist/components/assets/icons/chevron-left.json +12 -0
  227. package/dist/le-kit/dist/components/assets/icons/chevron-right.json +12 -0
  228. package/dist/le-kit/dist/components/assets/icons/chevron-up.json +12 -0
  229. package/dist/le-kit/le-kit.esm.js +1 -1
  230. package/dist/le-kit/p-3067b18f.entry.js +2 -0
  231. package/dist/le-kit/p-3067b18f.entry.js.map +1 -0
  232. package/dist/le-kit/p-34c4d97d.entry.js +2 -0
  233. package/dist/le-kit/p-34c4d97d.entry.js.map +1 -0
  234. package/dist/le-kit/p-45182541.entry.js +2 -0
  235. package/dist/le-kit/p-45182541.entry.js.map +1 -0
  236. package/dist/le-kit/p-52a41c96.entry.js +2 -0
  237. package/dist/le-kit/p-52a41c96.entry.js.map +1 -0
  238. package/dist/le-kit/p-55fb5dd2.entry.js +2 -0
  239. package/dist/le-kit/p-55fb5dd2.entry.js.map +1 -0
  240. package/dist/le-kit/{p-ab6c1def.entry.js → p-649025f4.entry.js} +2 -2
  241. package/dist/le-kit/p-649025f4.entry.js.map +1 -0
  242. package/dist/le-kit/p-67930309.entry.js +2 -0
  243. package/dist/le-kit/p-67930309.entry.js.map +1 -0
  244. package/dist/le-kit/p-6d222705.entry.js +2 -0
  245. package/dist/le-kit/p-6d222705.entry.js.map +1 -0
  246. package/dist/le-kit/p-8049e0c2.entry.js +2 -0
  247. package/dist/le-kit/p-8049e0c2.entry.js.map +1 -0
  248. package/dist/le-kit/p-884f57bd.entry.js +2 -0
  249. package/dist/le-kit/p-88c70f9d.entry.js +2 -0
  250. package/dist/le-kit/p-88c70f9d.entry.js.map +1 -0
  251. package/dist/le-kit/p-96610729.entry.js +2 -0
  252. package/dist/le-kit/p-96610729.entry.js.map +1 -0
  253. package/dist/le-kit/p-a34054e0.entry.js +2 -0
  254. package/dist/le-kit/p-a34054e0.entry.js.map +1 -0
  255. package/dist/le-kit/p-a388e46a.entry.js +2 -0
  256. package/dist/le-kit/p-a388e46a.entry.js.map +1 -0
  257. package/dist/le-kit/p-c0c53650.entry.js +2 -0
  258. package/dist/le-kit/p-c0c53650.entry.js.map +1 -0
  259. package/dist/le-kit/p-cbf17514.entry.js +2 -0
  260. package/dist/le-kit/p-cbf17514.entry.js.map +1 -0
  261. package/dist/le-kit/p-d934de74.entry.js +2 -0
  262. package/dist/le-kit/p-d934de74.entry.js.map +1 -0
  263. package/dist/le-kit/p-de72c8b5.entry.js +2 -0
  264. package/dist/le-kit/p-de72c8b5.entry.js.map +1 -0
  265. package/dist/le-kit/p-e3dd0f2a.entry.js +2 -0
  266. package/dist/le-kit/p-e3dd0f2a.entry.js.map +1 -0
  267. package/dist/le-kit/p-ee170967.entry.js +2 -0
  268. package/dist/le-kit/p-ee170967.entry.js.map +1 -0
  269. package/dist/le-kit/p-eedb2f75.entry.js +2 -0
  270. package/dist/le-kit/p-eedb2f75.entry.js.map +1 -0
  271. package/dist/types/components/le-breadcrumbs/le-breadcrumbs.d.ts +57 -0
  272. package/dist/types/components/le-side-panel/le-side-panel.d.ts +2 -0
  273. package/dist/types/components.d.ts +84 -0
  274. package/package.json +1 -1
  275. package/dist/collection/assets/icons/chevron-down.svg +0 -3
  276. package/dist/collection/dist/components/assets/icons/chevron-down.svg +0 -3
  277. package/dist/components/assets/icons/chevron-down.svg +0 -3
  278. package/dist/le-kit/dist/components/assets/icons/chevron-down.svg +0 -3
  279. package/dist/le-kit/p-221d379a.entry.js +0 -2
  280. package/dist/le-kit/p-221d379a.entry.js.map +0 -1
  281. package/dist/le-kit/p-24112ca3.entry.js +0 -2
  282. package/dist/le-kit/p-24112ca3.entry.js.map +0 -1
  283. package/dist/le-kit/p-2c6d080d.entry.js +0 -2
  284. package/dist/le-kit/p-2c6d080d.entry.js.map +0 -1
  285. package/dist/le-kit/p-46276e77.entry.js +0 -2
  286. package/dist/le-kit/p-46276e77.entry.js.map +0 -1
  287. package/dist/le-kit/p-516c8531.entry.js +0 -2
  288. package/dist/le-kit/p-6ae60ba5.entry.js +0 -2
  289. package/dist/le-kit/p-6ae60ba5.entry.js.map +0 -1
  290. package/dist/le-kit/p-6b69f9a2.entry.js +0 -2
  291. package/dist/le-kit/p-6b69f9a2.entry.js.map +0 -1
  292. package/dist/le-kit/p-6d14306f.entry.js +0 -2
  293. package/dist/le-kit/p-6d14306f.entry.js.map +0 -1
  294. package/dist/le-kit/p-7bcdf2d4.entry.js +0 -2
  295. package/dist/le-kit/p-7bcdf2d4.entry.js.map +0 -1
  296. package/dist/le-kit/p-7cf1e23c.entry.js +0 -2
  297. package/dist/le-kit/p-7cf1e23c.entry.js.map +0 -1
  298. package/dist/le-kit/p-85f2fd4d.entry.js +0 -2
  299. package/dist/le-kit/p-85f2fd4d.entry.js.map +0 -1
  300. package/dist/le-kit/p-98242429.entry.js +0 -2
  301. package/dist/le-kit/p-98242429.entry.js.map +0 -1
  302. package/dist/le-kit/p-ab6c1def.entry.js.map +0 -1
  303. package/dist/le-kit/p-ae4ead64.entry.js +0 -2
  304. package/dist/le-kit/p-ae4ead64.entry.js.map +0 -1
  305. package/dist/le-kit/p-b05d4511.entry.js +0 -2
  306. package/dist/le-kit/p-b05d4511.entry.js.map +0 -1
  307. package/dist/le-kit/p-b6ac02ff.entry.js +0 -2
  308. package/dist/le-kit/p-b6ac02ff.entry.js.map +0 -1
  309. package/dist/le-kit/p-c24769e2.entry.js +0 -2
  310. package/dist/le-kit/p-c24769e2.entry.js.map +0 -1
  311. package/dist/le-kit/p-dc0445ad.entry.js +0 -2
  312. package/dist/le-kit/p-dc0445ad.entry.js.map +0 -1
  313. package/dist/le-kit/p-eb5286f2.entry.js +0 -2
  314. package/dist/le-kit/p-eb5286f2.entry.js.map +0 -1
  315. package/dist/le-kit/p-f78b1ee6.entry.js +0 -2
  316. package/dist/le-kit/p-f78b1ee6.entry.js.map +0 -1
  317. /package/dist/le-kit/{p-516c8531.entry.js.map → p-884f57bd.entry.js.map} +0 -0
@@ -8,52 +8,82 @@ const LeSegmentedControl = class {
8
8
  constructor(hostRef) {
9
9
  index.registerInstance(this, hostRef);
10
10
  this.leChange = index.createEvent(this, "leChange");
11
+ /**
12
+ * Array of options for the segmented control.
13
+ */
14
+ this.options = [];
15
+ /**
16
+ * Size of the control.
17
+ * @allowedValues small | medium | large
18
+ */
19
+ this.size = 'medium';
20
+ /**
21
+ * Scroll behavior for overflowing tabs.
22
+ * @allowedValues auto | hidden | visible | scroll
23
+ */
24
+ this.overflow = 'auto';
25
+ /**
26
+ * Whether the control should take full width.
27
+ */
28
+ this.fullWidth = false;
29
+ /**
30
+ * Whether the control is disabled.
31
+ */
32
+ this.disabled = false;
33
+ /**
34
+ * Internal tab configurations (built from children or tabs prop)
35
+ */
36
+ this.segmentConfigs = [];
37
+ /**
38
+ * Internal state for focused index (keyboard navigation)
39
+ */
40
+ this.focusedIndex = 0;
41
+ /**
42
+ * Whether we're using declarative mode (le-tab children)
43
+ */
44
+ this.isDeclarativeMode = false;
45
+ this.handleClick = (option) => {
46
+ this.selectOption(option);
47
+ };
48
+ this.handleKeyDown = (event) => {
49
+ const { segmentConfigs } = this;
50
+ let newIndex = this.focusedIndex;
51
+ switch (event.key) {
52
+ case 'ArrowLeft':
53
+ event.preventDefault();
54
+ newIndex = this.findNextEnabled(-1);
55
+ break;
56
+ case 'ArrowRight':
57
+ event.preventDefault();
58
+ newIndex = this.findNextEnabled(1);
59
+ break;
60
+ case 'Home':
61
+ event.preventDefault();
62
+ newIndex = this.findFirstEnabled();
63
+ break;
64
+ case 'End':
65
+ event.preventDefault();
66
+ newIndex = this.findLastEnabled();
67
+ break;
68
+ case 'Enter':
69
+ case ' ':
70
+ event.preventDefault();
71
+ if (segmentConfigs[this.focusedIndex]) {
72
+ this.selectOption(segmentConfigs[this.focusedIndex]);
73
+ }
74
+ return;
75
+ default:
76
+ return;
77
+ }
78
+ if (newIndex !== this.focusedIndex) {
79
+ this.focusedIndex = newIndex;
80
+ this.focusSegment(newIndex);
81
+ if (segmentConfigs[newIndex]) {
82
+ this.selectOption(segmentConfigs[newIndex]);
83
+ }
84
+ }
85
+ };
11
86
  }
12
- get el() { return index.getElement(this); }
13
- containerRef;
14
- /**
15
- * Array of options for the segmented control.
16
- */
17
- options = [];
18
- /**
19
- * The value of the currently selected option.
20
- */
21
- value;
22
- /**
23
- * Size of the control.
24
- * @allowedValues small | medium | large
25
- */
26
- size = 'medium';
27
- /**
28
- * Scroll behavior for overflowing tabs.
29
- * @allowedValues auto | hidden | visible | scroll
30
- */
31
- overflow = 'auto';
32
- /**
33
- * Whether the control should take full width.
34
- */
35
- fullWidth = false;
36
- /**
37
- * Whether the control is disabled.
38
- */
39
- disabled = false;
40
- /**
41
- * Internal tab configurations (built from children or tabs prop)
42
- */
43
- segmentConfigs = [];
44
- /**
45
- * Internal state for focused index (keyboard navigation)
46
- */
47
- focusedIndex = 0;
48
- /**
49
- * Whether we're using declarative mode (le-tab children)
50
- */
51
- isDeclarativeMode = false;
52
- /**
53
- * Emitted when the selection changes.
54
- */
55
- leChange;
56
- mutationObserver;
57
87
  tabsChanged() {
58
88
  if (!this.isDeclarativeMode) {
59
89
  this.buildSegmentsConfigs();
@@ -151,47 +181,6 @@ const LeSegmentedControl = class {
151
181
  }
152
182
  this.leChange.emit({ value, option });
153
183
  }
154
- handleClick = (option) => {
155
- this.selectOption(option);
156
- };
157
- handleKeyDown = (event) => {
158
- const { segmentConfigs } = this;
159
- let newIndex = this.focusedIndex;
160
- switch (event.key) {
161
- case 'ArrowLeft':
162
- event.preventDefault();
163
- newIndex = this.findNextEnabled(-1);
164
- break;
165
- case 'ArrowRight':
166
- event.preventDefault();
167
- newIndex = this.findNextEnabled(1);
168
- break;
169
- case 'Home':
170
- event.preventDefault();
171
- newIndex = this.findFirstEnabled();
172
- break;
173
- case 'End':
174
- event.preventDefault();
175
- newIndex = this.findLastEnabled();
176
- break;
177
- case 'Enter':
178
- case ' ':
179
- event.preventDefault();
180
- if (segmentConfigs[this.focusedIndex]) {
181
- this.selectOption(segmentConfigs[this.focusedIndex]);
182
- }
183
- return;
184
- default:
185
- return;
186
- }
187
- if (newIndex !== this.focusedIndex) {
188
- this.focusedIndex = newIndex;
189
- this.focusSegment(newIndex);
190
- if (segmentConfigs[newIndex]) {
191
- this.selectOption(segmentConfigs[newIndex]);
192
- }
193
- }
194
- };
195
184
  findNextEnabled(direction) {
196
185
  const { segmentConfigs } = this;
197
186
  let index = this.focusedIndex;
@@ -228,13 +217,14 @@ const LeSegmentedControl = class {
228
217
  'full-width': fullWidth,
229
218
  'disabled': disabled,
230
219
  };
231
- return (index.h(index.Host, { key: 'dfe7d637e07af470756a57e8878e455c472a2790', class: `overflow-${this.overflow}` }, index.h("le-component", { key: '5ffa309951b8f509fe0b0db09a9273256ec5a1b5', component: "le-segmented-control" }, index.h("div", { key: 'a448e9be4011230c689a4bab5963f1588496c1ba', class: classes, ref: el => (this.containerRef = el), role: "radiogroup", part: "container", onKeyDown: this.handleKeyDown, tabIndex: 0 }, segmentConfigs.map(option => {
220
+ return (index.h(index.Host, { key: 'dd580b3e3f6ca9fc5d8316978f0fcd77832d562f', class: `overflow-${this.overflow}` }, index.h("le-component", { key: 'baf3bf0005cdb4678eac78b73f3c7140ba631159', component: "le-segmented-control" }, index.h("div", { key: 'bc78e64043731781fddb107321c22187314f20c0', class: classes, ref: el => (this.containerRef = el), role: "radiogroup", part: "container", onKeyDown: this.handleKeyDown, tabIndex: 0 }, segmentConfigs.map(option => {
232
221
  const optValue = this.getOptionValue(option);
233
222
  const isSelected = optValue === value;
234
223
  const isDisabled = option.disabled || disabled;
235
224
  return (index.h("le-tab", { key: optValue, class: "segment", role: "radio", variant: "enclosed", selected: isSelected, disabled: isDisabled, focusable: false, size: size, part: isSelected ? 'segment segment-active' : 'segment', "aria-checked": isSelected ? 'true' : 'false', "aria-disabled": isDisabled ? 'true' : undefined, onClick: () => this.handleClick(option), iconStart: option.iconStart, iconEnd: option.iconEnd }, index.h("span", { class: "segment-label" }, option.label)));
236
225
  })))));
237
226
  }
227
+ get el() { return index.getElement(this); }
238
228
  static get watchers() { return {
239
229
  "options": ["tabsChanged"]
240
230
  }; }
@@ -52,35 +52,64 @@ const LeSidePanelToggle = class {
52
52
  constructor(hostRef) {
53
53
  index.registerInstance(this, hostRef);
54
54
  this.leSidePanelRequestToggle = index.createEvent(this, "leSidePanelRequestToggle");
55
+ /** Action to emit. Default toggles the panel. */
56
+ this.action = 'toggle';
57
+ /** Disables the toggle. */
58
+ this.disabled = false;
59
+ this.variant = 'solid';
60
+ this.color = 'primary';
61
+ this.size = 'medium';
62
+ this.selected = false;
63
+ this.fullWidth = false;
64
+ this.type = 'button';
65
+ this.align = 'center';
66
+ this.onDocumentKeyDown = (ev) => {
67
+ if (this.disabled) {
68
+ return;
69
+ }
70
+ const spec = this.shortcutSpec;
71
+ if (!spec) {
72
+ return;
73
+ }
74
+ if (isEditableTarget(ev.target)) {
75
+ return;
76
+ }
77
+ const key = (ev.key || '').toLowerCase();
78
+ if (key !== spec.key) {
79
+ return;
80
+ }
81
+ if (!!ev.altKey !== spec.alt) {
82
+ return;
83
+ }
84
+ if (!!ev.ctrlKey !== spec.ctrl) {
85
+ return;
86
+ }
87
+ if (!!ev.metaKey !== spec.meta) {
88
+ return;
89
+ }
90
+ if (!!ev.shiftKey !== spec.shift) {
91
+ return;
92
+ }
93
+ ev.preventDefault();
94
+ this.emitRequest();
95
+ };
96
+ this.onPanelStateChange = (ev) => {
97
+ const detail = ev.detail || {};
98
+ const requestedId = this.getResolvedPanelId() || '';
99
+ const eventId = detail.panelId || '';
100
+ if (requestedId !== eventId) {
101
+ return;
102
+ }
103
+ if (typeof detail.open === 'boolean') {
104
+ this.expanded = detail.open;
105
+ this.syncAriaExpanded();
106
+ }
107
+ if (typeof detail.collapsed === 'boolean') {
108
+ this.expanded = !detail.collapsed;
109
+ this.syncAriaExpanded();
110
+ }
111
+ };
55
112
  }
56
- get el() { return index.getElement(this); }
57
- /** Optional id used to target a specific panel. */
58
- panelId;
59
- /** Action to emit. Default toggles the panel. */
60
- action = 'toggle';
61
- /** Optional keyboard shortcut like `Mod+B` or `Alt+N`. */
62
- shortcut;
63
- /** Disables the toggle. */
64
- disabled = false;
65
- // Pass-through props for le-button
66
- mode;
67
- variant = 'solid';
68
- color = 'primary';
69
- size = 'medium';
70
- selected = false;
71
- fullWidth = false;
72
- iconOnly;
73
- iconStart;
74
- iconEnd;
75
- type = 'button';
76
- href;
77
- target;
78
- align = 'center';
79
- leSidePanelRequestToggle;
80
- shortcutSpec;
81
- expanded;
82
- buttonEl;
83
- forwardedNodes;
84
113
  onShortcutChanged() {
85
114
  this.shortcutSpec = parseShortcut(this.shortcut);
86
115
  this.syncShortcutListener();
@@ -136,52 +165,6 @@ const LeSidePanelToggle = class {
136
165
  action: this.action,
137
166
  });
138
167
  }
139
- onDocumentKeyDown = (ev) => {
140
- if (this.disabled) {
141
- return;
142
- }
143
- const spec = this.shortcutSpec;
144
- if (!spec) {
145
- return;
146
- }
147
- if (isEditableTarget(ev.target)) {
148
- return;
149
- }
150
- const key = (ev.key || '').toLowerCase();
151
- if (key !== spec.key) {
152
- return;
153
- }
154
- if (!!ev.altKey !== spec.alt) {
155
- return;
156
- }
157
- if (!!ev.ctrlKey !== spec.ctrl) {
158
- return;
159
- }
160
- if (!!ev.metaKey !== spec.meta) {
161
- return;
162
- }
163
- if (!!ev.shiftKey !== spec.shift) {
164
- return;
165
- }
166
- ev.preventDefault();
167
- this.emitRequest();
168
- };
169
- onPanelStateChange = (ev) => {
170
- const detail = ev.detail || {};
171
- const requestedId = this.getResolvedPanelId() || '';
172
- const eventId = detail.panelId || '';
173
- if (requestedId !== eventId) {
174
- return;
175
- }
176
- if (typeof detail.open === 'boolean') {
177
- this.expanded = detail.open;
178
- this.syncAriaExpanded();
179
- }
180
- if (typeof detail.collapsed === 'boolean') {
181
- this.expanded = !detail.collapsed;
182
- this.syncAriaExpanded();
183
- }
184
- };
185
168
  syncForwardedNodesIntoButton() {
186
169
  const btn = this.buttonEl;
187
170
  if (!btn || !this.forwardedNodes || this.forwardedNodes.length === 0) {
@@ -218,8 +201,9 @@ const LeSidePanelToggle = class {
218
201
  }
219
202
  }
220
203
  render() {
221
- return (index.h("le-button", { key: '382be5b4b8c301dc1d5b8c2d8709bd83cfc08409', ref: el => (this.buttonEl = el), mode: this.mode, variant: this.variant, color: this.color, size: this.size, selected: this.selected, fullWidth: this.fullWidth, iconOnly: this.iconOnly, iconStart: this.iconStart, iconEnd: this.iconEnd, disabled: this.disabled, type: this.type, href: this.href, target: this.target, align: this.align, onClick: () => this.emitRequest() }));
204
+ return (index.h("le-button", { key: '172c8abec7d24a91974626d9bd083c7227400a2a', ref: el => (this.buttonEl = el), mode: this.mode, variant: this.variant, color: this.color, size: this.size, selected: this.selected, fullWidth: this.fullWidth, iconOnly: this.iconOnly, iconStart: this.iconStart, iconEnd: this.iconEnd, disabled: this.disabled, type: this.type, href: this.href, target: this.target, align: this.align, onClick: () => this.emitRequest() }));
222
205
  }
206
+ get el() { return index.getElement(this); }
223
207
  static get watchers() { return {
224
208
  "shortcut": ["onShortcutChanged"]
225
209
  }; }
@@ -2,8 +2,8 @@
2
2
 
3
3
  var index = require('./index-BzadfLTc.js');
4
4
 
5
- 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)),
6
- 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
+ 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.no-transition{transition:none !important}.inlinePanel .panel{transform:translateX(0);opacity:1;transition:transform var(--le-side-panel-transition, var(--le-transition-normal)),
6
+ opacity var(--le-side-panel-transition, var(--le-transition-normal))}.inlinePanel.no-transition .panel{transition:none !important}.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;margin:var(--le-side-panel-margin);height:100%;max-height:min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));width:calc(100% - (var(--le-side-panel-margin) * 2));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}}`;
7
7
 
8
8
  function clamp(value, min, max) {
9
9
  return Math.min(max, Math.max(min, value));
@@ -37,61 +37,116 @@ const LeSidePanel = class {
37
37
  this.leSidePanelOpenChange = index.createEvent(this, "leSidePanelOpenChange");
38
38
  this.leSidePanelCollapsedChange = index.createEvent(this, "leSidePanelCollapsedChange");
39
39
  this.leSidePanelWidthChange = index.createEvent(this, "leSidePanelWidthChange");
40
+ /** Which side the panel is attached to. */
41
+ this.side = 'start';
42
+ /** Behavior when in narrow mode. */
43
+ this.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
+ this.open = false;
50
+ /** Panel collapsed state for wide mode (fully hidden). */
51
+ this.collapsed = false;
52
+ /** Default panel width in pixels. */
53
+ this.panelWidth = 280;
54
+ /** Minimum allowed width when resizable. */
55
+ this.minPanelWidth = 220;
56
+ /** Maximum allowed width when resizable. */
57
+ this.maxPanelWidth = 420;
58
+ /** Allows users to resize the panel by dragging its edge. */
59
+ this.resizable = false;
60
+ /** Show a close button inside the panel (primarily used in narrow overlay mode). */
61
+ this.showCloseButton = true;
62
+ /** When crossing to wide mode, automatically show the panel (collapsed=false). */
63
+ this.autoShowOnWide = true;
64
+ /** When crossing to narrow mode, automatically hide the panel (open=false). */
65
+ this.autoHideOnNarrow = true;
66
+ /** Accessible label for the panel navigation region. */
67
+ this.panelLabel = 'Navigation';
68
+ this.isNarrow = false;
69
+ this.responsiveReady = false;
70
+ this.overlayMounted = false;
71
+ this.overlayVisible = false;
72
+ this.resizing = false;
73
+ this.suppressAnimation = false;
74
+ this.firstLayoutComplete = false;
75
+ this.onOverlayTransitionEnd = (ev) => {
76
+ if (ev.target !== this.overlayWrapEl) {
77
+ return;
78
+ }
79
+ if (ev.propertyName !== 'transform') {
80
+ return;
81
+ }
82
+ const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
83
+ if (!shouldUseOverlay) {
84
+ return;
85
+ }
86
+ if (!this.open && !this.overlayVisible) {
87
+ this.overlayMounted = false;
88
+ }
89
+ };
90
+ this.onOverlayPointerDown = (ev) => {
91
+ // Close on any click outside the panel.
92
+ const panel = this.panelEl;
93
+ if (!panel) {
94
+ return;
95
+ }
96
+ const path = ev.composedPath();
97
+ if (!path.includes(panel)) {
98
+ this.open = false;
99
+ }
100
+ };
101
+ this.startResizeDrag = (ev) => {
102
+ if (!this.resizable) {
103
+ return;
104
+ }
105
+ // No resizing if fully hidden.
106
+ if (!this.isNarrow && this.collapsed) {
107
+ return;
108
+ }
109
+ if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
110
+ return;
111
+ }
112
+ if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
113
+ return;
114
+ }
115
+ this.resizing = true;
116
+ this.dragPointerId = ev.pointerId;
117
+ this.dragStartX = ev.clientX;
118
+ this.dragStartWidth = this.currentWidthPx;
119
+ ev.currentTarget?.setPointerCapture?.(ev.pointerId);
120
+ window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
121
+ window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
122
+ window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
123
+ };
124
+ this.onResizeDragMove = (ev) => {
125
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
126
+ return;
127
+ }
128
+ ev.preventDefault();
129
+ const startX = this.dragStartX ?? ev.clientX;
130
+ const startWidth = this.dragStartWidth ?? this.currentWidthPx;
131
+ const delta = ev.clientX - startX;
132
+ const dir = this.side === 'start' ? 1 : -1;
133
+ const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
134
+ this.currentWidthPx = nextWidth;
135
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
136
+ };
137
+ this.onResizeDragEnd = (ev) => {
138
+ if (!this.resizing || this.dragPointerId !== ev.pointerId) {
139
+ return;
140
+ }
141
+ this.resizing = false;
142
+ this.dragPointerId = undefined;
143
+ this.dragStartX = undefined;
144
+ this.dragStartWidth = undefined;
145
+ this.teardownDragListeners();
146
+ this.persistState();
147
+ this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
148
+ };
40
149
  }
41
- get el() { return index.getElement(this); }
42
- /**
43
- * Optional id used to match toggle requests.
44
- * If set, the panel only responds to toggle events with the same `panelId`.
45
- */
46
- panelId;
47
- /** Which side the panel is attached to. */
48
- side = 'start';
49
- /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters "narrow" mode. */
50
- collapseAt;
51
- /** Behavior when in narrow mode. */
52
- narrowBehavior = 'overlay';
53
- /**
54
- * Panel open state for narrow mode.
55
- * - overlay: controls modal drawer visibility
56
- * - push: controls whether panel is shown (non-modal)
57
- */
58
- open = false;
59
- /** Panel collapsed state for wide mode (fully hidden). */
60
- collapsed = false;
61
- /** Default panel width in pixels. */
62
- panelWidth = 280;
63
- /** Minimum allowed width when resizable. */
64
- minPanelWidth = 220;
65
- /** Maximum allowed width when resizable. */
66
- maxPanelWidth = 420;
67
- /** Allows users to resize the panel by dragging its edge. */
68
- resizable = false;
69
- /** When set, panel width + collapsed state are persisted in localStorage. */
70
- persistKey;
71
- /** Show a close button inside the panel (primarily used in narrow overlay mode). */
72
- showCloseButton = true;
73
- /** When crossing to wide mode, automatically show the panel (collapsed=false). */
74
- autoShowOnWide = true;
75
- /** When crossing to narrow mode, automatically hide the panel (open=false). */
76
- autoHideOnNarrow = true;
77
- /** Accessible label for the panel navigation region. */
78
- panelLabel = 'Navigation';
79
- leSidePanelOpenChange;
80
- leSidePanelCollapsedChange;
81
- leSidePanelWidthChange;
82
- isNarrow = false;
83
- responsiveReady = false;
84
- overlayMounted = false;
85
- overlayVisible = false;
86
- currentWidthPx;
87
- resizing = false;
88
- resizeObserver;
89
- panelEl;
90
- overlayWrapEl;
91
- focusedBeforeOpen;
92
- dragPointerId;
93
- dragStartX;
94
- dragStartWidth;
95
150
  connectedCallback() {
96
151
  this.restorePersistedState();
97
152
  this.currentWidthPx = clamp(this.currentWidthPx || this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
@@ -144,7 +199,7 @@ const LeSidePanel = class {
144
199
  return;
145
200
  }
146
201
  if (!this.resizing) {
147
- this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
202
+ this.currentWidthPx = clamp(this.panelWidth || 280, this.minPanelWidth || 220, this.maxPanelWidth || 800);
148
203
  this.persistState();
149
204
  }
150
205
  }
@@ -298,6 +353,16 @@ const LeSidePanel = class {
298
353
  return;
299
354
  }
300
355
  this.responsiveReady = true;
356
+ // Suppress animation on the very first successful layout
357
+ if (!this.firstLayoutComplete) {
358
+ this.suppressAnimation = true;
359
+ this.firstLayoutComplete = true;
360
+ setTimeout(() => {
361
+ // We need a timeout to ensure the paint
362
+ // has happened without transition
363
+ this.suppressAnimation = false;
364
+ }, 1000);
365
+ }
301
366
  const nextIsNarrow = width < collapseAtPx;
302
367
  const prevIsNarrow = this.isNarrow;
303
368
  this.isNarrow = nextIsNarrow;
@@ -404,80 +469,6 @@ const LeSidePanel = class {
404
469
  }
405
470
  }
406
471
  }
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
472
  teardownDragListeners() {
482
473
  window.removeEventListener('pointermove', this.onResizeDragMove);
483
474
  window.removeEventListener('pointerup', this.onResizeDragEnd);
@@ -510,28 +501,30 @@ const LeSidePanel = class {
510
501
  const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;
511
502
  const showNarrowPushPanel = allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;
512
503
  const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;
513
- return (index.h("div", { key: '692aa465f1a1b8c40ec21d0780eb61d9cebdc6bf', class: {
504
+ return (index.h("div", { key: 'd4524327e7e13541b27c0fd13a5ec4c4605a4796', class: {
514
505
  host: true,
515
506
  narrow: this.isNarrow,
516
507
  wide: !this.isNarrow,
517
508
  overlay: isOverlay,
518
509
  push: !isOverlay,
519
510
  collapsed: !this.isNarrow && this.collapsed,
520
- }, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, index.h("div", { key: 'a01741c802b6eaa8f70bd9265e0b2a19e5cf29cf', class: {
511
+ }, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, index.h("div", { key: 'f3c174390306054397a9627cad446d99c183251b', class: {
521
512
  'layout': true,
522
513
  'has-panel': layoutHasInlinePanel,
523
514
  'start': this.side === 'start',
524
515
  'end': this.side === 'end',
525
- } }, index.h("div", { key: '8795da430749e8af45175166a51848ca9c673f06', class: {
526
- inlinePanel: true,
527
- hidden: !layoutHasInlinePanel,
528
- }, "aria-hidden": !layoutHasInlinePanel ? 'true' : null }, this.renderPanelInner({ renderPanelSlot: !isOverlay })), index.h("div", { key: '16ed86717a59b27b2bc96ee703b53a74a9963595', class: "content", part: "content", "aria-hidden": isModalOverlayOpen ? 'true' : null }, index.h("slot", { key: '445b23491194a96bbca4f7c7dc869dc0ba327daa' }))), allowPanel && isOverlay && this.overlayMounted ? (index.h("div", { class: { overlayRoot: true, visible: this.overlayVisible }, part: "scrim", role: "presentation", onPointerDown: this.onOverlayPointerDown, "aria-hidden": isModalOverlayOpen ? null : 'true' }, index.h("div", { class: {
516
+ } }, index.h("div", { key: 'b679883619cbe69bac251cd5f246634f48ddffdf', class: {
517
+ 'inlinePanel': true,
518
+ 'hidden': !layoutHasInlinePanel,
519
+ 'no-transition': this.suppressAnimation,
520
+ }, "aria-hidden": !layoutHasInlinePanel ? 'true' : null }, this.renderPanelInner({ renderPanelSlot: !isOverlay })), index.h("div", { key: 'a7a3b2ee5001c5cf550becd872dc621095fff877', class: "content", part: "content", "aria-hidden": isModalOverlayOpen ? 'true' : null }, index.h("slot", { key: '60ea6042d270ae9dd887034fc44da4fb91e394ec' }))), allowPanel && isOverlay && this.overlayMounted ? (index.h("div", { class: { overlayRoot: true, visible: this.overlayVisible }, part: "scrim", role: "presentation", onPointerDown: this.onOverlayPointerDown, "aria-hidden": isModalOverlayOpen ? null : 'true' }, index.h("div", { class: {
529
521
  overlayPanelWrap: true,
530
522
  visible: this.overlayVisible,
531
523
  start: this.side === 'start',
532
524
  end: this.side === 'end',
533
525
  }, part: "overlay", ref: el => (this.overlayWrapEl = el), onTransitionEnd: this.onOverlayTransitionEnd, role: "dialog", "aria-modal": "true" }, this.renderPanelInner({ renderPanelSlot: true })))) : null));
534
526
  }
527
+ get el() { return index.getElement(this); }
535
528
  static get watchers() { return {
536
529
  "panelWidth": ["onPanelWidthChanged"],
537
530
  "collapsed": ["onCollapsedChanged"],