@limetech/lime-elements 33.14.0-next.12 → 33.14.0-next.16

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.
Files changed (203) hide show
  1. package/dist/cjs/{checkbox.template-c0b4c7c7.js → checkbox.template-d4423721.js} +1 -1
  2. package/dist/cjs/component-f7ef9087.js +2365 -0
  3. package/dist/cjs/{index-153dc912.js → index-e63a89d7.js} +73 -64
  4. package/dist/cjs/lime-elements.cjs.js +3 -3
  5. package/dist/cjs/limel-badge.cjs.entry.js +2 -2
  6. package/dist/cjs/limel-banner.cjs.entry.js +2 -2
  7. package/dist/cjs/limel-button-group.cjs.entry.js +2 -2
  8. package/dist/cjs/limel-button.cjs.entry.js +2 -2
  9. package/dist/cjs/limel-checkbox.cjs.entry.js +3 -3
  10. package/dist/cjs/limel-chip-set.cjs.entry.js +2 -2
  11. package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
  12. package/dist/cjs/limel-code-editor.cjs.entry.js +2 -2
  13. package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
  14. package/dist/cjs/limel-config.cjs.entry.js +2 -2
  15. package/dist/cjs/limel-date-picker.cjs.entry.js +2 -2
  16. package/dist/cjs/limel-dialog.cjs.entry.js +2 -2
  17. package/dist/cjs/limel-file.cjs.entry.js +2 -2
  18. package/dist/cjs/limel-flatpickr-adapter_2.cjs.entry.js +3 -3
  19. package/dist/cjs/limel-flex-container.cjs.entry.js +2 -2
  20. package/dist/cjs/limel-form.cjs.entry.js +2 -2
  21. package/dist/cjs/limel-grid.cjs.entry.js +2 -2
  22. package/dist/cjs/limel-header.cjs.entry.js +2 -2
  23. package/dist/cjs/limel-icon-button.cjs.entry.js +2 -2
  24. package/dist/cjs/limel-icon.cjs.entry.js +2 -2
  25. package/dist/cjs/limel-linear-progress.cjs.entry.js +2 -2
  26. package/dist/cjs/limel-list_2.cjs.entry.js +497 -0
  27. package/dist/cjs/limel-menu-list.cjs.entry.js +885 -0
  28. package/dist/cjs/limel-menu.cjs.entry.js +6 -6
  29. package/dist/cjs/limel-picker.cjs.entry.js +2 -2
  30. package/dist/cjs/limel-popover-surface.cjs.entry.js +2 -2
  31. package/dist/cjs/limel-popover.cjs.entry.js +2 -2
  32. package/dist/cjs/limel-portal.cjs.entry.js +1935 -0
  33. package/dist/cjs/limel-progress-flow-item.cjs.entry.js +3 -3
  34. package/dist/cjs/limel-progress-flow.cjs.entry.js +2 -2
  35. package/dist/cjs/limel-select.cjs.entry.js +2 -2
  36. package/dist/cjs/limel-slider.cjs.entry.js +2 -2
  37. package/dist/cjs/limel-snackbar.cjs.entry.js +2 -2
  38. package/dist/cjs/limel-spinner.cjs.entry.js +2 -2
  39. package/dist/cjs/limel-switch.cjs.entry.js +2 -2
  40. package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
  41. package/dist/cjs/limel-tab-panel.cjs.entry.js +2 -2
  42. package/dist/cjs/limel-table.cjs.entry.js +2 -2
  43. package/dist/cjs/limel-tooltip-content.cjs.entry.js +7 -4
  44. package/dist/cjs/limel-tooltip.cjs.entry.js +3 -3
  45. package/dist/cjs/loader.cjs.js +3 -3
  46. package/dist/collection/collection-manifest.json +3 -2
  47. package/dist/collection/components/chip-set/chip-set.js +2 -2
  48. package/dist/collection/components/list/list-renderer.js +161 -163
  49. package/dist/collection/components/list/list.css +0 -10
  50. package/dist/collection/components/list/list.js +77 -125
  51. package/dist/collection/components/menu/menu.js +13 -13
  52. package/dist/collection/components/menu-list/menu-list-renderer-config.js +1 -0
  53. package/dist/collection/components/menu-list/menu-list-renderer.js +158 -0
  54. package/dist/collection/components/menu-list/menu-list.css +3397 -0
  55. package/dist/collection/components/menu-list/menu-list.js +288 -0
  56. package/dist/collection/components/menu-list/menu-list.types.js +1 -0
  57. package/dist/collection/components/menu-surface/menu-surface.js +84 -87
  58. package/dist/collection/components/picker/picker.js +2 -2
  59. package/dist/collection/components/progress-flow/progress-flow-item/progress-flow-item.css +1 -1
  60. package/dist/collection/components/tooltip/tooltip-content.css +25 -13
  61. package/dist/collection/components/tooltip/tooltip-content.js +4 -3
  62. package/dist/collection/components/tooltip/tooltip.css +0 -6
  63. package/dist/collection/components/tooltip/tooltip.js +31 -5
  64. package/dist/esm/{checkbox.template-434214d5.js → checkbox.template-dbdd27c8.js} +1 -1
  65. package/dist/esm/component-2eb4e07b.js +2357 -0
  66. package/dist/esm/{index-dc421a6e.js → index-2316f345.js} +73 -64
  67. package/dist/esm/lime-elements.js +3 -3
  68. package/dist/esm/limel-badge.entry.js +2 -2
  69. package/dist/esm/limel-banner.entry.js +2 -2
  70. package/dist/esm/limel-button-group.entry.js +2 -2
  71. package/dist/esm/limel-button.entry.js +2 -2
  72. package/dist/esm/limel-checkbox.entry.js +3 -3
  73. package/dist/esm/limel-chip-set.entry.js +2 -2
  74. package/dist/esm/limel-circular-progress.entry.js +2 -2
  75. package/dist/esm/limel-code-editor.entry.js +2 -2
  76. package/dist/esm/limel-collapsible-section.entry.js +2 -2
  77. package/dist/esm/limel-config.entry.js +2 -2
  78. package/dist/esm/limel-date-picker.entry.js +2 -2
  79. package/dist/esm/limel-dialog.entry.js +2 -2
  80. package/dist/esm/limel-file.entry.js +2 -2
  81. package/dist/esm/limel-flatpickr-adapter_2.entry.js +3 -3
  82. package/dist/esm/limel-flex-container.entry.js +2 -2
  83. package/dist/esm/limel-form.entry.js +2 -2
  84. package/dist/esm/limel-grid.entry.js +2 -2
  85. package/dist/esm/limel-header.entry.js +2 -2
  86. package/dist/esm/limel-icon-button.entry.js +2 -2
  87. package/dist/esm/limel-icon.entry.js +2 -2
  88. package/dist/esm/limel-linear-progress.entry.js +2 -2
  89. package/dist/esm/limel-list_2.entry.js +492 -0
  90. package/dist/esm/limel-menu-list.entry.js +881 -0
  91. package/dist/esm/limel-menu.entry.js +6 -6
  92. package/dist/esm/limel-picker.entry.js +2 -2
  93. package/dist/esm/limel-popover-surface.entry.js +2 -2
  94. package/dist/esm/limel-popover.entry.js +2 -2
  95. package/dist/esm/limel-portal.entry.js +1931 -0
  96. package/dist/esm/limel-progress-flow-item.entry.js +3 -3
  97. package/dist/esm/limel-progress-flow.entry.js +2 -2
  98. package/dist/esm/limel-select.entry.js +2 -2
  99. package/dist/esm/limel-slider.entry.js +2 -2
  100. package/dist/esm/limel-snackbar.entry.js +2 -2
  101. package/dist/esm/limel-spinner.entry.js +2 -2
  102. package/dist/esm/limel-switch.entry.js +2 -2
  103. package/dist/esm/limel-tab-bar.entry.js +2 -2
  104. package/dist/esm/limel-tab-panel.entry.js +2 -2
  105. package/dist/esm/limel-table.entry.js +2 -2
  106. package/dist/esm/limel-tooltip-content.entry.js +7 -4
  107. package/dist/esm/limel-tooltip.entry.js +3 -3
  108. package/dist/esm/loader.js +3 -3
  109. package/dist/lime-elements/lime-elements.esm.js +1 -1
  110. package/dist/lime-elements/{p-af7c5b11.entry.js → p-03c28bee.entry.js} +2 -2
  111. package/dist/lime-elements/p-041ae00c.entry.js +1 -0
  112. package/dist/lime-elements/p-143705b1.entry.js +1 -0
  113. package/dist/lime-elements/{p-467c87f6.entry.js → p-1d7c7d5e.entry.js} +1 -1
  114. package/dist/lime-elements/p-1fb5340d.entry.js +1 -0
  115. package/dist/lime-elements/p-227d2c5a.entry.js +1 -0
  116. package/dist/lime-elements/p-31299106.js +126 -0
  117. package/dist/lime-elements/p-34c7872e.entry.js +1 -0
  118. package/dist/lime-elements/p-3525d50c.entry.js +37 -0
  119. package/dist/lime-elements/p-4932c029.entry.js +1 -0
  120. package/dist/lime-elements/p-4b5af81b.entry.js +1 -0
  121. package/dist/lime-elements/p-510bb5a4.entry.js +1 -0
  122. package/dist/lime-elements/p-590ef65e.entry.js +1 -0
  123. package/dist/lime-elements/p-64549ba6.entry.js +37 -0
  124. package/dist/lime-elements/p-692f31f1.entry.js +16 -0
  125. package/dist/lime-elements/p-7476efe0.entry.js +1 -0
  126. package/dist/lime-elements/{p-c636bfcf.entry.js → p-85094bfc.entry.js} +2 -2
  127. package/dist/lime-elements/p-89b5a983.js +1 -0
  128. package/dist/lime-elements/p-8d8bd2ab.entry.js +73 -0
  129. package/dist/lime-elements/p-90f3e17c.entry.js +37 -0
  130. package/dist/lime-elements/{p-fabb836f.js → p-92146da6.js} +1 -1
  131. package/dist/lime-elements/p-9d362dd5.entry.js +1 -0
  132. package/dist/lime-elements/{p-90b2c0a2.entry.js → p-a1153d2a.entry.js} +1 -1
  133. package/dist/lime-elements/{p-5577f962.entry.js → p-a3dadae7.entry.js} +2 -2
  134. package/dist/lime-elements/p-b386bfeb.entry.js +1 -0
  135. package/dist/lime-elements/p-b5d6abc3.entry.js +126 -0
  136. package/dist/lime-elements/p-bbc1bb01.entry.js +1 -0
  137. package/dist/lime-elements/p-be56ffab.entry.js +1 -0
  138. package/dist/lime-elements/p-c35874db.entry.js +1 -0
  139. package/dist/lime-elements/p-c8c8a946.entry.js +59 -0
  140. package/dist/lime-elements/p-d070f0e7.entry.js +1 -0
  141. package/dist/lime-elements/p-d2c74396.entry.js +1 -0
  142. package/dist/lime-elements/{p-67c48f98.entry.js → p-d97f8f04.entry.js} +1 -1
  143. package/dist/lime-elements/p-dcad1b31.entry.js +82 -0
  144. package/dist/lime-elements/p-de017026.entry.js +1 -0
  145. package/dist/lime-elements/p-e332bcf4.entry.js +1 -0
  146. package/dist/lime-elements/p-e5738ec6.entry.js +1 -0
  147. package/dist/lime-elements/p-e881e98d.entry.js +1 -0
  148. package/dist/lime-elements/{p-2476f7bb.entry.js → p-f079f1fd.entry.js} +2 -2
  149. package/dist/lime-elements/p-f2df64ec.entry.js +1 -0
  150. package/dist/lime-elements/p-f4495f59.entry.js +1 -0
  151. package/dist/lime-elements/p-fc30b8e3.entry.js +1 -0
  152. package/dist/lime-elements/{p-61ecc7f1.entry.js → p-ff0217b3.entry.js} +2 -2
  153. package/dist/loader/index.d.ts +0 -1
  154. package/dist/types/components/list/list-item.types.d.ts +2 -1
  155. package/dist/types/components/list/list-renderer-config.d.ts +0 -1
  156. package/dist/types/components/list/list-renderer.d.ts +0 -1
  157. package/dist/types/components/list/list.d.ts +0 -7
  158. package/dist/types/components/list/list.types.d.ts +1 -1
  159. package/dist/types/components/menu/menu.d.ts +2 -3
  160. package/dist/types/components/menu/menu.types.d.ts +35 -3
  161. package/dist/types/components/menu-list/menu-list-renderer-config.d.ts +8 -0
  162. package/dist/types/components/menu-list/menu-list-renderer.d.ts +49 -0
  163. package/dist/types/components/menu-list/menu-list.d.ts +59 -0
  164. package/dist/types/components/menu-list/menu-list.types.d.ts +6 -0
  165. package/dist/types/components/menu-surface/menu-surface.d.ts +0 -1
  166. package/dist/types/components/tooltip/tooltip-content.d.ts +1 -1
  167. package/dist/types/components/tooltip/tooltip.d.ts +31 -5
  168. package/dist/types/components.d.ts +66 -5
  169. package/dist/types/interface.d.ts +1 -0
  170. package/package.json +3 -2
  171. package/dist/cjs/limel-list_3.cjs.entry.js +0 -5418
  172. package/dist/esm/limel-list_3.entry.js +0 -5412
  173. package/dist/lime-elements/p-034f336b.entry.js +0 -126
  174. package/dist/lime-elements/p-136230d6.entry.js +0 -1
  175. package/dist/lime-elements/p-16c336e8.entry.js +0 -59
  176. package/dist/lime-elements/p-191f05bc.entry.js +0 -1
  177. package/dist/lime-elements/p-1a3a9bfd.entry.js +0 -1
  178. package/dist/lime-elements/p-231f62ba.entry.js +0 -1
  179. package/dist/lime-elements/p-24c128ec.entry.js +0 -37
  180. package/dist/lime-elements/p-30c4b32a.entry.js +0 -1
  181. package/dist/lime-elements/p-3a21fa33.entry.js +0 -37
  182. package/dist/lime-elements/p-3df01502.entry.js +0 -1
  183. package/dist/lime-elements/p-63e4f918.entry.js +0 -1
  184. package/dist/lime-elements/p-6d9f679d.entry.js +0 -1
  185. package/dist/lime-elements/p-6e3b6e69.entry.js +0 -1
  186. package/dist/lime-elements/p-79541c2b.entry.js +0 -73
  187. package/dist/lime-elements/p-7be3a593.entry.js +0 -1
  188. package/dist/lime-elements/p-7c6f6b80.entry.js +0 -1
  189. package/dist/lime-elements/p-7dd9c41d.entry.js +0 -16
  190. package/dist/lime-elements/p-9b79dfe7.js +0 -1
  191. package/dist/lime-elements/p-a6a7dd00.entry.js +0 -1
  192. package/dist/lime-elements/p-b0b18dfc.entry.js +0 -1
  193. package/dist/lime-elements/p-b88e7350.entry.js +0 -1
  194. package/dist/lime-elements/p-bd805195.entry.js +0 -1
  195. package/dist/lime-elements/p-bde1749a.entry.js +0 -1
  196. package/dist/lime-elements/p-c45238b6.entry.js +0 -1
  197. package/dist/lime-elements/p-c53695a3.entry.js +0 -37
  198. package/dist/lime-elements/p-dc5b3f45.entry.js +0 -1
  199. package/dist/lime-elements/p-e078c459.entry.js +0 -177
  200. package/dist/lime-elements/p-e9b4bdac.entry.js +0 -1
  201. package/dist/lime-elements/p-eb81fc35.entry.js +0 -1
  202. package/dist/lime-elements/p-f94cbe50.entry.js +0 -1
  203. package/dist/lime-elements/p-fa880bd6.entry.js +0 -1
@@ -24,6 +24,7 @@
24
24
  "./components/linear-progress/linear-progress.js",
25
25
  "./components/list/list.js",
26
26
  "./components/menu/menu.js",
27
+ "./components/menu-list/menu-list.js",
27
28
  "./components/menu-surface/menu-surface.js",
28
29
  "./components/picker/picker.js",
29
30
  "./components/popover/popover.js",
@@ -44,8 +45,8 @@
44
45
  ],
45
46
  "compiler": {
46
47
  "name": "@stencil/core",
47
- "version": "2.8.1",
48
- "typescriptVersion": "4.2.3"
48
+ "version": "2.10.0",
49
+ "typescriptVersion": "4.3.5"
49
50
  },
50
51
  "collections": [],
51
52
  "bundles": []
@@ -778,8 +778,8 @@ export class ChipSet {
778
778
  "signature": "(emptyInput?: boolean) => Promise<void>",
779
779
  "parameters": [{
780
780
  "tags": [{
781
- "text": "emptyInput if `true`, any text in the input is discarded",
782
- "name": "param"
781
+ "name": "param",
782
+ "text": "emptyInput if `true`, any text in the input is discarded"
783
783
  }],
784
784
  "text": "if `true`, any text in the input is discarded"
785
785
  }],
@@ -7,8 +7,164 @@ export class ListRenderer {
7
7
  isOpen: true,
8
8
  badgeIcons: false,
9
9
  };
10
- this.renderListItem = this.renderListItem.bind(this);
11
- this.renderDivider = this.renderDivider.bind(this);
10
+ /**
11
+ * Determine which ListItem should have the `tab-index` attribute set,
12
+ * and return the index at which that ListItem is located in `items`.
13
+ * Returns `undefined` if no item should have the attribute set.
14
+ * See https://github.com/material-components/material-components-web/tree/e66a43a75fef4f9179e24856649518e15e279a04/packages/mdc-list#accessibility
15
+ *
16
+ * @param {Array<ListItem | ListSeparator | MenuItems>} items the items of the list, including any `ListSeparator`:s
17
+ * @returns {number} the index as per the description
18
+ */
19
+ this.getIndexForWhichToApplyTabIndex = (items) => {
20
+ let result;
21
+ for (let i = 0, max = items.length; i < max; i += 1) {
22
+ if ('separator' in items[i]) {
23
+ // Ignore ListSeparator
24
+ }
25
+ else {
26
+ const item = items[i];
27
+ if (item.selected) {
28
+ result = i;
29
+ break;
30
+ }
31
+ if (result === undefined && !item.disabled) {
32
+ result = i;
33
+ // Do NOT break, as any later item with
34
+ // `selected=true` should get the tab-index instead!
35
+ }
36
+ }
37
+ }
38
+ return result;
39
+ };
40
+ /**
41
+ * Render a single list item
42
+ *
43
+ * @param {ListItem | ListSeparator | MenuItems} item the item to render
44
+ * @param {number} index the index the item had in the `items` array
45
+ * @returns {HTMLElement} the list item
46
+ */
47
+ this.renderListItem = (item, index) => {
48
+ if ('separator' in item) {
49
+ return h("li", { class: "mdc-deprecated-list-divider", role: "separator" });
50
+ }
51
+ if (['radio', 'checkbox'].includes(this.config.type)) {
52
+ return this.renderVariantListItem(this.config, item, index);
53
+ }
54
+ const classNames = {
55
+ 'mdc-deprecated-list-item': true,
56
+ 'mdc-deprecated-list-item--disabled': item.disabled,
57
+ 'mdc-deprecated-list-item--selected': item.selected,
58
+ };
59
+ const attributes = {};
60
+ if (index === this.applyTabIndexToItemAtIndex) {
61
+ attributes.tabindex = '0';
62
+ }
63
+ return (h("li", Object.assign({ class: classNames, "aria-disabled": item.disabled ? 'true' : 'false', "aria-selected": item.selected ? 'true' : 'false', "data-index": index }, attributes),
64
+ item.icon ? this.renderIcon(this.config, item) : null,
65
+ this.renderText(item),
66
+ this.twoLines && this.avatarList ? this.renderDivider() : null,
67
+ this.renderActionMenu(item.actions)));
68
+ };
69
+ /**
70
+ * Render the text of the list item
71
+ *
72
+ * @param {ListItem | MenuItem} item the list item
73
+ * @returns {HTMLElement | string} the text for the list item
74
+ */
75
+ this.renderText = (item) => {
76
+ if (this.isSimpleItem(item)) {
77
+ return (h("span", { class: "mdc-deprecated-list-item__text" }, item.text));
78
+ }
79
+ return (h("div", { class: "mdc-deprecated-list-item__text" },
80
+ h("div", { class: "mdc-deprecated-list-item__primary-command-text" },
81
+ h("div", { class: "mdc-deprecated-list-item__primary-text" }, item.text),
82
+ this.renderCommandText(item)),
83
+ h("div", { class: "mdc-deprecated-list-item__secondary-text" }, item.secondaryText)));
84
+ };
85
+ this.renderCommandText = (item) => {
86
+ if (!('commandText' in item)) {
87
+ return;
88
+ }
89
+ return (h("div", { class: "mdc-deprecated-list-item__command-text" }, item.commandText));
90
+ };
91
+ this.isSimpleItem = (item) => {
92
+ if ('commandText' in item) {
93
+ return false;
94
+ }
95
+ if ('secondaryText' in item) {
96
+ return false;
97
+ }
98
+ return true;
99
+ };
100
+ /**
101
+ * Render an icon for a list item
102
+ *
103
+ * @param {ListRendererConfig} config the config object, passed on from the `renderListItem` function
104
+ * @param {ListItem} item the list item
105
+ * @returns {HTMLElement} the icon element
106
+ */
107
+ this.renderIcon = (config, item) => {
108
+ const style = {};
109
+ if (item.iconColor) {
110
+ if (config.badgeIcons) {
111
+ style['--icon-background-color'] = item.iconColor;
112
+ }
113
+ else {
114
+ style.color = item.iconColor;
115
+ }
116
+ }
117
+ return (h("limel-icon", { badge: config.badgeIcons, class: "mdc-deprecated-list-item__graphic", name: item.icon, style: style, size: config.iconSize }));
118
+ };
119
+ this.renderDivider = () => {
120
+ const classes = {
121
+ 'mdc-deprecated-list-divider': true,
122
+ 'mdc-deprecated-list-divider--inset': true,
123
+ };
124
+ if (this.config.iconSize) {
125
+ classes[this.config.iconSize] = true;
126
+ }
127
+ return h("hr", { class: classes });
128
+ };
129
+ this.renderActionMenu = (actions) => {
130
+ if (!actions || actions.length === 0) {
131
+ return;
132
+ }
133
+ return (h("limel-menu", { class: "mdc-deprecated-list-item__meta", items: actions, openDirection: "left" },
134
+ h("limel-icon", { slot: "trigger", name: "menu_2", size: "small" })));
135
+ };
136
+ this.renderVariantListItem = (config, item, index) => {
137
+ let itemTemplate;
138
+ if (config.type === 'radio') {
139
+ itemTemplate = (h(RadioButtonTemplate, { id: `c_${index}`, checked: item.selected, disabled: item.disabled }));
140
+ }
141
+ else if (config.type === 'checkbox') {
142
+ itemTemplate = (h(CheckboxTemplate, { id: `c_${index}`, checked: item.selected, disabled: item.disabled }));
143
+ }
144
+ const classNames = {
145
+ 'mdc-deprecated-list-item': true,
146
+ 'mdc-deprecated-list-item--disabled': item.disabled,
147
+ 'mdc-deprecated-list-item__text': !item.secondaryText,
148
+ };
149
+ const attributes = {};
150
+ if (index === this.applyTabIndexToItemAtIndex) {
151
+ attributes.tabindex = '0';
152
+ }
153
+ return (h("li", Object.assign({ class: classNames, role: config.type, "aria-checked": item.selected ? 'true' : 'false', "aria-disabled": item.disabled ? 'true' : 'false', "data-index": index }, attributes), this.renderVariantListItemContent(config, item, itemTemplate)));
154
+ };
155
+ this.renderVariantListItemContent = (config, item, itemTemplate) => {
156
+ if (this.hasIcons) {
157
+ return [
158
+ item.icon ? this.renderIcon(config, item) : null,
159
+ this.renderText(item),
160
+ h("div", { class: "mdc-deprecated-list-item__meta" }, itemTemplate),
161
+ ];
162
+ }
163
+ return [
164
+ h("div", { class: "mdc-deprecated-list-item__graphic" }, itemTemplate),
165
+ this.renderText(item),
166
+ ];
167
+ };
12
168
  }
13
169
  render(items, config = {}) {
14
170
  items = items || [];
@@ -23,7 +179,7 @@ export class ListRenderer {
23
179
  return 'icon' in item && !!item.icon;
24
180
  });
25
181
  this.avatarList = this.config.badgeIcons && this.hasIcons;
26
- const selectableListTypes = ['selectable', 'radio', 'checkbox', 'menu'];
182
+ const selectableListTypes = ['selectable', 'radio', 'checkbox'];
27
183
  let role;
28
184
  switch (this.config.type) {
29
185
  case 'checkbox':
@@ -33,7 +189,7 @@ export class ListRenderer {
33
189
  role = 'radiogroup';
34
190
  break;
35
191
  default:
36
- role = this.config.type === 'menu' ? 'menu' : 'listbox';
192
+ role = 'listbox';
37
193
  }
38
194
  this.applyTabIndexToItemAtIndex =
39
195
  this.getIndexForWhichToApplyTabIndex(items);
@@ -46,164 +202,6 @@ export class ListRenderer {
46
202
  this.commandKey &&
47
203
  ['small', 'x-small'].includes(this.config.iconSize),
48
204
  };
49
- return (h("ul", { class: classNames, "aria-hidden": (this.config.type === 'menu').toString(), role: role, "aria-orientation": "vertical" }, items.map(this.renderListItem)));
50
- }
51
- /**
52
- * Determine which ListItem should have the `tab-index` attribute set,
53
- * and return the index at which that ListItem is located in `items`.
54
- * Returns `undefined` if no item should have the attribute set.
55
- * See https://github.com/material-components/material-components-web/tree/e66a43a75fef4f9179e24856649518e15e279a04/packages/mdc-list#accessibility
56
- *
57
- * @param {Array<ListItem | ListSeparator | MenuItems>} items the items of the list, including any `ListSeparator`:s
58
- * @returns {number} the index as per the description
59
- */
60
- getIndexForWhichToApplyTabIndex(items) {
61
- let result;
62
- for (let i = 0, max = items.length; i < max; i += 1) {
63
- if ('separator' in items[i]) {
64
- // Ignore ListSeparator
65
- }
66
- else {
67
- const item = items[i];
68
- if (item.selected) {
69
- result = i;
70
- break;
71
- }
72
- if (result === undefined && !item.disabled) {
73
- result = i;
74
- // Do NOT break, as any later item with
75
- // `selected=true` should get the tab-index instead!
76
- }
77
- }
78
- }
79
- return result;
80
- }
81
- /**
82
- * Render a single list item
83
- *
84
- * @param {ListItem | ListSeparator | MenuItems} item the item to render
85
- * @param {number} index the index the item had in the `items` array
86
- * @returns {HTMLElement} the list item
87
- */
88
- renderListItem(item, index) {
89
- if ('separator' in item) {
90
- return h("li", { class: "mdc-deprecated-list-divider", role: "separator" });
91
- }
92
- if (['radio', 'checkbox'].includes(this.config.type)) {
93
- return this.renderVariantListItem(this.config, item, index);
94
- }
95
- const classNames = {
96
- 'mdc-deprecated-list-item': true,
97
- 'mdc-deprecated-list-item--disabled': item.disabled,
98
- 'mdc-deprecated-list-item--selected': item.selected,
99
- };
100
- const attributes = {};
101
- if (index === this.applyTabIndexToItemAtIndex) {
102
- attributes.tabindex = '0';
103
- }
104
- return (h("li", Object.assign({ class: classNames, role: this.config.type === 'menu' ? 'menuitem' : '', "aria-disabled": item.disabled ? 'true' : 'false', "aria-selected": item.selected ? 'true' : 'false', "data-index": index }, attributes),
105
- item.icon ? this.renderIcon(this.config, item) : null,
106
- this.renderText(item),
107
- this.twoLines && this.avatarList ? this.renderDivider() : null,
108
- this.renderActionMenu(item.actions)));
109
- }
110
- /**
111
- * Render the text of the list item
112
- *
113
- * @param {ListItem | MenuItem} item the list item
114
- * @returns {HTMLElement | string} the text for the list item
115
- */
116
- renderText(item) {
117
- if (this.isSimpleItem(item)) {
118
- return (h("span", { class: "mdc-deprecated-list-item__text" }, item.text));
119
- }
120
- return (h("div", { class: "mdc-deprecated-list-item__text" },
121
- h("div", { class: "mdc-deprecated-list-item__primary-command-text" },
122
- h("div", { class: "mdc-deprecated-list-item__primary-text" }, item.text),
123
- this.renderCommandText(item)),
124
- h("div", { class: "mdc-deprecated-list-item__secondary-text" }, item.secondaryText)));
125
- }
126
- renderCommandText(item) {
127
- if (!('commandText' in item)) {
128
- return;
129
- }
130
- return (h("div", { class: "mdc-deprecated-list-item__command-text" }, item.commandText));
131
- }
132
- isSimpleItem(item) {
133
- if ('commandText' in item) {
134
- return false;
135
- }
136
- if ('secondaryText' in item) {
137
- return false;
138
- }
139
- return true;
140
- }
141
- /**
142
- * Render an icon for a list item
143
- *
144
- * @param {ListRendererConfig} config the config object, passed on from the `renderListItem` function
145
- * @param {ListItem} item the list item
146
- * @returns {HTMLElement} the icon element
147
- */
148
- renderIcon(config, item) {
149
- const style = {};
150
- if (item.iconColor) {
151
- if (config.badgeIcons) {
152
- style['--icon-background-color'] = item.iconColor;
153
- }
154
- else {
155
- style.color = item.iconColor;
156
- }
157
- }
158
- return (h("limel-icon", { badge: config.badgeIcons, class: "mdc-deprecated-list-item__graphic", name: item.icon, style: style, size: config.iconSize }));
159
- }
160
- renderDivider() {
161
- const classes = {
162
- 'mdc-deprecated-list-divider': true,
163
- 'mdc-deprecated-list-divider--inset': true,
164
- };
165
- if (this.config.iconSize) {
166
- classes[this.config.iconSize] = true;
167
- }
168
- return h("hr", { class: classes });
169
- }
170
- renderActionMenu(actions) {
171
- if (!actions || actions.length === 0) {
172
- return;
173
- }
174
- return (h("limel-menu", { class: "mdc-deprecated-list-item__meta", items: actions, openDirection: "left" },
175
- h("limel-icon", { slot: "trigger", name: "menu_2", size: "small" })));
176
- }
177
- renderVariantListItem(config, item, index) {
178
- let itemTemplate;
179
- if (config.type === 'radio') {
180
- itemTemplate = (h(RadioButtonTemplate, { id: `c_${index}`, checked: item.selected, disabled: item.disabled }));
181
- }
182
- else if (config.type === 'checkbox') {
183
- itemTemplate = (h(CheckboxTemplate, { id: `c_${index}`, checked: item.selected, disabled: item.disabled }));
184
- }
185
- const classNames = {
186
- 'mdc-deprecated-list-item': true,
187
- 'mdc-deprecated-list-item--disabled': item.disabled,
188
- 'mdc-deprecated-list-item__text': !item.secondaryText,
189
- };
190
- const attributes = {};
191
- if (index === this.applyTabIndexToItemAtIndex) {
192
- attributes.tabindex = '0';
193
- }
194
- return (h("li", Object.assign({ class: classNames, role: config.type, "aria-checked": item.selected ? 'true' : 'false', "aria-disabled": item.disabled ? 'true' : 'false', "data-index": index }, attributes), this.renderVariantListItemContent(config, item, itemTemplate)));
195
- }
196
- renderVariantListItemContent(config, item, itemTemplate) {
197
- if (this.hasIcons) {
198
- return [
199
- item.icon ? this.renderIcon(config, item) : null,
200
- this.renderText(item),
201
- h("div", { class: "mdc-deprecated-list-item__meta" }, itemTemplate),
202
- ];
203
- }
204
- return [
205
- h("div", { class: "mdc-deprecated-list-item__graphic" }, itemTemplate),
206
- this.renderText(item),
207
- ];
205
+ return (h("ul", { class: classNames, role: role, "aria-orientation": "vertical" }, items.map(this.renderListItem)));
208
206
  }
209
207
  }
@@ -3052,10 +3052,6 @@ a.mdc-list-item {
3052
3052
  pointer-events: none;
3053
3053
  }
3054
3054
 
3055
- .mdc-menu {
3056
- max-height: 70vh;
3057
- }
3058
-
3059
3055
  .mdc-deprecated-list {
3060
3056
  --mdc-theme-text-icon-on-background: var(
3061
3057
  --icon-color,
@@ -3123,12 +3119,6 @@ a.mdc-list-item {
3123
3119
  .mdc-deprecated-list.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item:last-child hr.mdc-deprecated-list-divider {
3124
3120
  display: none;
3125
3121
  }
3126
- .mdc-deprecated-list .mdc-deprecated-list-item[role=menuitem] {
3127
- font-size: 0.8125rem;
3128
- }
3129
- .mdc-deprecated-list .mdc-deprecated-list-item[role=menuitem] .mdc-deprecated-list-item__graphic {
3130
- margin-right: 0.875rem;
3131
- }
3132
3122
  .mdc-deprecated-list.mdc-deprecated-list--two-line .mdc-deprecated-list-item__text {
3133
3123
  padding: 0.5rem 0;
3134
3124
  }
@@ -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.handleAction = this.handleAction.bind(this);
41
- this.handleMenuSelect = this.handleMenuSelect.bind(this);
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\" | \"menu\" | \"radio\" | \"selectable\"",
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.\n`menu`: menu list with single 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