@limetech/lime-elements 39.25.0 → 39.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +1 -1
  3. package/dist/cjs/lime-elements.cjs.js +1 -1
  4. package/dist/cjs/limel-action-bar_3.cjs.entry.js +1 -1
  5. package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
  6. package/dist/cjs/limel-callout.cjs.entry.js +1 -1
  7. package/dist/cjs/limel-chart.cjs.entry.js +1 -1
  8. package/dist/cjs/limel-chip-set.cjs.entry.js +21 -3
  9. package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
  10. package/dist/cjs/limel-code-diff.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
  12. package/dist/cjs/limel-collapsible-section.cjs.entry.js +1 -1
  13. package/dist/cjs/limel-drag-handle.cjs.entry.js +1 -1
  14. package/dist/cjs/limel-email-viewer.cjs.entry.js +1 -1
  15. package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
  16. package/dist/cjs/limel-file.cjs.entry.js +1 -1
  17. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
  18. package/dist/cjs/limel-list-item.cjs.entry.js +1 -1
  19. package/dist/cjs/limel-picker.cjs.entry.js +112 -41
  20. package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
  22. package/dist/cjs/limel-snackbar.cjs.entry.js +1 -1
  23. package/dist/cjs/limel-table.cjs.entry.js +1 -1
  24. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +1 -1
  25. package/dist/cjs/loader.cjs.js +1 -1
  26. package/dist/cjs/{translations-D4j_eojG.js → translations-BCHv7JrI.js} +16 -0
  27. package/dist/collection/components/chip-set/chip-set.js +40 -2
  28. package/dist/collection/components/picker/picker-item.types.js +1 -0
  29. package/dist/collection/components/picker/picker.js +167 -103
  30. package/dist/collection/interface.js +1 -0
  31. package/dist/collection/translations/da.js +2 -0
  32. package/dist/collection/translations/de.js +2 -0
  33. package/dist/collection/translations/en.js +2 -0
  34. package/dist/collection/translations/fi.js +2 -0
  35. package/dist/collection/translations/fr.js +2 -0
  36. package/dist/collection/translations/nl.js +2 -0
  37. package/dist/collection/translations/no.js +2 -0
  38. package/dist/collection/translations/sv.js +2 -0
  39. package/dist/esm/lime-elements.js +1 -1
  40. package/dist/esm/limel-action-bar_3.entry.js +1 -1
  41. package/dist/esm/limel-ai-avatar.entry.js +1 -1
  42. package/dist/esm/limel-callout.entry.js +1 -1
  43. package/dist/esm/limel-chart.entry.js +1 -1
  44. package/dist/esm/limel-chip-set.entry.js +21 -3
  45. package/dist/esm/limel-chip_2.entry.js +1 -1
  46. package/dist/esm/limel-code-diff.entry.js +1 -1
  47. package/dist/esm/limel-code-editor.entry.js +1 -1
  48. package/dist/esm/limel-collapsible-section.entry.js +1 -1
  49. package/dist/esm/limel-drag-handle.entry.js +1 -1
  50. package/dist/esm/limel-email-viewer.entry.js +1 -1
  51. package/dist/esm/limel-file-viewer.entry.js +1 -1
  52. package/dist/esm/limel-file.entry.js +1 -1
  53. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  54. package/dist/esm/limel-list-item.entry.js +1 -1
  55. package/dist/esm/limel-picker.entry.js +113 -42
  56. package/dist/esm/limel-profile-picture.entry.js +1 -1
  57. package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
  58. package/dist/esm/limel-snackbar.entry.js +1 -1
  59. package/dist/esm/limel-table.entry.js +1 -1
  60. package/dist/esm/limel-text-editor-link-menu.entry.js +1 -1
  61. package/dist/esm/loader.js +1 -1
  62. package/dist/esm/{translations-Dv3YcsA7.js → translations-PPDjFxtV.js} +16 -0
  63. package/dist/lime-elements/lime-elements.esm.js +1 -1
  64. package/dist/lime-elements/{p-5eadcd4a.entry.js → p-0e24eb2b.entry.js} +1 -1
  65. package/dist/lime-elements/{p-80162ba0.entry.js → p-1f0d571e.entry.js} +1 -1
  66. package/dist/lime-elements/{p-c8eabc9d.entry.js → p-25aa2667.entry.js} +1 -1
  67. package/dist/lime-elements/{p-067a13bb.entry.js → p-2eea146d.entry.js} +1 -1
  68. package/dist/lime-elements/{p-eff0a330.entry.js → p-32e893de.entry.js} +1 -1
  69. package/dist/lime-elements/{p-b1645d2d.entry.js → p-3364b078.entry.js} +1 -1
  70. package/dist/lime-elements/{p-60327283.entry.js → p-3c09f58b.entry.js} +1 -1
  71. package/dist/lime-elements/{p-01651634.entry.js → p-3c79f422.entry.js} +1 -1
  72. package/dist/lime-elements/p-4acb7438.entry.js +1 -0
  73. package/dist/lime-elements/{p-9caeca33.entry.js → p-87c1d5f0.entry.js} +1 -1
  74. package/dist/lime-elements/{p-512b2e14.entry.js → p-8b2f5ef5.entry.js} +1 -1
  75. package/dist/lime-elements/p-8dc61e1b.entry.js +1 -0
  76. package/dist/lime-elements/{p-504dcdb6.entry.js → p-9e35468c.entry.js} +1 -1
  77. package/dist/lime-elements/p-PPDjFxtV.js +1 -0
  78. package/dist/lime-elements/{p-42b9b57a.entry.js → p-a49c1c48.entry.js} +1 -1
  79. package/dist/lime-elements/{p-95ac0387.entry.js → p-abd1fde1.entry.js} +1 -1
  80. package/dist/lime-elements/{p-05d533b5.entry.js → p-cb10df74.entry.js} +1 -1
  81. package/dist/lime-elements/{p-104d0fb3.entry.js → p-cd85d670.entry.js} +1 -1
  82. package/dist/lime-elements/{p-f867b424.entry.js → p-db022b46.entry.js} +1 -1
  83. package/dist/lime-elements/{p-5cc370fe.entry.js → p-e6b2b277.entry.js} +1 -1
  84. package/dist/lime-elements/{p-e5c7cac0.entry.js → p-ea3c3dfd.entry.js} +1 -1
  85. package/dist/lime-elements/{p-7436490f.entry.js → p-eece0f01.entry.js} +1 -1
  86. package/dist/types/components/chip-set/chip-set.d.ts +16 -0
  87. package/dist/types/components/picker/picker-item.types.d.ts +28 -0
  88. package/dist/types/components/picker/picker.d.ts +38 -9
  89. package/dist/types/components/picker/searcher.types.d.ts +3 -3
  90. package/dist/types/components.d.ts +42 -12
  91. package/dist/types/interface.d.ts +1 -0
  92. package/dist/types/translations/da.d.ts +2 -0
  93. package/dist/types/translations/de.d.ts +2 -0
  94. package/dist/types/translations/en.d.ts +2 -0
  95. package/dist/types/translations/fi.d.ts +2 -0
  96. package/dist/types/translations/fr.d.ts +2 -0
  97. package/dist/types/translations/nl.d.ts +2 -0
  98. package/dist/types/translations/no.d.ts +2 -0
  99. package/dist/types/translations/sv.d.ts +2 -0
  100. package/package.json +1 -1
  101. package/dist/lime-elements/p-51734986.entry.js +0 -1
  102. package/dist/lime-elements/p-Dv3YcsA7.js +0 -1
  103. package/dist/lime-elements/p-cba2dbb6.entry.js +0 -1
@@ -1,3 +1,4 @@
1
+ import translate from "../../global/translations";
1
2
  import { h, } from "@stencil/core";
2
3
  import { isDescendant } from "../../util/dom";
3
4
  import { ARROW_DOWN, ARROW_UP, ENTER, ESCAPE, TAB } from "../../util/keycodes";
@@ -10,11 +11,13 @@ const DEFAULT_SEARCHER_MAX_RESULTS = 20;
10
11
  /**
11
12
  * @exampleComponent limel-example-picker-basic
12
13
  * @exampleComponent limel-example-picker-multiple
14
+ * @exampleComponent limel-example-picker-non-removable
13
15
  * @exampleComponent limel-example-picker-icons
14
16
  * @exampleComponent limel-example-picker-pictures
15
17
  * @exampleComponent limel-example-picker-value-as-object
16
18
  * @exampleComponent limel-example-picker-value-as-object-with-actions
17
19
  * @exampleComponent limel-example-picker-empty-suggestions
20
+ * @exampleComponent limel-example-picker-empty-result-message
18
21
  * @exampleComponent limel-example-picker-leading-icon
19
22
  * @exampleComponent limel-example-picker-static-actions
20
23
  * @exampleComponent limel-example-picker-sections
@@ -31,6 +34,12 @@ export class Picker {
31
34
  * but allow interaction with existing items.
32
35
  */
33
36
  this.readonly = false;
37
+ /**
38
+ * Defines the language for translations. Affects the labels
39
+ * rendered by the picker itself, such as the "Results matching"
40
+ * header shown above the suggestion list while the user is typing.
41
+ */
42
+ this.language = 'en';
34
43
  /**
35
44
  * True if the control requires a value
36
45
  */
@@ -111,7 +120,7 @@ export class Picker {
111
120
  return {
112
121
  id: `${valueId}`,
113
122
  text: listItem.text,
114
- removable: true,
123
+ removable: listItem.removable !== false,
115
124
  icon: name ? { name: name, color: color } : undefined,
116
125
  image: listItem.image,
117
126
  value: listItem,
@@ -123,7 +132,7 @@ export class Picker {
123
132
  this.loading = true;
124
133
  });
125
134
  const searcher = this.searcher || this.defaultSearcher;
126
- const result = (await searcher(this.textValue));
135
+ const result = await searcher(this.textValue);
127
136
  // If the search function resolves immediately,
128
137
  // the loading spinner will not be shown.
129
138
  clearTimeout(timeoutId);
@@ -145,7 +154,6 @@ export class Picker {
145
154
  };
146
155
  this.handleTextInput = this.handleTextInput.bind(this);
147
156
  this.handleInputKeyDown = this.handleInputKeyDown.bind(this);
148
- this.handleDropdownKeyDown = this.handleDropdownKeyDown.bind(this);
149
157
  this.handleInputFieldFocus = this.handleInputFieldFocus.bind(this);
150
158
  this.handleChange = this.handleChange.bind(this);
151
159
  this.handleInteract = this.handleInteract.bind(this);
@@ -189,7 +197,7 @@ export class Picker {
189
197
  props.maxItems = 1;
190
198
  }
191
199
  return [
192
- h("limel-chip-set", Object.assign({ key: '92d3884770f8e3ce3c747044ab9e6061bc595b1a', type: "input", inputType: "search", label: this.label, helperText: this.helperText, leadingIcon: this.leadingIcon, value: this.chips, disabled: this.disabled, invalid: this.invalid, delimiter: this.renderDelimiter(), readonly: this.readonly, required: this.required, searchLabel: this.searchLabel, onInput: this.handleTextInput, onKeyDown: this.handleInputKeyDown, onChange: this.handleChange, onInteract: this.handleInteract, onStartEdit: this.handleInputFieldFocus, onStopEdit: this.handleStopEditAndBlur, emptyInputOnBlur: false, clearAllButton: this.multiple && !this.chipSetEditMode }, props)),
200
+ h("limel-chip-set", Object.assign({ key: '8aaf0ce641e0c93e4f6b8066a9575de17432f973', type: "input", inputType: "search", label: this.label, helperText: this.helperText, leadingIcon: this.leadingIcon, value: this.chips, disabled: this.disabled, invalid: this.invalid, delimiter: this.renderDelimiter(), readonly: this.readonly, required: this.required, searchLabel: this.searchLabel, language: this.language, onInput: this.handleTextInput, onKeyDown: this.handleInputKeyDown, onChange: this.handleChange, onInteract: this.handleInteract, onStartEdit: this.handleInputFieldFocus, onStopEdit: this.handleStopEditAndBlur, emptyInputOnBlur: false, emptyInputOnChange: false, clearAllButton: this.multiple && !this.chipSetEditMode }, props)),
193
201
  this.renderDropdown(),
194
202
  ];
195
203
  }
@@ -258,7 +266,14 @@ export class Picker {
258
266
  return this.renderSpinner();
259
267
  }
260
268
  if (!((_a = this.items) === null || _a === void 0 ? void 0 : _a.length)) {
261
- return this.renderEmptyMessage();
269
+ // Only show "no matching results" when the user actually has
270
+ // a query in flight. Without this guard, the message would
271
+ // also render right after Esc clears the input, leaving the
272
+ // dropdown stuck in an "empty result" state.
273
+ if (this.textValue !== '') {
274
+ return this.renderEmptyMessage();
275
+ }
276
+ return;
262
277
  }
263
278
  return this.renderListResult();
264
279
  }
@@ -281,22 +296,32 @@ export class Picker {
281
296
  } }, h("limel-spinner", { limeBranded: false })));
282
297
  }
283
298
  renderEmptyMessage() {
284
- if (!this.emptyResultMessage) {
285
- return;
286
- }
299
+ const text = this.emptyResultMessage ||
300
+ translate.get('picker.no-matching-results', this.language, {
301
+ query: this.textValue,
302
+ });
287
303
  const style = {
288
304
  color: 'rgb(var(--contrast-1100))',
289
- 'text-align': 'center',
305
+ textAlign: 'center',
306
+ fontSize: 'var(--limel-theme-default-font-size)',
290
307
  margin: '0.5rem 1rem',
291
308
  };
292
- return h("p", { style: style }, this.emptyResultMessage);
309
+ return h("p", { style: style }, text);
293
310
  }
294
311
  renderListResult() {
295
312
  return (h("limel-list", { badgeIcons: this.badgeIcons, onChange: this.handleListChange, onKeyDown: this.onListKeyDown, type: "selectable", items: this.items }));
296
313
  }
297
314
  onListKeyDown(event) {
298
- const keyFound = [TAB, ESCAPE, ENTER].includes(event.key);
299
- if (keyFound) {
315
+ if (event.key === ESCAPE) {
316
+ // Stop bubble; otherwise menu-surface also emits `dismiss`
317
+ // and triggers a duplicate clear via handleCloseMenu.
318
+ event.preventDefault();
319
+ event.stopPropagation();
320
+ this.handleEscape();
321
+ this.chipSet.setFocus();
322
+ return;
323
+ }
324
+ if ([TAB, ENTER].includes(event.key)) {
300
325
  this.chipSet.setFocus();
301
326
  }
302
327
  }
@@ -343,22 +368,30 @@ export class Picker {
343
368
  * @param event - event
344
369
  */
345
370
  handleListChange(event) {
346
- var _a;
371
+ var _a, _b, _c;
347
372
  event.stopPropagation();
348
373
  if (!this.value || this.value !== event.detail) {
349
374
  let newValue = event.detail;
350
375
  if (this.multiple) {
351
- newValue = [
352
- ...this.value,
353
- event.detail,
354
- ];
376
+ const currentValue = (_a = this.value) !== null && _a !== void 0 ? _a : [];
377
+ newValue = [...currentValue, event.detail];
355
378
  }
356
379
  this.change.emit(newValue);
357
- this.items = [];
380
+ if (this.multiple) {
381
+ const remaining = this.items.filter((item) => item !== event.detail);
382
+ this.items = this.hasPickableItems(remaining) ? remaining : [];
383
+ }
384
+ else {
385
+ // Single-pick: the search session ends with the pick, so
386
+ // wipe the input. (In multi-pick we deliberately keep the
387
+ // typed query so the user can keep adding matches.)
388
+ this.items = [];
389
+ this.textValue = '';
390
+ (_b = this.chipSet) === null || _b === void 0 ? void 0 : _b.emptyInput();
391
+ }
358
392
  }
359
393
  if (this.multiple) {
360
- this.textValue = '';
361
- (_a = this.chipSet) === null || _a === void 0 ? void 0 : _a.setFocus(true);
394
+ (_c = this.chipSet) === null || _c === void 0 ? void 0 : _c.setFocus();
362
395
  }
363
396
  }
364
397
  /**
@@ -414,6 +447,13 @@ export class Picker {
414
447
  !event.shiftKey;
415
448
  const isUp = event.key === ARROW_UP;
416
449
  const isDown = event.key === ARROW_DOWN;
450
+ const isEscape = event.key === ESCAPE;
451
+ if (isEscape) {
452
+ event.preventDefault();
453
+ event.stopPropagation();
454
+ this.handleEscape();
455
+ return;
456
+ }
417
457
  if (!isForwardTab && !isUp && !isDown) {
418
458
  return;
419
459
  }
@@ -442,43 +482,76 @@ export class Picker {
442
482
  listElement.focus();
443
483
  }
444
484
  }
445
- /**
446
- * Key handler for the dropdown
447
- *
448
- * @param event - event
449
- */
450
- handleDropdownKeyDown(event) {
451
- const isEscape = event.key === ESCAPE;
452
- if (isEscape) {
453
- event.preventDefault();
454
- this.textValue = '';
455
- this.chipSet.setFocus(true);
456
- }
457
- }
458
485
  handleSearchResult(query, result) {
486
+ var _a;
459
487
  if (query === this.textValue) {
460
- this.items = result;
488
+ let nextItems = result;
461
489
  if (this.multiple) {
462
- const values = this.value;
463
- this.items = result.filter((item) => {
490
+ const values = (_a = this.value) !== null && _a !== void 0 ? _a : [];
491
+ nextItems = result.filter((item) => {
492
+ if ('separator' in item) {
493
+ return true;
494
+ }
464
495
  return !values.includes(item);
465
496
  });
466
497
  }
498
+ this.items = this.prependSearchHeader(query, nextItems);
467
499
  this.loading = false;
468
500
  }
469
501
  }
470
- handleCloseMenu() {
471
- if (this.items.length > 0) {
472
- return;
502
+ hasPickableItems(items) {
503
+ return items.some((item) => !('separator' in item));
504
+ }
505
+ prependSearchHeader(query, items) {
506
+ if (query === '') {
507
+ return items;
508
+ }
509
+ if (!this.hasPickableItems(items)) {
510
+ return items;
473
511
  }
512
+ const text = translate.get('picker.results-matching', this.language, {
513
+ query: query,
514
+ });
515
+ return [{ separator: true, text: text }, ...items];
516
+ }
517
+ handleCloseMenu() {
474
518
  this.clearInputField();
475
519
  }
476
- clearInputField() {
520
+ /**
521
+ * Shared prelude for any flow that ends the current search session:
522
+ * wipe the chip-set's visible text, reset the picker's `textValue`,
523
+ * and cancel any in-flight debounced search.
524
+ *
525
+ * Used by `clearInputField` (which then drops the dropdown
526
+ * entirely) and `resetSearchToDefault` (which re-runs the searcher
527
+ * with an empty query to repopulate the dropdown with defaults).
528
+ */
529
+ clearTextValue() {
477
530
  this.chipSet.emptyInput();
478
531
  this.textValue = '';
479
- this.handleSearchResult('', []);
480
532
  this.debouncedSearch.cancel();
481
533
  }
534
+ clearInputField() {
535
+ this.clearTextValue();
536
+ this.handleSearchResult('', []);
537
+ }
538
+ resetSearchToDefault() {
539
+ this.clearTextValue();
540
+ this.search('');
541
+ }
542
+ /**
543
+ * Two-stage Esc: first press clears the typed query but keeps the
544
+ * dropdown open showing the default suggestions; a second press
545
+ * (with the query already empty) closes the dropdown.
546
+ */
547
+ handleEscape() {
548
+ if (this.textValue === '') {
549
+ this.clearInputField();
550
+ }
551
+ else {
552
+ this.resetSearchToDefault();
553
+ }
554
+ }
482
555
  static get is() { return "limel-picker"; }
483
556
  static get encapsulation() { return "shadow"; }
484
557
  static get delegatesFocus() { return true; }
@@ -629,13 +702,40 @@ export class Picker {
629
702
  "optional": false,
630
703
  "docs": {
631
704
  "tags": [],
632
- "text": "A message to display when the search returned an empty result"
705
+ "text": "A message to display when the search returned an empty result.\n\nIf unset (or set to an empty string), the picker shows a\ndefault translated message (`No results matching \"X\"` in\nEnglish, where `X` is the current query) chosen by the\n`language` prop. Set this to override the default with custom\ntext \u2014 for example, when the picker's domain calls for more\nspecific wording like \"No matching participants found\"."
633
706
  },
634
707
  "getter": false,
635
708
  "setter": false,
636
709
  "reflect": false,
637
710
  "attribute": "empty-result-message"
638
711
  },
712
+ "language": {
713
+ "type": "string",
714
+ "mutable": false,
715
+ "complexType": {
716
+ "original": "Languages",
717
+ "resolved": "\"da\" | \"de\" | \"en\" | \"fi\" | \"fr\" | \"nb\" | \"nl\" | \"no\" | \"sv\"",
718
+ "references": {
719
+ "Languages": {
720
+ "location": "import",
721
+ "path": "../date-picker/date.types",
722
+ "id": "src/components/date-picker/date.types.ts::Languages",
723
+ "referenceLocation": "Languages"
724
+ }
725
+ }
726
+ },
727
+ "required": false,
728
+ "optional": false,
729
+ "docs": {
730
+ "tags": [],
731
+ "text": "Defines the language for translations. Affects the labels\nrendered by the picker itself, such as the \"Results matching\"\nheader shown above the suggestion list while the user is typing."
732
+ },
733
+ "getter": false,
734
+ "setter": false,
735
+ "reflect": false,
736
+ "attribute": "language",
737
+ "defaultValue": "'en'"
738
+ },
639
739
  "required": {
640
740
  "type": "boolean",
641
741
  "mutable": false,
@@ -680,24 +780,14 @@ export class Picker {
680
780
  "type": "unknown",
681
781
  "mutable": false,
682
782
  "complexType": {
683
- "original": "ListItem<PickerValue> | Array<ListItem<PickerValue>>",
684
- "resolved": "ListItem<PickerValue> | ListItem<PickerValue>[]",
783
+ "original": "PickerItem | PickerItem[]",
784
+ "resolved": "PickerItem<PickerValue> | PickerItem<PickerValue>[]",
685
785
  "references": {
686
- "ListItem": {
786
+ "PickerItem": {
687
787
  "location": "import",
688
- "path": "../list-item/list-item.types",
689
- "id": "src/components/list-item/list-item.types.ts::ListItem",
690
- "referenceLocation": "ListItem"
691
- },
692
- "PickerValue": {
693
- "location": "import",
694
- "path": "./value.types",
695
- "id": "src/components/picker/value.types.ts::PickerValue",
696
- "referenceLocation": "PickerValue"
697
- },
698
- "Array": {
699
- "location": "global",
700
- "id": "global::Array"
788
+ "path": "../picker/picker-item.types",
789
+ "id": "src/components/picker/picker-item.types.ts::PickerItem",
790
+ "referenceLocation": "PickerItem"
701
791
  }
702
792
  }
703
793
  },
@@ -715,7 +805,7 @@ export class Picker {
715
805
  "mutable": false,
716
806
  "complexType": {
717
807
  "original": "Searcher",
718
- "resolved": "(query: string) => Promise<(ListSeparator | ListItem<any>)[]>",
808
+ "resolved": "(query: string) => Promise<(ListSeparator | PickerItem<PickerValue>)[]>",
719
809
  "references": {
720
810
  "Searcher": {
721
811
  "location": "import",
@@ -738,24 +828,14 @@ export class Picker {
738
828
  "type": "unknown",
739
829
  "mutable": false,
740
830
  "complexType": {
741
- "original": "Array<ListItem<PickerValue>>",
742
- "resolved": "ListItem<PickerValue>[]",
831
+ "original": "PickerItem[]",
832
+ "resolved": "PickerItem<PickerValue>[]",
743
833
  "references": {
744
- "Array": {
745
- "location": "global",
746
- "id": "global::Array"
747
- },
748
- "ListItem": {
834
+ "PickerItem": {
749
835
  "location": "import",
750
- "path": "../list-item/list-item.types",
751
- "id": "src/components/list-item/list-item.types.ts::ListItem",
752
- "referenceLocation": "ListItem"
753
- },
754
- "PickerValue": {
755
- "location": "import",
756
- "path": "./value.types",
757
- "id": "src/components/picker/value.types.ts::PickerValue",
758
- "referenceLocation": "PickerValue"
836
+ "path": "../picker/picker-item.types",
837
+ "id": "src/components/picker/picker-item.types.ts::PickerItem",
838
+ "referenceLocation": "PickerItem"
759
839
  }
760
840
  }
761
841
  },
@@ -940,24 +1020,14 @@ export class Picker {
940
1020
  "text": "Fired when a new value has been selected from the picker"
941
1021
  },
942
1022
  "complexType": {
943
- "original": "ListItem<PickerValue> | Array<ListItem<PickerValue>>",
944
- "resolved": "ListItem<PickerValue> | ListItem<PickerValue>[]",
1023
+ "original": "PickerItem | PickerItem[]",
1024
+ "resolved": "PickerItem<PickerValue> | PickerItem<PickerValue>[]",
945
1025
  "references": {
946
- "ListItem": {
947
- "location": "import",
948
- "path": "../list-item/list-item.types",
949
- "id": "src/components/list-item/list-item.types.ts::ListItem",
950
- "referenceLocation": "ListItem"
951
- },
952
- "PickerValue": {
1026
+ "PickerItem": {
953
1027
  "location": "import",
954
- "path": "./value.types",
955
- "id": "src/components/picker/value.types.ts::PickerValue",
956
- "referenceLocation": "PickerValue"
957
- },
958
- "Array": {
959
- "location": "global",
960
- "id": "global::Array"
1028
+ "path": "../picker/picker-item.types",
1029
+ "id": "src/components/picker/picker-item.types.ts::PickerItem",
1030
+ "referenceLocation": "PickerItem"
961
1031
  }
962
1032
  }
963
1033
  }
@@ -972,20 +1042,14 @@ export class Picker {
972
1042
  "text": "Fired when clicking on a selected value"
973
1043
  },
974
1044
  "complexType": {
975
- "original": "ListItem<PickerValue>",
976
- "resolved": "ListItem<PickerValue>",
1045
+ "original": "PickerItem",
1046
+ "resolved": "PickerItem<PickerValue>",
977
1047
  "references": {
978
- "ListItem": {
979
- "location": "import",
980
- "path": "../list-item/list-item.types",
981
- "id": "src/components/list-item/list-item.types.ts::ListItem",
982
- "referenceLocation": "ListItem"
983
- },
984
- "PickerValue": {
1048
+ "PickerItem": {
985
1049
  "location": "import",
986
- "path": "./value.types",
987
- "id": "src/components/picker/value.types.ts::PickerValue",
988
- "referenceLocation": "PickerValue"
1050
+ "path": "../picker/picker-item.types",
1051
+ "id": "src/components/picker/picker-item.types.ts::PickerItem",
1052
+ "referenceLocation": "PickerItem"
989
1053
  }
990
1054
  }
991
1055
  }
@@ -27,6 +27,7 @@ export * from './components/dynamic-label/label.types';
27
27
  export * from './components/list/list.types';
28
28
  export * from './components/menu/menu.types';
29
29
  export * from './components/picker/actions.types';
30
+ export * from './components/picker/picker-item.types';
30
31
  export * from './components/picker/searcher.types';
31
32
  export * from './components/picker/value.types';
32
33
  export * from './components/progress-flow/progress-flow.types';
@@ -106,4 +106,6 @@ Du kan fortsætte med at blokere billeder (e-mailen kan se ufuldstændig ud) ell
106
106
  'profile-picture.remove': 'Fjern valgt billede',
107
107
  'profile-picture.unsupported-preview.title': 'Ikke-understøttet billedformat',
108
108
  'profile-picture.unsupported-preview.description': 'Vi kan ikke vise det valgte billede i denne browser. Vælg venligst en anden billedfil.',
109
+ 'picker.results-matching': 'Resultater der matcher "{ query }"',
110
+ 'picker.no-matching-results': 'Ingen resultater der matcher "{ query }"',
109
111
  };
@@ -106,4 +106,6 @@ Sie können Bilder weiterhin blockieren (die E-Mail kann unvollständig aussehen
106
106
  'profile-picture.remove': 'Ausgewähltes Bild entfernen',
107
107
  'profile-picture.unsupported-preview.title': 'Nicht unterstütztes Bildformat',
108
108
  'profile-picture.unsupported-preview.description': 'Wir können das ausgewählte Bild in diesem Browser nicht anzeigen. Bitte wählen Sie eine andere Bilddatei.',
109
+ 'picker.results-matching': 'Ergebnisse passend zu "{ query }"',
110
+ 'picker.no-matching-results': 'Keine Ergebnisse passend zu "{ query }"',
109
111
  };
@@ -106,4 +106,6 @@ You can keep images blocked (the email may look incomplete), or load them if you
106
106
  'profile-picture.remove': 'Remove selected picture',
107
107
  'profile-picture.unsupported-preview.title': 'Unsupported image format',
108
108
  'profile-picture.unsupported-preview.description': 'We cannot display the selected image in this browser. Please select a different image file.',
109
+ 'picker.results-matching': 'Results matching "{ query }"',
110
+ 'picker.no-matching-results': 'No results matching "{ query }"',
109
111
  };
@@ -106,4 +106,6 @@ Voit pitää kuvat estettyinä (sähköposti voi näyttää puutteelliselta) tai
106
106
  'profile-picture.remove': 'Poista valittu kuva',
107
107
  'profile-picture.unsupported-preview.title': 'Tiedostomuoto ei ole tuettu',
108
108
  'profile-picture.unsupported-preview.description': 'Emme voi näyttää valittua kuvaa tässä selaimessa. Valitse jokin toinen kuvatiedosto.',
109
+ 'picker.results-matching': 'Hakua "{ query }" vastaavat tulokset',
110
+ 'picker.no-matching-results': 'Ei hakua "{ query }" vastaavia tuloksia',
109
111
  };
@@ -106,4 +106,6 @@ Vous pouvez laisser les images bloquées (l'e-mail peut sembler incomplet) ou le
106
106
  'profile-picture.remove': 'Supprimer l\u2019image sélectionnée',
107
107
  'profile-picture.unsupported-preview.title': "Format d'image non pris en charge",
108
108
  'profile-picture.unsupported-preview.description': "Nous ne pouvons pas afficher l'image sélectionnée dans ce navigateur. Veuillez sélectionner un autre fichier image.",
109
+ 'picker.results-matching': 'Résultats correspondant à « { query } »',
110
+ 'picker.no-matching-results': 'Aucun résultat correspondant à « { query } »',
109
111
  };
@@ -106,4 +106,6 @@ Je kunt afbeeldingen geblokkeerd houden (de e-mail kan er onvolledig uitzien) of
106
106
  'profile-picture.remove': 'Geselecteerde afbeelding verwijderen',
107
107
  'profile-picture.unsupported-preview.title': 'Niet-ondersteund afbeeldingsformaat',
108
108
  'profile-picture.unsupported-preview.description': 'We kunnen de geselecteerde afbeelding niet weergeven in deze browser. Selecteer een ander afbeeldingsbestand.',
109
+ 'picker.results-matching': 'Resultaten die overeenkomen met "{ query }"',
110
+ 'picker.no-matching-results': 'Geen resultaten die overeenkomen met "{ query }"',
109
111
  };
@@ -106,4 +106,6 @@ Du kan fortsette å blokkere bilder (e-posten kan se ufullstendig ut), eller las
106
106
  'profile-picture.remove': 'Fjern valgt bilde',
107
107
  'profile-picture.unsupported-preview.title': 'Ustøttet bildeformat',
108
108
  'profile-picture.unsupported-preview.description': 'Vi kan ikke vise det valgte bildet i denne nettleseren. Vennligst velg en annen bildefil.',
109
+ 'picker.results-matching': 'Resultater som matcher "{ query }"',
110
+ 'picker.no-matching-results': 'Ingen resultater som matcher "{ query }"',
109
111
  };
@@ -106,4 +106,6 @@ Du kan fortsätta blockera bilder (e-posten kan se ofullständig ut) eller ladda
106
106
  'profile-picture.remove': 'Ta bort vald bild',
107
107
  'profile-picture.unsupported-preview.title': 'Formatet stöds inte',
108
108
  'profile-picture.unsupported-preview.description': 'Vi kan inte visa den valda bilden i den här webbläsaren. Välj en annan bildfil.',
109
+ 'picker.results-matching': 'Resultat som matchar "{ query }"',
110
+ 'picker.no-matching-results': 'Inga resultat som matchar "{ query }"',
109
111
  };