@duetds/components 8.5.5 → 8.6.0
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/hydrate/index.js +289 -113
- package/lib/cjs/duet-alert.cjs.entry.js +1 -1
- package/lib/cjs/duet-banner.cjs.entry.js +1 -1
- package/lib/cjs/duet-callout.cjs.entry.js +1 -1
- package/lib/cjs/duet-chip.cjs.entry.js +9 -2
- package/lib/cjs/duet-choice_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
- package/lib/cjs/duet-combobox.cjs.entry.js +260 -127
- package/lib/cjs/duet-date-picker.cjs.entry.js +1 -1
- package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
- package/lib/cjs/duet-hero.cjs.entry.js +1 -1
- package/lib/cjs/duet-input_2.cjs.entry.js +39 -3
- package/lib/cjs/duet-modal.cjs.entry.js +1 -1
- package/lib/cjs/duet-multiselect.cjs.entry.js +1 -1
- package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
- package/lib/cjs/duet-promo-card.cjs.entry.js +1 -1
- package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-scrollable_3.cjs.entry.js +1 -1
- package/lib/cjs/duet-select.cjs.entry.js +1 -1
- package/lib/cjs/duet-slideout-panel.cjs.entry.js +1 -1
- package/lib/cjs/duet-slideout.cjs.entry.js +1 -1
- package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
- package/lib/cjs/duet.cjs.js +1 -1
- package/lib/cjs/loader.cjs.js +1 -1
- package/lib/cjs/{slot-utils-f5073417.js → slot-utils-03a40c78.js} +3 -1
- package/lib/collection/components/duet-chip/duet-chip.css +7 -0
- package/lib/collection/components/duet-chip/duet-chip.js +29 -2
- package/lib/collection/components/duet-combobox/duet-combobox-select-single.js +2 -2
- package/lib/collection/components/duet-combobox/duet-combobox.css +10 -2
- package/lib/collection/components/duet-combobox/duet-combobox.e2e.js +81 -51
- package/lib/collection/components/duet-combobox/duet-combobox.js +321 -142
- package/lib/collection/components/duet-input/duet-input.css +29 -0
- package/lib/collection/components/duet-input/duet-input.js +159 -3
- package/lib/collection/utils/slot-utils.js +3 -1
- package/lib/dist-custom-elements/duet-action-button.js +1 -1
- package/lib/dist-custom-elements/duet-alert.js +1 -1
- package/lib/dist-custom-elements/duet-banner.js +1 -1
- package/lib/dist-custom-elements/duet-breadcrumb.js +1 -1
- package/lib/dist-custom-elements/duet-callout.js +1 -1
- package/lib/dist-custom-elements/duet-card.js +1 -1
- package/lib/dist-custom-elements/duet-chip.js +1 -273
- package/lib/dist-custom-elements/duet-choice-group.js +5 -5
- package/lib/dist-custom-elements/duet-choice.js +2 -2
- package/lib/dist-custom-elements/duet-collapsible.js +2 -2
- package/lib/dist-custom-elements/duet-combobox.js +326 -132
- package/lib/dist-custom-elements/duet-cookie-consent.js +1 -1
- package/lib/dist-custom-elements/duet-date-picker.js +6 -6
- package/lib/dist-custom-elements/duet-editable-table.js +2 -2
- package/lib/dist-custom-elements/duet-fieldset.js +1 -1
- package/lib/dist-custom-elements/duet-footer.js +1 -1
- package/lib/dist-custom-elements/duet-header.js +1 -1
- package/lib/dist-custom-elements/duet-hero.js +1 -1
- package/lib/dist-custom-elements/duet-input.js +1 -1
- package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.js +1 -1
- package/lib/dist-custom-elements/duet-menu-bar-dropdown.js +1 -1
- package/lib/dist-custom-elements/duet-modal.js +2 -2
- package/lib/dist-custom-elements/duet-multiselect.js +5 -5
- package/lib/dist-custom-elements/duet-notification-drawer.js +1 -1
- package/lib/dist-custom-elements/duet-notification.js +1 -1
- package/lib/dist-custom-elements/duet-number-input.js +6 -6
- package/lib/dist-custom-elements/duet-pagination.js +6 -6
- package/lib/dist-custom-elements/duet-popup-menu.js +1 -1
- package/lib/dist-custom-elements/duet-promo-card.js +1 -1
- package/lib/dist-custom-elements/duet-radio-group.js +5 -5
- package/lib/dist-custom-elements/duet-range-slider.js +1 -1
- package/lib/dist-custom-elements/duet-range-stepper.js +2 -2
- package/lib/dist-custom-elements/duet-scrollable.js +1 -1
- package/lib/dist-custom-elements/duet-select.js +1 -1
- package/lib/dist-custom-elements/duet-show-more.js +1 -1
- package/lib/dist-custom-elements/duet-slideout-panel.js +1 -1
- package/lib/dist-custom-elements/duet-slideout.js +2 -2
- package/lib/dist-custom-elements/duet-step.js +1 -1
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.js +1 -1
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown.js +1 -1
- package/lib/dist-custom-elements/duet-submenu-bar-item.js +1 -1
- package/lib/dist-custom-elements/duet-submenu-bar-link.js +1 -1
- package/lib/dist-custom-elements/duet-tab-group.js +6 -6
- package/lib/dist-custom-elements/duet-tab.js +1 -1
- package/lib/dist-custom-elements/duet-textarea.js +4 -4
- package/lib/dist-custom-elements/duet-toggle.js +1 -1
- package/lib/dist-custom-elements/duet-toolbar-dropdown-link.js +1 -1
- package/lib/dist-custom-elements/duet-toolbar-dropdown.js +1 -1
- package/lib/dist-custom-elements/duet-tooltip-button.js +1 -1
- package/lib/dist-custom-elements/duet-tooltip-popup.js +1 -1
- package/lib/dist-custom-elements/duet-tooltip.js +1 -1
- package/lib/dist-custom-elements/duet-tray.js +1 -1
- package/lib/dist-custom-elements/duet-upload-item.js +1 -1
- package/lib/dist-custom-elements/duet-upload.js +5 -5
- package/lib/dist-custom-elements/{p-cff358b0.js → p-014c1177.js} +49 -8
- package/lib/dist-custom-elements/{p-c3d02eb2.js → p-03152b20.js} +1 -1
- package/lib/dist-custom-elements/{p-d87f6dd5.js → p-06e608ae.js} +3 -1
- package/lib/dist-custom-elements/{p-9cdbc360.js → p-0cee8a12.js} +1 -1
- package/lib/dist-custom-elements/{p-12a0876b.js → p-24693e9a.js} +1 -1
- package/lib/dist-custom-elements/{p-9a833e56.js → p-28ec3461.js} +1 -1
- package/lib/dist-custom-elements/{p-d191ba9e.js → p-45fd4d84.js} +1 -1
- package/lib/dist-custom-elements/{p-89d58b60.js → p-6d366100.js} +3 -3
- package/lib/dist-custom-elements/p-755dd68f.js +285 -0
- package/lib/dist-custom-elements/{p-e44c0eff.js → p-785686e3.js} +1 -1
- package/lib/dist-custom-elements/{p-e00d43f3.js → p-92a16064.js} +1 -1
- package/lib/dist-custom-elements/{p-f9f9e33d.js → p-a02e62f3.js} +3 -3
- package/lib/dist-custom-elements/{p-0d5c0a22.js → p-c8415e2f.js} +1 -1
- package/lib/dist-custom-elements/{p-d848b48d.js → p-e702eb52.js} +4 -4
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/{p-88a46585.system.entry.js → p-061f4be0.system.entry.js} +1 -1
- package/lib/duet/p-06e608ae.js +4 -0
- package/lib/duet/{p-8ca813cb.system.entry.js → p-0778ccde.system.entry.js} +1 -1
- package/lib/duet/p-07ac7f3e.system.entry.js +4 -0
- package/lib/duet/p-15e24bf0.entry.js +4 -0
- package/lib/duet/{p-0dac34a4.system.entry.js → p-1ef0e5ca.system.entry.js} +1 -1
- package/lib/duet/{p-c9781f22.entry.js → p-2084a65f.entry.js} +1 -1
- package/lib/duet/{p-fd0bb0bf.entry.js → p-23cecf9f.entry.js} +1 -1
- package/lib/duet/{p-09e4195f.system.entry.js → p-257800b7.system.entry.js} +1 -1
- package/lib/duet/{p-1afd901a.entry.js → p-29491f9f.entry.js} +1 -1
- package/lib/duet/{p-3b5ff822.entry.js → p-3302d75d.entry.js} +1 -1
- package/lib/duet/{p-7629cd0a.entry.js → p-40375e30.entry.js} +1 -1
- package/lib/duet/{p-ba4445cf.system.entry.js → p-45bb3cd0.system.entry.js} +1 -1
- package/lib/duet/p-4781cd58.entry.js +4 -0
- package/lib/duet/p-4cb5943c.entry.js +4 -0
- package/lib/duet/{p-b2f2992f.system.entry.js → p-4de910bd.system.entry.js} +1 -1
- package/lib/duet/p-6151635f.system.js +1 -1
- package/lib/duet/{p-d349dd93.entry.js → p-67382632.entry.js} +1 -1
- package/lib/duet/{p-699a98b4.entry.js → p-76e54ff5.entry.js} +1 -1
- package/lib/duet/{p-4d2ef0e2.entry.js → p-7a161455.entry.js} +1 -1
- package/lib/duet/{p-3d38079c.entry.js → p-7ca15c93.entry.js} +1 -1
- package/lib/duet/{p-bb09fff0.system.entry.js → p-7de614df.system.entry.js} +1 -1
- package/lib/duet/{p-480f37b6.entry.js → p-83238fe7.entry.js} +1 -1
- package/lib/duet/{p-7c1db591.system.entry.js → p-8a4ba903.system.entry.js} +1 -1
- package/lib/duet/{p-4f32a7ee.entry.js → p-8ba91848.entry.js} +1 -1
- package/lib/duet/{p-708359ec.system.entry.js → p-999fff8d.system.entry.js} +1 -1
- package/lib/duet/{p-9d91a1dd.system.entry.js → p-9e75e5d8.system.entry.js} +1 -1
- package/lib/duet/{p-343d037e.entry.js → p-a3afb1af.entry.js} +1 -1
- package/lib/duet/{p-2ca6a8a0.system.entry.js → p-a3e90064.system.entry.js} +1 -1
- package/lib/duet/{p-892a5644.system.entry.js → p-aba91113.system.entry.js} +1 -1
- package/lib/duet/p-ae21ad57.system.js +4 -0
- package/lib/duet/{p-ce05fe6d.system.entry.js → p-b2fc4b72.system.entry.js} +1 -1
- package/lib/duet/{p-84778369.entry.js → p-b5595969.entry.js} +1 -1
- package/lib/duet/{p-bf51f8a5.system.entry.js → p-c68602c9.system.entry.js} +1 -1
- package/lib/duet/{p-f6530332.system.entry.js → p-d5721f0d.system.entry.js} +1 -1
- package/lib/duet/{p-c00fe4ed.entry.js → p-dc133655.entry.js} +1 -1
- package/lib/duet/p-de5054b6.system.entry.js +4 -0
- package/lib/duet/{p-61feb701.entry.js → p-df345202.entry.js} +1 -1
- package/lib/duet/{p-2628a322.entry.js → p-e0907f29.entry.js} +1 -1
- package/lib/duet/p-e333b9fc.system.entry.js +4 -0
- package/lib/duet/p-e411627f.entry.js +4 -0
- package/lib/duet/{p-da51c71f.system.entry.js → p-eafed149.system.entry.js} +1 -1
- package/lib/duet/p-f2279e1e.entry.js +4 -0
- package/lib/duet/{p-b1ab1664.system.entry.js → p-fa311641.system.entry.js} +1 -1
- package/lib/duet/{p-320318de.system.entry.js → p-fa72c79b.system.entry.js} +1 -1
- package/lib/esm/duet-alert.entry.js +1 -1
- package/lib/esm/duet-banner.entry.js +1 -1
- package/lib/esm/duet-callout.entry.js +1 -1
- package/lib/esm/duet-chip.entry.js +9 -2
- package/lib/esm/duet-choice_2.entry.js +1 -1
- package/lib/esm/duet-collapsible.entry.js +1 -1
- package/lib/esm/duet-combobox.entry.js +261 -128
- package/lib/esm/duet-date-picker.entry.js +1 -1
- package/lib/esm/duet-fieldset.entry.js +1 -1
- package/lib/esm/duet-hero.entry.js +1 -1
- package/lib/esm/duet-input_2.entry.js +39 -3
- package/lib/esm/duet-modal.entry.js +1 -1
- package/lib/esm/duet-multiselect.entry.js +1 -1
- package/lib/esm/duet-number-input.entry.js +1 -1
- package/lib/esm/duet-promo-card.entry.js +1 -1
- package/lib/esm/duet-radio_2.entry.js +1 -1
- package/lib/esm/duet-scrollable_3.entry.js +1 -1
- package/lib/esm/duet-select.entry.js +1 -1
- package/lib/esm/duet-slideout-panel.entry.js +1 -1
- package/lib/esm/duet-slideout.entry.js +1 -1
- package/lib/esm/duet-textarea.entry.js +1 -1
- package/lib/esm/duet.js +1 -1
- package/lib/esm/loader.js +1 -1
- package/lib/esm/{slot-utils-1115a819.js → slot-utils-b50aaef5.js} +3 -1
- package/lib/esm-es5/duet-alert.entry.js +1 -1
- package/lib/esm-es5/duet-banner.entry.js +1 -1
- package/lib/esm-es5/duet-callout.entry.js +1 -1
- package/lib/esm-es5/duet-chip.entry.js +1 -1
- package/lib/esm-es5/duet-choice_2.entry.js +1 -1
- package/lib/esm-es5/duet-collapsible.entry.js +1 -1
- package/lib/esm-es5/duet-combobox.entry.js +2 -2
- package/lib/esm-es5/duet-date-picker.entry.js +1 -1
- package/lib/esm-es5/duet-fieldset.entry.js +1 -1
- package/lib/esm-es5/duet-hero.entry.js +1 -1
- package/lib/esm-es5/duet-input_2.entry.js +2 -2
- package/lib/esm-es5/duet-modal.entry.js +1 -1
- package/lib/esm-es5/duet-multiselect.entry.js +1 -1
- package/lib/esm-es5/duet-number-input.entry.js +2 -2
- package/lib/esm-es5/duet-promo-card.entry.js +2 -2
- package/lib/esm-es5/duet-radio_2.entry.js +1 -1
- package/lib/esm-es5/duet-scrollable_3.entry.js +1 -1
- package/lib/esm-es5/duet-select.entry.js +1 -1
- package/lib/esm-es5/duet-slideout-panel.entry.js +1 -1
- package/lib/esm-es5/duet-slideout.entry.js +1 -1
- package/lib/esm-es5/duet-textarea.entry.js +1 -1
- package/lib/esm-es5/duet.js +1 -1
- package/lib/esm-es5/loader.js +1 -1
- package/lib/esm-es5/slot-utils-b50aaef5.js +4 -0
- package/lib/types/components/duet-chip/duet-chip.d.ts +4 -0
- package/lib/types/components/duet-combobox/duet-combobox.d.ts +49 -35
- package/lib/types/components/duet-input/duet-input.d.ts +30 -0
- package/lib/types/components.d.ts +44 -21
- package/package.json +2 -2
- package/lib/duet/p-7cf03aa8.system.js +0 -4
- package/lib/duet/p-92e1181c.entry.js +0 -4
- package/lib/duet/p-985c0c67.system.entry.js +0 -4
- package/lib/duet/p-9d27bc65.entry.js +0 -4
- package/lib/duet/p-afe29a3e.entry.js +0 -4
- package/lib/duet/p-cc4a8964.entry.js +0 -4
- package/lib/duet/p-d50ad3ed.entry.js +0 -4
- package/lib/duet/p-d87f6dd5.js +0 -4
- package/lib/duet/p-f1b01db9.system.entry.js +0 -4
- package/lib/duet/p-fa21a3b6.system.entry.js +0 -4
- package/lib/esm-es5/slot-utils-1115a819.js +0 -4
|
@@ -5,18 +5,29 @@ import { p as proxyCustomElement, H, c as createEvent, h as h$1, d as Host } fro
|
|
|
5
5
|
import { i as inheritGlobalTheme } from './p-a58bd561.js';
|
|
6
6
|
import { c as createID } from './p-5e59e970.js';
|
|
7
7
|
import { d as debounce } from './p-9e371678.js';
|
|
8
|
-
import { c as isEnterKey, b as isEscapeKey, d as isTabKey, e as
|
|
8
|
+
import { c as isEnterKey, b as isEscapeKey, d as isTabKey, e as isBackspaceKey, f as isArrowUpKey, g as isArrowDownKey } from './p-785686e3.js';
|
|
9
9
|
import { g as getLocaleString, a as getLanguage, c as connectLanguageChangeObserver, d as disconnectLanguageChangeObserver } from './p-2e36d5bf.js';
|
|
10
|
+
import { g as getElementsFromDefaultSlot } from './p-06e608ae.js';
|
|
10
11
|
import { p as parsePossibleJSON } from './p-0e052642.js';
|
|
11
12
|
import { h, F as Fragment } from './p-33937fd7.js';
|
|
12
|
-
import { d as defineCustomElement$
|
|
13
|
+
import { d as defineCustomElement$c } from './p-83231ea8.js';
|
|
14
|
+
import { d as defineCustomElement$b } from './p-b6322d8d.js';
|
|
15
|
+
import { d as defineCustomElement$a } from './p-755dd68f.js';
|
|
16
|
+
import { d as defineCustomElement$9 } from './p-667579b0.js';
|
|
17
|
+
import { d as defineCustomElement$8 } from './p-014c1177.js';
|
|
18
|
+
import { d as defineCustomElement$7 } from './p-e3d597b6.js';
|
|
19
|
+
import { d as defineCustomElement$6 } from './p-63954651.js';
|
|
20
|
+
import { d as defineCustomElement$5 } from './p-a02e62f3.js';
|
|
21
|
+
import { d as defineCustomElement$4 } from './p-c8415e2f.js';
|
|
22
|
+
import { d as defineCustomElement$3 } from './p-0cee8a12.js';
|
|
23
|
+
import { d as defineCustomElement$2 } from './p-d1815d2a.js';
|
|
13
24
|
|
|
14
25
|
const SelectSingle = ({ item, search = "", selected }) => {
|
|
15
|
-
const regEx = search !== "" ? new RegExp("(" + search.split(" ").join("|") + ")", "
|
|
26
|
+
const regEx = search !== "" ? new RegExp("(" + search.split(" ").join("|") + ")", "i") : undefined;
|
|
16
27
|
return (h(Fragment, null,
|
|
17
28
|
selected && h("duet-icon", { class: "option-icon", name: "messaging-checked", size: "xx-small", margin: "none" }),
|
|
18
29
|
regEx ? (h("span", { class: "option-container", "aria-hidden": "true" },
|
|
19
|
-
h("span", { innerHTML: item.name.replace(regEx, '<span class="highlight">$&</span>') }))) : (item.name),
|
|
30
|
+
h("span", { innerHTML: item.name.replace(regEx, '<span class="highlight sc-duet-combobox">$&</span>') }))) : (item.name),
|
|
20
31
|
item.tags && h("span", { class: "option-tags" }, item.tags.join(", "))));
|
|
21
32
|
};
|
|
22
33
|
|
|
@@ -35,7 +46,7 @@ const DuetComboBoxSelect = ({ item, active, total, selected, label = undefined,
|
|
|
35
46
|
h(SelectSingle, { item: item, search: search, selected: selected }))));
|
|
36
47
|
};
|
|
37
48
|
|
|
38
|
-
const duetComboboxCss = ".sc-duet-combobox-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;position:relative;display:inline-block;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:rgb(0, 41, 77)}.sc-duet-combobox-h a.sc-duet-combobox{color:rgb(0, 41, 77);transition:none}.duet-theme-turva.sc-duet-combobox-h{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:rgb(23, 28, 58)}.duet-theme-turva.sc-duet-combobox-h a.sc-duet-combobox{color:rgb(23, 28, 58)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-tags.sc-duet-combobox{color:rgb(116, 116, 117)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.selected.sc-duet-combobox{background:rgb(244, 207, 214)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover{color:rgb(255, 255, 255);background:rgb(198, 12, 48)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox .option-tags.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus .option-tags.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover .option-tags.sc-duet-combobox{color:rgb(255, 255, 255)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox a.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus a.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover a.sc-duet-combobox{color:rgb(255, 255, 255)}.duet-combobox-list.sc-duet-combobox{position:absolute;top:calc(100% - 12px);z-index:700;
|
|
49
|
+
const duetComboboxCss = ".sc-duet-combobox-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;position:relative;display:inline-block;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:rgb(0, 41, 77)}.sc-duet-combobox-h a.sc-duet-combobox{color:rgb(0, 41, 77);transition:none}.duet-theme-turva.sc-duet-combobox-h{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:rgb(23, 28, 58)}.duet-theme-turva.sc-duet-combobox-h a.sc-duet-combobox{color:rgb(23, 28, 58)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-tags.sc-duet-combobox{color:rgb(116, 116, 117)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.selected.sc-duet-combobox{background:rgb(244, 207, 214)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover{color:rgb(255, 255, 255);background:rgb(198, 12, 48)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox .option-tags.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus .option-tags.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover .option-tags.sc-duet-combobox{color:rgb(255, 255, 255)}.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox a.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus a.sc-duet-combobox,.duet-theme-turva.sc-duet-combobox-h .duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover a.sc-duet-combobox{color:rgb(255, 255, 255)}.duet-combobox-list.sc-duet-combobox{position:absolute;top:calc(100% - 12px);z-index:700;margin:8px 0 0;visibility:hidden;background:rgb(255, 255, 255);border-radius:0 4px;box-shadow:0 2px 10px 0 rgba(0, 41, 77, 0.1);opacity:0;transition:transform 300ms ease, opacity 300ms ease, visibility 300ms ease;transform:scale(0.96) translateZ(0) translateY(-20px);transform-origin:top right}.duet-combobox-list.open.sc-duet-combobox{visibility:visible;opacity:1;transition-property:transform, opacity;transform:scale(1.0001) translateZ(0) translateY(0)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox{max-height:200px;padding:0.75rem 0;margin:0;overflow-y:scroll;font-weight:600;list-style:none;cursor:pointer;scroll-behavior:smooth}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox{padding:4px 0}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:not(.selected){padding-left:16px}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:not(.selected) .highlight.sc-duet-combobox{text-decoration:underline}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-link.sc-duet-combobox{display:block;width:100%}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-tags.sc-duet-combobox{float:right;padding-right:0.875rem;font-weight:400;color:rgb(144, 149, 153)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.option-link.sc-duet-combobox{display:block;width:100%}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.selected.sc-duet-combobox{padding-left:0;background:rgb(205, 229, 241)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.selected.option.sc-duet-combobox .option-icon.sc-duet-combobox{padding:0 8px 0 8px}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.selected.option.sc-duet-combobox .option-tags.sc-duet-combobox{color:rgb(144, 149, 153)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover{color:rgb(255, 255, 255);background:rgb(0, 119, 179)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox .option-tags.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus .option-tags.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover .option-tags.sc-duet-combobox{color:rgb(255, 255, 255)}.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.active.sc-duet-combobox a.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus a.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .duet-combobox-listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover a.sc-duet-combobox{color:rgb(255, 255, 255)}";
|
|
39
50
|
|
|
40
51
|
const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox extends H {
|
|
41
52
|
constructor() {
|
|
@@ -52,24 +63,63 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
52
63
|
// this.listElement.style.width = `${currentWidth + 1}px`
|
|
53
64
|
}
|
|
54
65
|
}, 100));
|
|
55
|
-
this.
|
|
66
|
+
this.onInputChange = async (e) => {
|
|
67
|
+
const newValue = e.detail.value;
|
|
68
|
+
this.inputValue = newValue;
|
|
69
|
+
};
|
|
70
|
+
this.onInputClick = () => {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
if (this.openListOnClick) {
|
|
73
|
+
this.listOpen = !this.listOpen;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.listOpen = ((_a = this.inputValue) === null || _a === void 0 ? void 0 : _a.length) >= this.minCharacters;
|
|
77
|
+
}
|
|
78
|
+
if (!((_b = this.getFilteredItems()) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
79
|
+
this.listOpen = false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
this.onInputTyping = async (e) => {
|
|
83
|
+
var _a;
|
|
84
|
+
const newValue = e.detail.value;
|
|
85
|
+
if (!this.force && !this.multiple && this.selectedItems.size > 0 && newValue !== this.getSelectedItemLabel()) {
|
|
86
|
+
this.selectedItems.clear();
|
|
87
|
+
}
|
|
88
|
+
this.listOpen = String(newValue).length >= this.minCharacters && ((_a = this.getFilteredItems()) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
89
|
+
};
|
|
90
|
+
this.onKeyDown = (e) => {
|
|
56
91
|
//if selection is made, close the list and update internal and external values
|
|
92
|
+
const listItems = this.returnFilteredOrNonFiltered();
|
|
57
93
|
// this should be set to undefined on everything BUT up/down arrow according to the aria 1.1 specs
|
|
58
94
|
// https://www.w3.org/TR/wai-aria-practices-1.1/#combobox
|
|
59
95
|
this.input.accessibleActiveDescendant = undefined;
|
|
60
96
|
if (isEnterKey(e)) {
|
|
61
97
|
e.preventDefault();
|
|
62
|
-
this.
|
|
63
|
-
|
|
98
|
+
if (this.listOpen && this.activeItem !== undefined && listItems[this.activeItem]) {
|
|
99
|
+
if (this.multiple) {
|
|
100
|
+
this.addSelectedItem(listItems[this.activeItem].id, true);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.updateSelectedItem(listItems[this.activeItem].id, true);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
this.activeItem = undefined;
|
|
64
107
|
this.listOpen = false;
|
|
65
108
|
return;
|
|
66
109
|
}
|
|
67
|
-
//tabbing out or escaping, restore initial state
|
|
68
110
|
if (isEscapeKey(e) || isTabKey(e)) {
|
|
69
111
|
this.updateInputText(true);
|
|
112
|
+
this.activeItem = undefined;
|
|
70
113
|
this.listOpen = false;
|
|
71
114
|
return;
|
|
72
115
|
}
|
|
116
|
+
if (isBackspaceKey(e) && this.inputValue === "") {
|
|
117
|
+
if (this.multiple && this.selectedItems.size > 0) {
|
|
118
|
+
const lastItem = Array.from(this.selectedItems).pop();
|
|
119
|
+
this.removeSelectedItem(lastItem, true);
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
73
123
|
//handle arrow up/down navigation
|
|
74
124
|
let nextActiveItem = this.activeItem;
|
|
75
125
|
if (isArrowUpKey(e)) {
|
|
@@ -82,7 +132,6 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
82
132
|
this.listOpen = true;
|
|
83
133
|
}
|
|
84
134
|
if (isArrowDownKey(e) || isArrowUpKey(e)) {
|
|
85
|
-
const listItems = this.shouldListBeFiltered() ? this.getFilteredItems() : this.processedItems;
|
|
86
135
|
if (nextActiveItem < 0 || !nextActiveItem) {
|
|
87
136
|
nextActiveItem = 0;
|
|
88
137
|
}
|
|
@@ -95,13 +144,10 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
95
144
|
this.activeItem = nextActiveItem;
|
|
96
145
|
this.scrollToActive();
|
|
97
146
|
}
|
|
98
|
-
this.announceActive();
|
|
99
147
|
return;
|
|
100
148
|
};
|
|
101
149
|
this.processedItems = null;
|
|
102
|
-
this.inputWidth = 0;
|
|
103
150
|
this.inputValue = "";
|
|
104
|
-
this.selectionMsg = "";
|
|
105
151
|
this.listOpen = false;
|
|
106
152
|
this.selectedItems = new Set();
|
|
107
153
|
this.activeItem = undefined;
|
|
@@ -123,8 +169,11 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
123
169
|
},
|
|
124
170
|
};
|
|
125
171
|
this.accessibleLabels = getLocaleString(this.accessibleLabelDefaults, getLanguage());
|
|
172
|
+
this.label = "";
|
|
173
|
+
this.caption = "";
|
|
126
174
|
this.theme = "";
|
|
127
175
|
this.force = false;
|
|
176
|
+
this.multiple = false;
|
|
128
177
|
this.items = undefined;
|
|
129
178
|
this.formatter = (item) => item && item.name ? item.name : "";
|
|
130
179
|
this.value = undefined;
|
|
@@ -140,7 +189,7 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
140
189
|
const path = e.composedPath();
|
|
141
190
|
const isClickOutside = path.every(el => el !== this.element);
|
|
142
191
|
if (isClickOutside) {
|
|
143
|
-
this.updateInputText(true
|
|
192
|
+
this.updateInputText(true);
|
|
144
193
|
this.listOpen = false;
|
|
145
194
|
}
|
|
146
195
|
}
|
|
@@ -151,17 +200,67 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
151
200
|
async formatItem(item) {
|
|
152
201
|
return this.formatter(item);
|
|
153
202
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
203
|
+
processItems() {
|
|
204
|
+
const ids = [];
|
|
205
|
+
this.processedItems = parsePossibleJSON(this.items);
|
|
206
|
+
if (!Array.isArray(this.processedItems)) {
|
|
207
|
+
console.error("DuetCombobox: Items should be an array");
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (this.processedItems.length !== new Set([...this.processedItems]).size) {
|
|
211
|
+
console.warn("DuetCombobox: Duplicate item values found in the list");
|
|
212
|
+
}
|
|
213
|
+
this.processedItems = this.processedItems.map((item, index) => {
|
|
214
|
+
if (typeof item === "string") {
|
|
215
|
+
item = { name: item, value: item };
|
|
216
|
+
}
|
|
217
|
+
if (item.id !== undefined) {
|
|
218
|
+
item.id = String(item.id);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
item.id = `${JSON.stringify(item.value)}-${item.name}`;
|
|
222
|
+
}
|
|
223
|
+
if (ids.includes(item.id)) {
|
|
224
|
+
console.warn("DuetCombobox: Duplicate item id found in the list, postfixed with index");
|
|
225
|
+
item.id = `${item.id}-${index}`;
|
|
226
|
+
}
|
|
227
|
+
ids.push(item.id);
|
|
228
|
+
return item;
|
|
229
|
+
});
|
|
230
|
+
// remove any item selections that are no longer in the items list
|
|
231
|
+
const selectionsMissing = Array.from(this.selectedItems).filter(id => !this.processedItems.find(item => item.id === id));
|
|
232
|
+
if (selectionsMissing.length) {
|
|
233
|
+
if (this.multiple) {
|
|
234
|
+
selectionsMissing.forEach(id => this.removeSelectedItem(id));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
this.updateSelectedItem(selectionsMissing[0], true);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
157
240
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
this.
|
|
241
|
+
processValue() {
|
|
242
|
+
// empty string may be valid item value
|
|
243
|
+
if (this.value !== "" && !this.value) {
|
|
244
|
+
this.selectedItems.clear();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const values = Array.isArray(this.value) ? this.value : [this.value];
|
|
248
|
+
const ids = this.processedItems.filter(item => values.includes(item.value)).map(item => item.id);
|
|
249
|
+
// if value corresponds to the selectedItems, do nothing
|
|
250
|
+
if (ids.length === this.selectedItems.size && ids.every(id => this.selectedItems.has(id))) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (this.multiple) {
|
|
254
|
+
this.selectedItems.clear();
|
|
255
|
+
this.input.clearChips();
|
|
256
|
+
ids.forEach(id => this.addSelectedItem(id));
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
const selectedItem = this.processedItems.find(item => item.value === this.value);
|
|
260
|
+
this.updateSelectedItem(selectedItem.id);
|
|
162
261
|
}
|
|
163
262
|
}
|
|
164
|
-
|
|
263
|
+
processListOpenChange() {
|
|
165
264
|
if (this.openListOnClick) {
|
|
166
265
|
this.input.icon = this.listOpen ? "action-arrow-up" : "action-arrow-down";
|
|
167
266
|
}
|
|
@@ -174,63 +273,51 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
174
273
|
inheritGlobalTheme(this);
|
|
175
274
|
}
|
|
176
275
|
connectedCallback() {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
276
|
+
if (this.items) {
|
|
277
|
+
this.processItems();
|
|
278
|
+
}
|
|
279
|
+
const slottedElements = getElementsFromDefaultSlot(this.element);
|
|
280
|
+
if (slottedElements.length) {
|
|
281
|
+
this.input = slottedElements[0];
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.input = document.createElement("duet-input");
|
|
285
|
+
this.input.label = this.label;
|
|
286
|
+
this.input.caption = this.caption;
|
|
287
|
+
this.input.expand = true;
|
|
288
|
+
this.element.prepend(this.input);
|
|
289
|
+
}
|
|
290
|
+
this.input.chips = this.multiple;
|
|
291
|
+
this.input.addEventListener("duetChange", this.onInputChange);
|
|
292
|
+
this.input.addEventListener("duetInput", this.onInputTyping);
|
|
293
|
+
this.input.addEventListener("click", this.onInputClick);
|
|
190
294
|
//add correct aria attributes to the input element
|
|
191
295
|
this.input.role = "combobox";
|
|
192
296
|
this.input.accessibleExpanded = this.listOpen ? "true" : "false";
|
|
193
297
|
this.input.accessibleAutocomplete = "list";
|
|
194
298
|
this.input.accessibleControls = this.listBoxId;
|
|
299
|
+
this.element.addEventListener("keydown", this.onKeyDown);
|
|
300
|
+
connectLanguageChangeObserver(this, { prop: "accessibleLabels", defaults: "accessibleLabelDefaults" });
|
|
195
301
|
this.processListOpenChange();
|
|
196
302
|
}
|
|
197
303
|
disconnectedCallback() {
|
|
198
|
-
this.input.removeEventListener("duetChange", this.
|
|
199
|
-
this.input.removeEventListener("click",
|
|
200
|
-
this.element.removeEventListener("keydown", this.
|
|
201
|
-
this.listElement.removeEventListener("click", e => {
|
|
202
|
-
e.stopPropagation();
|
|
203
|
-
});
|
|
304
|
+
this.input.removeEventListener("duetChange", this.onInputChange);
|
|
305
|
+
this.input.removeEventListener("click", this.onInputClick);
|
|
306
|
+
this.element.removeEventListener("keydown", this.onKeyDown);
|
|
204
307
|
this.resizeObserver.disconnect();
|
|
205
308
|
disconnectLanguageChangeObserver(this);
|
|
206
309
|
}
|
|
207
310
|
componentDidLoad() {
|
|
208
311
|
// observe resize events to dynamically adjust size of dropdown area
|
|
209
312
|
this.resizeObserver.observe(this.input);
|
|
210
|
-
this.listElement.addEventListener("click", e => {
|
|
211
|
-
e.stopPropagation();
|
|
212
|
-
});
|
|
213
313
|
this.processValue();
|
|
214
314
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Updates the input text based on the selected/clicked items.
|
|
217
|
-
* @param event - event
|
|
218
|
-
*'param item: DuetComboboxItem - the item that was selected
|
|
219
|
-
*/
|
|
220
|
-
onListClick(e, item) {
|
|
221
|
-
e.preventDefault();
|
|
222
|
-
// update selected item with id
|
|
223
|
-
this.updateSelectedItems(item.id, true);
|
|
224
|
-
this.listOpen = false;
|
|
225
|
-
return this.listOpen;
|
|
226
|
-
}
|
|
227
315
|
/**
|
|
228
316
|
* Helper function that checks inputs in the field, compares it with the item list and returns true when inputvalue matches selectedItem id
|
|
229
|
-
* TODO: this should be disabled in multiple mode
|
|
230
317
|
*/
|
|
231
318
|
shouldListBeFiltered() {
|
|
232
|
-
if (this.selectedItems.size && this.input.value === this.inputValue) {
|
|
233
|
-
const item = this.
|
|
319
|
+
if (!this.multiple && this.selectedItems.size && this.input.value === this.inputValue) {
|
|
320
|
+
const item = this.processedItems.find(item => this.selectedItems.has(item.id));
|
|
234
321
|
return !(this.formatter(item).toLowerCase() === this.input.value.toLowerCase());
|
|
235
322
|
}
|
|
236
323
|
return true;
|
|
@@ -245,91 +332,135 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
245
332
|
: this.sortFilteredItems(this.processedItems)
|
|
246
333
|
: [];
|
|
247
334
|
}
|
|
335
|
+
emitChangeEvent(id) {
|
|
336
|
+
const item = this.processedItems.find(item => item.id === id);
|
|
337
|
+
this.duetChange.emit({
|
|
338
|
+
item,
|
|
339
|
+
value: this.value,
|
|
340
|
+
component: "duet-combobox",
|
|
341
|
+
});
|
|
342
|
+
}
|
|
248
343
|
/**
|
|
249
|
-
* Updates the selected items
|
|
250
|
-
* @param id
|
|
251
|
-
* @private
|
|
344
|
+
* Updates the value after selected items have changed for multiple selection.
|
|
252
345
|
*/
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
this.
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
346
|
+
updateMultipleValue() {
|
|
347
|
+
this.value = this.processedItems.filter(item => this.selectedItems.has(item.id)).map(item => item.value);
|
|
348
|
+
this.input.value = "";
|
|
349
|
+
this.updateChips();
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Add item with id to the selectedItems set. Used only when multiple is true.
|
|
353
|
+
*/
|
|
354
|
+
addSelectedItem(id, emitEvent) {
|
|
355
|
+
if (this.selectedItems.has(id)) {
|
|
356
|
+
return;
|
|
263
357
|
}
|
|
358
|
+
this.selectedItems.add(id);
|
|
359
|
+
this.updateMultipleValue();
|
|
264
360
|
if (emitEvent) {
|
|
265
|
-
|
|
266
|
-
this.duetChange.emit({
|
|
267
|
-
value: item[0].value,
|
|
268
|
-
item: item[0],
|
|
269
|
-
component: "duet-combobox",
|
|
270
|
-
});
|
|
361
|
+
this.emitChangeEvent(id);
|
|
271
362
|
}
|
|
272
|
-
await this.updateInputText();
|
|
273
363
|
}
|
|
274
364
|
/**
|
|
275
|
-
*
|
|
276
|
-
* @param bool -override to clear if invoked by "click outside"
|
|
365
|
+
* Remove item with id from the selectedItems set. Used only when multiple is true.
|
|
277
366
|
*/
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
367
|
+
removeSelectedItem(id, emitEvent) {
|
|
368
|
+
if (!this.selectedItems.has(id)) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
this.selectedItems.delete(id);
|
|
372
|
+
this.updateMultipleValue();
|
|
373
|
+
if (emitEvent) {
|
|
374
|
+
this.emitChangeEvent(id);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Updates the selected item based on the item id. Used only when multiple is false.
|
|
379
|
+
*/
|
|
380
|
+
async updateSelectedItem(id, emitEvent) {
|
|
381
|
+
if (this.selectedItems.has(id)) {
|
|
382
|
+
this.selectedItems.delete(id);
|
|
284
383
|
this.value = undefined;
|
|
285
|
-
this.activeItem = undefined;
|
|
286
384
|
}
|
|
287
|
-
|
|
288
|
-
this.
|
|
289
|
-
this.
|
|
290
|
-
this.
|
|
291
|
-
this.activeItem = undefined;
|
|
292
|
-
this.value = item[0].value;
|
|
385
|
+
else {
|
|
386
|
+
this.selectedItems.clear();
|
|
387
|
+
this.selectedItems.add(id);
|
|
388
|
+
this.value = this.processedItems.find(item => item.id === id).value;
|
|
293
389
|
}
|
|
294
|
-
if (
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
390
|
+
if (emitEvent) {
|
|
391
|
+
this.emitChangeEvent(id);
|
|
392
|
+
}
|
|
393
|
+
await this.updateInputText();
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Add or remove chips of the input based on the selectedItems Set.
|
|
397
|
+
*/
|
|
398
|
+
async updateChips() {
|
|
399
|
+
const ids = Array.from(this.selectedItems);
|
|
400
|
+
const chips = await this.input.getChips();
|
|
401
|
+
ids.forEach(async (id) => {
|
|
402
|
+
const item = this.processedItems.find(i => i.id === id);
|
|
403
|
+
const text = await this.formatItem(item);
|
|
404
|
+
const chipExists = await this.input.hasChip({ value: `${id}`, text });
|
|
405
|
+
if (!chipExists) {
|
|
406
|
+
const chip = document.createElement("duet-chip");
|
|
407
|
+
chip.variation = "input";
|
|
408
|
+
chip.value = `${id}`;
|
|
409
|
+
chip.textContent = text;
|
|
410
|
+
chip.addEventListener("duetRemove", evt => {
|
|
411
|
+
const id = evt.detail.value;
|
|
412
|
+
this.removeSelectedItem(id, true);
|
|
413
|
+
});
|
|
414
|
+
this.input.addChip(chip);
|
|
301
415
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
this.input.value = selectedValueLabel;
|
|
416
|
+
});
|
|
417
|
+
chips.forEach(chip => {
|
|
418
|
+
if (!ids.includes(chip.value)) {
|
|
419
|
+
chip.remove();
|
|
307
420
|
}
|
|
308
|
-
}
|
|
309
|
-
this.listOpen = false;
|
|
421
|
+
});
|
|
310
422
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
this.
|
|
314
|
-
|
|
423
|
+
async getSelectedItemLabel() {
|
|
424
|
+
const item = this.processedItems.find(item => this.selectedItems.has(item.id));
|
|
425
|
+
const label = item ? await this.formatItem(item) : "";
|
|
426
|
+
return label;
|
|
315
427
|
}
|
|
316
|
-
|
|
317
|
-
|
|
428
|
+
/**
|
|
429
|
+
* Updates the input text when the combobox loses focus or when a selection is made.
|
|
430
|
+
*/
|
|
431
|
+
async updateInputText(isBlurred = false) {
|
|
432
|
+
if (isBlurred && this.multiple) {
|
|
433
|
+
this.input.value = "";
|
|
318
434
|
return;
|
|
319
435
|
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
436
|
+
if (isBlurred && this.force) {
|
|
437
|
+
if (this.selectedItems.size === 0) {
|
|
438
|
+
this.input.value = "";
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this.input.value = await this.getSelectedItemLabel();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (!isBlurred && this.selectedItems.size > 0) {
|
|
445
|
+
this.input.value = ""; // set value to empty so that cursor position follows accordingly
|
|
446
|
+
this.input.value = await this.getSelectedItemLabel();
|
|
447
|
+
this.input.scrollLeft = this.input.scrollWidth;
|
|
448
|
+
}
|
|
323
449
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
450
|
+
// Event handlers
|
|
451
|
+
onListClick(e, item) {
|
|
452
|
+
e.preventDefault();
|
|
453
|
+
e.stopPropagation();
|
|
454
|
+
// update selected item with id
|
|
455
|
+
if (this.multiple) {
|
|
456
|
+
this.addSelectedItem(item.id, true);
|
|
327
457
|
}
|
|
328
|
-
|
|
329
|
-
|
|
458
|
+
else {
|
|
459
|
+
this.updateSelectedItem(item.id, true);
|
|
330
460
|
}
|
|
331
|
-
|
|
332
|
-
this.
|
|
461
|
+
this.activeItem = undefined;
|
|
462
|
+
this.listOpen = false;
|
|
463
|
+
return this.listOpen;
|
|
333
464
|
}
|
|
334
465
|
//function that scrolls to the li element with the class "active"
|
|
335
466
|
scrollToActive() {
|
|
@@ -357,16 +488,27 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
357
488
|
*/
|
|
358
489
|
getFilteredItems() {
|
|
359
490
|
// filter items based on user inputs
|
|
360
|
-
const filteredItems = this.processedItems
|
|
361
|
-
|
|
491
|
+
const filteredItems = this.processedItems
|
|
492
|
+
.filter(item => {
|
|
493
|
+
var _a, _b, _c, _d, _e;
|
|
362
494
|
// filter by name and value
|
|
363
495
|
// if value contains inputvalue
|
|
364
496
|
return ((_a = String(item.value)) === null || _a === void 0 ? void 0 : _a.toLowerCase()[this.filterType]((_b = this.inputValue) === null || _b === void 0 ? void 0 : _b.toLowerCase())) ||
|
|
365
497
|
(
|
|
366
498
|
// if name contains input value
|
|
367
499
|
(_c = String(item.name)) === null || _c === void 0 ? void 0 : _c.toLowerCase()[this.filterType]((_d = this.inputValue) === null || _d === void 0 ? void 0 : _d.toLowerCase())) ||
|
|
500
|
+
// if name contains input value
|
|
501
|
+
this.formatter(item).toLowerCase()[this.filterType]((_e = this.inputValue) === null || _e === void 0 ? void 0 : _e.toLowerCase()) ||
|
|
368
502
|
// if the item is selected
|
|
369
503
|
this.selectedItems.has(item.id);
|
|
504
|
+
})
|
|
505
|
+
// if multiple, filter out the selected items
|
|
506
|
+
.filter(item => {
|
|
507
|
+
let include = true;
|
|
508
|
+
if (this.multiple && this.selectedItems.has(item.id)) {
|
|
509
|
+
include = false;
|
|
510
|
+
}
|
|
511
|
+
return include;
|
|
370
512
|
});
|
|
371
513
|
return this.sortFilteredItems(filteredItems);
|
|
372
514
|
}
|
|
@@ -400,9 +542,10 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
400
542
|
}, ref: el => (this.listContainer = el) }, h$1("ul", { class: {
|
|
401
543
|
"duet-combobox-listbox-open": this.listOpen,
|
|
402
544
|
"duet-combobox-listbox": true,
|
|
403
|
-
}, role: "listbox", ref: el => (this.listElement = el), id: this.listBoxId },
|
|
404
|
-
|
|
405
|
-
|
|
545
|
+
}, role: "listbox", ref: el => (this.listElement = el), id: this.listBoxId }, this.listOpen &&
|
|
546
|
+
selectElements.map((item, index) => {
|
|
547
|
+
return (h$1(DuetComboBoxSelect, { item: item, active: index === this.activeItem, selected: this.selectedItems.has(item.id), search: this.inputValue, total: selectElements.length, clickHandler: e => this.onListClick(e, item), label: this.formatLabel(item, selectElements.length, this.processedItems.length) }));
|
|
548
|
+
})))));
|
|
406
549
|
}
|
|
407
550
|
get element() { return this; }
|
|
408
551
|
static get watchers() { return {
|
|
@@ -415,8 +558,11 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
415
558
|
}, [6, "duet-combobox", {
|
|
416
559
|
"accessibleLabelDefaults": [1, "accessible-label-defaults"],
|
|
417
560
|
"accessibleLabels": [1040],
|
|
561
|
+
"label": [1],
|
|
562
|
+
"caption": [1],
|
|
418
563
|
"theme": [1025],
|
|
419
564
|
"force": [4],
|
|
565
|
+
"multiple": [4],
|
|
420
566
|
"items": [1032],
|
|
421
567
|
"formatter": [16],
|
|
422
568
|
"value": [1537],
|
|
@@ -424,9 +570,7 @@ const DuetCombobox$1 = /*@__PURE__*/ proxyCustomElement(class DuetCombobox exten
|
|
|
424
570
|
"openListOnClick": [4, "open-list-on-click"],
|
|
425
571
|
"filterType": [1, "filter-type"],
|
|
426
572
|
"processedItems": [32],
|
|
427
|
-
"inputWidth": [32],
|
|
428
573
|
"inputValue": [32],
|
|
429
|
-
"selectionMsg": [32],
|
|
430
574
|
"listOpen": [32],
|
|
431
575
|
"selectedItems": [32],
|
|
432
576
|
"activeItem": [32],
|
|
@@ -441,14 +585,64 @@ function defineCustomElement$1() {
|
|
|
441
585
|
if (typeof customElements === "undefined") {
|
|
442
586
|
return;
|
|
443
587
|
}
|
|
444
|
-
const components = ["duet-combobox", "duet-icon"];
|
|
588
|
+
const components = ["duet-combobox", "duet-button", "duet-caption", "duet-chip", "duet-icon", "duet-input", "duet-label", "duet-spinner", "duet-tooltip", "duet-tooltip-button", "duet-tooltip-popup", "duet-visually-hidden"];
|
|
445
589
|
components.forEach(tagName => { switch (tagName) {
|
|
446
590
|
case "duet-combobox":
|
|
447
591
|
if (!customElements.get(tagName)) {
|
|
448
592
|
customElements.define(tagName, DuetCombobox$1);
|
|
449
593
|
}
|
|
450
594
|
break;
|
|
595
|
+
case "duet-button":
|
|
596
|
+
if (!customElements.get(tagName)) {
|
|
597
|
+
defineCustomElement$c();
|
|
598
|
+
}
|
|
599
|
+
break;
|
|
600
|
+
case "duet-caption":
|
|
601
|
+
if (!customElements.get(tagName)) {
|
|
602
|
+
defineCustomElement$b();
|
|
603
|
+
}
|
|
604
|
+
break;
|
|
605
|
+
case "duet-chip":
|
|
606
|
+
if (!customElements.get(tagName)) {
|
|
607
|
+
defineCustomElement$a();
|
|
608
|
+
}
|
|
609
|
+
break;
|
|
451
610
|
case "duet-icon":
|
|
611
|
+
if (!customElements.get(tagName)) {
|
|
612
|
+
defineCustomElement$9();
|
|
613
|
+
}
|
|
614
|
+
break;
|
|
615
|
+
case "duet-input":
|
|
616
|
+
if (!customElements.get(tagName)) {
|
|
617
|
+
defineCustomElement$8();
|
|
618
|
+
}
|
|
619
|
+
break;
|
|
620
|
+
case "duet-label":
|
|
621
|
+
if (!customElements.get(tagName)) {
|
|
622
|
+
defineCustomElement$7();
|
|
623
|
+
}
|
|
624
|
+
break;
|
|
625
|
+
case "duet-spinner":
|
|
626
|
+
if (!customElements.get(tagName)) {
|
|
627
|
+
defineCustomElement$6();
|
|
628
|
+
}
|
|
629
|
+
break;
|
|
630
|
+
case "duet-tooltip":
|
|
631
|
+
if (!customElements.get(tagName)) {
|
|
632
|
+
defineCustomElement$5();
|
|
633
|
+
}
|
|
634
|
+
break;
|
|
635
|
+
case "duet-tooltip-button":
|
|
636
|
+
if (!customElements.get(tagName)) {
|
|
637
|
+
defineCustomElement$4();
|
|
638
|
+
}
|
|
639
|
+
break;
|
|
640
|
+
case "duet-tooltip-popup":
|
|
641
|
+
if (!customElements.get(tagName)) {
|
|
642
|
+
defineCustomElement$3();
|
|
643
|
+
}
|
|
644
|
+
break;
|
|
645
|
+
case "duet-visually-hidden":
|
|
452
646
|
if (!customElements.get(tagName)) {
|
|
453
647
|
defineCustomElement$2();
|
|
454
648
|
}
|