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
|
@@ -29,60 +29,117 @@ function parseCollapseAtPx(value) {
|
|
|
29
29
|
return Number.isFinite(numeric) ? numeric : undefined;
|
|
30
30
|
}
|
|
31
31
|
export class LeSidePanel {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
32
|
+
constructor() {
|
|
33
|
+
/** Which side the panel is attached to. */
|
|
34
|
+
this.side = 'start';
|
|
35
|
+
/** Behavior when in narrow mode. */
|
|
36
|
+
this.narrowBehavior = 'overlay';
|
|
37
|
+
/**
|
|
38
|
+
* Panel open state for narrow mode.
|
|
39
|
+
* - overlay: controls modal drawer visibility
|
|
40
|
+
* - push: controls whether panel is shown (non-modal)
|
|
41
|
+
*/
|
|
42
|
+
this.open = false;
|
|
43
|
+
/** Panel collapsed state for wide mode (fully hidden). */
|
|
44
|
+
this.collapsed = false;
|
|
45
|
+
/** Default panel width in pixels. */
|
|
46
|
+
this.panelWidth = 280;
|
|
47
|
+
/** Minimum allowed width when resizable. */
|
|
48
|
+
this.minPanelWidth = 220;
|
|
49
|
+
/** Maximum allowed width when resizable. */
|
|
50
|
+
this.maxPanelWidth = 420;
|
|
51
|
+
/** Allows users to resize the panel by dragging its edge. */
|
|
52
|
+
this.resizable = false;
|
|
53
|
+
/** Show a close button inside the panel (primarily used in narrow overlay mode). */
|
|
54
|
+
this.showCloseButton = true;
|
|
55
|
+
/** When crossing to wide mode, automatically show the panel (collapsed=false). */
|
|
56
|
+
this.autoShowOnWide = true;
|
|
57
|
+
/** When crossing to narrow mode, automatically hide the panel (open=false). */
|
|
58
|
+
this.autoHideOnNarrow = true;
|
|
59
|
+
/** Accessible label for the panel navigation region. */
|
|
60
|
+
this.panelLabel = 'Navigation';
|
|
61
|
+
this.isNarrow = false;
|
|
62
|
+
this.responsiveReady = false;
|
|
63
|
+
this.overlayMounted = false;
|
|
64
|
+
this.overlayVisible = false;
|
|
65
|
+
this.resizing = false;
|
|
66
|
+
this.suppressAnimation = false;
|
|
67
|
+
this.firstLayoutComplete = false;
|
|
68
|
+
this.onOverlayTransitionEnd = (ev) => {
|
|
69
|
+
if (ev.target !== this.overlayWrapEl) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (ev.propertyName !== 'transform') {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
|
|
76
|
+
if (!shouldUseOverlay) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!this.open && !this.overlayVisible) {
|
|
80
|
+
this.overlayMounted = false;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
this.onOverlayPointerDown = (ev) => {
|
|
84
|
+
// Close on any click outside the panel.
|
|
85
|
+
const panel = this.panelEl;
|
|
86
|
+
if (!panel) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const path = ev.composedPath();
|
|
90
|
+
if (!path.includes(panel)) {
|
|
91
|
+
this.open = false;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
this.startResizeDrag = (ev) => {
|
|
95
|
+
if (!this.resizable) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// No resizing if fully hidden.
|
|
99
|
+
if (!this.isNarrow && this.collapsed) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.resizing = true;
|
|
109
|
+
this.dragPointerId = ev.pointerId;
|
|
110
|
+
this.dragStartX = ev.clientX;
|
|
111
|
+
this.dragStartWidth = this.currentWidthPx;
|
|
112
|
+
ev.currentTarget?.setPointerCapture?.(ev.pointerId);
|
|
113
|
+
window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
|
|
114
|
+
window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
|
|
115
|
+
window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
|
|
116
|
+
};
|
|
117
|
+
this.onResizeDragMove = (ev) => {
|
|
118
|
+
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
ev.preventDefault();
|
|
122
|
+
const startX = this.dragStartX ?? ev.clientX;
|
|
123
|
+
const startWidth = this.dragStartWidth ?? this.currentWidthPx;
|
|
124
|
+
const delta = ev.clientX - startX;
|
|
125
|
+
const dir = this.side === 'start' ? 1 : -1;
|
|
126
|
+
const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
|
|
127
|
+
this.currentWidthPx = nextWidth;
|
|
128
|
+
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
129
|
+
};
|
|
130
|
+
this.onResizeDragEnd = (ev) => {
|
|
131
|
+
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.resizing = false;
|
|
135
|
+
this.dragPointerId = undefined;
|
|
136
|
+
this.dragStartX = undefined;
|
|
137
|
+
this.dragStartWidth = undefined;
|
|
138
|
+
this.teardownDragListeners();
|
|
139
|
+
this.persistState();
|
|
140
|
+
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
141
|
+
};
|
|
142
|
+
}
|
|
86
143
|
connectedCallback() {
|
|
87
144
|
this.restorePersistedState();
|
|
88
145
|
this.currentWidthPx = clamp(this.currentWidthPx || this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
|
|
@@ -135,7 +192,7 @@ export class LeSidePanel {
|
|
|
135
192
|
return;
|
|
136
193
|
}
|
|
137
194
|
if (!this.resizing) {
|
|
138
|
-
this.currentWidthPx = clamp(this.panelWidth, this.minPanelWidth, this.maxPanelWidth);
|
|
195
|
+
this.currentWidthPx = clamp(this.panelWidth || 280, this.minPanelWidth || 220, this.maxPanelWidth || 800);
|
|
139
196
|
this.persistState();
|
|
140
197
|
}
|
|
141
198
|
}
|
|
@@ -292,6 +349,16 @@ export class LeSidePanel {
|
|
|
292
349
|
return;
|
|
293
350
|
}
|
|
294
351
|
this.responsiveReady = true;
|
|
352
|
+
// Suppress animation on the very first successful layout
|
|
353
|
+
if (!this.firstLayoutComplete) {
|
|
354
|
+
this.suppressAnimation = true;
|
|
355
|
+
this.firstLayoutComplete = true;
|
|
356
|
+
setTimeout(() => {
|
|
357
|
+
// We need a timeout to ensure the paint
|
|
358
|
+
// has happened without transition
|
|
359
|
+
this.suppressAnimation = false;
|
|
360
|
+
}, 1000);
|
|
361
|
+
}
|
|
295
362
|
const nextIsNarrow = width < collapseAtPx;
|
|
296
363
|
const prevIsNarrow = this.isNarrow;
|
|
297
364
|
this.isNarrow = nextIsNarrow;
|
|
@@ -404,80 +471,6 @@ export class LeSidePanel {
|
|
|
404
471
|
}
|
|
405
472
|
}
|
|
406
473
|
}
|
|
407
|
-
onOverlayTransitionEnd = (ev) => {
|
|
408
|
-
if (ev.target !== this.overlayWrapEl) {
|
|
409
|
-
return;
|
|
410
|
-
}
|
|
411
|
-
if (ev.propertyName !== 'transform') {
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
const shouldUseOverlay = this.isNarrow && this.narrowBehavior === 'overlay';
|
|
415
|
-
if (!shouldUseOverlay) {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
if (!this.open && !this.overlayVisible) {
|
|
419
|
-
this.overlayMounted = false;
|
|
420
|
-
}
|
|
421
|
-
};
|
|
422
|
-
onOverlayPointerDown = (ev) => {
|
|
423
|
-
// Close on any click outside the panel.
|
|
424
|
-
const panel = this.panelEl;
|
|
425
|
-
if (!panel) {
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
const path = ev.composedPath();
|
|
429
|
-
if (!path.includes(panel)) {
|
|
430
|
-
this.open = false;
|
|
431
|
-
}
|
|
432
|
-
};
|
|
433
|
-
startResizeDrag = (ev) => {
|
|
434
|
-
if (!this.resizable) {
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
// No resizing if fully hidden.
|
|
438
|
-
if (!this.isNarrow && this.collapsed) {
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
if (this.isNarrow && this.narrowBehavior === 'overlay' && !this.open) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
if (this.isNarrow && this.narrowBehavior === 'push' && !this.open) {
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
this.resizing = true;
|
|
448
|
-
this.dragPointerId = ev.pointerId;
|
|
449
|
-
this.dragStartX = ev.clientX;
|
|
450
|
-
this.dragStartWidth = this.currentWidthPx;
|
|
451
|
-
ev.currentTarget?.setPointerCapture?.(ev.pointerId);
|
|
452
|
-
window.addEventListener('pointermove', this.onResizeDragMove, { passive: false });
|
|
453
|
-
window.addEventListener('pointerup', this.onResizeDragEnd, { passive: true });
|
|
454
|
-
window.addEventListener('pointercancel', this.onResizeDragEnd, { passive: true });
|
|
455
|
-
};
|
|
456
|
-
onResizeDragMove = (ev) => {
|
|
457
|
-
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
ev.preventDefault();
|
|
461
|
-
const startX = this.dragStartX ?? ev.clientX;
|
|
462
|
-
const startWidth = this.dragStartWidth ?? this.currentWidthPx;
|
|
463
|
-
const delta = ev.clientX - startX;
|
|
464
|
-
const dir = this.side === 'start' ? 1 : -1;
|
|
465
|
-
const nextWidth = clamp(startWidth + delta * dir, this.minPanelWidth, this.maxPanelWidth);
|
|
466
|
-
this.currentWidthPx = nextWidth;
|
|
467
|
-
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
468
|
-
};
|
|
469
|
-
onResizeDragEnd = (ev) => {
|
|
470
|
-
if (!this.resizing || this.dragPointerId !== ev.pointerId) {
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
this.resizing = false;
|
|
474
|
-
this.dragPointerId = undefined;
|
|
475
|
-
this.dragStartX = undefined;
|
|
476
|
-
this.dragStartWidth = undefined;
|
|
477
|
-
this.teardownDragListeners();
|
|
478
|
-
this.persistState();
|
|
479
|
-
this.leSidePanelWidthChange.emit({ width: this.currentWidthPx, panelId: this.panelId });
|
|
480
|
-
};
|
|
481
474
|
teardownDragListeners() {
|
|
482
475
|
window.removeEventListener('pointermove', this.onResizeDragMove);
|
|
483
476
|
window.removeEventListener('pointerup', this.onResizeDragEnd);
|
|
@@ -510,22 +503,23 @@ export class LeSidePanel {
|
|
|
510
503
|
const showWidePanel = allowPanel && !this.isNarrow && !this.collapsed;
|
|
511
504
|
const showNarrowPushPanel = allowPanel && this.isNarrow && this.narrowBehavior === 'push' && this.open;
|
|
512
505
|
const layoutHasInlinePanel = showWidePanel || showNarrowPushPanel;
|
|
513
|
-
return (h("div", { key: '
|
|
506
|
+
return (h("div", { key: 'd4524327e7e13541b27c0fd13a5ec4c4605a4796', class: {
|
|
514
507
|
host: true,
|
|
515
508
|
narrow: this.isNarrow,
|
|
516
509
|
wide: !this.isNarrow,
|
|
517
510
|
overlay: isOverlay,
|
|
518
511
|
push: !isOverlay,
|
|
519
512
|
collapsed: !this.isNarrow && this.collapsed,
|
|
520
|
-
}, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: '
|
|
513
|
+
}, style: widthStyle, "data-resizing": this.resizing ? 'true' : null }, h("div", { key: 'f3c174390306054397a9627cad446d99c183251b', class: {
|
|
521
514
|
'layout': true,
|
|
522
515
|
'has-panel': layoutHasInlinePanel,
|
|
523
516
|
'start': this.side === 'start',
|
|
524
517
|
'end': this.side === 'end',
|
|
525
|
-
} }, h("div", { key: '
|
|
526
|
-
inlinePanel: true,
|
|
527
|
-
hidden: !layoutHasInlinePanel,
|
|
528
|
-
|
|
518
|
+
} }, h("div", { key: 'b679883619cbe69bac251cd5f246634f48ddffdf', class: {
|
|
519
|
+
'inlinePanel': true,
|
|
520
|
+
'hidden': !layoutHasInlinePanel,
|
|
521
|
+
'no-transition': this.suppressAnimation,
|
|
522
|
+
}, "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: {
|
|
529
523
|
overlayPanelWrap: true,
|
|
530
524
|
visible: this.overlayVisible,
|
|
531
525
|
start: this.side === 'start',
|
|
@@ -864,7 +858,8 @@ export class LeSidePanel {
|
|
|
864
858
|
"overlayMounted": {},
|
|
865
859
|
"overlayVisible": {},
|
|
866
860
|
"currentWidthPx": {},
|
|
867
|
-
"resizing": {}
|
|
861
|
+
"resizing": {},
|
|
862
|
+
"suppressAnimation": {}
|
|
868
863
|
};
|
|
869
864
|
}
|
|
870
865
|
static get events() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-side-panel.js","sourceRoot":"","sources":["../../../src/components/le-side-panel/le-side-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"file":"le-side-panel.js","sourceRoot":"","sources":["../../../src/components/le-side-panel/le-side-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|