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
|
@@ -10,82 +10,152 @@ const LeMultiselect = class {
|
|
|
10
10
|
this.leChange = index.createEvent(this, "leChange");
|
|
11
11
|
this.leOpen = index.createEvent(this, "leOpen");
|
|
12
12
|
this.leClose = index.createEvent(this, "leClose");
|
|
13
|
+
/**
|
|
14
|
+
* The options to display in the dropdown.
|
|
15
|
+
*/
|
|
16
|
+
this.options = [];
|
|
17
|
+
/**
|
|
18
|
+
* The currently selected values.
|
|
19
|
+
*/
|
|
20
|
+
this.value = [];
|
|
21
|
+
/**
|
|
22
|
+
* Placeholder text when no options are selected.
|
|
23
|
+
*/
|
|
24
|
+
this.placeholder = 'Select options...';
|
|
25
|
+
/**
|
|
26
|
+
* Whether the multiselect is disabled.
|
|
27
|
+
*/
|
|
28
|
+
this.disabled = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether selection is required.
|
|
31
|
+
*/
|
|
32
|
+
this.required = false;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the multiselect should take full width of its container.
|
|
35
|
+
*/
|
|
36
|
+
this.fullWidth = false;
|
|
37
|
+
/**
|
|
38
|
+
* Size variant of the multiselect.
|
|
39
|
+
*/
|
|
40
|
+
this.size = 'medium';
|
|
41
|
+
/**
|
|
42
|
+
* Labels for the "Select All" option.
|
|
43
|
+
*/
|
|
44
|
+
this.selectAllLabel = 'Select All';
|
|
45
|
+
this.deselectAllLabel = 'Deselect All';
|
|
46
|
+
/**
|
|
47
|
+
* Whether to show a "Select All" option.
|
|
48
|
+
* Also accepts a string or array of strings to customize the label(s).
|
|
49
|
+
*/
|
|
50
|
+
this.showSelectAll = false;
|
|
51
|
+
/**
|
|
52
|
+
* Whether the input is searchable.
|
|
53
|
+
*/
|
|
54
|
+
this.searchable = false;
|
|
55
|
+
/**
|
|
56
|
+
* Text to show when no options match the search.
|
|
57
|
+
*/
|
|
58
|
+
this.emptyText = 'No results found';
|
|
59
|
+
/**
|
|
60
|
+
* Whether the dropdown is currently open.
|
|
61
|
+
*/
|
|
62
|
+
this.open = false;
|
|
63
|
+
this.selectedOptions = [];
|
|
64
|
+
this.searchQuery = '';
|
|
65
|
+
this.filterOption = (option, query) => {
|
|
66
|
+
if (!query)
|
|
67
|
+
return true;
|
|
68
|
+
// Always show "Select All" option
|
|
69
|
+
if (option.value === '__select_all__')
|
|
70
|
+
return true;
|
|
71
|
+
const searchLower = query.toLowerCase();
|
|
72
|
+
return (option.label.toLowerCase().includes(searchLower) ||
|
|
73
|
+
(option.description?.toLowerCase().includes(searchLower) ?? false));
|
|
74
|
+
};
|
|
75
|
+
this.handleOptionSelect = (e) => {
|
|
76
|
+
const { value } = e.detail;
|
|
77
|
+
const enabledOptions = this.parsedOptions.filter(opt => !opt.disabled);
|
|
78
|
+
if (enabledOptions.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
// Handle "Select All" option
|
|
81
|
+
if (value === '__select_all__') {
|
|
82
|
+
if (this.selectedOptions.length === enabledOptions.length) {
|
|
83
|
+
// Deselect all
|
|
84
|
+
this.value = [];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Select all (respect maxSelections)
|
|
88
|
+
const selectableOptions = this.maxSelections
|
|
89
|
+
? enabledOptions.slice(0, this.maxSelections)
|
|
90
|
+
: enabledOptions;
|
|
91
|
+
this.value = selectableOptions.map(opt => opt.value ?? opt.label);
|
|
92
|
+
}
|
|
93
|
+
this.emitChange();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const isSelected = this.value.includes(value);
|
|
97
|
+
if (isSelected) {
|
|
98
|
+
// Remove from selection
|
|
99
|
+
this.value = this.value.filter(v => v !== value);
|
|
100
|
+
this.selectedOptions = this.selectedOptions.filter(opt => (opt.value ?? opt.label) !== value);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Add to selection (if not at max)
|
|
104
|
+
if (this.maxSelections && this.value.length >= this.maxSelections) {
|
|
105
|
+
return; // Don't add more
|
|
106
|
+
}
|
|
107
|
+
this.value = [...this.value, value];
|
|
108
|
+
}
|
|
109
|
+
this.emitChange();
|
|
110
|
+
// Clear search after szelection
|
|
111
|
+
this.searchQuery = '';
|
|
112
|
+
};
|
|
113
|
+
this.handleDropdownOpen = () => {
|
|
114
|
+
this.open = true;
|
|
115
|
+
this.leOpen.emit();
|
|
116
|
+
// Focus search input if searchable
|
|
117
|
+
if (this.searchable) {
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
this.inputEl?.focus();
|
|
120
|
+
}, 50);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
this.handleDropdownClose = () => {
|
|
124
|
+
this.open = false;
|
|
125
|
+
this.searchQuery = '';
|
|
126
|
+
this.leClose.emit();
|
|
127
|
+
};
|
|
128
|
+
this.handleTriggerClick = () => {
|
|
129
|
+
if (!this.disabled) {
|
|
130
|
+
this.dropdownEl?.toggle();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
this.handleTriggerKeyDown = (e) => {
|
|
134
|
+
if (this.disabled)
|
|
135
|
+
return;
|
|
136
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
this.dropdownEl?.show();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
this.handleTagDismiss = (option, e) => {
|
|
142
|
+
e.stopPropagation();
|
|
143
|
+
const value = option.value ?? option.label;
|
|
144
|
+
this.value = this.value.filter(v => v !== value);
|
|
145
|
+
this.selectedOptions = this.selectedOptions.filter(opt => opt !== option);
|
|
146
|
+
this.emitChange();
|
|
147
|
+
};
|
|
148
|
+
this.handleSearchInput = (e) => {
|
|
149
|
+
const target = e.target;
|
|
150
|
+
this.searchQuery = target.value;
|
|
151
|
+
};
|
|
152
|
+
this.handleClearAll = (e) => {
|
|
153
|
+
e.stopPropagation();
|
|
154
|
+
this.value = [];
|
|
155
|
+
this.selectedOptions = [];
|
|
156
|
+
this.emitChange();
|
|
157
|
+
};
|
|
13
158
|
}
|
|
14
|
-
get el() { return index.getElement(this); }
|
|
15
|
-
/**
|
|
16
|
-
* The options to display in the dropdown.
|
|
17
|
-
*/
|
|
18
|
-
options = [];
|
|
19
|
-
/**
|
|
20
|
-
* The currently selected values.
|
|
21
|
-
*/
|
|
22
|
-
value = [];
|
|
23
|
-
/**
|
|
24
|
-
* Placeholder text when no options are selected.
|
|
25
|
-
*/
|
|
26
|
-
placeholder = 'Select options...';
|
|
27
|
-
/**
|
|
28
|
-
* Whether the multiselect is disabled.
|
|
29
|
-
*/
|
|
30
|
-
disabled = false;
|
|
31
|
-
/**
|
|
32
|
-
* Whether selection is required.
|
|
33
|
-
*/
|
|
34
|
-
required = false;
|
|
35
|
-
/**
|
|
36
|
-
* Name attribute for form submission.
|
|
37
|
-
*/
|
|
38
|
-
name;
|
|
39
|
-
/**
|
|
40
|
-
* Whether the multiselect should take full width of its container.
|
|
41
|
-
*/
|
|
42
|
-
fullWidth = false;
|
|
43
|
-
/**
|
|
44
|
-
* Size variant of the multiselect.
|
|
45
|
-
*/
|
|
46
|
-
size = 'medium';
|
|
47
|
-
/**
|
|
48
|
-
* Maximum number of selections allowed.
|
|
49
|
-
*/
|
|
50
|
-
maxSelections;
|
|
51
|
-
/**
|
|
52
|
-
* Labels for the "Select All" option.
|
|
53
|
-
*/
|
|
54
|
-
selectAllLabel = 'Select All';
|
|
55
|
-
deselectAllLabel = 'Deselect All';
|
|
56
|
-
/**
|
|
57
|
-
* Whether to show a "Select All" option.
|
|
58
|
-
* Also accepts a string or array of strings to customize the label(s).
|
|
59
|
-
*/
|
|
60
|
-
showSelectAll = false;
|
|
61
|
-
/**
|
|
62
|
-
* Whether the input is searchable.
|
|
63
|
-
*/
|
|
64
|
-
searchable = false;
|
|
65
|
-
/**
|
|
66
|
-
* Text to show when no options match the search.
|
|
67
|
-
*/
|
|
68
|
-
emptyText = 'No results found';
|
|
69
|
-
/**
|
|
70
|
-
* Whether the dropdown is currently open.
|
|
71
|
-
*/
|
|
72
|
-
open = false;
|
|
73
|
-
/**
|
|
74
|
-
* Emitted when the selected values change.
|
|
75
|
-
*/
|
|
76
|
-
leChange;
|
|
77
|
-
/**
|
|
78
|
-
* Emitted when the dropdown opens.
|
|
79
|
-
*/
|
|
80
|
-
leOpen;
|
|
81
|
-
/**
|
|
82
|
-
* Emitted when the dropdown closes.
|
|
83
|
-
*/
|
|
84
|
-
leClose;
|
|
85
|
-
selectedOptions = [];
|
|
86
|
-
searchQuery = '';
|
|
87
|
-
dropdownEl;
|
|
88
|
-
inputEl;
|
|
89
159
|
handleValueChange() {
|
|
90
160
|
this.updateSelectedOptions();
|
|
91
161
|
}
|
|
@@ -158,105 +228,12 @@ const LeMultiselect = class {
|
|
|
158
228
|
const valueArray = Array.isArray(this.value) ? this.value : [];
|
|
159
229
|
this.selectedOptions = this.parsedOptions.filter(opt => valueArray.includes(opt.value ?? opt.label));
|
|
160
230
|
}
|
|
161
|
-
filterOption = (option, query) => {
|
|
162
|
-
if (!query)
|
|
163
|
-
return true;
|
|
164
|
-
// Always show "Select All" option
|
|
165
|
-
if (option.value === '__select_all__')
|
|
166
|
-
return true;
|
|
167
|
-
const searchLower = query.toLowerCase();
|
|
168
|
-
return (option.label.toLowerCase().includes(searchLower) ||
|
|
169
|
-
(option.description?.toLowerCase().includes(searchLower) ?? false));
|
|
170
|
-
};
|
|
171
|
-
handleOptionSelect = (e) => {
|
|
172
|
-
const { value } = e.detail;
|
|
173
|
-
const enabledOptions = this.parsedOptions.filter(opt => !opt.disabled);
|
|
174
|
-
if (enabledOptions.length === 0)
|
|
175
|
-
return;
|
|
176
|
-
// Handle "Select All" option
|
|
177
|
-
if (value === '__select_all__') {
|
|
178
|
-
if (this.selectedOptions.length === enabledOptions.length) {
|
|
179
|
-
// Deselect all
|
|
180
|
-
this.value = [];
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
// Select all (respect maxSelections)
|
|
184
|
-
const selectableOptions = this.maxSelections
|
|
185
|
-
? enabledOptions.slice(0, this.maxSelections)
|
|
186
|
-
: enabledOptions;
|
|
187
|
-
this.value = selectableOptions.map(opt => opt.value ?? opt.label);
|
|
188
|
-
}
|
|
189
|
-
this.emitChange();
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const isSelected = this.value.includes(value);
|
|
193
|
-
if (isSelected) {
|
|
194
|
-
// Remove from selection
|
|
195
|
-
this.value = this.value.filter(v => v !== value);
|
|
196
|
-
this.selectedOptions = this.selectedOptions.filter(opt => (opt.value ?? opt.label) !== value);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
// Add to selection (if not at max)
|
|
200
|
-
if (this.maxSelections && this.value.length >= this.maxSelections) {
|
|
201
|
-
return; // Don't add more
|
|
202
|
-
}
|
|
203
|
-
this.value = [...this.value, value];
|
|
204
|
-
}
|
|
205
|
-
this.emitChange();
|
|
206
|
-
// Clear search after szelection
|
|
207
|
-
this.searchQuery = '';
|
|
208
|
-
};
|
|
209
231
|
emitChange() {
|
|
210
232
|
this.leChange.emit({
|
|
211
233
|
values: this.value,
|
|
212
234
|
options: this.selectedOptions,
|
|
213
235
|
});
|
|
214
236
|
}
|
|
215
|
-
handleDropdownOpen = () => {
|
|
216
|
-
this.open = true;
|
|
217
|
-
this.leOpen.emit();
|
|
218
|
-
// Focus search input if searchable
|
|
219
|
-
if (this.searchable) {
|
|
220
|
-
setTimeout(() => {
|
|
221
|
-
this.inputEl?.focus();
|
|
222
|
-
}, 50);
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
handleDropdownClose = () => {
|
|
226
|
-
this.open = false;
|
|
227
|
-
this.searchQuery = '';
|
|
228
|
-
this.leClose.emit();
|
|
229
|
-
};
|
|
230
|
-
handleTriggerClick = () => {
|
|
231
|
-
if (!this.disabled) {
|
|
232
|
-
this.dropdownEl?.toggle();
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
handleTriggerKeyDown = (e) => {
|
|
236
|
-
if (this.disabled)
|
|
237
|
-
return;
|
|
238
|
-
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
239
|
-
e.preventDefault();
|
|
240
|
-
this.dropdownEl?.show();
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
handleTagDismiss = (option, e) => {
|
|
244
|
-
e.stopPropagation();
|
|
245
|
-
const value = option.value ?? option.label;
|
|
246
|
-
this.value = this.value.filter(v => v !== value);
|
|
247
|
-
this.selectedOptions = this.selectedOptions.filter(opt => opt !== option);
|
|
248
|
-
this.emitChange();
|
|
249
|
-
};
|
|
250
|
-
handleSearchInput = (e) => {
|
|
251
|
-
const target = e.target;
|
|
252
|
-
this.searchQuery = target.value;
|
|
253
|
-
};
|
|
254
|
-
handleClearAll = (e) => {
|
|
255
|
-
e.stopPropagation();
|
|
256
|
-
this.value = [];
|
|
257
|
-
this.selectedOptions = [];
|
|
258
|
-
this.emitChange();
|
|
259
|
-
};
|
|
260
237
|
/**
|
|
261
238
|
* Opens the dropdown.
|
|
262
239
|
*/
|
|
@@ -286,14 +263,15 @@ const LeMultiselect = class {
|
|
|
286
263
|
render() {
|
|
287
264
|
const hasSelections = this.selectedOptions.length > 0;
|
|
288
265
|
const atMaxSelections = this.maxSelections && this.value.length >= this.maxSelections;
|
|
289
|
-
return (index.h("le-component", { key: '
|
|
266
|
+
return (index.h("le-component", { key: 'b22fd0273666745ad4dcfaf5692102d4cbc1946c', component: "le-multiselect" }, index.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 }, index.h("div", { key: 'cd3e45b676ee7b90c82ae0b2c18684d89bb3f3f8', slot: "trigger", class: {
|
|
290
267
|
'multiselect-trigger': true,
|
|
291
268
|
'has-selections': hasSelections,
|
|
292
269
|
'is-open': this.open,
|
|
293
270
|
'is-disabled': this.disabled,
|
|
294
|
-
}, 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(), index.h("div", { key: '
|
|
295
|
-
this.value.map(val => (index.h("input", { type: "hidden", name: this.name, value: val.toString(), key: val.toString() }))), atMaxSelections && (index.h("span", { key: '
|
|
271
|
+
}, 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(), index.h("div", { key: 'dfcb6b8397aec56be4588421b7545ae6caae31b2', class: "multiselect-actions" }, hasSelections && !this.disabled && (index.h("button", { key: '3ddd374aa458784d7d19f52966ee4f4fa5ca93f1', type: "button", class: "multiselect-clear", onClick: this.handleClearAll, "aria-label": "Clear all", tabIndex: -1 }, index.h("svg", { key: '1687f1af7277b8489c6de841891439d5f4c77483', viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("path", { key: '864debd4e5ce7f93338bea67f24c1c43e63a4dc3', d: "M4 4l8 8M12 4l-8 8" })))), index.h("span", { key: '6d2fa2b5aaa3970068d40e4ec4db7c7809dc85cd', class: "multiselect-arrow" }, index.h("svg", { key: '2fb670f75e9d9ba726c320cfeb6b8d31dd3a6ac4', viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("path", { key: '70429d2d874f30a2a55ac57bf4d758663c048893', d: "M4 6l4 4 4-4" }))))), this.searchable && this.open && (index.h("div", { key: '1224afb258731403d9c95888b8b3b8fc0f0c1b03', class: "multiselect-search", slot: "header" }, index.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 &&
|
|
272
|
+
this.value.map(val => (index.h("input", { type: "hidden", name: this.name, value: val.toString(), key: val.toString() }))), atMaxSelections && (index.h("span", { key: 'c47d74d5f40c30881e6b8bb35dafe80be85ee41a', class: "multiselect-status" }, "Maximum ", this.maxSelections, " selections"))));
|
|
296
273
|
}
|
|
274
|
+
get el() { return index.getElement(this); }
|
|
297
275
|
static get watchers() { return {
|
|
298
276
|
"value": ["handleValueChange"],
|
|
299
277
|
"options": ["handleOptionsChange"],
|
|
@@ -10,73 +10,94 @@ const LeNumberInput = class {
|
|
|
10
10
|
index.registerInstance(this, hostRef);
|
|
11
11
|
this.leChange = index.createEvent(this, "leChange");
|
|
12
12
|
this.leInput = index.createEvent(this, "leInput");
|
|
13
|
+
/**
|
|
14
|
+
* Step value for increment/decrement
|
|
15
|
+
*/
|
|
16
|
+
this.step = 1;
|
|
17
|
+
/**
|
|
18
|
+
* Whether the input is required
|
|
19
|
+
*/
|
|
20
|
+
this.required = false;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the input is disabled
|
|
23
|
+
*/
|
|
24
|
+
this.disabled = false;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the input is read-only
|
|
27
|
+
*/
|
|
28
|
+
this.readonly = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to show the spinner controls
|
|
31
|
+
*/
|
|
32
|
+
this.showSpinners = true;
|
|
33
|
+
/**
|
|
34
|
+
* Internal validation state
|
|
35
|
+
*/
|
|
36
|
+
this.isValid = true;
|
|
37
|
+
this.validationMessage = '';
|
|
38
|
+
this.handleInput = (ev) => {
|
|
39
|
+
const input = ev.target;
|
|
40
|
+
const val = parseFloat(input.value);
|
|
41
|
+
if (input.value === '') {
|
|
42
|
+
this.value = undefined;
|
|
43
|
+
}
|
|
44
|
+
else if (!isNaN(val)) {
|
|
45
|
+
this.value = val;
|
|
46
|
+
}
|
|
47
|
+
this.validate();
|
|
48
|
+
this.emitInput();
|
|
49
|
+
};
|
|
50
|
+
this.handleChange = () => {
|
|
51
|
+
this.validate();
|
|
52
|
+
this.emitChange();
|
|
53
|
+
};
|
|
54
|
+
this.handleKeyDown = (ev) => {
|
|
55
|
+
if (this.disabled || this.readonly)
|
|
56
|
+
return;
|
|
57
|
+
let multiplier = 1;
|
|
58
|
+
if (ev.shiftKey)
|
|
59
|
+
multiplier = 10;
|
|
60
|
+
if (ev.altKey)
|
|
61
|
+
multiplier = 0.1;
|
|
62
|
+
const current = this.value || 0;
|
|
63
|
+
if (ev.key === 'ArrowUp') {
|
|
64
|
+
ev.preventDefault();
|
|
65
|
+
this.updateValue(current + (this.step * multiplier));
|
|
66
|
+
}
|
|
67
|
+
else if (ev.key === 'ArrowDown') {
|
|
68
|
+
ev.preventDefault();
|
|
69
|
+
this.updateValue(current - (this.step * multiplier));
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
this.handleWheel = (ev) => {
|
|
73
|
+
if (this.disabled || this.readonly)
|
|
74
|
+
return;
|
|
75
|
+
// Only handle if input is focused to prevent accidental scrolling
|
|
76
|
+
if (document.activeElement !== ev.target)
|
|
77
|
+
return;
|
|
78
|
+
ev.preventDefault();
|
|
79
|
+
const current = this.value || 0;
|
|
80
|
+
if (ev.deltaY < 0) {
|
|
81
|
+
this.updateValue(current + this.step);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.updateValue(current - this.step);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
this.increment = (ev) => {
|
|
88
|
+
ev.preventDefault(); // Prevent focus loss
|
|
89
|
+
const current = this.value || 0;
|
|
90
|
+
this.updateValue(current + this.step);
|
|
91
|
+
// Trigger change event for buttons as they are "final" actions usually
|
|
92
|
+
this.emitChange();
|
|
93
|
+
};
|
|
94
|
+
this.decrement = (ev) => {
|
|
95
|
+
ev.preventDefault();
|
|
96
|
+
const current = this.value || 0;
|
|
97
|
+
this.updateValue(current - this.step);
|
|
98
|
+
this.emitChange();
|
|
99
|
+
};
|
|
13
100
|
}
|
|
14
|
-
get el() { return index.getElement(this); }
|
|
15
|
-
/**
|
|
16
|
-
* The value of the input
|
|
17
|
-
*/
|
|
18
|
-
value;
|
|
19
|
-
/**
|
|
20
|
-
* The name of the input
|
|
21
|
-
*/
|
|
22
|
-
name;
|
|
23
|
-
/**
|
|
24
|
-
* Label for the input
|
|
25
|
-
*/
|
|
26
|
-
label;
|
|
27
|
-
/**
|
|
28
|
-
* Placeholder text
|
|
29
|
-
*/
|
|
30
|
-
placeholder;
|
|
31
|
-
/**
|
|
32
|
-
* Minimum allowed value
|
|
33
|
-
*/
|
|
34
|
-
min;
|
|
35
|
-
/**
|
|
36
|
-
* Maximum allowed value
|
|
37
|
-
*/
|
|
38
|
-
max;
|
|
39
|
-
/**
|
|
40
|
-
* Step value for increment/decrement
|
|
41
|
-
*/
|
|
42
|
-
step = 1;
|
|
43
|
-
/**
|
|
44
|
-
* Whether the input is required
|
|
45
|
-
*/
|
|
46
|
-
required = false;
|
|
47
|
-
/**
|
|
48
|
-
* Whether the input is disabled
|
|
49
|
-
*/
|
|
50
|
-
disabled = false;
|
|
51
|
-
/**
|
|
52
|
-
* Whether the input is read-only
|
|
53
|
-
*/
|
|
54
|
-
readonly = false;
|
|
55
|
-
/**
|
|
56
|
-
* Icon for the start icon
|
|
57
|
-
*/
|
|
58
|
-
iconStart;
|
|
59
|
-
/**
|
|
60
|
-
* Whether to show the spinner controls
|
|
61
|
-
*/
|
|
62
|
-
showSpinners = true;
|
|
63
|
-
/**
|
|
64
|
-
* External ID for linking with external systems
|
|
65
|
-
*/
|
|
66
|
-
externalId;
|
|
67
|
-
/**
|
|
68
|
-
* Internal validation state
|
|
69
|
-
*/
|
|
70
|
-
isValid = true;
|
|
71
|
-
validationMessage = '';
|
|
72
|
-
/**
|
|
73
|
-
* Emitted when the value changes (on blur or Enter)
|
|
74
|
-
*/
|
|
75
|
-
leChange;
|
|
76
|
-
/**
|
|
77
|
-
* Emitted when the input value changes (on keystroke/spin)
|
|
78
|
-
*/
|
|
79
|
-
leInput;
|
|
80
101
|
valueChanged() {
|
|
81
102
|
this.validate();
|
|
82
103
|
}
|
|
@@ -127,71 +148,10 @@ const LeNumberInput = class {
|
|
|
127
148
|
this.validate();
|
|
128
149
|
this.emitInput();
|
|
129
150
|
}
|
|
130
|
-
handleInput = (ev) => {
|
|
131
|
-
const input = ev.target;
|
|
132
|
-
const val = parseFloat(input.value);
|
|
133
|
-
if (input.value === '') {
|
|
134
|
-
this.value = undefined;
|
|
135
|
-
}
|
|
136
|
-
else if (!isNaN(val)) {
|
|
137
|
-
this.value = val;
|
|
138
|
-
}
|
|
139
|
-
this.validate();
|
|
140
|
-
this.emitInput();
|
|
141
|
-
};
|
|
142
|
-
handleChange = () => {
|
|
143
|
-
this.validate();
|
|
144
|
-
this.emitChange();
|
|
145
|
-
};
|
|
146
|
-
handleKeyDown = (ev) => {
|
|
147
|
-
if (this.disabled || this.readonly)
|
|
148
|
-
return;
|
|
149
|
-
let multiplier = 1;
|
|
150
|
-
if (ev.shiftKey)
|
|
151
|
-
multiplier = 10;
|
|
152
|
-
if (ev.altKey)
|
|
153
|
-
multiplier = 0.1;
|
|
154
|
-
const current = this.value || 0;
|
|
155
|
-
if (ev.key === 'ArrowUp') {
|
|
156
|
-
ev.preventDefault();
|
|
157
|
-
this.updateValue(current + (this.step * multiplier));
|
|
158
|
-
}
|
|
159
|
-
else if (ev.key === 'ArrowDown') {
|
|
160
|
-
ev.preventDefault();
|
|
161
|
-
this.updateValue(current - (this.step * multiplier));
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
handleWheel = (ev) => {
|
|
165
|
-
if (this.disabled || this.readonly)
|
|
166
|
-
return;
|
|
167
|
-
// Only handle if input is focused to prevent accidental scrolling
|
|
168
|
-
if (document.activeElement !== ev.target)
|
|
169
|
-
return;
|
|
170
|
-
ev.preventDefault();
|
|
171
|
-
const current = this.value || 0;
|
|
172
|
-
if (ev.deltaY < 0) {
|
|
173
|
-
this.updateValue(current + this.step);
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.updateValue(current - this.step);
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
increment = (ev) => {
|
|
180
|
-
ev.preventDefault(); // Prevent focus loss
|
|
181
|
-
const current = this.value || 0;
|
|
182
|
-
this.updateValue(current + this.step);
|
|
183
|
-
// Trigger change event for buttons as they are "final" actions usually
|
|
184
|
-
this.emitChange();
|
|
185
|
-
};
|
|
186
|
-
decrement = (ev) => {
|
|
187
|
-
ev.preventDefault();
|
|
188
|
-
const current = this.value || 0;
|
|
189
|
-
this.updateValue(current - this.step);
|
|
190
|
-
this.emitChange();
|
|
191
|
-
};
|
|
192
151
|
render() {
|
|
193
|
-
return (index.h("le-component", { key: '
|
|
152
|
+
return (index.h("le-component", { key: '3448b68633e7ebde8e6175f29047791c9094dc49', component: "le-number-input", hostClass: utils.classnames({ 'disabled': this.disabled }) }, index.h("div", { key: 'd941698c42e2dd9a5b2dbe60decfa9692c840c1a', class: "le-input-wrapper" }, this.label && (index.h("label", { key: 'c2b255bf365937e2233835ef6564b81f8a1872a5', class: "le-input-label", htmlFor: this.name }, this.label)), index.h("div", { key: '6090fe6737015bc1cd87ef881276975870e6797c', class: utils.classnames('le-input-container', { 'has-error': !this.isValid }) }, this.iconStart && (index.h("span", { key: 'e453aa8eb57857540b29d78c3f61ec371be6c71a', class: "icon-start" }, this.iconStart)), index.h("input", { key: '3e9d52dbfcc1bac000e0ca9663595aaac8f42d85', id: this.name, type: "number", name: this.name, placeholder: this.placeholder, min: this.min, max: this.max, step: this.step, value: this.value, disabled: this.disabled, readOnly: this.readonly, required: this.required, onInput: this.handleInput, onChange: this.handleChange, onKeyDown: this.handleKeyDown, onWheel: this.handleWheel }), this.showSpinners && (index.h("div", { key: 'dd4e42f8a9916574e61643dbe90bae50e2defb77', class: "le-input-controls" }, index.h("le-button", { key: '5aa823b516f6f71a26b5749959dec30fac2b65b3', mode: "default", variant: "clear", size: "small", "icon-only": true, class: "le-input-control-btn", onClick: this.increment, disabled: this.disabled || this.readonly || (this.max !== undefined && this.value >= this.max), tabindex: "-1" }, index.h("span", { key: 'c1858ce8cf23de1610ac6e957bd40ec2fe7a97ea', slot: "icon-only" }, "\u2191")), index.h("le-button", { key: '71982d4f725dc9a94144033e2b328f33699264e4', mode: "default", variant: "clear", size: "small", "icon-only": true, class: "le-input-control-btn", onClick: this.decrement, disabled: this.disabled || this.readonly || (this.min !== undefined && this.value <= this.min), tabindex: "-1" }, index.h("span", { key: '0c5225558cf4adf80e63dcfafe1bb83d80fbb7dd', slot: "icon-only" }, "\u2193"))))), !this.isValid && index.h("div", { key: 'd97bc87f564b9a23dac85b518895e7ffcbd72aa8', class: "le-input-error" }, this.validationMessage), index.h("div", { key: '257757f47a84f40c48e98672d6217ec565f37cce', class: "le-input-description" }, index.h("le-slot", { key: '89c69d0be6c3ef9975d2b2ab21f65c916067d452', name: "description", type: "text", tag: "p", label: "Description" }, index.h("slot", { key: '9dffb85d1c8e2463d05a514b1659d0ac3eee802e', name: "description" }))))));
|
|
194
153
|
}
|
|
154
|
+
get el() { return index.getElement(this); }
|
|
195
155
|
static get watchers() { return {
|
|
196
156
|
"value": ["valueChanged"]
|
|
197
157
|
}; }
|
|
@@ -7,27 +7,21 @@ const leRoundProgressCss = () => `.round-progress--container{position:relative}.
|
|
|
7
7
|
const LeRoundProgress = class {
|
|
8
8
|
constructor(hostRef) {
|
|
9
9
|
index.registerInstance(this, hostRef);
|
|
10
|
+
// progress value coming from an attribute
|
|
11
|
+
this.value = 0;
|
|
12
|
+
// padding value coming from an attribute
|
|
13
|
+
this.padding = 0;
|
|
10
14
|
}
|
|
11
|
-
get el() { return index.getElement(this); }
|
|
12
|
-
// progress value coming from an attribute
|
|
13
|
-
value = 0;
|
|
14
15
|
updateValue(newValue) {
|
|
15
16
|
this.value = parseFloat(newValue);
|
|
16
17
|
}
|
|
17
|
-
// padding value coming from an attribute
|
|
18
|
-
padding = 0;
|
|
19
18
|
updatePadding(newValue) {
|
|
20
19
|
this.padding = parseFloat(newValue);
|
|
21
20
|
this.calcParams();
|
|
22
21
|
}
|
|
23
|
-
// the progress backgrounds can be as many as needed
|
|
24
|
-
// but it should be JSON format: double quotes and strict commas
|
|
25
|
-
paths;
|
|
26
22
|
updateProgressBackgrounds(newValue) {
|
|
27
23
|
this.progressPaths = JSON.parse(newValue);
|
|
28
24
|
}
|
|
29
|
-
progressPaths;
|
|
30
|
-
params;
|
|
31
25
|
/**
|
|
32
26
|
* Component lifecycles
|
|
33
27
|
*
|
|
@@ -92,8 +86,9 @@ const LeRoundProgress = class {
|
|
|
92
86
|
return (index.h("svg", { viewBox: this.getViewBox(), class: "round-progress" }, paths));
|
|
93
87
|
}
|
|
94
88
|
render() {
|
|
95
|
-
return (index.h("div", { key: '
|
|
89
|
+
return (index.h("div", { key: '5a51e57f587b1c065bc63091a4d824006ffb0547', class: "round-progress--container" }, this.getPaths(), index.h("svg", { key: '12ca2118e9f5ff3dc472f1d20a4a4d4dbd3b97c0', viewBox: this.getViewBox(), class: "round-progress round-progress--progress" }, index.h("path", { key: '7fb75f5b03fe34d4a0f9ecdba94db95ba59a7756', class: "round-progress--circle", "stroke-dasharray": this.getStrokeDashArray(), d: this.getPath() })), index.h("slot", { key: 'a855a01d4332479f6488d1e7a7760d70e29eb707' })));
|
|
96
90
|
}
|
|
91
|
+
get el() { return index.getElement(this); }
|
|
97
92
|
static get watchers() { return {
|
|
98
93
|
"value": ["updateValue"],
|
|
99
94
|
"padding": ["updatePadding"],
|