le-kit 0.1.13 → 0.1.15
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/dist/cjs/{index-o1DRKw1g.js → index-C3iQZ-Ja.js} +7 -7
- package/dist/cjs/index-C3iQZ-Ja.js.map +1 -0
- package/dist/cjs/index.cjs.js +4 -3
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/le-box.cjs.entry.js +2 -2
- package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-popup.le-slot.le-string-input.entry.cjs.js.map +1 -0
- package/dist/cjs/{le-button_6.cjs.entry.js → le-button_7.cjs.entry.js} +279 -33
- package/dist/cjs/le-card.cjs.entry.js +2 -2
- package/dist/cjs/le-combobox.cjs.entry.js +237 -0
- package/dist/cjs/le-combobox.entry.cjs.js.map +1 -0
- package/dist/cjs/le-dropdown-base.cjs.entry.js +348 -0
- package/dist/cjs/le-dropdown-base.entry.cjs.js.map +1 -0
- package/dist/cjs/le-kit.cjs.js +2 -2
- package/dist/cjs/le-multiselect.cjs.entry.js +306 -0
- package/dist/cjs/le-multiselect.entry.cjs.js.map +1 -0
- package/dist/cjs/le-number-input.cjs.entry.js +3 -3
- package/dist/cjs/le-round-progress.cjs.entry.js +2 -2
- package/dist/cjs/le-segmented-control.cjs.entry.js +245 -0
- package/dist/cjs/le-segmented-control.entry.cjs.js.map +1 -0
- package/dist/cjs/le-select.cjs.entry.js +188 -0
- package/dist/cjs/le-select.entry.cjs.js.map +1 -0
- package/dist/cjs/le-stack.cjs.entry.js +3 -3
- package/dist/cjs/le-tab-bar.cjs.entry.js +242 -0
- package/dist/cjs/le-tab-bar.entry.cjs.js.map +1 -0
- package/dist/cjs/le-tab-panel.cjs.entry.js +100 -0
- package/dist/cjs/le-tab-panel.entry.cjs.js.map +1 -0
- package/dist/cjs/le-tab.cjs.entry.js +133 -0
- package/dist/cjs/le-tab.entry.cjs.js.map +1 -0
- package/dist/cjs/le-tabs.cjs.entry.js +307 -0
- package/dist/cjs/le-tabs.entry.cjs.js.map +1 -0
- package/dist/cjs/le-tag.cjs.entry.js +68 -0
- package/dist/cjs/le-tag.entry.cjs.js.map +1 -0
- package/dist/cjs/le-text.cjs.entry.js +2 -2
- package/dist/cjs/le-turntable.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{utils-DqhadIxH.js → utils-DjPcLPN9.js} +3 -3
- package/dist/cjs/{utils-DqhadIxH.js.map → utils-DjPcLPN9.js.map} +1 -1
- package/dist/collection/collection-manifest.json +10 -0
- package/dist/collection/components/le-button/{le-button.default.css → le-button.css} +57 -30
- package/dist/collection/components/le-button/le-button.js +105 -15
- package/dist/collection/components/le-button/le-button.js.map +1 -1
- package/dist/collection/components/le-combobox/le-combobox.css +144 -0
- package/dist/collection/components/le-combobox/le-combobox.js +659 -0
- package/dist/collection/components/le-combobox/le-combobox.js.map +1 -0
- package/dist/collection/components/le-component/le-component.js +7 -6
- package/dist/collection/components/le-component/le-component.js.map +1 -1
- package/dist/collection/components/le-dropdown-base/le-dropdown-base.css +163 -0
- package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +761 -0
- package/dist/collection/components/le-dropdown-base/le-dropdown-base.js.map +1 -0
- package/dist/collection/components/le-multiselect/le-multiselect.css +163 -0
- package/dist/collection/components/le-multiselect/le-multiselect.js +734 -0
- package/dist/collection/components/le-multiselect/le-multiselect.js.map +1 -0
- package/dist/collection/components/le-number-input/le-number-input.js +1 -1
- package/dist/collection/components/le-popover/le-popover.css +10 -0
- package/dist/collection/components/le-popover/le-popover.js +61 -10
- package/dist/collection/components/le-popover/le-popover.js.map +1 -1
- package/dist/collection/components/le-popup/le-popup.api.js +2 -1
- package/dist/collection/components/le-popup/le-popup.api.js.map +1 -1
- package/dist/collection/components/le-popup/le-popup.js +42 -12
- package/dist/collection/components/le-popup/le-popup.js.map +1 -1
- package/dist/collection/components/le-round-progress/le-round-progress.js +1 -1
- package/dist/collection/components/le-segmented-control/le-segmented-control.css +78 -0
- package/dist/collection/components/le-segmented-control/le-segmented-control.js +445 -0
- package/dist/collection/components/le-segmented-control/le-segmented-control.js.map +1 -0
- package/dist/collection/components/le-select/le-select.css +121 -0
- package/dist/collection/components/le-select/le-select.js +578 -0
- package/dist/collection/components/le-select/le-select.js.map +1 -0
- package/dist/collection/components/le-slot/le-slot.js +4 -6
- package/dist/collection/components/le-slot/le-slot.js.map +1 -1
- package/dist/collection/components/le-stack/le-stack.js +1 -1
- package/dist/collection/components/le-string-input/le-string-input.js +59 -5
- package/dist/collection/components/le-string-input/le-string-input.js.map +1 -1
- package/dist/collection/components/le-tab/le-tab.css +289 -0
- package/dist/collection/components/le-tab/le-tab.js +565 -0
- package/dist/collection/components/le-tab/le-tab.js.map +1 -0
- package/dist/collection/components/le-tab-bar/le-tab-bar.css +89 -0
- package/dist/collection/components/le-tab-bar/le-tab-bar.js +467 -0
- package/dist/collection/components/le-tab-bar/le-tab-bar.js.map +1 -0
- package/dist/collection/components/le-tab-panel/le-tab-panel.css +30 -0
- package/dist/collection/components/le-tab-panel/le-tab-panel.js +302 -0
- package/dist/collection/components/le-tab-panel/le-tab-panel.js.map +1 -0
- package/dist/collection/components/le-tabs/le-tabs.css +146 -0
- package/dist/collection/components/le-tabs/le-tabs.js +588 -0
- package/dist/collection/components/le-tabs/le-tabs.js.map +1 -0
- package/dist/collection/components/le-tag/le-tag.css +139 -0
- package/dist/collection/components/le-tag/le-tag.js +266 -0
- package/dist/collection/components/le-tag/le-tag.js.map +1 -0
- package/dist/collection/components/le-turntable/le-turntable.js +1 -1
- package/dist/collection/dist/components/assets/.gitkeep +1 -0
- package/{custom-elements.json → dist/collection/dist/components/assets/custom-elements.json} +5274 -1409
- package/dist/{core/collection → collection/dist/components}/themes/base.css +44 -0
- package/dist/{core/collection → collection/dist/components}/themes/dark.css +4 -1
- package/dist/collection/{themes → dist/components/themes}/default.css +4 -1
- package/dist/collection/dist/{collection → components}/themes/gradient.css +4 -1
- package/dist/{core/collection → collection/dist/components}/themes/index.css +2 -0
- package/dist/collection/{themes → dist/components/themes}/minimal.css +4 -1
- package/dist/{core/collection → collection/dist/components}/themes/warm.css +4 -1
- package/dist/collection/global/app.js +4 -4
- package/dist/collection/global/app.js.map +1 -1
- package/dist/collection/types/options.js.map +1 -1
- package/dist/components/assets/.gitkeep +1 -0
- package/dist/{collection → components}/assets/custom-elements.json +5202 -1337
- package/dist/components/index.js +1 -103
- package/dist/components/index.js.map +1 -1
- package/dist/components/le-box.js +11 -6
- package/dist/components/le-box.js.map +1 -1
- package/dist/components/le-button.js +1 -1
- package/dist/components/le-button2.js +378 -45
- package/dist/components/le-button2.js.map +1 -1
- package/dist/components/le-card.js +11 -6
- package/dist/components/le-card.js.map +1 -1
- package/dist/components/le-checkbox.js +1 -1
- package/dist/components/le-combobox.d.ts +11 -0
- package/dist/components/le-combobox.js +321 -0
- package/dist/components/le-combobox.js.map +1 -0
- package/dist/components/le-component.js +1 -1
- package/dist/components/le-dropdown-base.d.ts +11 -0
- package/dist/components/le-dropdown-base.js +9 -0
- package/dist/components/le-dropdown-base.js.map +1 -0
- package/dist/components/le-dropdown-base2.js +393 -0
- package/dist/components/le-dropdown-base2.js.map +1 -0
- package/dist/components/le-multiselect.d.ts +11 -0
- package/dist/components/le-multiselect.js +400 -0
- package/dist/components/le-multiselect.js.map +1 -0
- package/dist/components/le-number-input.js +12 -7
- package/dist/components/le-number-input.js.map +1 -1
- package/dist/components/le-popover2.js +24 -11
- package/dist/components/le-popover2.js.map +1 -1
- package/dist/{core/collection/components/le-popup → components}/le-popup.api.js +9 -4
- package/dist/components/le-popup.api.js.map +1 -0
- package/dist/components/le-popup.js +1 -271
- package/dist/components/le-popup.js.map +1 -1
- package/dist/components/le-round-progress.js +1 -1
- package/dist/components/le-segmented-control.d.ts +11 -0
- package/dist/components/le-segmented-control.js +320 -0
- package/dist/components/le-segmented-control.js.map +1 -0
- package/dist/components/le-select.d.ts +11 -0
- package/dist/components/le-select.js +271 -0
- package/dist/components/le-select.js.map +1 -0
- package/dist/components/le-slot.js +1 -1
- package/dist/components/le-stack.js +12 -7
- package/dist/components/le-stack.js.map +1 -1
- package/dist/components/le-string-input.js +1 -1
- package/dist/components/le-tab-bar.d.ts +11 -0
- package/dist/components/le-tab-bar.js +319 -0
- package/dist/components/le-tab-bar.js.map +1 -0
- package/dist/components/le-tab-panel.d.ts +11 -0
- package/dist/components/le-tab-panel.js +171 -0
- package/dist/components/le-tab-panel.js.map +1 -0
- package/dist/components/le-tab.d.ts +11 -0
- package/dist/components/le-tab.js +9 -0
- package/dist/components/le-tab.js.map +1 -0
- package/dist/components/le-tab2.js +206 -0
- package/dist/components/le-tab2.js.map +1 -0
- package/dist/components/le-tabs.d.ts +11 -0
- package/dist/components/le-tabs.js +386 -0
- package/dist/components/le-tabs.js.map +1 -0
- package/dist/components/le-tag.d.ts +11 -0
- package/dist/components/le-tag.js +9 -0
- package/dist/components/le-tag.js.map +1 -0
- package/dist/components/le-tag2.js +130 -0
- package/dist/components/le-tag2.js.map +1 -0
- package/dist/components/le-text.js +11 -6
- package/dist/components/le-text.js.map +1 -1
- package/dist/components/le-turntable.js +1 -1
- package/dist/{le-kit/dist/collection → components}/themes/base.css +44 -0
- package/dist/{collection → components}/themes/dark.css +4 -1
- package/dist/{core/collection → components}/themes/default.css +4 -1
- package/dist/{core/collection → components}/themes/gradient.css +4 -1
- package/dist/{le-kit/dist/collection → components}/themes/index.css +2 -0
- package/dist/{collection/dist/collection → components}/themes/minimal.css +4 -1
- package/dist/{le-kit/dist/collection → components}/themes/warm.css +4 -1
- package/dist/components/utils.js +4 -4
- package/dist/components/utils.js.map +1 -1
- package/dist/docs.json +6674 -1371
- package/dist/esm/{index-CwNQ1GTa.js → index-DzgCnDLJ.js} +8 -8
- package/dist/esm/index-DzgCnDLJ.js.map +1 -0
- package/dist/esm/index.js +4 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/le-box.entry.js +2 -2
- package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-popup.le-slot.le-string-input.entry.js.map +1 -0
- package/dist/esm/{le-button_6.entry.js → le-button_7.entry.js} +279 -34
- package/dist/esm/le-card.entry.js +2 -2
- package/dist/esm/le-combobox.entry.js +235 -0
- package/dist/esm/le-combobox.entry.js.map +1 -0
- package/dist/esm/le-dropdown-base.entry.js +346 -0
- package/dist/esm/le-dropdown-base.entry.js.map +1 -0
- package/dist/esm/le-kit.js +3 -3
- package/dist/esm/le-multiselect.entry.js +304 -0
- package/dist/esm/le-multiselect.entry.js.map +1 -0
- package/dist/esm/le-number-input.entry.js +3 -3
- package/dist/esm/le-round-progress.entry.js +2 -2
- package/dist/esm/le-segmented-control.entry.js +243 -0
- package/dist/esm/le-segmented-control.entry.js.map +1 -0
- package/dist/esm/le-select.entry.js +186 -0
- package/dist/esm/le-select.entry.js.map +1 -0
- package/dist/esm/le-stack.entry.js +3 -3
- package/dist/esm/le-tab-bar.entry.js +240 -0
- package/dist/esm/le-tab-bar.entry.js.map +1 -0
- package/dist/esm/le-tab-panel.entry.js +98 -0
- package/dist/esm/le-tab-panel.entry.js.map +1 -0
- package/dist/esm/le-tab.entry.js +131 -0
- package/dist/esm/le-tab.entry.js.map +1 -0
- package/dist/esm/le-tabs.entry.js +305 -0
- package/dist/esm/le-tabs.entry.js.map +1 -0
- package/dist/esm/le-tag.entry.js +66 -0
- package/dist/esm/le-tag.entry.js.map +1 -0
- package/dist/esm/le-text.entry.js +2 -2
- package/dist/esm/le-turntable.entry.js +2 -2
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{utils-Cf7fMI0j.js → utils-Dp5xFMCl.js} +3 -3
- package/dist/esm/{utils-Cf7fMI0j.js.map → utils-Dp5xFMCl.js.map} +1 -1
- package/dist/le-kit/dist/components/assets/.gitkeep +1 -0
- package/dist/{core/collection → le-kit/dist/components}/assets/custom-elements.json +5202 -1337
- package/dist/{collection/dist/collection → le-kit/dist/components}/themes/base.css +44 -0
- package/dist/{collection/dist/collection → le-kit/dist/components}/themes/dark.css +4 -1
- package/dist/le-kit/dist/{collection → components}/themes/default.css +4 -1
- package/dist/le-kit/dist/{collection → components}/themes/gradient.css +4 -1
- package/dist/{collection/dist/collection → le-kit/dist/components}/themes/index.css +2 -0
- package/dist/{core/collection → le-kit/dist/components}/themes/minimal.css +4 -1
- package/dist/{collection/dist/collection → le-kit/dist/components}/themes/warm.css +4 -1
- package/dist/le-kit/index.esm.js +1 -1
- package/dist/le-kit/index.esm.js.map +1 -1
- package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-popup.le-slot.le-string-input.entry.esm.js.map +1 -0
- package/dist/le-kit/le-combobox.entry.esm.js.map +1 -0
- package/dist/le-kit/le-dropdown-base.entry.esm.js.map +1 -0
- package/dist/le-kit/le-kit.css +1 -1
- package/dist/le-kit/le-kit.esm.js +1 -1
- package/dist/le-kit/le-multiselect.entry.esm.js.map +1 -0
- package/dist/le-kit/le-segmented-control.entry.esm.js.map +1 -0
- package/dist/le-kit/le-select.entry.esm.js.map +1 -0
- package/dist/le-kit/le-tab-bar.entry.esm.js.map +1 -0
- package/dist/le-kit/le-tab-panel.entry.esm.js.map +1 -0
- package/dist/le-kit/le-tab.entry.esm.js.map +1 -0
- package/dist/le-kit/le-tabs.entry.esm.js.map +1 -0
- package/dist/le-kit/le-tag.entry.esm.js.map +1 -0
- package/dist/{core/le-kit/p-df552906.entry.js → le-kit/p-0bd7803f.entry.js} +2 -2
- package/dist/le-kit/p-0bd7803f.entry.js.map +1 -0
- package/dist/le-kit/p-1f55a4a2.entry.js +2 -0
- package/dist/le-kit/p-1f55a4a2.entry.js.map +1 -0
- package/dist/le-kit/{p-79ec6f7c.entry.js → p-2c37f174.entry.js} +2 -2
- package/dist/le-kit/p-2c37f174.entry.js.map +1 -0
- package/dist/{core/le-kit/p-5ef81068.entry.js → le-kit/p-33612923.entry.js} +2 -2
- package/dist/le-kit/p-33612923.entry.js.map +1 -0
- package/dist/le-kit/{p-b8122ad6.entry.js → p-3a52c4de.entry.js} +2 -2
- package/dist/le-kit/p-3a52c4de.entry.js.map +1 -0
- package/dist/le-kit/p-4130c60b.entry.js +2 -0
- package/dist/le-kit/p-4130c60b.entry.js.map +1 -0
- package/dist/le-kit/{p-64374730.entry.js → p-432e8231.entry.js} +2 -2
- package/dist/le-kit/p-432e8231.entry.js.map +1 -0
- package/dist/le-kit/p-548d130b.entry.js +2 -0
- package/dist/le-kit/p-548d130b.entry.js.map +1 -0
- package/dist/le-kit/p-6ecdad85.entry.js +2 -0
- package/dist/le-kit/p-6ecdad85.entry.js.map +1 -0
- package/dist/le-kit/p-6ee06c44.entry.js +2 -0
- package/dist/le-kit/p-6ee06c44.entry.js.map +1 -0
- package/dist/le-kit/p-71c78784.entry.js +2 -0
- package/dist/le-kit/p-71c78784.entry.js.map +1 -0
- package/dist/le-kit/p-7b180d58.entry.js +2 -0
- package/dist/le-kit/p-7b180d58.entry.js.map +1 -0
- package/dist/le-kit/p-91993261.entry.js +2 -0
- package/dist/le-kit/p-91993261.entry.js.map +1 -0
- package/dist/le-kit/p-DaA5gINj.js +2 -0
- package/dist/le-kit/{p-y3FECAx9.js.map → p-DaA5gINj.js.map} +1 -1
- package/dist/le-kit/p-DzgCnDLJ.js +3 -0
- package/dist/le-kit/p-DzgCnDLJ.js.map +1 -0
- package/dist/le-kit/p-a5d31d40.entry.js +2 -0
- package/dist/le-kit/p-a5d31d40.entry.js.map +1 -0
- package/dist/le-kit/{p-ad398acd.entry.js → p-b66fd9e1.entry.js} +2 -2
- package/dist/le-kit/p-b66fd9e1.entry.js.map +1 -0
- package/dist/le-kit/{p-f9008505.entry.js → p-beb87e61.entry.js} +2 -2
- package/dist/le-kit/p-beb87e61.entry.js.map +1 -0
- package/dist/le-kit/p-cc0797b0.entry.js +2 -0
- package/dist/le-kit/p-cc0797b0.entry.js.map +1 -0
- package/dist/le-kit/p-d504a369.entry.js +2 -0
- package/dist/le-kit/p-d504a369.entry.js.map +1 -0
- package/dist/themes/base.css +44 -0
- package/dist/themes/dark.css +4 -1
- package/dist/themes/default.css +4 -1
- package/dist/themes/gradient.css +4 -1
- package/dist/themes/index.css +2 -0
- package/dist/themes/minimal.css +4 -1
- package/dist/themes/warm.css +4 -1
- package/dist/types/components/le-button/le-button.d.ts +19 -4
- package/dist/types/components/le-combobox/le-combobox.d.ts +128 -0
- package/dist/types/components/le-dropdown-base/le-dropdown-base.d.ts +118 -0
- package/dist/types/components/le-multiselect/le-multiselect.d.ts +143 -0
- package/dist/types/components/le-popover/le-popover.d.ts +13 -2
- package/dist/types/components/le-popup/le-popup.d.ts +5 -0
- package/dist/types/components/le-segmented-control/le-segmented-control.d.ts +82 -0
- package/dist/types/components/le-select/le-select.d.ts +125 -0
- package/dist/types/components/le-string-input/le-string-input.d.ts +8 -0
- package/dist/types/components/le-tab/le-tab.d.ts +116 -0
- package/dist/types/components/le-tab-bar/le-tab-bar.d.ts +88 -0
- package/dist/types/components/le-tab-panel/le-tab-panel.d.ts +75 -0
- package/dist/types/components/le-tabs/le-tabs.d.ts +108 -0
- package/dist/types/components/le-tag/le-tag.d.ts +78 -0
- package/dist/types/components.d.ts +2310 -40
- package/dist/types/global/app.d.ts +4 -4
- package/dist/types/types/options.d.ts +9 -0
- package/package.json +5 -21
- package/readme.md +2 -2
- package/dist/cjs/index-o1DRKw1g.js.map +0 -1
- package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +0 -1
- package/dist/cjs/le-popup.cjs.entry.js +0 -212
- package/dist/cjs/le-popup.entry.cjs.js.map +0 -1
- package/dist/collection/dist/collection/themes/default.css +0 -108
- package/dist/collection/themes/base.css +0 -89
- package/dist/collection/themes/gradient.css +0 -100
- package/dist/collection/themes/index.css +0 -413
- package/dist/collection/themes/warm.css +0 -100
- package/dist/core/cjs/index-BsRb_UTe.js +0 -1835
- package/dist/core/cjs/index-BsRb_UTe.js.map +0 -1
- package/dist/core/cjs/index.cjs.js +0 -119
- package/dist/core/cjs/index.cjs.js.map +0 -1
- package/dist/core/cjs/le-box.cjs.entry.js +0 -184
- package/dist/core/cjs/le-box.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-button.cjs.entry.js +0 -92
- package/dist/core/cjs/le-button.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-card.cjs.entry.js +0 -29
- package/dist/core/cjs/le-card.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-checkbox.cjs.entry.js +0 -61
- package/dist/core/cjs/le-checkbox.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-kit.cjs.js +0 -25
- package/dist/core/cjs/le-kit.cjs.js.map +0 -1
- package/dist/core/cjs/le-number-input.cjs.entry.js +0 -202
- package/dist/core/cjs/le-number-input.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-popover.cjs.entry.js +0 -348
- package/dist/core/cjs/le-popover.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-popup.cjs.entry.js +0 -212
- package/dist/core/cjs/le-popup.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-round-progress.cjs.entry.js +0 -106
- package/dist/core/cjs/le-round-progress.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-stack.cjs.entry.js +0 -135
- package/dist/core/cjs/le-stack.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-string-input.cjs.entry.js +0 -95
- package/dist/core/cjs/le-string-input.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-text.cjs.entry.js +0 -335
- package/dist/core/cjs/le-text.entry.cjs.js.map +0 -1
- package/dist/core/cjs/le-turntable.cjs.entry.js +0 -139
- package/dist/core/cjs/le-turntable.entry.cjs.js.map +0 -1
- package/dist/core/cjs/loader.cjs.js +0 -13
- package/dist/core/cjs/loader.cjs.js.map +0 -1
- package/dist/core/cjs/utils-nsP8_w8_.js +0 -152
- package/dist/core/cjs/utils-nsP8_w8_.js.map +0 -1
- package/dist/core/collection/collection-manifest.json +0 -24
- package/dist/core/collection/components/le-box/le-box.default.css +0 -37
- package/dist/core/collection/components/le-box/le-box.js +0 -614
- package/dist/core/collection/components/le-box/le-box.js.map +0 -1
- package/dist/core/collection/components/le-button/le-button.default.css +0 -263
- package/dist/core/collection/components/le-button/le-button.js +0 -368
- package/dist/core/collection/components/le-button/le-button.js.map +0 -1
- package/dist/core/collection/components/le-card/le-card.default.css +0 -74
- package/dist/core/collection/components/le-card/le-card.js +0 -102
- package/dist/core/collection/components/le-card/le-card.js.map +0 -1
- package/dist/core/collection/components/le-checkbox/le-checkbox.css +0 -93
- package/dist/core/collection/components/le-checkbox/le-checkbox.js +0 -192
- package/dist/core/collection/components/le-checkbox/le-checkbox.js.map +0 -1
- package/dist/core/collection/components/le-number-input/le-number-input.css +0 -135
- package/dist/core/collection/components/le-number-input/le-number-input.js +0 -515
- package/dist/core/collection/components/le-number-input/le-number-input.js.map +0 -1
- package/dist/core/collection/components/le-popover/le-popover.css +0 -143
- package/dist/core/collection/components/le-popover/le-popover.js +0 -693
- package/dist/core/collection/components/le-popover/le-popover.js.map +0 -1
- package/dist/core/collection/components/le-popup/le-popup.api.js.map +0 -1
- package/dist/core/collection/components/le-popup/le-popup.css +0 -222
- package/dist/core/collection/components/le-popup/le-popup.js +0 -596
- package/dist/core/collection/components/le-popup/le-popup.js.map +0 -1
- package/dist/core/collection/components/le-round-progress/le-round-progress.css +0 -34
- package/dist/core/collection/components/le-round-progress/le-round-progress.js +0 -184
- package/dist/core/collection/components/le-round-progress/le-round-progress.js.map +0 -1
- package/dist/core/collection/components/le-stack/le-stack.default.css +0 -37
- package/dist/core/collection/components/le-stack/le-stack.js +0 -389
- package/dist/core/collection/components/le-stack/le-stack.js.map +0 -1
- package/dist/core/collection/components/le-string-input/le-string-input.css +0 -83
- package/dist/core/collection/components/le-string-input/le-string-input.js +0 -359
- package/dist/core/collection/components/le-string-input/le-string-input.js.map +0 -1
- package/dist/core/collection/components/le-text/le-text.default.css +0 -169
- package/dist/core/collection/components/le-text/le-text.js +0 -475
- package/dist/core/collection/components/le-text/le-text.js.map +0 -1
- package/dist/core/collection/components/le-turntable/le-turntable.css +0 -10
- package/dist/core/collection/components/le-turntable/le-turntable.js +0 -210
- package/dist/core/collection/components/le-turntable/le-turntable.js.map +0 -1
- package/dist/core/collection/global/app.js +0 -167
- package/dist/core/collection/global/app.js.map +0 -1
- package/dist/core/collection/index.js +0 -15
- package/dist/core/collection/index.js.map +0 -1
- package/dist/core/collection/types/blocks.js +0 -115
- package/dist/core/collection/types/blocks.js.map +0 -1
- package/dist/core/collection/types/options.js +0 -2
- package/dist/core/collection/types/options.js.map +0 -1
- package/dist/core/collection/utils/utils.js +0 -141
- package/dist/core/collection/utils/utils.js.map +0 -1
- package/dist/core/components/index.d.ts +0 -33
- package/dist/core/components/index.js +0 -113
- package/dist/core/components/index.js.map +0 -1
- package/dist/core/components/le-box.d.ts +0 -11
- package/dist/core/components/le-box.js +0 -225
- package/dist/core/components/le-box.js.map +0 -1
- package/dist/core/components/le-button.d.ts +0 -11
- package/dist/core/components/le-button.js +0 -9
- package/dist/core/components/le-button.js.map +0 -1
- package/dist/core/components/le-button2.js +0 -121
- package/dist/core/components/le-button2.js.map +0 -1
- package/dist/core/components/le-card.d.ts +0 -11
- package/dist/core/components/le-card.js +0 -52
- package/dist/core/components/le-card.js.map +0 -1
- package/dist/core/components/le-checkbox.d.ts +0 -11
- package/dist/core/components/le-checkbox.js +0 -87
- package/dist/core/components/le-checkbox.js.map +0 -1
- package/dist/core/components/le-number-input.d.ts +0 -11
- package/dist/core/components/le-number-input.js +0 -246
- package/dist/core/components/le-number-input.js.map +0 -1
- package/dist/core/components/le-popover.d.ts +0 -11
- package/dist/core/components/le-popover.js +0 -385
- package/dist/core/components/le-popover.js.map +0 -1
- package/dist/core/components/le-popup.d.ts +0 -11
- package/dist/core/components/le-popup.js +0 -253
- package/dist/core/components/le-popup.js.map +0 -1
- package/dist/core/components/le-round-progress.d.ts +0 -11
- package/dist/core/components/le-round-progress.js +0 -135
- package/dist/core/components/le-round-progress.js.map +0 -1
- package/dist/core/components/le-stack.d.ts +0 -11
- package/dist/core/components/le-stack.js +0 -167
- package/dist/core/components/le-stack.js.map +0 -1
- package/dist/core/components/le-string-input.d.ts +0 -11
- package/dist/core/components/le-string-input.js +0 -127
- package/dist/core/components/le-string-input.js.map +0 -1
- package/dist/core/components/le-text.d.ts +0 -11
- package/dist/core/components/le-text.js +0 -367
- package/dist/core/components/le-text.js.map +0 -1
- package/dist/core/components/le-turntable.d.ts +0 -11
- package/dist/core/components/le-turntable.js +0 -164
- package/dist/core/components/le-turntable.js.map +0 -1
- package/dist/core/components/utils.js +0 -310
- package/dist/core/components/utils.js.map +0 -1
- package/dist/core/esm/index-CJ-z5Zj1.js +0 -1818
- package/dist/core/esm/index-CJ-z5Zj1.js.map +0 -1
- package/dist/core/esm/index.js +0 -106
- package/dist/core/esm/index.js.map +0 -1
- package/dist/core/esm/le-box.entry.js +0 -182
- package/dist/core/esm/le-box.entry.js.map +0 -1
- package/dist/core/esm/le-button.entry.js +0 -90
- package/dist/core/esm/le-button.entry.js.map +0 -1
- package/dist/core/esm/le-card.entry.js +0 -27
- package/dist/core/esm/le-card.entry.js.map +0 -1
- package/dist/core/esm/le-checkbox.entry.js +0 -59
- package/dist/core/esm/le-checkbox.entry.js.map +0 -1
- package/dist/core/esm/le-kit.js +0 -21
- package/dist/core/esm/le-kit.js.map +0 -1
- package/dist/core/esm/le-number-input.entry.js +0 -200
- package/dist/core/esm/le-number-input.entry.js.map +0 -1
- package/dist/core/esm/le-popover.entry.js +0 -346
- package/dist/core/esm/le-popover.entry.js.map +0 -1
- package/dist/core/esm/le-popup.entry.js +0 -210
- package/dist/core/esm/le-popup.entry.js.map +0 -1
- package/dist/core/esm/le-round-progress.entry.js +0 -104
- package/dist/core/esm/le-round-progress.entry.js.map +0 -1
- package/dist/core/esm/le-stack.entry.js +0 -133
- package/dist/core/esm/le-stack.entry.js.map +0 -1
- package/dist/core/esm/le-string-input.entry.js +0 -93
- package/dist/core/esm/le-string-input.entry.js.map +0 -1
- package/dist/core/esm/le-text.entry.js +0 -333
- package/dist/core/esm/le-text.entry.js.map +0 -1
- package/dist/core/esm/le-turntable.entry.js +0 -137
- package/dist/core/esm/le-turntable.entry.js.map +0 -1
- package/dist/core/esm/loader.js +0 -11
- package/dist/core/esm/loader.js.map +0 -1
- package/dist/core/esm/utils-Bxmld82M.js +0 -146
- package/dist/core/esm/utils-Bxmld82M.js.map +0 -1
- package/dist/core/index.cjs.js +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/le-kit/index.esm.js +0 -2
- package/dist/core/le-kit/index.esm.js.map +0 -1
- package/dist/core/le-kit/le-box.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-button.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-card.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-checkbox.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-kit.css +0 -1
- package/dist/core/le-kit/le-kit.esm.js +0 -2
- package/dist/core/le-kit/le-kit.esm.js.map +0 -1
- package/dist/core/le-kit/le-number-input.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-popover.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-popup.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-round-progress.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-stack.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-string-input.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-text.entry.esm.js.map +0 -1
- package/dist/core/le-kit/le-turntable.entry.esm.js.map +0 -1
- package/dist/core/le-kit/loader.esm.js.map +0 -1
- package/dist/core/le-kit/p-0308bd1f.entry.js +0 -2
- package/dist/core/le-kit/p-0308bd1f.entry.js.map +0 -1
- package/dist/core/le-kit/p-257495cc.entry.js +0 -2
- package/dist/core/le-kit/p-257495cc.entry.js.map +0 -1
- package/dist/core/le-kit/p-2ac4789a.entry.js +0 -2
- package/dist/core/le-kit/p-2ac4789a.entry.js.map +0 -1
- package/dist/core/le-kit/p-45eace7c.entry.js +0 -2
- package/dist/core/le-kit/p-45eace7c.entry.js.map +0 -1
- package/dist/core/le-kit/p-556086ca.entry.js +0 -2
- package/dist/core/le-kit/p-556086ca.entry.js.map +0 -1
- package/dist/core/le-kit/p-5ef81068.entry.js.map +0 -1
- package/dist/core/le-kit/p-66d35f48.entry.js +0 -2
- package/dist/core/le-kit/p-66d35f48.entry.js.map +0 -1
- package/dist/core/le-kit/p-73682c5e.entry.js +0 -2
- package/dist/core/le-kit/p-73682c5e.entry.js.map +0 -1
- package/dist/core/le-kit/p-CJ-z5Zj1.js +0 -3
- package/dist/core/le-kit/p-CJ-z5Zj1.js.map +0 -1
- package/dist/core/le-kit/p-Drz36PDp.js +0 -2
- package/dist/core/le-kit/p-Drz36PDp.js.map +0 -1
- package/dist/core/le-kit/p-aa6e906f.entry.js +0 -2
- package/dist/core/le-kit/p-aa6e906f.entry.js.map +0 -1
- package/dist/core/le-kit/p-d75214f9.entry.js +0 -2
- package/dist/core/le-kit/p-d75214f9.entry.js.map +0 -1
- package/dist/core/le-kit/p-df552906.entry.js.map +0 -1
- package/dist/core/le-kit/p-e0861e82.entry.js +0 -2
- package/dist/core/le-kit/p-e0861e82.entry.js.map +0 -1
- package/dist/core/loader/cdn.js +0 -1
- package/dist/core/loader/index.cjs.js +0 -1
- package/dist/core/loader/index.d.ts +0 -24
- package/dist/core/loader/index.es2017.js +0 -1
- package/dist/core/loader/index.js +0 -2
- package/dist/core/types/components/le-box/le-box.d.ts +0 -111
- package/dist/core/types/components/le-button/le-button.d.ts +0 -78
- package/dist/core/types/components/le-card/le-card.d.ts +0 -37
- package/dist/core/types/components/le-checkbox/le-checkbox.d.ts +0 -46
- package/dist/core/types/components/le-number-input/le-number-input.d.ts +0 -106
- package/dist/core/types/components/le-popover/le-popover.d.ts +0 -109
- package/dist/core/types/components/le-popup/le-popup.api.d.ts +0 -73
- package/dist/core/types/components/le-popup/le-popup.d.ts +0 -122
- package/dist/core/types/components/le-round-progress/le-round-progress.d.ts +0 -37
- package/dist/core/types/components/le-stack/le-stack.d.ts +0 -73
- package/dist/core/types/components/le-string-input/le-string-input.d.ts +0 -83
- package/dist/core/types/components/le-text/le-text.d.ts +0 -141
- package/dist/core/types/components/le-turntable/le-turntable.d.ts +0 -55
- package/dist/core/types/components.d.ts +0 -1752
- package/dist/core/types/global/app.d.ts +0 -73
- package/dist/core/types/index.d.ts +0 -15
- package/dist/core/types/stencil-public-runtime.d.ts +0 -1756
- package/dist/core/types/types/blocks.d.ts +0 -136
- package/dist/core/types/types/options.d.ts +0 -124
- package/dist/core/types/utils/utils.d.ts +0 -54
- package/dist/esm/index-CwNQ1GTa.js.map +0 -1
- package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +0 -1
- package/dist/esm/le-popup.entry.js +0 -210
- package/dist/esm/le-popup.entry.js.map +0 -1
- package/dist/le-kit/assets/custom-elements.json +0 -4305
- package/dist/le-kit/dist/collection/themes/dark.css +0 -100
- package/dist/le-kit/dist/collection/themes/minimal.css +0 -100
- package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +0 -1
- package/dist/le-kit/le-popup.entry.esm.js.map +0 -1
- package/dist/le-kit/p-08dbcc25.entry.js +0 -2
- package/dist/le-kit/p-08dbcc25.entry.js.map +0 -1
- package/dist/le-kit/p-5dc35729.entry.js +0 -2
- package/dist/le-kit/p-5dc35729.entry.js.map +0 -1
- package/dist/le-kit/p-64374730.entry.js.map +0 -1
- package/dist/le-kit/p-79ec6f7c.entry.js.map +0 -1
- package/dist/le-kit/p-8daf3c7f.entry.js +0 -2
- package/dist/le-kit/p-8daf3c7f.entry.js.map +0 -1
- package/dist/le-kit/p-9c69235d.entry.js +0 -2
- package/dist/le-kit/p-9c69235d.entry.js.map +0 -1
- package/dist/le-kit/p-CwNQ1GTa.js +0 -3
- package/dist/le-kit/p-CwNQ1GTa.js.map +0 -1
- package/dist/le-kit/p-ad398acd.entry.js.map +0 -1
- package/dist/le-kit/p-b8122ad6.entry.js.map +0 -1
- package/dist/le-kit/p-f9008505.entry.js.map +0 -1
- package/dist/le-kit/p-y3FECAx9.js +0 -2
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-C3iQZ-Ja.js');
|
|
4
|
+
|
|
5
|
+
const leSegmentedControlCss = ":host{display:inline-block;max-width:100%;--le-segmented-control-bg:var(--le-color-background-secondary);--le-segmented-control-padding:var(--le-spacing-1)}:host([full-width]){width:100%}:host(.overflow-visible){max-width:none}.le-segmented-control{flex-direction:row;white-space:nowrap;border:none;gap:0;background-color:var(--le-segmented-control-bg);border-radius:calc(var(--le-radius-md) + var(--le-segmented-control-padding));padding:var(--le-segmented-control-padding)}.le-segmented-control.overflow-auto{overflow:auto}.le-segmented-control.overflow-hidden{overflow:hidden}.le-segmented-control.overflow-visible{overflow:visible}.le-segmented-control.overflow-scroll{overflow:scroll}.le-segmented-control.full-width{display:flex;width:100%;width:calc(100% - var(--le-segmented-control-padding) * 2)}.le-segmented-control.disabled{opacity:0.5;pointer-events:none}.le-segmented-control:focus{outline:2px solid var(--le-color-focus);outline-offset:2px}.full-width .segment{flex:1}.segment:focus-visible{outline:2px solid var(--le-focus-ring-color, var(--le-color-primary));outline-offset:2px}.segment-active{color:var(--le-segmented-text-color-active, var(--le-text-primary))}.segment-disabled{opacity:0.5;cursor:not-allowed}";
|
|
6
|
+
|
|
7
|
+
const LeSegmentedControl = class {
|
|
8
|
+
constructor(hostRef) {
|
|
9
|
+
index.registerInstance(this, hostRef);
|
|
10
|
+
this.leChange = index.createEvent(this, "leChange");
|
|
11
|
+
}
|
|
12
|
+
get el() { return index.getElement(this); }
|
|
13
|
+
containerRef;
|
|
14
|
+
/**
|
|
15
|
+
* Array of options for the segmented control.
|
|
16
|
+
*/
|
|
17
|
+
options = [];
|
|
18
|
+
/**
|
|
19
|
+
* The value of the currently selected option.
|
|
20
|
+
*/
|
|
21
|
+
value;
|
|
22
|
+
/**
|
|
23
|
+
* Size of the control.
|
|
24
|
+
* @allowedValues small | medium | large
|
|
25
|
+
*/
|
|
26
|
+
size = 'medium';
|
|
27
|
+
/**
|
|
28
|
+
* Scroll behavior for overflowing tabs.
|
|
29
|
+
* @allowedValues auto | hidden | visible | scroll
|
|
30
|
+
*/
|
|
31
|
+
overflow = 'auto';
|
|
32
|
+
/**
|
|
33
|
+
* Whether the control should take full width.
|
|
34
|
+
*/
|
|
35
|
+
fullWidth = false;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the control is disabled.
|
|
38
|
+
*/
|
|
39
|
+
disabled = false;
|
|
40
|
+
/**
|
|
41
|
+
* Internal tab configurations (built from children or tabs prop)
|
|
42
|
+
*/
|
|
43
|
+
segmentConfigs = [];
|
|
44
|
+
/**
|
|
45
|
+
* Internal state for focused index (keyboard navigation)
|
|
46
|
+
*/
|
|
47
|
+
focusedIndex = 0;
|
|
48
|
+
/**
|
|
49
|
+
* Whether we're using declarative mode (le-tab children)
|
|
50
|
+
*/
|
|
51
|
+
isDeclarativeMode = false;
|
|
52
|
+
/**
|
|
53
|
+
* Emitted when the selection changes.
|
|
54
|
+
*/
|
|
55
|
+
leChange;
|
|
56
|
+
mutationObserver;
|
|
57
|
+
tabsChanged() {
|
|
58
|
+
if (!this.isDeclarativeMode) {
|
|
59
|
+
this.buildSegmentsConfigs();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
handleSlotChange() {
|
|
63
|
+
this.buildSegmentsConfigs();
|
|
64
|
+
}
|
|
65
|
+
componentWillLoad() {
|
|
66
|
+
this.buildSegmentsConfigs();
|
|
67
|
+
if (this.value === undefined && this.options.length > 0) {
|
|
68
|
+
const firstEnabled = this.options.find(opt => !opt.disabled);
|
|
69
|
+
if (firstEnabled) {
|
|
70
|
+
this.value = this.getOptionValue(firstEnabled);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (this.value !== undefined) {
|
|
74
|
+
const index = this.getOptionIndex(this.value);
|
|
75
|
+
if (index >= 0) {
|
|
76
|
+
this.focusedIndex = index;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
connectedCallback() {
|
|
81
|
+
// Watch for dynamic changes to children
|
|
82
|
+
this.mutationObserver = new MutationObserver(() => {
|
|
83
|
+
this.buildSegmentsConfigs();
|
|
84
|
+
});
|
|
85
|
+
this.mutationObserver.observe(this.el, {
|
|
86
|
+
attributes: true,
|
|
87
|
+
childList: true,
|
|
88
|
+
subtree: true,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
disconnectedCallback() {
|
|
92
|
+
this.mutationObserver?.disconnect();
|
|
93
|
+
}
|
|
94
|
+
async buildSegmentsConfigs() {
|
|
95
|
+
// Check for le-tab children
|
|
96
|
+
const segments = Array.from(this.el.querySelectorAll(':scope > le-tab'));
|
|
97
|
+
if (segments.length > 0) {
|
|
98
|
+
// Declarative mode - build from children
|
|
99
|
+
this.isDeclarativeMode = true;
|
|
100
|
+
const configs = [];
|
|
101
|
+
for (const segment of segments) {
|
|
102
|
+
const config = await segment.getTabConfig();
|
|
103
|
+
configs.push({ ...config });
|
|
104
|
+
}
|
|
105
|
+
this.segmentConfigs = configs;
|
|
106
|
+
}
|
|
107
|
+
else if (this.options.length > 0) {
|
|
108
|
+
// Programmatic mode - use options prop
|
|
109
|
+
this.isDeclarativeMode = false;
|
|
110
|
+
this.segmentConfigs = this.options.map(option => ({
|
|
111
|
+
label: option.label,
|
|
112
|
+
value: (option.value !== undefined ? option.value : option.label),
|
|
113
|
+
iconStart: option.iconStart,
|
|
114
|
+
iconEnd: option.iconEnd,
|
|
115
|
+
disabled: option.disabled ?? false,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.segmentConfigs = [];
|
|
120
|
+
}
|
|
121
|
+
// Set default selected
|
|
122
|
+
if (this.value === undefined && this.segmentConfigs.length > 0) {
|
|
123
|
+
const firstEnabled = this.segmentConfigs.find(t => !t.disabled);
|
|
124
|
+
if (firstEnabled) {
|
|
125
|
+
this.value = firstEnabled.value;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Initialize focused index
|
|
129
|
+
if (this.value !== undefined) {
|
|
130
|
+
const index = this.segmentConfigs.findIndex(t => t.value === this.value);
|
|
131
|
+
if (index >= 0) {
|
|
132
|
+
this.focusedIndex = index;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
getOptionValue(option) {
|
|
137
|
+
return option.value !== undefined ? option.value : option.label;
|
|
138
|
+
}
|
|
139
|
+
getOptionIndex(value) {
|
|
140
|
+
return this.options.findIndex(opt => this.getOptionValue(opt) === value);
|
|
141
|
+
}
|
|
142
|
+
selectOption(option) {
|
|
143
|
+
if (option.disabled || this.disabled)
|
|
144
|
+
return;
|
|
145
|
+
const value = this.getOptionValue(option);
|
|
146
|
+
this.value = value;
|
|
147
|
+
// update focused index
|
|
148
|
+
const index = this.segmentConfigs.findIndex(seg => seg.value === value);
|
|
149
|
+
if (index >= 0) {
|
|
150
|
+
this.focusedIndex = index;
|
|
151
|
+
}
|
|
152
|
+
this.leChange.emit({ value, option });
|
|
153
|
+
}
|
|
154
|
+
handleClick = (option) => {
|
|
155
|
+
this.selectOption(option);
|
|
156
|
+
};
|
|
157
|
+
handleKeyDown = (event) => {
|
|
158
|
+
const { segmentConfigs } = this;
|
|
159
|
+
let newIndex = this.focusedIndex;
|
|
160
|
+
switch (event.key) {
|
|
161
|
+
case 'ArrowLeft':
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
newIndex = this.findNextEnabled(-1);
|
|
164
|
+
break;
|
|
165
|
+
case 'ArrowRight':
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
newIndex = this.findNextEnabled(1);
|
|
168
|
+
break;
|
|
169
|
+
case 'Home':
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
newIndex = this.findFirstEnabled();
|
|
172
|
+
break;
|
|
173
|
+
case 'End':
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
newIndex = this.findLastEnabled();
|
|
176
|
+
break;
|
|
177
|
+
case 'Enter':
|
|
178
|
+
case ' ':
|
|
179
|
+
event.preventDefault();
|
|
180
|
+
if (segmentConfigs[this.focusedIndex]) {
|
|
181
|
+
this.selectOption(segmentConfigs[this.focusedIndex]);
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
default:
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (newIndex !== this.focusedIndex) {
|
|
188
|
+
this.focusedIndex = newIndex;
|
|
189
|
+
this.focusSegment(newIndex);
|
|
190
|
+
if (segmentConfigs[newIndex]) {
|
|
191
|
+
this.selectOption(segmentConfigs[newIndex]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
findNextEnabled(direction) {
|
|
196
|
+
const { segmentConfigs } = this;
|
|
197
|
+
let index = this.focusedIndex;
|
|
198
|
+
const length = segmentConfigs.length;
|
|
199
|
+
for (let i = 0; i < length; i++) {
|
|
200
|
+
index = (index + direction + length) % length;
|
|
201
|
+
if (!segmentConfigs[index].disabled) {
|
|
202
|
+
return index;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return this.focusedIndex;
|
|
206
|
+
}
|
|
207
|
+
findFirstEnabled() {
|
|
208
|
+
return this.segmentConfigs.findIndex(opt => !opt.disabled);
|
|
209
|
+
}
|
|
210
|
+
findLastEnabled() {
|
|
211
|
+
for (let i = this.segmentConfigs.length - 1; i >= 0; i--) {
|
|
212
|
+
if (!this.segmentConfigs[i].disabled)
|
|
213
|
+
return i;
|
|
214
|
+
}
|
|
215
|
+
return 0;
|
|
216
|
+
}
|
|
217
|
+
focusSegment(index) {
|
|
218
|
+
const container = this.containerRef;
|
|
219
|
+
const segment = container?.querySelectorAll('.segment')[index];
|
|
220
|
+
segment?.focus();
|
|
221
|
+
}
|
|
222
|
+
render() {
|
|
223
|
+
const { segmentConfigs, value, size, fullWidth, disabled } = this;
|
|
224
|
+
const classes = {
|
|
225
|
+
'le-segmented-control': true,
|
|
226
|
+
[`size-${size}`]: true,
|
|
227
|
+
[`overflow-${this.overflow}`]: true,
|
|
228
|
+
'full-width': fullWidth,
|
|
229
|
+
'disabled': disabled,
|
|
230
|
+
};
|
|
231
|
+
return (index.h(index.Host, { key: 'da654431d7a9e08c18f618930ccda8f5b81c513a', class: `overflow-${this.overflow}` }, index.h("le-component", { key: '9a5bcd50c1c7c8f60f23c2423fc1d8913992befa', component: "le-segmented-control" }, index.h("div", { key: '25f1550e3b56e23d9c06ca784e6453b651133990', class: classes, ref: el => (this.containerRef = el), role: "radiogroup", part: "container", onKeyDown: this.handleKeyDown, tabIndex: 0 }, segmentConfigs.map(option => {
|
|
232
|
+
const optValue = this.getOptionValue(option);
|
|
233
|
+
const isSelected = optValue === value;
|
|
234
|
+
const isDisabled = option.disabled || disabled;
|
|
235
|
+
return (index.h("le-tab", { key: optValue, class: "segment", role: "radio", variant: "enclosed", selected: isSelected, disabled: isDisabled, focusable: false, size: size, part: isSelected ? 'segment segment-active' : 'segment', "aria-checked": isSelected ? 'true' : 'false', "aria-disabled": isDisabled ? 'true' : undefined, onClick: () => this.handleClick(option), iconStart: option.iconStart, iconEnd: option.iconEnd }, index.h("span", { class: "segment-label" }, option.label)));
|
|
236
|
+
})))));
|
|
237
|
+
}
|
|
238
|
+
static get watchers() { return {
|
|
239
|
+
"options": ["tabsChanged"]
|
|
240
|
+
}; }
|
|
241
|
+
};
|
|
242
|
+
LeSegmentedControl.style = leSegmentedControlCss;
|
|
243
|
+
|
|
244
|
+
exports.le_segmented_control = LeSegmentedControl;
|
|
245
|
+
//# sourceMappingURL=le-segmented-control.entry.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"le-segmented-control.entry.cjs.js","sources":["src/components/le-segmented-control/le-segmented-control.css?tag=le-segmented-control&encapsulation=shadow","src/components/le-segmented-control/le-segmented-control.tsx"],"sourcesContent":["/**\n * le-segmented-control - Default mode styles\n */\n\n:host {\n display: inline-block;\n max-width: 100%;\n --le-segmented-control-bg: var(--le-color-background-secondary);\n --le-segmented-control-padding: var(--le-spacing-1);\n}\n:host([full-width]) {\n width: 100%;\n}\n:host(.overflow-visible) {\n max-width: none;\n}\n\n.le-segmented-control {\n flex-direction: row;\n white-space: nowrap;\n border: none;\n gap: 0;\n background-color: var(--le-segmented-control-bg);\n border-radius: calc(var(--le-radius-md) + var(--le-segmented-control-padding));\n padding: var(--le-segmented-control-padding);\n}\n\n.le-segmented-control.overflow-auto {\n overflow: auto;\n}\n.le-segmented-control.overflow-hidden {\n overflow: hidden;\n}\n.le-segmented-control.overflow-visible {\n overflow: visible;\n}\n.le-segmented-control.overflow-scroll {\n overflow: scroll;\n}\n\n.le-segmented-control.full-width {\n display: flex;\n width: 100%;\n width: calc(100% - var(--le-segmented-control-padding) * 2);\n}\n\n.le-segmented-control.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.le-segmented-control:focus {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n\n/* ============================================\n * SEGMENT BUTTON\n * ============================================ */\n\n.full-width .segment {\n flex: 1;\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--le-focus-ring-color, var(--le-color-primary));\n outline-offset: 2px;\n}\n\n.segment-active {\n color: var(--le-segmented-text-color-active, var(--le-text-primary));\n}\n\n.segment-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Element,\n Watch,\n Listen,\n Host,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\n\ninterface SegmentConfig {\n label: string;\n value: string;\n iconStart?: string;\n iconEnd?: string;\n disabled: boolean;\n}\n\ninterface TabConfig {\n label: string;\n value: string;\n iconStart?: string;\n iconEnd?: string;\n disabled: boolean;\n panel?: HTMLElement & { setActive: (active: boolean) => Promise<void> };\n}\n\n/**\n * A segmented control component (iOS-style toggle buttons).\n *\n * Perfect for toggling between a small set of related options.\n *\n * @cssprop --le-segmented-bg - Background color of the control\n * @cssprop --le-segmented-padding - Padding around segments\n * @cssprop --le-segmented-gap - Gap between segments\n * @cssprop --le-segmented-radius - Border radius of the control\n *\n * @csspart container - The main container\n * @csspart segment - Individual segment buttons\n * @csspart segment-active - The currently active segment\n *\n * @cmsEditable true\n * @cmsCategory Form\n */\n@Component({\n tag: 'le-segmented-control',\n styleUrl: 'le-segmented-control.css',\n shadow: true,\n})\nexport class LeSegmentedControl {\n @Element() el: HTMLElement;\n\n private containerRef?: HTMLElement;\n\n /**\n * Array of options for the segmented control.\n */\n @Prop() options: LeOption[] = [];\n\n /**\n * The value of the currently selected option.\n */\n @Prop({ mutable: true }) value?: LeOptionValue;\n\n /**\n * Size of the control.\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Scroll behavior for overflowing tabs.\n * @allowedValues auto | hidden | visible | scroll\n */\n @Prop() overflow: 'auto' | 'hidden' | 'visible' | 'scroll' = 'auto';\n\n /**\n * Whether the control should take full width.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether the control is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Internal tab configurations (built from children or tabs prop)\n */\n @State() private segmentConfigs: SegmentConfig[] = [];\n\n /**\n * Internal state for focused index (keyboard navigation)\n */\n @State() private focusedIndex: number = 0;\n\n /**\n * Whether we're using declarative mode (le-tab children)\n */\n @State() private isDeclarativeMode: boolean = false;\n\n /**\n * Emitted when the selection changes.\n */\n @Event() leChange: EventEmitter<LeOptionSelectDetail>;\n\n private mutationObserver?: MutationObserver;\n\n @Watch('options')\n tabsChanged() {\n if (!this.isDeclarativeMode) {\n this.buildSegmentsConfigs();\n }\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n this.buildSegmentsConfigs();\n }\n\n componentWillLoad() {\n this.buildSegmentsConfigs();\n if (this.value === undefined && this.options.length > 0) {\n const firstEnabled = this.options.find(opt => !opt.disabled);\n if (firstEnabled) {\n this.value = this.getOptionValue(firstEnabled);\n }\n }\n if (this.value !== undefined) {\n const index = this.getOptionIndex(this.value);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n connectedCallback() {\n // Watch for dynamic changes to children\n this.mutationObserver = new MutationObserver(() => {\n this.buildSegmentsConfigs();\n });\n this.mutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n }\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n }\n\n private async buildSegmentsConfigs() {\n // Check for le-tab children\n const segments = Array.from(this.el.querySelectorAll(':scope > le-tab')) as Array<\n HTMLElement & {\n getTabConfig: () => Promise<TabConfig>;\n setActive: (active: boolean) => Promise<void>;\n }\n >;\n\n if (segments.length > 0) {\n // Declarative mode - build from children\n this.isDeclarativeMode = true;\n const configs: TabConfig[] = [];\n\n for (const segment of segments) {\n const config = await segment.getTabConfig();\n configs.push({ ...config });\n }\n\n this.segmentConfigs = configs;\n } else if (this.options.length > 0) {\n // Programmatic mode - use options prop\n this.isDeclarativeMode = false;\n this.segmentConfigs = this.options.map(option => ({\n label: option.label,\n value: (option.value !== undefined ? option.value : option.label) as string,\n iconStart: option.iconStart,\n iconEnd: option.iconEnd,\n disabled: option.disabled ?? false,\n }));\n } else {\n this.segmentConfigs = [];\n }\n\n // Set default selected\n if (this.value === undefined && this.segmentConfigs.length > 0) {\n const firstEnabled = this.segmentConfigs.find(t => !t.disabled);\n if (firstEnabled) {\n this.value = firstEnabled.value;\n }\n }\n\n // Initialize focused index\n if (this.value !== undefined) {\n const index = this.segmentConfigs.findIndex(t => t.value === this.value);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n private getOptionValue(option: LeOption): LeOptionValue {\n return option.value !== undefined ? option.value : option.label;\n }\n\n private getOptionIndex(value: LeOptionValue): number {\n return this.options.findIndex(opt => this.getOptionValue(opt) === value);\n }\n\n private selectOption(option: LeOption) {\n if (option.disabled || this.disabled) return;\n\n const value = this.getOptionValue(option);\n this.value = value;\n\n // update focused index\n const index = this.segmentConfigs.findIndex(seg => seg.value === value);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n\n this.leChange.emit({ value, option });\n }\n\n private handleClick = (option: LeOption) => {\n this.selectOption(option);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const { segmentConfigs } = this;\n let newIndex = this.focusedIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = this.findNextEnabled(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = this.findNextEnabled(1);\n break;\n case 'Home':\n event.preventDefault();\n newIndex = this.findFirstEnabled();\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.findLastEnabled();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (segmentConfigs[this.focusedIndex]) {\n this.selectOption(segmentConfigs[this.focusedIndex]);\n }\n return;\n default:\n return;\n }\n\n if (newIndex !== this.focusedIndex) {\n this.focusedIndex = newIndex;\n this.focusSegment(newIndex);\n if (segmentConfigs[newIndex]) {\n this.selectOption(segmentConfigs[newIndex]);\n }\n }\n };\n\n private findNextEnabled(direction: 1 | -1): number {\n const { segmentConfigs } = this;\n let index = this.focusedIndex;\n const length = segmentConfigs.length;\n\n for (let i = 0; i < length; i++) {\n index = (index + direction + length) % length;\n if (!segmentConfigs[index].disabled) {\n return index;\n }\n }\n return this.focusedIndex;\n }\n\n private findFirstEnabled(): number {\n return this.segmentConfigs.findIndex(opt => !opt.disabled);\n }\n\n private findLastEnabled(): number {\n for (let i = this.segmentConfigs.length - 1; i >= 0; i--) {\n if (!this.segmentConfigs[i].disabled) return i;\n }\n return 0;\n }\n\n private focusSegment(index: number) {\n const container = this.containerRef;\n const segment = container?.querySelectorAll('.segment')[index] as HTMLElement;\n segment?.focus();\n }\n\n render() {\n const { segmentConfigs, value, size, fullWidth, disabled } = this;\n\n const classes = {\n 'le-segmented-control': true,\n [`size-${size}`]: true,\n [`overflow-${this.overflow}`]: true,\n 'full-width': fullWidth,\n 'disabled': disabled,\n };\n\n return (\n <Host class={`overflow-${this.overflow}`}>\n <le-component component=\"le-segmented-control\">\n <div\n class={classes}\n ref={el => (this.containerRef = el)}\n role=\"radiogroup\"\n part=\"container\"\n onKeyDown={this.handleKeyDown}\n tabIndex={0}\n >\n {segmentConfigs.map(option => {\n const optValue = this.getOptionValue(option);\n const isSelected = optValue === value;\n const isDisabled = option.disabled || disabled;\n\n return (\n <le-tab\n key={optValue}\n class=\"segment\"\n role=\"radio\"\n variant=\"enclosed\"\n selected={isSelected}\n disabled={isDisabled}\n focusable={false}\n size={size}\n part={isSelected ? 'segment segment-active' : 'segment'}\n aria-checked={isSelected ? 'true' : 'false'}\n aria-disabled={isDisabled ? 'true' : undefined}\n onClick={() => this.handleClick(option)}\n iconStart={option.iconStart}\n iconEnd={option.iconEnd}\n >\n <span class=\"segment-label\">{option.label}</span>\n </le-tab>\n );\n })}\n </div>\n </le-component>\n </Host>\n );\n }\n}\n"],"names":["h","Host"],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-C3iQZ-Ja.js');
|
|
4
|
+
|
|
5
|
+
const leSelectCss = ":host{display:inline-block;min-width:150px;--le-select-color:var(--le-color-text, #1f2937);--le-select-border-radius:var(--le-radius-md);--le-select-content-padding:var(--le-spacing-2)}:host([disabled]){opacity:0.5;pointer-events:none}:host([full-width]){width:100%}.select-trigger{display:flex;align-items:center;gap:0.5rem;width:100%;padding:0;--le-button-padding:var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-2);font-size:var(--le-select-font-size, 0.875rem);font-family:inherit;line-height:1.4;color:var(--le-select-color);background:var(--le-select-bg, var(--le-color-surface, #fff));border-radius:var(--le-select-border-radius);cursor:pointer;text-align:left;transition:border-color 0.15s ease, box-shadow 0.15s ease}.select-trigger:focus{outline:2px solid var(--le-color-focus);outline-offset:2px}.select-trigger:not(.has-value) .trigger-label{color:color-mix(in srgb, var(--le-color-text-secondary) 66%, transparent)}.trigger-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem}.trigger-icon-end{width:16px;height:16px}.trigger-icon img{width:100%;height:100%;object-fit:contain}.trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--le-color-text)}.trigger-label::not(.has-value){color:var(--le-color-text-disabled, #9ca3af)}le-button::part(icon-end){display:flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;transition:transform 0.2s ease}le-button::part(icon-end) svg{width:1rem;height:1rem}le-button.is-open::part(icon-end){transform:rotate(180deg)}.search-input::part(container):focus-within{outline:none !important}.search-input{--le-input-radius:var(--le-radius-md)}";
|
|
6
|
+
|
|
7
|
+
const LeSelect = class {
|
|
8
|
+
constructor(hostRef) {
|
|
9
|
+
index.registerInstance(this, hostRef);
|
|
10
|
+
this.leChange = index.createEvent(this, "leChange");
|
|
11
|
+
this.leOpen = index.createEvent(this, "leOpen");
|
|
12
|
+
this.leClose = index.createEvent(this, "leClose");
|
|
13
|
+
}
|
|
14
|
+
get el() { return index.getElement(this); }
|
|
15
|
+
/**
|
|
16
|
+
* The options to display in the dropdown.
|
|
17
|
+
*/
|
|
18
|
+
options = [];
|
|
19
|
+
/**
|
|
20
|
+
* The currently selected value.
|
|
21
|
+
*/
|
|
22
|
+
value;
|
|
23
|
+
/**
|
|
24
|
+
* Placeholder text when no option is selected.
|
|
25
|
+
*/
|
|
26
|
+
placeholder = 'Select an option';
|
|
27
|
+
/**
|
|
28
|
+
* Whether the select 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 select should take full width of its container.
|
|
41
|
+
*/
|
|
42
|
+
fullWidth = false;
|
|
43
|
+
/**
|
|
44
|
+
* Size variant of the select.
|
|
45
|
+
*/
|
|
46
|
+
size = 'medium';
|
|
47
|
+
/**
|
|
48
|
+
* Visual variant of the select.
|
|
49
|
+
*/
|
|
50
|
+
variant = 'default';
|
|
51
|
+
/**
|
|
52
|
+
* Whether the input is searchable.
|
|
53
|
+
*/
|
|
54
|
+
searchable = false;
|
|
55
|
+
/**
|
|
56
|
+
* Text to show when no options match the search.
|
|
57
|
+
*/
|
|
58
|
+
emptyText = 'No results found';
|
|
59
|
+
/**
|
|
60
|
+
* Whether the dropdown is currently open.
|
|
61
|
+
*/
|
|
62
|
+
open = false;
|
|
63
|
+
/**
|
|
64
|
+
* Emitted when the selected value changes.
|
|
65
|
+
*/
|
|
66
|
+
leChange;
|
|
67
|
+
/**
|
|
68
|
+
* Emitted when the dropdown opens.
|
|
69
|
+
*/
|
|
70
|
+
leOpen;
|
|
71
|
+
/**
|
|
72
|
+
* Emitted when the dropdown closes.
|
|
73
|
+
*/
|
|
74
|
+
leClose;
|
|
75
|
+
selectedOption;
|
|
76
|
+
searchQuery = '';
|
|
77
|
+
dropdownEl;
|
|
78
|
+
inputEl;
|
|
79
|
+
handleValueChange() {
|
|
80
|
+
this.updateSelectedOption();
|
|
81
|
+
}
|
|
82
|
+
handleOptionsChange() {
|
|
83
|
+
this.updateSelectedOption();
|
|
84
|
+
}
|
|
85
|
+
componentWillLoad() {
|
|
86
|
+
this.updateSelectedOption();
|
|
87
|
+
}
|
|
88
|
+
get parsedOptions() {
|
|
89
|
+
if (typeof this.options === 'string') {
|
|
90
|
+
try {
|
|
91
|
+
return JSON.parse(this.options);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return this.options;
|
|
98
|
+
}
|
|
99
|
+
updateSelectedOption() {
|
|
100
|
+
if (this.value !== undefined) {
|
|
101
|
+
this.selectedOption = this.parsedOptions.find(opt => (opt.value ?? opt.label) === this.value);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.selectedOption = undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
filterOption = (option, query) => {
|
|
108
|
+
if (!query)
|
|
109
|
+
return true;
|
|
110
|
+
const searchLower = query.toLowerCase();
|
|
111
|
+
return (option.label.toLowerCase().includes(searchLower) ||
|
|
112
|
+
(option.description?.toLowerCase().includes(searchLower) ?? false));
|
|
113
|
+
};
|
|
114
|
+
handleOptionSelect = (e) => {
|
|
115
|
+
this.value = e.detail.value;
|
|
116
|
+
this.selectedOption = e.detail.option;
|
|
117
|
+
this.leChange.emit(e.detail);
|
|
118
|
+
};
|
|
119
|
+
handleDropdownOpen = () => {
|
|
120
|
+
this.open = true;
|
|
121
|
+
this.leOpen.emit();
|
|
122
|
+
// Focus search input if searchable
|
|
123
|
+
if (this.searchable) {
|
|
124
|
+
setTimeout(() => {
|
|
125
|
+
this.inputEl?.focus();
|
|
126
|
+
}, 50);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
handleDropdownClose = () => {
|
|
130
|
+
this.open = false;
|
|
131
|
+
this.leClose.emit();
|
|
132
|
+
};
|
|
133
|
+
handleTriggerClick = () => {
|
|
134
|
+
if (!this.disabled) {
|
|
135
|
+
this.dropdownEl?.toggle();
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
handleTriggerKeyDown = (e) => {
|
|
139
|
+
if (this.disabled)
|
|
140
|
+
return;
|
|
141
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
142
|
+
e.preventDefault();
|
|
143
|
+
this.dropdownEl?.show();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
handleSearchInput = (e) => {
|
|
147
|
+
const target = e.target;
|
|
148
|
+
this.searchQuery = target.value;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Opens the dropdown.
|
|
152
|
+
*/
|
|
153
|
+
async showDropdown() {
|
|
154
|
+
await this.dropdownEl?.show();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Closes the dropdown.
|
|
158
|
+
*/
|
|
159
|
+
async hideDropdown() {
|
|
160
|
+
await this.dropdownEl?.hide();
|
|
161
|
+
}
|
|
162
|
+
renderIcon(icon) {
|
|
163
|
+
if (!icon)
|
|
164
|
+
return null;
|
|
165
|
+
if (icon.startsWith('http') || icon.startsWith('/')) {
|
|
166
|
+
return index.h("img", { class: "trigger-icon", src: icon, alt: "" });
|
|
167
|
+
}
|
|
168
|
+
return index.h("span", { class: "trigger-icon" }, icon);
|
|
169
|
+
}
|
|
170
|
+
render() {
|
|
171
|
+
const hasValue = this.selectedOption !== undefined;
|
|
172
|
+
return (index.h("le-component", { key: 'c8ce895d257cb8e40f1f4d1181ece5db9c2df9f5', component: "le-select" }, index.h("le-dropdown-base", { key: 'f8ed2326295860fb658cca0eae4c153a2dbcb833', ref: el => (this.dropdownEl = el), options: this.parsedOptions, value: this.value, disabled: this.disabled, filterFn: this.searchable ? this.filterOption : undefined, filterQuery: this.searchQuery, onLeOptionSelect: this.handleOptionSelect, onLeDropdownOpen: this.handleDropdownOpen, onLeDropdownClose: this.handleDropdownClose, fullWidth: this.fullWidth }, index.h("le-button", { key: 'c72c327bfa5874f55defc08fe8057bb109a4b6c3', variant: this.variant && this.variant !== 'default' ? this.variant : 'outlined', slot: "trigger", align: "space-between", class: {
|
|
173
|
+
'select-trigger': true,
|
|
174
|
+
'has-value': hasValue,
|
|
175
|
+
'is-open': this.open,
|
|
176
|
+
}, mode: "default", size: this.size, disabled: this.disabled, "aria-haspopup": "listbox", "aria-expanded": this.open ? 'true' : 'false', onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown, fullWidth: this.fullWidth, iconStart: hasValue && this.selectedOption?.iconStart
|
|
177
|
+
? this.renderIcon(this.selectedOption.iconStart)
|
|
178
|
+
: null, iconEnd: index.h("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("path", { d: "M4 6l4 4 4-4" })) }, index.h("span", { key: '717d9ea1dc386f4adf13aba94c82a1d8f8781c37', class: "trigger-label" }, hasValue ? this.selectedOption.label : this.placeholder)), this.searchable && this.open && (index.h("div", { key: '7833ecb5f569e05e04c606117bf87f82ae5a268c', class: "multiselect-search", slot: "header" }, index.h("le-string-input", { key: 'd8f4de77eb3079a11e1d707b74dca43f034ef85d', mode: "default", inputRef: el => (this.inputEl = el), class: "search-input", placeholder: "Search...", value: this.searchQuery, onInput: this.handleSearchInput })))), this.name && index.h("input", { key: 'caa92c54c78af922c471b1cb327969e83dea195b', type: "hidden", name: this.name, value: this.value?.toString() ?? '' })));
|
|
179
|
+
}
|
|
180
|
+
static get watchers() { return {
|
|
181
|
+
"value": ["handleValueChange"],
|
|
182
|
+
"options": ["handleOptionsChange"]
|
|
183
|
+
}; }
|
|
184
|
+
};
|
|
185
|
+
LeSelect.style = leSelectCss;
|
|
186
|
+
|
|
187
|
+
exports.le_select = LeSelect;
|
|
188
|
+
//# sourceMappingURL=le-select.entry.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"le-select.entry.cjs.js","sources":["src/components/le-select/le-select.css?tag=le-select&encapsulation=shadow","src/components/le-select/le-select.tsx"],"sourcesContent":["/**\n * le-select component styles\n *\n * CSS Custom Properties:\n * --le-select-height\n * --le-select-padding-x\n * --le-select-font-size\n * --le-select-border-radius\n * --le-select-border-color\n * --le-select-bg\n * --le-select-color\n */\n\n:host {\n display: inline-block;\n min-width: 150px;\n --le-select-color: var(--le-color-text, #1f2937);\n --le-select-border-radius: var(--le-radius-md);\n --le-select-content-padding: var(--le-spacing-2);\n}\n\n:host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n}\n\n:host([full-width]) {\n width: 100%;\n}\n\n/* Trigger button */\n.select-trigger {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0;\n --le-button-padding: var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-2);\n font-size: var(--le-select-font-size, 0.875rem);\n font-family: inherit;\n line-height: 1.4;\n color: var(--le-select-color);\n background: var(--le-select-bg, var(--le-color-surface, #fff));\n border-radius: var(--le-select-border-radius);\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n\n.select-trigger:focus {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Placeholder state */\n.select-trigger:not(.has-value) .trigger-label {\n color: color-mix(in srgb, var(--le-color-text-secondary) 66%, transparent);\n}\n\n/* Trigger icon */\n.trigger-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n}\n\n.trigger-icon-end {\n width: 16px;\n height: 16px;\n}\n\n.trigger-icon img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* Trigger label */\n.trigger-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--le-color-text);\n}\n\n.trigger-label::not(.has-value) {\n color: var(--le-color-text-disabled, #9ca3af);\n}\n\n/* Arrow icon */\nle-button::part(icon-end) {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n margin-left: auto;\n transition: transform 0.2s ease;\n}\n\nle-button::part(icon-end) svg {\n width: 1rem;\n height: 1rem;\n}\n\nle-button.is-open::part(icon-end) {\n transform: rotate(180deg);\n}\n\n/* Search in dropdown */\n.search-input::part(container):focus-within {\n outline: none !important;\n}\n.search-input {\n --le-input-radius: var(--le-radius-md);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Method,\n Element,\n Watch,\n h,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\n\n/**\n * A select dropdown component for single selection.\n *\n * @cmsEditable true\n * @cmsCategory Form\n *\n * @example Basic select\n * ```html\n * <le-select\n * placeholder=\"Choose an option\"\n * options='[{\"label\": \"Option 1\", \"value\": \"1\"}, {\"label\": \"Option 2\", \"value\": \"2\"}]'\n * ></le-select>\n * ```\n *\n * @example With icons\n * ```html\n * <le-select\n * options='[\n * {\"label\": \"Apple\", \"value\": \"apple\", \"iconStart\": \"🍎\"},\n * {\"label\": \"Banana\", \"value\": \"banana\", \"iconStart\": \"🍌\"}\n * ]'\n * ></le-select>\n * ```\n *\n * @example Grouped options\n * ```html\n * <le-select\n * options='[\n * {\"label\": \"Apple\", \"value\": \"apple\", \"group\": \"Fruits\"},\n * {\"label\": \"Carrot\", \"value\": \"carrot\", \"group\": \"Vegetables\"}\n * ]'\n * ></le-select>\n * ```\n */\n@Component({\n tag: 'le-select',\n styleUrl: 'le-select.css',\n shadow: true,\n})\nexport class LeSelect {\n @Element() el: HTMLElement;\n\n /**\n * The options to display in the dropdown.\n */\n @Prop() options: LeOption[] | string = [];\n\n /**\n * The currently selected value.\n */\n @Prop({ mutable: true }) value?: LeOptionValue;\n\n /**\n * Placeholder text when no option is selected.\n */\n @Prop() placeholder: string = 'Select an option';\n\n /**\n * Whether the select is disabled.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Whether selection is required.\n */\n @Prop() required: boolean = false;\n\n /**\n * Name attribute for form submission.\n */\n @Prop() name?: string;\n\n /**\n * Whether the select should take full width of its container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Size variant of the select.\n */\n @Prop({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Visual variant of the select.\n */\n @Prop({ reflect: true }) variant: 'default' | 'outlined' | 'solid' = 'default';\n\n /**\n * Whether the input is searchable.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Text to show when no options match the search.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether the dropdown is currently open.\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Emitted when the selected value changes.\n */\n @Event() leChange: EventEmitter<LeOptionSelectDetail>;\n\n /**\n * Emitted when the dropdown opens.\n */\n @Event() leOpen: EventEmitter<void>;\n\n /**\n * Emitted when the dropdown closes.\n */\n @Event() leClose: EventEmitter<void>;\n\n @State() private selectedOption?: LeOption;\n\n @State() private searchQuery: string = '';\n\n private dropdownEl?: HTMLLeDropdownBaseElement;\n private inputEl?: HTMLInputElement;\n\n @Watch('value')\n handleValueChange() {\n this.updateSelectedOption();\n }\n\n @Watch('options')\n handleOptionsChange() {\n this.updateSelectedOption();\n }\n\n componentWillLoad() {\n this.updateSelectedOption();\n }\n\n private get parsedOptions(): LeOption[] {\n if (typeof this.options === 'string') {\n try {\n return JSON.parse(this.options);\n } catch {\n return [];\n }\n }\n return this.options;\n }\n\n private updateSelectedOption() {\n if (this.value !== undefined) {\n this.selectedOption = this.parsedOptions.find(opt => (opt.value ?? opt.label) === this.value);\n } else {\n this.selectedOption = undefined;\n }\n }\n\n private filterOption = (option: LeOption, query: string): boolean => {\n if (!query) return true;\n\n const searchLower = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(searchLower) ||\n (option.description?.toLowerCase().includes(searchLower) ?? false)\n );\n };\n\n private handleOptionSelect = (e: CustomEvent<LeOptionSelectDetail>) => {\n this.value = e.detail.value;\n this.selectedOption = e.detail.option;\n this.leChange.emit(e.detail);\n };\n\n private handleDropdownOpen = () => {\n this.open = true;\n this.leOpen.emit();\n\n // Focus search input if searchable\n if (this.searchable) {\n setTimeout(() => {\n this.inputEl?.focus();\n }, 50);\n }\n };\n\n private handleDropdownClose = () => {\n this.open = false;\n this.leClose.emit();\n };\n\n private handleTriggerClick = () => {\n if (!this.disabled) {\n this.dropdownEl?.toggle();\n }\n };\n\n private handleTriggerKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n this.dropdownEl?.show();\n }\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n /**\n * Opens the dropdown.\n */\n @Method()\n async showDropdown() {\n await this.dropdownEl?.show();\n }\n\n /**\n * Closes the dropdown.\n */\n @Method()\n async hideDropdown() {\n await this.dropdownEl?.hide();\n }\n\n private renderIcon(icon: string | undefined) {\n if (!icon) return null;\n\n if (icon.startsWith('http') || icon.startsWith('/')) {\n return <img class=\"trigger-icon\" src={icon} alt=\"\" />;\n }\n\n return <span class=\"trigger-icon\">{icon}</span>;\n }\n\n render() {\n const hasValue = this.selectedOption !== undefined;\n\n return (\n <le-component component=\"le-select\">\n <le-dropdown-base\n ref={el => (this.dropdownEl = el)}\n options={this.parsedOptions}\n value={this.value}\n disabled={this.disabled}\n filterFn={this.searchable ? this.filterOption : undefined}\n filterQuery={this.searchQuery}\n onLeOptionSelect={this.handleOptionSelect}\n onLeDropdownOpen={this.handleDropdownOpen}\n onLeDropdownClose={this.handleDropdownClose}\n fullWidth={this.fullWidth}\n >\n <le-button\n variant={this.variant && this.variant !== 'default' ? this.variant : 'outlined'}\n slot=\"trigger\"\n align=\"space-between\"\n class={{\n 'select-trigger': true,\n 'has-value': hasValue,\n 'is-open': this.open,\n }}\n mode=\"default\"\n size={this.size}\n disabled={this.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={this.open ? 'true' : 'false'}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeyDown}\n fullWidth={this.fullWidth}\n iconStart={\n hasValue && this.selectedOption?.iconStart\n ? this.renderIcon(this.selectedOption.iconStart)\n : null\n }\n iconEnd={\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n }\n >\n <span class=\"trigger-label\">\n {hasValue ? this.selectedOption!.label : this.placeholder}\n </span>\n </le-button>\n\n {/* Search input shown in dropdown header */}\n {this.searchable && this.open && (\n <div class=\"multiselect-search\" slot=\"header\">\n <le-string-input\n mode=\"default\"\n inputRef={el => (this.inputEl = el)}\n class=\"search-input\"\n placeholder=\"Search...\"\n value={this.searchQuery}\n onInput={this.handleSearchInput}\n />\n </div>\n )}\n </le-dropdown-base>\n\n {/* Hidden input for form submission */}\n {this.name && <input type=\"hidden\" name={this.name} value={this.value?.toString() ?? ''} />}\n </le-component>\n );\n }\n}\n"],"names":["h"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
4
|
-
var utils = require('./utils-
|
|
3
|
+
var index = require('./index-C3iQZ-Ja.js');
|
|
4
|
+
var utils = require('./utils-DjPcLPN9.js');
|
|
5
5
|
|
|
6
6
|
const leStackDefaultCss = ":host{display:block}:host([hidden]){display:none}.stack{gap:var(--le-stack-gap, var(--le-space-md))}:host(.full-width){width:100%}:host(.full-height){height:100%}:host(.direction-horizontal) .stack{min-height:0}:host(.direction-vertical) .stack{min-width:0}";
|
|
7
7
|
|
|
@@ -126,7 +126,7 @@ const LeStack = class {
|
|
|
126
126
|
});
|
|
127
127
|
// Slot style for admin mode - make items display in the same direction
|
|
128
128
|
const slotStyle = `display: flex; flex-direction: ${this.getFlexDirection()}; gap: ${this.gap || 'var(--le-space-md)'}; flex-wrap: ${this.wrap ? 'wrap' : 'nowrap'}; justify-content: ${this.getJustifyContent()}; align-items: ${this.getAlignItems()};`;
|
|
129
|
-
return (index.h("le-component", { key: '
|
|
129
|
+
return (index.h("le-component", { key: '22c1dddc31186f718f637888580dc13b8f38ae70', component: "le-stack", hostClass: hostClass }, index.h("div", { key: '68265d4b9999b4c5dac9f53432bebf39f0ab6bf3', class: "stack", part: "stack", style: style }, index.h("le-slot", { key: '01717eb67627d3dba0c48267e14a52d4424659ad', name: "", description: `Items arranged ${this.direction}ly${this.maxItems ? ` (max ${this.maxItems})` : ''}`, type: "slot", "allowed-components": "le-text,le-box,le-card,le-button,le-stack", slotStyle: slotStyle }, index.h("slot", { key: 'b846cb2b46ee3240b288f9a5c112ffda3fdb26cc' })))));
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
132
|
LeStack.style = leStackDefaultCss;
|