@scania/tegel 1.15.0 → 1.16.0-tdsheaderitems-beta.1
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-ca8040ad.js +4 -8
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/tds-body-cell.cjs.entry.js +2 -3
- package/dist/cjs/{tds-dropdown.cjs.entry.js → tds-dropdown_2.cjs.entry.js} +93 -4
- package/dist/cjs/tds-folder-tab.cjs.entry.js +2 -2
- package/dist/cjs/tds-folder-tabs.cjs.entry.js +2 -2
- package/dist/cjs/tds-header-cell.cjs.entry.js +1 -1
- package/dist/cjs/tds-header.cjs.entry.js +10 -1
- package/dist/cjs/tds-inline-tab.cjs.entry.js +2 -2
- package/dist/cjs/tds-inline-tabs.cjs.entry.js +2 -2
- package/dist/cjs/tds-navigation-tab.cjs.entry.js +2 -2
- package/dist/cjs/tds-navigation-tabs.cjs.entry.js +2 -2
- package/dist/cjs/tds-table-body-row-expandable.cjs.entry.js +10 -7
- package/dist/cjs/tds-table-body.cjs.entry.js +13 -3
- package/dist/cjs/tds-table-footer.cjs.entry.js +41 -16
- package/dist/cjs/tds-table-header-input-wrapper.cjs.entry.js +1 -1
- package/dist/cjs/tds-table-header.cjs.entry.js +2 -2
- package/dist/cjs/tds-table-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/tds-table.cjs.entry.js +8 -3
- package/dist/cjs/tds-text-field.cjs.entry.js +5 -5
- package/dist/cjs/tds-textarea.cjs.entry.js +3 -3
- package/dist/cjs/tds-toast.cjs.entry.js +3 -3
- package/dist/cjs/tds-toggle.cjs.entry.js +1 -1
- package/dist/cjs/tds-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/tegel.cjs.js +1 -1
- package/dist/collection/components/dropdown/dropdown-option/dropdown-option.css +6 -0
- package/dist/collection/components/dropdown/dropdown-option/dropdown-option.js +1 -1
- package/dist/collection/components/dropdown/dropdown.css +13 -0
- package/dist/collection/components/dropdown/dropdown.js +5 -5
- package/dist/collection/components/header/header.js +10 -1
- package/dist/collection/components/side-menu/side-menu.js +3 -3
- package/dist/collection/components/stepper/stepper.js +1 -1
- package/dist/collection/components/table/table/table.js +29 -4
- package/dist/collection/components/table/table-body/table-body.css +28 -0
- package/dist/collection/components/table/table-body/table-body.js +13 -2
- package/dist/collection/components/table/table-body-cell/table-body-cell.js +2 -4
- package/dist/collection/components/table/table-body-row-expandable/table-body-row-expandable.css +1 -1
- package/dist/collection/components/table/table-body-row-expandable/table-body-row-expandable.js +29 -8
- package/dist/collection/components/table/table-footer/table-footer.css +10 -0
- package/dist/collection/components/table/table-footer/table-footer.js +78 -18
- package/dist/collection/components/table/table-header/table-header.js +2 -2
- package/dist/collection/components/table/table-header-cell/table-header-cell.js +1 -1
- package/dist/collection/components/table/table-header-input-wrapper/table-header-input-wrapper.js +1 -1
- package/dist/collection/components/table/table-toolbar/table-toolbar.js +2 -2
- package/dist/collection/components/tabs/folder-tabs/folder-tab/folder-tab.js +2 -2
- package/dist/collection/components/tabs/folder-tabs/folder-tabs.js +2 -2
- package/dist/collection/components/tabs/inline-tabs/inline-tab/inline-tab.js +2 -2
- package/dist/collection/components/tabs/inline-tabs/inline-tabs.js +2 -2
- package/dist/collection/components/tabs/navigation-tabs/navigation-tab/navigation-tab.js +2 -2
- package/dist/collection/components/tabs/navigation-tabs/navigation-tabs.js +2 -2
- package/dist/collection/components/text-field/text-field.js +5 -5
- package/dist/collection/components/textarea/textarea.js +3 -3
- package/dist/collection/components/toast/toast.js +3 -3
- package/dist/collection/components/toggle/toggle.js +1 -1
- package/dist/collection/components/tooltip/tooltip.js +2 -2
- package/dist/{esm/tds-dropdown-option.entry.js → components/p-1c256b8d.js} +45 -10
- package/dist/{esm/tds-dropdown.entry.js → components/p-e7eab204.js} +61 -12
- package/dist/components/tds-body-cell.js +2 -4
- package/dist/components/tds-dropdown-option.js +1 -124
- package/dist/components/tds-dropdown.js +1 -509
- package/dist/components/tds-folder-tab.js +2 -2
- package/dist/components/tds-folder-tabs.js +2 -2
- package/dist/components/tds-header-cell.js +1 -1
- package/dist/components/tds-header.js +10 -1
- package/dist/components/tds-inline-tab.js +2 -2
- package/dist/components/tds-inline-tabs.js +2 -2
- package/dist/components/tds-navigation-tab.js +2 -2
- package/dist/components/tds-navigation-tabs.js +2 -2
- package/dist/components/tds-table-body-row-expandable.js +11 -7
- package/dist/components/tds-table-body.js +14 -3
- package/dist/components/tds-table-footer.js +64 -18
- package/dist/components/tds-table-header-input-wrapper.js +1 -1
- package/dist/components/tds-table-header.js +2 -2
- package/dist/components/tds-table-toolbar.js +2 -2
- package/dist/components/tds-table.js +10 -3
- package/dist/components/tds-text-field.js +5 -5
- package/dist/components/tds-textarea.js +3 -3
- package/dist/components/tds-toast.js +3 -3
- package/dist/components/tds-toggle.js +1 -1
- package/dist/components/tds-tooltip.js +2 -2
- package/dist/esm/index-51d04e39.js +4 -8
- package/dist/esm/loader.js +1 -1
- package/dist/esm/tds-body-cell.entry.js +2 -3
- package/dist/esm/tds-dropdown_2.entry.js +550 -0
- package/dist/esm/tds-folder-tab.entry.js +2 -2
- package/dist/esm/tds-folder-tabs.entry.js +2 -2
- package/dist/esm/tds-header-cell.entry.js +1 -1
- package/dist/esm/tds-header.entry.js +10 -1
- package/dist/esm/tds-inline-tab.entry.js +2 -2
- package/dist/esm/tds-inline-tabs.entry.js +2 -2
- package/dist/esm/tds-navigation-tab.entry.js +2 -2
- package/dist/esm/tds-navigation-tabs.entry.js +2 -2
- package/dist/esm/tds-table-body-row-expandable.entry.js +10 -7
- package/dist/esm/tds-table-body.entry.js +13 -3
- package/dist/esm/tds-table-footer.entry.js +41 -16
- package/dist/esm/tds-table-header-input-wrapper.entry.js +1 -1
- package/dist/esm/tds-table-header.entry.js +2 -2
- package/dist/esm/tds-table-toolbar.entry.js +2 -2
- package/dist/esm/tds-table.entry.js +8 -3
- package/dist/esm/tds-text-field.entry.js +5 -5
- package/dist/esm/tds-textarea.entry.js +3 -3
- package/dist/esm/tds-toast.entry.js +3 -3
- package/dist/esm/tds-toggle.entry.js +1 -1
- package/dist/esm/tds-tooltip.entry.js +2 -2
- package/dist/esm/tegel.js +1 -1
- package/dist/tegel/{p-480c6c28.entry.js → p-088bfcd4.entry.js} +1 -1
- package/dist/tegel/{p-a97dd06a.entry.js → p-1634247e.entry.js} +1 -1
- package/dist/tegel/{p-5c0bb8e1.entry.js → p-19571a64.entry.js} +1 -1
- package/dist/tegel/p-51e49417.entry.js +1 -0
- package/dist/tegel/{p-b34cf70d.entry.js → p-52be41ce.entry.js} +1 -1
- package/dist/tegel/{p-e237cdcc.entry.js → p-73dd2dbb.entry.js} +1 -1
- package/dist/tegel/p-7a83cf55.entry.js +1 -0
- package/dist/tegel/{p-c12eaac3.entry.js → p-831111e9.entry.js} +1 -1
- package/dist/tegel/{p-08642415.entry.js → p-91dcddd5.entry.js} +1 -1
- package/dist/tegel/{p-f823777e.entry.js → p-987084a5.entry.js} +1 -1
- package/dist/tegel/{p-c1f8f523.entry.js → p-a642c800.entry.js} +1 -1
- package/dist/tegel/p-aed1c5cf.entry.js +1 -0
- package/dist/tegel/{p-7c75d8d3.entry.js → p-b00bcf39.entry.js} +1 -1
- package/dist/tegel/{p-6b04a919.entry.js → p-bb129d43.entry.js} +1 -1
- package/dist/tegel/{p-578f6d73.entry.js → p-c790ef93.entry.js} +1 -1
- package/dist/tegel/p-d3541e17.entry.js +1 -0
- package/dist/tegel/{p-98f5b520.entry.js → p-e4343e51.entry.js} +1 -1
- package/dist/tegel/{p-1ba22b41.entry.js → p-e86f2d31.entry.js} +1 -1
- package/dist/tegel/p-f4b640af.entry.js +1 -0
- package/dist/tegel/{p-0a4fe3db.entry.js → p-ff5cd75f.entry.js} +1 -1
- package/dist/tegel/p-ff6b9486.entry.js +1 -0
- package/dist/tegel/{p-f3f1f357.entry.js → p-ff7ae8a3.entry.js} +1 -1
- package/dist/tegel/tegel.css +2 -2
- package/dist/tegel/tegel.esm.js +1 -1
- package/dist/types/components/dropdown/dropdown-option/dropdown-option.d.ts +1 -1
- package/dist/types/components/dropdown/dropdown.d.ts +1 -1
- package/dist/types/components/header/header.d.ts +2 -0
- package/dist/types/components/table/table/table.d.ts +4 -0
- package/dist/types/components/table/table-body/table-body.d.ts +1 -0
- package/dist/types/components/table/table-body-cell/table-body-cell.d.ts +0 -1
- package/dist/types/components/table/table-body-row-expandable/table-body-row-expandable.d.ts +5 -4
- package/dist/types/components/table/table-footer/table-footer.d.ts +10 -0
- package/dist/types/components.d.ts +46 -4
- package/package.json +1 -1
- package/dist/cjs/tds-dropdown-option.cjs.entry.js +0 -95
- package/dist/tegel/p-36e88ce8.entry.js +0 -1
- package/dist/tegel/p-3e859e33.entry.js +0 -1
- package/dist/tegel/p-7cb43ebe.entry.js +0 -1
- package/dist/tegel/p-957c8b27.entry.js +0 -1
- package/dist/tegel/p-a2548553.entry.js +0 -1
- package/dist/tegel/p-e1842d99.entry.js +0 -1
- package/dist/tegel/p-e7fac8ad.entry.js +0 -1
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-51d04e39.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Find the next focusable element index in a list of focusable elements.
|
|
5
|
+
* @param items List of focusable elements, element with a attribute of disabled that is true will be skipped over.
|
|
6
|
+
* @param nextItemIndex The index in the list to start the search on.
|
|
7
|
+
*/
|
|
8
|
+
const findNextFocusableElement = (items, nextItemIndex) => {
|
|
9
|
+
if (items[nextItemIndex] === undefined) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
for (let index = nextItemIndex; index < items.length; index++) {
|
|
13
|
+
if (!items[index].disabled) {
|
|
14
|
+
return index;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Find the previous focusable element index in a list of focusable elements.
|
|
21
|
+
*
|
|
22
|
+
* @param items List of focusable elements, element with a attribute of disabled that is true will be skipped over.
|
|
23
|
+
* @param nextItemIndex The index in the list to start the search on.
|
|
24
|
+
*/
|
|
25
|
+
const findPreviousFocusableElement = (items, previousItemIndex) => {
|
|
26
|
+
if (items[previousItemIndex] === undefined) {
|
|
27
|
+
return items.length - 1;
|
|
28
|
+
}
|
|
29
|
+
for (let index = previousItemIndex; index >= 0; index--) {
|
|
30
|
+
if (!items[index].disabled) {
|
|
31
|
+
return index;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/** reference: https://github.com/ionic-team/ionic-framework/blob/main/core/src/utils/helpers.ts#L346
|
|
37
|
+
*
|
|
38
|
+
* Appends a hidden input element to allow the component
|
|
39
|
+
* work within and get picked up by a <form>.
|
|
40
|
+
* @param element The element on which the input with be appended.
|
|
41
|
+
* @param name Name of the input.
|
|
42
|
+
* @param value The value of the input.
|
|
43
|
+
* @param disabled Disables the input if true.
|
|
44
|
+
* @param additionalAttributes Additional attributes that should be passed to the input.
|
|
45
|
+
*/
|
|
46
|
+
const appendHiddenInput = (element, name, value, disabled, additionalAttributes) => {
|
|
47
|
+
let input = element.querySelector('input');
|
|
48
|
+
if (!element.querySelector('input')) {
|
|
49
|
+
input = element.ownerDocument.createElement('input');
|
|
50
|
+
input.type = 'hidden';
|
|
51
|
+
if (additionalAttributes) {
|
|
52
|
+
additionalAttributes.forEach((attr) => input.setAttribute(attr.key, attr.value));
|
|
53
|
+
}
|
|
54
|
+
element.appendChild(input);
|
|
55
|
+
}
|
|
56
|
+
input.disabled = disabled;
|
|
57
|
+
input.name = name;
|
|
58
|
+
input.value = value || '';
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const dropdownCss = "@charset \"UTF-8\";:host button{all:unset;height:100%;width:100%;background-color:var(--tds-dropdown-bg);border-bottom:1px solid var(--tds-dropdown-border-bottom);border-radius:4px 4px 0 0}:host button:hover{border-bottom:1px solid var(--tds-dropdown-border-bottom-hover)}:host button .value-wrapper{padding:0 16px;display:flex;align-items:center;justify-content:space-between}:host button.placeholder{color:var(--tds-dropdown-placeholder-color);line-height:1.3}:host button.value{color:var(--tds-dropdown-value-color);font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);line-height:1.3}:host button:focus{border-bottom-color:var(--tds-dropdown-border-bottom-open)}:host button:focus::before{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:1px;background:var(--tds-dropdown-border-bottom-open)}:host button.error{border-bottom:1px solid var(--tds-negative)}:host button.error:focus{border-bottom-color:transparent}:host button.error:focus::before{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--tds-negative)}:host button:disabled{color:var(--tds-dropdown-disabled-color);border-bottom:1px solid transparent}:host button .menu-icon{margin-right:0}:host .filter{display:flex;align-items:center;justify-content:space-between;height:100%;background-color:var(--tds-dropdown-bg);border-bottom:1px solid var(--tds-dropdown-border-bottom);padding-left:16px;border-radius:4px 4px 0 0}:host .filter:hover{border-bottom:1px solid var(--tds-dropdown-border-bottom-hover)}:host .filter.disabled{color:var(--tds-dropdown-disabled-color);border-bottom:1px solid transparent}:host .filter .value-wrapper{display:flex;width:100%;height:100%}:host .filter .label-inside-as-placeholder{position:absolute;font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);line-height:1.3;color:var(--tds-dropdown-placeholder-color)}:host .filter .label-inside-as-placeholder.lg{top:20px}:host .filter .label-inside-as-placeholder.md{top:16px}:host .filter .label-inside-as-placeholder.sm{display:none}:host .filter .label-inside-as-placeholder.selected{font:var(--tds-detail-07);letter-spacing:var(--tds-detail-07-ls);transition:all 0.2s ease-in-out}:host .filter .label-inside-as-placeholder.selected.lg{top:12px}:host .filter .label-inside-as-placeholder.selected.md{top:8px}:host .filter .label-inside-as-placeholder.selected.sm{display:none}:host .filter .label-inside-as-placeholder.selected+.placeholder:not(.sm){margin-top:8px}:host .filter.focus{border-bottom-color:transparent}:host .filter.focus::before{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--tds-dropdown-border-bottom-open)}:host .filter.error{border-bottom:1px solid var(--tds-negative)}:host .filter.error.focus{border-bottom-color:transparent}:host .filter.error.focus::before{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--tds-negative)}:host .filter input{flex:1;all:unset;width:100%}:host .filter input::placeholder{color:var(--tds-dropdown-placeholder-color)}:host .filter input:disabled::placeholder{color:var(--tds-dropdown-disabled-color)}:host .filter tds-icon{cursor:pointer}:host .filter .menu-icon{margin-right:16px}:host .filter .clear-icon{margin:0 8px;color:var(--tds-dropdown-clear-icon-color);padding-right:8px;border-right:1px solid var(--tds-dropdown-clear-icon-color)}:host .filter .clear-icon:hover{color:var(--tds-dropdown-clear-icon-hover-color)}:host .filter .clear-icon.hide{display:none;visibility:hidden}:host{--tds-scrollbar-width-standard:thin;--tds-scrollbar-width:10px;--tds-scrollbar-height:10px;--tds-scrollbar-thumb-border-width:3px;--tds-scrollbar-thumb-border-hover-width:2px}body{scrollbar-width:thin}:host{display:block;position:relative;font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls)}:host .label-outside{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);color:var(--tds-dropdown-label-color);margin-bottom:8px}:host .label-outside.disabled{color:var(--tds-dropdown-disabled-color)}:host .dropdown-select{position:relative}:host .dropdown-select.disabled .label-inside,:host .dropdown-select.disabled .placeholder,:host .dropdown-select.disabled .label-inside-as-placeholder,:host .dropdown-select.disabled .value-wrapper{color:var(--tds-dropdown-disabled-color)}:host .dropdown-select .label-inside{position:absolute;font:var(--tds-detail-07);letter-spacing:var(--tds-detail-07-ls);color:var(--tds-dropdown-label-inside-color)}:host .dropdown-select .label-inside.lg{top:12px;left:16px}:host .dropdown-select .label-inside.md{top:8px;left:16px}:host .dropdown-select .label-inside.sm{display:none}:host .dropdown-select .label-inside.xs{display:none}:host .dropdown-select .label-inside+.placeholder:not(.sm){margin-top:8px}:host .dropdown-select .placeholder{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:var(--tds-placeholder-margin)}:host .dropdown-select .label-inside-as-placeholder{color:var(--tds-dropdown-placeholder-color)}:host .dropdown-select .label-inside-as-placeholder.selected{position:absolute;font:var(--tds-detail-07);letter-spacing:var(--tds-detail-07-ls);transition:all 0.2s ease-in-out}:host .dropdown-select .label-inside-as-placeholder.selected.lg{top:12px}:host .dropdown-select .label-inside-as-placeholder.selected.md{top:8px}:host .dropdown-select .label-inside-as-placeholder.selected.sm{display:none}:host .dropdown-select .label-inside-as-placeholder.selected+.placeholder:not(.sm){margin-top:8px}:host .dropdown-select.lg{height:55px}:host .dropdown-select.md{height:47px}:host .dropdown-select.sm{height:39px}:host .dropdown-select.xs{height:29px}:host .helper{margin-top:4px;color:var(--tds-dropdown-helper-color);font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);display:flex;align-items:center;gap:8px}:host .helper.error{color:var(--tds-negative)}:host .helper.disabled{color:var(--tds-dropdown-disabled-color)}:host .dropdown-list{z-index:100;position:absolute;margin-top:1px;width:100%;transform-origin:top;transition:transform 0.2s ease-in-out;box-shadow:rgba(0, 0, 0, 0.1) 0 2px 3px 0;border-radius:0 0 4px 4px;overflow-y:auto}:host .dropdown-list:hover::-webkit-scrollbar-thumb{border:var(--tds-scrollbar-thumb-border-hover-width) solid transparent;background:var(--tds-scrollbar-hover-thumb-color);background-clip:padding-box}:host .dropdown-list::-webkit-scrollbar{width:var(--tds-scrollbar-width)}:host .dropdown-list::-webkit-scrollbar-track{background:var(--tds-scrollbar-track-color)}:host .dropdown-list::-webkit-scrollbar-thumb{border-radius:40px;background:var(--tds-scrollbar-thumb-color);border:var(--tds-scrollbar-thumb-border-width) solid transparent;background-clip:padding-box}:host .dropdown-list::-webkit-scrollbar-button{height:0;width:0}@supports not selector(::-webkit-scrollbar){:host .dropdown-list{scrollbar-color:var(--tds-scrollbar-thumb-color) var(--tds-scrollbar-track-color);scrollbar-width:var(--tds-scrollbar-width-standard)}}:host .dropdown-list.lg{max-height:312px}:host .dropdown-list.md{max-height:312px}:host .dropdown-list.sm{max-height:260px}:host .dropdown-list.xs{max-height:260px}:host .dropdown-list.up{bottom:100%;margin-top:0;margin-bottom:1px;transform-origin:bottom;display:flex;flex-direction:column-reverse;box-shadow:rgba(0, 0, 0, 0.1) 0 -1px 3px 0;border-radius:4px 4px 0 0}:host .dropdown-list.up.label-outside{bottom:calc(100% - 24px)}:host .dropdown-list.closed{transform:scaleY(0);visibility:hidden}:host .dropdown-list.open{transform:scaleY(1)}:host .dropdown-list .no-result{font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);display:flex;align-items:center;padding:0 16px;background-color:var(--tds-dropdown-bg)}:host .dropdown-list .no-result.lg{height:56px}:host .dropdown-list .no-result.md{height:48px}:host .dropdown-list .no-result.sm{height:40px}:host .dropdown-list .no-result.xs{height:40px}:host .menu-icon{color:var(--tds-dropdown-menu-icon-color)}:host tds-icon{transition:transform 0.2s ease-in-out}:host tds-icon.open{transform:rotateZ(180deg)}";
|
|
62
|
+
const TdsDropdownStyle0 = dropdownCss;
|
|
63
|
+
|
|
64
|
+
const TdsDropdown = class {
|
|
65
|
+
constructor(hostRef) {
|
|
66
|
+
registerInstance(this, hostRef);
|
|
67
|
+
this.tdsChange = createEvent(this, "tdsChange", 6);
|
|
68
|
+
this.tdsFocus = createEvent(this, "tdsFocus", 6);
|
|
69
|
+
this.tdsBlur = createEvent(this, "tdsBlur", 6);
|
|
70
|
+
this.tdsInput = createEvent(this, "tdsInput", 6);
|
|
71
|
+
this.setDefaultOption = () => {
|
|
72
|
+
if (this.defaultValue) {
|
|
73
|
+
const children = Array.from(this.host.children).filter((element) => element.tagName === 'TDS-DROPDOWN-OPTION');
|
|
74
|
+
if (children.length === 0) {
|
|
75
|
+
console.warn('TDS DROPDOWN: No options found. Disregard if loading data asynchronously.');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const defaultValues = this.multiselect
|
|
79
|
+
? new Set(this.defaultValue.split(','))
|
|
80
|
+
: [this.defaultValue];
|
|
81
|
+
const childrenMap = new Map(children.map((element) => [element.value, element]));
|
|
82
|
+
const matchedValues = Array.from(defaultValues).filter((value) => {
|
|
83
|
+
const element = childrenMap.get(value);
|
|
84
|
+
if (element) {
|
|
85
|
+
element.setSelected(true);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
});
|
|
90
|
+
if (matchedValues.length > 0) {
|
|
91
|
+
this.value = [...new Set(this.value ? [...this.value, ...matchedValues] : matchedValues)];
|
|
92
|
+
this.setValueAttribute();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.warn(`TDS DROPDOWN: No matching option found for defaultValue "${this.defaultValue}"`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
/* Returns a list of all children that are tds-dropdown-option elements */
|
|
100
|
+
this.getChildren = () => {
|
|
101
|
+
const tdsDropdownOptions = Array.from(this.host.children).filter((element) => element.tagName === 'TDS-DROPDOWN-OPTION');
|
|
102
|
+
if (tdsDropdownOptions.length === 0) {
|
|
103
|
+
console.warn('TDS DROPDOWN: Data missing. Disregard if loading data asynchronously.');
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
return tdsDropdownOptions;
|
|
107
|
+
};
|
|
108
|
+
this.getOpenDirection = () => {
|
|
109
|
+
var _a, _b, _c, _d, _e;
|
|
110
|
+
if (this.openDirection === 'auto' || !this.openDirection) {
|
|
111
|
+
const dropdownMenuHeight = (_b = (_a = this.dropdownList) === null || _a === void 0 ? void 0 : _a.offsetHeight) !== null && _b !== void 0 ? _b : 0;
|
|
112
|
+
const distanceToBottom = (_e = (_d = (_c = this.host).getBoundingClientRect) === null || _d === void 0 ? void 0 : _d.call(_c).top) !== null && _e !== void 0 ? _e : 0;
|
|
113
|
+
const viewportHeight = window.innerHeight;
|
|
114
|
+
if (distanceToBottom + dropdownMenuHeight + 57 > viewportHeight) {
|
|
115
|
+
return 'up';
|
|
116
|
+
}
|
|
117
|
+
return 'down';
|
|
118
|
+
}
|
|
119
|
+
return this.openDirection;
|
|
120
|
+
};
|
|
121
|
+
/* Toggles the open state of the Dropdown and sets focus to the input element */
|
|
122
|
+
this.handleToggleOpen = () => {
|
|
123
|
+
if (!this.disabled) {
|
|
124
|
+
this.open = !this.open;
|
|
125
|
+
if (this.open) {
|
|
126
|
+
this.focusInputElement();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
/* Focuses the input element in the Dropdown, if the reference is present. */
|
|
131
|
+
this.focusInputElement = () => {
|
|
132
|
+
if (this.inputElement)
|
|
133
|
+
this.inputElement.focus();
|
|
134
|
+
};
|
|
135
|
+
this.getSelectedChildren = () => {
|
|
136
|
+
var _a;
|
|
137
|
+
return (_a = this.value) === null || _a === void 0 ? void 0 : _a.map((stringValue) => {
|
|
138
|
+
const matchingElement = this.getChildren().find((element) => element.value === stringValue);
|
|
139
|
+
return matchingElement;
|
|
140
|
+
}).filter(Boolean);
|
|
141
|
+
};
|
|
142
|
+
this.getSelectedChildrenLabels = () => {
|
|
143
|
+
var _a;
|
|
144
|
+
return (_a = this.getSelectedChildren()) === null || _a === void 0 ? void 0 : _a.map((element) => element.textContent.trim());
|
|
145
|
+
};
|
|
146
|
+
this.getValue = () => {
|
|
147
|
+
const labels = this.getSelectedChildrenLabels();
|
|
148
|
+
if (!labels) {
|
|
149
|
+
return '';
|
|
150
|
+
}
|
|
151
|
+
return this.filter ? labels === null || labels === void 0 ? void 0 : labels.join(', ') : labels === null || labels === void 0 ? void 0 : labels.toString();
|
|
152
|
+
};
|
|
153
|
+
this.setValueAttribute = () => {
|
|
154
|
+
var _a, _b, _c;
|
|
155
|
+
if (((_a = this.value) === null || _a === void 0 ? void 0 : _a.toString()) === '')
|
|
156
|
+
this.value = null;
|
|
157
|
+
this.host.setAttribute('value', (_c = (_b = this.value) === null || _b === void 0 ? void 0 : _b.map((val) => val).toString()) !== null && _c !== void 0 ? _c : null);
|
|
158
|
+
};
|
|
159
|
+
this.handleFilter = (event) => {
|
|
160
|
+
this.tdsInput.emit(event);
|
|
161
|
+
const query = event.target.value.toLowerCase();
|
|
162
|
+
/* Check if the query is empty, and if so, show all options */
|
|
163
|
+
const children = this.getChildren();
|
|
164
|
+
if (query === '') {
|
|
165
|
+
children.forEach((element) => {
|
|
166
|
+
element.removeAttribute('hidden');
|
|
167
|
+
return element;
|
|
168
|
+
});
|
|
169
|
+
this.filterResult = null;
|
|
170
|
+
/* Hide the options that do not match the query */
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.filterResult = children.filter((element) => {
|
|
174
|
+
if (!this.normalizeString(element.textContent)
|
|
175
|
+
.toLowerCase()
|
|
176
|
+
.includes(this.normalizeString(query).toLowerCase())) {
|
|
177
|
+
element.setAttribute('hidden', '');
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
element.removeAttribute('hidden');
|
|
181
|
+
}
|
|
182
|
+
return !element.hasAttribute('hidden');
|
|
183
|
+
}).length;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
this.handleFilterReset = () => {
|
|
187
|
+
this.reset();
|
|
188
|
+
this.inputElement.value = '';
|
|
189
|
+
this.handleFilter({ target: { value: this.inputElement.value } });
|
|
190
|
+
this.inputElement.focus();
|
|
191
|
+
};
|
|
192
|
+
this.handleFocus = (event) => {
|
|
193
|
+
this.tdsFocus.emit(event);
|
|
194
|
+
};
|
|
195
|
+
this.handleBlur = (event) => {
|
|
196
|
+
this.tdsBlur.emit(event);
|
|
197
|
+
};
|
|
198
|
+
this.handleChange = () => {
|
|
199
|
+
var _a, _b;
|
|
200
|
+
this.tdsChange.emit({
|
|
201
|
+
name: this.name,
|
|
202
|
+
value: (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.map((value) => value).toString()) !== null && _b !== void 0 ? _b : null,
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
this.name = undefined;
|
|
206
|
+
this.disabled = false;
|
|
207
|
+
this.helper = undefined;
|
|
208
|
+
this.label = undefined;
|
|
209
|
+
this.labelPosition = undefined;
|
|
210
|
+
this.modeVariant = null;
|
|
211
|
+
this.openDirection = 'auto';
|
|
212
|
+
this.placeholder = undefined;
|
|
213
|
+
this.size = 'lg';
|
|
214
|
+
this.error = false;
|
|
215
|
+
this.multiselect = false;
|
|
216
|
+
this.filter = false;
|
|
217
|
+
this.normalizeText = true;
|
|
218
|
+
this.noResultText = 'No result';
|
|
219
|
+
this.defaultValue = undefined;
|
|
220
|
+
this.open = false;
|
|
221
|
+
this.value = undefined;
|
|
222
|
+
this.filterResult = undefined;
|
|
223
|
+
this.filterFocus = undefined;
|
|
224
|
+
}
|
|
225
|
+
/** Method that resets the Dropdown, marks all children as non-selected and resets the value to null. */
|
|
226
|
+
async reset() {
|
|
227
|
+
this.dropdownList.scrollTop = 0;
|
|
228
|
+
this.internalReset();
|
|
229
|
+
this.handleChange();
|
|
230
|
+
}
|
|
231
|
+
/** Method for setting the value of the Dropdown.
|
|
232
|
+
*
|
|
233
|
+
* Single selection example:
|
|
234
|
+
*
|
|
235
|
+
* <code>
|
|
236
|
+
* dropdown.setValue('option-1', 'Option 1');
|
|
237
|
+
* </code>
|
|
238
|
+
*
|
|
239
|
+
* Multiselect example:
|
|
240
|
+
*
|
|
241
|
+
* <code>
|
|
242
|
+
* dropdown.setValue(['option-1', 'option-2']);
|
|
243
|
+
* </code>
|
|
244
|
+
*/
|
|
245
|
+
// The label is optional here ONLY to not break the API. Should be removed for 2.0.
|
|
246
|
+
// @ts-ignore
|
|
247
|
+
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
|
248
|
+
async setValue(value, label) {
|
|
249
|
+
let nextValue;
|
|
250
|
+
if (typeof value === 'string')
|
|
251
|
+
nextValue = [value];
|
|
252
|
+
else
|
|
253
|
+
nextValue = value;
|
|
254
|
+
if (!this.multiselect && nextValue.length > 1) {
|
|
255
|
+
console.warn('Tried to select multiple items, but multiselect is not enabled.');
|
|
256
|
+
nextValue = [nextValue[0]];
|
|
257
|
+
}
|
|
258
|
+
nextValue = [...new Set(nextValue)];
|
|
259
|
+
this.internalReset();
|
|
260
|
+
for (let i = 0; i < nextValue.length; i++) {
|
|
261
|
+
const optionExist = this.getChildren().some((element) => element.value === nextValue[i]);
|
|
262
|
+
if (!optionExist) {
|
|
263
|
+
nextValue.splice(i, 1);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
this.value = nextValue;
|
|
267
|
+
this.setValueAttribute();
|
|
268
|
+
this.selectChildrenAsSelectedBasedOnSelectionProp();
|
|
269
|
+
this.handleChange();
|
|
270
|
+
/* This returns an array of object with a value and label pair. This is ONLY to not break the API. Should be removed for 2.0. */
|
|
271
|
+
/* https://tegel.atlassian.net/browse/CDEP-2703 */
|
|
272
|
+
const selection = this.getSelectedChildren().map((element) => ({
|
|
273
|
+
value: element.value,
|
|
274
|
+
label: element.textContent.trim(),
|
|
275
|
+
}));
|
|
276
|
+
// Update inputElement value and placeholder text
|
|
277
|
+
if (this.filter) {
|
|
278
|
+
this.inputElement.value = this.getValue();
|
|
279
|
+
}
|
|
280
|
+
return selection;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* @internal
|
|
284
|
+
*/
|
|
285
|
+
async appendValue(value) {
|
|
286
|
+
if (this.multiselect && this.value) {
|
|
287
|
+
this.setValue([...this.value, value]);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
this.setValue(value);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** Method for removing a selected value in the Dropdown. */
|
|
294
|
+
async removeValue(oldValue) {
|
|
295
|
+
var _a, _b;
|
|
296
|
+
let label;
|
|
297
|
+
if (this.multiselect) {
|
|
298
|
+
(_a = this.getChildren()) === null || _a === void 0 ? void 0 : _a.forEach((element) => {
|
|
299
|
+
var _a;
|
|
300
|
+
if (element.value === oldValue) {
|
|
301
|
+
this.value = (_a = this.value) === null || _a === void 0 ? void 0 : _a.filter((value) => value !== element.value);
|
|
302
|
+
label = element.textContent.trim();
|
|
303
|
+
element.setSelected(false);
|
|
304
|
+
}
|
|
305
|
+
return element;
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
this.reset();
|
|
310
|
+
}
|
|
311
|
+
this.handleChange();
|
|
312
|
+
this.setValueAttribute();
|
|
313
|
+
/* This returns an array of object with a value and label pair. This is ONLY to not break the API. Should be removed for 2.0. */
|
|
314
|
+
/* https://tegel.atlassian.net/browse/CDEP-2703 */
|
|
315
|
+
return (_b = this.value) === null || _b === void 0 ? void 0 : _b.map((value) => ({ value, label }));
|
|
316
|
+
}
|
|
317
|
+
/** Method for closing the Dropdown. */
|
|
318
|
+
async close() {
|
|
319
|
+
this.open = false;
|
|
320
|
+
}
|
|
321
|
+
onAnyClick(event) {
|
|
322
|
+
if (this.open) {
|
|
323
|
+
// Source: https://lamplightdev.com/blog/2021/04/10/how-to-detect-clicks-outside-of-a-web-component/
|
|
324
|
+
const isClickOutside = !event.composedPath().includes(this.host);
|
|
325
|
+
if (isClickOutside) {
|
|
326
|
+
this.open = false;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async onKeyDown(event) {
|
|
331
|
+
// Get the active element
|
|
332
|
+
const { activeElement } = document;
|
|
333
|
+
if (!activeElement) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const children = this.getChildren();
|
|
337
|
+
if (event.key === 'ArrowDown') {
|
|
338
|
+
/* Get the index of the current focus index, if there is no
|
|
339
|
+
nextElementSibling return the index for the first child in our Dropdown. */
|
|
340
|
+
const startingIndex = activeElement.nextElementSibling
|
|
341
|
+
? children.findIndex((element) => element === activeElement.nextElementSibling)
|
|
342
|
+
: 0;
|
|
343
|
+
const elementIndex = findNextFocusableElement(children, startingIndex);
|
|
344
|
+
children[elementIndex].focus();
|
|
345
|
+
}
|
|
346
|
+
else if (event.key === 'ArrowUp') {
|
|
347
|
+
/* Get the index of the current focus index, if there is no
|
|
348
|
+
previousElementSibling return the index for the first last in our Dropdown. */
|
|
349
|
+
const startingIndex = activeElement.nextElementSibling
|
|
350
|
+
? this.getChildren().findIndex((element) => element === activeElement.previousElementSibling)
|
|
351
|
+
: 0;
|
|
352
|
+
const elementIndex = findPreviousFocusableElement(children, startingIndex);
|
|
353
|
+
children[elementIndex].focus();
|
|
354
|
+
}
|
|
355
|
+
else if (event.key === 'Escape') {
|
|
356
|
+
this.open = false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// If the Dropdown gets closed,
|
|
360
|
+
// this sets the value of the dropdown to the current selection labels or null if no selection is made.
|
|
361
|
+
handleOpenState() {
|
|
362
|
+
if (this.filter && this.multiselect) {
|
|
363
|
+
if (!this.open) {
|
|
364
|
+
this.inputElement.value = this.getValue();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
componentWillLoad() {
|
|
369
|
+
this.setDefaultOption();
|
|
370
|
+
}
|
|
371
|
+
/** Method to handle slot changes */
|
|
372
|
+
handleSlotChange() {
|
|
373
|
+
this.setDefaultOption();
|
|
374
|
+
}
|
|
375
|
+
/** Method to check if we should normalize text */
|
|
376
|
+
normalizeString(text) {
|
|
377
|
+
return this.normalizeText ? text.normalize('NFD').replace(/\p{Diacritic}/gu, '') : text;
|
|
378
|
+
}
|
|
379
|
+
/** Method that resets the dropdown without emitting an event. */
|
|
380
|
+
internalReset() {
|
|
381
|
+
this.getChildren().forEach((element) => {
|
|
382
|
+
element.setSelected(false);
|
|
383
|
+
return element;
|
|
384
|
+
});
|
|
385
|
+
this.value = null;
|
|
386
|
+
this.setValueAttribute();
|
|
387
|
+
}
|
|
388
|
+
selectChildrenAsSelectedBasedOnSelectionProp() {
|
|
389
|
+
this.getChildren().forEach((element) => {
|
|
390
|
+
this.value.forEach((selection) => {
|
|
391
|
+
if (element.value !== selection) {
|
|
392
|
+
// If not multiselect, we need to unselect all other options.
|
|
393
|
+
if (!this.multiselect) {
|
|
394
|
+
element.setSelected(false);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
element.setSelected(true);
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
render() {
|
|
404
|
+
var _a, _b, _c, _d;
|
|
405
|
+
appendHiddenInput(this.host, this.name, (_a = this.value) === null || _a === void 0 ? void 0 : _a.map((value) => value).toString(), this.disabled);
|
|
406
|
+
return (h(Host, { key: '1e7eacac32eba892288cd94254053ef9d09b03f7', role: "select", class: `${this.modeVariant ? `tds-mode-variant-${this.modeVariant}` : ''}` }, this.label && this.labelPosition === 'outside' && (h("div", { key: '8a97e693abbf5ff8973fde64c1d383e926d5c5a8', class: `label-outside ${this.disabled ? 'disabled' : ''}` }, this.label)), h("div", { key: '55d98944321d2084de6cb3fd5f70b32b5b84d518', class: `dropdown-select ${this.size} ${this.disabled ? 'disabled' : ''}` }, this.filter ? (h("div", { class: {
|
|
407
|
+
filter: true,
|
|
408
|
+
focus: this.filterFocus,
|
|
409
|
+
disabled: this.disabled,
|
|
410
|
+
error: this.error,
|
|
411
|
+
} }, h("div", { class: "value-wrapper" }, this.label && this.labelPosition === 'inside' && this.placeholder && (h("div", { class: `label-inside ${this.size}` }, this.label)), this.label && this.labelPosition === 'inside' && !this.placeholder && (h("div", { class: `
|
|
412
|
+
label-inside-as-placeholder
|
|
413
|
+
${this.size}
|
|
414
|
+
${((_b = this.value) === null || _b === void 0 ? void 0 : _b.length) ? 'selected' : ''}
|
|
415
|
+
` }, this.label)), h("input", {
|
|
416
|
+
// eslint-disable-next-line no-return-assign
|
|
417
|
+
ref: (inputEl) => (this.inputElement = inputEl), class: `${this.labelPosition === 'inside' ? 'placeholder' : ''}`, type: "text", placeholder: this.placeholder, value: this.getValue(), disabled: this.disabled, onInput: (event) => this.handleFilter(event), onBlur: (event) => {
|
|
418
|
+
this.filterFocus = false;
|
|
419
|
+
this.handleBlur(event);
|
|
420
|
+
}, onFocus: (event) => {
|
|
421
|
+
this.open = true;
|
|
422
|
+
this.filterFocus = true;
|
|
423
|
+
this.handleFocus(event);
|
|
424
|
+
}, onKeyDown: (event) => {
|
|
425
|
+
if (event.key === 'Escape') {
|
|
426
|
+
this.open = false;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
})), h("tds-icon", { tabIndex: 0, role: "button", "aria-label": "Clear filter", svgTitle: "Clear filter", onClick: this.handleFilterReset, onKeyDown: (event) => {
|
|
430
|
+
if (event.key === 'Enter') {
|
|
431
|
+
this.handleFilterReset();
|
|
432
|
+
}
|
|
433
|
+
}, class: `clear-icon ${this.open && this.inputElement.value !== '' ? '' : 'hide'}`, name: "cross", size: "16px" }), h("tds-icon", { tabIndex: 0, role: "button", "aria-label": "Open/Close dropdown", svgTitle: "Open/Close dropdown", onClick: this.handleToggleOpen, onKeyDown: (event) => {
|
|
434
|
+
if (event.key === 'Enter') {
|
|
435
|
+
this.handleToggleOpen();
|
|
436
|
+
}
|
|
437
|
+
}, class: `menu-icon ${this.open ? 'open' : 'closed'}`, name: "chevron_down", size: "16px" }))) : (h("button", { onClick: () => this.handleToggleOpen(), onKeyDown: (event) => {
|
|
438
|
+
if (event.key === 'Escape') {
|
|
439
|
+
this.open = false;
|
|
440
|
+
}
|
|
441
|
+
}, class: `
|
|
442
|
+
${this.value ? 'value' : 'placeholder'}
|
|
443
|
+
${this.open ? 'open' : 'closed'}
|
|
444
|
+
${this.error ? 'error' : ''}
|
|
445
|
+
`, disabled: this.disabled }, h("div", { class: `value-wrapper ${this.size}` }, this.label && this.labelPosition === 'inside' && this.placeholder && (h("div", { class: `label-inside ${this.size}` }, this.label)), this.label && this.labelPosition === 'inside' && !this.placeholder && (h("div", { class: `
|
|
446
|
+
label-inside-as-placeholder
|
|
447
|
+
${this.size}
|
|
448
|
+
${((_c = this.value) === null || _c === void 0 ? void 0 : _c.length) ? 'selected' : ''}
|
|
449
|
+
` }, this.label)), h("div", { class: `placeholder ${this.size}` }, ((_d = this.value) === null || _d === void 0 ? void 0 : _d.length) ? this.getValue() : this.placeholder), h("tds-icon", { "aria-label": "Open/Close dropdown", svgTitle: "Open/Close dropdown", class: `menu-icon ${this.open ? 'open' : 'closed'}`, name: "chevron_down", size: "16px" }))))), h("div", { key: 'b661988b59447f31ab71e6d03da4b6226caab184', ref: (element) => (this.dropdownList = element), class: `dropdown-list
|
|
450
|
+
${this.size}
|
|
451
|
+
${this.open ? 'open' : 'closed'}
|
|
452
|
+
${this.getOpenDirection()}
|
|
453
|
+
${this.label && this.labelPosition === 'outside' ? 'label-outside' : ''}` }, h("slot", { key: '855021b97bdc5e56d8a2ebcd981e143aabb8a1ef', onSlotchange: () => this.handleSlotChange() }), this.filterResult === 0 && this.noResultText !== '' && (h("div", { key: 'c282e26376e176e3eca36261eb269bfe4cce60da', class: `no-result ${this.size}` }, this.noResultText))), this.helper && (h("div", { key: '6bce306c718a21a8eb5320da036a7f8909467d76', class: `helper ${this.error ? 'error' : ''} ${this.disabled ? 'disabled' : ''}` }, this.error && h("tds-icon", { key: 'a15e4b87b4388fd44701db482b4be4a9cfee68f2', name: "error", size: "16px" }), this.helper))));
|
|
454
|
+
}
|
|
455
|
+
get host() { return getElement(this); }
|
|
456
|
+
static get watchers() { return {
|
|
457
|
+
"open": ["handleOpenState"]
|
|
458
|
+
}; }
|
|
459
|
+
};
|
|
460
|
+
TdsDropdown.style = TdsDropdownStyle0;
|
|
461
|
+
|
|
462
|
+
const dropdownOptionCss = ":host{box-sizing:border-box;display:block;background-color:var(--tds-dropdown-option-background)}:host *{box-sizing:border-box}:host .dropdown-option{color:var(--tds-dropdown-option-color);border-bottom:1px solid var(--tds-dropdown-option-border);font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);overflow-wrap:anywhere}:host .dropdown-option.selected{background-color:var(--tds-dropdown-option-background-selected)}:host .dropdown-option.disabled{color:var(--tds-dropdown-option-color-disabled)}:host .dropdown-option button:focus{outline:2px solid var(--tds-blue-400);outline-offset:-2px}:host .dropdown-option button{all:unset;width:100%}:host .dropdown-option button.lg{padding:19px 0 20px}:host .dropdown-option button.md{padding:15px 0 16px}:host .dropdown-option button.sm{padding:11px 0 12px}:host .dropdown-option button.xs{padding:7px 0 8px}:host .dropdown-option button .single-select{display:flex;align-items:center;justify-content:space-between;padding:0 16px}:host .dropdown-option .multiselect{width:100%;height:100%}:host .dropdown-option .multiselect tds-checkbox{display:flex;height:100%;width:100%}:host .dropdown-option .multiselect tds-checkbox.lg{padding:15px 16px 16px}:host .dropdown-option .multiselect tds-checkbox.md{padding:11px 16px 12px}:host .dropdown-option .multiselect tds-checkbox.sm{padding:7px 16px 8px}:host .dropdown-option .multiselect tds-checkbox.xs{padding:7px 16px 8px}:host .dropdown-option:hover{background-color:var(--tds-dropdown-option-background-hover);cursor:pointer}:host .dropdown-option:hover.disabled{background-color:var(--tds-dropdown-option-background);cursor:not-allowed}:host([hidden]){display:none}";
|
|
463
|
+
const TdsDropdownOptionStyle0 = dropdownOptionCss;
|
|
464
|
+
|
|
465
|
+
const TdsDropdownOption = class {
|
|
466
|
+
constructor(hostRef) {
|
|
467
|
+
registerInstance(this, hostRef);
|
|
468
|
+
this.tdsSelect = createEvent(this, "tdsSelect", 6);
|
|
469
|
+
this.tdsFocus = createEvent(this, "tdsFocus", 6);
|
|
470
|
+
this.tdsBlur = createEvent(this, "tdsBlur", 6);
|
|
471
|
+
this.componentWillRender = () => {
|
|
472
|
+
this.parentElement =
|
|
473
|
+
this.host.parentElement.tagName === 'TDS-DROPDOWN'
|
|
474
|
+
? this.host.parentElement
|
|
475
|
+
: this.host.getRootNode().host;
|
|
476
|
+
this.multiselect = this.parentElement.multiselect;
|
|
477
|
+
this.size = this.parentElement.size;
|
|
478
|
+
this.label = this.host.textContent.trim();
|
|
479
|
+
};
|
|
480
|
+
this.handleSingleSelect = () => {
|
|
481
|
+
if (!this.disabled) {
|
|
482
|
+
this.selected = true;
|
|
483
|
+
this.parentElement.appendValue(this.value);
|
|
484
|
+
this.parentElement.close();
|
|
485
|
+
this.tdsSelect.emit({
|
|
486
|
+
value: this.value,
|
|
487
|
+
selected: this.selected,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
this.handleMultiselect = (event) => {
|
|
492
|
+
if (!this.disabled) {
|
|
493
|
+
if (event.detail.checked) {
|
|
494
|
+
this.parentElement.appendValue(this.value);
|
|
495
|
+
this.selected = true;
|
|
496
|
+
this.tdsSelect.emit({
|
|
497
|
+
value: this.value,
|
|
498
|
+
selected: this.selected,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
this.parentElement.removeValue(this.value);
|
|
503
|
+
this.selected = false;
|
|
504
|
+
this.tdsSelect.emit({
|
|
505
|
+
value: this.value,
|
|
506
|
+
selected: this.selected,
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
event.stopPropagation();
|
|
510
|
+
}
|
|
511
|
+
};
|
|
512
|
+
this.handleFocus = (event) => {
|
|
513
|
+
this.tdsFocus.emit(event);
|
|
514
|
+
};
|
|
515
|
+
this.handleBlur = (event) => {
|
|
516
|
+
this.tdsBlur.emit(event);
|
|
517
|
+
};
|
|
518
|
+
this.value = undefined;
|
|
519
|
+
this.disabled = false;
|
|
520
|
+
this.selected = false;
|
|
521
|
+
this.multiselect = undefined;
|
|
522
|
+
this.size = 'lg';
|
|
523
|
+
}
|
|
524
|
+
/** Method to select/deselect an option. */
|
|
525
|
+
async setSelected(selected) {
|
|
526
|
+
this.selected = selected;
|
|
527
|
+
}
|
|
528
|
+
render() {
|
|
529
|
+
return (h(Host, { key: '1cb00a19c5dbcc47e1b2bc97d1d5ccc8ac5a532a', role: "option", "aria-disabled": this.disabled, "aria-selected": this.selected }, h("div", { key: '5deaf44c7306f4b1856200bf0a5640e99fcb449d', class: `dropdown-option
|
|
530
|
+
${this.size}
|
|
531
|
+
${this.selected ? 'selected' : ''}
|
|
532
|
+
${this.disabled ? 'disabled' : ''}
|
|
533
|
+
` }, this.multiselect ? (h("div", { class: "multiselect", onKeyDown: (event) => {
|
|
534
|
+
if (event.key === 'Escape') {
|
|
535
|
+
this.parentElement.close();
|
|
536
|
+
}
|
|
537
|
+
} }, h("tds-checkbox", { onTdsChange: (event) => {
|
|
538
|
+
this.handleMultiselect(event);
|
|
539
|
+
}, disabled: this.disabled, checked: this.selected, class: {
|
|
540
|
+
[this.size]: true,
|
|
541
|
+
} }, h("div", { slot: "label" }, h("slot", null))))) : (h("button", { onClick: () => {
|
|
542
|
+
this.handleSingleSelect();
|
|
543
|
+
}, onFocus: (event) => this.handleFocus(event), onBlur: (event) => this.handleBlur(event), disabled: this.disabled, class: this.size }, h("div", { class: "single-select" }, h("slot", null), this.selected && h("tds-icon", { name: "tick", size: "16px" })))))));
|
|
544
|
+
}
|
|
545
|
+
static get delegatesFocus() { return true; }
|
|
546
|
+
get host() { return getElement(this); }
|
|
547
|
+
};
|
|
548
|
+
TdsDropdownOption.style = TdsDropdownOptionStyle0;
|
|
549
|
+
|
|
550
|
+
export { TdsDropdown as tds_dropdown, TdsDropdownOption as tds_dropdown_option };
|
|
@@ -19,8 +19,8 @@ const TdsFolderTab = class {
|
|
|
19
19
|
this.selected = selected;
|
|
20
20
|
}
|
|
21
21
|
render() {
|
|
22
|
-
return (h(Host, { key: '
|
|
23
|
-
${this.selected ? 'selected' : ''}`, style: { width: `${this.tabWidth}px` } }, h("slot", { key: '
|
|
22
|
+
return (h(Host, { key: '37ae53ec0d9c0bc3674365d14d61c6b1fbafe168', role: "listitem" }, h("div", { key: 'a977243b499569668ef7428829644f3f2ca23033', class: `${this.disabled ? 'disabled' : ''}
|
|
23
|
+
${this.selected ? 'selected' : ''}`, style: { width: `${this.tabWidth}px` } }, h("slot", { key: '1e8b9cc10f032a64ffef70bb061f57ddc8a4a1a5' }))));
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
TdsFolderTab.style = TdsFolderTabStyle0;
|
|
@@ -163,9 +163,9 @@ const TdsFolderTabs = class {
|
|
|
163
163
|
this.removeEventListenerFromTabs();
|
|
164
164
|
}
|
|
165
165
|
render() {
|
|
166
|
-
return (h(Host, { key: '
|
|
166
|
+
return (h(Host, { key: '3164044436f7029d85c4eed0ff7e0cc2b4e35752', role: "list", class: `${this.modeVariant ? `tds-mode-variant-${this.modeVariant}` : ''}` }, h("div", { key: '59beaa0776ff83a30e84b69c5715a2f0d62ec6d9', class: "wrapper", ref: (el) => {
|
|
167
167
|
this.navWrapperElement = el;
|
|
168
|
-
} }, h("button", { key: '
|
|
168
|
+
} }, h("button", { key: '0bd461d469592983e08043c23e295c21df04c80f', class: `scroll-left-button ${this.showLeftScroll ? 'show' : ''}`, disabled: !this.showLeftScroll, onClick: () => this.scrollLeft() }, h("tds-icon", { key: 'd21448eea9cab4d73087fec72d29270b52bf0999', name: "chevron_left", size: "20px" })), h("slot", { key: 'efe348a98b964486a73d1aac235ce894277c6249', onSlotchange: () => this.handleSlotChange() }), h("button", { key: 'ea819f59668994e328410941b5b7455620ecb321', class: `scroll-right-button ${this.showRightScroll ? 'show' : ''}`, disabled: !this.showRightScroll, onClick: () => this.scrollRight() }, h("tds-icon", { key: 'c52241bb7c77eabbdb8de5a19bb4400c32aa2062', name: "chevron_right", size: "20px" })))));
|
|
169
169
|
}
|
|
170
170
|
get host() { return getElement(this); }
|
|
171
171
|
static get watchers() { return {
|
|
@@ -111,7 +111,7 @@ const TdsTableHeaderCell = class {
|
|
|
111
111
|
this.host.closest('tds-table').getElementsByTagName('tds-table-toolbar').length >= 1;
|
|
112
112
|
}
|
|
113
113
|
render() {
|
|
114
|
-
return (h(Host, { key: '
|
|
114
|
+
return (h(Host, { key: 'c40924cf774a94e3f78d114eb91632fe57388ba2', class: {
|
|
115
115
|
'tds-table__header-cell': true,
|
|
116
116
|
'tds-table__header-cell--sortable': this.sortable,
|
|
117
117
|
'tds-table__header-cell--is-sorted': this.sortedByMyKey,
|
|
@@ -32,6 +32,15 @@ const TdsHeader = class {
|
|
|
32
32
|
};
|
|
33
33
|
this.observer = new MutationObserver(callback);
|
|
34
34
|
}
|
|
35
|
+
updateRoles() {
|
|
36
|
+
const navElement = this.host.querySelector('.tds-header-component-list');
|
|
37
|
+
if (navElement) {
|
|
38
|
+
updateListChildrenRoles(navElement);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
handleSlotChange() {
|
|
42
|
+
this.updateRoles();
|
|
43
|
+
}
|
|
35
44
|
componentDidLoad() {
|
|
36
45
|
const hostElement = this.host;
|
|
37
46
|
const navElement = hostElement.querySelector('.tds-header-component-list');
|
|
@@ -46,7 +55,7 @@ const TdsHeader = class {
|
|
|
46
55
|
}
|
|
47
56
|
render() {
|
|
48
57
|
const navAttributes = Object.assign({}, inheritAriaAttributes(this.host));
|
|
49
|
-
return (h(Host, { key: '
|
|
58
|
+
return (h(Host, { key: '9444edcd74ab89d00450b398c6cb1a4f25ed9cd1' }, h("slot", { key: '9ee5c071427d56d71ebed3f4fb28540f26f756f4', name: "hamburger" }), h("slot", { key: 'ba6cb45780392f5682ff13b889c5500fc90dd1ce', name: "title" }), h("nav", Object.assign({ key: '1017dce61683cb6b9e1c80ef35332b6ea741c809' }, navAttributes), h("ul", { key: '043975c96c36ca0e4947d3c087f53ca05a594378', class: "tds-header-component-list" }, h("slot", { key: '71ec961aeaea24a74d5135bcf2434b34e62488f2', onSlotchange: () => this.handleSlotChange() }), h("li", { key: '1acf8c3b307df00d9751f071f9bf5b3e76bc9412', class: "tds-header-middle-spacer" }), h("slot", { key: '6e013e5ce40c2fb81f16ae8fdd338920bbc31396', name: "end" })))));
|
|
50
59
|
}
|
|
51
60
|
get host() { return getElement(this); }
|
|
52
61
|
};
|
|
@@ -14,8 +14,8 @@ const TdsInlineTab = class {
|
|
|
14
14
|
this.selected = selected;
|
|
15
15
|
}
|
|
16
16
|
render() {
|
|
17
|
-
return (h(Host, { key: '
|
|
18
|
-
${this.disabled ? 'disabled' : ''}` }, h("slot", { key: '
|
|
17
|
+
return (h(Host, { key: 'd15c7d658b9f90d01743d8f4fe6d14714a73e3f8', role: "listitem" }, h("div", { key: 'cc3324aa2ee065c9c9fd78c0e55c5c096a975d4d', class: `inline-tab-item ${this.selected ? 'selected' : ''}
|
|
18
|
+
${this.disabled ? 'disabled' : ''}` }, h("slot", { key: '68bed317582717cb72d40f6b91d304a3a3df9d47' }))));
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
TdsInlineTab.style = TdsInlineTabStyle0;
|