@limetech/lime-elements 37.1.0-next.66 → 37.1.0-next.68

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 (81) hide show
  1. package/dist/cjs/{component-9c3fa668.js → component-66df95e7.js} +935 -12
  2. package/dist/cjs/component-66df95e7.js.map +1 -0
  3. package/dist/cjs/index.es-75b5e7c4.js +222 -0
  4. package/dist/cjs/index.es-75b5e7c4.js.map +1 -0
  5. package/dist/cjs/lime-elements.cjs.js +1 -1
  6. package/dist/cjs/limel-breadcrumbs_3.cjs.entry.js +147 -28
  7. package/dist/cjs/limel-breadcrumbs_3.cjs.entry.js.map +1 -1
  8. package/dist/cjs/{limel-list.cjs.entry.js → limel-input-field_3.cjs.entry.js} +820 -4
  9. package/dist/cjs/limel-input-field_3.cjs.entry.js.map +1 -0
  10. package/dist/cjs/limel-picker.cjs.entry.js +2 -218
  11. package/dist/cjs/limel-picker.cjs.entry.js.map +1 -1
  12. package/dist/cjs/limel-select.cjs.entry.js +8 -0
  13. package/dist/cjs/limel-select.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/components/menu/menu.js +178 -16
  16. package/dist/collection/components/menu/menu.js.map +1 -1
  17. package/dist/collection/components/menu/menu.types.js.map +1 -1
  18. package/dist/collection/components/select/select.template.js +8 -0
  19. package/dist/collection/components/select/select.template.js.map +1 -1
  20. package/dist/esm/{component-0be247ac.js → component-fffa3419.js} +934 -13
  21. package/dist/esm/component-fffa3419.js.map +1 -0
  22. package/dist/esm/index.es-61c13ecf.js +220 -0
  23. package/dist/esm/index.es-61c13ecf.js.map +1 -0
  24. package/dist/esm/lime-elements.js +1 -1
  25. package/dist/esm/limel-breadcrumbs_3.entry.js +137 -18
  26. package/dist/esm/limel-breadcrumbs_3.entry.js.map +1 -1
  27. package/dist/esm/{limel-list.entry.js → limel-input-field_3.entry.js} +818 -4
  28. package/dist/esm/limel-input-field_3.entry.js.map +1 -0
  29. package/dist/esm/limel-picker.entry.js +1 -217
  30. package/dist/esm/limel-picker.entry.js.map +1 -1
  31. package/dist/esm/limel-select.entry.js +8 -0
  32. package/dist/esm/limel-select.entry.js.map +1 -1
  33. package/dist/esm/loader.js +1 -1
  34. package/dist/lime-elements/lime-elements.esm.js +1 -1
  35. package/dist/lime-elements/lime-elements.esm.js.map +1 -1
  36. package/dist/lime-elements/p-0bbfc036.entry.js +82 -0
  37. package/dist/lime-elements/{p-4db3e907.entry.js.map → p-0bbfc036.entry.js.map} +1 -1
  38. package/dist/lime-elements/p-78a442a0.entry.js +2 -0
  39. package/dist/lime-elements/p-78a442a0.entry.js.map +1 -0
  40. package/dist/lime-elements/p-97107e34.js +16 -0
  41. package/dist/lime-elements/p-97107e34.js.map +1 -0
  42. package/dist/lime-elements/{p-2ce8168b.entry.js → p-ade5366a.entry.js} +6 -6
  43. package/dist/lime-elements/p-ade5366a.entry.js.map +1 -0
  44. package/dist/lime-elements/p-dfba92de.js +206 -0
  45. package/dist/lime-elements/p-dfba92de.js.map +1 -0
  46. package/dist/lime-elements/p-dfc927a3.entry.js +2 -0
  47. package/dist/lime-elements/p-dfc927a3.entry.js.map +1 -0
  48. package/dist/types/components/menu/menu.d.ts +27 -7
  49. package/dist/types/components/menu/menu.types.d.ts +8 -0
  50. package/dist/types/components.d.ts +22 -2
  51. package/package.json +2 -2
  52. package/dist/cjs/component-9c3fa668.js.map +0 -1
  53. package/dist/cjs/component-a0124759.js +0 -929
  54. package/dist/cjs/component-a0124759.js.map +0 -1
  55. package/dist/cjs/limel-input-field.cjs.entry.js +0 -707
  56. package/dist/cjs/limel-input-field.cjs.entry.js.map +0 -1
  57. package/dist/cjs/limel-list.cjs.entry.js.map +0 -1
  58. package/dist/cjs/limel-menu-surface.cjs.entry.js +0 -130
  59. package/dist/cjs/limel-menu-surface.cjs.entry.js.map +0 -1
  60. package/dist/esm/component-0be247ac.js.map +0 -1
  61. package/dist/esm/component-6d079abe.js +0 -926
  62. package/dist/esm/component-6d079abe.js.map +0 -1
  63. package/dist/esm/limel-input-field.entry.js +0 -703
  64. package/dist/esm/limel-input-field.entry.js.map +0 -1
  65. package/dist/esm/limel-list.entry.js.map +0 -1
  66. package/dist/esm/limel-menu-surface.entry.js +0 -126
  67. package/dist/esm/limel-menu-surface.entry.js.map +0 -1
  68. package/dist/lime-elements/p-2ce8168b.entry.js.map +0 -1
  69. package/dist/lime-elements/p-32ff1b76.entry.js +0 -2
  70. package/dist/lime-elements/p-32ff1b76.entry.js.map +0 -1
  71. package/dist/lime-elements/p-3efb6ac5.entry.js +0 -2
  72. package/dist/lime-elements/p-3efb6ac5.entry.js.map +0 -1
  73. package/dist/lime-elements/p-4db3e907.entry.js +0 -82
  74. package/dist/lime-elements/p-5dd6d677.js +0 -82
  75. package/dist/lime-elements/p-5dd6d677.js.map +0 -1
  76. package/dist/lime-elements/p-99b26036.entry.js +0 -2
  77. package/dist/lime-elements/p-99b26036.entry.js.map +0 -1
  78. package/dist/lime-elements/p-bbf317b8.entry.js +0 -16
  79. package/dist/lime-elements/p-bbf317b8.entry.js.map +0 -1
  80. package/dist/lime-elements/p-e3b16b61.js +0 -126
  81. package/dist/lime-elements/p-e3b16b61.js.map +0 -1
@@ -7,13 +7,13 @@ const makeEnterClickable = require('./make-enter-clickable-59460fd6.js');
7
7
  const randomString = require('./random-string-c8445652.js');
8
8
  const getIconProps = require('./get-icon-props-46a7e937.js');
9
9
  const keycodes = require('./keycodes-3949f425.js');
10
+ const index_es = require('./index.es-75b5e7c4.js');
10
11
  const eq = require('./eq-9a943b00.js');
11
12
  const zipObject = require('./zipObject-93a471fa.js');
12
- const component$2 = require('./component-67144c1c.js');
13
+ const component$1 = require('./component-67144c1c.js');
13
14
  const ponyfill = require('./ponyfill-98ca4766.js');
14
- const component$1 = require('./component-9c3fa668.js');
15
- const component = require('./component-a0124759.js');
16
- const component$3 = require('./component-cf490570.js');
15
+ const component = require('./component-66df95e7.js');
16
+ const component$2 = require('./component-cf490570.js');
17
17
  require('./isObject-e28b7997.js');
18
18
  require('./_assignValue-7c18d8d6.js');
19
19
  require('./_defineProperty-8f56146d.js');
@@ -103,6 +103,7 @@ Breadcrumbs.style = breadcrumbsCss;
103
103
 
104
104
  const menuCss = ":host(limel-menu){isolation:isolate;position:relative;display:inline-block;--badge-background-color:var(\n --notification-badge-background-color,\n rgb(var(--color-red-default))\n );--badge-text-color:var(\n --notification-badge-text-color,\n rgb(var(--color-white))\n )}:host([hidden]){display:none}.menu__trigger{border-color:transparent;border-width:1px;border-style:solid;background:none;color:rgb(var(--contrast-800));height:2.25rem}.menu__trigger-enabled:hover{border-color:rgb(var(--contrast-800));color:rgb(var(--contrast-1100))}.mdc-menu-surface--anchor{position:relative}limel-badge{position:absolute;top:-0.25rem;right:-0.25rem}";
105
105
 
106
+ const SEARCH_DEBOUNCE = 500;
106
107
  const Menu = class {
107
108
  constructor(hostRef) {
108
109
  index.registerInstance(this, hostRef);
@@ -141,8 +142,35 @@ const Menu = class {
141
142
  }
142
143
  this.handleSelect(event.detail.menuItem);
143
144
  };
145
+ this.renderSearchField = () => {
146
+ if (!this.searcher) {
147
+ return;
148
+ }
149
+ return (index.h("limel-input-field", { tabindex: "0", ref: this.setSearchElement, type: "search", leadingIcon: "search", style: {
150
+ padding: '0.25rem',
151
+ 'box-sizing': 'border-box',
152
+ }, value: this.searchValue, onChange: this.handleTextInput, onKeyDown: this.handleInputKeyDown }));
153
+ };
154
+ this.renderEmptyMessage = () => {
155
+ var _a;
156
+ if (this.loading ||
157
+ this.loadingSubItems ||
158
+ !this.emptyResultMessage ||
159
+ !Array.isArray(this.searchResults) ||
160
+ ((_a = this.searchResults) === null || _a === void 0 ? void 0 : _a.length)) {
161
+ return null;
162
+ }
163
+ return (index.h("p", { style: {
164
+ padding: '0 1rem',
165
+ 'text-align': 'center',
166
+ } }, this.emptyResultMessage));
167
+ };
144
168
  this.renderMenuList = () => {
169
+ var _a;
145
170
  let items = this.visibleItems;
171
+ if ((_a = this.searchResults) === null || _a === void 0 ? void 0 : _a.length) {
172
+ items = this.searchResults;
173
+ }
146
174
  if (this.loadingSubItems || this.loading) {
147
175
  items = [];
148
176
  }
@@ -153,19 +181,67 @@ const Menu = class {
153
181
  'has-grid-layout has-interactive-items': this.gridLayout,
154
182
  }, items: items, type: "menu", badgeIcons: this.badgeIcons, onSelect: this.onSelect, ref: this.setListElement, onKeyDown: this.handleMenuKeyDown }));
155
183
  };
156
- /**
157
- * Key handler for the menu list
158
- * Can go forward/back with righ/left arrow keys
159
- * @param {KeyboardEvent} event event
160
- * @returns {void}
161
- */
184
+ this.handleTextInput = async (event) => {
185
+ event.stopPropagation();
186
+ const query = event.detail;
187
+ this.searchValue = query;
188
+ if (query === '') {
189
+ this.searchResults = null;
190
+ return;
191
+ }
192
+ this.loadingSubItems = true;
193
+ const result = await this.debouncedSearch(query);
194
+ this.searchResults = result;
195
+ this.loadingSubItems = false;
196
+ };
197
+ // Key handler for the input search field
198
+ // Will change focus to the first/last item in the dropdown
199
+ // list to enable selection with the keyboard
200
+ this.handleInputKeyDown = (event) => {
201
+ const isForwardTab = (event.key === keycodes.TAB || event.keyCode === keycodes.TAB_KEY_CODE) &&
202
+ !event.altKey &&
203
+ !event.metaKey &&
204
+ !event.shiftKey;
205
+ const isUp = event.key === keycodes.ARROW_UP || event.keyCode === keycodes.ARROW_UP_KEY_CODE;
206
+ const isDown = event.key === keycodes.ARROW_DOWN || event.keyCode === keycodes.ARROW_DOWN_KEY_CODE;
207
+ if (!isForwardTab && !isUp && !isDown) {
208
+ return;
209
+ }
210
+ if (!this.list) {
211
+ return;
212
+ }
213
+ event.stopPropagation();
214
+ event.preventDefault();
215
+ if (isForwardTab || isDown) {
216
+ const listElement = this.list.shadowRoot.querySelector('.mdc-deprecated-list-item:first-child');
217
+ listElement.focus();
218
+ return;
219
+ }
220
+ if (isUp) {
221
+ const listElement = this.list.shadowRoot.querySelector('.mdc-deprecated-list-item:last-child');
222
+ listElement.focus();
223
+ }
224
+ };
225
+ // Key handler for the menu list
226
+ // Will change focus to the search field if using shift+tab
227
+ // And can go forward/back with righ/left arrow keys
162
228
  this.handleMenuKeyDown = (event) => {
229
+ var _a;
230
+ const isBackwardTab = (event.key === keycodes.TAB || event.keyCode === keycodes.TAB_KEY_CODE) &&
231
+ !event.altKey &&
232
+ !event.metaKey &&
233
+ event.shiftKey;
163
234
  const isLeft = event.key === keycodes.ARROW_LEFT || event.keyCode === keycodes.ARROW_LEFT_KEY_CODE;
164
235
  const isRight = event.key === keycodes.ARROW_RIGHT || event.keyCode === keycodes.ARROW_RIGHT_KEY_CODE;
165
- if (!isLeft && !isRight) {
236
+ if (!isBackwardTab && !isLeft && !isRight) {
166
237
  return;
167
238
  }
168
- if (!this.gridLayout) {
239
+ if (isBackwardTab) {
240
+ event.stopPropagation();
241
+ event.preventDefault();
242
+ (_a = this.searchInput) === null || _a === void 0 ? void 0 : _a.focus();
243
+ }
244
+ else if (!this.gridLayout) {
169
245
  const currentItem = this.getCurrentItem();
170
246
  event.stopPropagation();
171
247
  event.preventDefault();
@@ -177,6 +253,10 @@ const Menu = class {
177
253
  }
178
254
  }
179
255
  };
256
+ this.clearSearch = () => {
257
+ this.searchValue = '';
258
+ this.searchResults = null;
259
+ };
180
260
  this.getCurrentItem = () => {
181
261
  var _a, _b, _c;
182
262
  const activeItem = (_b = (_a = this.list) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('[role="menuitem"][tabindex="0"]');
@@ -233,6 +313,7 @@ const Menu = class {
233
313
  };
234
314
  this.handleSelect = async (menuItem, selectOnEmptyChildren = true) => {
235
315
  if (Array.isArray(menuItem === null || menuItem === void 0 ? void 0 : menuItem.items) && menuItem.items.length > 0) {
316
+ this.clearSearch();
236
317
  this.currentSubMenu = menuItem;
237
318
  this.navigateMenu.emit(menuItem);
238
319
  this.setFocus();
@@ -268,13 +349,28 @@ const Menu = class {
268
349
  };
269
350
  this.setFocus = () => {
270
351
  setTimeout(() => {
271
- const observer = new IntersectionObserver(() => {
272
- observer.unobserve(this.list);
273
- this.focusMenuItem();
274
- });
275
- observer.observe(this.list);
352
+ if (this.searchInput && this.searcher) {
353
+ const observer = new IntersectionObserver(() => {
354
+ observer.unobserve(this.searchInput);
355
+ if (this.searchInput === window.document.activeElement) {
356
+ return;
357
+ }
358
+ this.searchInput.focus();
359
+ });
360
+ observer.observe(this.searchInput);
361
+ }
362
+ else if (this.list) {
363
+ const observer = new IntersectionObserver(() => {
364
+ observer.unobserve(this.list);
365
+ this.focusMenuItem();
366
+ });
367
+ observer.observe(this.list);
368
+ }
276
369
  }, 0);
277
370
  };
371
+ this.setSearchElement = (element) => {
372
+ this.searchInput = element;
373
+ };
278
374
  this.focusMenuItem = () => {
279
375
  var _a;
280
376
  if (!this.list) {
@@ -305,10 +401,18 @@ const Menu = class {
305
401
  this.gridLayout = false;
306
402
  this.loading = false;
307
403
  this.currentSubMenu = undefined;
404
+ this.searcher = undefined;
405
+ this.emptyResultMessage = undefined;
308
406
  this.loadingSubItems = undefined;
309
407
  this.menuBreadCrumb = [];
408
+ this.searchValue = undefined;
409
+ this.searchResults = undefined;
410
+ this.createDebouncedSearcher = this.createDebouncedSearcher.bind(this);
310
411
  this.portalId = randomString.createRandomString();
311
412
  }
413
+ componentDidLoad() {
414
+ this.createDebouncedSearcher(this.searcher);
415
+ }
312
416
  componentDidRender() {
313
417
  const slotElement = this.host.shadowRoot.querySelector('slot');
314
418
  slotElement.assignedElements().forEach(this.setTriggerAttributes);
@@ -319,17 +423,25 @@ const Menu = class {
319
423
  const menuSurfaceWidth = this.getMenuSurfaceWidth(cssProperties['--menu-surface-width']);
320
424
  return (index.h("div", { class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, index.h("slot", { ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), index.h("limel-portal", { visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, index.h("limel-menu-surface", { open: this.open, onDismiss: this.onClose, style: Object.assign(Object.assign({}, cssProperties), { '--mdc-menu-min-width': menuSurfaceWidth, '--limel-menu-surface-display': 'flex', '--limel-menu-surface-flex-direction': 'column' }), class: {
321
425
  'has-grid-layout': this.gridLayout,
322
- } }, this.renderBreadcrumb(), this.renderLoader(), this.renderMenuList()))));
426
+ } }, this.renderSearchField(), this.renderBreadcrumb(), this.renderLoader(), this.renderEmptyMessage(), this.renderMenuList()))));
323
427
  }
324
428
  itemsWatcher() {
429
+ this.clearSearch();
325
430
  this.setFocus();
326
431
  }
327
432
  openWatcher(newValue) {
328
433
  if (newValue) {
329
434
  this.setFocus();
330
435
  }
436
+ else {
437
+ this.clearSearch();
438
+ }
331
439
  }
332
440
  currentSubMenuWatcher() {
441
+ if (this.searchValue) {
442
+ this.menuBreadCrumb = [];
443
+ return;
444
+ }
333
445
  const breadCrumbItems = [];
334
446
  let currentItem = this.currentSubMenu;
335
447
  while (currentItem) {
@@ -351,6 +463,12 @@ const Menu = class {
351
463
  }
352
464
  this.menuBreadCrumb = breadCrumbItems.reverse();
353
465
  }
466
+ createDebouncedSearcher(newValue) {
467
+ if (typeof newValue !== 'function') {
468
+ return;
469
+ }
470
+ this.debouncedSearch = index_es.AwesomeDebouncePromise(newValue, SEARCH_DEBOUNCE);
471
+ }
354
472
  getCssProperties() {
355
473
  const propertyNames = [
356
474
  '--menu-surface-width',
@@ -401,7 +519,8 @@ const Menu = class {
401
519
  static get watchers() { return {
402
520
  "items": ["itemsWatcher"],
403
521
  "open": ["openWatcher"],
404
- "currentSubMenu": ["currentSubMenuWatcher"]
522
+ "currentSubMenu": ["currentSubMenuWatcher"],
523
+ "searcher": ["createDebouncedSearcher"]
405
524
  }; }
406
525
  };
407
526
  Menu.style = menuCss;
@@ -659,11 +778,11 @@ var MDCMenuFoundation = /** @class */ (function (_super) {
659
778
  MDCMenuFoundation.prototype.setEnabled = function (index, isEnabled) {
660
779
  this.validatedIndex(index);
661
780
  if (isEnabled) {
662
- this.adapter.removeClassFromElementAtIndex(index, component$1.cssClasses.LIST_ITEM_DISABLED_CLASS);
781
+ this.adapter.removeClassFromElementAtIndex(index, component.cssClasses.LIST_ITEM_DISABLED_CLASS);
663
782
  this.adapter.addAttributeToElementAtIndex(index, strings.ARIA_DISABLED_ATTR, 'false');
664
783
  }
665
784
  else {
666
- this.adapter.addClassToElementAtIndex(index, component$1.cssClasses.LIST_ITEM_DISABLED_CLASS);
785
+ this.adapter.addClassToElementAtIndex(index, component.cssClasses.LIST_ITEM_DISABLED_CLASS);
667
786
  this.adapter.addAttributeToElementAtIndex(index, strings.ARIA_DISABLED_ATTR, 'true');
668
787
  }
669
788
  };
@@ -675,7 +794,7 @@ var MDCMenuFoundation = /** @class */ (function (_super) {
675
794
  }
676
795
  };
677
796
  return MDCMenuFoundation;
678
- }(component$2.MDCFoundation));
797
+ }(component$1.MDCFoundation));
679
798
 
680
799
  /**
681
800
  * @license
@@ -709,7 +828,7 @@ var MDCMenu = /** @class */ (function (_super) {
709
828
  };
710
829
  MDCMenu.prototype.initialize = function (menuSurfaceFactory, listFactory) {
711
830
  if (menuSurfaceFactory === void 0) { menuSurfaceFactory = function (el) { return new component.MDCMenuSurface(el); }; }
712
- if (listFactory === void 0) { listFactory = function (el) { return new component$1.MDCList(el); }; }
831
+ if (listFactory === void 0) { listFactory = function (el) { return new component.MDCList(el); }; }
713
832
  this.menuSurfaceFactory = menuSurfaceFactory;
714
833
  this.listFactory = listFactory;
715
834
  };
@@ -735,7 +854,7 @@ var MDCMenu = /** @class */ (function (_super) {
735
854
  };
736
855
  this.menuSurface.listen(component.MDCMenuSurfaceFoundation.strings.OPENED_EVENT, this.handleMenuSurfaceOpened);
737
856
  this.listen('keydown', this.handleKeydown);
738
- this.listen(component$1.MDCListFoundation.strings.ACTION_EVENT, this.handleItemAction);
857
+ this.listen(component.MDCListFoundation.strings.ACTION_EVENT, this.handleItemAction);
739
858
  };
740
859
  MDCMenu.prototype.destroy = function () {
741
860
  if (this.list) {
@@ -744,7 +863,7 @@ var MDCMenu = /** @class */ (function (_super) {
744
863
  this.menuSurface.destroy();
745
864
  this.menuSurface.unlisten(component.MDCMenuSurfaceFoundation.strings.OPENED_EVENT, this.handleMenuSurfaceOpened);
746
865
  this.unlisten('keydown', this.handleKeydown);
747
- this.unlisten(component$1.MDCListFoundation.strings.ACTION_EVENT, this.handleItemAction);
866
+ this.unlisten(component.MDCListFoundation.strings.ACTION_EVENT, this.handleItemAction);
748
867
  _super.prototype.destroy.call(this);
749
868
  };
750
869
  Object.defineProperty(MDCMenu.prototype, "open", {
@@ -859,7 +978,7 @@ var MDCMenu = /** @class */ (function (_super) {
859
978
  * radio lists, and an array of numbers for checkbox lists.
860
979
  */
861
980
  get: function () {
862
- return this.list ? this.list.selectedIndex : component$1.numbers.UNSET_INDEX;
981
+ return this.list ? this.list.selectedIndex : component.numbers.UNSET_INDEX;
863
982
  },
864
983
  /**
865
984
  * Sets the selected index of the list. Only applicable to select menus.
@@ -1011,7 +1130,7 @@ var MDCMenu = /** @class */ (function (_super) {
1011
1130
  return new MDCMenuFoundation(adapter);
1012
1131
  };
1013
1132
  return MDCMenu;
1014
- }(component$2.MDCComponent));
1133
+ }(component$1.MDCComponent));
1015
1134
 
1016
1135
  class MenuListRenderer {
1017
1136
  constructor() {
@@ -1204,7 +1323,7 @@ const MenuList = class {
1204
1323
  this.mdcMenu = new MDCMenu(element);
1205
1324
  this.mdcMenu.hasTypeahead = true;
1206
1325
  this.mdcMenu.wrapFocus = true;
1207
- this.mdcMenu.items.forEach((item) => new component$3.MDCRipple(item));
1326
+ this.mdcMenu.items.forEach((item) => new component$2.MDCRipple(item));
1208
1327
  };
1209
1328
  this.setupListeners = () => {
1210
1329
  if (!this.mdcMenu) {