@limetech/lime-elements 33.14.0-next.9 → 34.0.0-next.4
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/{checkbox.template-c0b4c7c7.js → checkbox.template-d4423721.js} +1 -1
- package/dist/cjs/component-f7ef9087.js +2365 -0
- package/dist/cjs/{index-153dc912.js → index-e63a89d7.js} +73 -64
- package/dist/cjs/lime-elements.cjs.js +3 -3
- package/dist/cjs/limel-badge.cjs.entry.js +2 -2
- package/dist/cjs/limel-banner.cjs.entry.js +2 -2
- package/dist/cjs/limel-button-group.cjs.entry.js +16 -6
- package/dist/cjs/limel-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/limel-chip-set.cjs.entry.js +2 -2
- package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
- package/dist/cjs/limel-code-editor.cjs.entry.js +2 -2
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
- package/dist/cjs/limel-config.cjs.entry.js +5 -2
- package/dist/cjs/limel-date-picker.cjs.entry.js +2 -2
- package/dist/cjs/limel-dialog.cjs.entry.js +2 -2
- package/dist/cjs/limel-file.cjs.entry.js +2 -2
- package/dist/cjs/limel-flatpickr-adapter_2.cjs.entry.js +3 -3
- package/dist/cjs/limel-flex-container.cjs.entry.js +2 -2
- package/dist/cjs/limel-form.cjs.entry.js +2 -2
- package/dist/cjs/limel-grid.cjs.entry.js +2 -2
- package/dist/cjs/limel-header.cjs.entry.js +2 -2
- package/dist/cjs/limel-icon-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-icon.cjs.entry.js +2 -2
- package/dist/cjs/limel-linear-progress.cjs.entry.js +2 -2
- package/dist/cjs/limel-list_2.cjs.entry.js +484 -0
- package/dist/cjs/limel-menu-list.cjs.entry.js +863 -0
- package/dist/cjs/limel-menu.cjs.entry.js +6 -45
- package/dist/cjs/limel-picker.cjs.entry.js +2 -2
- package/dist/cjs/limel-popover-surface.cjs.entry.js +2 -2
- package/dist/cjs/limel-popover.cjs.entry.js +2 -2
- package/dist/cjs/limel-portal.cjs.entry.js +1935 -0
- package/dist/cjs/limel-progress-flow-item.cjs.entry.js +3 -3
- package/dist/cjs/limel-progress-flow.cjs.entry.js +2 -2
- package/dist/cjs/limel-select.cjs.entry.js +2 -2
- package/dist/cjs/limel-slider.cjs.entry.js +2 -2
- package/dist/cjs/limel-snackbar.cjs.entry.js +2 -2
- package/dist/cjs/limel-spinner.cjs.entry.js +2 -2
- package/dist/cjs/limel-switch.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-panel.cjs.entry.js +2 -2
- package/dist/cjs/limel-table.cjs.entry.js +3 -3
- package/dist/cjs/limel-tooltip-content.cjs.entry.js +7 -4
- package/dist/cjs/limel-tooltip.cjs.entry.js +3 -3
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/collection/collection-manifest.json +3 -2
- package/dist/collection/components/button-group/button-group.js +15 -5
- package/dist/collection/components/chip-set/chip-set.js +2 -2
- package/dist/collection/components/config/config.js +3 -0
- package/dist/collection/components/header/header.js +0 -1
- package/dist/collection/components/list/list-renderer.js +151 -166
- package/dist/collection/components/list/list.css +0 -10
- package/dist/collection/components/list/list.js +77 -125
- package/dist/collection/components/menu/menu.js +12 -94
- package/dist/collection/components/menu-list/menu-list-renderer-config.js +1 -0
- package/dist/collection/components/menu-list/menu-list-renderer.js +150 -0
- package/dist/collection/components/menu-list/menu-list.css +3367 -0
- package/dist/collection/components/menu-list/menu-list.js +274 -0
- package/dist/collection/components/menu-list/menu-list.types.js +1 -0
- package/dist/collection/components/menu-surface/menu-surface.js +84 -87
- package/dist/collection/components/picker/picker.js +2 -2
- package/dist/collection/components/popover/popover.js +0 -1
- package/dist/collection/components/progress-flow/progress-flow-item/progress-flow-item.css +1 -1
- package/dist/collection/components/table/table.css +9 -2
- package/dist/collection/components/tooltip/tooltip-content.css +25 -13
- package/dist/collection/components/tooltip/tooltip-content.js +4 -3
- package/dist/collection/components/tooltip/tooltip.css +0 -6
- package/dist/collection/components/tooltip/tooltip.js +31 -5
- package/dist/esm/{checkbox.template-434214d5.js → checkbox.template-dbdd27c8.js} +1 -1
- package/dist/esm/component-2eb4e07b.js +2357 -0
- package/dist/esm/{index-dc421a6e.js → index-2316f345.js} +73 -64
- package/dist/esm/lime-elements.js +3 -3
- package/dist/esm/limel-badge.entry.js +2 -2
- package/dist/esm/limel-banner.entry.js +2 -2
- package/dist/esm/limel-button-group.entry.js +16 -6
- package/dist/esm/limel-button.entry.js +2 -2
- package/dist/esm/limel-checkbox.entry.js +3 -3
- package/dist/esm/limel-chip-set.entry.js +2 -2
- package/dist/esm/limel-circular-progress.entry.js +2 -2
- package/dist/esm/limel-code-editor.entry.js +2 -2
- package/dist/esm/limel-collapsible-section.entry.js +2 -2
- package/dist/esm/limel-config.entry.js +5 -2
- package/dist/esm/limel-date-picker.entry.js +2 -2
- package/dist/esm/limel-dialog.entry.js +2 -2
- package/dist/esm/limel-file.entry.js +2 -2
- package/dist/esm/limel-flatpickr-adapter_2.entry.js +3 -3
- package/dist/esm/limel-flex-container.entry.js +2 -2
- package/dist/esm/limel-form.entry.js +2 -2
- package/dist/esm/limel-grid.entry.js +2 -2
- package/dist/esm/limel-header.entry.js +2 -2
- package/dist/esm/limel-icon-button.entry.js +2 -2
- package/dist/esm/limel-icon.entry.js +2 -2
- package/dist/esm/limel-linear-progress.entry.js +2 -2
- package/dist/esm/limel-list_2.entry.js +479 -0
- package/dist/esm/limel-menu-list.entry.js +859 -0
- package/dist/esm/limel-menu.entry.js +6 -45
- package/dist/esm/limel-picker.entry.js +2 -2
- package/dist/esm/limel-popover-surface.entry.js +2 -2
- package/dist/esm/limel-popover.entry.js +2 -2
- package/dist/esm/limel-portal.entry.js +1931 -0
- package/dist/esm/limel-progress-flow-item.entry.js +3 -3
- package/dist/esm/limel-progress-flow.entry.js +2 -2
- package/dist/esm/limel-select.entry.js +2 -2
- package/dist/esm/limel-slider.entry.js +2 -2
- package/dist/esm/limel-snackbar.entry.js +2 -2
- package/dist/esm/limel-spinner.entry.js +2 -2
- package/dist/esm/limel-switch.entry.js +2 -2
- package/dist/esm/limel-tab-bar.entry.js +2 -2
- package/dist/esm/limel-tab-panel.entry.js +2 -2
- package/dist/esm/limel-table.entry.js +3 -3
- package/dist/esm/limel-tooltip-content.entry.js +7 -4
- package/dist/esm/limel-tooltip.entry.js +3 -3
- package/dist/esm/loader.js +3 -3
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-af7c5b11.entry.js → p-03c28bee.entry.js} +2 -2
- package/dist/lime-elements/p-041ae00c.entry.js +1 -0
- package/dist/lime-elements/p-143705b1.entry.js +1 -0
- package/dist/lime-elements/{p-467c87f6.entry.js → p-1d7c7d5e.entry.js} +1 -1
- package/dist/lime-elements/p-1fb5340d.entry.js +1 -0
- package/dist/lime-elements/p-227d2c5a.entry.js +1 -0
- package/dist/lime-elements/p-31299106.js +126 -0
- package/dist/lime-elements/p-31fecf5d.entry.js +1 -0
- package/dist/lime-elements/p-34c7872e.entry.js +1 -0
- package/dist/lime-elements/p-3525d50c.entry.js +37 -0
- package/dist/lime-elements/p-4932c029.entry.js +1 -0
- package/dist/lime-elements/p-4b5af81b.entry.js +1 -0
- package/dist/lime-elements/p-510bb5a4.entry.js +1 -0
- package/dist/lime-elements/{p-67c48f98.entry.js → p-587bd6ca.entry.js} +1 -1
- package/dist/lime-elements/p-64549ba6.entry.js +37 -0
- package/dist/lime-elements/p-692f31f1.entry.js +16 -0
- package/dist/lime-elements/p-7476efe0.entry.js +1 -0
- package/dist/lime-elements/p-845e645a.entry.js +1 -0
- package/dist/lime-elements/{p-c636bfcf.entry.js → p-85094bfc.entry.js} +2 -2
- package/dist/lime-elements/p-89b5a983.js +1 -0
- package/dist/lime-elements/p-8d1ab246.entry.js +1 -0
- package/dist/lime-elements/p-8d8bd2ab.entry.js +73 -0
- package/dist/lime-elements/p-90f3e17c.entry.js +37 -0
- package/dist/lime-elements/{p-fabb836f.js → p-92146da6.js} +1 -1
- package/dist/lime-elements/p-9d362dd5.entry.js +1 -0
- package/dist/lime-elements/{p-90b2c0a2.entry.js → p-a1153d2a.entry.js} +1 -1
- package/dist/lime-elements/{p-5577f962.entry.js → p-a3dadae7.entry.js} +2 -2
- package/dist/lime-elements/p-b386bfeb.entry.js +1 -0
- package/dist/lime-elements/p-b5d6abc3.entry.js +126 -0
- package/dist/lime-elements/p-bbc1bb01.entry.js +1 -0
- package/dist/lime-elements/p-be56ffab.entry.js +1 -0
- package/dist/lime-elements/p-c35874db.entry.js +1 -0
- package/dist/lime-elements/p-c8c8a946.entry.js +59 -0
- package/dist/lime-elements/p-d070f0e7.entry.js +1 -0
- package/dist/lime-elements/p-d2c74396.entry.js +1 -0
- package/dist/lime-elements/p-df55ee67.entry.js +82 -0
- package/dist/lime-elements/p-e5738ec6.entry.js +1 -0
- package/dist/lime-elements/p-e881e98d.entry.js +1 -0
- package/dist/lime-elements/{p-2476f7bb.entry.js → p-f079f1fd.entry.js} +2 -2
- package/dist/lime-elements/p-f2df64ec.entry.js +1 -0
- package/dist/lime-elements/p-f4495f59.entry.js +1 -0
- package/dist/lime-elements/p-fc30b8e3.entry.js +1 -0
- package/dist/lime-elements/{p-61ecc7f1.entry.js → p-ff0217b3.entry.js} +2 -2
- package/dist/loader/index.d.ts +0 -1
- package/dist/types/components/header/header.d.ts +0 -1
- package/dist/types/components/list/list-item.types.d.ts +2 -1
- package/dist/types/components/list/list-renderer-config.d.ts +0 -1
- package/dist/types/components/list/list-renderer.d.ts +5 -7
- package/dist/types/components/list/list.d.ts +0 -7
- package/dist/types/components/list/list.types.d.ts +1 -1
- package/dist/types/components/menu/menu.d.ts +2 -20
- package/dist/types/components/menu/menu.types.d.ts +30 -3
- package/dist/types/components/menu-list/menu-list-renderer-config.d.ts +7 -0
- package/dist/types/components/menu-list/menu-list-renderer.d.ts +48 -0
- package/dist/types/components/menu-list/menu-list.d.ts +59 -0
- package/dist/types/components/menu-list/menu-list.types.d.ts +6 -0
- package/dist/types/components/menu-surface/menu-surface.d.ts +0 -1
- package/dist/types/components/popover/popover.d.ts +0 -1
- package/dist/types/components/tooltip/tooltip-content.d.ts +1 -1
- package/dist/types/components/tooltip/tooltip.d.ts +31 -5
- package/dist/types/components.d.ts +66 -25
- package/dist/types/interface.d.ts +1 -0
- package/package.json +3 -2
- package/dist/cjs/limel-list_3.cjs.entry.js +0 -5418
- package/dist/esm/limel-list_3.entry.js +0 -5412
- package/dist/lime-elements/p-034f336b.entry.js +0 -126
- package/dist/lime-elements/p-136230d6.entry.js +0 -1
- package/dist/lime-elements/p-16c336e8.entry.js +0 -59
- package/dist/lime-elements/p-191f05bc.entry.js +0 -1
- package/dist/lime-elements/p-1a3a9bfd.entry.js +0 -1
- package/dist/lime-elements/p-231f62ba.entry.js +0 -1
- package/dist/lime-elements/p-24c128ec.entry.js +0 -37
- package/dist/lime-elements/p-30c4b32a.entry.js +0 -1
- package/dist/lime-elements/p-3a21fa33.entry.js +0 -37
- package/dist/lime-elements/p-3df01502.entry.js +0 -1
- package/dist/lime-elements/p-63e4f918.entry.js +0 -1
- package/dist/lime-elements/p-6d9f679d.entry.js +0 -1
- package/dist/lime-elements/p-6e3b6e69.entry.js +0 -1
- package/dist/lime-elements/p-79541c2b.entry.js +0 -73
- package/dist/lime-elements/p-7be3a593.entry.js +0 -1
- package/dist/lime-elements/p-7c6f6b80.entry.js +0 -1
- package/dist/lime-elements/p-7dd9c41d.entry.js +0 -16
- package/dist/lime-elements/p-9b79dfe7.js +0 -1
- package/dist/lime-elements/p-a6a7dd00.entry.js +0 -1
- package/dist/lime-elements/p-aeeca058.entry.js +0 -1
- package/dist/lime-elements/p-b0b18dfc.entry.js +0 -1
- package/dist/lime-elements/p-b88e7350.entry.js +0 -1
- package/dist/lime-elements/p-bde1749a.entry.js +0 -1
- package/dist/lime-elements/p-c45238b6.entry.js +0 -1
- package/dist/lime-elements/p-c53695a3.entry.js +0 -37
- package/dist/lime-elements/p-dc5b3f45.entry.js +0 -1
- package/dist/lime-elements/p-e078c459.entry.js +0 -177
- package/dist/lime-elements/p-e9b4bdac.entry.js +0 -1
- package/dist/lime-elements/p-eb81fc35.entry.js +0 -1
- package/dist/lime-elements/p-f94cbe50.entry.js +0 -1
- package/dist/lime-elements/p-fa880bd6.entry.js +0 -1
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { MDCList } from '@material/list';
|
|
2
|
-
import { MDCMenu } from '@material/menu';
|
|
3
2
|
import { MDCRipple } from '@material/ripple';
|
|
4
3
|
import { strings as listStrings } from '@material/list/constants';
|
|
5
|
-
import { strings as menuStrings } from '@material/menu/constants';
|
|
6
4
|
import { Component, Element, Event, h, Host, Prop, Watch, } from '@stencil/core';
|
|
7
5
|
import { ListRenderer } from './list-renderer';
|
|
8
6
|
const { ACTION_EVENT } = listStrings;
|
|
9
|
-
const { SELECTED_EVENT } = menuStrings;
|
|
10
7
|
/**
|
|
11
8
|
* @exampleComponent limel-example-list
|
|
12
9
|
* @exampleComponent limel-example-list-secondary
|
|
@@ -37,8 +34,81 @@ export class List {
|
|
|
37
34
|
// eslint-disable-next-line no-magic-numbers
|
|
38
35
|
this.maxLinesSecondaryText = 3;
|
|
39
36
|
this.listRenderer = new ListRenderer();
|
|
40
|
-
this.
|
|
41
|
-
|
|
37
|
+
this.setup = () => {
|
|
38
|
+
this.setupList();
|
|
39
|
+
this.setupListeners();
|
|
40
|
+
};
|
|
41
|
+
this.setupList = () => {
|
|
42
|
+
const element = this.element.shadowRoot.querySelector('.mdc-deprecated-list');
|
|
43
|
+
if (!element) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.mdcList = new MDCList(element);
|
|
47
|
+
this.mdcList.listElements.forEach((item) => new MDCRipple(item));
|
|
48
|
+
};
|
|
49
|
+
this.setupListeners = () => {
|
|
50
|
+
if (!this.mdcList) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.mdcList.unlisten(ACTION_EVENT, this.handleAction);
|
|
54
|
+
this.selectable = ['selectable', 'radio', 'checkbox'].includes(this.type);
|
|
55
|
+
this.multiple = this.type === 'checkbox';
|
|
56
|
+
if (!this.selectable) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.mdcList.listen(ACTION_EVENT, this.handleAction);
|
|
60
|
+
this.mdcList.singleSelection = !this.multiple;
|
|
61
|
+
};
|
|
62
|
+
this.teardown = () => {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
(_a = this.mdcList) === null || _a === void 0 ? void 0 : _a.unlisten(ACTION_EVENT, this.handleAction);
|
|
65
|
+
(_b = this.mdcList) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
66
|
+
};
|
|
67
|
+
this.handleAction = (event) => {
|
|
68
|
+
if (!this.multiple) {
|
|
69
|
+
this.handleSingleSelect(event.detail.index);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.handleMultiSelect(event.detail.index);
|
|
73
|
+
};
|
|
74
|
+
this.handleSingleSelect = (index) => {
|
|
75
|
+
const listItems = this.items.filter(this.isListItem);
|
|
76
|
+
if (listItems[index].disabled) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const selectedItem = listItems.find((item) => {
|
|
80
|
+
return !!item.selected;
|
|
81
|
+
});
|
|
82
|
+
if (selectedItem) {
|
|
83
|
+
this.change.emit(Object.assign(Object.assign({}, selectedItem), { selected: false }));
|
|
84
|
+
}
|
|
85
|
+
if (listItems[index] !== selectedItem) {
|
|
86
|
+
this.change.emit(Object.assign(Object.assign({}, listItems[index]), { selected: true }));
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
this.handleMultiSelect = (index) => {
|
|
90
|
+
const listItems = this.items.filter(this.isListItem);
|
|
91
|
+
if (listItems[index].disabled) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const selectedItems = listItems
|
|
95
|
+
.filter((item, listIndex) => {
|
|
96
|
+
if (listIndex === index) {
|
|
97
|
+
// This is the item that was selected or deselected,
|
|
98
|
+
// so we negate its previous selection status.
|
|
99
|
+
return !item.selected;
|
|
100
|
+
}
|
|
101
|
+
// This is an item that didn't change, so we keep its selection status.
|
|
102
|
+
return item.selected;
|
|
103
|
+
})
|
|
104
|
+
.map((item) => {
|
|
105
|
+
return Object.assign(Object.assign({}, item), { selected: true });
|
|
106
|
+
});
|
|
107
|
+
this.change.emit(selectedItems);
|
|
108
|
+
};
|
|
109
|
+
this.isListItem = (item) => {
|
|
110
|
+
return !('separator' in item);
|
|
111
|
+
};
|
|
42
112
|
}
|
|
43
113
|
connectedCallback() {
|
|
44
114
|
this.setup();
|
|
@@ -61,9 +131,6 @@ export class List {
|
|
|
61
131
|
maxLinesSecondaryText = 1;
|
|
62
132
|
}
|
|
63
133
|
const html = this.listRenderer.render(this.items, this.config);
|
|
64
|
-
if (this.type === 'menu') {
|
|
65
|
-
return h("div", { class: "mdc-menu mdc-menu-surface" }, html);
|
|
66
|
-
}
|
|
67
134
|
return (h(Host, { style: {
|
|
68
135
|
'--maxLinesSecondaryText': `${maxLinesSecondaryText}`,
|
|
69
136
|
} }, html));
|
|
@@ -84,121 +151,6 @@ export class List {
|
|
|
84
151
|
.filter((item) => item.selected)
|
|
85
152
|
.map((item) => listItems.indexOf(item));
|
|
86
153
|
}
|
|
87
|
-
setup() {
|
|
88
|
-
if (this.type === 'menu') {
|
|
89
|
-
this.setupMenu();
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this.setupList();
|
|
93
|
-
}
|
|
94
|
-
this.setupListeners();
|
|
95
|
-
}
|
|
96
|
-
setupList() {
|
|
97
|
-
const element = this.element.shadowRoot.querySelector('.mdc-deprecated-list');
|
|
98
|
-
if (!element) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
this.mdcList = new MDCList(element);
|
|
102
|
-
this.mdcList.listElements.forEach((item) => new MDCRipple(item));
|
|
103
|
-
}
|
|
104
|
-
setupMenu() {
|
|
105
|
-
const element = this.element.shadowRoot.querySelector('.mdc-menu');
|
|
106
|
-
if (!element) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
this.mdcMenu = new MDCMenu(element);
|
|
110
|
-
this.mdcMenu.hasTypeahead = true;
|
|
111
|
-
this.mdcMenu.wrapFocus = true;
|
|
112
|
-
this.mdcMenu.items.forEach((item) => new MDCRipple(item));
|
|
113
|
-
}
|
|
114
|
-
setupListeners() {
|
|
115
|
-
if (this.type === 'menu') {
|
|
116
|
-
this.setupMenuListeners();
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
this.setupListListeners();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
setupListListeners() {
|
|
123
|
-
if (!this.mdcList) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
this.mdcList.unlisten(ACTION_EVENT, this.handleAction);
|
|
127
|
-
this.selectable = ['selectable', 'radio', 'checkbox', 'menu'].includes(this.type);
|
|
128
|
-
this.multiple = this.type === 'checkbox';
|
|
129
|
-
if (!this.selectable) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.mdcList.listen(ACTION_EVENT, this.handleAction);
|
|
133
|
-
this.mdcList.singleSelection = !this.multiple;
|
|
134
|
-
}
|
|
135
|
-
setupMenuListeners() {
|
|
136
|
-
if (!this.mdcMenu) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
this.mdcMenu.unlisten(SELECTED_EVENT, this.handleMenuSelect);
|
|
140
|
-
this.selectable = true;
|
|
141
|
-
this.mdcMenu.listen(SELECTED_EVENT, this.handleMenuSelect);
|
|
142
|
-
}
|
|
143
|
-
teardown() {
|
|
144
|
-
var _a, _b, _c, _d;
|
|
145
|
-
(_a = this.mdcList) === null || _a === void 0 ? void 0 : _a.unlisten(ACTION_EVENT, this.handleAction);
|
|
146
|
-
(_b = this.mdcList) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
147
|
-
(_c = this.mdcMenu) === null || _c === void 0 ? void 0 : _c.unlisten(SELECTED_EVENT, this.handleMenuSelect);
|
|
148
|
-
(_d = this.mdcMenu) === null || _d === void 0 ? void 0 : _d.destroy();
|
|
149
|
-
}
|
|
150
|
-
handleAction(event) {
|
|
151
|
-
if (!this.multiple) {
|
|
152
|
-
this.handleSingleSelect(event.detail.index);
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.handleMultiSelect(event.detail.index);
|
|
156
|
-
}
|
|
157
|
-
handleMenuSelect(event) {
|
|
158
|
-
this.handleSingleSelect(event.detail.index);
|
|
159
|
-
}
|
|
160
|
-
handleSingleSelect(index) {
|
|
161
|
-
const listItems = this.items.filter(this.isListItem);
|
|
162
|
-
if (listItems[index].disabled) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
const selectedItem = listItems.find((item) => {
|
|
166
|
-
return !!item.selected;
|
|
167
|
-
});
|
|
168
|
-
if (selectedItem) {
|
|
169
|
-
this.change.emit(Object.assign(Object.assign({}, selectedItem), { selected: false }));
|
|
170
|
-
}
|
|
171
|
-
if (listItems[index] !== selectedItem) {
|
|
172
|
-
if (this.type === 'menu') {
|
|
173
|
-
this.change.emit(Object.assign(Object.assign({}, listItems[index]), { selected: false }));
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
this.change.emit(Object.assign(Object.assign({}, listItems[index]), { selected: true }));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
handleMultiSelect(index) {
|
|
180
|
-
const listItems = this.items.filter(this.isListItem);
|
|
181
|
-
if (listItems[index].disabled) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const selectedItems = listItems
|
|
185
|
-
.filter((item, listIndex) => {
|
|
186
|
-
if (listIndex === index) {
|
|
187
|
-
// This is the item that was selected or deselected,
|
|
188
|
-
// so we negate its previous selection status.
|
|
189
|
-
return !item.selected;
|
|
190
|
-
}
|
|
191
|
-
// This is an item that didn't change, so we keep its selection status.
|
|
192
|
-
return item.selected;
|
|
193
|
-
})
|
|
194
|
-
.map((item) => {
|
|
195
|
-
return Object.assign(Object.assign({}, item), { selected: true });
|
|
196
|
-
});
|
|
197
|
-
this.change.emit(selectedItems);
|
|
198
|
-
}
|
|
199
|
-
isListItem(item) {
|
|
200
|
-
return !('separator' in item);
|
|
201
|
-
}
|
|
202
154
|
static get is() { return "limel-list"; }
|
|
203
155
|
static get encapsulation() { return "shadow"; }
|
|
204
156
|
static get originalStyleUrls() { return {
|
|
@@ -280,7 +232,7 @@ export class List {
|
|
|
280
232
|
"mutable": false,
|
|
281
233
|
"complexType": {
|
|
282
234
|
"original": "ListType",
|
|
283
|
-
"resolved": "\"checkbox\" | \"
|
|
235
|
+
"resolved": "\"checkbox\" | \"radio\" | \"selectable\"",
|
|
284
236
|
"references": {
|
|
285
237
|
"ListType": {
|
|
286
238
|
"location": "import",
|
|
@@ -292,7 +244,7 @@ export class List {
|
|
|
292
244
|
"optional": false,
|
|
293
245
|
"docs": {
|
|
294
246
|
"tags": [],
|
|
295
|
-
"text": "The type of the list, omit to get a regular list. Available types are:\n`selectable`: regular list with single selection.\n`radio`: radio button list with single selection.\n`checkbox`: checkbox list with multiple selection
|
|
247
|
+
"text": "The type of the list, omit to get a regular list. Available types are:\n`selectable`: regular list with single selection.\n`radio`: radio button list with single selection.\n`checkbox`: checkbox list with multiple selection."
|
|
296
248
|
},
|
|
297
249
|
"attribute": "type",
|
|
298
250
|
"reflect": false
|
|
@@ -14,13 +14,6 @@ import { zipObject } from 'lodash-es';
|
|
|
14
14
|
*/
|
|
15
15
|
export class Menu {
|
|
16
16
|
constructor() {
|
|
17
|
-
/**
|
|
18
|
-
* Is displayed on the default trigger button.
|
|
19
|
-
*
|
|
20
|
-
* @deprecated Use with default trigger has been deprecated.
|
|
21
|
-
* Please supply your own trigger element.
|
|
22
|
-
*/
|
|
23
|
-
this.label = '';
|
|
24
17
|
/**
|
|
25
18
|
* A list of items and separators to show in the menu.
|
|
26
19
|
*/
|
|
@@ -45,14 +38,6 @@ export class Menu {
|
|
|
45
38
|
* Renders list items in a grid layout, rather than a vertical list
|
|
46
39
|
*/
|
|
47
40
|
this.gridLayout = false;
|
|
48
|
-
/**
|
|
49
|
-
* Defines whether the menu should have a fixed position on the screen.
|
|
50
|
-
*
|
|
51
|
-
* @deprecated Fixed position was used to get around a bug in the placement
|
|
52
|
-
* of the menu. This bug has since been fixed, which makes this attribute
|
|
53
|
-
* obsolete.
|
|
54
|
-
*/
|
|
55
|
-
this.fixed = false;
|
|
56
41
|
this.setTriggerAttributes = (element) => {
|
|
57
42
|
const attributes = {
|
|
58
43
|
'aria-haspopup': true,
|
|
@@ -97,8 +82,8 @@ export class Menu {
|
|
|
97
82
|
var _a;
|
|
98
83
|
const activeElement = this.list.shadowRoot.activeElement;
|
|
99
84
|
activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur();
|
|
100
|
-
const
|
|
101
|
-
const selectedIndex = Math.max(
|
|
85
|
+
const MenuItems = this.items.filter(this.isMenuItem);
|
|
86
|
+
const selectedIndex = Math.max(MenuItems.findIndex((item) => item.selected), 0);
|
|
102
87
|
const menuElements = Array.from(this.list.shadowRoot.querySelectorAll('[role="menuitem"]'));
|
|
103
88
|
(_a = menuElements[selectedIndex]) === null || _a === void 0 ? void 0 : _a.focus();
|
|
104
89
|
};
|
|
@@ -123,15 +108,11 @@ export class Menu {
|
|
|
123
108
|
render() {
|
|
124
109
|
const cssProperties = this.getCssProperties();
|
|
125
110
|
const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
|
|
126
|
-
const portalClasses = {
|
|
127
|
-
'limel-portal--fixed': this.fixed,
|
|
128
|
-
};
|
|
129
|
-
const portalPosition = this.getPortalPosition();
|
|
130
111
|
return (h("div", { class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick },
|
|
131
|
-
h("slot", { name: "trigger" }
|
|
132
|
-
h("limel-portal", {
|
|
112
|
+
h("slot", { name: "trigger" }),
|
|
113
|
+
h("limel-portal", { visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } },
|
|
133
114
|
h("limel-menu-surface", { open: this.open, onDismiss: this.onClose, style: cssProperties },
|
|
134
|
-
h("limel-list", { class: {
|
|
115
|
+
h("limel-menu-list", { class: {
|
|
135
116
|
'has-grid-layout has-interactive-items': this.gridLayout,
|
|
136
117
|
}, items: this.items, type: "menu", badgeIcons: this.badgeIcons, onChange: this.onListChange, ref: this.setListElement })))));
|
|
137
118
|
}
|
|
@@ -139,27 +120,6 @@ export class Menu {
|
|
|
139
120
|
const slotElement = this.host.shadowRoot.querySelector('slot');
|
|
140
121
|
slotElement.assignedElements().forEach(this.setTriggerAttributes);
|
|
141
122
|
}
|
|
142
|
-
renderTrigger() {
|
|
143
|
-
return (h("button", { class: `
|
|
144
|
-
menu__trigger
|
|
145
|
-
${this.disabled ? '' : 'menu__trigger-enabled'}
|
|
146
|
-
`, disabled: this.disabled },
|
|
147
|
-
h("span", null, this.label)));
|
|
148
|
-
}
|
|
149
|
-
getPortalPosition() {
|
|
150
|
-
if (!this.fixed) {
|
|
151
|
-
return {};
|
|
152
|
-
}
|
|
153
|
-
const rect = this.host.getBoundingClientRect();
|
|
154
|
-
const portalPosition = {
|
|
155
|
-
top: `${rect.y + rect.height}px`,
|
|
156
|
-
left: `${rect.x}px`,
|
|
157
|
-
};
|
|
158
|
-
if (this.openDirection === 'left') {
|
|
159
|
-
portalPosition.left = `${rect.x + rect.width}px`;
|
|
160
|
-
}
|
|
161
|
-
return portalPosition;
|
|
162
|
-
}
|
|
163
123
|
getCssProperties() {
|
|
164
124
|
const propertyNames = [
|
|
165
125
|
'--menu-surface-width',
|
|
@@ -173,7 +133,7 @@ export class Menu {
|
|
|
173
133
|
});
|
|
174
134
|
return zipObject(propertyNames, values);
|
|
175
135
|
}
|
|
176
|
-
|
|
136
|
+
isMenuItem(item) {
|
|
177
137
|
return !('separator' in item);
|
|
178
138
|
}
|
|
179
139
|
static get is() { return "limel-menu"; }
|
|
@@ -185,40 +145,19 @@ export class Menu {
|
|
|
185
145
|
"$": ["menu.css"]
|
|
186
146
|
}; }
|
|
187
147
|
static get properties() { return {
|
|
188
|
-
"label": {
|
|
189
|
-
"type": "string",
|
|
190
|
-
"mutable": false,
|
|
191
|
-
"complexType": {
|
|
192
|
-
"original": "string",
|
|
193
|
-
"resolved": "string",
|
|
194
|
-
"references": {}
|
|
195
|
-
},
|
|
196
|
-
"required": false,
|
|
197
|
-
"optional": false,
|
|
198
|
-
"docs": {
|
|
199
|
-
"tags": [{
|
|
200
|
-
"text": "Use with default trigger has been deprecated.\nPlease supply your own trigger element.",
|
|
201
|
-
"name": "deprecated"
|
|
202
|
-
}],
|
|
203
|
-
"text": "Is displayed on the default trigger button."
|
|
204
|
-
},
|
|
205
|
-
"attribute": "label",
|
|
206
|
-
"reflect": true,
|
|
207
|
-
"defaultValue": "''"
|
|
208
|
-
},
|
|
209
148
|
"items": {
|
|
210
149
|
"type": "unknown",
|
|
211
150
|
"mutable": false,
|
|
212
151
|
"complexType": {
|
|
213
152
|
"original": "Array<MenuItem | ListSeparator>",
|
|
214
|
-
"resolved": "(ListSeparator | MenuItem)[]",
|
|
153
|
+
"resolved": "(ListSeparator | MenuItem<any>)[]",
|
|
215
154
|
"references": {
|
|
216
155
|
"Array": {
|
|
217
156
|
"location": "global"
|
|
218
157
|
},
|
|
219
158
|
"MenuItem": {
|
|
220
159
|
"location": "import",
|
|
221
|
-
"path": "
|
|
160
|
+
"path": "@limetech/lime-elements"
|
|
222
161
|
},
|
|
223
162
|
"ListSeparator": {
|
|
224
163
|
"location": "import",
|
|
@@ -261,7 +200,7 @@ export class Menu {
|
|
|
261
200
|
"references": {
|
|
262
201
|
"OpenDirection": {
|
|
263
202
|
"location": "import",
|
|
264
|
-
"path": "
|
|
203
|
+
"path": "@limetech/lime-elements"
|
|
265
204
|
}
|
|
266
205
|
}
|
|
267
206
|
},
|
|
@@ -328,27 +267,6 @@ export class Menu {
|
|
|
328
267
|
"attribute": "grid-layout",
|
|
329
268
|
"reflect": true,
|
|
330
269
|
"defaultValue": "false"
|
|
331
|
-
},
|
|
332
|
-
"fixed": {
|
|
333
|
-
"type": "boolean",
|
|
334
|
-
"mutable": false,
|
|
335
|
-
"complexType": {
|
|
336
|
-
"original": "boolean",
|
|
337
|
-
"resolved": "boolean",
|
|
338
|
-
"references": {}
|
|
339
|
-
},
|
|
340
|
-
"required": false,
|
|
341
|
-
"optional": false,
|
|
342
|
-
"docs": {
|
|
343
|
-
"tags": [{
|
|
344
|
-
"text": "Fixed position was used to get around a bug in the placement\nof the menu. This bug has since been fixed, which makes this attribute\nobsolete.",
|
|
345
|
-
"name": "deprecated"
|
|
346
|
-
}],
|
|
347
|
-
"text": "Defines whether the menu should have a fixed position on the screen."
|
|
348
|
-
},
|
|
349
|
-
"attribute": "fixed",
|
|
350
|
-
"reflect": false,
|
|
351
|
-
"defaultValue": "false"
|
|
352
270
|
}
|
|
353
271
|
}; }
|
|
354
272
|
static get events() { return [{
|
|
@@ -377,10 +295,10 @@ export class Menu {
|
|
|
377
295
|
"text": "Is emitted when a menu item is selected."
|
|
378
296
|
},
|
|
379
297
|
"complexType": {
|
|
380
|
-
"original": "
|
|
381
|
-
"resolved": "
|
|
298
|
+
"original": "MenuItem | MenuItem[]",
|
|
299
|
+
"resolved": "MenuItem<any> | MenuItem<any>[]",
|
|
382
300
|
"references": {
|
|
383
|
-
"
|
|
301
|
+
"MenuItem": {
|
|
384
302
|
"location": "import",
|
|
385
303
|
"path": "@limetech/lime-elements"
|
|
386
304
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { h } from '@stencil/core';
|
|
2
|
+
export class MenuListRenderer {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.defaultConfig = {
|
|
5
|
+
isOpen: true,
|
|
6
|
+
badgeIcons: false,
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Determine which MenuItem should have the `tab-index` attribute set,
|
|
10
|
+
* and return the index at which that MenuItem is located in `items`.
|
|
11
|
+
* Returns `undefined` if no item should have the attribute set.
|
|
12
|
+
* See https://github.com/material-components/material-components-web/tree/e66a43a75fef4f9179e24856649518e15e279a04/packages/mdc-list#accessibility
|
|
13
|
+
*
|
|
14
|
+
* @param {Array<MenuItem | ListSeparator>} items the items of the list, including any `ListSeparator`:s
|
|
15
|
+
* @returns {number} the index as per the description
|
|
16
|
+
*/
|
|
17
|
+
this.getIndexForWhichToApplyTabIndex = (items) => {
|
|
18
|
+
let result;
|
|
19
|
+
for (let i = 0, max = items.length; i < max; i += 1) {
|
|
20
|
+
if ('separator' in items[i]) {
|
|
21
|
+
// Ignore ListSeparator
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const item = items[i];
|
|
25
|
+
if (item.selected) {
|
|
26
|
+
result = i;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (result === undefined && !item.disabled) {
|
|
30
|
+
result = i;
|
|
31
|
+
// Do NOT break, as any later item with
|
|
32
|
+
// `selected=true` should get the tab-index instead!
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Render a single list item
|
|
40
|
+
*
|
|
41
|
+
* @param {MenuItem | ListSeparator} item the item to render
|
|
42
|
+
* @param {number} index the index the item had in the `items` array
|
|
43
|
+
* @returns {HTMLElement} the list item
|
|
44
|
+
*/
|
|
45
|
+
this.renderMenuItem = (item, index) => {
|
|
46
|
+
if ('separator' in item) {
|
|
47
|
+
return h("li", { class: "mdc-deprecated-list-divider", role: "separator" });
|
|
48
|
+
}
|
|
49
|
+
const classNames = {
|
|
50
|
+
'mdc-deprecated-list-item': true,
|
|
51
|
+
'mdc-deprecated-list-item--disabled': item.disabled,
|
|
52
|
+
'mdc-deprecated-list-item--selected': item.selected,
|
|
53
|
+
};
|
|
54
|
+
const attributes = {};
|
|
55
|
+
if (index === this.applyTabIndexToItemAtIndex) {
|
|
56
|
+
attributes.tabindex = '0';
|
|
57
|
+
}
|
|
58
|
+
return (h("li", Object.assign({ class: classNames, role: "menuitem", "aria-disabled": item.disabled ? 'true' : 'false', "aria-selected": item.selected ? 'true' : 'false', "data-index": index }, attributes),
|
|
59
|
+
item.icon ? this.renderIcon(this.config, item) : null,
|
|
60
|
+
this.renderText(item),
|
|
61
|
+
this.twoLines && this.avatarList ? this.renderDivider() : null));
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Render the text of the list item
|
|
65
|
+
*
|
|
66
|
+
* @param {MenuItem} item the list item
|
|
67
|
+
* @returns {HTMLElement | string} the text for the list item
|
|
68
|
+
*/
|
|
69
|
+
this.renderText = (item) => {
|
|
70
|
+
if (this.isSimpleItem(item)) {
|
|
71
|
+
return (h("span", { class: "mdc-deprecated-list-item__text" }, item.text));
|
|
72
|
+
}
|
|
73
|
+
return (h("div", { class: "mdc-deprecated-list-item__text" },
|
|
74
|
+
h("div", { class: "mdc-deprecated-list-item__primary-command-text" },
|
|
75
|
+
h("div", { class: "mdc-deprecated-list-item__primary-text" }, item.text),
|
|
76
|
+
this.renderCommandText(item)),
|
|
77
|
+
h("div", { class: "mdc-deprecated-list-item__secondary-text" }, item.secondaryText)));
|
|
78
|
+
};
|
|
79
|
+
this.renderCommandText = (item) => {
|
|
80
|
+
if (!('commandText' in item)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
return (h("div", { class: "mdc-deprecated-list-item__command-text" }, item.commandText));
|
|
84
|
+
};
|
|
85
|
+
this.isSimpleItem = (item) => {
|
|
86
|
+
if ('commandText' in item) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
if ('secondaryText' in item) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Render an icon for a list item
|
|
96
|
+
*
|
|
97
|
+
* @param {MenuListRendererConfig} config the config object, passed on from the `renderMenuItem` function
|
|
98
|
+
* @param {MenuItem} item the list item
|
|
99
|
+
* @returns {HTMLElement} the icon element
|
|
100
|
+
*/
|
|
101
|
+
this.renderIcon = (config, item) => {
|
|
102
|
+
const style = {};
|
|
103
|
+
if (item.iconColor) {
|
|
104
|
+
if (config.badgeIcons) {
|
|
105
|
+
style['--icon-background-color'] = item.iconColor;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
style.color = item.iconColor;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return (h("limel-icon", { badge: config.badgeIcons, class: "mdc-deprecated-list-item__graphic", name: item.icon, style: style, size: config.iconSize }));
|
|
112
|
+
};
|
|
113
|
+
this.renderDivider = () => {
|
|
114
|
+
const classes = {
|
|
115
|
+
'mdc-deprecated-list-divider': true,
|
|
116
|
+
'mdc-deprecated-list-divider--inset': true,
|
|
117
|
+
};
|
|
118
|
+
if (this.config.iconSize) {
|
|
119
|
+
classes[this.config.iconSize] = true;
|
|
120
|
+
}
|
|
121
|
+
return h("hr", { class: classes });
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
render(items, config = {}) {
|
|
125
|
+
items = items || [];
|
|
126
|
+
this.config = Object.assign(Object.assign({}, this.defaultConfig), config);
|
|
127
|
+
this.twoLines = items.some((item) => {
|
|
128
|
+
return 'secondaryText' in item && !!item.secondaryText;
|
|
129
|
+
});
|
|
130
|
+
this.commandKey = items.some((item) => {
|
|
131
|
+
return 'commandText' in item && !!item.commandText;
|
|
132
|
+
});
|
|
133
|
+
this.hasIcons = items.some((item) => {
|
|
134
|
+
return 'icon' in item && !!item.icon;
|
|
135
|
+
});
|
|
136
|
+
this.avatarList = this.config.badgeIcons && this.hasIcons;
|
|
137
|
+
this.applyTabIndexToItemAtIndex =
|
|
138
|
+
this.getIndexForWhichToApplyTabIndex(items);
|
|
139
|
+
const classNames = {
|
|
140
|
+
'mdc-deprecated-list': true,
|
|
141
|
+
'mdc-deprecated-list--two-line': this.twoLines,
|
|
142
|
+
selectable: true,
|
|
143
|
+
'mdc-deprecated-list--avatar-list': this.avatarList,
|
|
144
|
+
'list--compact': this.twoLines &&
|
|
145
|
+
this.commandKey &&
|
|
146
|
+
['small', 'x-small'].includes(this.config.iconSize),
|
|
147
|
+
};
|
|
148
|
+
return (h("ul", { class: classNames, "aria-hidden": true, role: "menu", "aria-orientation": "vertical" }, items.map(this.renderMenuItem)));
|
|
149
|
+
}
|
|
150
|
+
}
|