@limetech/lime-elements 39.9.5 → 39.10.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 (146) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/device-C9O7lYI9.js +50 -0
  3. package/dist/cjs/hotkeys-BtR8uxvl.js +219 -0
  4. package/dist/cjs/lime-elements.cjs.js +1 -1
  5. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +137 -15
  6. package/dist/cjs/limel-date-picker.cjs.entry.js +1 -1
  7. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
  8. package/dist/cjs/limel-helper-line_2.cjs.entry.js +1 -1
  9. package/dist/cjs/limel-hotkey.cjs.entry.js +128 -0
  10. package/dist/cjs/limel-icon-button.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-icon.cjs.entry.js +1 -1
  12. package/dist/cjs/limel-info-tile.cjs.entry.js +2 -2
  13. package/dist/cjs/limel-list-item.cjs.entry.js +2 -2
  14. package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
  15. package/dist/cjs/limel-menu-item-meta.cjs.entry.js +12 -1
  16. package/dist/cjs/limel-picker.cjs.entry.js +1 -1
  17. package/dist/cjs/limel-popover_2.cjs.entry.js +2 -2
  18. package/dist/cjs/limel-portal_3.cjs.entry.js +4 -4
  19. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
  20. package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-radio-button.cjs.entry.js +2 -2
  22. package/dist/cjs/limel-select.cjs.entry.js +2 -2
  23. package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
  24. package/dist/cjs/limel-slider.cjs.entry.js +1 -1
  25. package/dist/cjs/limel-snackbar.cjs.entry.js +2 -2
  26. package/dist/cjs/limel-split-button.cjs.entry.js +2 -2
  27. package/dist/cjs/limel-switch.cjs.entry.js +1 -1
  28. package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
  29. package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
  30. package/dist/cjs/limel-table.cjs.entry.js +3 -3
  31. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +3 -3
  32. package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
  33. package/dist/cjs/loader.cjs.js +1 -1
  34. package/dist/collection/collection-manifest.json +1 -0
  35. package/dist/collection/components/hotkey/format-display-token.js +95 -0
  36. package/dist/collection/components/hotkey/hotkey.css +136 -0
  37. package/dist/collection/components/hotkey/hotkey.js +92 -0
  38. package/dist/collection/components/icon/icon.js +1 -1
  39. package/dist/collection/components/icon-button/icon-button.js +1 -1
  40. package/dist/collection/components/info-tile/info-tile.js +2 -2
  41. package/dist/collection/components/input-field/input-field.js +1 -1
  42. package/dist/collection/components/list/list.js +1 -1
  43. package/dist/collection/components/list-item/list-item.js +2 -2
  44. package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +52 -2
  45. package/dist/collection/components/markdown/markdown.js +1 -1
  46. package/dist/collection/components/menu/menu.js +130 -10
  47. package/dist/collection/components/menu-list/menu-list-renderer.js +4 -1
  48. package/dist/collection/components/menu-list/menu-list.js +1 -1
  49. package/dist/collection/components/menu-surface/menu-surface.js +1 -1
  50. package/dist/collection/components/notched-outline/notched-outline.js +1 -1
  51. package/dist/collection/components/picker/picker.js +1 -1
  52. package/dist/collection/components/popover/popover.js +1 -1
  53. package/dist/collection/components/popover-surface/popover-surface.js +1 -1
  54. package/dist/collection/components/portal/portal.js +1 -1
  55. package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
  56. package/dist/collection/components/radio-button-group/radio-button.js +2 -2
  57. package/dist/collection/components/select/select.js +1 -1
  58. package/dist/collection/components/shortcut/shortcut.js +1 -1
  59. package/dist/collection/components/slider/slider.js +1 -1
  60. package/dist/collection/components/snackbar/snackbar.js +2 -2
  61. package/dist/collection/components/spinner/spinner.js +1 -1
  62. package/dist/collection/components/split-button/split-button.js +2 -2
  63. package/dist/collection/components/switch/switch.js +1 -1
  64. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  65. package/dist/collection/components/tab-panel/tab-panel.js +1 -1
  66. package/dist/collection/components/table/table.js +3 -3
  67. package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +3 -3
  68. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
  69. package/dist/collection/components/text-editor/text-editor.js +1 -1
  70. package/dist/collection/components/tooltip/tooltip-content.js +1 -1
  71. package/dist/collection/components/tooltip/tooltip.js +2 -2
  72. package/dist/esm/device-B-tmXAXV.js +45 -0
  73. package/dist/esm/hotkeys-BxrRWYts.js +215 -0
  74. package/dist/esm/lime-elements.js +1 -1
  75. package/dist/esm/limel-breadcrumbs_7.entry.js +137 -15
  76. package/dist/esm/limel-date-picker.entry.js +1 -1
  77. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  78. package/dist/esm/limel-helper-line_2.entry.js +1 -1
  79. package/dist/esm/limel-hotkey.entry.js +126 -0
  80. package/dist/esm/limel-icon-button.entry.js +1 -1
  81. package/dist/esm/limel-icon.entry.js +1 -1
  82. package/dist/esm/limel-info-tile.entry.js +2 -2
  83. package/dist/esm/limel-list-item.entry.js +2 -2
  84. package/dist/esm/limel-markdown.entry.js +1 -1
  85. package/dist/esm/limel-menu-item-meta.entry.js +12 -1
  86. package/dist/esm/limel-picker.entry.js +1 -1
  87. package/dist/esm/limel-popover_2.entry.js +2 -2
  88. package/dist/esm/limel-portal_3.entry.js +4 -4
  89. package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
  90. package/dist/esm/limel-radio-button-group.entry.js +1 -1
  91. package/dist/esm/limel-radio-button.entry.js +2 -2
  92. package/dist/esm/limel-select.entry.js +2 -2
  93. package/dist/esm/limel-shortcut.entry.js +1 -1
  94. package/dist/esm/limel-slider.entry.js +1 -1
  95. package/dist/esm/limel-snackbar.entry.js +2 -2
  96. package/dist/esm/limel-split-button.entry.js +2 -2
  97. package/dist/esm/limel-switch.entry.js +1 -1
  98. package/dist/esm/limel-tab-bar.entry.js +2 -2
  99. package/dist/esm/limel-tab-panel.entry.js +1 -1
  100. package/dist/esm/limel-table.entry.js +3 -3
  101. package/dist/esm/limel-text-editor-link-menu.entry.js +3 -3
  102. package/dist/esm/limel-text-editor.entry.js +1 -1
  103. package/dist/esm/loader.js +1 -1
  104. package/dist/lime-elements/lime-elements.esm.js +1 -1
  105. package/dist/lime-elements/{p-a30bf079.entry.js → p-12646794.entry.js} +1 -1
  106. package/dist/lime-elements/{p-c5b6ac7a.entry.js → p-1635ece7.entry.js} +1 -1
  107. package/dist/lime-elements/{p-86eebe44.entry.js → p-17e1d911.entry.js} +1 -1
  108. package/dist/lime-elements/{p-8c418a0b.entry.js → p-23c1033d.entry.js} +1 -1
  109. package/dist/lime-elements/{p-e2f1b070.entry.js → p-2750b828.entry.js} +1 -1
  110. package/dist/lime-elements/{p-1d4285b1.entry.js → p-3e68cbda.entry.js} +2 -2
  111. package/dist/lime-elements/{p-de1e5ad9.entry.js → p-438652d6.entry.js} +1 -1
  112. package/dist/lime-elements/{p-ef75eed9.entry.js → p-59716b48.entry.js} +1 -1
  113. package/dist/lime-elements/{p-b11751c9.entry.js → p-60260fa3.entry.js} +1 -1
  114. package/dist/lime-elements/{p-a2295fa6.entry.js → p-689770db.entry.js} +1 -1
  115. package/dist/lime-elements/{p-abdede40.entry.js → p-733ebba6.entry.js} +1 -1
  116. package/dist/lime-elements/{p-288aa326.entry.js → p-77f42eff.entry.js} +1 -1
  117. package/dist/lime-elements/{p-d5da5b05.entry.js → p-7bd71b2b.entry.js} +1 -1
  118. package/dist/lime-elements/{p-9d51583a.entry.js → p-8805080c.entry.js} +1 -1
  119. package/dist/lime-elements/{p-c6b9425b.entry.js → p-889a05e4.entry.js} +1 -1
  120. package/dist/lime-elements/{p-e14b7393.entry.js → p-8b106865.entry.js} +1 -1
  121. package/dist/lime-elements/{p-6e0078f1.entry.js → p-8e3cc9b0.entry.js} +1 -1
  122. package/dist/lime-elements/{p-62d6a350.entry.js → p-9015c90c.entry.js} +2 -2
  123. package/dist/lime-elements/{p-9859b556.entry.js → p-9abfb8ba.entry.js} +1 -1
  124. package/dist/lime-elements/{p-72a4841a.entry.js → p-9d629f5f.entry.js} +10 -10
  125. package/dist/lime-elements/p-B-tmXAXV.js +1 -0
  126. package/dist/lime-elements/p-BxrRWYts.js +1 -0
  127. package/dist/lime-elements/p-a026cc24.entry.js +1 -0
  128. package/dist/lime-elements/{p-95ed243e.entry.js → p-a243b8e2.entry.js} +1 -1
  129. package/dist/lime-elements/p-b64ae828.entry.js +1 -0
  130. package/dist/lime-elements/p-c20a620d.entry.js +1 -0
  131. package/dist/lime-elements/{p-1590b341.entry.js → p-c84911e6.entry.js} +1 -1
  132. package/dist/lime-elements/{p-6614bbfc.entry.js → p-c9591213.entry.js} +1 -1
  133. package/dist/lime-elements/{p-0e1c15c8.entry.js → p-e0716b51.entry.js} +1 -1
  134. package/dist/lime-elements/{p-bbaaf7c1.entry.js → p-e89dcf27.entry.js} +1 -1
  135. package/dist/types/components/hotkey/format-display-token.d.ts +15 -0
  136. package/dist/types/components/hotkey/hotkey.d.ts +27 -0
  137. package/dist/types/components/list-item/menu-item-meta/menu-item-meta.d.ts +8 -0
  138. package/dist/types/components/menu/menu.d.ts +13 -2
  139. package/dist/types/components/menu/menu.types.d.ts +14 -0
  140. package/dist/types/components.d.ts +107 -4
  141. package/package.json +1 -1
  142. package/dist/cjs/device-CDZCRYph.js +0 -30
  143. package/dist/esm/device-CY72JnWG.js +0 -26
  144. package/dist/lime-elements/p-5178cc39.entry.js +0 -1
  145. package/dist/lime-elements/p-7afe6c3e.entry.js +0 -1
  146. package/dist/lime-elements/p-CY72JnWG.js +0 -1
@@ -9,6 +9,7 @@ import { d as debounce } from './debounce-B67JMchz.js';
9
9
  import { M as MDCTextField } from './component-wGVqvUmL.js';
10
10
  import { _ as __extends, a as __assign, M as MDCFoundation, m as matches, d as closest, c as MDCComponent, b as __values } from './ponyfill-ChRGk668.js';
11
11
  import { f as focusTriggerElement, z as zipObject } from './focus-trigger-element-6aEStEKM.js';
12
+ import { h as hotkeyFromKeyboardEvent, t as tokenizeHotkeyString, n as normalizeHotkeyString } from './hotkeys-BxrRWYts.js';
12
13
  import { i as isFunction } from './eq-D7VMHFyO.js';
13
14
  import { g as getCorrectPropertyName } from './util-Dx8swykg.js';
14
15
  import { M as MDCRipple } from './component-7QB0OUSF.js';
@@ -670,7 +671,7 @@ const InputField = class {
670
671
  if (ariaControls) {
671
672
  properties['aria-controls'] = ariaControls;
672
673
  }
673
- return (h(Host, { key: '6427ea1655ab4fa9d07a2e5e4f8f1b4bad169065' }, h("limel-notched-outline", { key: '5dbf37b876ed2673acdd439a875b6b82ef34ee22', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid || this.isInvalid(), disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasLeadingIcon: !!this.leadingIcon }, h("label", { key: '47ec8a216b5b5799769af87ce603e04f6a3abbaa', slot: "content", class: this.getContainerClassList() }, this.renderLeadingIcon(), this.renderPrefix(), this.renderFormattedNumber(), this.renderInput(properties), this.renderSuffix(), this.renderTextarea(properties), this.renderTrailingLinkOrButton())), this.renderHelperLine(), this.renderAutocompleteList()));
674
+ return (h(Host, { key: 'be352ea1f105d4c3f77b567de32626488ea4a60b' }, h("limel-notched-outline", { key: '0bae1383ad7421ffdc3468bbfc79af59d7c2e3cb', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid || this.isInvalid(), disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasLeadingIcon: !!this.leadingIcon }, h("label", { key: '3667d9fbf90227232d8089a421455c7ab72e4202', slot: "content", class: this.getContainerClassList() }, this.renderLeadingIcon(), this.renderPrefix(), this.renderFormattedNumber(), this.renderInput(properties), this.renderSuffix(), this.renderTextarea(properties), this.renderTrailingLinkOrButton())), this.renderHelperLine(), this.renderAutocompleteList()));
674
675
  }
675
676
  valueWatcher(newValue) {
676
677
  if (!this.mdcTextField) {
@@ -2525,7 +2526,7 @@ const List = class {
2525
2526
  maxLinesSecondaryText = 1;
2526
2527
  }
2527
2528
  const html = this.listRenderer.render(this.items, this.config);
2528
- return (h(Host, { key: 'e08edeaabf6b51f940e305539aecec91517a51ca', style: {
2529
+ return (h(Host, { key: 'cbe0fda77189118ad3515dc3c4ab02c6cd9bc58a', style: {
2529
2530
  '--maxLinesSecondaryText': `${maxLinesSecondaryText}`,
2530
2531
  } }, html));
2531
2532
  }
@@ -2634,6 +2635,34 @@ const Menu = class {
2634
2635
  */
2635
2636
  this.rootItem = DEFAULT_ROOT_BREADCRUMBS_ITEM;
2636
2637
  this.shouldRestoreFocusOnClose = false;
2638
+ this.normalizedHotkeyCache = new Map();
2639
+ this.cachedSubMenuSource = null;
2640
+ this.cachedSubMenuItems = null;
2641
+ this.handleDocumentKeyDown = (event) => {
2642
+ if (event.key === ESCAPE && this.open) {
2643
+ this.shouldRestoreFocusOnClose = true;
2644
+ }
2645
+ if (!this.open || event.defaultPrevented || event.repeat) {
2646
+ return;
2647
+ }
2648
+ if (this.isFromTextInput(event) && !this.hasModifier(event)) {
2649
+ return;
2650
+ }
2651
+ const pressedHotkey = hotkeyFromKeyboardEvent(event);
2652
+ if (!pressedHotkey) {
2653
+ return;
2654
+ }
2655
+ if (this.isReservedMenuHotkey(pressedHotkey)) {
2656
+ return;
2657
+ }
2658
+ const matchedItem = this.findMenuItemByHotkey(pressedHotkey);
2659
+ if (!matchedItem) {
2660
+ return;
2661
+ }
2662
+ event.stopPropagation();
2663
+ event.preventDefault();
2664
+ this.handleSelect(matchedItem);
2665
+ };
2637
2666
  this.renderLoader = () => {
2638
2667
  if (!this.loadingSubItems && !this.loading) {
2639
2668
  return;
@@ -2723,6 +2752,9 @@ const Menu = class {
2723
2752
  // Will change focus to breadcrumbs (if present) or the first/last item
2724
2753
  // in the dropdown list to enable selection with the keyboard
2725
2754
  this.handleInputKeyDown = (event) => {
2755
+ if (event.defaultPrevented) {
2756
+ return;
2757
+ }
2726
2758
  const isForwardTab = event.key === TAB &&
2727
2759
  !event.altKey &&
2728
2760
  !event.metaKey &&
@@ -2888,11 +2920,6 @@ const Menu = class {
2888
2920
  }
2889
2921
  }
2890
2922
  };
2891
- this.handleEscapeCapture = (event) => {
2892
- if (event.key === ESCAPE && this.open) {
2893
- this.shouldRestoreFocusOnClose = true;
2894
- }
2895
- };
2896
2923
  this.onClose = () => {
2897
2924
  const restoreFocus = this.shouldRestoreFocusOnClose;
2898
2925
  this.shouldRestoreFocusOnClose = false;
@@ -3087,25 +3114,113 @@ const Menu = class {
3087
3114
  const cssProperties = this.getCssProperties();
3088
3115
  const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
3089
3116
  const menuSurfaceWidth = this.getMenuSurfaceWidth(cssProperties['--menu-surface-width']);
3090
- return (h("div", { key: 'a54987a1be3e3fcc4ceae95c7cc334411a0c474f', class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, h("slot", { key: '1bacdb5d1387b8357d1c6f93db47369c8cf64a4f', ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), h("limel-portal", { key: 'fbc7982b1dcab9fd5172a95e7a7f0328281f3a35', visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, h("limel-menu-surface", { key: '48b96e2e6fe815f4cc976553dfea7b26f36ea6d4', open: this.open, onDismiss: this.onClose, style: Object.assign(Object.assign({}, cssProperties), { '--menu-surface-width': menuSurfaceWidth, '--limel-menu-surface-display': 'flex', '--limel-menu-surface-flex-direction': 'column' }), class: {
3117
+ return (h("div", { key: '720330cf7d07c491a5a9e58a2567896f5526c45a', class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, h("slot", { key: 'd3db72fa9e12bafbb039e6a94a1052edf64e060e', ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), h("limel-portal", { key: '591f97a745488fbff7eb8fc06b14d2f6e0d21fa6', visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, h("limel-menu-surface", { key: '829a9578894165b28100c4cab519ced0cb7689a0', open: this.open, onDismiss: this.onClose, style: Object.assign(Object.assign({}, cssProperties), { '--menu-surface-width': menuSurfaceWidth, '--limel-menu-surface-display': 'flex', '--limel-menu-surface-flex-direction': 'column' }), class: {
3091
3118
  'has-grid-layout': this.gridLayout,
3092
3119
  } }, this.renderSearchField(), this.renderBreadcrumb(), this.renderLoader(), this.renderEmptyMessage(), this.renderMenuList()))));
3093
3120
  }
3094
3121
  itemsWatcher() {
3095
3122
  this.clearSearch();
3123
+ this.normalizedHotkeyCache.clear();
3096
3124
  this.setFocus();
3097
3125
  }
3126
+ connectedCallback() {
3127
+ if (this.open) {
3128
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
3129
+ }
3130
+ }
3131
+ disconnectedCallback() {
3132
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
3133
+ }
3098
3134
  openWatcher(newValue) {
3099
3135
  const opened = newValue;
3100
3136
  if (opened) {
3101
- document.addEventListener('keydown', this.handleEscapeCapture, true);
3137
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
3102
3138
  this.setFocus();
3103
3139
  }
3104
3140
  else {
3105
- document.removeEventListener('keydown', this.handleEscapeCapture, true);
3141
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
3106
3142
  this.clearSearch();
3107
3143
  }
3108
3144
  }
3145
+ isFromTextInput(event) {
3146
+ const path = typeof event.composedPath === 'function'
3147
+ ? event.composedPath()
3148
+ : [];
3149
+ for (const node of path) {
3150
+ if (!(node instanceof HTMLElement)) {
3151
+ continue;
3152
+ }
3153
+ if (node.isContentEditable) {
3154
+ return true;
3155
+ }
3156
+ const tagName = node.tagName;
3157
+ if (tagName === 'INPUT' ||
3158
+ tagName === 'TEXTAREA' ||
3159
+ tagName === 'SELECT') {
3160
+ return true;
3161
+ }
3162
+ }
3163
+ return false;
3164
+ }
3165
+ // Only Ctrl and Meta count as "real" modifiers for the text-input bypass.
3166
+ // Alt/Option is intentionally excluded because it is used for typing
3167
+ // special characters on international keyboards and macOS (e.g. Option+e
3168
+ // for é, AltGr+e for € on Windows). This means alt-only hotkeys like
3169
+ // "alt+x" will NOT fire while a text input (e.g. the search field) is
3170
+ // focused — only Ctrl/Meta combos will. AltGraph is also explicitly
3171
+ // rejected because Windows synthesizes ctrlKey=true for AltGr keypresses.
3172
+ hasModifier(event) {
3173
+ var _a;
3174
+ if ((_a = event.getModifierState) === null || _a === void 0 ? void 0 : _a.call(event, 'AltGraph')) {
3175
+ return false;
3176
+ }
3177
+ return event.ctrlKey || event.metaKey;
3178
+ }
3179
+ isReservedMenuHotkey(hotkey) {
3180
+ const tokens = tokenizeHotkeyString(hotkey);
3181
+ const key = tokens.at(-1);
3182
+ if (!key) {
3183
+ return false;
3184
+ }
3185
+ const hasModifiers = tokens.length > 1;
3186
+ if (hasModifiers) {
3187
+ return false;
3188
+ }
3189
+ return (key === 'arrowup' ||
3190
+ key === 'arrowdown' ||
3191
+ key === 'arrowleft' ||
3192
+ key === 'arrowright' ||
3193
+ key === 'tab' ||
3194
+ key === 'enter' ||
3195
+ key === 'space' ||
3196
+ key === 'escape');
3197
+ }
3198
+ findMenuItemByHotkey(pressedHotkey) {
3199
+ for (const item of this.visibleItems) {
3200
+ if (!this.isMenuItem(item) || item.disabled) {
3201
+ continue;
3202
+ }
3203
+ const rawHotkey = item.hotkey;
3204
+ if (!rawHotkey) {
3205
+ continue;
3206
+ }
3207
+ const normalized = this.getNormalizedHotkey(rawHotkey);
3208
+ if (normalized && normalized === pressedHotkey) {
3209
+ return item;
3210
+ }
3211
+ }
3212
+ return null;
3213
+ }
3214
+ getNormalizedHotkey(raw) {
3215
+ var _a;
3216
+ const cacheKey = raw.trim();
3217
+ if (this.normalizedHotkeyCache.has(cacheKey)) {
3218
+ return (_a = this.normalizedHotkeyCache.get(cacheKey)) !== null && _a !== void 0 ? _a : null;
3219
+ }
3220
+ const normalized = normalizeHotkeyString(cacheKey);
3221
+ this.normalizedHotkeyCache.set(cacheKey, normalized);
3222
+ return normalized;
3223
+ }
3109
3224
  getBreadcrumbsItems() {
3110
3225
  const breadCrumbItems = [];
3111
3226
  let currentItem = this.currentSubMenu;
@@ -3168,7 +3283,11 @@ const Menu = class {
3168
3283
  return this.searchResults;
3169
3284
  }
3170
3285
  else if (Array.isArray((_a = this.currentSubMenu) === null || _a === void 0 ? void 0 : _a.items)) {
3171
- return this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
3286
+ if (this.cachedSubMenuSource !== this.currentSubMenu) {
3287
+ this.cachedSubMenuSource = this.currentSubMenu;
3288
+ this.cachedSubMenuItems = this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
3289
+ }
3290
+ return this.cachedSubMenuItems;
3172
3291
  }
3173
3292
  return this.items;
3174
3293
  }
@@ -4672,12 +4791,15 @@ class MenuListRenderer {
4672
4791
  const hasSubMenu = this.hasSubItems(item);
4673
4792
  const hasMeta = hasSubMenu ||
4674
4793
  item.badge !== undefined ||
4675
- (!!('commandText' in item) && !!item.commandText);
4794
+ !!item.hotkey ||
4795
+ !!item.commandText;
4676
4796
  const primaryComponent = hasMeta
4677
4797
  ? {
4678
4798
  name: 'limel-menu-item-meta',
4679
4799
  props: {
4680
4800
  commandText: item.commandText,
4801
+ hotkey: item.hotkey,
4802
+ disabled: !!item.disabled,
4681
4803
  badge: item.badge,
4682
4804
  showChevron: hasSubMenu,
4683
4805
  },
@@ -4796,7 +4918,7 @@ const MenuList = class {
4796
4918
  iconSize: this.iconSize,
4797
4919
  };
4798
4920
  const html = this.MenuListRenderer.render(this.items, this.config);
4799
- return h("div", { key: 'a0d43ee28ff19b78b99ed0ec7fc0d1ff79f235e0', class: "mdc-menu mdc-menu-surface" }, html);
4921
+ return h("div", { key: '1c044c711555d155c5559f8b787a3bbad09b7526', class: "mdc-menu mdc-menu-surface" }, html);
4800
4922
  }
4801
4923
  itemsChanged() {
4802
4924
  setTimeout(() => {
@@ -4922,7 +5044,7 @@ const MenuSurface = class {
4922
5044
  'mdc-elevation-transition': true,
4923
5045
  'mdc-elevation--z4': true,
4924
5046
  };
4925
- return (h("div", { key: '0d834530b1abaa97c0443447ae573ff4eb000ea7', class: classList, tabindex: "-1" }, h("slot", { key: 'caea2ed90273cdacfd7e79ae2f2b5aff476dc7ed' })));
5047
+ return (h("div", { key: '254247a3cd25908f96e55028df567663dd4d736a', class: classList, tabindex: "-1" }, h("slot", { key: 'eb7d1042a28585242d212cf40a34018240cb0502' })));
4926
5048
  }
4927
5049
  get host() { return getElement(this); }
4928
5050
  };
@@ -4943,7 +5065,7 @@ const Spinner = class {
4943
5065
  this.limeBranded = false;
4944
5066
  }
4945
5067
  render() {
4946
- return (h(Host, { key: '15c39e3df6a446d4f809e23d2316e535bf77dc99' }, h("svg", { key: 'e88d11c66514783aa11bb01c4e902a15d0cb6dd4', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
5068
+ return (h(Host, { key: '5d7275ec64f2e3b07c7e25065d8d115de772324e' }, h("svg", { key: '41e5110dc29d6112261bea4afbd8cffde213cde0', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
4947
5069
  }
4948
5070
  renderSpinner() {
4949
5071
  if (!this.limeBranded) {
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, c as createEvent, h, a as getElement } from './index-DBTJNfo7.js';
2
2
  import { c as createRandomString } from './random-string-JbKhhoXs.js';
3
- import { i as isIOSDevice, a as isAndroidDevice } from './device-CY72JnWG.js';
3
+ import { i as isIOSDevice, a as isAndroidDevice } from './device-B-tmXAXV.js';
4
4
  import './sv-84mf7Xsv.js';
5
5
  import { m as moment } from './moment-DhvPC9Jt.js';
6
6
  import { M as MDCTextField } from './component-wGVqvUmL.js';
@@ -3,7 +3,7 @@ import { t as translate } from './translations-DVRaJQvC.js';
3
3
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-BFTU3MAI.js';
4
4
  import './sv-84mf7Xsv.js';
5
5
  import { m as moment } from './moment-DhvPC9Jt.js';
6
- import { i as isIOSDevice, a as isAndroidDevice } from './device-CY72JnWG.js';
6
+ import { i as isIOSDevice, a as isAndroidDevice } from './device-B-tmXAXV.js';
7
7
  import { e as eq } from './eq-D7VMHFyO.js';
8
8
  import { b as isArrayLike$1, a as isIndex } from './isArrayLike-bWHU4ebg.js';
9
9
  import { i as isObject$1 } from './isObject-BJQylLSL.js';
@@ -84,7 +84,7 @@ const NotchedOutline = class {
84
84
  this.hasFloatingLabel = false;
85
85
  }
86
86
  render() {
87
- return (h("div", { key: 'b50040fa4388423e4a918aead75dc425c8b1b2f4', class: "limel-notched-outline" }, h("slot", { key: 'd8c2b975c3f82ec33dffd773b7461e28427f1dbe', name: "content" }), h("span", { key: '981dc0b50cf8de443fd70e25272819af2e91e4ac', class: "limel-notched-outline--outlines", "aria-hidden": "true" }, h("span", { key: 'b0f18a32926f2a1e308675911ac2cdcc8b8adb69', class: "limel-notched-outline--leading-outline" }), this.renderLabel(), h("span", { key: 'ac7812bc4b30d93b8cf73b49db14f51db8845d82', class: "limel-notched-outline--trailing-outline" }), this.renderEmptyReadonlyValue())));
87
+ return (h("div", { key: '5dd66f7356821043d750963f18ef8f39889e65cc', class: "limel-notched-outline" }, h("slot", { key: '1b2072f7acd112137188b570229470677458ace7', name: "content" }), h("span", { key: '3d1d04a75ff0459b53294a2b2bbb4f15192409cd', class: "limel-notched-outline--outlines", "aria-hidden": "true" }, h("span", { key: '9677d3b3bc1f37e954c3ab2907e98db8b9122466', class: "limel-notched-outline--leading-outline" }), this.renderLabel(), h("span", { key: '62a494be847b2181cdd00f20e50cffbbc121bfd2', class: "limel-notched-outline--trailing-outline" }), this.renderEmptyReadonlyValue())));
88
88
  }
89
89
  renderLabel() {
90
90
  if (!this.label) {
@@ -0,0 +1,126 @@
1
+ import { r as registerInstance, h, H as Host } from './index-DBTJNfo7.js';
2
+ import { t as tokenizeHotkeyString } from './hotkeys-BxrRWYts.js';
3
+ import { c as isAppleDevice } from './device-B-tmXAXV.js';
4
+
5
+ // Note: this function handles the same key aliases as `KEY_ALIASES` in
6
+ // `../../util/hotkeys.ts`, but maps them to display strings rather than
7
+ // canonical names. Keep both in sync when adding new aliases.
8
+ /**
9
+ * Maps a single hotkey token to its display representation.
10
+ *
11
+ * @param token - A single token from `tokenizeHotkeyString` (e.g. `"meta"`, `"k"`, `"+"`).
12
+ * @param isApple - Whether the current device is an Apple device.
13
+ * @returns The display string, whether it is a glyph (for styling),
14
+ * and a human-readable name for screen readers.
15
+ */
16
+ function formatDisplayToken(token, isApple) {
17
+ const trimmed = (token !== null && token !== void 0 ? token : '').trim();
18
+ if (!trimmed) {
19
+ return { display: '', isGlyph: false, ariaName: '' };
20
+ }
21
+ if (trimmed === '+') {
22
+ return { display: '+', isGlyph: false, ariaName: 'plus' };
23
+ }
24
+ const lower = trimmed.toLowerCase();
25
+ switch (lower) {
26
+ case 'meta':
27
+ case 'win':
28
+ case 'windows': {
29
+ return isApple
30
+ ? { display: '⌘', isGlyph: true, ariaName: 'Command' }
31
+ : { display: '⊞ Win', isGlyph: false, ariaName: 'Windows' };
32
+ }
33
+ case 'cmd':
34
+ case 'command': {
35
+ return { display: '⌘', isGlyph: true, ariaName: 'Command' };
36
+ }
37
+ case 'alt':
38
+ case 'option': {
39
+ return isApple
40
+ ? { display: '⌥', isGlyph: true, ariaName: 'Option' }
41
+ : { display: 'Alt', isGlyph: false, ariaName: 'Alt' };
42
+ }
43
+ case 'shift': {
44
+ return { display: '⇧', isGlyph: true, ariaName: 'Shift' };
45
+ }
46
+ case 'enter':
47
+ case 'return': {
48
+ return { display: '↩', isGlyph: true, ariaName: 'Enter' };
49
+ }
50
+ case 'tab': {
51
+ return { display: '⇥', isGlyph: true, ariaName: 'Tab' };
52
+ }
53
+ case 'delete':
54
+ case 'del':
55
+ case 'backspace': {
56
+ if (isApple) {
57
+ return { display: '⌫', isGlyph: true, ariaName: 'Delete' };
58
+ }
59
+ return lower === 'backspace'
60
+ ? {
61
+ display: 'Backspace',
62
+ isGlyph: false,
63
+ ariaName: 'Backspace',
64
+ }
65
+ : { display: 'Del', isGlyph: false, ariaName: 'Delete' };
66
+ }
67
+ case 'ctrl':
68
+ case 'control': {
69
+ return isApple
70
+ ? { display: '⌃', isGlyph: true, ariaName: 'Control' }
71
+ : { display: 'Ctrl', isGlyph: false, ariaName: 'Control' };
72
+ }
73
+ case 'escape':
74
+ case 'esc': {
75
+ return { display: 'Esc', isGlyph: false, ariaName: 'Escape' };
76
+ }
77
+ case 'space':
78
+ case 'spacebar': {
79
+ return { display: '␣', isGlyph: true, ariaName: 'Space' };
80
+ }
81
+ case 'arrowup':
82
+ case 'up': {
83
+ return { display: '↑', isGlyph: true, ariaName: 'Up' };
84
+ }
85
+ case 'arrowdown':
86
+ case 'down': {
87
+ return { display: '↓', isGlyph: true, ariaName: 'Down' };
88
+ }
89
+ case 'arrowleft':
90
+ case 'left': {
91
+ return { display: '←', isGlyph: true, ariaName: 'Left' };
92
+ }
93
+ case 'arrowright':
94
+ case 'right': {
95
+ return { display: '→', isGlyph: true, ariaName: 'Right' };
96
+ }
97
+ }
98
+ return { display: trimmed, isGlyph: false, ariaName: trimmed };
99
+ }
100
+
101
+ const hotkeyCss = () => `@charset "UTF-8";kbd{font-family:ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace;font-weight:600;color:rgb(var(--contrast-1100));background-color:rgb(var(--contrast-200));white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:normal;padding:0.125rem 0.5rem;margin:0 0.25rem;box-shadow:var(--button-shadow-normal), 0 0.03125rem 0.21875rem 0 rgba(var(--contrast-100), 0.5) inset;border-radius:0.125rem;border-style:solid;border-color:rgba(var(--contrast-600), 0.8);border-width:0 1px 0.125rem 1px}:host(limel-hotkey){display:flex;align-items:center;justify-content:center;gap:0.25rem}:host(limel-hotkey[disabled]:not([disabled=false])){opacity:0.5}kbd{margin:0;font-size:0.75rem;box-shadow:var(--button-shadow-pressed), 0 0.625rem 0.375px -0.5rem rgb(var(--color-black), 0.02), 0 0.025rem 0.5rem 0 rgb(var(--contrast-100)) inset}span{display:inline-block}span::first-letter{text-transform:uppercase}kbd.is-glyph span{transform:scale(1.2)}`;
102
+
103
+ const Hotkey = class {
104
+ constructor(hostRef) {
105
+ registerInstance(this, hostRef);
106
+ /**
107
+ * When `true`, the hotkey is rendered in a visually disabled state.
108
+ */
109
+ this.disabled = false;
110
+ }
111
+ componentWillLoad() {
112
+ this.isApple = isAppleDevice();
113
+ }
114
+ render() {
115
+ const parts = tokenizeHotkeyString(this.value);
116
+ const displayParts = parts.map((part) => formatDisplayToken(part, this.isApple));
117
+ const ariaLabel = displayParts
118
+ .map((p) => p.ariaName)
119
+ .filter(Boolean)
120
+ .join(' ');
121
+ return (h(Host, { key: 'ab1b9d31080740d19a4633c8c5bc92b02625c111', "aria-label": ariaLabel || undefined }, displayParts.map(({ display, isGlyph }, index) => (h("kbd", { key: `${parts[index]}-${index}`, class: isGlyph ? 'is-glyph' : undefined }, h("span", null, display))))));
122
+ }
123
+ };
124
+ Hotkey.style = hotkeyCss();
125
+
126
+ export { Hotkey as limel_hotkey };
@@ -47,7 +47,7 @@ const IconButton = class {
47
47
  if (this.host.hasAttribute('tabindex')) {
48
48
  buttonAttributes.tabindex = this.host.getAttribute('tabindex');
49
49
  }
50
- return (h(Host, { key: '75991185b5994f4fffb56a03031cfc0b570a3de4', onClick: this.filterClickWhenDisabled }, h("button", Object.assign({ key: '608c0abc14322e8b8755c4af5137880bb419824d', disabled: this.disabled, id: this.tooltipId }, buttonAttributes), this.renderIcon(), this.renderTooltip(this.tooltipId))));
50
+ return (h(Host, { key: '0df3febef19dcdb72c7c7f3740090414b313be51', onClick: this.filterClickWhenDisabled }, h("button", Object.assign({ key: 'fd0d61e30789619c52cd6a71269602efc7065f8e', disabled: this.disabled, id: this.tooltipId }, buttonAttributes), this.renderIcon(), this.renderTooltip(this.tooltipId))));
51
51
  }
52
52
  renderIcon() {
53
53
  var _a, _b;
@@ -159,7 +159,7 @@ const Icon = class {
159
159
  this.loadIcon(this.name);
160
160
  }
161
161
  render() {
162
- return h("div", { key: '80c6844e64217d24e957368feafddc831b497b2f', class: "container" });
162
+ return h("div", { key: '23b5f2c90c98461f65c0bcdb291f9958e00ac353', class: "container" });
163
163
  }
164
164
  async loadIcon(name) {
165
165
  if (name === undefined || name === '') {
@@ -104,9 +104,9 @@ const InfoTile = class {
104
104
  this.checkProps((_d = this === null || this === void 0 ? void 0 : this.link) === null || _d === void 0 ? void 0 : _d.title);
105
105
  const link = this.disabled ? '#' : (_e = this.link) === null || _e === void 0 ? void 0 : _e.href;
106
106
  const rel = getRel((_f = this.link) === null || _f === void 0 ? void 0 : _f.target, (_g = this.link) === null || _g === void 0 ? void 0 : _g.rel);
107
- return (h(Host, { key: '7c8d656a077f6c80cc7d4d64bf1aa9ef7d5bd781', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, class: { 'has-primary-slot-content': this.hasPrimarySlot } }, h("a", { key: 'f73467be963a8aa901c890958eda32212ff2f3a0', title: (_h = this.link) === null || _h === void 0 ? void 0 : _h.title, href: link, target: (_j = this.link) === null || _j === void 0 ? void 0 : _j.target, rel: rel, tabindex: "0", "aria-label": extendedAriaLabel, "aria-disabled": this.disabled, "aria-busy": this.loading ? 'true' : 'false', "aria-live": "polite", class: {
107
+ return (h(Host, { key: '3754cadd6c7cf0ee99e0f5dc2234732126dcdc1e', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, class: { 'has-primary-slot-content': this.hasPrimarySlot } }, h("a", { key: 'c812a64253f3687f230c9a306727addae91ac685', title: (_h = this.link) === null || _h === void 0 ? void 0 : _h.title, href: link, target: (_j = this.link) === null || _j === void 0 ? void 0 : _j.target, rel: rel, tabindex: "0", "aria-label": extendedAriaLabel, "aria-disabled": this.disabled, "aria-busy": this.loading ? 'true' : 'false', "aria-live": "polite", class: {
108
108
  'is-clickable': !!((_k = this.link) === null || _k === void 0 ? void 0 : _k.href) && !this.disabled,
109
- } }, this.renderIcon(), this.renderProgress(), h("slot", { key: '2e4972465f34d57ce81a0c55782e9fcbc4c91c90', name: "primary", onSlotchange: this.updateHasPrimarySlotContent }), h("div", { key: '119b244389b740a05b266c80a78bffd2287f6dab', class: "value-group" }, this.renderPrefix(), h("div", { key: '9a9fc38d8c997b3ce6db3715a1aed622ec0af586', class: "value-and-suffix" }, this.renderValue(), this.renderSuffix()), this.renderSpinner()), this.renderLabel(), h("limel-3d-hover-effect-glow", { key: '1809611bebee438d5b840907f09adda725c7849c' })), this.renderNotification()));
109
+ } }, this.renderIcon(), this.renderProgress(), h("slot", { key: '62e330f8b945d562b5ee4677a62ab21ec1b6defe', name: "primary", onSlotchange: this.updateHasPrimarySlotContent }), h("div", { key: 'de41a8bc66d7f706153188f84b96481dfa25f8f9', class: "value-group" }, this.renderPrefix(), h("div", { key: '8ae36080dadd6b4a7135c7280e51a88015f30fbc', class: "value-and-suffix" }, this.renderValue(), this.renderSuffix()), this.renderSpinner()), this.renderLabel(), h("limel-3d-hover-effect-glow", { key: '0221c5e66f2a30b60e619bc7d6fe35e66d1db653' })), this.renderNotification()));
110
110
  }
111
111
  checkProps(propValue) {
112
112
  return propValue ? propValue + ' ' : '';
@@ -132,9 +132,9 @@ const ListItemComponent = class {
132
132
  // also keep for `menuitem` for visual state consistency
133
133
  ariaProps['aria-selected'] = this.selected ? 'true' : 'false';
134
134
  }
135
- return (h(Host, Object.assign({ key: 'cc58d641c46fc21c81d9fbc6fbcd3a483aa7d803', role: this.getHostRole(), class: {
135
+ return (h(Host, Object.assign({ key: '4f769d4dc9bcf065f0891ae394efb8f2cb4e3cbe', role: this.getHostRole(), class: {
136
136
  'has-primary-component': !!((_a = this.primaryComponent) === null || _a === void 0 ? void 0 : _a.name),
137
- } }, ariaProps), this.renderRadioButton(), this.renderCheckbox(), this.renderIcon(), this.renderImage(), this.renderPrimaryComponent(), h("div", { key: '2d8f6496d714faf9f3bd59cc829459191d650dc7', class: "text" }, this.renderLabel(), this.renderDescription()), this.renderActionMenu(this.actions)));
137
+ } }, ariaProps), this.renderRadioButton(), this.renderCheckbox(), this.renderIcon(), this.renderImage(), this.renderPrimaryComponent(), h("div", { key: 'f3ae79f70d048a6541af55782a8a1956fd7338c5', class: "text" }, this.renderLabel(), this.renderDescription()), this.renderActionMenu(this.actions)));
138
138
  }
139
139
  /**
140
140
  * Returns a stable reference for the provided actions array to avoid
@@ -333,7 +333,7 @@ const Markdown = class {
333
333
  this.cleanupImageIntersectionObserver();
334
334
  }
335
335
  render() {
336
- return (h(Host, { key: '89f9536407969e0bb9dd206ca540dabee9c3eecf' }, h("div", { key: '373f17c2933a715a97f2854343c1d26d32a26a27', id: "markdown", ref: (el) => (this.rootElement = el) })));
336
+ return (h(Host, { key: 'd3c5e71466ad7fa2723a0a44bc6ba6742e597ca1' }, h("div", { key: 'ff45056e1a3ad465bdea9026b0c9674d911607a2', id: "markdown", ref: (el) => (this.rootElement = el) })));
337
337
  }
338
338
  setupImageIntersectionObserver() {
339
339
  if (this.lazyLoadImages) {
@@ -1,19 +1,30 @@
1
1
  import { r as registerInstance, h, H as Host } from './index-DBTJNfo7.js';
2
+ import { n as normalizeHotkeyString } from './hotkeys-BxrRWYts.js';
2
3
 
3
4
  const menuItemMetaCss = () => `@charset "UTF-8";:host(limel-menu-item-meta){order:4;transform:translateX(0.5rem);display:inline-flex;align-items:center;gap:0.5rem;max-width:50%}*{box-sizing:border-box}limel-badge{--badge-background-color:var( --notification-badge-background-color, rgb(var(--color-red-default)) );--badge-text-color:var( --notification-badge-text-color, rgb(var(--color-white)) )}.command-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;opacity:0.7;font-size:var(--limel-theme-default-small-font-size)}.chevron{flex-shrink:0;border-color:transparent;border-left-color:var(--limel-theme-text-secondary-on-background-color);border-width:0.25rem 0 0.25rem 0.375rem;border-style:solid}`;
4
5
 
5
6
  const MenuItemMeta = class {
6
7
  constructor(hostRef) {
7
8
  registerInstance(this, hostRef);
9
+ /**
10
+ * Will be set to `true` when the menu item is disabled.
11
+ */
12
+ this.disabled = false;
8
13
  /**
9
14
  * Shows a submenu chevron to indicate nested items
10
15
  */
11
16
  this.showChevron = false;
12
17
  }
13
18
  render() {
14
- return (h(Host, { key: '9e84c6ecc29e50b5a4e871d646fb11539e5fe86f' }, this.renderCommandText(), this.renderBadge(), this.renderChevron()));
19
+ return (h(Host, { key: '4341b1cd34952fdd2dc40bc3c4b7eb909646d880' }, this.renderCommandText(), this.renderBadge(), this.renderChevron()));
15
20
  }
16
21
  renderCommandText() {
22
+ if (this.hotkey) {
23
+ const hotkey = normalizeHotkeyString(this.hotkey);
24
+ if (hotkey) {
25
+ return h("limel-hotkey", { value: hotkey, disabled: this.disabled });
26
+ }
27
+ }
17
28
  if (!this.commandText) {
18
29
  return;
19
30
  }
@@ -187,7 +187,7 @@ const Picker = class {
187
187
  props.maxItems = 1;
188
188
  }
189
189
  return [
190
- h("limel-chip-set", Object.assign({ key: '996808bffc8715bab47a4b225d02d57247b3287d', 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)),
190
+ h("limel-chip-set", Object.assign({ key: 'e20f22b6907ad1d28f8b8c0847e5080faca09b3b', 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)),
191
191
  this.renderDropdown(),
192
192
  ];
193
193
  }
@@ -122,7 +122,7 @@ const Popover = class {
122
122
  render() {
123
123
  const cssProperties = this.getCssProperties();
124
124
  const popoverZIndex = getComputedStyle(this.host).getPropertyValue('--popover-z-index');
125
- return (h("div", { key: 'ac6e4c9358d68223f43ea60a29302d725438cf05', class: "trigger-anchor" }, h("slot", { key: '5e5ae7d194f7cc005573e909cd10343283603a7f', name: "trigger", ref: this.setTriggerRef }), h("limel-portal", { key: '5d4bda03c1ea9b07c17b7222fb2f30e29af9b3d3', visible: this.open, containerId: this.portalId, containerStyle: { 'z-index': popoverZIndex }, openDirection: this.openDirection }, h("limel-popover-surface", { key: '0f9804103a70f924375429ba7e96ad62858cb2ea', contentCollection: this.host.children, style: cssProperties }))));
125
+ return (h("div", { key: '53e64435fa661015fbbf2e449890864c8008c329', class: "trigger-anchor" }, h("slot", { key: '85336e8f76377921850ffc7704c7588707c45066', name: "trigger", ref: this.setTriggerRef }), h("limel-portal", { key: 'a40bfde87375a494ac5404911b4b1f058a55becf', visible: this.open, containerId: this.portalId, containerStyle: { 'z-index': popoverZIndex }, openDirection: this.openDirection }, h("limel-popover-surface", { key: '396e369ae3e61a79bfd2f520e05187a6ff85f834', contentCollection: this.host.children, style: cssProperties }))));
126
126
  }
127
127
  globalClickListener(event) {
128
128
  const element = event.target;
@@ -165,7 +165,7 @@ const PopoverSurface = class {
165
165
  this.appendElement();
166
166
  }
167
167
  render() {
168
- return h("div", { key: '553798a32efa190cbceb65aec00b56bfb5eb25f7', class: "limel-popover-surface", tabindex: "0" });
168
+ return h("div", { key: '72e73b254be6cebbd27332329b10a58210ae0352', class: "limel-popover-surface", tabindex: "0" });
169
169
  }
170
170
  appendElement() {
171
171
  const portalContainer = this.host.shadowRoot.querySelector('.limel-popover-surface');
@@ -1873,7 +1873,7 @@ const Portal = class {
1873
1873
  }
1874
1874
  }
1875
1875
  render() {
1876
- return h("slot", { key: 'e41cbd7a44b0e55525f9e99d056cc9ab627082d0' });
1876
+ return h("slot", { key: 'd6ed0d276afec19ba5ffd4d6a6fcf96937127d6a' });
1877
1877
  }
1878
1878
  onVisible() {
1879
1879
  if (!this.container && this.visible) {
@@ -2141,10 +2141,10 @@ const Tooltip = class {
2141
2141
  }
2142
2142
  render() {
2143
2143
  const tooltipZIndex = getComputedStyle(this.host).getPropertyValue('--tooltip-z-index');
2144
- return (h("div", { key: 'aaa9995f9223094c080d27aa4530c09f95fa2bfc', class: "trigger-anchor" }, h("limel-portal", { key: '175a57a6702519efbcd45738f0bf2b56308c3f63', openDirection: this.openDirection, visible: this.open, containerId: this.portalId, containerStyle: {
2144
+ return (h("div", { key: '93e90be597ba45e4063a9a7a689783f31a3b5871', class: "trigger-anchor" }, h("limel-portal", { key: '94cdcde46fc3f172e194894d0546cf96bce35623', openDirection: this.openDirection, visible: this.open, containerId: this.portalId, containerStyle: {
2145
2145
  'z-index': tooltipZIndex,
2146
2146
  'pointer-events': 'none',
2147
- }, anchor: this.ownerElement }, h("limel-tooltip-content", { key: '0468b3922536241c605698a795730217c39f861c', label: this.label, helperLabel: this.helperLabel, maxlength: this.maxlength, role: "tooltip", "aria-hidden": !this.open, id: this.tooltipId }))));
2147
+ }, anchor: this.ownerElement }, h("limel-tooltip-content", { key: 'd24de90d827c87b1e8fd2c10142fc34bcd498774', label: this.label, helperLabel: this.helperLabel, maxlength: this.maxlength, role: "tooltip", "aria-hidden": !this.open, id: this.tooltipId }))));
2148
2148
  }
2149
2149
  setOwnerAriaLabel() {
2150
2150
  var _a;
@@ -2187,7 +2187,7 @@ const TooltipContent = class {
2187
2187
  };
2188
2188
  }
2189
2189
  return [
2190
- h("text", Object.assign({ key: '17f145f906af010db827853f75206cf19a0fc7b8', class: { 'has-column-layout': isLabelsTextLong } }, props), h("div", { key: '007daa0b685ff71c4954dccef1947034627aa848', class: "label" }, this.label), h("div", { key: '9c5e6a7cf0cf4f80dd89964d789347fcc8787ba4', class: "helper-label" }, this.helperLabel)),
2190
+ h("text", Object.assign({ key: '5f6cde48d57c7c5b680055314f3b6d082ff37b5a', class: { 'has-column-layout': isLabelsTextLong } }, props), h("div", { key: 'ebfc96849d68c4db09e7be7b3d86e12d3937a5d9', class: "label" }, this.label), h("div", { key: 'a2730d9d13111bd949fc1a2795b785c217f800f8', class: "helper-label" }, this.helperLabel)),
2191
2191
  ];
2192
2192
  }
2193
2193
  };
@@ -27824,7 +27824,7 @@ const ProsemirrorAdapter = class {
27824
27824
  (_e = this.view) === null || _e === void 0 ? void 0 : _e.destroy();
27825
27825
  }
27826
27826
  render() {
27827
- return (h(Host, { key: '906845e8194052593a210e3a2338a48eede41ccf', onFocus: this.handleFocus }, h("div", { key: '6d230fc8957fe800db8f3d809dc21603131fb3e5', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
27827
+ return (h(Host, { key: '2f17d3935ed3c9d7a7191b3b4cd85bb1c2a4ac32', onFocus: this.handleFocus }, h("div", { key: '328602696f29dbbe89cee0c535f2efddf92c2a20', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
27828
27828
  }
27829
27829
  renderToolbar() {
27830
27830
  if (this.actionBarItems.length === 0 || this.ui === 'no-toolbar') {
@@ -24,7 +24,7 @@ const RadioButtonGroup = class {
24
24
  };
25
25
  }
26
26
  render() {
27
- return (h("limel-list", { key: 'f6aca37c9b00f4f92b1a048f8d7d0dd86e6f8c1f', items: this.createItems(), type: "radio", badgeIcons: this.badgeIcons, maxLinesSecondaryText: this.maxLinesSecondaryText, onChange: this.handleChange }));
27
+ return (h("limel-list", { key: 'd42e6342d4fd79d34cb2c6a9d25d3dfe577e9a99', items: this.createItems(), type: "radio", badgeIcons: this.badgeIcons, maxLinesSecondaryText: this.maxLinesSecondaryText, onChange: this.handleChange }));
28
28
  }
29
29
  createItems() {
30
30
  return this.items.map((option) => {
@@ -7,12 +7,12 @@ const RadioButtonComponent = class {
7
7
  registerInstance(this, hostRef);
8
8
  }
9
9
  render() {
10
- return (h(Host, { key: '09013c710b49de8c6aa1b3b0342add87ee69230b', class: {
10
+ return (h(Host, { key: '64623e09534c5b4e457029cbed4865d97d3cc19e', class: {
11
11
  'boolean-input': true,
12
12
  'radio-button': true,
13
13
  checked: this.checked,
14
14
  disabled: this.disabled,
15
- } }, h("input", { key: '0199ebfe42f8d46ccc848c00725739617863a1b3', type: "radio", id: this.id, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("div", { key: '80fc53f911d4524267a5c9e915e2c3ba7d3b58e8', class: "box" }), h("label", { key: '6e260d713cd802b12bdd88251a79eaaaf97ea9e8', class: "boolean-input-label", htmlFor: this.id }, this.label)));
15
+ } }, h("input", { key: '4eb816e8031d20bbfa5beb32798e50e5d3747895', type: "radio", id: this.id, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("div", { key: '9e7d7db22981a16b4655d7cbcd7c3eb2462a7953', class: "box" }), h("label", { key: '4b2061d351b2d4d03d6e5763bc132be46d146e48', class: "boolean-input-label", htmlFor: this.id }, this.label)));
16
16
  }
17
17
  };
18
18
  RadioButtonComponent.style = radioButtonCss();
@@ -1,5 +1,5 @@
1
1
  import { h, r as registerInstance, c as createEvent, a as getElement } from './index-DBTJNfo7.js';
2
- import { b as isMobileDevice } from './device-CY72JnWG.js';
2
+ import { b as isMobileDevice } from './device-B-tmXAXV.js';
3
3
  import { a as ENTER, S as SPACE } from './keycodes-rI0IeKpx.js';
4
4
  import { i as isMultiple } from './multiple-BylwpiM6.js';
5
5
  import { c as createRandomString } from './random-string-JbKhhoXs.js';
@@ -551,7 +551,7 @@ const Select = class {
551
551
  }
552
552
  render() {
553
553
  const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
554
- return (h(SelectTemplate, { key: '12c687df2b999aa6d8a06c7fab59bda425678791', id: this.portalId, disabled: this.disabled || this.readonly, readonly: this.readonly, required: this.required, invalid: this.invalid, label: this.label, helperText: this.helperText, value: this.value, options: this.options, onMenuChange: this.handleMenuChange, onNativeChange: this.handleNativeChange, onTriggerPress: this.handleMenuTriggerKeyPress, multiple: this.multiple, isOpen: this.menuOpen, open: this.openMenu, close: this.closeMenu, checkValid: this.checkValid, native: this.isMobileDevice && !this.multiple, dropdownZIndex: dropdownZIndex, anchor: this.getAnchorElement() }));
554
+ return (h(SelectTemplate, { key: '0bc73012998fd97b022c0bdbab31e6806a3ddfd3', id: this.portalId, disabled: this.disabled || this.readonly, readonly: this.readonly, required: this.required, invalid: this.invalid, label: this.label, helperText: this.helperText, value: this.value, options: this.options, onMenuChange: this.handleMenuChange, onNativeChange: this.handleNativeChange, onTriggerPress: this.handleMenuTriggerKeyPress, multiple: this.multiple, isOpen: this.menuOpen, open: this.openMenu, close: this.closeMenu, checkValid: this.checkValid, native: this.isMobileDevice && !this.multiple, dropdownZIndex: dropdownZIndex, anchor: this.getAnchorElement() }));
555
555
  }
556
556
  watchOpen(newValue, oldValue) {
557
557
  if (this.checkValid) {