@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
@@ -1,4 +1,5 @@
1
1
  import { Host, h } from "@stencil/core";
2
+ import { normalizeHotkeyString } from "../../../util/hotkeys";
2
3
  /**
3
4
  * Meta content for menu list items
4
5
  *
@@ -11,15 +12,25 @@ import { Host, h } from "@stencil/core";
11
12
  */
12
13
  export class MenuItemMeta {
13
14
  constructor() {
15
+ /**
16
+ * Will be set to `true` when the menu item is disabled.
17
+ */
18
+ this.disabled = false;
14
19
  /**
15
20
  * Shows a submenu chevron to indicate nested items
16
21
  */
17
22
  this.showChevron = false;
18
23
  }
19
24
  render() {
20
- return (h(Host, { key: '9e84c6ecc29e50b5a4e871d646fb11539e5fe86f' }, this.renderCommandText(), this.renderBadge(), this.renderChevron()));
25
+ return (h(Host, { key: '4341b1cd34952fdd2dc40bc3c4b7eb909646d880' }, this.renderCommandText(), this.renderBadge(), this.renderChevron()));
21
26
  }
22
27
  renderCommandText() {
28
+ if (this.hotkey) {
29
+ const hotkey = normalizeHotkeyString(this.hotkey);
30
+ if (hotkey) {
31
+ return h("limel-hotkey", { value: hotkey, disabled: this.disabled });
32
+ }
33
+ }
23
34
  if (!this.commandText) {
24
35
  return;
25
36
  }
@@ -67,9 +78,48 @@ export class MenuItemMeta {
67
78
  },
68
79
  "getter": false,
69
80
  "setter": false,
70
- "reflect": false,
81
+ "reflect": true,
71
82
  "attribute": "command-text"
72
83
  },
84
+ "hotkey": {
85
+ "type": "string",
86
+ "mutable": false,
87
+ "complexType": {
88
+ "original": "string",
89
+ "resolved": "string",
90
+ "references": {}
91
+ },
92
+ "required": false,
93
+ "optional": true,
94
+ "docs": {
95
+ "tags": [],
96
+ "text": "Hotkey to display. When provided, `commandText` is ignored."
97
+ },
98
+ "getter": false,
99
+ "setter": false,
100
+ "reflect": true,
101
+ "attribute": "hotkey"
102
+ },
103
+ "disabled": {
104
+ "type": "boolean",
105
+ "mutable": false,
106
+ "complexType": {
107
+ "original": "boolean",
108
+ "resolved": "boolean",
109
+ "references": {}
110
+ },
111
+ "required": false,
112
+ "optional": false,
113
+ "docs": {
114
+ "tags": [],
115
+ "text": "Will be set to `true` when the menu item is disabled."
116
+ },
117
+ "getter": false,
118
+ "setter": false,
119
+ "reflect": true,
120
+ "attribute": "disabled",
121
+ "defaultValue": "false"
122
+ },
73
123
  "badge": {
74
124
  "type": "any",
75
125
  "mutable": false,
@@ -119,7 +119,7 @@ export class Markdown {
119
119
  this.cleanupImageIntersectionObserver();
120
120
  }
121
121
  render() {
122
- return (h(Host, { key: '89f9536407969e0bb9dd206ca540dabee9c3eecf' }, h("div", { key: '373f17c2933a715a97f2854343c1d26d32a26a27', id: "markdown", ref: (el) => (this.rootElement = el) })));
122
+ return (h(Host, { key: 'd3c5e71466ad7fa2723a0a44bc6ba6742e597ca1' }, h("div", { key: 'ff45056e1a3ad465bdea9026b0c9674d911607a2', id: "markdown", ref: (el) => (this.rootElement = el) })));
123
123
  }
124
124
  setupImageIntersectionObserver() {
125
125
  if (this.lazyLoadImages) {
@@ -1,8 +1,9 @@
1
1
  import { h, } from "@stencil/core";
2
2
  import { createRandomString } from "../../util/random-string";
3
3
  import { zipObject, isFunction } from "lodash-es";
4
- import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, TAB, } from "../../util/keycodes";
4
+ import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ESCAPE, TAB, } from "../../util/keycodes";
5
5
  import { focusTriggerElement } from "../../util/focus-trigger-element";
6
+ import { hotkeyFromKeyboardEvent, normalizeHotkeyString, tokenizeHotkeyString, } from "../../util/hotkeys";
6
7
  const DEFAULT_ROOT_BREADCRUMBS_ITEM = {
7
8
  text: '',
8
9
  icon: {
@@ -20,13 +21,14 @@ const DEFAULT_ROOT_BREADCRUMBS_ITEM = {
20
21
  * @exampleComponent limel-example-menu-icons
21
22
  * @exampleComponent limel-example-menu-badge-icons
22
23
  * @exampleComponent limel-example-menu-grid
23
- * @exampleComponent limel-example-menu-hotkeys
24
24
  * @exampleComponent limel-example-menu-secondary-text
25
25
  * @exampleComponent limel-example-menu-notification
26
26
  * @exampleComponent limel-example-menu-sub-menus
27
27
  * @exampleComponent limel-example-menu-sub-menu-lazy-loading
28
28
  * @exampleComponent limel-example-menu-sub-menu-lazy-loading-infinite
29
29
  * @exampleComponent limel-example-menu-searchable
30
+ * @exampleComponent limel-example-menu-hotkeys
31
+ * @exampleComponent limel-example-menu-searchable-hotkeys
30
32
  * @exampleComponent limel-example-menu-composite
31
33
  */
32
34
  export class Menu {
@@ -75,6 +77,35 @@ export class Menu {
75
77
  * Clicking it navigates back from a sub-menu to the root menu.
76
78
  */
77
79
  this.rootItem = DEFAULT_ROOT_BREADCRUMBS_ITEM;
80
+ this.shouldRestoreFocusOnClose = false;
81
+ this.normalizedHotkeyCache = new Map();
82
+ this.cachedSubMenuSource = null;
83
+ this.cachedSubMenuItems = null;
84
+ this.handleDocumentKeyDown = (event) => {
85
+ if (event.key === ESCAPE && this.open) {
86
+ this.shouldRestoreFocusOnClose = true;
87
+ }
88
+ if (!this.open || event.defaultPrevented || event.repeat) {
89
+ return;
90
+ }
91
+ if (this.isFromTextInput(event) && !this.hasModifier(event)) {
92
+ return;
93
+ }
94
+ const pressedHotkey = hotkeyFromKeyboardEvent(event);
95
+ if (!pressedHotkey) {
96
+ return;
97
+ }
98
+ if (this.isReservedMenuHotkey(pressedHotkey)) {
99
+ return;
100
+ }
101
+ const matchedItem = this.findMenuItemByHotkey(pressedHotkey);
102
+ if (!matchedItem) {
103
+ return;
104
+ }
105
+ event.stopPropagation();
106
+ event.preventDefault();
107
+ this.handleSelect(matchedItem);
108
+ };
78
109
  this.renderLoader = () => {
79
110
  if (!this.loadingSubItems && !this.loading) {
80
111
  return;
@@ -164,6 +195,9 @@ export class Menu {
164
195
  // Will change focus to breadcrumbs (if present) or the first/last item
165
196
  // in the dropdown list to enable selection with the keyboard
166
197
  this.handleInputKeyDown = (event) => {
198
+ if (event.defaultPrevented) {
199
+ return;
200
+ }
167
201
  const isForwardTab = event.key === TAB &&
168
202
  !event.altKey &&
169
203
  !event.metaKey &&
@@ -330,10 +364,14 @@ export class Menu {
330
364
  }
331
365
  };
332
366
  this.onClose = () => {
367
+ const restoreFocus = this.shouldRestoreFocusOnClose;
368
+ this.shouldRestoreFocusOnClose = false;
333
369
  this.cancel.emit();
334
370
  this.open = false;
335
371
  this.currentSubMenu = null;
336
- setTimeout(this.focusTrigger, 0);
372
+ if (restoreFocus) {
373
+ setTimeout(this.focusTrigger, 0);
374
+ }
337
375
  };
338
376
  this.onTriggerClick = (event) => {
339
377
  event.stopPropagation();
@@ -519,23 +557,113 @@ export class Menu {
519
557
  const cssProperties = this.getCssProperties();
520
558
  const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
521
559
  const menuSurfaceWidth = this.getMenuSurfaceWidth(cssProperties['--menu-surface-width']);
522
- return (h("div", { key: '7769d71e01b3e7835fdec458a56858c10eb0c71a', class: "mdc-menu-surface--anchor", onClick: this.onTriggerClick }, h("slot", { key: '800c993b63e1ae0fd94d1c984ffbfaef96eec627', ref: this.setTriggerRef, name: "trigger" }), this.renderNotificationBadge(), h("limel-portal", { key: 'cc4da9d70f09030f4c41567611b42dda8ad4403e', visible: this.open, containerId: this.portalId, openDirection: this.openDirection, position: "absolute", containerStyle: { 'z-index': dropdownZIndex } }, 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: {
560
+ 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: {
523
561
  'has-grid-layout': this.gridLayout,
524
562
  } }, this.renderSearchField(), this.renderBreadcrumb(), this.renderLoader(), this.renderEmptyMessage(), this.renderMenuList()))));
525
563
  }
526
564
  itemsWatcher() {
527
565
  this.clearSearch();
566
+ this.normalizedHotkeyCache.clear();
528
567
  this.setFocus();
529
568
  }
569
+ connectedCallback() {
570
+ if (this.open) {
571
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
572
+ }
573
+ }
574
+ disconnectedCallback() {
575
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
576
+ }
530
577
  openWatcher(newValue) {
531
578
  const opened = newValue;
532
579
  if (opened) {
580
+ document.addEventListener('keydown', this.handleDocumentKeyDown, true);
533
581
  this.setFocus();
534
582
  }
535
583
  else {
584
+ document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
536
585
  this.clearSearch();
537
586
  }
538
587
  }
588
+ isFromTextInput(event) {
589
+ const path = typeof event.composedPath === 'function'
590
+ ? event.composedPath()
591
+ : [];
592
+ for (const node of path) {
593
+ if (!(node instanceof HTMLElement)) {
594
+ continue;
595
+ }
596
+ if (node.isContentEditable) {
597
+ return true;
598
+ }
599
+ const tagName = node.tagName;
600
+ if (tagName === 'INPUT' ||
601
+ tagName === 'TEXTAREA' ||
602
+ tagName === 'SELECT') {
603
+ return true;
604
+ }
605
+ }
606
+ return false;
607
+ }
608
+ // Only Ctrl and Meta count as "real" modifiers for the text-input bypass.
609
+ // Alt/Option is intentionally excluded because it is used for typing
610
+ // special characters on international keyboards and macOS (e.g. Option+e
611
+ // for é, AltGr+e for € on Windows). This means alt-only hotkeys like
612
+ // "alt+x" will NOT fire while a text input (e.g. the search field) is
613
+ // focused — only Ctrl/Meta combos will. AltGraph is also explicitly
614
+ // rejected because Windows synthesizes ctrlKey=true for AltGr keypresses.
615
+ hasModifier(event) {
616
+ var _a;
617
+ if ((_a = event.getModifierState) === null || _a === void 0 ? void 0 : _a.call(event, 'AltGraph')) {
618
+ return false;
619
+ }
620
+ return event.ctrlKey || event.metaKey;
621
+ }
622
+ isReservedMenuHotkey(hotkey) {
623
+ const tokens = tokenizeHotkeyString(hotkey);
624
+ const key = tokens.at(-1);
625
+ if (!key) {
626
+ return false;
627
+ }
628
+ const hasModifiers = tokens.length > 1;
629
+ if (hasModifiers) {
630
+ return false;
631
+ }
632
+ return (key === 'arrowup' ||
633
+ key === 'arrowdown' ||
634
+ key === 'arrowleft' ||
635
+ key === 'arrowright' ||
636
+ key === 'tab' ||
637
+ key === 'enter' ||
638
+ key === 'space' ||
639
+ key === 'escape');
640
+ }
641
+ findMenuItemByHotkey(pressedHotkey) {
642
+ for (const item of this.visibleItems) {
643
+ if (!this.isMenuItem(item) || item.disabled) {
644
+ continue;
645
+ }
646
+ const rawHotkey = item.hotkey;
647
+ if (!rawHotkey) {
648
+ continue;
649
+ }
650
+ const normalized = this.getNormalizedHotkey(rawHotkey);
651
+ if (normalized && normalized === pressedHotkey) {
652
+ return item;
653
+ }
654
+ }
655
+ return null;
656
+ }
657
+ getNormalizedHotkey(raw) {
658
+ var _a;
659
+ const cacheKey = raw.trim();
660
+ if (this.normalizedHotkeyCache.has(cacheKey)) {
661
+ return (_a = this.normalizedHotkeyCache.get(cacheKey)) !== null && _a !== void 0 ? _a : null;
662
+ }
663
+ const normalized = normalizeHotkeyString(cacheKey);
664
+ this.normalizedHotkeyCache.set(cacheKey, normalized);
665
+ return normalized;
666
+ }
539
667
  getBreadcrumbsItems() {
540
668
  const breadCrumbItems = [];
541
669
  let currentItem = this.currentSubMenu;
@@ -598,7 +726,11 @@ export class Menu {
598
726
  return this.searchResults;
599
727
  }
600
728
  else if (Array.isArray((_a = this.currentSubMenu) === null || _a === void 0 ? void 0 : _a.items)) {
601
- return this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
729
+ if (this.cachedSubMenuSource !== this.currentSubMenu) {
730
+ this.cachedSubMenuSource = this.currentSubMenu;
731
+ this.cachedSubMenuItems = this.currentSubMenu.items.map((item) => (Object.assign(Object.assign({}, item), { parentItem: this.currentSubMenu })));
732
+ }
733
+ return this.cachedSubMenuItems;
602
734
  }
603
735
  return this.items;
604
736
  }
@@ -59,12 +59,15 @@ export class MenuListRenderer {
59
59
  const hasSubMenu = this.hasSubItems(item);
60
60
  const hasMeta = hasSubMenu ||
61
61
  item.badge !== undefined ||
62
- (!!('commandText' in item) && !!item.commandText);
62
+ !!item.hotkey ||
63
+ !!item.commandText;
63
64
  const primaryComponent = hasMeta
64
65
  ? {
65
66
  name: 'limel-menu-item-meta',
66
67
  props: {
67
68
  commandText: item.commandText,
69
+ hotkey: item.hotkey,
70
+ disabled: !!item.disabled,
68
71
  badge: item.badge,
69
72
  showChevron: hasSubMenu,
70
73
  },
@@ -88,7 +88,7 @@ export class MenuList {
88
88
  iconSize: this.iconSize,
89
89
  };
90
90
  const html = this.MenuListRenderer.render(this.items, this.config);
91
- return h("div", { key: 'a0d43ee28ff19b78b99ed0ec7fc0d1ff79f235e0', class: "mdc-menu mdc-menu-surface" }, html);
91
+ return h("div", { key: '1c044c711555d155c5559f8b787a3bbad09b7526', class: "mdc-menu mdc-menu-surface" }, html);
92
92
  }
93
93
  itemsChanged() {
94
94
  setTimeout(() => {
@@ -105,7 +105,7 @@ export class MenuSurface {
105
105
  'mdc-elevation-transition': true,
106
106
  'mdc-elevation--z4': true,
107
107
  };
108
- return (h("div", { key: '0d834530b1abaa97c0443447ae573ff4eb000ea7', class: classList, tabindex: "-1" }, h("slot", { key: 'caea2ed90273cdacfd7e79ae2f2b5aff476dc7ed' })));
108
+ return (h("div", { key: '254247a3cd25908f96e55028df567663dd4d736a', class: classList, tabindex: "-1" }, h("slot", { key: 'eb7d1042a28585242d212cf40a34018240cb0502' })));
109
109
  }
110
110
  static get is() { return "limel-menu-surface"; }
111
111
  static get encapsulation() { return "shadow"; }
@@ -59,7 +59,7 @@ export class NotchedOutline {
59
59
  this.hasFloatingLabel = false;
60
60
  }
61
61
  render() {
62
- 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())));
62
+ 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())));
63
63
  }
64
64
  renderLabel() {
65
65
  if (!this.label) {
@@ -188,7 +188,7 @@ export class Picker {
188
188
  props.maxItems = 1;
189
189
  }
190
190
  return [
191
- 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)),
191
+ 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)),
192
192
  this.renderDropdown(),
193
193
  ];
194
194
  }
@@ -117,17 +117,17 @@ export class Popover {
117
117
  document.addEventListener('click', this.globalClickListener, {
118
118
  capture: true,
119
119
  });
120
- document.addEventListener('keyup', this.handleGlobalKeyPress);
120
+ document.addEventListener('keydown', this.handleGlobalKeyPress);
121
121
  }
122
122
  else {
123
123
  document.removeEventListener('click', this.globalClickListener);
124
- document.removeEventListener('keyup', this.handleGlobalKeyPress);
124
+ document.removeEventListener('keydown', this.handleGlobalKeyPress);
125
125
  }
126
126
  }
127
127
  render() {
128
128
  const cssProperties = this.getCssProperties();
129
129
  const popoverZIndex = getComputedStyle(this.host).getPropertyValue('--popover-z-index');
130
- return (h("div", { key: '862c9700bce5d7a3f55b20cb4ef8eb8346e62a25', class: "trigger-anchor" }, h("slot", { key: '08dd9ac01930db903dba46c15e25d00727f251ff', name: "trigger", ref: this.setTriggerRef }), h("limel-portal", { key: 'bc03a58425d52d5d7447a5ed1308ee51c51480b5', visible: this.open, containerId: this.portalId, containerStyle: { 'z-index': popoverZIndex }, openDirection: this.openDirection }, h("limel-popover-surface", { key: 'a9b117aee79359fa1f2800b914aed8ed8ab2a203', contentCollection: this.host.children, style: cssProperties }))));
130
+ 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 }))));
131
131
  }
132
132
  globalClickListener(event) {
133
133
  const element = event.target;
@@ -135,7 +135,7 @@ export class Popover {
135
135
  if (this.open && !clickedInside) {
136
136
  event.stopPropagation();
137
137
  event.preventDefault();
138
- this.requestCloseAndRestoreFocus();
138
+ this.close.emit();
139
139
  }
140
140
  }
141
141
  getCssProperties() {
@@ -8,7 +8,7 @@ export class PopoverSurface {
8
8
  this.appendElement();
9
9
  }
10
10
  render() {
11
- return h("div", { key: '553798a32efa190cbceb65aec00b56bfb5eb25f7', class: "limel-popover-surface", tabindex: "0" });
11
+ return h("div", { key: '72e73b254be6cebbd27332329b10a58210ae0352', class: "limel-popover-surface", tabindex: "0" });
12
12
  }
13
13
  appendElement() {
14
14
  const portalContainer = this.host.shadowRoot.querySelector('.limel-popover-surface');
@@ -120,7 +120,7 @@ export class Portal {
120
120
  }
121
121
  }
122
122
  render() {
123
- return h("slot", { key: 'e41cbd7a44b0e55525f9e99d056cc9ab627082d0' });
123
+ return h("slot", { key: 'd6ed0d276afec19ba5ffd4d6a6fcf96937127d6a' });
124
124
  }
125
125
  onVisible() {
126
126
  if (!this.container && this.visible) {
@@ -37,7 +37,7 @@ export class RadioButtonGroup {
37
37
  };
38
38
  }
39
39
  render() {
40
- return (h("limel-list", { key: 'f6aca37c9b00f4f92b1a048f8d7d0dd86e6f8c1f', items: this.createItems(), type: "radio", badgeIcons: this.badgeIcons, maxLinesSecondaryText: this.maxLinesSecondaryText, onChange: this.handleChange }));
40
+ return (h("limel-list", { key: 'd42e6342d4fd79d34cb2c6a9d25d3dfe577e9a99', items: this.createItems(), type: "radio", badgeIcons: this.badgeIcons, maxLinesSecondaryText: this.maxLinesSecondaryText, onChange: this.handleChange }));
41
41
  }
42
42
  createItems() {
43
43
  return this.items.map((option) => {
@@ -31,12 +31,12 @@ import { Host, h } from "@stencil/core";
31
31
  */
32
32
  export class RadioButtonComponent {
33
33
  render() {
34
- return (h(Host, { key: '09013c710b49de8c6aa1b3b0342add87ee69230b', class: {
34
+ return (h(Host, { key: '64623e09534c5b4e457029cbed4865d97d3cc19e', class: {
35
35
  'boolean-input': true,
36
36
  'radio-button': true,
37
37
  checked: this.checked,
38
38
  disabled: this.disabled,
39
- } }, 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)));
39
+ } }, 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)));
40
40
  }
41
41
  static get is() { return "limel-radio-button"; }
42
42
  static get originalStyleUrls() {
@@ -7,7 +7,7 @@ import { isMultiple } from "../../util/multiple";
7
7
  import { createRandomString } from "../../util/random-string";
8
8
  import { SelectTemplate, triggerIconColorWarning } from "./select.template";
9
9
  /**
10
- * @exampleComponent limel-example-select
10
+ * @exampleComponent limel-example-select-basic
11
11
  * @exampleComponent limel-example-select-with-icons
12
12
  * @exampleComponent limel-example-select-with-separators
13
13
  * @exampleComponent limel-example-select-with-secondary-text
@@ -104,7 +104,7 @@ export class Select {
104
104
  }
105
105
  render() {
106
106
  const dropdownZIndex = getComputedStyle(this.host).getPropertyValue('--dropdown-z-index');
107
- return (h(SelectTemplate, { key: '910cf9ba501b894f75553d65b4c41467743203af', 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() }));
107
+ 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() }));
108
108
  }
109
109
  watchOpen(newValue, oldValue) {
110
110
  if (this.checkValid) {
@@ -10,7 +10,7 @@ import { getMouseEventHandlers } from "../../util/3d-tilt-hover-effect";
10
10
  * However, it is possible to override that behavior, by specifying a `target`
11
11
  * for the `link` property
12
12
  *
13
- * @exampleComponent limel-example-shortcut
13
+ * @exampleComponent limel-example-shortcut-basic
14
14
  * @exampleComponent limel-example-shortcut-notification
15
15
  * @exampleComponent limel-example-shortcut-styling
16
16
  * @exampleComponent limel-example-shortcut-with-click-handler
@@ -56,7 +56,7 @@ export class Shortcut {
56
56
  render() {
57
57
  var _a, _b, _c, _d, _e;
58
58
  const rel = getRel((_a = this.link) === null || _a === void 0 ? void 0 : _a.target, (_b = this.link) === null || _b === void 0 ? void 0 : _b.rel);
59
- return (h(Host, { key: '4c999ffbf57f45f652d4bfa881b54e421a58df8f', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, h("a", { key: '5b7f3a5e43237b9a302bc63735b63a92c019eb2f', "aria-disabled": this.disabled, href: (_c = this.link) === null || _c === void 0 ? void 0 : _c.href, target: (_d = this.link) === null || _d === void 0 ? void 0 : _d.target, rel: rel, tabindex: "0", "aria-label": this.getAriaLabel(), title: (_e = this.link) === null || _e === void 0 ? void 0 : _e.title }, h("limel-icon", { key: '421faadecac1f5444ecab389574ad24cab6d7012', name: this.icon }), h("limel-3d-hover-effect-glow", { key: '0d932adbb6b7c343b3120d01e866b29d4c165543' })), this.renderLabel(), this.renderNotification()));
59
+ return (h(Host, { key: '68fa485e1c6552337de3e8304dcb14bd2056f3cc', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, h("a", { key: 'e83e54fcd7776e92938795a2f623e23df14985b0', "aria-disabled": this.disabled, href: (_c = this.link) === null || _c === void 0 ? void 0 : _c.href, target: (_d = this.link) === null || _d === void 0 ? void 0 : _d.target, rel: rel, tabindex: "0", "aria-label": this.getAriaLabel(), title: (_e = this.link) === null || _e === void 0 ? void 0 : _e.title }, h("limel-icon", { key: 'b1aa7fec058ef958c71b0a01fc3c1340e66a0422', name: this.icon }), h("limel-3d-hover-effect-glow", { key: '59132d5f6b5d99f38bba8143a2ff39166dce8648' })), this.renderLabel(), this.renderNotification()));
60
60
  }
61
61
  static get is() { return "limel-shortcut"; }
62
62
  static get encapsulation() { return "shadow"; }
@@ -243,7 +243,7 @@ export class Slider {
243
243
  if (this.disabled || this.readonly) {
244
244
  inputProps.disabled = true;
245
245
  }
246
- return (h(Host, { key: '770ec2fd58abc5cc34bae66a4b8ec4928c233327', class: this.getContainerClassList() }, h("limel-notched-outline", { key: 'a3cd421f2bdb9e10ebab358ffc18d7aac06068da', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, h("div", { key: 'a76ef62e54db1061e69078bf26b95554f9c59186', slot: "content" }, this.renderRangeContainer(), this.renderSliderContainer(inputProps))), this.renderHelperLine()));
246
+ return (h(Host, { key: '4d8742b0c40d836b9cab61988cafc42e90843e31', class: this.getContainerClassList() }, h("limel-notched-outline", { key: 'a775070fe819f15542ad3ba4a2a3839bcf392051', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, h("div", { key: 'f01ca4b8c2f71ef4ea7466aff58d821c484e20bc', slot: "content" }, this.renderRangeContainer(), this.renderSliderContainer(inputProps))), this.renderHelperLine()));
247
247
  }
248
248
  watchDisabled() {
249
249
  this.updateDisabledState();
@@ -26,7 +26,7 @@ const hideAnimationDuration = 300;
26
26
  * [Dialog](#/component/limel-dialog/) is a better choice.
27
27
  * :::
28
28
  *
29
- * @exampleComponent limel-example-snackbar
29
+ * @exampleComponent limel-example-snackbar-basic
30
30
  * @exampleComponent limel-example-snackbar-with-action
31
31
  * @exampleComponent limel-example-snackbar-with-changing-messages
32
32
  * @exampleComponent limel-example-snackbar-dismissible
@@ -121,14 +121,14 @@ export class Snackbar {
121
121
  }
122
122
  }
123
123
  render() {
124
- return (h("aside", { key: 'e07fbddded6a243a118dd9122db77e8286d5733e', popover: "manual", style: {
124
+ return (h("aside", { key: 'ea6276745563c7dd62d3061da0b1c6a41b3d1243', popover: "manual", style: {
125
125
  '--snackbar-timeout': `${Math.max(this.timeout || 0, 0)}ms`,
126
126
  '--snackbar-distance-to-top-edge': `${this.offset}px`,
127
127
  }, class: {
128
128
  open: this.open,
129
129
  'is-closing': this.closing,
130
130
  'limel-portal--parent': true,
131
- }, id: this.snackbarId, role: this.setAriaRoles(), "aria-atomic": this.open ? 'true' : undefined, "aria-relevant": this.open ? 'additions' : undefined }, h("div", { key: 'd672fadb9f690c99c60b0582cf371313278a9642', class: "surface" }, h("div", { key: '7502281b26c83fbac612d7896b25563255fd46e3', class: "label" }, this.message), this.renderActions(this.actionText), this.renderDismissButton(this.dismissible))));
131
+ }, id: this.snackbarId, role: this.setAriaRoles(), "aria-atomic": this.open ? 'true' : undefined, "aria-relevant": this.open ? 'additions' : undefined }, h("div", { key: 'd5c42448d07093b5df96a44a9bdf2842b4bf9a9f', class: "surface" }, h("div", { key: '93a9ea81726b0e309ae54ab23270562702b59104', class: "label" }, this.message), this.renderActions(this.actionText), this.renderDismissButton(this.dismissible))));
132
132
  }
133
133
  setAriaRoles() {
134
134
  if (!this.open) {
@@ -1,6 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  /**
3
- * @exampleComponent limel-example-spinner
3
+ * @exampleComponent limel-example-spinner-basic
4
4
  * @exampleComponent limel-example-spinner-color
5
5
  * @exampleComponent limel-example-spinner-size
6
6
  */
@@ -16,7 +16,7 @@ export class Spinner {
16
16
  this.limeBranded = false;
17
17
  }
18
18
  render() {
19
- return (h(Host, { key: '2ea3c8e615b6f95452c1ce2f8d5eb9ee989b8612' }, h("svg", { key: 'd0ff66dbbf8f7fefa0c6a52cd51a7fca2abe0c4a', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
19
+ return (h(Host, { key: '5d7275ec64f2e3b07c7e25065d8d115de772324e' }, h("svg", { key: '41e5110dc29d6112261bea4afbd8cffde213cde0', viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, this.renderSpinner())));
20
20
  }
21
21
  renderSpinner() {
22
22
  if (!this.limeBranded) {
@@ -55,9 +55,9 @@ export class SplitButton {
55
55
  };
56
56
  }
57
57
  render() {
58
- return (h(Host, { key: '7ec8239476acbb6a539f5c510c315834c3cc7d13', class: {
58
+ return (h(Host, { key: 'c36360c226a10f303158e13033451541d4e232fd', class: {
59
59
  'has-menu': this.items.length > 0,
60
- }, onClick: this.filterClickWhenDisabled }, h("limel-button", { key: 'cc1b19340e231dd0851c91eed4633bdc72b83124', label: this.label, primary: this.primary, icon: this.icon, disabled: this.disabled, loading: this.loading, loadingFailed: this.loadingFailed }), this.renderMenu()));
60
+ }, onClick: this.filterClickWhenDisabled }, h("limel-button", { key: 'bc63b91941bfb71d090a04ff7dc46cf97d0c18e7', label: this.label, primary: this.primary, icon: this.icon, disabled: this.disabled, loading: this.loading, loadingFailed: this.loadingFailed }), this.renderMenu()));
61
61
  }
62
62
  static get is() { return "limel-split-button"; }
63
63
  static get encapsulation() { return "shadow"; }
@@ -15,7 +15,7 @@ import { makeEnterClickable, removeEnterClickable, } from "../../util/make-enter
15
15
  * But there is an important difference between the two! Please read our guidelines about
16
16
  * [Switch vs. Checkbox](#/DesignGuidelines/switch-vs-checkbox.md/).
17
17
  *
18
- * @exampleComponent limel-example-switch
18
+ * @exampleComponent limel-example-switch-basic
19
19
  * @exampleComponent limel-example-switch-helper-text
20
20
  * @exampleComponent limel-example-switch-readonly
21
21
  */
@@ -78,7 +78,7 @@ export class Switch {
78
78
  removeEnterClickable(this.host);
79
79
  }
80
80
  render() {
81
- return (h(Host, { key: '3acdf2f3d34ab4cc8411638be9c8fe66a98b173d' }, this.readonly
81
+ return (h(Host, { key: '4b90d19763474c8a9f54364091797a3eb537fbc9' }, this.readonly
82
82
  ? this.renderReadonly()
83
83
  : this.renderInteractive(), this.renderHelperLine()));
84
84
  }
@@ -25,7 +25,7 @@ const OVERLAP_PERCENTAGE = 20;
25
25
  * A tab will never be removed or get disabled, even if there is no content under it.
26
26
  * :::
27
27
  *
28
- * @exampleComponent limel-example-tab-bar
28
+ * @exampleComponent limel-example-tab-bar-basic
29
29
  * @exampleComponent limel-example-tab-bar-with-dynamic-tab-width
30
30
  * @exampleComponent limel-example-tab-bar-with-equal-tab-width
31
31
  */
@@ -62,11 +62,11 @@ export class TabBar {
62
62
  this.tearDown();
63
63
  }
64
64
  render() {
65
- return (h("div", { key: '5c2300a224442e40e2dc2f6b49538f0688bc7a53', class: "mdc-tab-bar", role: "tablist" }, h("div", { key: 'bd4d9d8f3f302cf1592fab3cfd15d3316f132470', class: {
65
+ return (h("div", { key: '764d28d7417c3c2801491c54d6c5db36b022adda', class: "mdc-tab-bar", role: "tablist" }, h("div", { key: 'ee7a869e13069c2baac39b6abb8ac9f7353f8655', class: {
66
66
  'mdc-tab-scroller': true,
67
67
  'can-scroll-left': this.canScrollLeft,
68
68
  'can-scroll-right': this.canScrollRight,
69
- } }, h("div", { key: 'f48abfa3b0169e952befc47e8adf9574aee616af', class: "mdc-tab-scroller__scroll-area lime-hide-scrollbars" }, h("div", { key: '7322a7ab34b24822a1043ad3172f1b2f3efc6244', class: "mdc-tab-scroller__scroll-content" }, this.tabs.map(this.renderTab))), h("div", { key: '668ebaaf096d5926b17e1e1a50b0569c4e6d11c1', class: "scroll-fade left" }), h("div", { key: '02c3b8484f4467ece6e1a0617578b0967641a536', class: "scroll-button left" }, h("button", { key: '22bd6170b849aadb7a78b3f0fe2ae0213d7a6cb5', type: "button", tabindex: "-1", "aria-hidden": "true", disabled: !this.canScrollLeft, onClick: this.handleLeftScrollClick }, h("limel-icon", { key: '62f4b1fff0ab4fac4b8b379c2ab5bda44579e589', name: "angle_left" }))), h("div", { key: 'fe3e1014ffde25bea6f16731e0edc3ce280f321d', class: "scroll-fade right" }), h("div", { key: 'd79950639da735d25053272ae0a53f28d3ce233c', class: "scroll-button right" }, h("button", { key: '24b05b9fdae0479c15159253d7c785853db21b1d', type: "button", tabindex: "-1", "aria-hidden": "true", disabled: !this.canScrollRight, onClick: this.handleRightScrollClick }, h("limel-icon", { key: '5388965c9a27d888583ddc2d892ea5c3810500e4', name: "angle_right" }))))));
69
+ } }, h("div", { key: '55a955d4686181d2ded9ae24b525e863a9c9514c', class: "mdc-tab-scroller__scroll-area lime-hide-scrollbars" }, h("div", { key: '005a0150e3f03b9f8ca4facd767e7e05b17b5689', class: "mdc-tab-scroller__scroll-content" }, this.tabs.map(this.renderTab))), h("div", { key: '68956d9c7c9d17e9b572014e4e865e20680fbc98', class: "scroll-fade left" }), h("div", { key: '268c2616ff24edf6959931a324f9b242eec28a87', class: "scroll-button left" }, h("button", { key: '4a7f75826b7344ba6f88de784a2c9928c0779cd0', type: "button", tabindex: "-1", "aria-hidden": "true", disabled: !this.canScrollLeft, onClick: this.handleLeftScrollClick }, h("limel-icon", { key: '7d2e61ed0001a17a51aa71064f58f5c40692c4b7', name: "angle_left" }))), h("div", { key: 'dce1d143623bcdf84607428e205dc88d7b9a16d7', class: "scroll-fade right" }), h("div", { key: 'bc6f06e98950256a67748095999d676173871b2f', class: "scroll-button right" }, h("button", { key: '1b5aac1ebd4dea1d2eff4d88b154c62d87a353c1', type: "button", tabindex: "-1", "aria-hidden": "true", disabled: !this.canScrollRight, onClick: this.handleRightScrollClick }, h("limel-icon", { key: '022f900f20506369ffa79a045e144fcb213f4006', name: "angle_right" }))))));
70
70
  }
71
71
  tabsChanged(newTabs = [], oldTabs = []) {
72
72
  const newIds = newTabs.map((tab) => tab.id);
@@ -17,7 +17,7 @@ import { dispatchResizeEvent } from "../../util/dispatch-resize-event";
17
17
  *
18
18
  * @slot - Content to put inside the `limel-tab-panel`. Each slotted element
19
19
  * must have the `id` attribute equal to the id of the tab it belongs to.
20
- * @exampleComponent limel-example-tab-panel
20
+ * @exampleComponent limel-example-tab-panel-basic
21
21
  */
22
22
  export class TabPanel {
23
23
  constructor() {
@@ -56,7 +56,7 @@ export class TabPanel {
56
56
  this.tabs.forEach(this.setTabStatus);
57
57
  }
58
58
  render() {
59
- return (h(Host, { key: 'dbd02a89b1b4c383652157b6466c8c0f94ef1ede', onChangeTab: this.handleChangeTabs }, h("div", { key: 'ccee27da7513a7e1bc35f74f35d9139ed3c640d2', class: "tab-panel" }, h("limel-tab-bar", { key: '770e20bcd0567d1538709b2172ee16cc2f80db5f', tabs: this.tabs }), h("div", { key: '6a320ec4081da33674a9174bc90edaec223f52e8', class: "tab-content" }, h("slot", { key: 'e31d4491e2237283be6497fe64542d93003b6c63' })))));
59
+ return (h(Host, { key: '831b5534fb89f2892ede144fdbdd9747e4e8ef83', onChangeTab: this.handleChangeTabs }, h("div", { key: '7215d031f6558985ce6d7b3b5ee0d0d57b546e4b', class: "tab-panel" }, h("limel-tab-bar", { key: '4891c70a6aa19357a19c8a08c207ffae1ee1ce73', tabs: this.tabs }), h("div", { key: 'e682144fba03c72a220e57de4668f83690b54572', class: "tab-content" }, h("slot", { key: '192b28283d6aa49d27fbe31395728441e34cb252' })))));
60
60
  }
61
61
  setSlotElements() {
62
62
  const slot = this.getSlot();