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.
- package/LLM_CONTEXT.md +22 -0
- package/dist/cjs/le-bar_16.cjs.entry.js +945 -1257
- package/dist/cjs/le-box.cjs.entry.js +40 -88
- package/dist/cjs/le-breadcrumbs.cjs.entry.js +223 -0
- package/dist/cjs/le-card.cjs.entry.js +11 -11
- package/dist/cjs/le-code-input.cjs.entry.js +76 -110
- package/dist/cjs/le-combobox.cjs.entry.js +126 -153
- package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
- package/dist/cjs/le-kit.cjs.js +1 -1
- package/dist/cjs/le-multiselect.cjs.entry.js +149 -171
- package/dist/cjs/le-number-input.cjs.entry.js +89 -129
- package/dist/cjs/le-round-progress.cjs.entry.js +6 -11
- package/dist/cjs/le-segmented-control.cjs.entry.js +77 -87
- package/dist/cjs/le-side-panel-toggle.cjs.entry.js +59 -75
- package/dist/cjs/le-side-panel.cjs.entry.js +130 -137
- package/dist/cjs/le-stack.cjs.entry.js +38 -51
- package/dist/cjs/le-tab-bar.cjs.entry.js +80 -89
- package/dist/cjs/le-tab-panel.cjs.entry.js +21 -39
- package/dist/cjs/le-tab.cjs.entry.js +53 -91
- package/dist/cjs/le-tabs.cjs.entry.js +112 -122
- package/dist/cjs/le-tag.cjs.entry.js +23 -40
- package/dist/cjs/le-text.cjs.entry.js +131 -148
- package/dist/cjs/le-turntable.cjs.entry.js +17 -25
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/le-bar/le-bar.js +132 -139
- package/dist/collection/components/le-bar/le-bar.js.map +1 -1
- package/dist/collection/components/le-box/le-box.js +41 -88
- package/dist/collection/components/le-box/le-box.js.map +1 -1
- package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.css +72 -0
- package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js +372 -0
- package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js.map +1 -0
- package/dist/collection/components/le-button/le-button.js +50 -79
- package/dist/collection/components/le-button/le-button.js.map +1 -1
- package/dist/collection/components/le-card/le-card.js +12 -11
- package/dist/collection/components/le-card/le-card.js.map +1 -1
- package/dist/collection/components/le-checkbox/le-checkbox.js +27 -42
- package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -1
- package/dist/collection/components/le-code-input/le-code-input.js +77 -110
- package/dist/collection/components/le-code-input/le-code-input.js.map +1 -1
- package/dist/collection/components/le-collapse/le-collapse.js +15 -14
- package/dist/collection/components/le-collapse/le-collapse.js.map +1 -1
- package/dist/collection/components/le-combobox/le-combobox.js +127 -153
- package/dist/collection/components/le-combobox/le-combobox.js.map +1 -1
- package/dist/collection/components/le-component/le-component.js +14 -38
- package/dist/collection/components/le-component/le-component.js.map +1 -1
- package/dist/collection/components/le-current-heading/le-current-heading.js +6 -5
- package/dist/collection/components/le-current-heading/le-current-heading.js.map +1 -1
- package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +139 -165
- package/dist/collection/components/le-dropdown-base/le-dropdown-base.js.map +1 -1
- package/dist/collection/components/le-header/le-header.js +22 -45
- package/dist/collection/components/le-header/le-header.js.map +1 -1
- package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +1 -1
- package/dist/collection/components/le-icon/le-icon.js +14 -14
- package/dist/collection/components/le-icon/le-icon.js.map +1 -1
- package/dist/collection/components/le-multiselect/le-multiselect.js +150 -171
- package/dist/collection/components/le-multiselect/le-multiselect.js.map +1 -1
- package/dist/collection/components/le-navigation/le-navigation.js +118 -128
- package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
- package/dist/collection/components/le-number-input/le-number-input.js +90 -129
- package/dist/collection/components/le-number-input/le-number-input.js.map +1 -1
- package/dist/collection/components/le-popover/le-popover.css +2 -1
- package/dist/collection/components/le-popover/le-popover.js +101 -126
- package/dist/collection/components/le-popover/le-popover.js.map +1 -1
- package/dist/collection/components/le-popup/le-popup.js +89 -115
- package/dist/collection/components/le-popup/le-popup.js.map +1 -1
- package/dist/collection/components/le-round-progress/le-round-progress.js +7 -12
- package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -1
- package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +6 -7
- package/dist/collection/components/le-scroll-progress/le-scroll-progress.js.map +1 -1
- package/dist/collection/components/le-segmented-control/le-segmented-control.js +78 -87
- package/dist/collection/components/le-segmented-control/le-segmented-control.js.map +1 -1
- package/dist/collection/components/le-select/le-select.js +88 -110
- package/dist/collection/components/le-select/le-select.js.map +1 -1
- package/dist/collection/components/le-side-panel/le-side-panel.css +10 -1
- package/dist/collection/components/le-side-panel/le-side-panel.js +131 -136
- package/dist/collection/components/le-side-panel/le-side-panel.js.map +1 -1
- package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js +60 -75
- package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js.map +1 -1
- package/dist/collection/components/le-slot/le-slot.js +96 -144
- package/dist/collection/components/le-slot/le-slot.js.map +1 -1
- package/dist/collection/components/le-stack/le-stack.js +39 -51
- package/dist/collection/components/le-stack/le-stack.js.map +1 -1
- package/dist/collection/components/le-string-input/le-string-input.js +41 -84
- package/dist/collection/components/le-string-input/le-string-input.js.map +1 -1
- package/dist/collection/components/le-tab/le-tab.js +54 -91
- package/dist/collection/components/le-tab/le-tab.js.map +1 -1
- package/dist/collection/components/le-tab-bar/le-tab-bar.js +81 -89
- package/dist/collection/components/le-tab-bar/le-tab-bar.js.map +1 -1
- package/dist/collection/components/le-tab-panel/le-tab-panel.js +22 -39
- package/dist/collection/components/le-tab-panel/le-tab-panel.js.map +1 -1
- package/dist/collection/components/le-tabs/le-tabs.js +113 -122
- package/dist/collection/components/le-tabs/le-tabs.js.map +1 -1
- package/dist/collection/components/le-tag/le-tag.js +25 -40
- package/dist/collection/components/le-tag/le-tag.js.map +1 -1
- package/dist/collection/components/le-text/le-text.js +132 -148
- package/dist/collection/components/le-text/le-text.js.map +1 -1
- package/dist/collection/components/le-turntable/le-turntable.js +18 -26
- package/dist/collection/components/le-turntable/le-turntable.js.map +1 -1
- package/dist/collection/dist/components/assets/custom-elements.json +973 -645
- package/dist/collection/dist/components/assets/icons/arrow-left.json +21 -0
- package/dist/collection/dist/components/assets/icons/arrow-right.json +21 -0
- package/dist/collection/dist/components/assets/icons/check.json +12 -0
- package/dist/collection/dist/components/assets/icons/chevron-down.json +1 -2
- package/dist/collection/dist/components/assets/icons/chevron-left.json +12 -0
- package/dist/collection/dist/components/assets/icons/chevron-right.json +12 -0
- package/dist/collection/dist/components/assets/icons/chevron-up.json +12 -0
- package/dist/components/assets/custom-elements.json +973 -645
- package/dist/components/assets/icons/arrow-left.json +21 -0
- package/dist/components/assets/icons/arrow-right.json +21 -0
- package/dist/components/assets/icons/check.json +12 -0
- package/dist/components/assets/icons/chevron-down.json +1 -2
- package/dist/components/assets/icons/chevron-left.json +12 -0
- package/dist/components/assets/icons/chevron-right.json +12 -0
- package/dist/components/assets/icons/chevron-up.json +12 -0
- package/dist/components/le-bar2.js +132 -140
- package/dist/components/le-bar2.js.map +1 -1
- package/dist/components/le-box.js +41 -89
- package/dist/components/le-box.js.map +1 -1
- package/dist/components/le-breadcrumbs.d.ts +11 -0
- package/dist/components/le-breadcrumbs.js +327 -0
- package/dist/components/le-breadcrumbs.js.map +1 -0
- package/dist/components/le-button2.js +405 -619
- package/dist/components/le-button2.js.map +1 -1
- package/dist/components/le-card.js +12 -12
- package/dist/components/le-card.js.map +1 -1
- package/dist/components/le-code-input.js +77 -111
- package/dist/components/le-code-input.js.map +1 -1
- package/dist/components/le-collapse2.js +15 -15
- package/dist/components/le-collapse2.js.map +1 -1
- package/dist/components/le-combobox.js +127 -154
- package/dist/components/le-combobox.js.map +1 -1
- package/dist/components/le-current-heading.js +6 -6
- package/dist/components/le-current-heading.js.map +1 -1
- package/dist/components/le-dropdown-base2.js +139 -166
- package/dist/components/le-dropdown-base2.js.map +1 -1
- package/dist/components/le-header-placeholder.js +1 -1
- package/dist/components/le-header.js +22 -46
- package/dist/components/le-header.js.map +1 -1
- package/dist/components/le-icon2.js +14 -15
- package/dist/components/le-icon2.js.map +1 -1
- package/dist/components/le-multiselect.js +150 -172
- package/dist/components/le-multiselect.js.map +1 -1
- package/dist/components/le-navigation.js +1 -494
- package/dist/components/le-navigation.js.map +1 -1
- package/dist/components/le-navigation2.js +488 -0
- package/dist/components/le-navigation2.js.map +1 -0
- package/dist/components/le-number-input.js +90 -130
- package/dist/components/le-number-input.js.map +1 -1
- package/dist/components/le-popover2.js +103 -128
- package/dist/components/le-popover2.js.map +1 -1
- package/dist/components/le-round-progress.js +7 -12
- package/dist/components/le-round-progress.js.map +1 -1
- package/dist/components/le-scroll-progress.js +6 -8
- package/dist/components/le-scroll-progress.js.map +1 -1
- package/dist/components/le-segmented-control.js +78 -88
- package/dist/components/le-segmented-control.js.map +1 -1
- package/dist/components/le-side-panel-toggle2.js +60 -76
- package/dist/components/le-side-panel-toggle2.js.map +1 -1
- package/dist/components/le-side-panel.js +133 -139
- package/dist/components/le-side-panel.js.map +1 -1
- package/dist/components/le-stack.js +39 -52
- package/dist/components/le-stack.js.map +1 -1
- package/dist/components/le-tab-bar.js +81 -90
- package/dist/components/le-tab-bar.js.map +1 -1
- package/dist/components/le-tab-panel.js +22 -40
- package/dist/components/le-tab-panel.js.map +1 -1
- package/dist/components/le-tab2.js +54 -92
- package/dist/components/le-tab2.js.map +1 -1
- package/dist/components/le-tabs.js +113 -123
- package/dist/components/le-tabs.js.map +1 -1
- package/dist/components/le-tag2.js +24 -41
- package/dist/components/le-tag2.js.map +1 -1
- package/dist/components/le-text.js +132 -149
- package/dist/components/le-text.js.map +1 -1
- package/dist/components/le-turntable.js +18 -26
- package/dist/components/le-turntable.js.map +1 -1
- package/dist/docs.json +294 -2
- package/dist/esm/le-bar_16.entry.js +946 -1258
- package/dist/esm/le-box.entry.js +41 -89
- package/dist/esm/le-box.entry.js.map +1 -1
- package/dist/esm/le-breadcrumbs.entry.js +221 -0
- package/dist/esm/le-breadcrumbs.entry.js.map +1 -0
- package/dist/esm/le-card.entry.js +12 -12
- package/dist/esm/le-card.entry.js.map +1 -1
- package/dist/esm/le-code-input.entry.js +77 -111
- package/dist/esm/le-code-input.entry.js.map +1 -1
- package/dist/esm/le-combobox.entry.js +127 -154
- package/dist/esm/le-combobox.entry.js.map +1 -1
- package/dist/esm/le-header-placeholder.entry.js +1 -1
- package/dist/esm/le-kit.js +1 -1
- package/dist/esm/le-multiselect.entry.js +150 -172
- package/dist/esm/le-multiselect.entry.js.map +1 -1
- package/dist/esm/le-number-input.entry.js +90 -130
- package/dist/esm/le-number-input.entry.js.map +1 -1
- package/dist/esm/le-round-progress.entry.js +7 -12
- package/dist/esm/le-round-progress.entry.js.map +1 -1
- package/dist/esm/le-segmented-control.entry.js +78 -88
- package/dist/esm/le-segmented-control.entry.js.map +1 -1
- package/dist/esm/le-side-panel-toggle.entry.js +60 -76
- package/dist/esm/le-side-panel-toggle.entry.js.map +1 -1
- package/dist/esm/le-side-panel.entry.js +131 -138
- package/dist/esm/le-side-panel.entry.js.map +1 -1
- package/dist/esm/le-stack.entry.js +39 -52
- package/dist/esm/le-stack.entry.js.map +1 -1
- package/dist/esm/le-tab-bar.entry.js +81 -90
- package/dist/esm/le-tab-bar.entry.js.map +1 -1
- package/dist/esm/le-tab-panel.entry.js +22 -40
- package/dist/esm/le-tab-panel.entry.js.map +1 -1
- package/dist/esm/le-tab.entry.js +54 -92
- package/dist/esm/le-tab.entry.js.map +1 -1
- package/dist/esm/le-tabs.entry.js +113 -123
- package/dist/esm/le-tabs.entry.js.map +1 -1
- package/dist/esm/le-tag.entry.js +23 -40
- package/dist/esm/le-tag.entry.js.map +1 -1
- package/dist/esm/le-text.entry.js +132 -149
- package/dist/esm/le-text.entry.js.map +1 -1
- package/dist/esm/le-turntable.entry.js +18 -26
- package/dist/esm/le-turntable.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/le-kit/dist/components/assets/custom-elements.json +973 -645
- package/dist/le-kit/dist/components/assets/icons/arrow-left.json +21 -0
- package/dist/le-kit/dist/components/assets/icons/arrow-right.json +21 -0
- package/dist/le-kit/dist/components/assets/icons/check.json +12 -0
- package/dist/le-kit/dist/components/assets/icons/chevron-down.json +1 -2
- package/dist/le-kit/dist/components/assets/icons/chevron-left.json +12 -0
- package/dist/le-kit/dist/components/assets/icons/chevron-right.json +12 -0
- package/dist/le-kit/dist/components/assets/icons/chevron-up.json +12 -0
- package/dist/le-kit/le-kit.esm.js +1 -1
- package/dist/le-kit/p-3067b18f.entry.js +2 -0
- package/dist/le-kit/p-3067b18f.entry.js.map +1 -0
- package/dist/le-kit/p-34c4d97d.entry.js +2 -0
- package/dist/le-kit/p-34c4d97d.entry.js.map +1 -0
- package/dist/le-kit/p-45182541.entry.js +2 -0
- package/dist/le-kit/p-45182541.entry.js.map +1 -0
- package/dist/le-kit/p-52a41c96.entry.js +2 -0
- package/dist/le-kit/p-52a41c96.entry.js.map +1 -0
- package/dist/le-kit/p-55fb5dd2.entry.js +2 -0
- package/dist/le-kit/p-55fb5dd2.entry.js.map +1 -0
- package/dist/le-kit/{p-ab6c1def.entry.js → p-649025f4.entry.js} +2 -2
- package/dist/le-kit/p-649025f4.entry.js.map +1 -0
- package/dist/le-kit/p-67930309.entry.js +2 -0
- package/dist/le-kit/p-67930309.entry.js.map +1 -0
- package/dist/le-kit/p-6d222705.entry.js +2 -0
- package/dist/le-kit/p-6d222705.entry.js.map +1 -0
- package/dist/le-kit/p-8049e0c2.entry.js +2 -0
- package/dist/le-kit/p-8049e0c2.entry.js.map +1 -0
- package/dist/le-kit/p-884f57bd.entry.js +2 -0
- package/dist/le-kit/p-88c70f9d.entry.js +2 -0
- package/dist/le-kit/p-88c70f9d.entry.js.map +1 -0
- package/dist/le-kit/p-96610729.entry.js +2 -0
- package/dist/le-kit/p-96610729.entry.js.map +1 -0
- package/dist/le-kit/p-a34054e0.entry.js +2 -0
- package/dist/le-kit/p-a34054e0.entry.js.map +1 -0
- package/dist/le-kit/p-a388e46a.entry.js +2 -0
- package/dist/le-kit/p-a388e46a.entry.js.map +1 -0
- package/dist/le-kit/p-c0c53650.entry.js +2 -0
- package/dist/le-kit/p-c0c53650.entry.js.map +1 -0
- package/dist/le-kit/p-cbf17514.entry.js +2 -0
- package/dist/le-kit/p-cbf17514.entry.js.map +1 -0
- package/dist/le-kit/p-d934de74.entry.js +2 -0
- package/dist/le-kit/p-d934de74.entry.js.map +1 -0
- package/dist/le-kit/p-de72c8b5.entry.js +2 -0
- package/dist/le-kit/p-de72c8b5.entry.js.map +1 -0
- package/dist/le-kit/p-e3dd0f2a.entry.js +2 -0
- package/dist/le-kit/p-e3dd0f2a.entry.js.map +1 -0
- package/dist/le-kit/p-ee170967.entry.js +2 -0
- package/dist/le-kit/p-ee170967.entry.js.map +1 -0
- package/dist/le-kit/p-eedb2f75.entry.js +2 -0
- package/dist/le-kit/p-eedb2f75.entry.js.map +1 -0
- package/dist/types/components/le-breadcrumbs/le-breadcrumbs.d.ts +57 -0
- package/dist/types/components/le-side-panel/le-side-panel.d.ts +2 -0
- package/dist/types/components.d.ts +84 -0
- package/package.json +1 -1
- package/dist/collection/assets/icons/chevron-down.svg +0 -3
- package/dist/collection/dist/components/assets/icons/chevron-down.svg +0 -3
- package/dist/components/assets/icons/chevron-down.svg +0 -3
- package/dist/le-kit/dist/components/assets/icons/chevron-down.svg +0 -3
- package/dist/le-kit/p-221d379a.entry.js +0 -2
- package/dist/le-kit/p-221d379a.entry.js.map +0 -1
- package/dist/le-kit/p-24112ca3.entry.js +0 -2
- package/dist/le-kit/p-24112ca3.entry.js.map +0 -1
- package/dist/le-kit/p-2c6d080d.entry.js +0 -2
- package/dist/le-kit/p-2c6d080d.entry.js.map +0 -1
- package/dist/le-kit/p-46276e77.entry.js +0 -2
- package/dist/le-kit/p-46276e77.entry.js.map +0 -1
- package/dist/le-kit/p-516c8531.entry.js +0 -2
- package/dist/le-kit/p-6ae60ba5.entry.js +0 -2
- package/dist/le-kit/p-6ae60ba5.entry.js.map +0 -1
- package/dist/le-kit/p-6b69f9a2.entry.js +0 -2
- package/dist/le-kit/p-6b69f9a2.entry.js.map +0 -1
- package/dist/le-kit/p-6d14306f.entry.js +0 -2
- package/dist/le-kit/p-6d14306f.entry.js.map +0 -1
- package/dist/le-kit/p-7bcdf2d4.entry.js +0 -2
- package/dist/le-kit/p-7bcdf2d4.entry.js.map +0 -1
- package/dist/le-kit/p-7cf1e23c.entry.js +0 -2
- package/dist/le-kit/p-7cf1e23c.entry.js.map +0 -1
- package/dist/le-kit/p-85f2fd4d.entry.js +0 -2
- package/dist/le-kit/p-85f2fd4d.entry.js.map +0 -1
- package/dist/le-kit/p-98242429.entry.js +0 -2
- package/dist/le-kit/p-98242429.entry.js.map +0 -1
- package/dist/le-kit/p-ab6c1def.entry.js.map +0 -1
- package/dist/le-kit/p-ae4ead64.entry.js +0 -2
- package/dist/le-kit/p-ae4ead64.entry.js.map +0 -1
- package/dist/le-kit/p-b05d4511.entry.js +0 -2
- package/dist/le-kit/p-b05d4511.entry.js.map +0 -1
- package/dist/le-kit/p-b6ac02ff.entry.js +0 -2
- package/dist/le-kit/p-b6ac02ff.entry.js.map +0 -1
- package/dist/le-kit/p-c24769e2.entry.js +0 -2
- package/dist/le-kit/p-c24769e2.entry.js.map +0 -1
- package/dist/le-kit/p-dc0445ad.entry.js +0 -2
- package/dist/le-kit/p-dc0445ad.entry.js.map +0 -1
- package/dist/le-kit/p-eb5286f2.entry.js +0 -2
- package/dist/le-kit/p-eb5286f2.entry.js.map +0 -1
- package/dist/le-kit/p-f78b1ee6.entry.js +0 -2
- package/dist/le-kit/p-f78b1ee6.entry.js.map +0 -1
- /package/dist/le-kit/{p-516c8531.entry.js.map → p-884f57bd.entry.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as registerInstance, c as createEvent, a as getElement
|
|
1
|
+
import { r as registerInstance, c as createEvent, h, a as getElement } from './index-DFTm5BqT.js';
|
|
2
2
|
|
|
3
|
-
const leSidePanelCss = () => `:host{display:block;height:100%;--le-side-panel-width:280px;--le-side-panel-margin:0px;--le-side-panel-backdrop:var(--le-color-backdrop);--le-side-panel-border-radius:var(--le-radius-lg)}.host{position:relative;height:100%;min-height:0}.layout{display:flex;align-items:stretch;min-width:0;height:100%;min-height:0}.layout.start{flex-direction:row}.layout.end{flex-direction:row-reverse}.inlinePanel{flex:0 0 auto;width:var(--le-side-panel-width);min-width:0;height:100%;overflow:hidden;transition:width var(--le-side-panel-transition, var(--le-transition-normal))}.inlinePanel.hidden{width:0}.inlinePanel .panel{transform:translateX(0);opacity:1;transition:transform var(--le-side-panel-transition, var(--le-transition-normal)),
|
|
4
|
-
opacity var(--le-side-panel-transition, var(--le-transition-normal))}.layout.start .inlinePanel.hidden .panel{transform:translateX(-100%);opacity:0;pointer-events:none}.layout.end .inlinePanel.hidden .panel{transform:translateX(100%);opacity:0;pointer-events:none}.content{flex:1 1 auto;min-width:0;height:100%;min-height:0}.panel{position:relative;height:100%;max-height:min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));
|
|
3
|
+
const leSidePanelCss = () => `:host{display:block;height:100%;--le-side-panel-width:280px;--le-side-panel-margin:0px;--le-side-panel-backdrop:var(--le-color-backdrop);--le-side-panel-border-radius:var(--le-radius-lg)}.host{position:relative;height:100%;min-height:0}.layout{display:flex;align-items:stretch;min-width:0;height:100%;min-height:0}.layout.start{flex-direction:row}.layout.end{flex-direction:row-reverse}.inlinePanel{flex:0 0 auto;width:var(--le-side-panel-width);min-width:0;height:100%;overflow:hidden;transition:width var(--le-side-panel-transition, var(--le-transition-normal))}.inlinePanel.hidden{width:0}.inlinePanel.no-transition{transition:none !important}.inlinePanel .panel{transform:translateX(0);opacity:1;transition:transform var(--le-side-panel-transition, var(--le-transition-normal)),
|
|
4
|
+
opacity var(--le-side-panel-transition, var(--le-transition-normal))}.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}}`;
|
|
5
5
|
|
|
6
6
|
function clamp(value, min, max) {
|
|
7
7
|
return Math.min(max, Math.max(min, value));
|
|
@@ -35,61 +35,116 @@ const LeSidePanel = class {
|
|
|
35
35
|
this.leSidePanelOpenChange = createEvent(this, "leSidePanelOpenChange");
|
|
36
36
|
this.leSidePanelCollapsedChange = createEvent(this, "leSidePanelCollapsedChange");
|
|
37
37
|
this.leSidePanelWidthChange = createEvent(this, "leSidePanelWidthChange");
|
|
38
|
+
/** Which side the panel is attached to. */
|
|
39
|
+
this.side = 'start';
|
|
40
|
+
/** Behavior when in narrow mode. */
|
|
41
|
+
this.narrowBehavior = 'overlay';
|
|
42
|
+
/**
|
|
43
|
+
* Panel open state for narrow mode.
|
|
44
|
+
* - overlay: controls modal drawer visibility
|
|
45
|
+
* - push: controls whether panel is shown (non-modal)
|
|
46
|
+
*/
|
|
47
|
+
this.open = false;
|
|
48
|
+
/** Panel collapsed state for wide mode (fully hidden). */
|
|
49
|
+
this.collapsed = false;
|
|
50
|
+
/** Default panel width in pixels. */
|
|
51
|
+
this.panelWidth = 280;
|
|
52
|
+
/** Minimum allowed width when resizable. */
|
|
53
|
+
this.minPanelWidth = 220;
|
|
54
|
+
/** Maximum allowed width when resizable. */
|
|
55
|
+
this.maxPanelWidth = 420;
|
|
56
|
+
/** Allows users to resize the panel by dragging its edge. */
|
|
57
|
+
this.resizable = false;
|
|
58
|
+
/** Show a close button inside the panel (primarily used in narrow overlay mode). */
|
|
59
|
+
this.showCloseButton = true;
|
|
60
|
+
/** When crossing to wide mode, automatically show the panel (collapsed=false). */
|
|
61
|
+
this.autoShowOnWide = true;
|
|
62
|
+
/** When crossing to narrow mode, automatically hide the panel (open=false). */
|
|
63
|
+
this.autoHideOnNarrow = true;
|
|
64
|
+
/** Accessible label for the panel navigation region. */
|
|
65
|
+
this.panelLabel = 'Navigation';
|
|
66
|
+
this.isNarrow = false;
|
|
67
|
+
this.responsiveReady = false;
|
|
68
|
+
this.overlayMounted = false;
|
|
69
|
+
this.overlayVisible = false;
|
|
70
|
+
this.resizing = false;
|
|
71
|
+
this.suppressAnimation = false;
|
|
72
|
+
this.firstLayoutComplete = false;
|
|
73
|
+
this.onOverlayTransitionEnd = (ev) => {
|
|
74
|
+
if (ev.target !== this.overlayWrapEl) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (ev.propertyName !== 'transform') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
|
|
81
|
+
if (!shouldUseOverlay) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!this.open && !this.overlayVisible) {
|
|
85
|
+
this.overlayMounted = false;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
this.onOverlayPointerDown = (ev) => {
|
|
89
|
+
// Close on any click outside the panel.
|
|
90
|
+
const panel = this.panelEl;
|
|
91
|
+
if (!panel) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const path = ev.composedPath();
|
|
95
|
+
if (!path.includes(panel)) {
|
|
96
|
+
this.open = false;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
this.startResizeDrag = (ev) => {
|
|
100
|
+
if (!this.resizable) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// No resizing if fully hidden.
|
|
104
|
+
if (!this.isNarrow && this.collapsed) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.resizing = true;
|
|
114
|
+
this.dragPointerId = ev.pointerId;
|
|
115
|
+
this.dragStartX = ev.clientX;
|
|
116
|
+
this.dragStartWidth = this.currentWidthPx;
|
|
117
|
+
ev.currentTarget?.setPointerCapture?.(ev.pointerId);
|
|
118
|
+
window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
|
|
119
|
+
window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
|
|
120
|
+
window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
|
|
121
|
+
};
|
|
122
|
+
this.onResizeDragMove = (ev) => {
|
|
123
|
+
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
ev.preventDefault();
|
|
127
|
+
const startX = this.dragStartX ?? ev.clientX;
|
|
128
|
+
const startWidth = this.dragStartWidth ?? this.currentWidthPx;
|
|
129
|
+
const delta = ev.clientX - startX;
|
|
130
|
+
const dir = this.side === 'start' ? 1 : -1;
|
|
131
|
+
const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
|
|
132
|
+
this.currentWidthPx = nextWidth;
|
|
133
|
+
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
134
|
+
};
|
|
135
|
+
this.onResizeDragEnd = (ev) => {
|
|
136
|
+
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.resizing = false;
|
|
140
|
+
this.dragPointerId = undefined;
|
|
141
|
+
this.dragStartX = undefined;
|
|
142
|
+
this.dragStartWidth = undefined;
|
|
143
|
+
this.teardownDragListeners();
|
|
144
|
+
this.persistState();
|
|
145
|
+
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
146
|
+
};
|
|
38
147
|
}
|
|
39
|
-
get el() { return getElement(this); }
|
|
40
|
-
/**
|
|
41
|
-
* Optional id used to match toggle requests.
|
|
42
|
-
* If set, the panel only responds to toggle events with the same `panelId`.
|
|
43
|
-
*/
|
|
44
|
-
panelId;
|
|
45
|
-
/** Which side the panel is attached to. */
|
|
46
|
-
side = 'start';
|
|
47
|
-
/** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters "narrow" mode. */
|
|
48
|
-
collapseAt;
|
|
49
|
-
/** Behavior when in narrow mode. */
|
|
50
|
-
narrowBehavior = 'overlay';
|
|
51
|
-
/**
|
|
52
|
-
* Panel open state for narrow mode.
|
|
53
|
-
* - overlay: controls modal drawer visibility
|
|
54
|
-
* - push: controls whether panel is shown (non-modal)
|
|
55
|
-
*/
|
|
56
|
-
open = false;
|
|
57
|
-
/** Panel collapsed state for wide mode (fully hidden). */
|
|
58
|
-
collapsed = false;
|
|
59
|
-
/** Default panel width in pixels. */
|
|
60
|
-
panelWidth = 280;
|
|
61
|
-
/** Minimum allowed width when resizable. */
|
|
62
|
-
minPanelWidth = 220;
|
|
63
|
-
/** Maximum allowed width when resizable. */
|
|
64
|
-
maxPanelWidth = 420;
|
|
65
|
-
/** Allows users to resize the panel by dragging its edge. */
|
|
66
|
-
resizable = false;
|
|
67
|
-
/** When set, panel width + collapsed state are persisted in localStorage. */
|
|
68
|
-
persistKey;
|
|
69
|
-
/** Show a close button inside the panel (primarily used in narrow overlay mode). */
|
|
70
|
-
showCloseButton = true;
|
|
71
|
-
/** When crossing to wide mode, automatically show the panel (collapsed=false). */
|
|
72
|
-
autoShowOnWide = true;
|
|
73
|
-
/** When crossing to narrow mode, automatically hide the panel (open=false). */
|
|
74
|
-
autoHideOnNarrow = true;
|
|
75
|
-
/** Accessible label for the panel navigation region. */
|
|
76
|
-
panelLabel = 'Navigation';
|
|
77
|
-
leSidePanelOpenChange;
|
|
78
|
-
leSidePanelCollapsedChange;
|
|
79
|
-
leSidePanelWidthChange;
|
|
80
|
-
isNarrow = false;
|
|
81
|
-
responsiveReady = false;
|
|
82
|
-
overlayMounted = false;
|
|
83
|
-
overlayVisible = false;
|
|
84
|
-
currentWidthPx;
|
|
85
|
-
resizing = false;
|
|
86
|
-
resizeObserver;
|
|
87
|
-
panelEl;
|
|
88
|
-
overlayWrapEl;
|
|
89
|
-
focusedBeforeOpen;
|
|
90
|
-
dragPointerId;
|
|
91
|
-
dragStartX;
|
|
92
|
-
dragStartWidth;
|
|
93
148
|
connectedCallback() {
|
|
94
149
|
this.restorePersistedState();
|
|
95
150
|
this.currentWidthPx = clamp(this.currentWidthPx || this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
|
|
@@ -142,7 +197,7 @@ const LeSidePanel = class {
|
|
|
142
197
|
return;
|
|
143
198
|
}
|
|
144
199
|
if (!this.resizing) {
|
|
145
|
-
this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
|
|
200
|
+
this.currentWidthPx = clamp(this.panelWidth || 280, this.minPanelWidth || 220, this.maxPanelWidth || 800);
|
|
146
201
|
this.persistState();
|
|
147
202
|
}
|
|
148
203
|
}
|
|
@@ -296,6 +351,16 @@ const LeSidePanel = class {
|
|
|
296
351
|
return;
|
|
297
352
|
}
|
|
298
353
|
this.responsiveReady = true;
|
|
354
|
+
// Suppress animation on the very first successful layout
|
|
355
|
+
if (!this.firstLayoutComplete) {
|
|
356
|
+
this.suppressAnimation = true;
|
|
357
|
+
this.firstLayoutComplete = true;
|
|
358
|
+
setTimeout(() => {
|
|
359
|
+
// We need a timeout to ensure the paint
|
|
360
|
+
// has happened without transition
|
|
361
|
+
this.suppressAnimation = false;
|
|
362
|
+
}, 1000);
|
|
363
|
+
}
|
|
299
364
|
const nextIsNarrow = width < collapseAtPx;
|
|
300
365
|
const prevIsNarrow = this.isNarrow;
|
|
301
366
|
this.isNarrow = nextIsNarrow;
|
|
@@ -402,80 +467,6 @@ const LeSidePanel = class {
|
|
|
402
467
|
}
|
|
403
468
|
}
|
|
404
469
|
}
|
|
405
|
-
onOverlayTransitionEnd = (ev) => {
|
|
406
|
-
if (ev.target !== this.overlayWrapEl) {
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
if (ev.propertyName !== 'transform') {
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
|
|
413
|
-
if (!shouldUseOverlay) {
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
if (!this.open && !this.overlayVisible) {
|
|
417
|
-
this.overlayMounted = false;
|
|
418
|
-
}
|
|
419
|
-
};
|
|
420
|
-
onOverlayPointerDown = (ev) => {
|
|
421
|
-
// Close on any click outside the panel.
|
|
422
|
-
const panel = this.panelEl;
|
|
423
|
-
if (!panel) {
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
|
-
const path = ev.composedPath();
|
|
427
|
-
if (!path.includes(panel)) {
|
|
428
|
-
this.open = false;
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
|
-
startResizeDrag = (ev) => {
|
|
432
|
-
if (!this.resizable) {
|
|
433
|
-
return;
|
|
434
|
-
}
|
|
435
|
-
// No resizing if fully hidden.
|
|
436
|
-
if (!this.isNarrow && this.collapsed) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
this.resizing = true;
|
|
446
|
-
this.dragPointerId = ev.pointerId;
|
|
447
|
-
this.dragStartX = ev.clientX;
|
|
448
|
-
this.dragStartWidth = this.currentWidthPx;
|
|
449
|
-
ev.currentTarget?.setPointerCapture?.(ev.pointerId);
|
|
450
|
-
window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
|
|
451
|
-
window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
|
|
452
|
-
window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
|
|
453
|
-
};
|
|
454
|
-
onResizeDragMove = (ev) => {
|
|
455
|
-
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
ev.preventDefault();
|
|
459
|
-
const startX = this.dragStartX ?? ev.clientX;
|
|
460
|
-
const startWidth = this.dragStartWidth ?? this.currentWidthPx;
|
|
461
|
-
const delta = ev.clientX - startX;
|
|
462
|
-
const dir = this.side === 'start' ? 1 : -1;
|
|
463
|
-
const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
|
|
464
|
-
this.currentWidthPx = nextWidth;
|
|
465
|
-
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
466
|
-
};
|
|
467
|
-
onResizeDragEnd = (ev) => {
|
|
468
|
-
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
this.resizing = false;
|
|
472
|
-
this.dragPointerId = undefined;
|
|
473
|
-
this.dragStartX = undefined;
|
|
474
|
-
this.dragStartWidth = undefined;
|
|
475
|
-
this.teardownDragListeners();
|
|
476
|
-
this.persistState();
|
|
477
|
-
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
478
|
-
};
|
|
479
470
|
teardownDragListeners() {
|
|
480
471
|
window.removeEventListener('pointermove', this.onResizeDragMove);
|
|
481
472
|
window.removeEventListener('pointerup', this.onResizeDragEnd);
|
|
@@ -508,28 +499,30 @@ const LeSidePanel = class {
|
|
|
508
499
|
const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;
|
|
509
500
|
const showNarrowPushPanel = allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;
|
|
510
501
|
const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;
|
|
511
|
-
return (h("div", { key: '
|
|
502
|
+
return (h("div", { key: 'd4524327e7e13541b27c0fd13a5ec4c4605a4796', class: {
|
|
512
503
|
host: true,
|
|
513
504
|
narrow: this.isNarrow,
|
|
514
505
|
wide: !this.isNarrow,
|
|
515
506
|
overlay: isOverlay,
|
|
516
507
|
push: !isOverlay,
|
|
517
508
|
collapsed: !this.isNarrow && this.collapsed,
|
|
518
|
-
}, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: '
|
|
509
|
+
}, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: 'f3c174390306054397a9627cad446d99c183251b', class: {
|
|
519
510
|
'layout': true,
|
|
520
511
|
'has-panel': layoutHasInlinePanel,
|
|
521
512
|
'start': this.side === 'start',
|
|
522
513
|
'end': this.side === 'end',
|
|
523
|
-
} }, h("div", { key: '
|
|
524
|
-
inlinePanel: true,
|
|
525
|
-
hidden: !layoutHasInlinePanel,
|
|
526
|
-
|
|
514
|
+
} }, h("div", { key: 'b679883619cbe69bac251cd5f246634f48ddffdf', class: {
|
|
515
|
+
'inlinePanel': true,
|
|
516
|
+
'hidden': !layoutHasInlinePanel,
|
|
517
|
+
'no-transition': this.suppressAnimation,
|
|
518
|
+
}, "aria-hidden": !layoutHasInlinePanel ? 'true' : null }, this.renderPanelInner({ renderPanelSlot: !isOverlay })), h("div", { key: 'a7a3b2ee5001c5cf550becd872dc621095fff877', class: "content", part: "content", "aria-hidden": isModalOverlayOpen ? 'true' : null }, h("slot", { key: '60ea6042d270ae9dd887034fc44da4fb91e394ec' }))), allowPanel && isOverlay && this.overlayMounted ? (h("div", { class: { overlayRoot: true, visible: this.overlayVisible }, part: "scrim", role: "presentation", onPointerDown: this.onOverlayPointerDown, "aria-hidden": isModalOverlayOpen ? null : 'true' }, h("div", { class: {
|
|
527
519
|
overlayPanelWrap: true,
|
|
528
520
|
visible: this.overlayVisible,
|
|
529
521
|
start: this.side === 'start',
|
|
530
522
|
end: this.side === 'end',
|
|
531
523
|
}, part: "overlay", ref: el => (this.overlayWrapEl = el), onTransitionEnd: this.onOverlayTransitionEnd, role: "dialog", "aria-modal": "true" }, this.renderPanelInner({ renderPanelSlot: true })))) : null));
|
|
532
524
|
}
|
|
525
|
+
get el() { return getElement(this); }
|
|
533
526
|
static get watchers() { return {
|
|
534
527
|
"panelWidth": ["onPanelWidthChanged"],
|
|
535
528
|
"collapsed": ["onCollapsedChanged"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-side-panel.entry.js","sources":["src/components/le-side-panel/le-side-panel.css?tag=le-side-panel&encapsulation=shadow","src/components/le-side-panel/le-side-panel.tsx"],"sourcesContent":[":host {\n display: block;\n height: 100%;\n\n /* Default values */\n --le-side-panel-width: 280px;\n --le-side-panel-margin: 0px;\n --le-side-panel-backdrop: var(--le-color-backdrop);\n --le-side-panel-border-radius: var(--le-radius-lg);\n}\n\n.host {\n position: relative;\n height: 100%;\n min-height: 0;\n}\n\n.layout {\n display: flex;\n align-items: stretch;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.layout.start {\n flex-direction: row;\n}\n\n.layout.end {\n flex-direction: row-reverse;\n}\n\n.inlinePanel {\n flex: 0 0 auto;\n width: var(--le-side-panel-width);\n min-width: 0;\n height: 100%;\n overflow: hidden;\n transition: width var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.inlinePanel.hidden {\n width: 0;\n}\n\n.inlinePanel .panel {\n transform: translateX(0);\n opacity: 1;\n transition:\n transform var(--le-side-panel-transition, var(--le-transition-normal)),\n opacity var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.layout.start .inlinePanel.hidden .panel {\n transform: translateX(-100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.layout.end .inlinePanel.hidden .panel {\n transform: translateX(100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.content {\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.panel {\n position: relative;\n height: 100%;\n max-height: min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));\n margin: var(--le-side-panel-margin);\n border-radius: var(--le-side-panel-border-radius);\n\n background: var(--le-color-surface, #fff);\n color: var(--le-color-text, #000);\n\n border-right: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n box-sizing: border-box;\n}\n\n.panel.end {\n border-right: 0;\n border-left: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n}\n\n.panel-scroller {\n height: 100%;\n overflow: auto;\n}\n\n.close {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 1;\n\n border: 0;\n border-radius: 6px;\n\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.handle {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 10px;\n cursor: col-resize;\n}\n\n.handle.start {\n right: -5px;\n}\n\n.handle.end {\n left: -5px;\n}\n\n/* Overlay (contained within component) */\n.overlayRoot {\n position: absolute;\n inset: 0;\n background: var(--le-side-panel-backdrop);\n z-index: var(--le-z-modal-backdrop, 1040);\n\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--le-side-panel-transition, var(--le-transition-normal));\n\n height: 100%;\n}\n\n.overlayRoot.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.overlayPanelWrap {\n position: absolute;\n top: 0;\n bottom: 0;\n width: min(100%, var(--le-side-panel-width));\n\n height: 100%;\n\n z-index: var(--le-z-modal, 1050);\n\n display: flex;\n align-items: stretch;\n}\n\n.overlayPanelWrap.start {\n left: 0;\n transform: translateX(-100%);\n}\n\n.overlayPanelWrap.end {\n right: 0;\n transform: translateX(100%);\n}\n\n.overlayPanelWrap.visible.start,\n.overlayPanelWrap.visible.end {\n transform: translateX(0);\n}\n\n.overlayPanelWrap {\n transition: transform var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n/* Disable transitions while dragging */\n.host[data-resizing='true'] .panel,\n.host[data-resizing='true'] .overlayPanelWrap,\n.host[data-resizing='true'] .inlinePanel {\n transition: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlayPanelWrap,\n .overlayRoot,\n .inlinePanel {\n transition: none;\n }\n}\n","import {\n Build,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\n\nexport type LeSidePanelSide = 'start' | 'end';\nexport type LeSidePanelNarrowBehavior = 'overlay' | 'push';\nexport type LeSidePanelToggleAction = 'toggle' | 'open' | 'close';\n\nexport type LeSidePanelRequestToggleDetail = {\n panelId?: string;\n action: LeSidePanelToggleAction;\n};\n\ntype PersistedSidePanelState = {\n width?: number;\n collapsed?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction readCssVariablePixels(varName: string): number | undefined {\n if (!Build.isBrowser) {\n return undefined;\n }\n const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n if (!v) {\n return undefined;\n }\n const parsed = Number.parseFloat(v);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseCollapseAtPx(value?: string): number | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.startsWith('--')) {\n const fromVar = readCssVariablePixels(trimmed);\n return fromVar;\n }\n\n const numeric = Number.parseFloat(trimmed);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\n@Component({\n tag: 'le-side-panel',\n styleUrl: 'le-side-panel.css',\n shadow: true,\n})\nexport class LeSidePanel {\n @Element() el: HTMLElement;\n\n /**\n * Optional id used to match toggle requests.\n * If set, the panel only responds to toggle events with the same `panelId`.\n */\n @Prop() panelId?: string;\n\n /** Which side the panel is attached to. */\n @Prop() side: LeSidePanelSide = 'start';\n\n /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters \"narrow\" mode. */\n @Prop() collapseAt?: string;\n\n /** Behavior when in narrow mode. */\n @Prop() narrowBehavior: LeSidePanelNarrowBehavior = 'overlay';\n\n /**\n * Panel open state for narrow mode.\n * - overlay: controls modal drawer visibility\n * - push: controls whether panel is shown (non-modal)\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Panel collapsed state for wide mode (fully hidden). */\n @Prop({ mutable: true, reflect: true }) collapsed: boolean = false;\n\n /** Default panel width in pixels. */\n @Prop() panelWidth: number = 280;\n\n /** Minimum allowed width when resizable. */\n @Prop() minPanelWidth: number = 220;\n\n /** Maximum allowed width when resizable. */\n @Prop() maxPanelWidth: number = 420;\n\n /** Allows users to resize the panel by dragging its edge. */\n @Prop() resizable: boolean = false;\n\n /** When set, panel width + collapsed state are persisted in localStorage. */\n @Prop() persistKey?: string;\n\n /** Show a close button inside the panel (primarily used in narrow overlay mode). */\n @Prop() showCloseButton: boolean = true;\n\n /** When crossing to wide mode, automatically show the panel (collapsed=false). */\n @Prop() autoShowOnWide: boolean = true;\n\n /** When crossing to narrow mode, automatically hide the panel (open=false). */\n @Prop() autoHideOnNarrow: boolean = true;\n\n /** Accessible label for the panel navigation region. */\n @Prop() panelLabel: string = 'Navigation';\n\n @Event({ eventName: 'leSidePanelOpenChange', bubbles: true, composed: true })\n leSidePanelOpenChange: EventEmitter<{ open: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelCollapsedChange', bubbles: true, composed: true })\n leSidePanelCollapsedChange: EventEmitter<{ collapsed: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelWidthChange', bubbles: true, composed: true })\n leSidePanelWidthChange: EventEmitter<{ width: number; panelId?: string }>;\n\n @State() private isNarrow: boolean = false;\n @State() private responsiveReady: boolean = false;\n @State() private overlayMounted: boolean = false;\n @State() private overlayVisible: boolean = false;\n @State() private currentWidthPx: number;\n @State() private resizing: boolean = false;\n\n private resizeObserver?: ResizeObserver;\n private panelEl?: HTMLElement;\n private overlayWrapEl?: HTMLElement;\n private focusedBeforeOpen?: HTMLElement | null;\n\n private dragPointerId?: number;\n private dragStartX?: number;\n private dragStartWidth?: number;\n\n connectedCallback() {\n this.restorePersistedState();\n this.currentWidthPx = clamp(\n this.currentWidthPx || this.panelWidth,\n this.minPanelWidth,\n this.maxPanelWidth,\n );\n\n if (Build.isBrowser && 'ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => {\n this.recomputeNarrow();\n });\n this.resizeObserver.observe(this.el);\n }\n\n // Ensure we get at least one post-layout measurement.\n if (Build.isBrowser) {\n requestAnimationFrame(() => this.recomputeNarrow());\n }\n }\n\n componentWillLoad() {\n this.recomputeNarrow();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.teardownDragListeners();\n }\n\n private isModalOverlayActive(): boolean {\n return this.isNarrow && this.narrowBehavior === 'overlay' && this.open;\n }\n\n private syncOverlayToState() {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n this.overlayVisible = false;\n this.overlayMounted = false;\n return;\n }\n\n if (this.open) {\n if (!this.overlayMounted) {\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n if (this.isNarrow && this.narrowBehavior === 'overlay' && this.open) {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n }\n });\n }\n return;\n }\n\n // Closed: allow unmount to be handled by transition end / fallback timeout.\n this.overlayVisible = false;\n }\n\n @Watch('panelWidth')\n protected onPanelWidthChanged() {\n if (!Number.isFinite(this.panelWidth)) {\n return;\n }\n if (!this.resizing) {\n this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);\n this.persistState();\n }\n }\n\n @Watch('collapsed')\n protected onCollapsedChanged() {\n this.persistState();\n this.leSidePanelCollapsedChange.emit({ collapsed: this.collapsed, panelId: this.panelId });\n }\n\n @Watch('open')\n protected onOpenChanged(newValue: boolean) {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n\n if (!shouldUseOverlay) {\n this.persistState();\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n return;\n }\n\n if (newValue) {\n this.focusedBeforeOpen = (document.activeElement as HTMLElement) || null;\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n });\n } else {\n this.overlayVisible = false;\n this.persistState();\n this.restoreFocusAfterClose();\n\n // Fallback: if transitionend doesn't fire, ensure overlay unmounts.\n // (e.g. interrupted transitions or unusual browser behavior)\n window.setTimeout(() => {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (shouldUseOverlay && !this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n }, 350);\n }\n\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n }\n\n @Watch('collapseAt')\n @Watch('narrowBehavior')\n protected onResponsivePropChanged() {\n this.recomputeNarrow();\n }\n\n @Listen('keydown', { target: 'document', capture: true })\n protected onDocumentKeyDown(ev: KeyboardEvent) {\n if (!Build.isBrowser) {\n return;\n }\n if (!this.isModalOverlayActive()) {\n return;\n }\n\n if (ev.key === 'Escape') {\n ev.preventDefault();\n ev.stopPropagation();\n this.open = false;\n return;\n }\n\n if (ev.key !== 'Tab') {\n return;\n }\n\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n\n const focusables = this.getFocusableElements(panel);\n if (focusables.length === 0) {\n ev.preventDefault();\n try {\n panel.focus();\n } catch {\n // ignore\n }\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (ev.shiftKey) {\n if (!active || active === first || !panel.contains(active)) {\n ev.preventDefault();\n try {\n last.focus();\n } catch {\n // ignore\n }\n }\n } else {\n if (active === last) {\n ev.preventDefault();\n try {\n first.focus();\n } catch {\n // ignore\n }\n }\n }\n }\n\n @Listen('leSidePanelRequestToggle', { target: 'document' })\n protected onToggleRequest(ev: CustomEvent<LeSidePanelRequestToggleDetail>) {\n const detail = ev.detail;\n if (!detail || !detail.action) {\n return;\n }\n\n // panelId matching rules:\n // - If this panel has panelId: respond only when detail.panelId matches.\n // - If this panel has no panelId: respond only when detail.panelId is empty.\n const requestedId = detail.panelId || '';\n const myId = this.panelId || '';\n if (myId !== requestedId) {\n return;\n }\n\n if (this.isNarrow) {\n this.applyActionToOpen(detail.action);\n } else {\n this.applyActionToCollapsed(detail.action);\n }\n }\n\n private applyActionToOpen(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.open = true;\n return;\n }\n if (action === 'close') {\n this.open = false;\n return;\n }\n this.open = !this.open;\n }\n\n private applyActionToCollapsed(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.collapsed = false;\n return;\n }\n if (action === 'close') {\n this.collapsed = true;\n return;\n }\n this.collapsed = !this.collapsed;\n }\n\n private recomputeNarrow() {\n const collapseAtPx = parseCollapseAtPx(this.collapseAt);\n if (!collapseAtPx) {\n this.isNarrow = false;\n this.responsiveReady = true;\n this.syncOverlayToState();\n return;\n }\n\n const width = this.el.clientWidth;\n\n // If we can't measure yet (common on first paint), don't guess a mode.\n // This prevents a brief \"wide\" flash before ResizeObserver kicks in.\n if (!(width > 0)) {\n this.responsiveReady = false;\n return;\n }\n\n this.responsiveReady = true;\n const nextIsNarrow = width < collapseAtPx;\n\n const prevIsNarrow = this.isNarrow;\n this.isNarrow = nextIsNarrow;\n\n if (prevIsNarrow !== nextIsNarrow) {\n if (nextIsNarrow) {\n if (this.autoHideOnNarrow) {\n this.open = false;\n }\n } else {\n // entering wide mode\n this.open = false;\n this.overlayVisible = false;\n this.overlayMounted = false;\n\n if (this.autoShowOnWide) {\n this.collapsed = false;\n }\n }\n }\n\n this.syncOverlayToState();\n }\n\n private restorePersistedState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n try {\n const raw = window.localStorage.getItem(this.persistKey);\n if (!raw) {\n return;\n }\n const parsed = JSON.parse(raw) as PersistedSidePanelState;\n if (typeof parsed.width === 'number' && Number.isFinite(parsed.width)) {\n this.currentWidthPx = parsed.width;\n }\n if (typeof parsed.collapsed === 'boolean') {\n this.collapsed = parsed.collapsed;\n }\n } catch {\n // ignore\n }\n }\n\n private persistState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n const payload: PersistedSidePanelState = {\n width: this.currentWidthPx,\n collapsed: this.collapsed,\n };\n try {\n window.localStorage.setItem(this.persistKey, JSON.stringify(payload));\n } catch {\n // ignore\n }\n }\n\n private focusFirstInsidePanel() {\n if (!Build.isBrowser) {\n return;\n }\n\n const root = this.panelEl;\n if (!root) {\n return;\n }\n\n const candidates = this.getFocusableElements(root);\n for (const el of candidates) {\n if (el.hasAttribute('disabled')) {\n continue;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n continue;\n }\n try {\n el.focus();\n return;\n } catch {\n // ignore\n }\n }\n }\n\n private getFocusableElements(root: HTMLElement): HTMLElement[] {\n const selector = 'button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])';\n const all = Array.from(root.querySelectorAll<HTMLElement>(selector));\n return all.filter(el => {\n if (el.hasAttribute('disabled')) {\n return false;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n return false;\n }\n return true;\n });\n }\n\n private restoreFocusAfterClose() {\n if (!Build.isBrowser) {\n return;\n }\n const prev = this.focusedBeforeOpen;\n this.focusedBeforeOpen = null;\n if (prev && document.contains(prev)) {\n try {\n prev.focus();\n } catch {\n // ignore\n }\n }\n }\n\n private onOverlayTransitionEnd = (ev: TransitionEvent) => {\n if (ev.target !== this.overlayWrapEl) {\n return;\n }\n if (ev.propertyName !== 'transform') {\n return;\n }\n\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n return;\n }\n\n if (!this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n };\n\n private onOverlayPointerDown = (ev: PointerEvent) => {\n // Close on any click outside the panel.\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n const path = ev.composedPath();\n if (!path.includes(panel)) {\n this.open = false;\n }\n };\n\n private startResizeDrag = (ev: PointerEvent) => {\n if (!this.resizable) {\n return;\n }\n // No resizing if fully hidden.\n if (!this.isNarrow && this.collapsed) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {\n return;\n }\n\n this.resizing = true;\n this.dragPointerId = ev.pointerId;\n this.dragStartX = ev.clientX;\n this.dragStartWidth = this.currentWidthPx;\n\n (ev.currentTarget as HTMLElement)?.setPointerCapture?.(ev.pointerId);\n\n window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });\n window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });\n window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });\n };\n\n private onResizeDragMove = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n ev.preventDefault();\n\n const startX = this.dragStartX ?? ev.clientX;\n const startWidth = this.dragStartWidth ?? this.currentWidthPx;\n\n const delta = ev.clientX - startX;\n const dir = this.side === 'start' ? 1 : -1;\n const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);\n this.currentWidthPx = nextWidth;\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private onResizeDragEnd = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n\n this.resizing = false;\n this.dragPointerId = undefined;\n this.dragStartX = undefined;\n this.dragStartWidth = undefined;\n\n this.teardownDragListeners();\n this.persistState();\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private teardownDragListeners() {\n window.removeEventListener('pointermove', this.onResizeDragMove as any);\n window.removeEventListener('pointerup', this.onResizeDragEnd as any);\n window.removeEventListener('pointercancel', this.onResizeDragEnd as any);\n }\n\n private renderPanelInner(opts?: { renderPanelSlot?: boolean }) {\n const renderPanelSlot = opts?.renderPanelSlot ?? true;\n const showClose = this.showCloseButton && this.isNarrow && this.narrowBehavior === 'overlay';\n const tabIndex = this.isNarrow && this.narrowBehavior === 'overlay' ? -1 : null;\n\n return (\n <div\n class={{\n panel: true,\n start: this.side === 'start',\n end: this.side === 'end',\n resizing: this.resizing,\n }}\n part=\"panel\"\n ref={el => (this.panelEl = el as HTMLElement)}\n role=\"navigation\"\n aria-label={this.panelLabel}\n tabindex={tabIndex as any}\n >\n {showClose ? (\n <le-side-panel-toggle\n panel-id=\"demo-side\"\n action=\"toggle\"\n shortcut=\"Mod+B\"\n variant=\"clear\"\n class=\"close\"\n part=\"close-button\"\n aria-label=\"Close panel\"\n icon-only=\"true\"\n style={{\n '--le-button-icon-only-padding': 'var(--le-space-sm)',\n }}\n onClick={() => (this.open = false)}\n >\n <slot name=\"close-icon\" slot=\"icon-only\">\n <le-icon name=\"side-panel\" />\n </slot>\n </le-side-panel-toggle>\n ) : null}\n\n <div class=\"panel-scroller\" part=\"panel-scroller\">\n {renderPanelSlot ? <slot name=\"panel\" /> : null}\n </div>\n\n {this.resizable ? (\n <div\n class={{\n handle: true,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex={-1}\n onPointerDown={this.startResizeDrag}\n />\n ) : null}\n </div>\n );\n }\n\n render() {\n const widthStyle = {\n '--le-side-panel-width': `${this.currentWidthPx}px`,\n };\n\n const isOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n const isModalOverlayOpen = isOverlay && this.open;\n\n const allowPanel = this.responsiveReady;\n\n const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;\n const showNarrowPushPanel =\n allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;\n\n const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;\n\n return (\n <div\n class={{\n host: true,\n narrow: this.isNarrow,\n wide: !this.isNarrow,\n overlay: isOverlay,\n push: !isOverlay,\n collapsed: !this.isNarrow && this.collapsed,\n }}\n style={widthStyle as any}\n data-resizing={this.resizing ? 'true' : null}\n >\n {/* Wide + narrow push layout */}\n <div\n class={{\n 'layout': true,\n 'has-panel': layoutHasInlinePanel,\n 'start': this.side === 'start',\n 'end': this.side === 'end',\n }}\n >\n <div\n class={{\n inlinePanel: true,\n hidden: !layoutHasInlinePanel,\n }}\n aria-hidden={!layoutHasInlinePanel ? 'true' : null}\n >\n {/* In narrow overlay mode, only the overlay should own the named slot. */}\n {this.renderPanelInner({ renderPanelSlot: !isOverlay })}\n </div>\n\n <div class=\"content\" part=\"content\" aria-hidden={isModalOverlayOpen ? 'true' : null}>\n <slot />\n </div>\n </div>\n\n {/* Narrow overlay modal (contained within this component) */}\n {allowPanel && isOverlay && this.overlayMounted ? (\n <div\n class={{ overlayRoot: true, visible: this.overlayVisible }}\n part=\"scrim\"\n role=\"presentation\"\n onPointerDown={this.onOverlayPointerDown}\n aria-hidden={isModalOverlayOpen ? null : 'true'}\n >\n <div\n class={{\n overlayPanelWrap: true,\n visible: this.overlayVisible,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"overlay\"\n ref={el => (this.overlayWrapEl = el as HTMLElement)}\n onTransitionEnd={this.onOverlayTransitionEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {this.renderPanelInner({ renderPanelSlot: true })}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,kkEAAkkE,CAAC;;AC0BnkE,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AACpD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5C;AAEA,SAAS,qBAAqB,CAAC,OAAe,EAAA;AAI5C,IAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;IACrF,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,OAAO,SAAS;;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;AACrD;AAEA,SAAS,iBAAiB,CAAC,KAAc,EAAA;IACvC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,SAAS;;AAElB,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;IAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,SAAS;;AAGlB,IAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAC9C,QAAA,OAAO,OAAO;;IAGhB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AAC1C,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;AACvD;MAOa,WAAW,GAAA,MAAA;;;;;;;;AAGtB;;;AAGG;AACK,IAAA,OAAO;;IAGP,IAAI,GAAoB,OAAO;;AAG/B,IAAA,UAAU;;IAGV,cAAc,GAA8B,SAAS;AAE7D;;;;AAIG;IACqC,IAAI,GAAY,KAAK;;IAGrB,SAAS,GAAY,KAAK;;IAG1D,UAAU,GAAW,GAAG;;IAGxB,aAAa,GAAW,GAAG;;IAG3B,aAAa,GAAW,GAAG;;IAG3B,SAAS,GAAY,KAAK;;AAG1B,IAAA,UAAU;;IAGV,eAAe,GAAY,IAAI;;IAG/B,cAAc,GAAY,IAAI;;IAG9B,gBAAgB,GAAY,IAAI;;IAGhC,UAAU,GAAW,YAAY;AAGzC,IAAA,qBAAqB;AAGrB,IAAA,0BAA0B;AAG1B,IAAA,sBAAsB;IAEL,QAAQ,GAAY,KAAK;IACzB,eAAe,GAAY,KAAK;IAChC,cAAc,GAAY,KAAK;IAC/B,cAAc,GAAY,KAAK;AAC/B,IAAA,cAAc;IACd,QAAQ,GAAY,KAAK;AAElC,IAAA,cAAc;AACd,IAAA,OAAO;AACP,IAAA,aAAa;AACb,IAAA,iBAAiB;AAEjB,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,cAAc;IAEtB,iBAAiB,GAAA;QACf,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,cAAc,GAAG,KAAK,CACzB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EACtC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,CACnB;QAED,IAAuB,gBAAgB,IAAI,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC5C,IAAI,CAAC,eAAe,EAAE;AACxB,aAAC,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;;;AAItC,QAAqB;YACnB,qBAAqB,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;;;IAIvD,iBAAiB,GAAA;QACf,IAAI,CAAC,eAAe,EAAE;;IAGxB,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;QACjC,IAAI,CAAC,qBAAqB,EAAE;;IAGtB,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI;;IAGhE,kBAAkB,GAAA;QACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAC3E,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B;;AAGF,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B,qBAAqB,CAAC,MAAK;AACzB,oBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE;AACnE,wBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;wBAC1B,IAAI,CAAC,qBAAqB,EAAE;;AAEhC,iBAAC,CAAC;;YAEJ;;;AAIF,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;IAInB,mBAAmB,GAAA;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YACpF,IAAI,CAAC,YAAY,EAAE;;;IAKb,kBAAkB,GAAA;QAC1B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;AAIlF,IAAA,aAAa,CAAC,QAAiB,EAAA;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAE3E,IAAI,CAAC,gBAAgB,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3E;;QAGF,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,iBAAiB,GAAI,QAAQ,CAAC,aAA6B,IAAI,IAAI;AACxE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B,IAAI,CAAC,qBAAqB,EAAE;AAC9B,aAAC,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,sBAAsB,EAAE;;;AAI7B,YAAA,MAAM,CAAC,UAAU,CAAC,MAAK;gBACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAC3E,gBAAA,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC1D,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;aAE9B,EAAE,GAAG,CAAC;;AAGT,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;IAKnE,uBAAuB,GAAA;QAC/B,IAAI,CAAC,eAAe,EAAE;;AAId,IAAA,iBAAiB,CAAC,EAAiB,EAAA;AAI3C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC;;AAGF,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE;YACvB,EAAE,CAAC,cAAc,EAAE;YACnB,EAAE,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;YACjB;;AAGF,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,KAAK,EAAE;YACpB;;AAGF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;;QAGF,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI;gBACF,KAAK,CAAC,KAAK,EAAE;;AACb,YAAA,MAAM;;;YAGR;;AAGF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC;AAE3D,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC1D,EAAE,CAAC,cAAc,EAAE;AACnB,gBAAA,IAAI;oBACF,IAAI,CAAC,KAAK,EAAE;;AACZ,gBAAA,MAAM;;;;;aAIL;AACL,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,EAAE,CAAC,cAAc,EAAE;AACnB,gBAAA,IAAI;oBACF,KAAK,CAAC,KAAK,EAAE;;AACb,gBAAA,MAAM;;;;;;AAQJ,IAAA,eAAe,CAAC,EAA+C,EAAA;AACvE,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;QACxB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC7B;;;;;AAMF,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;AAC/B,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB;;AAGF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;;aAChC;AACL,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC;;;AAItC,IAAA,iBAAiB,CAAC,MAA+B,EAAA;AACvD,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB;;AAEF,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;YACjB;;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;;AAGhB,IAAA,sBAAsB,CAAC,MAA+B,EAAA;AAC5D,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;;AAEF,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB;;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;;IAG1B,eAAe,GAAA;QACrB,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,kBAAkB,EAAE;YACzB;;AAGF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW;;;AAIjC,QAAA,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B;;AAGF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,MAAM,YAAY,GAAG,KAAK,GAAG,YAAY;AAEzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY;AAE5B,QAAA,IAAI,YAAY,KAAK,YAAY,EAAE;YACjC,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,oBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;;iBAEd;;AAEL,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;;;QAK5B,IAAI,CAAC,kBAAkB,EAAE;;IAGnB,qBAAqB,GAAA;QAC3B,IAAwB,CAAC,IAAI,CAAC,UAAU,EAAE;YACxC;;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE;gBACR;;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B;AACzD,YAAA,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACrE,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK;;AAEpC,YAAA,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AACzC,gBAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;;;AAEnC,QAAA,MAAM;;;;IAKF,YAAY,GAAA;QAClB,IAAwB,CAAC,IAAI,CAAC,UAAU,EAAE;YACxC;;AAEF,QAAA,MAAM,OAAO,GAA4B;YACvC,KAAK,EAAE,IAAI,CAAC,cAAc;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B;AACD,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;AACrE,QAAA,MAAM;;;;IAKF,qBAAqB,GAAA;AAK3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;QACzB,IAAI,CAAC,IAAI,EAAE;YACT;;QAGF,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAClD,QAAA,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AAC3B,YAAA,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;gBAC/B;;YAEF,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;AAC5C,YAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB;;AAEF,YAAA,IAAI;gBACF,EAAE,CAAC,KAAK,EAAE;gBACV;;AACA,YAAA,MAAM;;;;;AAMJ,IAAA,oBAAoB,CAAC,IAAiB,EAAA;QAC5C,MAAM,QAAQ,GAAG,qEAAqE;AACtF,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,QAAQ,CAAC,CAAC;AACpE,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,IAAG;AACrB,YAAA,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAC/B,gBAAA,OAAO,KAAK;;YAEd,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;AAC5C,YAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,gBAAA,OAAO,KAAK;;AAEd,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;;IAGI,sBAAsB,GAAA;AAI5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,IAAI,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnC,YAAA,IAAI;gBACF,IAAI,CAAC,KAAK,EAAE;;AACZ,YAAA,MAAM;;;;;AAMJ,IAAA,sBAAsB,GAAG,CAAC,EAAmB,KAAI;QACvD,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE;YACpC;;AAEF,QAAA,IAAI,EAAE,CAAC,YAAY,KAAK,WAAW,EAAE;YACnC;;QAGF,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAC3E,IAAI,CAAC,gBAAgB,EAAE;YACrB;;QAGF,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;AAE/B,KAAC;AAEO,IAAA,oBAAoB,GAAG,CAAC,EAAgB,KAAI;;AAElD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;;AAEF,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,EAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;AAErB,KAAC;AAEO,IAAA,eAAe,GAAG,CAAC,EAAgB,KAAI;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;;QAGF,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACpC;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACpE;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACjE;;AAGF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,SAAS;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;QAExC,EAAE,CAAC,aAA6B,EAAE,iBAAiB,GAAG,EAAE,CAAC,SAAS,CAAC;AAEpE,QAAA,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACjF,QAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7E,QAAA,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,KAAC;AAEO,IAAA,gBAAgB,GAAG,CAAC,EAAgB,KAAI;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,SAAS,EAAE;YACzD;;QAEF,EAAE,CAAC,cAAc,EAAE;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,OAAO;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;AAE7D,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,MAAM;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;AACzF,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACzF,KAAC;AAEO,IAAA,eAAe,GAAG,CAAC,EAAgB,KAAI;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,SAAS,EAAE;YACzD;;AAGF,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QAE/B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACzF,KAAC;IAEO,qBAAqB,GAAA;QAC3B,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAuB,CAAC;QACvE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAsB,CAAC;QACpE,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAsB,CAAC;;AAGlE,IAAA,gBAAgB,CAAC,IAAoC,EAAA;AAC3D,QAAA,MAAM,eAAe,GAAG,IAAI,EAAE,eAAe,IAAI,IAAI;AACrD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,GAAG,EAAE,GAAG,IAAI;AAE/E,QAAA,QACE,CACE,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;AAC5B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;gBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA,EACD,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG,EAAiB,CAAC,EAC7C,IAAI,EAAC,YAAY,EAAA,YAAA,EACL,IAAI,CAAC,UAAU,EAC3B,QAAQ,EAAE,QAAe,EAAA,EAExB,SAAS,IACR,wCACW,WAAW,EACpB,MAAM,EAAC,QAAQ,EACf,QAAQ,EAAC,OAAO,EAChB,OAAO,EAAC,OAAO,EACf,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,cAAc,EAAA,YAAA,EACR,aAAa,EAAA,WAAA,EACd,MAAM,EAChB,KAAK,EAAE;AACL,gBAAA,+BAA+B,EAAE,oBAAoB;aACtD,EACD,OAAO,EAAE,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAA,EAElC,CAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,YAAY,EAAC,IAAI,EAAC,WAAW,EAAA,EACtC,CAAS,CAAA,SAAA,EAAA,EAAA,IAAI,EAAC,YAAY,EAAG,CAAA,CACxB,CACc,IACrB,IAAI,EAER,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,gBAAgB,IAC9C,eAAe,GAAG,CAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,OAAO,GAAG,GAAG,IAAI,CAC3C,EAEL,IAAI,CAAC,SAAS,IACb,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;AAC5B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;AACzB,aAAA,EACD,IAAI,EAAC,eAAe,EACpB,IAAI,EAAC,WAAW,EAAA,kBAAA,EACC,UAAU,EAC3B,QAAQ,EAAE,EAAE,EACZ,aAAa,EAAE,IAAI,CAAC,eAAe,EACnC,CAAA,IACA,IAAI,CACJ;;IAIV,MAAM,GAAA;AACJ,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,uBAAuB,EAAE,CAAA,EAAG,IAAI,CAAC,cAAc,CAAI,EAAA,CAAA;SACpD;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AACpE,QAAA,MAAM,kBAAkB,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI;AAEjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe;AAEvC,QAAA,MAAM,aAAa,GAAG,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS;AACrE,QAAA,MAAM,mBAAmB,GACvB,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI;AAE5E,QAAA,MAAM,oBAAoB,GAAG,aAAa,IAAI,mBAAmB;QAEjE,QACE,CACE,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,gBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ;AACpB,gBAAA,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,CAAC,SAAS;gBAChB,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;AAC5C,aAAA,EACD,KAAK,EAAE,UAAiB,EAAA,eAAA,EACT,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,IAAI,EAAA,EAG5C,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;AAC9B,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;aAC3B,EAAA,EAED,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,CAAC,oBAAoB;AAC9B,aAAA,EACY,aAAA,EAAA,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,EAAA,EAGjD,IAAI,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC,SAAS,EAAE,CAAC,CACnD,EAEN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,aAAA,EAAc,kBAAkB,GAAG,MAAM,GAAG,IAAI,EAAA,EACjF,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACJ,CACF,EAGL,UAAU,IAAI,SAAS,IAAI,IAAI,CAAC,cAAc,IAC7C,WACE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,EAC1D,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,cAAc,EACnB,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAA,aAAA,EAC3B,kBAAkB,GAAG,IAAI,GAAG,MAAM,EAAA,EAE/C,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,gBAAgB,EAAE,IAAI;gBACtB,OAAO,EAAE,IAAI,CAAC,cAAc;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;AAC5B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;aACzB,EACD,IAAI,EAAC,SAAS,EACd,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,aAAa,GAAG,EAAiB,CAAC,EACnD,eAAe,EAAE,IAAI,CAAC,sBAAsB,EAC5C,IAAI,EAAC,QAAQ,gBACF,MAAM,EAAA,EAEhB,IAAI,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAC7C,CACF,IACJ,IAAI,CACJ;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"le-side-panel.entry.js","sources":["src/components/le-side-panel/le-side-panel.css?tag=le-side-panel&encapsulation=shadow","src/components/le-side-panel/le-side-panel.tsx"],"sourcesContent":[":host {\n display: block;\n height: 100%;\n\n /* Default values */\n --le-side-panel-width: 280px;\n --le-side-panel-margin: 0px;\n --le-side-panel-backdrop: var(--le-color-backdrop);\n --le-side-panel-border-radius: var(--le-radius-lg);\n}\n\n.host {\n position: relative;\n height: 100%;\n min-height: 0;\n}\n\n.layout {\n display: flex;\n align-items: stretch;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.layout.start {\n flex-direction: row;\n}\n\n.layout.end {\n flex-direction: row-reverse;\n}\n\n.inlinePanel {\n flex: 0 0 auto;\n width: var(--le-side-panel-width);\n min-width: 0;\n height: 100%;\n overflow: hidden;\n transition: width var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.inlinePanel.hidden {\n width: 0;\n}\n\n.inlinePanel.no-transition {\n transition: none !important;\n}\n\n.inlinePanel .panel {\n transform: translateX(0);\n opacity: 1;\n transition:\n transform var(--le-side-panel-transition, var(--le-transition-normal)),\n opacity var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n.inlinePanel.no-transition .panel {\n transition: none !important;\n}\n\n.layout.start .inlinePanel.hidden .panel {\n transform: translateX(-100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.layout.end .inlinePanel.hidden .panel {\n transform: translateX(100%);\n opacity: 0;\n pointer-events: none;\n}\n\n.content {\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n min-height: 0;\n}\n\n.panel {\n position: relative;\n margin: var(--le-side-panel-margin);\n height: 100%;\n max-height: min(calc(100% - (var(--le-side-panel-margin) * 2)), calc(100vh - (var(--le-side-panel-margin) * 2)));\n width: calc(100% - (var(--le-side-panel-margin) * 2));\n border-radius: var(--le-side-panel-border-radius);\n\n background: var(--le-color-surface, #fff);\n color: var(--le-color-text, #000);\n\n border-right: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n box-sizing: border-box;\n}\n\n.panel.end {\n border-right: 0;\n border-left: 1px solid var(--le-color-border, rgba(0, 0, 0, 0.12));\n}\n\n.panel-scroller {\n height: 100%;\n overflow: auto;\n}\n\n.close {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 1;\n\n border: 0;\n border-radius: 6px;\n\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.handle {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 10px;\n cursor: col-resize;\n}\n\n.handle.start {\n right: -5px;\n}\n\n.handle.end {\n left: -5px;\n}\n\n/* Overlay (contained within component) */\n.overlayRoot {\n position: absolute;\n inset: 0;\n background: var(--le-side-panel-backdrop);\n z-index: var(--le-z-modal-backdrop, 1040);\n\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--le-side-panel-transition, var(--le-transition-normal));\n\n height: 100%;\n}\n\n.overlayRoot.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.overlayPanelWrap {\n position: absolute;\n top: 0;\n bottom: 0;\n width: min(100%, var(--le-side-panel-width));\n\n height: 100%;\n\n z-index: var(--le-z-modal, 1050);\n\n display: flex;\n align-items: stretch;\n}\n\n.overlayPanelWrap.start {\n left: 0;\n transform: translateX(-100%);\n}\n\n.overlayPanelWrap.end {\n right: 0;\n transform: translateX(100%);\n}\n\n.overlayPanelWrap.visible.start,\n.overlayPanelWrap.visible.end {\n transform: translateX(0);\n}\n\n.overlayPanelWrap {\n transition: transform var(--le-side-panel-transition, var(--le-transition-normal));\n}\n\n/* Disable transitions while dragging */\n.host[data-resizing='true'] .panel,\n.host[data-resizing='true'] .overlayPanelWrap,\n.host[data-resizing='true'] .inlinePanel {\n transition: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .overlayPanelWrap,\n .overlayRoot,\n .inlinePanel {\n transition: none;\n }\n}\n","import {\n Build,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\n\nexport type LeSidePanelSide = 'start' | 'end';\nexport type LeSidePanelNarrowBehavior = 'overlay' | 'push';\nexport type LeSidePanelToggleAction = 'toggle' | 'open' | 'close';\n\nexport type LeSidePanelRequestToggleDetail = {\n panelId?: string;\n action: LeSidePanelToggleAction;\n};\n\ntype PersistedSidePanelState = {\n width?: number;\n collapsed?: boolean;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction readCssVariablePixels(varName: string): number | undefined {\n if (!Build.isBrowser) {\n return undefined;\n }\n const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n if (!v) {\n return undefined;\n }\n const parsed = Number.parseFloat(v);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseCollapseAtPx(value?: string): number | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.startsWith('--')) {\n const fromVar = readCssVariablePixels(trimmed);\n return fromVar;\n }\n\n const numeric = Number.parseFloat(trimmed);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\n@Component({\n tag: 'le-side-panel',\n styleUrl: 'le-side-panel.css',\n shadow: true,\n})\nexport class LeSidePanel {\n @Element() el: HTMLElement;\n\n /**\n * Optional id used to match toggle requests.\n * If set, the panel only responds to toggle events with the same `panelId`.\n */\n @Prop() panelId?: string;\n\n /** Which side the panel is attached to. */\n @Prop() side: LeSidePanelSide = 'start';\n\n /** Width breakpoint (in px or a CSS var like `--le-breakpoint-md`) below which the panel enters \"narrow\" mode. */\n @Prop() collapseAt?: string;\n\n /** Behavior when in narrow mode. */\n @Prop() narrowBehavior: LeSidePanelNarrowBehavior = 'overlay';\n\n /**\n * Panel open state for narrow mode.\n * - overlay: controls modal drawer visibility\n * - push: controls whether panel is shown (non-modal)\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Panel collapsed state for wide mode (fully hidden). */\n @Prop({ mutable: true, reflect: true }) collapsed: boolean = false;\n\n /** Default panel width in pixels. */\n @Prop() panelWidth: number = 280;\n\n /** Minimum allowed width when resizable. */\n @Prop() minPanelWidth: number = 220;\n\n /** Maximum allowed width when resizable. */\n @Prop() maxPanelWidth: number = 420;\n\n /** Allows users to resize the panel by dragging its edge. */\n @Prop() resizable: boolean = false;\n\n /** When set, panel width + collapsed state are persisted in localStorage. */\n @Prop() persistKey?: string;\n\n /** Show a close button inside the panel (primarily used in narrow overlay mode). */\n @Prop() showCloseButton: boolean = true;\n\n /** When crossing to wide mode, automatically show the panel (collapsed=false). */\n @Prop() autoShowOnWide: boolean = true;\n\n /** When crossing to narrow mode, automatically hide the panel (open=false). */\n @Prop() autoHideOnNarrow: boolean = true;\n\n /** Accessible label for the panel navigation region. */\n @Prop() panelLabel: string = 'Navigation';\n\n @Event({ eventName: 'leSidePanelOpenChange', bubbles: true, composed: true })\n leSidePanelOpenChange: EventEmitter<{ open: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelCollapsedChange', bubbles: true, composed: true })\n leSidePanelCollapsedChange: EventEmitter<{ collapsed: boolean; panelId?: string }>;\n\n @Event({ eventName: 'leSidePanelWidthChange', bubbles: true, composed: true })\n leSidePanelWidthChange: EventEmitter<{ width: number; panelId?: string }>;\n\n @State() private isNarrow: boolean = false;\n @State() private responsiveReady: boolean = false;\n @State() private overlayMounted: boolean = false;\n @State() private overlayVisible: boolean = false;\n @State() private currentWidthPx: number;\n @State() private resizing: boolean = false;\n @State() private suppressAnimation: boolean = false;\n\n private resizeObserver?: ResizeObserver;\n private panelEl?: HTMLElement;\n private overlayWrapEl?: HTMLElement;\n private focusedBeforeOpen?: HTMLElement | null;\n\n private firstLayoutComplete: boolean = false;\n\n private dragPointerId?: number;\n private dragStartX?: number;\n private dragStartWidth?: number;\n\n connectedCallback() {\n this.restorePersistedState();\n this.currentWidthPx = clamp(\n this.currentWidthPx || this.panelWidth,\n this.minPanelWidth,\n this.maxPanelWidth,\n );\n\n if (Build.isBrowser && 'ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => {\n this.recomputeNarrow();\n });\n this.resizeObserver.observe(this.el);\n }\n\n // Ensure we get at least one post-layout measurement.\n if (Build.isBrowser) {\n requestAnimationFrame(() => this.recomputeNarrow());\n }\n }\n\n componentWillLoad() {\n this.recomputeNarrow();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.teardownDragListeners();\n }\n\n private isModalOverlayActive(): boolean {\n return this.isNarrow && this.narrowBehavior === 'overlay' && this.open;\n }\n\n private syncOverlayToState() {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n this.overlayVisible = false;\n this.overlayMounted = false;\n return;\n }\n\n if (this.open) {\n if (!this.overlayMounted) {\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n if (this.isNarrow && this.narrowBehavior === 'overlay' && this.open) {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n }\n });\n }\n return;\n }\n\n // Closed: allow unmount to be handled by transition end / fallback timeout.\n this.overlayVisible = false;\n }\n\n @Watch('panelWidth')\n protected onPanelWidthChanged() {\n if (!Number.isFinite(this.panelWidth)) {\n return;\n }\n if (!this.resizing) {\n this.currentWidthPx = clamp(\n this.panelWidth || 280,\n this.minPanelWidth || 220,\n this.maxPanelWidth || 800,\n );\n this.persistState();\n }\n }\n\n @Watch('collapsed')\n protected onCollapsedChanged() {\n this.persistState();\n this.leSidePanelCollapsedChange.emit({ collapsed: this.collapsed, panelId: this.panelId });\n }\n\n @Watch('open')\n protected onOpenChanged(newValue: boolean) {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n\n if (!shouldUseOverlay) {\n this.persistState();\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n return;\n }\n\n if (newValue) {\n this.focusedBeforeOpen = (document.activeElement as HTMLElement) || null;\n this.overlayMounted = true;\n this.overlayVisible = false;\n requestAnimationFrame(() => {\n this.overlayVisible = true;\n this.focusFirstInsidePanel();\n });\n } else {\n this.overlayVisible = false;\n this.persistState();\n this.restoreFocusAfterClose();\n\n // Fallback: if transitionend doesn't fire, ensure overlay unmounts.\n // (e.g. interrupted transitions or unusual browser behavior)\n window.setTimeout(() => {\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (shouldUseOverlay && !this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n }, 350);\n }\n\n this.leSidePanelOpenChange.emit({ open: this.open, panelId: this.panelId });\n }\n\n @Watch('collapseAt')\n @Watch('narrowBehavior')\n protected onResponsivePropChanged() {\n this.recomputeNarrow();\n }\n\n @Listen('keydown', { target: 'document', capture: true })\n protected onDocumentKeyDown(ev: KeyboardEvent) {\n if (!Build.isBrowser) {\n return;\n }\n if (!this.isModalOverlayActive()) {\n return;\n }\n\n if (ev.key === 'Escape') {\n ev.preventDefault();\n ev.stopPropagation();\n this.open = false;\n return;\n }\n\n if (ev.key !== 'Tab') {\n return;\n }\n\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n\n const focusables = this.getFocusableElements(panel);\n if (focusables.length === 0) {\n ev.preventDefault();\n try {\n panel.focus();\n } catch {\n // ignore\n }\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (ev.shiftKey) {\n if (!active || active === first || !panel.contains(active)) {\n ev.preventDefault();\n try {\n last.focus();\n } catch {\n // ignore\n }\n }\n } else {\n if (active === last) {\n ev.preventDefault();\n try {\n first.focus();\n } catch {\n // ignore\n }\n }\n }\n }\n\n @Listen('leSidePanelRequestToggle', { target: 'document' })\n protected onToggleRequest(ev: CustomEvent<LeSidePanelRequestToggleDetail>) {\n const detail = ev.detail;\n if (!detail || !detail.action) {\n return;\n }\n\n // panelId matching rules:\n // - If this panel has panelId: respond only when detail.panelId matches.\n // - If this panel has no panelId: respond only when detail.panelId is empty.\n const requestedId = detail.panelId || '';\n const myId = this.panelId || '';\n if (myId !== requestedId) {\n return;\n }\n\n if (this.isNarrow) {\n this.applyActionToOpen(detail.action);\n } else {\n this.applyActionToCollapsed(detail.action);\n }\n }\n\n private applyActionToOpen(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.open = true;\n return;\n }\n if (action === 'close') {\n this.open = false;\n return;\n }\n this.open = !this.open;\n }\n\n private applyActionToCollapsed(action: LeSidePanelToggleAction) {\n if (action === 'open') {\n this.collapsed = false;\n return;\n }\n if (action === 'close') {\n this.collapsed = true;\n return;\n }\n this.collapsed = !this.collapsed;\n }\n\n private recomputeNarrow() {\n const collapseAtPx = parseCollapseAtPx(this.collapseAt);\n if (!collapseAtPx) {\n this.isNarrow = false;\n this.responsiveReady = true;\n this.syncOverlayToState();\n return;\n }\n\n const width = this.el.clientWidth;\n\n // If we can't measure yet (common on first paint), don't guess a mode.\n // This prevents a brief \"wide\" flash before ResizeObserver kicks in.\n if (!(width > 0)) {\n this.responsiveReady = false;\n return;\n }\n\n this.responsiveReady = true;\n\n // Suppress animation on the very first successful layout\n if (!this.firstLayoutComplete) {\n this.suppressAnimation = true;\n this.firstLayoutComplete = true;\n\n setTimeout(() => {\n // We need a timeout to ensure the paint\n // has happened without transition\n this.suppressAnimation = false;\n }, 1000);\n }\n\n const nextIsNarrow = width < collapseAtPx;\n\n const prevIsNarrow = this.isNarrow;\n this.isNarrow = nextIsNarrow;\n\n if (prevIsNarrow !== nextIsNarrow) {\n if (nextIsNarrow) {\n if (this.autoHideOnNarrow) {\n this.open = false;\n }\n } else {\n // entering wide mode\n this.open = false;\n this.overlayVisible = false;\n this.overlayMounted = false;\n\n if (this.autoShowOnWide) {\n this.collapsed = false;\n }\n }\n }\n\n this.syncOverlayToState();\n }\n\n private restorePersistedState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n try {\n const raw = window.localStorage.getItem(this.persistKey);\n if (!raw) {\n return;\n }\n const parsed = JSON.parse(raw) as PersistedSidePanelState;\n if (typeof parsed.width === 'number' && Number.isFinite(parsed.width)) {\n this.currentWidthPx = parsed.width;\n }\n if (typeof parsed.collapsed === 'boolean') {\n this.collapsed = parsed.collapsed;\n }\n } catch {\n // ignore\n }\n }\n\n private persistState() {\n if (!Build.isBrowser || !this.persistKey) {\n return;\n }\n const payload: PersistedSidePanelState = {\n width: this.currentWidthPx,\n collapsed: this.collapsed,\n };\n try {\n window.localStorage.setItem(this.persistKey, JSON.stringify(payload));\n } catch {\n // ignore\n }\n }\n\n private focusFirstInsidePanel() {\n if (!Build.isBrowser) {\n return;\n }\n\n const root = this.panelEl;\n if (!root) {\n return;\n }\n\n const candidates = this.getFocusableElements(root);\n for (const el of candidates) {\n if (el.hasAttribute('disabled')) {\n continue;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n continue;\n }\n try {\n el.focus();\n return;\n } catch {\n // ignore\n }\n }\n }\n\n private getFocusableElements(root: HTMLElement): HTMLElement[] {\n const selector = 'button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])';\n const all = Array.from(root.querySelectorAll<HTMLElement>(selector));\n return all.filter(el => {\n if (el.hasAttribute('disabled')) {\n return false;\n }\n const tabindex = el.getAttribute('tabindex');\n if (tabindex === '-1') {\n return false;\n }\n return true;\n });\n }\n\n private restoreFocusAfterClose() {\n if (!Build.isBrowser) {\n return;\n }\n const prev = this.focusedBeforeOpen;\n this.focusedBeforeOpen = null;\n if (prev && document.contains(prev)) {\n try {\n prev.focus();\n } catch {\n // ignore\n }\n }\n }\n\n private onOverlayTransitionEnd = (ev: TransitionEvent) => {\n if (ev.target !== this.overlayWrapEl) {\n return;\n }\n if (ev.propertyName !== 'transform') {\n return;\n }\n\n const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n if (!shouldUseOverlay) {\n return;\n }\n\n if (!this.open && !this.overlayVisible) {\n this.overlayMounted = false;\n }\n };\n\n private onOverlayPointerDown = (ev: PointerEvent) => {\n // Close on any click outside the panel.\n const panel = this.panelEl;\n if (!panel) {\n return;\n }\n const path = ev.composedPath();\n if (!path.includes(panel)) {\n this.open = false;\n }\n };\n\n private startResizeDrag = (ev: PointerEvent) => {\n if (!this.resizable) {\n return;\n }\n // No resizing if fully hidden.\n if (!this.isNarrow && this.collapsed) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {\n return;\n }\n if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {\n return;\n }\n\n this.resizing = true;\n this.dragPointerId = ev.pointerId;\n this.dragStartX = ev.clientX;\n this.dragStartWidth = this.currentWidthPx;\n\n (ev.currentTarget as HTMLElement)?.setPointerCapture?.(ev.pointerId);\n\n window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });\n window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });\n window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });\n };\n\n private onResizeDragMove = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n ev.preventDefault();\n\n const startX = this.dragStartX ?? ev.clientX;\n const startWidth = this.dragStartWidth ?? this.currentWidthPx;\n\n const delta = ev.clientX - startX;\n const dir = this.side === 'start' ? 1 : -1;\n const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);\n this.currentWidthPx = nextWidth;\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private onResizeDragEnd = (ev: PointerEvent) => {\n if (!this.resizing || this.dragPointerId !== ev.pointerId) {\n return;\n }\n\n this.resizing = false;\n this.dragPointerId = undefined;\n this.dragStartX = undefined;\n this.dragStartWidth = undefined;\n\n this.teardownDragListeners();\n this.persistState();\n this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });\n };\n\n private teardownDragListeners() {\n window.removeEventListener('pointermove', this.onResizeDragMove as any);\n window.removeEventListener('pointerup', this.onResizeDragEnd as any);\n window.removeEventListener('pointercancel', this.onResizeDragEnd as any);\n }\n\n private renderPanelInner(opts?: { renderPanelSlot?: boolean }) {\n const renderPanelSlot = opts?.renderPanelSlot ?? true;\n const showClose = this.showCloseButton && this.isNarrow && this.narrowBehavior === 'overlay';\n const tabIndex = this.isNarrow && this.narrowBehavior === 'overlay' ? -1 : null;\n\n return (\n <div\n class={{\n panel: true,\n start: this.side === 'start',\n end: this.side === 'end',\n resizing: this.resizing,\n }}\n part=\"panel\"\n ref={el => (this.panelEl = el as HTMLElement)}\n role=\"navigation\"\n aria-label={this.panelLabel}\n tabindex={tabIndex as any}\n >\n {showClose ? (\n <le-side-panel-toggle\n panel-id=\"demo-side\"\n action=\"toggle\"\n shortcut=\"Mod+B\"\n variant=\"clear\"\n class=\"close\"\n part=\"close-button\"\n aria-label=\"Close panel\"\n icon-only=\"true\"\n style={{\n '--le-button-icon-only-padding': 'var(--le-space-sm)',\n }}\n onClick={() => (this.open = false)}\n >\n <slot name=\"close-icon\" slot=\"icon-only\">\n <le-icon name=\"side-panel\" />\n </slot>\n </le-side-panel-toggle>\n ) : null}\n\n <div class=\"panel-scroller\" part=\"panel-scroller\">\n {renderPanelSlot ? <slot name=\"panel\" /> : null}\n </div>\n\n {this.resizable ? (\n <div\n class={{\n handle: true,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex={-1}\n onPointerDown={this.startResizeDrag}\n />\n ) : null}\n </div>\n );\n }\n\n render() {\n const widthStyle = {\n '--le-side-panel-width': `${this.currentWidthPx}px`,\n };\n\n const isOverlay = this.isNarrow && this.narrowBehavior === 'overlay';\n const isModalOverlayOpen = isOverlay && this.open;\n\n const allowPanel = this.responsiveReady;\n\n const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;\n const showNarrowPushPanel =\n allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;\n\n const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;\n\n return (\n <div\n class={{\n host: true,\n narrow: this.isNarrow,\n wide: !this.isNarrow,\n overlay: isOverlay,\n push: !isOverlay,\n collapsed: !this.isNarrow && this.collapsed,\n }}\n style={widthStyle as any}\n data-resizing={this.resizing ? 'true' : null}\n >\n {/* Wide + narrow push layout */}\n <div\n class={{\n 'layout': true,\n 'has-panel': layoutHasInlinePanel,\n 'start': this.side === 'start',\n 'end': this.side === 'end',\n }}\n >\n <div\n class={{\n 'inlinePanel': true,\n 'hidden': !layoutHasInlinePanel,\n 'no-transition': this.suppressAnimation,\n }}\n aria-hidden={!layoutHasInlinePanel ? 'true' : null}\n >\n {/* In narrow overlay mode, only the overlay should own the named slot. */}\n {this.renderPanelInner({ renderPanelSlot: !isOverlay })}\n </div>\n\n <div class=\"content\" part=\"content\" aria-hidden={isModalOverlayOpen ? 'true' : null}>\n <slot />\n </div>\n </div>\n\n {/* Narrow overlay modal (contained within this component) */}\n {allowPanel && isOverlay && this.overlayMounted ? (\n <div\n class={{ overlayRoot: true, visible: this.overlayVisible }}\n part=\"scrim\"\n role=\"presentation\"\n onPointerDown={this.onOverlayPointerDown}\n aria-hidden={isModalOverlayOpen ? null : 'true'}\n >\n <div\n class={{\n overlayPanelWrap: true,\n visible: this.overlayVisible,\n start: this.side === 'start',\n end: this.side === 'end',\n }}\n part=\"overlay\"\n ref={el => (this.overlayWrapEl = el as HTMLElement)}\n onTransitionEnd={this.onOverlayTransitionEnd}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {this.renderPanelInner({ renderPanelSlot: true })}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|