@limetech/lime-elements 39.9.4 → 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 (225) hide show
  1. package/CHANGELOG.md +16 -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-badge.cjs.entry.js +2 -2
  6. package/dist/cjs/limel-banner.cjs.entry.js +1 -1
  7. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +143 -9
  8. package/dist/cjs/limel-button-group.cjs.entry.js +1 -1
  9. package/dist/cjs/limel-checkbox.cjs.entry.js +1 -1
  10. package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-circular-progress.cjs.entry.js +1 -1
  12. package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
  13. package/dist/cjs/limel-date-picker.cjs.entry.js +1 -1
  14. package/dist/cjs/limel-dialog.cjs.entry.js +2 -2
  15. package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +2 -2
  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-header.cjs.entry.js +1 -1
  19. package/dist/cjs/limel-help.cjs.entry.js +2 -2
  20. package/dist/cjs/limel-helper-line_2.cjs.entry.js +3 -3
  21. package/dist/cjs/limel-hotkey.cjs.entry.js +128 -0
  22. package/dist/cjs/limel-icon-button.cjs.entry.js +1 -1
  23. package/dist/cjs/limel-icon.cjs.entry.js +1 -1
  24. package/dist/cjs/limel-info-tile.cjs.entry.js +2 -2
  25. package/dist/cjs/limel-list-item.cjs.entry.js +2 -2
  26. package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
  27. package/dist/cjs/limel-menu-item-meta.cjs.entry.js +12 -1
  28. package/dist/cjs/limel-picker.cjs.entry.js +1 -1
  29. package/dist/cjs/limel-popover_2.cjs.entry.js +5 -5
  30. package/dist/cjs/limel-portal_3.cjs.entry.js +4 -4
  31. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
  32. package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
  33. package/dist/cjs/limel-radio-button.cjs.entry.js +2 -2
  34. package/dist/cjs/limel-select.cjs.entry.js +2 -2
  35. package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
  36. package/dist/cjs/limel-slider.cjs.entry.js +1 -1
  37. package/dist/cjs/limel-snackbar.cjs.entry.js +2 -2
  38. package/dist/cjs/limel-split-button.cjs.entry.js +2 -2
  39. package/dist/cjs/limel-switch.cjs.entry.js +1 -1
  40. package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
  41. package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
  42. package/dist/cjs/limel-table.cjs.entry.js +3 -3
  43. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +3 -3
  44. package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
  45. package/dist/cjs/loader.cjs.js +1 -1
  46. package/dist/collection/collection-manifest.json +1 -0
  47. package/dist/collection/components/badge/badge.js +3 -3
  48. package/dist/collection/components/banner/banner.js +2 -2
  49. package/dist/collection/components/button-group/button-group.js +2 -2
  50. package/dist/collection/components/checkbox/checkbox.js +2 -2
  51. package/dist/collection/components/chip-set/chip-set.js +2 -2
  52. package/dist/collection/components/circular-progress/circular-progress.js +2 -2
  53. package/dist/collection/components/code-editor/code-editor.js +2 -2
  54. package/dist/collection/components/dialog/dialog.js +3 -3
  55. package/dist/collection/components/dynamic-label/dynamic-label.js +1 -1
  56. package/dist/collection/components/file/file.js +2 -2
  57. package/dist/collection/components/file-dropzone/file-dropzone.js +2 -2
  58. package/dist/collection/components/file-input/file-input.js +2 -2
  59. package/dist/collection/components/header/header.js +2 -2
  60. package/dist/collection/components/help/help.js +3 -3
  61. package/dist/collection/components/helper-line/helper-line.js +3 -3
  62. package/dist/collection/components/hotkey/format-display-token.js +95 -0
  63. package/dist/collection/components/hotkey/hotkey.css +136 -0
  64. package/dist/collection/components/hotkey/hotkey.js +92 -0
  65. package/dist/collection/components/icon/icon.js +1 -1
  66. package/dist/collection/components/icon-button/icon-button.js +1 -1
  67. package/dist/collection/components/info-tile/info-tile.js +3 -3
  68. package/dist/collection/components/input-field/input-field.js +1 -1
  69. package/dist/collection/components/linear-progress/linear-progress.js +1 -1
  70. package/dist/collection/components/list/list.js +2 -2
  71. package/dist/collection/components/list-item/list-item.js +2 -2
  72. package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +52 -2
  73. package/dist/collection/components/markdown/markdown.js +1 -1
  74. package/dist/collection/components/menu/menu.js +137 -5
  75. package/dist/collection/components/menu-list/menu-list-renderer.js +4 -1
  76. package/dist/collection/components/menu-list/menu-list.js +1 -1
  77. package/dist/collection/components/menu-surface/menu-surface.js +1 -1
  78. package/dist/collection/components/notched-outline/notched-outline.js +1 -1
  79. package/dist/collection/components/picker/picker.js +1 -1
  80. package/dist/collection/components/popover/popover.js +4 -4
  81. package/dist/collection/components/popover-surface/popover-surface.js +1 -1
  82. package/dist/collection/components/portal/portal.js +1 -1
  83. package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
  84. package/dist/collection/components/radio-button-group/radio-button.js +2 -2
  85. package/dist/collection/components/select/select.js +2 -2
  86. package/dist/collection/components/shortcut/shortcut.js +2 -2
  87. package/dist/collection/components/slider/slider.js +1 -1
  88. package/dist/collection/components/snackbar/snackbar.js +3 -3
  89. package/dist/collection/components/spinner/spinner.js +2 -2
  90. package/dist/collection/components/split-button/split-button.js +2 -2
  91. package/dist/collection/components/switch/switch.js +2 -2
  92. package/dist/collection/components/tab-bar/tab-bar.js +3 -3
  93. package/dist/collection/components/tab-panel/tab-panel.js +2 -2
  94. package/dist/collection/components/table/table.js +4 -4
  95. package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +3 -3
  96. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
  97. package/dist/collection/components/text-editor/text-editor.js +1 -1
  98. package/dist/collection/components/tooltip/tooltip-content.js +1 -1
  99. package/dist/collection/components/tooltip/tooltip.js +2 -2
  100. package/dist/esm/device-B-tmXAXV.js +45 -0
  101. package/dist/esm/hotkeys-BxrRWYts.js +215 -0
  102. package/dist/esm/lime-elements.js +1 -1
  103. package/dist/esm/limel-badge.entry.js +2 -2
  104. package/dist/esm/limel-banner.entry.js +1 -1
  105. package/dist/esm/limel-breadcrumbs_7.entry.js +143 -9
  106. package/dist/esm/limel-button-group.entry.js +1 -1
  107. package/dist/esm/limel-checkbox.entry.js +1 -1
  108. package/dist/esm/limel-chip_2.entry.js +1 -1
  109. package/dist/esm/limel-circular-progress.entry.js +1 -1
  110. package/dist/esm/limel-code-editor.entry.js +1 -1
  111. package/dist/esm/limel-date-picker.entry.js +1 -1
  112. package/dist/esm/limel-dialog.entry.js +2 -2
  113. package/dist/esm/limel-file-dropzone_2.entry.js +2 -2
  114. package/dist/esm/limel-file.entry.js +1 -1
  115. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  116. package/dist/esm/limel-header.entry.js +1 -1
  117. package/dist/esm/limel-help.entry.js +2 -2
  118. package/dist/esm/limel-helper-line_2.entry.js +3 -3
  119. package/dist/esm/limel-hotkey.entry.js +126 -0
  120. package/dist/esm/limel-icon-button.entry.js +1 -1
  121. package/dist/esm/limel-icon.entry.js +1 -1
  122. package/dist/esm/limel-info-tile.entry.js +2 -2
  123. package/dist/esm/limel-list-item.entry.js +2 -2
  124. package/dist/esm/limel-markdown.entry.js +1 -1
  125. package/dist/esm/limel-menu-item-meta.entry.js +12 -1
  126. package/dist/esm/limel-picker.entry.js +1 -1
  127. package/dist/esm/limel-popover_2.entry.js +5 -5
  128. package/dist/esm/limel-portal_3.entry.js +4 -4
  129. package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
  130. package/dist/esm/limel-radio-button-group.entry.js +1 -1
  131. package/dist/esm/limel-radio-button.entry.js +2 -2
  132. package/dist/esm/limel-select.entry.js +2 -2
  133. package/dist/esm/limel-shortcut.entry.js +1 -1
  134. package/dist/esm/limel-slider.entry.js +1 -1
  135. package/dist/esm/limel-snackbar.entry.js +2 -2
  136. package/dist/esm/limel-split-button.entry.js +2 -2
  137. package/dist/esm/limel-switch.entry.js +1 -1
  138. package/dist/esm/limel-tab-bar.entry.js +2 -2
  139. package/dist/esm/limel-tab-panel.entry.js +1 -1
  140. package/dist/esm/limel-table.entry.js +3 -3
  141. package/dist/esm/limel-text-editor-link-menu.entry.js +3 -3
  142. package/dist/esm/limel-text-editor.entry.js +1 -1
  143. package/dist/esm/loader.js +1 -1
  144. package/dist/lime-elements/lime-elements.esm.js +1 -1
  145. package/dist/lime-elements/{p-a30bf079.entry.js → p-12646794.entry.js} +1 -1
  146. package/dist/lime-elements/{p-f70b8487.entry.js → p-1635ece7.entry.js} +1 -1
  147. package/dist/lime-elements/{p-86eebe44.entry.js → p-17e1d911.entry.js} +1 -1
  148. package/dist/lime-elements/{p-8c418a0b.entry.js → p-23c1033d.entry.js} +1 -1
  149. package/dist/lime-elements/{p-57c53ed4.entry.js → p-268d2a30.entry.js} +1 -1
  150. package/dist/lime-elements/{p-e2f1b070.entry.js → p-2750b828.entry.js} +1 -1
  151. package/dist/lime-elements/{p-1a3a7374.entry.js → p-30e54f05.entry.js} +1 -1
  152. package/dist/lime-elements/{p-1d4285b1.entry.js → p-3e68cbda.entry.js} +2 -2
  153. package/dist/lime-elements/{p-de1e5ad9.entry.js → p-438652d6.entry.js} +1 -1
  154. package/dist/lime-elements/{p-ef75eed9.entry.js → p-59716b48.entry.js} +1 -1
  155. package/dist/lime-elements/{p-b11751c9.entry.js → p-60260fa3.entry.js} +1 -1
  156. package/dist/lime-elements/{p-444c7966.entry.js → p-607ad3b7.entry.js} +1 -1
  157. package/dist/lime-elements/{p-b6ccc921.entry.js → p-61253dea.entry.js} +1 -1
  158. package/dist/lime-elements/{p-a2295fa6.entry.js → p-689770db.entry.js} +1 -1
  159. package/dist/lime-elements/{p-08d1b87a.entry.js → p-6fd84e57.entry.js} +1 -1
  160. package/dist/lime-elements/{p-1547b9c8.entry.js → p-733ebba6.entry.js} +1 -1
  161. package/dist/lime-elements/{p-288aa326.entry.js → p-77f42eff.entry.js} +1 -1
  162. package/dist/lime-elements/{p-d5da5b05.entry.js → p-7bd71b2b.entry.js} +1 -1
  163. package/dist/lime-elements/{p-266c228c.entry.js → p-86a001e2.entry.js} +1 -1
  164. package/dist/lime-elements/{p-aeebf410.entry.js → p-87c5e951.entry.js} +1 -1
  165. package/dist/lime-elements/p-8805080c.entry.js +1 -0
  166. package/dist/lime-elements/{p-c6b9425b.entry.js → p-889a05e4.entry.js} +1 -1
  167. package/dist/lime-elements/{p-e14b7393.entry.js → p-8b106865.entry.js} +1 -1
  168. package/dist/lime-elements/{p-b3622713.entry.js → p-8e3cc9b0.entry.js} +1 -1
  169. package/dist/lime-elements/{p-f59590f1.entry.js → p-9015c90c.entry.js} +2 -2
  170. package/dist/lime-elements/{p-287c4fb1.entry.js → p-9abfb8ba.entry.js} +1 -1
  171. package/dist/lime-elements/{p-da9f1fc4.entry.js → p-9d629f5f.entry.js} +10 -10
  172. package/dist/lime-elements/p-B-tmXAXV.js +1 -0
  173. package/dist/lime-elements/p-BxrRWYts.js +1 -0
  174. package/dist/lime-elements/p-a026cc24.entry.js +1 -0
  175. package/dist/lime-elements/{p-74cd80a9.entry.js → p-a243b8e2.entry.js} +1 -1
  176. package/dist/lime-elements/p-b64ae828.entry.js +1 -0
  177. package/dist/lime-elements/{p-bb38bb3c.entry.js → p-b91b1aed.entry.js} +1 -1
  178. package/dist/lime-elements/{p-d6d177bc.entry.js → p-be0cbddb.entry.js} +1 -1
  179. package/dist/lime-elements/p-c20a620d.entry.js +1 -0
  180. package/dist/lime-elements/{p-1590b341.entry.js → p-c84911e6.entry.js} +1 -1
  181. package/dist/lime-elements/{p-2af214de.entry.js → p-c9591213.entry.js} +1 -1
  182. package/dist/lime-elements/{p-268a695b.entry.js → p-ce20d720.entry.js} +1 -1
  183. package/dist/lime-elements/{p-eaac5ad2.entry.js → p-e0716b51.entry.js} +1 -1
  184. package/dist/lime-elements/{p-37b41bad.entry.js → p-e89dcf27.entry.js} +1 -1
  185. package/dist/lime-elements/{p-3683e2e2.entry.js → p-f92f4f00.entry.js} +1 -1
  186. package/dist/lime-elements/{p-ef9bb368.entry.js → p-f9cfcd03.entry.js} +1 -1
  187. package/dist/types/components/badge/badge.d.ts +1 -1
  188. package/dist/types/components/banner/banner.d.ts +1 -1
  189. package/dist/types/components/button-group/button-group.d.ts +1 -1
  190. package/dist/types/components/checkbox/checkbox.d.ts +1 -1
  191. package/dist/types/components/chip-set/chip-set.d.ts +1 -1
  192. package/dist/types/components/circular-progress/circular-progress.d.ts +1 -1
  193. package/dist/types/components/code-editor/code-editor.d.ts +1 -1
  194. package/dist/types/components/dialog/dialog.d.ts +1 -1
  195. package/dist/types/components/dynamic-label/dynamic-label.d.ts +1 -1
  196. package/dist/types/components/file/file.d.ts +1 -1
  197. package/dist/types/components/file-dropzone/file-dropzone.d.ts +1 -1
  198. package/dist/types/components/file-input/file-input.d.ts +1 -1
  199. package/dist/types/components/header/header.d.ts +1 -1
  200. package/dist/types/components/help/help.d.ts +1 -1
  201. package/dist/types/components/helper-line/helper-line.d.ts +1 -1
  202. package/dist/types/components/hotkey/format-display-token.d.ts +15 -0
  203. package/dist/types/components/hotkey/hotkey.d.ts +27 -0
  204. package/dist/types/components/info-tile/info-tile.d.ts +1 -1
  205. package/dist/types/components/linear-progress/linear-progress.d.ts +1 -1
  206. package/dist/types/components/list/list.d.ts +1 -1
  207. package/dist/types/components/list-item/menu-item-meta/menu-item-meta.d.ts +8 -0
  208. package/dist/types/components/menu/menu.d.ts +14 -1
  209. package/dist/types/components/menu/menu.types.d.ts +14 -0
  210. package/dist/types/components/select/select.d.ts +1 -1
  211. package/dist/types/components/shortcut/shortcut.d.ts +1 -1
  212. package/dist/types/components/snackbar/snackbar.d.ts +1 -1
  213. package/dist/types/components/spinner/spinner.d.ts +1 -1
  214. package/dist/types/components/switch/switch.d.ts +1 -1
  215. package/dist/types/components/tab-bar/tab-bar.d.ts +1 -1
  216. package/dist/types/components/tab-panel/tab-panel.d.ts +1 -1
  217. package/dist/types/components/table/table.d.ts +1 -1
  218. package/dist/types/components.d.ts +211 -108
  219. package/package.json +1 -1
  220. package/dist/cjs/device-CDZCRYph.js +0 -30
  221. package/dist/esm/device-CY72JnWG.js +0 -26
  222. package/dist/lime-elements/p-3e9a1f2b.entry.js +0 -1
  223. package/dist/lime-elements/p-5178cc39.entry.js +0 -1
  224. package/dist/lime-elements/p-7afe6c3e.entry.js +0 -1
  225. package/dist/lime-elements/p-CY72JnWG.js +0 -1
@@ -11,6 +11,7 @@ var debounce = require('./debounce-DgDnRSlt.js');
11
11
  var component = require('./component-CFk7Dfoi.js');
12
12
  var ponyfill = require('./ponyfill-BgIFyUG5.js');
13
13
  var focusTriggerElement = require('./focus-trigger-element-NnpJ5nTp.js');
14
+ var hotkeys = require('./hotkeys-BtR8uxvl.js');
14
15
  var eq = require('./eq-B1KBAwmK.js');
15
16
  var util = require('./util-BOQp7lfZ.js');
16
17
  var component$1 = require('./component-y8swlNNR.js');
@@ -672,7 +673,7 @@ const InputField = class {
672
673
  if (ariaControls) {
673
674
  properties['aria-controls'] = ariaControls;
674
675
  }
675
- return (index.h(index.Host, { key: '6427ea1655ab4fa9d07a2e5e4f8f1b4bad169065' }, index.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 }, index.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()));
676
+ return (index.h(index.Host, { key: 'be352ea1f105d4c3f77b567de32626488ea4a60b' }, index.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 }, index.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()));
676
677
  }
677
678
  valueWatcher(newValue) {
678
679
  if (!this.mdcTextField) {
@@ -2527,7 +2528,7 @@ const List = class {
2527
2528
  maxLinesSecondaryText = 1;
2528
2529
  }
2529
2530
  const html = this.listRenderer.render(this.items, this.config);
2530
- return (index.h(index.Host, { key: 'cc025328924cab9298919a2873ec1744aeed3dab', style: {
2531
+ return (index.h(index.Host, { key: 'cbe0fda77189118ad3515dc3c4ab02c6cd9bc58a', style: {
2531
2532
  '--maxLinesSecondaryText': `${maxLinesSecondaryText}`,
2532
2533
  } }, html));
2533
2534
  }
@@ -2635,6 +2636,35 @@ const Menu = class {
2635
2636
  * Clicking it navigates back from a sub-menu to the root menu.
2636
2637
  */
2637
2638
  this.rootItem = DEFAULT_ROOT_BREADCRUMBS_ITEM;
2639
+ this.shouldRestoreFocusOnClose = false;
2640
+ this.normalizedHotkeyCache = new Map();
2641
+ this.cachedSubMenuSource = null;
2642
+ this.cachedSubMenuItems = null;
2643
+ this.handleDocumentKeyDown = (event) => {
2644
+ if (event.key === keycodes.ESCAPE && this.open) {
2645
+ this.shouldRestoreFocusOnClose = true;
2646
+ }
2647
+ if (!this.open || event.defaultPrevented || event.repeat) {
2648
+ return;
2649
+ }
2650
+ if (this.isFromTextInput(event) && !this.hasModifier(event)) {
2651
+ return;
2652
+ }
2653
+ const pressedHotkey = hotkeys.hotkeyFromKeyboardEvent(event);
2654
+ if (!pressedHotkey) {
2655
+ return;
2656
+ }
2657
+ if (this.isReservedMenuHotkey(pressedHotkey)) {
2658
+ return;
2659
+ }
2660
+ const matchedItem = this.findMenuItemByHotkey(pressedHotkey);
2661
+ if (!matchedItem) {
2662
+ return;
2663
+ }
2664
+ event.stopPropagation();
2665
+ event.preventDefault();
2666
+ this.handleSelect(matchedItem);
2667
+ };
2638
2668
  this.renderLoader = () => {
2639
2669
  if (!this.loadingSubItems && !this.loading) {
2640
2670
  return;
@@ -2724,6 +2754,9 @@ const Menu = class {
2724
2754
  // Will change focus to breadcrumbs (if present) or the first/last item
2725
2755
  // in the dropdown list to enable selection with the keyboard
2726
2756
  this.handleInputKeyDown = (event) => {
2757
+ if (event.defaultPrevented) {
2758
+ return;
2759
+ }
2727
2760
  const isForwardTab = event.key === keycodes.TAB &&
2728
2761
  !event.altKey &&
2729
2762
  !event.metaKey &&
@@ -2890,10 +2923,14 @@ const Menu = class {
2890
2923
  }
2891
2924
  };
2892
2925
  this.onClose = () => {
2926
+ const restoreFocus = this.shouldRestoreFocusOnClose;
2927
+ this.shouldRestoreFocusOnClose = false;
2893
2928
  this.cancel.emit();
2894
2929
  this.open = false;
2895
2930
  this.currentSubMenu = null;
2896
- setTimeout(this.focusTrigger, 0);
2931
+ if (restoreFocus) {
2932
+ setTimeout(this.focusTrigger, 0);
2933
+ }
2897
2934
  };
2898
2935
  this.onTriggerClick = (event) => {
2899
2936
  event.stopPropagation();
@@ -3079,23 +3116,113 @@ const Menu = class {
3079
3116
  const cssProperties = this.getCssProperties();
3080
3117
  const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
3081
3118
  const menuSurfaceWidth = this.getMenuSurfaceWidth(cssProperties['--menu-surface-width']);
3082
- return (index.h("div", { key: '7769d71e01b3e7835fdec458a56858c10eb0c71a', class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, index.h("slot", { key: '800c993b63e1ae0fd94d1c984ffbfaef96eec627', ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), index.h("limel-portal", { key: 'cc4da9d70f09030f4c41567611b42dda8ad4403e', visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, index.h("limel-menu-surface", { key: '5bb2a262f66d2f9b7bcbe46009574daf5eddf589', 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: {
3119
+ return (index.h("div", { key: '720330cf7d07c491a5a9e58a2567896f5526c45a', class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, index.h("slot", { key: 'd3db72fa9e12bafbb039e6a94a1052edf64e060e', ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), index.h("limel-portal", { key: '591f97a745488fbff7eb8fc06b14d2f6e0d21fa6', visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, index.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: {
3083
3120
  'has-grid-layout': this.gridLayout,
3084
3121
  } }, this.renderSearchField(), this.renderBreadcrumb(), this.renderLoader(), this.renderEmptyMessage(), this.renderMenuList()))));
3085
3122
  }
3086
3123
  itemsWatcher() {
3087
3124
  this.clearSearch();
3125
+ this.normalizedHotkeyCache.clear();
3088
3126
  this.setFocus();
3089
3127
  }
3128
+ connectedCallback() {
3129
+ if (this.open) {
3130
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
3131
+ }
3132
+ }
3133
+ disconnectedCallback() {
3134
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
3135
+ }
3090
3136
  openWatcher(newValue) {
3091
3137
  const opened = newValue;
3092
3138
  if (opened) {
3139
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
3093
3140
  this.setFocus();
3094
3141
  }
3095
3142
  else {
3143
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
3096
3144
  this.clearSearch();
3097
3145
  }
3098
3146
  }
3147
+ isFromTextInput(event) {
3148
+ const path = typeof event.composedPath === 'function'
3149
+ ? event.composedPath()
3150
+ : [];
3151
+ for (const node of path) {
3152
+ if (!(node instanceof HTMLElement)) {
3153
+ continue;
3154
+ }
3155
+ if (node.isContentEditable) {
3156
+ return true;
3157
+ }
3158
+ const tagName = node.tagName;
3159
+ if (tagName === 'INPUT' ||
3160
+ tagName === 'TEXTAREA' ||
3161
+ tagName === 'SELECT') {
3162
+ return true;
3163
+ }
3164
+ }
3165
+ return false;
3166
+ }
3167
+ // Only Ctrl and Meta count as "real" modifiers for the text-input bypass.
3168
+ // Alt/Option is intentionally excluded because it is used for typing
3169
+ // special characters on international keyboards and macOS (e.g. Option+e
3170
+ // for é, AltGr+e for € on Windows). This means alt-only hotkeys like
3171
+ // "alt+x" will NOT fire while a text input (e.g. the search field) is
3172
+ // focused — only Ctrl/Meta combos will. AltGraph is also explicitly
3173
+ // rejected because Windows synthesizes ctrlKey=true for AltGr keypresses.
3174
+ hasModifier(event) {
3175
+ var _a;
3176
+ if ((_a = event.getModifierState) === null || _a === void 0 ? void 0 : _a.call(event, 'AltGraph')) {
3177
+ return false;
3178
+ }
3179
+ return event.ctrlKey || event.metaKey;
3180
+ }
3181
+ isReservedMenuHotkey(hotkey) {
3182
+ const tokens = hotkeys.tokenizeHotkeyString(hotkey);
3183
+ const key = tokens.at(-1);
3184
+ if (!key) {
3185
+ return false;
3186
+ }
3187
+ const hasModifiers = tokens.length > 1;
3188
+ if (hasModifiers) {
3189
+ return false;
3190
+ }
3191
+ return (key === 'arrowup' ||
3192
+ key === 'arrowdown' ||
3193
+ key === 'arrowleft' ||
3194
+ key === 'arrowright' ||
3195
+ key === 'tab' ||
3196
+ key === 'enter' ||
3197
+ key === 'space' ||
3198
+ key === 'escape');
3199
+ }
3200
+ findMenuItemByHotkey(pressedHotkey) {
3201
+ for (const item of this.visibleItems) {
3202
+ if (!this.isMenuItem(item) || item.disabled) {
3203
+ continue;
3204
+ }
3205
+ const rawHotkey = item.hotkey;
3206
+ if (!rawHotkey) {
3207
+ continue;
3208
+ }
3209
+ const normalized = this.getNormalizedHotkey(rawHotkey);
3210
+ if (normalized && normalized === pressedHotkey) {
3211
+ return item;
3212
+ }
3213
+ }
3214
+ return null;
3215
+ }
3216
+ getNormalizedHotkey(raw) {
3217
+ var _a;
3218
+ const cacheKey = raw.trim();
3219
+ if (this.normalizedHotkeyCache.has(cacheKey)) {
3220
+ return (_a = this.normalizedHotkeyCache.get(cacheKey)) !== null && _a !== void 0 ? _a : null;
3221
+ }
3222
+ const normalized = hotkeys.normalizeHotkeyString(cacheKey);
3223
+ this.normalizedHotkeyCache.set(cacheKey, normalized);
3224
+ return normalized;
3225
+ }
3099
3226
  getBreadcrumbsItems() {
3100
3227
  const breadCrumbItems = [];
3101
3228
  let currentItem = this.currentSubMenu;
@@ -3158,7 +3285,11 @@ const Menu = class {
3158
3285
  return this.searchResults;
3159
3286
  }
3160
3287
  else if (Array.isArray((_a = this.currentSubMenu) === null || _a === void 0 ? void 0 : _a.items)) {
3161
- return this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
3288
+ if (this.cachedSubMenuSource !== this.currentSubMenu) {
3289
+ this.cachedSubMenuSource = this.currentSubMenu;
3290
+ this.cachedSubMenuItems = this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
3291
+ }
3292
+ return this.cachedSubMenuItems;
3162
3293
  }
3163
3294
  return this.items;
3164
3295
  }
@@ -4662,12 +4793,15 @@ class MenuListRenderer {
4662
4793
  const hasSubMenu = this.hasSubItems(item);
4663
4794
  const hasMeta = hasSubMenu ||
4664
4795
  item.badge !== undefined ||
4665
- (!!('commandText' in item) && !!item.commandText);
4796
+ !!item.hotkey ||
4797
+ !!item.commandText;
4666
4798
  const primaryComponent = hasMeta
4667
4799
  ? {
4668
4800
  name: 'limel-menu-item-meta',
4669
4801
  props: {
4670
4802
  commandText: item.commandText,
4803
+ hotkey: item.hotkey,
4804
+ disabled: !!item.disabled,
4671
4805
  badge: item.badge,
4672
4806
  showChevron: hasSubMenu,
4673
4807
  },
@@ -4786,7 +4920,7 @@ const MenuList = class {
4786
4920
  iconSize: this.iconSize,
4787
4921
  };
4788
4922
  const html = this.MenuListRenderer.render(this.items, this.config);
4789
- return index.h("div", { key: 'a0d43ee28ff19b78b99ed0ec7fc0d1ff79f235e0', class: "mdc-menu mdc-menu-surface" }, html);
4923
+ return index.h("div", { key: '1c044c711555d155c5559f8b787a3bbad09b7526', class: "mdc-menu mdc-menu-surface" }, html);
4790
4924
  }
4791
4925
  itemsChanged() {
4792
4926
  setTimeout(() => {
@@ -4912,7 +5046,7 @@ const MenuSurface = class {
4912
5046
  'mdc-elevation-transition': true,
4913
5047
  'mdc-elevation--z4': true,
4914
5048
  };
4915
- return (index.h("div", { key: '0d834530b1abaa97c0443447ae573ff4eb000ea7', class: classList, tabindex: "-1" }, index.h("slot", { key: 'caea2ed90273cdacfd7e79ae2f2b5aff476dc7ed' })));
5049
+ return (index.h("div", { key: '254247a3cd25908f96e55028df567663dd4d736a', class: classList, tabindex: "-1" }, index.h("slot", { key: 'eb7d1042a28585242d212cf40a34018240cb0502' })));
4916
5050
  }
4917
5051
  get host() { return index.getElement(this); }
4918
5052
  };
@@ -4933,7 +5067,7 @@ const Spinner = class {
4933
5067
  this.limeBranded = false;
4934
5068
  }
4935
5069
  render() {
4936
- return (index.h(index.Host, { key: '2ea3c8e615b6f95452c1ce2f8d5eb9ee989b8612' }, index.h("svg", { key: 'd0ff66dbbf8f7fefa0c6a52cd51a7fca2abe0c4a', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
5070
+ return (index.h(index.Host, { key: '5d7275ec64f2e3b07c7e25065d8d115de772324e' }, index.h("svg", { key: '41e5110dc29d6112261bea4afbd8cffde213cde0', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
4937
5071
  }
4938
5072
  renderSpinner() {
4939
5073
  if (!this.limeBranded) {
@@ -32,7 +32,7 @@ const ButtonGroup = class {
32
32
  this.setSelectedButton();
33
33
  }
34
34
  render() {
35
- return (index.h(index.Host, { key: 'c8aa4d58a21bd6ef454b65c4858107c539716013', role: "radiogroup" }, this.value.map(this.renderButton)));
35
+ return (index.h(index.Host, { key: '2295d3bf146ae9d3aa44c4a4c3281ce1b72d8a63', role: "radiogroup" }, this.value.map(this.renderButton)));
36
36
  }
37
37
  renderButton(button) {
38
38
  // Prefix with 'b' because html IDs cannot start with a digit,
@@ -113,7 +113,7 @@ const Checkbox = class {
113
113
  this.destroyMDCInstances();
114
114
  }
115
115
  render() {
116
- return (index.h(checkbox_template.CheckboxTemplate, { key: '42d3d0c8905e8d0426482ac079fa1da76d713698', disabled: this.disabled || this.readonly, label: this.label, readonlyLabels: this.readonlyLabels, helperText: this.helperText, helperTextId: this.helperTextId, checked: this.checked || this.indeterminate, indeterminate: this.indeterminate, required: this.required, readonly: this.readonly, invalid: this.isInvalid(), onChange: this.onChange, id: this.id }));
116
+ return (index.h(checkbox_template.CheckboxTemplate, { key: '2a6a0bbfb8b740dccf629adda516b83fbfcfc23c', disabled: this.disabled || this.readonly, label: this.label, readonlyLabels: this.readonlyLabels, helperText: this.helperText, helperTextId: this.helperTextId, checked: this.checked || this.indeterminate, indeterminate: this.indeterminate, required: this.required, readonly: this.readonly, invalid: this.isInvalid(), onChange: this.onChange, id: this.id }));
117
117
  }
118
118
  get limelCheckbox() { return index.getElement(this); }
119
119
  static get watchers() { return {
@@ -558,7 +558,7 @@ const ChipSet = class {
558
558
  });
559
559
  }
560
560
  const value = this.getValue();
561
- return (index.h(index.Host, { key: 'aeacdecfe56e5ae0643bcee75891f62e461ee7bb' }, index.h("limel-notched-outline", { key: '1e88dc18ccdb62255def3bf02e0a6ead527d1dda', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid || this.isInvalid(), disabled: this.disabled, readonly: this.readonly, hasValue: !!((_a = this.value) === null || _a === void 0 ? void 0 : _a.length), hasLeadingIcon: !!this.leadingIcon, hasFloatingLabel: this.floatLabelAbove() }, index.h("div", Object.assign({ key: '5e2ecb42a2997dc4f0e944364d195e79b7ab2bc2', slot: "content" }, this.getContentProps(), { class: classes }), this.renderContent(value))), this.renderHelperLine()));
561
+ return (index.h(index.Host, { key: 'cc38b12787a887fa3cf6d54412d460fffdc10d37' }, index.h("limel-notched-outline", { key: '363ee1953a0880a987acbaeb75ad7682c03c26ec', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid || this.isInvalid(), disabled: this.disabled, readonly: this.readonly, hasValue: !!((_a = this.value) === null || _a === void 0 ? void 0 : _a.length), hasLeadingIcon: !!this.leadingIcon, hasFloatingLabel: this.floatLabelAbove() }, index.h("div", Object.assign({ key: 'c05be9685e36d5283791bf30aceb937f8da0c0a0', slot: "content" }, this.getContentProps(), { class: classes }), this.renderContent(value))), this.renderHelperLine()));
562
562
  }
563
563
  getContentProps() {
564
564
  if (this.type === 'input') {
@@ -43,7 +43,7 @@ const CircularProgress = class {
43
43
  };
44
44
  const currentPercentage = (this.value * PERCENT) / this.maxValue + '%';
45
45
  const value = Math.round(this.value * 10) / 10;
46
- return (index.h("div", { key: 'c7e8550434fbc3eb51d1d151308c340329829585', role: "progressbar", class: classList, "aria-label": "%", "aria-valuemin": "0", "aria-valuemax": this.maxValue, "aria-valuenow": this.value, style: { '--percentage': currentPercentage } }, this.renderPrefix(), index.h("span", { key: 'a8946c7ec9afc29dcc7824b9718016bd0364adca', class: "value" }, format.abbreviate(value), index.h("span", { key: '14942a3ca72723ab9fe3ccfa419fbfae926c31e7', class: "suffix" }, this.suffix))));
46
+ return (index.h("div", { key: 'b2de8450baa7722c2a362a41ea97de6b694bf6ba', role: "progressbar", class: classList, "aria-label": "%", "aria-valuemin": "0", "aria-valuemax": this.maxValue, "aria-valuenow": this.value, style: { '--percentage': currentPercentage } }, this.renderPrefix(), index.h("span", { key: 'e3fdb555dd58a1a18227659761e9ee9171050b79', class: "value" }, format.abbreviate(value), index.h("span", { key: 'a0d25b4e71beaf4993bb78e96eb2094020b5de52', class: "suffix" }, this.suffix))));
47
47
  }
48
48
  };
49
49
  CircularProgress.style = circularProgressCss();
@@ -14878,7 +14878,7 @@ const CodeEditor = class {
14878
14878
  'is-dark-mode': this.isDarkMode(),
14879
14879
  'is-light-mode': !this.isDarkMode(),
14880
14880
  };
14881
- return (index.h(index.Host, { key: 'fd59cdeb74135398c33210af68d6129820c586bd' }, this.renderCopyButton(), index.h("limel-notched-outline", { key: '41214ae1f04b85a9462f3b71cd03871a7fd0401d', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, index.h("div", { key: '4d5caf3e80e342af2b8ea54411b11348949babd1', slot: "content", class: classList })), this.renderHelperLine()));
14881
+ return (index.h(index.Host, { key: '648df79d8ea88a3f87028743197214b45f3708af' }, this.renderCopyButton(), index.h("limel-notched-outline", { key: '8ec590da7d7cfb0c313ae61ecf517f36e978a756', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, index.h("div", { key: '3fd86155267f590d9578ed673d56e1e2fe6ee7ce', slot: "content", class: classList })), this.renderHelperLine()));
14882
14882
  }
14883
14883
  forceRedraw() {
14884
14884
  // eslint-disable-next-line sonarjs/pseudo-random
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-BjHIBY-I.js');
4
4
  var randomString = require('./random-string-BTzDB2ee.js');
5
- var device = require('./device-CDZCRYph.js');
5
+ var device = require('./device-C9O7lYI9.js');
6
6
  require('./sv-jO-ewmqh.js');
7
7
  var moment = require('./moment-DCqC7BZP.js');
8
8
  var component = require('./component-CFk7Dfoi.js');
@@ -930,10 +930,10 @@ const Dialog = class {
930
930
  this.mdcDialog.destroy();
931
931
  }
932
932
  render() {
933
- return (index.h("div", { key: '590a7ad1dc1deeab0481f36b9aaeea0aca24d34f', class: {
933
+ return (index.h("div", { key: '748566bd65db98ee75a743a7deedc7d0c9f80a90', class: {
934
934
  'mdc-dialog': true,
935
935
  'full-screen': !!this.fullscreen,
936
- }, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, index.h("input", { key: 'f7a96d6e0f7086ac47791cb895bb78a296e23ec7', hidden: true, id: "initialFocusEl" }), index.h("div", { key: 'c0755b202346c3b6bcf257d94872c1fb81f49db5', class: "mdc-dialog__container" }, index.h("div", { key: '6ccc11dae44838539b2e1fa6a074c74a0b76364c', class: "mdc-dialog__surface" }, index.h("input", { key: 'ae6bdad52ac6e44f25fa0396797f0ec013d27ab9', type: "button", id: "initialFocusElement" }), this.renderHeading(), index.h("div", { key: '45e3b2e05bed5dc4c8039502b81ca2384821fe6f', class: "mdc-dialog__content", id: 'limel-dialog-content-' + this.id }, index.h("slot", { key: '64979e861d307be41993ace61a7b0c5a616a6e2c' })), this.renderFooter())), index.h("div", { key: '0b7c0e8c2d8f0cac26e926a685ba5c985db976f8', class: "mdc-dialog__scrim" })));
936
+ }, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, index.h("input", { key: '15d2c40108a2348f54066eab22d507c6a9b3eda9', hidden: true, id: "initialFocusEl" }), index.h("div", { key: 'f46ee440d02b257bde93273936ce1dfe8dc324ea', class: "mdc-dialog__container" }, index.h("div", { key: '9ba9919b2b880039ede217c0608d9f780d6ca770', class: "mdc-dialog__surface" }, index.h("input", { key: '07bb68ae4c7b8d91cb7f0fd02105738160bd9e8f', type: "button", id: "initialFocusElement" }), this.renderHeading(), index.h("div", { key: '1729cb0f7f442b3ee56272387de42b462926275c', class: "mdc-dialog__content", id: 'limel-dialog-content-' + this.id }, index.h("slot", { key: 'a5554b316a4e57700a2902ae4499f594045f267d' })), this.renderFooter())), index.h("div", { key: '85ecb0922ece938a5de20b804b6a2590f98032df', class: "mdc-dialog__scrim" })));
937
937
  }
938
938
  watchHandler(newValue, oldValue) {
939
939
  if (oldValue === newValue) {
@@ -229,7 +229,7 @@ const FileDropzone = class {
229
229
  };
230
230
  }
231
231
  render() {
232
- return (index.h(index.Host, { key: '70e5213cc5470868f2442b908d9ffd39466edbac', onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave }, index.h("slot", { key: '4d886da6bfad382dc9c579ad17ea73d62ccdf1d3' }), this.renderOnDragLayout()));
232
+ return (index.h(index.Host, { key: 'a66ef9c3d9a005567749b61967a63caa4496135a', onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave }, index.h("slot", { key: '7a770aa9f98365da4b83038662f04c0e9e5c20c6' }), this.renderOnDragLayout()));
233
233
  }
234
234
  };
235
235
  FileDropzone.style = fileDropzoneCss();
@@ -289,7 +289,7 @@ const FileInput = class {
289
289
  this.fileInput = this.element.shadowRoot.getElementById(this.fileInputId);
290
290
  }
291
291
  render() {
292
- return (index.h(index.Host, { key: '4ec87952fba90e1fff07a60b977edd1980e33738', onClick: this.handleClick, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown }, index.h("input", { key: '2fdc5fbb81294f85ad02a175b0720f53ad13c4f0', hidden: true, id: this.fileInputId, onChange: this.handleFileChange, type: "file", accept: this.accept, disabled: this.disabled, multiple: this.multiple }), index.h("slot", { key: 'd72890dd7c622c71e6b46217891d88f770607bda' })));
292
+ return (index.h(index.Host, { key: '62d72f49b1a71bef9c5b91c36f34f763a04d78e2', onClick: this.handleClick, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown }, index.h("input", { key: '72272f710f8ffb09eec2ace7409ab516ec4f80bd', hidden: true, id: this.fileInputId, onChange: this.handleFileChange, type: "file", accept: this.accept, disabled: this.disabled, multiple: this.multiple }), index.h("slot", { key: '7ecff23ba41d76a23a2b8a542f56044615cb8b24' })));
293
293
  }
294
294
  handleKeyDown(event) {
295
295
  if (event.code === 'Tab' ||
@@ -63,7 +63,7 @@ const File = class {
63
63
  };
64
64
  }
65
65
  render() {
66
- return (index.h(index.Host, { key: '09d8f61392d489c41a083edb516b680f481d7b55' }, index.h("limel-file-dropzone", { key: '36812196ad3a91ce98ec13df0e26927fbe67b4a4', disabled: this.disabled || this.readonly || !!this.value, accept: this.accept, onFilesSelected: this.handleNewFiles }, this.renderChipset()), this.renderDragAndDropTip()));
66
+ return (index.h(index.Host, { key: '4b91f02cff596bca5da1a635ce24d2bb8a5154e1' }, index.h("limel-file-dropzone", { key: 'c3636964ee41bd5396fe667cc983a74256845af5', disabled: this.disabled || this.readonly || !!this.value, accept: this.accept, onFilesSelected: this.handleNewFiles }, this.renderChipset()), this.renderDragAndDropTip()));
67
67
  }
68
68
  renderDragAndDropTip() {
69
69
  if (this.value || this.disabled || this.readonly) {
@@ -5,7 +5,7 @@ var translations = require('./translations-Bu_0fli7.js');
5
5
  var _commonjsHelpers = require('./_commonjsHelpers-BJu3ubxk.js');
6
6
  require('./sv-jO-ewmqh.js');
7
7
  var moment = require('./moment-DCqC7BZP.js');
8
- var device = require('./device-CDZCRYph.js');
8
+ var device = require('./device-C9O7lYI9.js');
9
9
  var eq = require('./eq-B1KBAwmK.js');
10
10
  var isArrayLike$1 = require('./isArrayLike-_dR1U5-Y.js');
11
11
  var isObject$1 = require('./isObject-B6Osvvqp.js');
@@ -15,7 +15,7 @@ const Header = class {
15
15
  this.subheadingDivider = '·';
16
16
  }
17
17
  render() {
18
- return (index.h(index.Host, { key: 'a15f9daaa43d8c03c79f30c2a9d543b97185ed6b' }, index.h("div", { key: 'f9142be782bd6c20605387073db02ede3acd1a2e', class: "information" }, this.renderIcon(), index.h("div", { key: 'a1919b8bd21f92aeae4be0c26822517780d0bfc1', class: "headings" }, index.h("h1", { key: '2c6b225fc76359fa6573b25f232a3530bec7508b', class: "heading", title: this.heading }, this.heading), index.h("h2", { key: '14be7addf9b4a3082dab7373381a8daa30530fa8', class: "subheading", title: this.subheading }, this.subheading, this.renderSupportingText()))), index.h("slot", { key: '27d8265622b327f77e893d5dc3e736a25d7b4da3', name: "actions" }, index.h("slot", { key: '03837c68e6f1ae38941702aef2ea6c74fa1b479d' }))));
18
+ return (index.h(index.Host, { key: '4a94e7808e3b295669faa4711d37f8d9ed50b006' }, index.h("div", { key: '7c02e31819ddac504b5c58b6200c00a621079990', class: "information" }, this.renderIcon(), index.h("div", { key: 'b38172e5332ee39476bd19f7ad4f0ce127cc30d6', class: "headings" }, index.h("h1", { key: '9ee1f899ba0f403a588e0dbca52d82c1c12e355e', class: "heading", title: this.heading }, this.heading), index.h("h2", { key: '49b81ef3a96a9c2f7fa27ec2d13a15907131624e', class: "subheading", title: this.subheading }, this.subheading, this.renderSupportingText()))), index.h("slot", { key: '29984270ca745ce430deef27704b9c63065c2964', name: "actions" }, index.h("slot", { key: '1c3b766dc1444a0255ea605359b25d148d25ba57' }))));
19
19
  }
20
20
  renderIcon() {
21
21
  var _a, _b, _c, _d, _e;
@@ -26,9 +26,9 @@ const HelpComponent = class {
26
26
  };
27
27
  }
28
28
  render() {
29
- return (index.h(index.Host, { key: 'df993a4485c405a756eb69ccbee5ab8ec616a6d3' }, index.h("limel-popover", { key: 'f4aab0006a23c83a1609f1c8e1b97f5d6f69b4b4', open: this.isOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, index.h("button", { key: 'a88ae28570d62668a4b34d3e334816bc665dc33e', slot: "trigger", type: "button", onClick: this.openPopover, class: {
29
+ return (index.h(index.Host, { key: 'a52d9b4c220e21005011449735b97599cffb542e' }, index.h("limel-popover", { key: '8b6690894351ec32f5b982ca5d3aeac7300f5576', open: this.isOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, index.h("button", { key: '98e5dc4abcff54df74b02c737e4889e17639ddc6', slot: "trigger", type: "button", onClick: this.openPopover, class: {
30
30
  'is-open': this.isOpen,
31
- } }, this.trigger), index.h("limel-help-content", { key: '32f146b00380d0de6529a7b6a4ab0bcb82b067d4', value: this.value, readMoreLink: this.readMoreLink }))));
31
+ } }, this.trigger), index.h("limel-help-content", { key: '10b2d483aa459403b3d922add805bf6f64ae66e3', value: this.value, readMoreLink: this.readMoreLink }))));
32
32
  }
33
33
  };
34
34
  HelpComponent.style = helpCss();
@@ -32,9 +32,9 @@ const HelperLine = class {
32
32
  };
33
33
  }
34
34
  render() {
35
- return (index.h(index.Host, { key: 'ca260d9f14bb76025f382964f3f24eafc25daeeb', tabIndex: -1, class: {
35
+ return (index.h(index.Host, { key: '8ef6eb3b3e372e5dc61af1424a88c1c342023d13', tabIndex: -1, class: {
36
36
  invalid: this.invalid,
37
- }, style: this.hasContent() ? {} : { display: 'none' }, "aria-hidden": !this.hasContent() }, index.h("div", { key: '3d24d9b80729945c7ebd3f1ecd4348afec77185b' }, this.renderHelperText(), this.renderCharacterCounter())));
37
+ }, style: this.hasContent() ? {} : { display: 'none' }, "aria-hidden": !this.hasContent() }, index.h("div", { key: '3b4e31c23f5964aabb67556e68bd1785c871d934' }, this.renderHelperText(), this.renderCharacterCounter())));
38
38
  }
39
39
  };
40
40
  HelperLine.style = helperLineCss();
@@ -86,7 +86,7 @@ const NotchedOutline = class {
86
86
  this.hasFloatingLabel = false;
87
87
  }
88
88
  render() {
89
- return (index.h("div", { key: 'b50040fa4388423e4a918aead75dc425c8b1b2f4', class: "limel-notched-outline" }, index.h("slot", { key: 'd8c2b975c3f82ec33dffd773b7461e28427f1dbe', name: "content" }), index.h("span", { key: '981dc0b50cf8de443fd70e25272819af2e91e4ac', class: "limel-notched-outline--outlines", "aria-hidden": "true" }, index.h("span", { key: 'b0f18a32926f2a1e308675911ac2cdcc8b8adb69', class: "limel-notched-outline--leading-outline" }), this.renderLabel(), index.h("span", { key: 'ac7812bc4b30d93b8cf73b49db14f51db8845d82', class: "limel-notched-outline--trailing-outline" }), this.renderEmptyReadonlyValue())));
89
+ return (index.h("div", { key: '5dd66f7356821043d750963f18ef8f39889e65cc', class: "limel-notched-outline" }, index.h("slot", { key: '1b2072f7acd112137188b570229470677458ace7', name: "content" }), index.h("span", { key: '3d1d04a75ff0459b53294a2b2bbb4f15192409cd', class: "limel-notched-outline--outlines", "aria-hidden": "true" }, index.h("span", { key: '9677d3b3bc1f37e954c3ab2907e98db8b9122466', class: "limel-notched-outline--leading-outline" }), this.renderLabel(), index.h("span", { key: '62a494be847b2181cdd00f20e50cffbbc121bfd2', class: "limel-notched-outline--trailing-outline" }), this.renderEmptyReadonlyValue())));
90
90
  }
91
91
  renderLabel() {
92
92
  if (!this.label) {
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-BjHIBY-I.js');
4
+ var hotkeys = require('./hotkeys-BtR8uxvl.js');
5
+ var device = require('./device-C9O7lYI9.js');
6
+
7
+ // Note: this function handles the same key aliases as `KEY_ALIASES` in
8
+ // `../../util/hotkeys.ts`, but maps them to display strings rather than
9
+ // canonical names. Keep both in sync when adding new aliases.
10
+ /**
11
+ * Maps a single hotkey token to its display representation.
12
+ *
13
+ * @param token - A single token from `tokenizeHotkeyString` (e.g. `"meta"`, `"k"`, `"+"`).
14
+ * @param isApple - Whether the current device is an Apple device.
15
+ * @returns The display string, whether it is a glyph (for styling),
16
+ * and a human-readable name for screen readers.
17
+ */
18
+ function formatDisplayToken(token, isApple) {
19
+ const trimmed = (token !== null && token !== void 0 ? token : '').trim();
20
+ if (!trimmed) {
21
+ return { display: '', isGlyph: false, ariaName: '' };
22
+ }
23
+ if (trimmed === '+') {
24
+ return { display: '+', isGlyph: false, ariaName: 'plus' };
25
+ }
26
+ const lower = trimmed.toLowerCase();
27
+ switch (lower) {
28
+ case 'meta':
29
+ case 'win':
30
+ case 'windows': {
31
+ return isApple
32
+ ? { display: '⌘', isGlyph: true, ariaName: 'Command' }
33
+ : { display: '⊞ Win', isGlyph: false, ariaName: 'Windows' };
34
+ }
35
+ case 'cmd':
36
+ case 'command': {
37
+ return { display: '⌘', isGlyph: true, ariaName: 'Command' };
38
+ }
39
+ case 'alt':
40
+ case 'option': {
41
+ return isApple
42
+ ? { display: '⌥', isGlyph: true, ariaName: 'Option' }
43
+ : { display: 'Alt', isGlyph: false, ariaName: 'Alt' };
44
+ }
45
+ case 'shift': {
46
+ return { display: '⇧', isGlyph: true, ariaName: 'Shift' };
47
+ }
48
+ case 'enter':
49
+ case 'return': {
50
+ return { display: '↩', isGlyph: true, ariaName: 'Enter' };
51
+ }
52
+ case 'tab': {
53
+ return { display: '⇥', isGlyph: true, ariaName: 'Tab' };
54
+ }
55
+ case 'delete':
56
+ case 'del':
57
+ case 'backspace': {
58
+ if (isApple) {
59
+ return { display: '⌫', isGlyph: true, ariaName: 'Delete' };
60
+ }
61
+ return lower === 'backspace'
62
+ ? {
63
+ display: 'Backspace',
64
+ isGlyph: false,
65
+ ariaName: 'Backspace',
66
+ }
67
+ : { display: 'Del', isGlyph: false, ariaName: 'Delete' };
68
+ }
69
+ case 'ctrl':
70
+ case 'control': {
71
+ return isApple
72
+ ? { display: '⌃', isGlyph: true, ariaName: 'Control' }
73
+ : { display: 'Ctrl', isGlyph: false, ariaName: 'Control' };
74
+ }
75
+ case 'escape':
76
+ case 'esc': {
77
+ return { display: 'Esc', isGlyph: false, ariaName: 'Escape' };
78
+ }
79
+ case 'space':
80
+ case 'spacebar': {
81
+ return { display: '␣', isGlyph: true, ariaName: 'Space' };
82
+ }
83
+ case 'arrowup':
84
+ case 'up': {
85
+ return { display: '↑', isGlyph: true, ariaName: 'Up' };
86
+ }
87
+ case 'arrowdown':
88
+ case 'down': {
89
+ return { display: '↓', isGlyph: true, ariaName: 'Down' };
90
+ }
91
+ case 'arrowleft':
92
+ case 'left': {
93
+ return { display: '←', isGlyph: true, ariaName: 'Left' };
94
+ }
95
+ case 'arrowright':
96
+ case 'right': {
97
+ return { display: '→', isGlyph: true, ariaName: 'Right' };
98
+ }
99
+ }
100
+ return { display: trimmed, isGlyph: false, ariaName: trimmed };
101
+ }
102
+
103
+ 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)}`;
104
+
105
+ const Hotkey = class {
106
+ constructor(hostRef) {
107
+ index.registerInstance(this, hostRef);
108
+ /**
109
+ * When `true`, the hotkey is rendered in a visually disabled state.
110
+ */
111
+ this.disabled = false;
112
+ }
113
+ componentWillLoad() {
114
+ this.isApple = device.isAppleDevice();
115
+ }
116
+ render() {
117
+ const parts = hotkeys.tokenizeHotkeyString(this.value);
118
+ const displayParts = parts.map((part) => formatDisplayToken(part, this.isApple));
119
+ const ariaLabel = displayParts
120
+ .map((p) => p.ariaName)
121
+ .filter(Boolean)
122
+ .join(' ');
123
+ return (index.h(index.Host, { key: 'ab1b9d31080740d19a4633c8c5bc92b02625c111', "aria-label": ariaLabel || undefined }, displayParts.map(({ display, isGlyph }, index$1) => (index.h("kbd", { key: `${parts[index$1]}-${index$1}`, class: isGlyph ? 'is-glyph' : undefined }, index.h("span", null, display))))));
124
+ }
125
+ };
126
+ Hotkey.style = hotkeyCss();
127
+
128
+ exports.limel_hotkey = Hotkey;
@@ -49,7 +49,7 @@ const IconButton = class {
49
49
  if (this.host.hasAttribute('tabindex')) {
50
50
  buttonAttributes.tabindex = this.host.getAttribute('tabindex');
51
51
  }
52
- return (index.h(index.Host, { key: '75991185b5994f4fffb56a03031cfc0b570a3de4', onClick: this.filterClickWhenDisabled }, index.h("button", Object.assign({ key: '608c0abc14322e8b8755c4af5137880bb419824d', disabled: this.disabled, id: this.tooltipId }, buttonAttributes), this.renderIcon(), this.renderTooltip(this.tooltipId))));
52
+ return (index.h(index.Host, { key: '0df3febef19dcdb72c7c7f3740090414b313be51', onClick: this.filterClickWhenDisabled }, index.h("button", Object.assign({ key: 'fd0d61e30789619c52cd6a71269602efc7065f8e', disabled: this.disabled, id: this.tooltipId }, buttonAttributes), this.renderIcon(), this.renderTooltip(this.tooltipId))));
53
53
  }
54
54
  renderIcon() {
55
55
  var _a, _b;
@@ -161,7 +161,7 @@ const Icon = class {
161
161
  this.loadIcon(this.name);
162
162
  }
163
163
  render() {
164
- return index.h("div", { key: '80c6844e64217d24e957368feafddc831b497b2f', class: "container" });
164
+ return index.h("div", { key: '23b5f2c90c98461f65c0bcdb291f9958e00ac353', class: "container" });
165
165
  }
166
166
  async loadIcon(name) {
167
167
  if (name === undefined || name === '') {
@@ -106,9 +106,9 @@ const InfoTile = class {
106
106
  this.checkProps((_d = this === null || this === void 0 ? void 0 : this.link) === null || _d === void 0 ? void 0 : _d.title);
107
107
  const link = this.disabled ? '#' : (_e = this.link) === null || _e === void 0 ? void 0 : _e.href;
108
108
  const rel = linkHelper.getRel((_f = this.link) === null || _f === void 0 ? void 0 : _f.target, (_g = this.link) === null || _g === void 0 ? void 0 : _g.rel);
109
- return (index.h(index.Host, { key: '57b632bbe5ba4171c118171cbb1d5c7c87550a53', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, class: { 'has-primary-slot-content': this.hasPrimarySlot } }, index.h("a", { key: 'aa3e1db51f262a204a4d0bf7fc025e067f608629', 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: {
109
+ return (index.h(index.Host, { key: '3754cadd6c7cf0ee99e0f5dc2234732126dcdc1e', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, class: { 'has-primary-slot-content': this.hasPrimarySlot } }, index.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: {
110
110
  'is-clickable': !!((_k = this.link) === null || _k === void 0 ? void 0 : _k.href) && !this.disabled,
111
- } }, this.renderIcon(), this.renderProgress(), index.h("slot", { key: '2f9643af8bfe88ff99eba045983081e9388ba688', name: "primary", onSlotchange: this.updateHasPrimarySlotContent }), index.h("div", { key: '9cf8b84d5f2376d36ba7dbae8e86cbb8e11fa390', class: "value-group" }, this.renderPrefix(), index.h("div", { key: 'c073080821cd0b4bd4340d6566688a10cd0acd5e', class: "value-and-suffix" }, this.renderValue(), this.renderSuffix()), this.renderSpinner()), this.renderLabel(), index.h("limel-3d-hover-effect-glow", { key: '5ac6fee4d62020b9dfe1232309de0a414d35d6e4' })), this.renderNotification()));
111
+ } }, this.renderIcon(), this.renderProgress(), index.h("slot", { key: '62e330f8b945d562b5ee4677a62ab21ec1b6defe', name: "primary", onSlotchange: this.updateHasPrimarySlotContent }), index.h("div", { key: 'de41a8bc66d7f706153188f84b96481dfa25f8f9', class: "value-group" }, this.renderPrefix(), index.h("div", { key: '8ae36080dadd6b4a7135c7280e51a88015f30fbc', class: "value-and-suffix" }, this.renderValue(), this.renderSuffix()), this.renderSpinner()), this.renderLabel(), index.h("limel-3d-hover-effect-glow", { key: '0221c5e66f2a30b60e619bc7d6fe35e66d1db653' })), this.renderNotification()));
112
112
  }
113
113
  checkProps(propValue) {
114
114
  return propValue ? propValue + ' ' : '';
@@ -134,9 +134,9 @@ const ListItemComponent = class {
134
134
  // also keep for `menuitem` for visual state consistency
135
135
  ariaProps['aria-selected'] = this.selected ? 'true' : 'false';
136
136
  }
137
- return (index.h(index.Host, Object.assign({ key: 'cc58d641c46fc21c81d9fbc6fbcd3a483aa7d803', role: this.getHostRole(), class: {
137
+ return (index.h(index.Host, Object.assign({ key: '4f769d4dc9bcf065f0891ae394efb8f2cb4e3cbe', role: this.getHostRole(), class: {
138
138
  'has-primary-component': !!((_a = this.primaryComponent) === null || _a === void 0 ? void 0 : _a.name),
139
- } }, ariaProps), this.renderRadioButton(), this.renderCheckbox(), this.renderIcon(), this.renderImage(), this.renderPrimaryComponent(), index.h("div", { key: '2d8f6496d714faf9f3bd59cc829459191d650dc7', class: "text" }, this.renderLabel(), this.renderDescription()), this.renderActionMenu(this.actions)));
139
+ } }, ariaProps), this.renderRadioButton(), this.renderCheckbox(), this.renderIcon(), this.renderImage(), this.renderPrimaryComponent(), index.h("div", { key: 'f3ae79f70d048a6541af55782a8a1956fd7338c5', class: "text" }, this.renderLabel(), this.renderDescription()), this.renderActionMenu(this.actions)));
140
140
  }
141
141
  /**
142
142
  * Returns a stable reference for the provided actions array to avoid
@@ -335,7 +335,7 @@ const Markdown = class {
335
335
  this.cleanupImageIntersectionObserver();
336
336
  }
337
337
  render() {
338
- return (index$1.h(index$1.Host, { key: '89f9536407969e0bb9dd206ca540dabee9c3eecf' }, index$1.h("div", { key: '373f17c2933a715a97f2854343c1d26d32a26a27', id: "markdown", ref: (el) => (this.rootElement = el) })));
338
+ return (index$1.h(index$1.Host, { key: 'd3c5e71466ad7fa2723a0a44bc6ba6742e597ca1' }, index$1.h("div", { key: 'ff45056e1a3ad465bdea9026b0c9674d911607a2', id: "markdown", ref: (el) => (this.rootElement = el) })));
339
339
  }
340
340
  setupImageIntersectionObserver() {
341
341
  if (this.lazyLoadImages) {