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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-header.js","sourceRoot":"","sources":["../../../src/components/le-header/le-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\nexport type LeHeaderPosition = 'static' | 'sticky' | 'fixed';\n\n/**\n * A functional page header with scroll-aware behaviors.\n *\n * Features:\n * - Static (default), sticky, or fixed positioning\n * - Optional shrink-on-scroll behavior via `shrink-offset`\n * - Optional reveal-on-scroll-up via `reveal-on-scroll` (sticky only)\n *\n * Slots:\n * - `start`: left side (logo/back button)\n * - `title`: centered/primary title content\n * - `end`: right side actions\n * - default: extra content row (e.g., tabs/search) rendered below main row\n *\n * @slot start - Start area content\n * @slot title - Title content\n * @slot end - End area content\n * @slot - Optional secondary row content\n *\n * @cssprop --le-header-bg - Background (color/gradient)\n * @cssprop --le-header-color - Text color\n * @cssprop --le-header-border - Border (e.g. 1px solid ...)\n * @cssprop --le-header-shadow - Shadow/elevation\n * @cssprop --le-header-max-width - Inner content max width\n * @cssprop --le-header-padding-x - Horizontal padding\n * @cssprop --le-header-padding-y - Vertical padding\n * @cssprop --le-header-gap - Gap between zones\n * @cssprop --le-header-height - Base height (main row)\n * @cssprop --le-header-height-condensed - Condensed height when shrunk\n * @cssprop --le-header-transition - Transition timing\n * @cssprop --le-header-z - Z-index (fixed mode)\n *\n * @csspart header - The header container\n * @csspart inner - Inner max-width container\n * @csspart row - Main row\n * @csspart start - Start zone\n * @csspart title - Title zone\n * @csspart end - End zone\n * @csspart secondary - Secondary row\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-header',\n styleUrl: 'le-header.css',\n shadow: true,\n})\nexport class LeHeader {\n @Element() el: HTMLElement;\n\n /** Force static positioning (default). Ignored if `sticky` or `fixed` are true. */\n @Prop({ attribute: 'static', reflect: true }) isStatic: boolean = false;\n\n /** Sticky positioning (in-flow). Ignored if `fixed` is true. */\n @Prop({ reflect: true }) sticky: boolean = false;\n\n /** Fixed positioning (out-of-flow). Takes precedence over `sticky`/`static`. */\n @Prop({ reflect: true }) fixed: boolean = false;\n\n /**\n * Sticky-only reveal behavior (hide on scroll down, show on scroll up).\n * - missing/false: disabled\n * - true/empty attribute: enabled with default threshold (16)\n * - number (as string): enabled and used as threshold\n */\n @Prop({ attribute: 'reveal-on-scroll', reflect: true }) revealOnScroll?: string;\n\n /**\n * Shrink trigger.\n * - missing/0: disabled\n * - number (px): shrink when scrollY >= that value (but never before header height)\n * - css var name (e.g. --foo): shrink when scrollY >= resolved var value\n * - selector (e.g. .page-title): shrink when that element scrolls out of view above the viewport\n */\n @Prop({ attribute: 'shrink-offset', reflect: true }) shrinkOffset?: string;\n\n /**\n * If true, expand the header when hovered\n */\n @Prop({ attribute: 'expand-on-hover', reflect: true }) expandOnHover: boolean = false;\n\n /** Emits whenever scroll-driven state changes. */\n @Event() leHeaderState: EventEmitter<{\n y: number;\n direction: 'up' | 'down';\n revealed: boolean;\n shrunk: boolean;\n }>;\n\n /** Emits when the header shrinks/expands (only on change). */\n @Event({ bubbles: true, composed: true })\n leHeaderShrinkChange: EventEmitter<{ shrunk: boolean; y: number }>;\n\n /** Emits when the header hides/shows (only on change). */\n @Event({ bubbles: true, composed: true })\n leHeaderVisibilityChange: EventEmitter<{ visible: boolean; y: number }>;\n\n @State() private revealed: boolean = true;\n @State() private shrunk: boolean = false;\n @State() private placeholderHeight: number | null = null;\n @State() private hoverActive: boolean = false;\n\n private disconnectModeObserver?: () => void;\n private rafId: number | null = null;\n private measureRafId: number | null = null;\n private lastY: number = 0;\n private lastEmittedDirection: 'up' | 'down' = 'down';\n private headerEl?: HTMLElement;\n private shrinkSelectorEl?: Element | null;\n\n private setShrunk(next: boolean, y: number) {\n if (next === this.shrunk) return;\n this.shrunk = next;\n this.leHeaderShrinkChange.emit({ shrunk: this.shrunk, y });\n }\n\n componentDidLoad() {\n if (typeof window === 'undefined') return;\n this.lastY = window.scrollY || 0;\n this.scheduleMeasure(true);\n this.scheduleUpdate(true);\n }\n\n disconnectedCallback() {\n this.disconnectModeObserver?.();\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n\n if (this.measureRafId != null) {\n cancelAnimationFrame(this.measureRafId);\n this.measureRafId = null;\n }\n }\n\n @Watch('revealOnScroll')\n @Watch('shrinkOffset')\n @Watch('fixed')\n @Watch('sticky')\n @Watch('isStatic')\n protected onBehaviorPropsChange() {\n this.scheduleUpdate(true);\n this.scheduleMeasure(true);\n }\n\n @Listen('scroll', { target: 'window', passive: true })\n protected onWindowScroll() {\n this.scheduleUpdate();\n }\n\n @Listen('resize', { target: 'window', passive: true })\n protected onWindowResize() {\n this.scheduleMeasure(true);\n this.scheduleUpdate(true);\n }\n\n private getPosition(): LeHeaderPosition {\n if (this.fixed) return 'fixed';\n if (this.sticky) return 'sticky';\n return 'static';\n }\n\n private parseRevealThreshold(): number | null {\n // Only applies in sticky mode.\n if (!this.sticky || this.fixed) return null;\n if (this.revealOnScroll == null) return null;\n const raw = String(this.revealOnScroll).trim();\n if (raw === '' || raw === 'true') return 16;\n if (raw === 'false') return null;\n const n = Number(raw);\n return Number.isFinite(n) ? Math.max(0, n) : 16;\n }\n\n private resolveShrinkStartPx(): number | null {\n const raw = (this.shrinkOffset ?? '').trim();\n if (!raw || raw === '0') return null;\n\n // Numeric\n const numeric = Number(raw);\n if (Number.isFinite(numeric)) return Math.max(0, numeric);\n\n // CSS variable name\n if (raw.startsWith('--')) {\n const value = getComputedStyle(document.documentElement).getPropertyValue(raw).trim();\n const v = Number(value.replace('px', '').trim());\n return Number.isFinite(v) ? Math.max(0, v) : null;\n }\n\n // Selector\n try {\n const el = document.querySelector(raw);\n this.shrinkSelectorEl = el;\n return null;\n } catch {\n this.shrinkSelectorEl = null;\n return null;\n }\n }\n\n private scheduleUpdate(force: boolean = false) {\n if (this.rafId != null) {\n if (!force) return;\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.updateFromScroll();\n });\n }\n\n private scheduleMeasure(force: boolean = false) {\n if (this.measureRafId != null && !force) return;\n this.measureRafId = requestAnimationFrame(() => {\n this.measureRafId = null;\n this.measurePlaceholderHeight();\n });\n }\n\n private measurePlaceholderHeight() {\n // Measure the rendered header height once (and on resize/mode change).\n // This intentionally ignores scroll/shrink behavior; it should reserve the full header height.\n if (!this.headerEl) return;\n\n const next = Math.ceil(this.headerEl.getBoundingClientRect().height);\n if (!Number.isFinite(next) || next <= 0) return;\n\n if (next !== this.placeholderHeight) {\n this.placeholderHeight = next;\n // Publish to global root so placeholders anywhere can read it.\n if (typeof document !== 'undefined') {\n document.documentElement.style.setProperty('--le-header-height', `${next}px`);\n }\n }\n }\n\n private updateFromScroll() {\n const y = typeof window !== 'undefined' ? window.scrollY || 0 : 0;\n const delta = y - this.lastY;\n\n const direction: 'up' | 'down' = delta < 0 ? 'up' : 'down';\n\n // Shrink behavior\n let computedShrunk = false;\n const headerHeight = Math.max(0, this.placeholderHeight ?? 0);\n const shrinkStartPx = typeof window !== 'undefined' ? this.resolveShrinkStartPx() : null;\n\n if (this.shrinkSelectorEl) {\n const rect = (this.shrinkSelectorEl as HTMLElement).getBoundingClientRect();\n computedShrunk = rect.bottom <= 0;\n } else if (shrinkStartPx != null) {\n const effectiveStart = Math.max(shrinkStartPx, headerHeight);\n computedShrunk = y >= effectiveStart;\n }\n\n // Hover override: when enabled and hovered, force expanded.\n const nextShrunk = this.expandOnHover && this.hoverActive ? false : computedShrunk;\n this.setShrunk(nextShrunk, y);\n\n // Reveal-on-scroll (sticky-only)\n const revealThreshold = this.parseRevealThreshold();\n if (revealThreshold != null) {\n // Always show the header near the top of the page.\n const topLock = Math.max(0, this.placeholderHeight ?? 0);\n if (y <= topLock) {\n if (!this.revealed) {\n this.revealed = true;\n this.leHeaderVisibilityChange.emit({ visible: true, y });\n }\n } else if (Math.abs(delta) >= revealThreshold) {\n const nextRevealed = direction === 'up' || y <= 0;\n if (nextRevealed !== this.revealed) {\n this.revealed = nextRevealed;\n this.leHeaderVisibilityChange.emit({ visible: this.revealed, y });\n }\n this.lastEmittedDirection = direction;\n }\n } else {\n if (!this.revealed) {\n this.revealed = true;\n this.leHeaderVisibilityChange.emit({ visible: true, y });\n }\n }\n\n this.lastY = y;\n\n this.leHeaderState.emit({\n y,\n direction: this.lastEmittedDirection,\n revealed: this.revealed,\n shrunk: this.shrunk,\n });\n }\n\n render() {\n const position = this.getPosition();\n\n const hostClass = classnames('le-header', {\n 'header-is-shrunk': this.shrunk,\n 'is-fixed': position === 'fixed',\n 'is-sticky': position === 'sticky',\n 'is-static': position === 'static',\n 'is-revealed': this.revealed,\n 'is-hidden': !this.revealed,\n 'is-shrunk': this.shrunk,\n });\n\n return (\n <Host\n class={hostClass}\n onMouseEnter={() => {\n if (!this.expandOnHover) return;\n this.hoverActive = true;\n this.scheduleUpdate(true);\n }}\n onMouseLeave={() => {\n if (!this.expandOnHover) return;\n this.hoverActive = false;\n this.scheduleUpdate(true);\n }}\n >\n <le-component component=\"le-header\">\n <header\n class=\"header\"\n part=\"header\"\n role=\"banner\"\n ref={el => (this.headerEl = el as HTMLElement)}\n >\n <div class=\"inner\" part=\"inner\">\n <div class=\"row\" part=\"row\">\n <div class=\"start\" part=\"start\">\n <le-slot\n name=\"start\"\n label=\"Start\"\n description=\"Logo / back button / nav\"\n allowed-components=\"le-button,le-text,le-tag,le-box,le-stack\"\n >\n <slot name=\"start\"></slot>\n </le-slot>\n </div>\n\n <div class=\"title\" part=\"title\">\n <le-slot\n name=\"title\"\n label=\"Title\"\n description=\"Header title\"\n type=\"text\"\n tag=\"span\"\n >\n <span class=\"title-slot\" part=\"title\">\n <slot name=\"title\"></slot>\n </span>\n </le-slot>\n </div>\n\n <div class=\"end\" part=\"end\">\n <le-slot\n name=\"end\"\n label=\"End\"\n description=\"Actions\"\n allowed-components=\"le-button,le-text,le-tag,le-box,le-stack\"\n >\n <slot name=\"end\"></slot>\n </le-slot>\n </div>\n </div>\n\n <div class=\"secondary\" part=\"secondary\">\n <le-slot\n name=\"\"\n label=\"Secondary\"\n description=\"Secondary row content\"\n allowed-components=\"le-tabs,le-tab-bar,le-select,le-combobox,le-text,le-stack,le-box\"\n >\n <slot></slot>\n </le-slot>\n </div>\n </div>\n </header>\n </le-component>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"le-header.js","sourceRoot":"","sources":["../../../src/components/le-header/le-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\nexport type LeHeaderPosition = 'static' | 'sticky' | 'fixed';\n\n/**\n * A functional page header with scroll-aware behaviors.\n *\n * Features:\n * - Static (default), sticky, or fixed positioning\n * - Optional shrink-on-scroll behavior via `shrink-offset`\n * - Optional reveal-on-scroll-up via `reveal-on-scroll` (sticky only)\n *\n * Slots:\n * - `start`: left side (logo/back button)\n * - `title`: centered/primary title content\n * - `end`: right side actions\n * - default: extra content row (e.g., tabs/search) rendered below main row\n *\n * @slot start - Start area content\n * @slot title - Title content\n * @slot end - End area content\n * @slot - Optional secondary row content\n *\n * @cssprop --le-header-bg - Background (color/gradient)\n * @cssprop --le-header-color - Text color\n * @cssprop --le-header-border - Border (e.g. 1px solid ...)\n * @cssprop --le-header-shadow - Shadow/elevation\n * @cssprop --le-header-max-width - Inner content max width\n * @cssprop --le-header-padding-x - Horizontal padding\n * @cssprop --le-header-padding-y - Vertical padding\n * @cssprop --le-header-gap - Gap between zones\n * @cssprop --le-header-height - Base height (main row)\n * @cssprop --le-header-height-condensed - Condensed height when shrunk\n * @cssprop --le-header-transition - Transition timing\n * @cssprop --le-header-z - Z-index (fixed mode)\n *\n * @csspart header - The header container\n * @csspart inner - Inner max-width container\n * @csspart row - Main row\n * @csspart start - Start zone\n * @csspart title - Title zone\n * @csspart end - End zone\n * @csspart secondary - Secondary row\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-header',\n styleUrl: 'le-header.css',\n shadow: true,\n})\nexport class LeHeader {\n @Element() el: HTMLElement;\n\n /** Force static positioning (default). Ignored if `sticky` or `fixed` are true. */\n @Prop({ attribute: 'static', reflect: true }) isStatic: boolean = false;\n\n /** Sticky positioning (in-flow). Ignored if `fixed` is true. */\n @Prop({ reflect: true }) sticky: boolean = false;\n\n /** Fixed positioning (out-of-flow). Takes precedence over `sticky`/`static`. */\n @Prop({ reflect: true }) fixed: boolean = false;\n\n /**\n * Sticky-only reveal behavior (hide on scroll down, show on scroll up).\n * - missing/false: disabled\n * - true/empty attribute: enabled with default threshold (16)\n * - number (as string): enabled and used as threshold\n */\n @Prop({ attribute: 'reveal-on-scroll', reflect: true }) revealOnScroll?: string;\n\n /**\n * Shrink trigger.\n * - missing/0: disabled\n * - number (px): shrink when scrollY >= that value (but never before header height)\n * - css var name (e.g. --foo): shrink when scrollY >= resolved var value\n * - selector (e.g. .page-title): shrink when that element scrolls out of view above the viewport\n */\n @Prop({ attribute: 'shrink-offset', reflect: true }) shrinkOffset?: string;\n\n /**\n * If true, expand the header when hovered\n */\n @Prop({ attribute: 'expand-on-hover', reflect: true }) expandOnHover: boolean = false;\n\n /** Emits whenever scroll-driven state changes. */\n @Event() leHeaderState: EventEmitter<{\n y: number;\n direction: 'up' | 'down';\n revealed: boolean;\n shrunk: boolean;\n }>;\n\n /** Emits when the header shrinks/expands (only on change). */\n @Event({ bubbles: true, composed: true })\n leHeaderShrinkChange: EventEmitter<{ shrunk: boolean; y: number }>;\n\n /** Emits when the header hides/shows (only on change). */\n @Event({ bubbles: true, composed: true })\n leHeaderVisibilityChange: EventEmitter<{ visible: boolean; y: number }>;\n\n @State() private revealed: boolean = true;\n @State() private shrunk: boolean = false;\n @State() private placeholderHeight: number | null = null;\n @State() private hoverActive: boolean = false;\n\n private disconnectModeObserver?: () => void;\n private rafId: number | null = null;\n private measureRafId: number | null = null;\n private lastY: number = 0;\n private lastEmittedDirection: 'up' | 'down' = 'down';\n private headerEl?: HTMLElement;\n private shrinkSelectorEl?: Element | null;\n\n private setShrunk(next: boolean, y: number) {\n if (next === this.shrunk) return;\n this.shrunk = next;\n this.leHeaderShrinkChange.emit({ shrunk: this.shrunk, y });\n }\n\n componentDidLoad() {\n if (typeof window === 'undefined') return;\n this.lastY = window.scrollY || 0;\n this.scheduleMeasure(true);\n this.scheduleUpdate(true);\n }\n\n disconnectedCallback() {\n this.disconnectModeObserver?.();\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n\n if (this.measureRafId != null) {\n cancelAnimationFrame(this.measureRafId);\n this.measureRafId = null;\n }\n }\n\n @Watch('revealOnScroll')\n @Watch('shrinkOffset')\n @Watch('fixed')\n @Watch('sticky')\n @Watch('isStatic')\n protected onBehaviorPropsChange() {\n this.scheduleUpdate(true);\n this.scheduleMeasure(true);\n }\n\n @Listen('scroll', { target: 'window', passive: true })\n protected onWindowScroll() {\n this.scheduleUpdate();\n }\n\n @Listen('resize', { target: 'window', passive: true })\n protected onWindowResize() {\n this.scheduleMeasure(true);\n this.scheduleUpdate(true);\n }\n\n private getPosition(): LeHeaderPosition {\n if (this.fixed) return 'fixed';\n if (this.sticky) return 'sticky';\n return 'static';\n }\n\n private parseRevealThreshold(): number | null {\n // Only applies in sticky mode.\n if (!this.sticky || this.fixed) return null;\n if (this.revealOnScroll == null) return null;\n const raw = String(this.revealOnScroll).trim();\n if (raw === '' || raw === 'true') return 16;\n if (raw === 'false') return null;\n const n = Number(raw);\n return Number.isFinite(n) ? Math.max(0, n) : 16;\n }\n\n private resolveShrinkStartPx(): number | null {\n const raw = (this.shrinkOffset ?? '').trim();\n if (!raw || raw === '0') return null;\n\n // Numeric\n const numeric = Number(raw);\n if (Number.isFinite(numeric)) return Math.max(0, numeric);\n\n // CSS variable name\n if (raw.startsWith('--')) {\n const value = getComputedStyle(document.documentElement).getPropertyValue(raw).trim();\n const v = Number(value.replace('px', '').trim());\n return Number.isFinite(v) ? Math.max(0, v) : null;\n }\n\n // Selector\n try {\n const el = document.querySelector(raw);\n this.shrinkSelectorEl = el;\n return null;\n } catch {\n this.shrinkSelectorEl = null;\n return null;\n }\n }\n\n private scheduleUpdate(force: boolean = false) {\n if (this.rafId != null) {\n if (!force) return;\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.updateFromScroll();\n });\n }\n\n private scheduleMeasure(force: boolean = false) {\n if (this.measureRafId != null && !force) return;\n this.measureRafId = requestAnimationFrame(() => {\n this.measureRafId = null;\n this.measurePlaceholderHeight();\n });\n }\n\n private measurePlaceholderHeight() {\n // Measure the rendered header height once (and on resize/mode change).\n // This intentionally ignores scroll/shrink behavior; it should reserve the full header height.\n if (!this.headerEl) return;\n\n const next = Math.ceil(this.headerEl.getBoundingClientRect().height);\n if (!Number.isFinite(next) || next <= 0) return;\n\n if (next !== this.placeholderHeight) {\n this.placeholderHeight = next;\n // Publish to global root so placeholders anywhere can read it.\n if (typeof document !== 'undefined') {\n document.documentElement.style.setProperty('--le-header-height', `${next}px`);\n }\n }\n }\n\n private updateFromScroll() {\n const y = typeof window !== 'undefined' ? window.scrollY || 0 : 0;\n const delta = y - this.lastY;\n\n const direction: 'up' | 'down' = delta < 0 ? 'up' : 'down';\n\n // Shrink behavior\n let computedShrunk = false;\n const headerHeight = Math.max(0, this.placeholderHeight ?? 0);\n const shrinkStartPx = typeof window !== 'undefined' ? this.resolveShrinkStartPx() : null;\n\n if (this.shrinkSelectorEl) {\n const rect = (this.shrinkSelectorEl as HTMLElement).getBoundingClientRect();\n computedShrunk = rect.bottom <= 0;\n } else if (shrinkStartPx != null) {\n const effectiveStart = Math.max(shrinkStartPx, headerHeight);\n computedShrunk = y >= effectiveStart;\n }\n\n // Hover override: when enabled and hovered, force expanded.\n const nextShrunk = this.expandOnHover && this.hoverActive ? false : computedShrunk;\n this.setShrunk(nextShrunk, y);\n\n // Reveal-on-scroll (sticky-only)\n const revealThreshold = this.parseRevealThreshold();\n if (revealThreshold != null) {\n // Always show the header near the top of the page.\n const topLock = Math.max(0, this.placeholderHeight ?? 0);\n if (y <= topLock) {\n if (!this.revealed) {\n this.revealed = true;\n this.leHeaderVisibilityChange.emit({ visible: true, y });\n }\n } else if (Math.abs(delta) >= revealThreshold) {\n const nextRevealed = direction === 'up' || y <= 0;\n if (nextRevealed !== this.revealed) {\n this.revealed = nextRevealed;\n this.leHeaderVisibilityChange.emit({ visible: this.revealed, y });\n }\n this.lastEmittedDirection = direction;\n }\n } else {\n if (!this.revealed) {\n this.revealed = true;\n this.leHeaderVisibilityChange.emit({ visible: true, y });\n }\n }\n\n this.lastY = y;\n\n this.leHeaderState.emit({\n y,\n direction: this.lastEmittedDirection,\n revealed: this.revealed,\n shrunk: this.shrunk,\n });\n }\n\n render() {\n const position = this.getPosition();\n\n const hostClass = classnames('le-header', {\n 'header-is-shrunk': this.shrunk,\n 'is-fixed': position === 'fixed',\n 'is-sticky': position === 'sticky',\n 'is-static': position === 'static',\n 'is-revealed': this.revealed,\n 'is-hidden': !this.revealed,\n 'is-shrunk': this.shrunk,\n });\n\n return (\n <Host\n class={hostClass}\n onMouseEnter={() => {\n if (!this.expandOnHover) return;\n this.hoverActive = true;\n this.scheduleUpdate(true);\n }}\n onMouseLeave={() => {\n if (!this.expandOnHover) return;\n this.hoverActive = false;\n this.scheduleUpdate(true);\n }}\n >\n <le-component component=\"le-header\">\n <header\n class=\"header\"\n part=\"header\"\n role=\"banner\"\n ref={el => (this.headerEl = el as HTMLElement)}\n >\n <div class=\"inner\" part=\"inner\">\n <div class=\"row\" part=\"row\">\n <div class=\"start\" part=\"start\">\n <le-slot\n name=\"start\"\n label=\"Start\"\n description=\"Logo / back button / nav\"\n allowed-components=\"le-button,le-text,le-tag,le-box,le-stack\"\n >\n <slot name=\"start\"></slot>\n </le-slot>\n </div>\n\n <div class=\"title\" part=\"title\">\n <le-slot\n name=\"title\"\n label=\"Title\"\n description=\"Header title\"\n type=\"text\"\n tag=\"span\"\n >\n <span class=\"title-slot\" part=\"title\">\n <slot name=\"title\"></slot>\n </span>\n </le-slot>\n </div>\n\n <div class=\"end\" part=\"end\">\n <le-slot\n name=\"end\"\n label=\"End\"\n description=\"Actions\"\n allowed-components=\"le-button,le-text,le-tag,le-box,le-stack\"\n >\n <slot name=\"end\"></slot>\n </le-slot>\n </div>\n </div>\n\n <div class=\"secondary\" part=\"secondary\">\n <le-slot\n name=\"\"\n label=\"Secondary\"\n description=\"Secondary row content\"\n allowed-components=\"le-tabs,le-tab-bar,le-select,le-combobox,le-text,le-stack,le-box\"\n >\n <slot></slot>\n </le-slot>\n </div>\n </div>\n </header>\n </le-component>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -11,7 +11,7 @@ import { h, Host } from "@stencil/core";
|
|
|
11
11
|
*/
|
|
12
12
|
export class LeHeaderPlaceholder {
|
|
13
13
|
render() {
|
|
14
|
-
return (h(Host, { key: '
|
|
14
|
+
return (h(Host, { key: 'b026c810ccb0d5c8df7cdc35a3830ebdf676c614', "aria-hidden": "true", style: {
|
|
15
15
|
display: 'block',
|
|
16
16
|
height: 'var(--le-header-height, 64px)',
|
|
17
17
|
} }));
|
|
@@ -38,18 +38,19 @@ async function fetchIcon({ name }) {
|
|
|
38
38
|
return path;
|
|
39
39
|
}
|
|
40
40
|
export class LeIcon {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
constructor() {
|
|
42
|
+
/**
|
|
43
|
+
* Name of the icon to display. Corresponds to a JSON file in the assets folder.
|
|
44
|
+
* For example, "search" will load the "search.json" file.
|
|
45
|
+
*/
|
|
46
|
+
this.name = null;
|
|
47
|
+
/**
|
|
48
|
+
* Size of the icon in pixels. Default is 16.
|
|
49
|
+
*/
|
|
50
|
+
this.size = 16;
|
|
51
|
+
this.iconData = null;
|
|
52
|
+
this.visible = false;
|
|
53
|
+
}
|
|
53
54
|
async loadIconData() {
|
|
54
55
|
const { name, visible } = this;
|
|
55
56
|
if (!Build.isBrowser || !name || !visible) {
|
|
@@ -57,7 +58,6 @@ export class LeIcon {
|
|
|
57
58
|
}
|
|
58
59
|
this.iconData = await fetchIcon({ name });
|
|
59
60
|
}
|
|
60
|
-
intersectionObserver;
|
|
61
61
|
connectedCallback() {
|
|
62
62
|
this.waitUntilVisible(() => {
|
|
63
63
|
this.visible = true;
|
|
@@ -109,7 +109,7 @@ export class LeIcon {
|
|
|
109
109
|
return svgElements;
|
|
110
110
|
}
|
|
111
111
|
render() {
|
|
112
|
-
return (h("svg", { key: '
|
|
112
|
+
return (h("svg", { key: '15ae743268ab99a174f669436778c2305f4d65df', xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", height: this.size || 16, width: this.size || 16, viewBox: this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}` }, this.renderSVGContent(this.iconData?.children)));
|
|
113
113
|
}
|
|
114
114
|
static get is() { return "le-icon"; }
|
|
115
115
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"le-icon.js","sourceRoot":"","sources":["../../../src/components/le-icon/le-icon.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,SAAS,GAAwB,EAAE,CAAC;AAC1C,MAAM,YAAY,GAAiC,EAAE,CAAC;AAEtD;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,kEAAkE;QAClE,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjF,OAAO,GAAG,cAAc,UAAU,IAAI,OAAO,CAAC;IAChD,CAAC;IACD,4DAA4D;IAC5D,OAAO,YAAY,CAAC,kBAAkB,IAAI,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE;IAC/B,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aACzB,KAAK,CAAC,GAAG,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,+BAA+B,OAAO,EAAE,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvB,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"le-icon.js","sourceRoot":"","sources":["../../../src/components/le-icon/le-icon.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Based on the script from Paul Andreson's article:\n * https://paulcpederson.com/articles/stencil-icons/\n */\nimport { Build, Component, Element, getAssetPath, h, Prop, State, Watch } from '@stencil/core';\nimport { getAssetBasePath } from '../../global/app';\n\nconst iconCache: Record<string, any> = {};\nconst requestCache: Record<string, Promise<any>> = {};\n\n/**\n * Get the URL for loading an icon.\n * Uses configurable assetBasePath if set, otherwise falls back to Stencil's getAssetPath.\n */\nfunction getIconUrl(name: string): string {\n const basePath = getAssetBasePath();\n if (basePath) {\n // Use configured base path - normalize by removing trailing slash\n const normalizedBase = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n return `${normalizedBase}/icons/${name}.json`;\n }\n // Fall back to Stencil's getAssetPath for local development\n return getAssetPath(`./assets/icons/${name}.json`);\n}\n\nasync function fetchIcon({ name }): Promise<string> {\n if (iconCache[name]) {\n return iconCache[name];\n }\n if (!requestCache[name]) {\n const iconUrl = getIconUrl(name);\n requestCache[name] = fetch(iconUrl)\n .then(resp => resp.json())\n .catch(() => {\n console.error(`Icon \"${name}\" could not be loaded from: ${iconUrl}`);\n return '';\n });\n }\n\n const path = await requestCache[name];\n iconCache[name] = path;\n\n return path;\n}\n\n@Component({\n tag: 'le-icon',\n styleUrl: 'le-icon.css',\n shadow: true,\n assetsDirs: ['assets/icons'],\n})\nexport class LeIcon {\n @Element() el: HTMLElement;\n\n /**\n * Name of the icon to display. Corresponds to a JSON file in the assets folder.\n * For example, \"search\" will load the \"search.json\" file.\n */\n @Prop() name: string = null;\n\n /**\n * Size of the icon in pixels. Default is 16.\n */\n @Prop() size: number = 16;\n\n @State() private iconData: any = null;\n\n @State() private visible = false;\n\n @Watch('name') private async loadIconData(): Promise<void> {\n const { name, visible } = this;\n\n if (!Build.isBrowser || !name || !visible) {\n return;\n }\n\n this.iconData = await fetchIcon({ name });\n }\n\n private intersectionObserver: IntersectionObserver;\n\n connectedCallback(): void {\n this.waitUntilVisible(() => {\n this.visible = true;\n this.loadIconData();\n });\n }\n\n disconnectedCallback(): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n async componentWillLoad(): Promise<void> {\n this.loadIconData();\n }\n\n private waitUntilVisible(callback: () => void): void {\n if (\n !Build.isBrowser ||\n typeof window === 'undefined' ||\n !(window as any).IntersectionObserver\n ) {\n callback();\n return;\n }\n\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n callback();\n }\n });\n },\n { rootMargin: '50px' },\n );\n\n this.intersectionObserver.observe(this.el);\n }\n\n /**\n * Renders the SVG content out of a JSON data in a format:\n * { \"viewBox\": \"...\", children: [{ \"tag\": \"g\", \"\"children\": [ ... ], ...attrs }, ...] }\n *\n * @returns JSX.Element | null\n */\n private renderSVGContent(children?: any[]) {\n if (!children || children.length === 0) {\n return null;\n }\n\n const createElement = node => {\n const { tag, children, ...attrs } = node;\n return h(tag, attrs, children ? children.map(createElement) : null);\n };\n\n const svgElements = children.map(createElement);\n return svgElements;\n }\n\n render() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n height={this.size || 16}\n width={this.size || 16}\n viewBox={this.iconData?.viewBox || `0 0 ${this.size || 16} ${this.size || 16}`}\n >\n {this.renderSVGContent(this.iconData?.children)}\n </svg>\n );\n }\n}\n"]}
|
|
@@ -33,81 +33,153 @@ import { h, } from "@stencil/core";
|
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
35
|
export class LeMultiselect {
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
36
|
+
constructor() {
|
|
37
|
+
/**
|
|
38
|
+
* The options to display in the dropdown.
|
|
39
|
+
*/
|
|
40
|
+
this.options = [];
|
|
41
|
+
/**
|
|
42
|
+
* The currently selected values.
|
|
43
|
+
*/
|
|
44
|
+
this.value = [];
|
|
45
|
+
/**
|
|
46
|
+
* Placeholder text when no options are selected.
|
|
47
|
+
*/
|
|
48
|
+
this.placeholder = 'Select options...';
|
|
49
|
+
/**
|
|
50
|
+
* Whether the multiselect is disabled.
|
|
51
|
+
*/
|
|
52
|
+
this.disabled = false;
|
|
53
|
+
/**
|
|
54
|
+
* Whether selection is required.
|
|
55
|
+
*/
|
|
56
|
+
this.required = false;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the multiselect should take full width of its container.
|
|
59
|
+
*/
|
|
60
|
+
this.fullWidth = false;
|
|
61
|
+
/**
|
|
62
|
+
* Size variant of the multiselect.
|
|
63
|
+
*/
|
|
64
|
+
this.size = 'medium';
|
|
65
|
+
/**
|
|
66
|
+
* Labels for the "Select All" option.
|
|
67
|
+
*/
|
|
68
|
+
this.selectAllLabel = 'Select All';
|
|
69
|
+
this.deselectAllLabel = 'Deselect All';
|
|
70
|
+
/**
|
|
71
|
+
* Whether to show a "Select All" option.
|
|
72
|
+
* Also accepts a string or array of strings to customize the label(s).
|
|
73
|
+
*/
|
|
74
|
+
this.showSelectAll = false;
|
|
75
|
+
/**
|
|
76
|
+
* Whether the input is searchable.
|
|
77
|
+
*/
|
|
78
|
+
this.searchable = false;
|
|
79
|
+
/**
|
|
80
|
+
* Text to show when no options match the search.
|
|
81
|
+
*/
|
|
82
|
+
this.emptyText = 'No results found';
|
|
83
|
+
/**
|
|
84
|
+
* Whether the dropdown is currently open.
|
|
85
|
+
*/
|
|
86
|
+
this.open = false;
|
|
87
|
+
this.selectedOptions = [];
|
|
88
|
+
this.searchQuery = '';
|
|
89
|
+
this.filterOption = (option, query) => {
|
|
90
|
+
if (!query)
|
|
91
|
+
return true;
|
|
92
|
+
// Always show "Select All" option
|
|
93
|
+
if (option.value === '__select_all__')
|
|
94
|
+
return true;
|
|
95
|
+
const searchLower = query.toLowerCase();
|
|
96
|
+
return (option.label.toLowerCase().includes(searchLower) ||
|
|
97
|
+
(option.description?.toLowerCase().includes(searchLower) ?? false));
|
|
98
|
+
};
|
|
99
|
+
this.handleOptionSelect = (e) => {
|
|
100
|
+
const { value } = e.detail;
|
|
101
|
+
const enabledOptions = this.parsedOptions.filter(opt => !opt.disabled);
|
|
102
|
+
if (enabledOptions.length === 0)
|
|
103
|
+
return;
|
|
104
|
+
// Handle "Select All" option
|
|
105
|
+
if (value === '__select_all__') {
|
|
106
|
+
if (this.selectedOptions.length === enabledOptions.length) {
|
|
107
|
+
// Deselect all
|
|
108
|
+
this.value = [];
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Select all (respect maxSelections)
|
|
112
|
+
const selectableOptions = this.maxSelections
|
|
113
|
+
? enabledOptions.slice(0, this.maxSelections)
|
|
114
|
+
: enabledOptions;
|
|
115
|
+
this.value = selectableOptions.map(opt => opt.value ?? opt.label);
|
|
116
|
+
}
|
|
117
|
+
this.emitChange();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const isSelected = this.value.includes(value);
|
|
121
|
+
if (isSelected) {
|
|
122
|
+
// Remove from selection
|
|
123
|
+
this.value = this.value.filter(v => v !== value);
|
|
124
|
+
this.selectedOptions = this.selectedOptions.filter(opt => (opt.value ?? opt.label) !== value);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Add to selection (if not at max)
|
|
128
|
+
if (this.maxSelections && this.value.length >= this.maxSelections) {
|
|
129
|
+
return; // Don't add more
|
|
130
|
+
}
|
|
131
|
+
this.value = [...this.value, value];
|
|
132
|
+
}
|
|
133
|
+
this.emitChange();
|
|
134
|
+
// Clear search after szelection
|
|
135
|
+
this.searchQuery = '';
|
|
136
|
+
};
|
|
137
|
+
this.handleDropdownOpen = () => {
|
|
138
|
+
this.open = true;
|
|
139
|
+
this.leOpen.emit();
|
|
140
|
+
// Focus search input if searchable
|
|
141
|
+
if (this.searchable) {
|
|
142
|
+
setTimeout(() => {
|
|
143
|
+
this.inputEl?.focus();
|
|
144
|
+
}, 50);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
this.handleDropdownClose = () => {
|
|
148
|
+
this.open = false;
|
|
149
|
+
this.searchQuery = '';
|
|
150
|
+
this.leClose.emit();
|
|
151
|
+
};
|
|
152
|
+
this.handleTriggerClick = () => {
|
|
153
|
+
if (!this.disabled) {
|
|
154
|
+
this.dropdownEl?.toggle();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
this.handleTriggerKeyDown = (e) => {
|
|
158
|
+
if (this.disabled)
|
|
159
|
+
return;
|
|
160
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
161
|
+
e.preventDefault();
|
|
162
|
+
this.dropdownEl?.show();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
this.handleTagDismiss = (option, e) => {
|
|
166
|
+
e.stopPropagation();
|
|
167
|
+
const value = option.value ?? option.label;
|
|
168
|
+
this.value = this.value.filter(v => v !== value);
|
|
169
|
+
this.selectedOptions = this.selectedOptions.filter(opt => opt !== option);
|
|
170
|
+
this.emitChange();
|
|
171
|
+
};
|
|
172
|
+
this.handleSearchInput = (e) => {
|
|
173
|
+
const target = e.target;
|
|
174
|
+
this.searchQuery = target.value;
|
|
175
|
+
};
|
|
176
|
+
this.handleClearAll = (e) => {
|
|
177
|
+
e.stopPropagation();
|
|
178
|
+
this.value = [];
|
|
179
|
+
this.selectedOptions = [];
|
|
180
|
+
this.emitChange();
|
|
181
|
+
};
|
|
182
|
+
}
|
|
111
183
|
handleValueChange() {
|
|
112
184
|
this.updateSelectedOptions();
|
|
113
185
|
}
|
|
@@ -180,105 +252,12 @@ export class LeMultiselect {
|
|
|
180
252
|
const valueArray = Array.isArray(this.value) ? this.value : [];
|
|
181
253
|
this.selectedOptions = this.parsedOptions.filter(opt => valueArray.includes(opt.value ?? opt.label));
|
|
182
254
|
}
|
|
183
|
-
filterOption = (option, query) => {
|
|
184
|
-
if (!query)
|
|
185
|
-
return true;
|
|
186
|
-
// Always show "Select All" option
|
|
187
|
-
if (option.value === '__select_all__')
|
|
188
|
-
return true;
|
|
189
|
-
const searchLower = query.toLowerCase();
|
|
190
|
-
return (option.label.toLowerCase().includes(searchLower) ||
|
|
191
|
-
(option.description?.toLowerCase().includes(searchLower) ?? false));
|
|
192
|
-
};
|
|
193
|
-
handleOptionSelect = (e) => {
|
|
194
|
-
const { value } = e.detail;
|
|
195
|
-
const enabledOptions = this.parsedOptions.filter(opt => !opt.disabled);
|
|
196
|
-
if (enabledOptions.length === 0)
|
|
197
|
-
return;
|
|
198
|
-
// Handle "Select All" option
|
|
199
|
-
if (value === '__select_all__') {
|
|
200
|
-
if (this.selectedOptions.length === enabledOptions.length) {
|
|
201
|
-
// Deselect all
|
|
202
|
-
this.value = [];
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
// Select all (respect maxSelections)
|
|
206
|
-
const selectableOptions = this.maxSelections
|
|
207
|
-
? enabledOptions.slice(0, this.maxSelections)
|
|
208
|
-
: enabledOptions;
|
|
209
|
-
this.value = selectableOptions.map(opt => opt.value ?? opt.label);
|
|
210
|
-
}
|
|
211
|
-
this.emitChange();
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const isSelected = this.value.includes(value);
|
|
215
|
-
if (isSelected) {
|
|
216
|
-
// Remove from selection
|
|
217
|
-
this.value = this.value.filter(v => v !== value);
|
|
218
|
-
this.selectedOptions = this.selectedOptions.filter(opt => (opt.value ?? opt.label) !== value);
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
// Add to selection (if not at max)
|
|
222
|
-
if (this.maxSelections && this.value.length >= this.maxSelections) {
|
|
223
|
-
return; // Don't add more
|
|
224
|
-
}
|
|
225
|
-
this.value = [...this.value, value];
|
|
226
|
-
}
|
|
227
|
-
this.emitChange();
|
|
228
|
-
// Clear search after szelection
|
|
229
|
-
this.searchQuery = '';
|
|
230
|
-
};
|
|
231
255
|
emitChange() {
|
|
232
256
|
this.leChange.emit({
|
|
233
257
|
values: this.value,
|
|
234
258
|
options: this.selectedOptions,
|
|
235
259
|
});
|
|
236
260
|
}
|
|
237
|
-
handleDropdownOpen = () => {
|
|
238
|
-
this.open = true;
|
|
239
|
-
this.leOpen.emit();
|
|
240
|
-
// Focus search input if searchable
|
|
241
|
-
if (this.searchable) {
|
|
242
|
-
setTimeout(() => {
|
|
243
|
-
this.inputEl?.focus();
|
|
244
|
-
}, 50);
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
handleDropdownClose = () => {
|
|
248
|
-
this.open = false;
|
|
249
|
-
this.searchQuery = '';
|
|
250
|
-
this.leClose.emit();
|
|
251
|
-
};
|
|
252
|
-
handleTriggerClick = () => {
|
|
253
|
-
if (!this.disabled) {
|
|
254
|
-
this.dropdownEl?.toggle();
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
handleTriggerKeyDown = (e) => {
|
|
258
|
-
if (this.disabled)
|
|
259
|
-
return;
|
|
260
|
-
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
261
|
-
e.preventDefault();
|
|
262
|
-
this.dropdownEl?.show();
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
handleTagDismiss = (option, e) => {
|
|
266
|
-
e.stopPropagation();
|
|
267
|
-
const value = option.value ?? option.label;
|
|
268
|
-
this.value = this.value.filter(v => v !== value);
|
|
269
|
-
this.selectedOptions = this.selectedOptions.filter(opt => opt !== option);
|
|
270
|
-
this.emitChange();
|
|
271
|
-
};
|
|
272
|
-
handleSearchInput = (e) => {
|
|
273
|
-
const target = e.target;
|
|
274
|
-
this.searchQuery = target.value;
|
|
275
|
-
};
|
|
276
|
-
handleClearAll = (e) => {
|
|
277
|
-
e.stopPropagation();
|
|
278
|
-
this.value = [];
|
|
279
|
-
this.selectedOptions = [];
|
|
280
|
-
this.emitChange();
|
|
281
|
-
};
|
|
282
261
|
/**
|
|
283
262
|
* Opens the dropdown.
|
|
284
263
|
*/
|
|
@@ -308,13 +287,13 @@ export class LeMultiselect {
|
|
|
308
287
|
render() {
|
|
309
288
|
const hasSelections = this.selectedOptions.length > 0;
|
|
310
289
|
const atMaxSelections = this.maxSelections && this.value.length >= this.maxSelections;
|
|
311
|
-
return (h("le-component", { key: '
|
|
290
|
+
return (h("le-component", { key: 'b22fd0273666745ad4dcfaf5692102d4cbc1946c', component: "le-multiselect" }, h("le-dropdown-base", { key: 'e81736ecb7e4b50fe9d8ea19460271a705baeb80', ref: el => (this.dropdownEl = el), options: this.effectiveOptions, value: this.value, multiple: true, disabled: this.disabled, filterFn: this.searchable ? this.filterOption : undefined, filterQuery: this.searchQuery, emptyText: this.emptyText, showCheckboxes: true, fullWidth: this.fullWidth, onLeOptionSelect: this.handleOptionSelect, onLeDropdownOpen: this.handleDropdownOpen, onLeDropdownClose: this.handleDropdownClose }, h("div", { key: 'cd3e45b676ee7b90c82ae0b2c18684d89bb3f3f8', slot: "trigger", class: {
|
|
312
291
|
'multiselect-trigger': true,
|
|
313
292
|
'has-selections': hasSelections,
|
|
314
293
|
'is-open': this.open,
|
|
315
294
|
'is-disabled': this.disabled,
|
|
316
|
-
}, tabIndex: this.disabled ? -1 : 0, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": this.open ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, this.renderTags(), h("div", { key: '
|
|
317
|
-
this.value.map(val => (h("input", { type: "hidden", name: this.name, value: val.toString(), key: val.toString() }))), atMaxSelections && (h("span", { key: '
|
|
295
|
+
}, tabIndex: this.disabled ? -1 : 0, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": this.open ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, this.renderTags(), h("div", { key: 'dfcb6b8397aec56be4588421b7545ae6caae31b2', class: "multiselect-actions" }, hasSelections && !this.disabled && (h("button", { key: '3ddd374aa458784d7d19f52966ee4f4fa5ca93f1', type: "button", class: "multiselect-clear", onClick: this.handleClearAll, "aria-label": "Clear all", tabIndex: -1 }, h("svg", { key: '1687f1af7277b8489c6de841891439d5f4c77483', viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("path", { key: '864debd4e5ce7f93338bea67f24c1c43e63a4dc3', d: "M4 4l8 8M12 4l-8 8" })))), h("span", { key: '6d2fa2b5aaa3970068d40e4ec4db7c7809dc85cd', class: "multiselect-arrow" }, h("svg", { key: '2fb670f75e9d9ba726c320cfeb6b8d31dd3a6ac4', viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("path", { key: '70429d2d874f30a2a55ac57bf4d758663c048893', d: "M4 6l4 4 4-4" }))))), this.searchable && this.open && (h("div", { key: '1224afb258731403d9c95888b8b3b8fc0f0c1b03', class: "multiselect-search", slot: "header" }, h("le-string-input", { key: 'b8d592186887238ea1acbf5db8d8f9c9cca0656f', mode: "default", inputRef: el => (this.inputEl = el), class: "search-input", placeholder: "Search...", value: this.searchQuery, onInput: this.handleSearchInput })))), this.name &&
|
|
296
|
+
this.value.map(val => (h("input", { type: "hidden", name: this.name, value: val.toString(), key: val.toString() }))), atMaxSelections && (h("span", { key: 'c47d74d5f40c30881e6b8bb35dafe80be85ee41a', class: "multiselect-status" }, "Maximum ", this.maxSelections, " selections"))));
|
|
318
297
|
}
|
|
319
298
|
static get is() { return "le-multiselect"; }
|
|
320
299
|
static get encapsulation() { return "shadow"; }
|