@vuetify/nightly 3.9.0-beta.1-dev.2025-06-26 → 3.9.0-beta.1-dev.2025-07-02

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 (243) hide show
  1. package/CHANGELOG.md +105 -3
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +2814 -2754
  4. package/dist/json/importMap-labs.json +16 -12
  5. package/dist/json/importMap.json +174 -174
  6. package/dist/json/tags.json +20 -0
  7. package/dist/json/web-types.json +5362 -5196
  8. package/dist/vuetify-labs.cjs +796 -64
  9. package/dist/vuetify-labs.css +3440 -3189
  10. package/dist/vuetify-labs.d.ts +452 -206
  11. package/dist/vuetify-labs.esm.js +796 -65
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +796 -64
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +378 -40
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +3377 -3368
  18. package/dist/vuetify.d.ts +82 -62
  19. package/dist/vuetify.esm.js +378 -41
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +378 -40
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +312 -274
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VDataTable/VDataTableColumn.js +0 -1
  27. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  28. package/lib/components/VDataTable/VDataTableHeaders.js +5 -5
  29. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  30. package/lib/components/VDataTable/composables/sort.js +2 -1
  31. package/lib/components/VDataTable/composables/sort.js.map +1 -1
  32. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -2
  33. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  34. package/lib/components/VKbd/VKbd.css +14 -5
  35. package/lib/components/VKbd/VKbd.js.map +1 -1
  36. package/lib/components/VKbd/VKbd.scss +26 -0
  37. package/lib/components/VKbd/_variables.scss +12 -6
  38. package/lib/components/VKbd/index.js.map +1 -1
  39. package/lib/components/VOtpInput/VOtpInput.js +17 -14
  40. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  41. package/lib/components/VOverlay/locationStrategies.js +1 -1
  42. package/lib/components/VOverlay/locationStrategies.js.map +1 -1
  43. package/lib/components/VTextField/VTextField.js +1 -1
  44. package/lib/components/VTextField/VTextField.js.map +1 -1
  45. package/lib/composables/calendar.d.ts +0 -1
  46. package/lib/composables/calendar.js +6 -10
  47. package/lib/composables/calendar.js.map +1 -1
  48. package/lib/composables/date/adapters/vuetify.js +1 -1
  49. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  50. package/lib/composables/hotkey/hotkey-parsing.d.ts +15 -0
  51. package/lib/composables/hotkey/hotkey-parsing.js +154 -0
  52. package/lib/composables/hotkey/hotkey-parsing.js.map +1 -0
  53. package/lib/composables/hotkey/hotkey.d.ts +9 -0
  54. package/lib/composables/{hotkey.js → hotkey/hotkey.js} +31 -39
  55. package/lib/composables/hotkey/hotkey.js.map +1 -0
  56. package/lib/composables/hotkey/index.d.ts +1 -0
  57. package/lib/composables/hotkey/index.js +2 -0
  58. package/lib/composables/hotkey/index.js.map +1 -0
  59. package/lib/composables/hotkey/key-aliases.d.ts +14 -0
  60. package/lib/composables/hotkey/key-aliases.js +38 -0
  61. package/lib/composables/hotkey/key-aliases.js.map +1 -0
  62. package/lib/composables/icons.d.ts +11 -0
  63. package/lib/composables/icons.js.map +1 -1
  64. package/lib/composables/index.d.ts +1 -0
  65. package/lib/composables/index.js +1 -0
  66. package/lib/composables/index.js.map +1 -1
  67. package/lib/composables/virtual.js +1 -1
  68. package/lib/composables/virtual.js.map +1 -1
  69. package/lib/entry-bundler.js +1 -1
  70. package/lib/framework.d.ts +83 -62
  71. package/lib/framework.js +1 -1
  72. package/lib/iconsets/fa.js +12 -1
  73. package/lib/iconsets/fa.js.map +1 -1
  74. package/lib/iconsets/fa4.js +12 -1
  75. package/lib/iconsets/fa4.js.map +1 -1
  76. package/lib/iconsets/md.js +12 -1
  77. package/lib/iconsets/md.js.map +1 -1
  78. package/lib/iconsets/mdi-svg.js +12 -1
  79. package/lib/iconsets/mdi-svg.js.map +1 -1
  80. package/lib/iconsets/mdi.js +12 -1
  81. package/lib/iconsets/mdi.js.map +1 -1
  82. package/lib/labs/VCalendar/VCalendar.d.ts +33 -33
  83. package/lib/labs/VCalendar/VCalendar.js +9 -9
  84. package/lib/labs/VCalendar/VCalendar.js.map +1 -1
  85. package/lib/labs/VCalendar/VCalendarDay.d.ts +33 -33
  86. package/lib/labs/VCalendar/VCalendarDay.js +1 -1
  87. package/lib/labs/VCalendar/VCalendarDay.js.map +1 -1
  88. package/lib/labs/VCalendar/VCalendarInterval.d.ts +36 -36
  89. package/lib/labs/VCalendar/VCalendarInterval.js +9 -9
  90. package/lib/labs/VCalendar/VCalendarInterval.js.map +1 -1
  91. package/lib/labs/VCalendar/VCalendarIntervalEvent.d.ts +12 -12
  92. package/lib/labs/VCalendar/VCalendarIntervalEvent.js +1 -1
  93. package/lib/labs/VCalendar/VCalendarIntervalEvent.js.map +1 -1
  94. package/lib/labs/VCalendar/VCalendarMonthDay.d.ts +36 -36
  95. package/lib/labs/VCalendar/VCalendarMonthDay.js +4 -4
  96. package/lib/labs/VCalendar/VCalendarMonthDay.js.map +1 -1
  97. package/lib/labs/VHotkey/VHotkey.css +242 -0
  98. package/lib/labs/VHotkey/VHotkey.d.ts +387 -0
  99. package/lib/labs/VHotkey/VHotkey.js +432 -0
  100. package/lib/labs/VHotkey/VHotkey.js.map +1 -0
  101. package/lib/labs/VHotkey/VHotkey.scss +253 -0
  102. package/lib/labs/VHotkey/_variables.scss +43 -0
  103. package/lib/labs/VHotkey/index.d.ts +1 -0
  104. package/lib/labs/VHotkey/index.js +2 -0
  105. package/lib/labs/VHotkey/index.js.map +1 -0
  106. package/lib/labs/VIconBtn/VIconBtn.js +1 -0
  107. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  108. package/lib/labs/components.d.ts +1 -0
  109. package/lib/labs/components.js +1 -0
  110. package/lib/labs/components.js.map +1 -1
  111. package/lib/locale/af.d.ts +18 -0
  112. package/lib/locale/af.js +18 -0
  113. package/lib/locale/af.js.map +1 -1
  114. package/lib/locale/ar.d.ts +18 -0
  115. package/lib/locale/ar.js +18 -0
  116. package/lib/locale/ar.js.map +1 -1
  117. package/lib/locale/az.d.ts +18 -0
  118. package/lib/locale/az.js +18 -0
  119. package/lib/locale/az.js.map +1 -1
  120. package/lib/locale/bg.d.ts +18 -0
  121. package/lib/locale/bg.js +18 -0
  122. package/lib/locale/bg.js.map +1 -1
  123. package/lib/locale/ca.d.ts +18 -0
  124. package/lib/locale/ca.js +18 -0
  125. package/lib/locale/ca.js.map +1 -1
  126. package/lib/locale/ckb.d.ts +18 -0
  127. package/lib/locale/ckb.js +18 -0
  128. package/lib/locale/ckb.js.map +1 -1
  129. package/lib/locale/cs.d.ts +18 -0
  130. package/lib/locale/cs.js +18 -0
  131. package/lib/locale/cs.js.map +1 -1
  132. package/lib/locale/da.d.ts +18 -0
  133. package/lib/locale/da.js +18 -0
  134. package/lib/locale/da.js.map +1 -1
  135. package/lib/locale/de.d.ts +18 -0
  136. package/lib/locale/de.js +18 -0
  137. package/lib/locale/de.js.map +1 -1
  138. package/lib/locale/el.d.ts +18 -0
  139. package/lib/locale/el.js +18 -0
  140. package/lib/locale/el.js.map +1 -1
  141. package/lib/locale/en.d.ts +18 -0
  142. package/lib/locale/en.js +18 -0
  143. package/lib/locale/en.js.map +1 -1
  144. package/lib/locale/es.d.ts +18 -0
  145. package/lib/locale/es.js +18 -0
  146. package/lib/locale/es.js.map +1 -1
  147. package/lib/locale/et.d.ts +18 -0
  148. package/lib/locale/et.js +18 -0
  149. package/lib/locale/et.js.map +1 -1
  150. package/lib/locale/fa.d.ts +18 -0
  151. package/lib/locale/fa.js +18 -0
  152. package/lib/locale/fa.js.map +1 -1
  153. package/lib/locale/fi.d.ts +18 -0
  154. package/lib/locale/fi.js +18 -0
  155. package/lib/locale/fi.js.map +1 -1
  156. package/lib/locale/fr.d.ts +18 -0
  157. package/lib/locale/fr.js +18 -0
  158. package/lib/locale/fr.js.map +1 -1
  159. package/lib/locale/he.d.ts +18 -0
  160. package/lib/locale/he.js +18 -0
  161. package/lib/locale/he.js.map +1 -1
  162. package/lib/locale/hr.d.ts +18 -0
  163. package/lib/locale/hr.js +18 -0
  164. package/lib/locale/hr.js.map +1 -1
  165. package/lib/locale/hu.d.ts +18 -0
  166. package/lib/locale/hu.js +18 -0
  167. package/lib/locale/hu.js.map +1 -1
  168. package/lib/locale/id.d.ts +18 -0
  169. package/lib/locale/id.js +18 -0
  170. package/lib/locale/id.js.map +1 -1
  171. package/lib/locale/it.d.ts +18 -0
  172. package/lib/locale/it.js +18 -0
  173. package/lib/locale/it.js.map +1 -1
  174. package/lib/locale/ja.d.ts +18 -0
  175. package/lib/locale/ja.js +18 -0
  176. package/lib/locale/ja.js.map +1 -1
  177. package/lib/locale/km.d.ts +18 -0
  178. package/lib/locale/km.js +18 -0
  179. package/lib/locale/km.js.map +1 -1
  180. package/lib/locale/ko.d.ts +18 -0
  181. package/lib/locale/ko.js +18 -0
  182. package/lib/locale/ko.js.map +1 -1
  183. package/lib/locale/lt.d.ts +18 -0
  184. package/lib/locale/lt.js +18 -0
  185. package/lib/locale/lt.js.map +1 -1
  186. package/lib/locale/lv.d.ts +18 -0
  187. package/lib/locale/lv.js +18 -0
  188. package/lib/locale/lv.js.map +1 -1
  189. package/lib/locale/nl.d.ts +18 -0
  190. package/lib/locale/nl.js +18 -0
  191. package/lib/locale/nl.js.map +1 -1
  192. package/lib/locale/no.d.ts +18 -0
  193. package/lib/locale/no.js +18 -0
  194. package/lib/locale/no.js.map +1 -1
  195. package/lib/locale/pl.d.ts +18 -0
  196. package/lib/locale/pl.js +18 -0
  197. package/lib/locale/pl.js.map +1 -1
  198. package/lib/locale/pt.d.ts +18 -0
  199. package/lib/locale/pt.js +18 -0
  200. package/lib/locale/pt.js.map +1 -1
  201. package/lib/locale/ro.d.ts +18 -0
  202. package/lib/locale/ro.js +18 -0
  203. package/lib/locale/ro.js.map +1 -1
  204. package/lib/locale/ru.d.ts +18 -0
  205. package/lib/locale/ru.js +18 -0
  206. package/lib/locale/ru.js.map +1 -1
  207. package/lib/locale/sk.d.ts +18 -0
  208. package/lib/locale/sk.js +18 -0
  209. package/lib/locale/sk.js.map +1 -1
  210. package/lib/locale/sl.d.ts +18 -0
  211. package/lib/locale/sl.js +18 -0
  212. package/lib/locale/sl.js.map +1 -1
  213. package/lib/locale/sr-Cyrl.d.ts +18 -0
  214. package/lib/locale/sr-Cyrl.js +18 -0
  215. package/lib/locale/sr-Cyrl.js.map +1 -1
  216. package/lib/locale/sr-Latn.d.ts +18 -0
  217. package/lib/locale/sr-Latn.js +18 -0
  218. package/lib/locale/sr-Latn.js.map +1 -1
  219. package/lib/locale/sv.d.ts +18 -0
  220. package/lib/locale/sv.js +18 -0
  221. package/lib/locale/sv.js.map +1 -1
  222. package/lib/locale/th.d.ts +18 -0
  223. package/lib/locale/th.js +18 -0
  224. package/lib/locale/th.js.map +1 -1
  225. package/lib/locale/tr.d.ts +18 -0
  226. package/lib/locale/tr.js +18 -0
  227. package/lib/locale/tr.js.map +1 -1
  228. package/lib/locale/uk.d.ts +18 -0
  229. package/lib/locale/uk.js +18 -0
  230. package/lib/locale/uk.js.map +1 -1
  231. package/lib/locale/vi.d.ts +18 -0
  232. package/lib/locale/vi.js +18 -0
  233. package/lib/locale/vi.js.map +1 -1
  234. package/lib/locale/zh-Hans.d.ts +18 -0
  235. package/lib/locale/zh-Hans.js +18 -0
  236. package/lib/locale/zh-Hans.js.map +1 -1
  237. package/lib/locale/zh-Hant.d.ts +18 -0
  238. package/lib/locale/zh-Hant.js +18 -0
  239. package/lib/locale/zh-Hant.js.map +1 -1
  240. package/package.json +1 -1
  241. package/lib/components/VKbd/VKbd.sass +0 -15
  242. package/lib/composables/hotkey.d.ts +0 -9
  243. package/lib/composables/hotkey.js.map +0 -1
@@ -0,0 +1,432 @@
1
+ import { createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from "vue";
2
+ /**
3
+ * VHotkey Component
4
+ *
5
+ * Purpose: Renders keyboard shortcuts in a visually consistent and accessible way.
6
+ * This component handles the complex logic of displaying keyboard combinations
7
+ * across different platforms (Mac vs PC) and display modes (icons, symbols, text).
8
+ *
9
+ * Why it exists:
10
+ * - Provides consistent visual representation of keyboard shortcuts
11
+ * - Handles platform-specific key differences (Cmd vs Ctrl, Option vs Alt)
12
+ * - Supports multiple display modes for different design needs
13
+ * - Encapsulates complex key parsing and rendering logic
14
+ * - Used throughout the command palette for instruction display
15
+ *
16
+ * Key Mapping Structure:
17
+ * The keyMap uses a simple object structure where each key has:
18
+ * - `default`: Required configuration for all platforms
19
+ * - `mac`: Optional Mac-specific overrides
20
+ * Each config can specify `symbol`, `icon`, and `text` representations.
21
+ *
22
+ * Example:
23
+ * ```
24
+ * ctrl: {
25
+ * mac: { symbol: '⌃', icon: '$ctrl', text: 'Control' },
26
+ * default: { text: 'Ctrl', icon: '$ctrl' }
27
+ * }
28
+ * ```
29
+ */
30
+
31
+ // Styles
32
+ import "./VHotkey.css";
33
+
34
+ // Components
35
+ import { VIcon } from "../../components/VIcon/index.js";
36
+ import { VKbd } from "../../components/VKbd/index.js"; // Composables
37
+ import { makeBorderProps, useBorder } from "../../composables/border.js";
38
+ import { makeComponentProps } from "../../composables/component.js";
39
+ import { makeElevationProps, useElevation } from "../../composables/elevation.js";
40
+ import { splitKeyCombination, splitKeySequence } from "../../composables/hotkey/hotkey-parsing.js";
41
+ import { useLocale, useRtl } from "../../composables/locale.js";
42
+ import { makeRoundedProps, useRounded } from "../../composables/rounded.js";
43
+ import { makeThemeProps, provideTheme } from "../../composables/theme.js";
44
+ import { useVariant } from "../../composables/variant.js"; // Utilities
45
+ import { computed } from 'vue';
46
+ import { genericComponent, mergeDeep, propsFactory, useRender } from "../../util/index.js"; // Types
47
+ // Display mode types for different visual representations
48
+ // Extended variant type that includes our custom 'contained' variant
49
+ // Key display tuple: [mode, content] where content is string or IconValue
50
+ // Key tuple: [mode, content] where content is string or IconValue
51
+ function processKey(config, requestedMode, isMac) {
52
+ const keyCfg = isMac && config.mac ? config.mac : config.default;
53
+
54
+ // 1. Resolve the safest display mode for the current platform
55
+ const mode = (() => {
56
+ // Non-Mac platforms rarely use icons – prefer text
57
+ if (requestedMode === 'icon' && !isMac) return 'text';
58
+
59
+ // If the requested mode lacks an asset, fall back to text
60
+ if (requestedMode === 'icon' && !keyCfg.icon) return 'text';
61
+ if (requestedMode === 'symbol' && !keyCfg.symbol) return 'text';
62
+ return requestedMode;
63
+ })();
64
+
65
+ // 2. Pick value for the chosen mode, defaulting to text representation
66
+ let value = keyCfg[mode] ?? keyCfg.text;
67
+
68
+ // 3. Guard against icon tokens leaking into text mode (e.g. "$ctrl")
69
+ if (mode === 'text' && typeof value === 'string' && value.startsWith('$') && !value.startsWith('$vuetify.')) {
70
+ value = value.slice(1).toUpperCase(); // "$ctrl" → "CTRL"
71
+ }
72
+ return mode === 'icon' ? ['icon', value] : [mode, value];
73
+ }
74
+ export const hotkeyMap = {
75
+ ctrl: {
76
+ mac: {
77
+ symbol: '⌃',
78
+ icon: '$ctrl',
79
+ text: '$vuetify.hotkey.ctrl'
80
+ },
81
+ default: {
82
+ text: 'Ctrl'
83
+ }
84
+ },
85
+ meta: {
86
+ mac: {
87
+ symbol: '⌘',
88
+ icon: '$command',
89
+ text: '$vuetify.hotkey.command'
90
+ },
91
+ default: {
92
+ text: 'Ctrl'
93
+ }
94
+ },
95
+ cmd: {
96
+ mac: {
97
+ symbol: '⌘',
98
+ icon: '$command',
99
+ text: '$vuetify.hotkey.command'
100
+ },
101
+ default: {
102
+ text: 'Ctrl'
103
+ }
104
+ },
105
+ shift: {
106
+ mac: {
107
+ symbol: '⇧',
108
+ icon: '$shift',
109
+ text: '$vuetify.hotkey.shift'
110
+ },
111
+ default: {
112
+ text: 'Shift'
113
+ }
114
+ },
115
+ alt: {
116
+ mac: {
117
+ symbol: '⌥',
118
+ icon: '$alt',
119
+ text: '$vuetify.hotkey.option'
120
+ },
121
+ default: {
122
+ text: 'Alt'
123
+ }
124
+ },
125
+ enter: {
126
+ default: {
127
+ symbol: '↵',
128
+ icon: '$enter',
129
+ text: '$vuetify.hotkey.enter'
130
+ }
131
+ },
132
+ arrowup: {
133
+ default: {
134
+ symbol: '↑',
135
+ icon: '$arrowup',
136
+ text: '$vuetify.hotkey.upArrow'
137
+ }
138
+ },
139
+ arrowdown: {
140
+ default: {
141
+ symbol: '↓',
142
+ icon: '$arrowdown',
143
+ text: '$vuetify.hotkey.downArrow'
144
+ }
145
+ },
146
+ arrowleft: {
147
+ default: {
148
+ symbol: '←',
149
+ icon: '$arrowleft',
150
+ text: '$vuetify.hotkey.leftArrow'
151
+ }
152
+ },
153
+ arrowright: {
154
+ default: {
155
+ symbol: '→',
156
+ icon: '$arrowright',
157
+ text: '$vuetify.hotkey.rightArrow'
158
+ }
159
+ },
160
+ backspace: {
161
+ default: {
162
+ symbol: '⌫',
163
+ icon: '$backspace',
164
+ text: '$vuetify.hotkey.backspace'
165
+ }
166
+ },
167
+ escape: {
168
+ default: {
169
+ text: '$vuetify.hotkey.escape'
170
+ }
171
+ },
172
+ ' ': {
173
+ mac: {
174
+ symbol: '␣',
175
+ icon: '$space',
176
+ text: '$vuetify.hotkey.space'
177
+ },
178
+ default: {
179
+ text: '$vuetify.hotkey.space'
180
+ }
181
+ },
182
+ '-': {
183
+ default: {
184
+ text: '-'
185
+ }
186
+ }
187
+ };
188
+
189
+ // Create custom variant props that extend the base variant props with our 'contained' option
190
+ const makeVHotkeyVariantProps = propsFactory({
191
+ variant: {
192
+ type: String,
193
+ default: 'elevated',
194
+ validator: v => ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain', 'contained'].includes(v)
195
+ }
196
+ }, 'VHotkeyVariant');
197
+ export const makeVHotkeyProps = propsFactory({
198
+ // String representing keyboard shortcuts (e.g., "ctrl+k", "meta+shift+p")
199
+ keys: String,
200
+ // How to display keys: 'symbol' uses special characters (⌘, ⌃), 'icon' uses SVG icons, 'text' uses words
201
+ displayMode: {
202
+ type: String,
203
+ default: 'icon'
204
+ },
205
+ // Custom key mapping configuration. Users can import and modify the exported hotkeyMap as needed
206
+ keyMap: {
207
+ type: Object,
208
+ default: () => hotkeyMap
209
+ },
210
+ platform: {
211
+ type: String,
212
+ default: 'auto'
213
+ },
214
+ inline: Boolean,
215
+ disabled: Boolean,
216
+ prefix: String,
217
+ suffix: String,
218
+ ...makeComponentProps(),
219
+ ...makeThemeProps(),
220
+ ...makeBorderProps(),
221
+ ...makeRoundedProps(),
222
+ ...makeElevationProps(),
223
+ ...makeVHotkeyVariantProps(),
224
+ color: String
225
+ }, 'VHotkey');
226
+ class Delineator {
227
+ constructor(delineator) {
228
+ if (['and', 'then'].includes(delineator)) this.val = delineator;else {
229
+ throw new Error('Not a valid delineator');
230
+ }
231
+ }
232
+ isEqual(d) {
233
+ return this.val === d.val;
234
+ }
235
+ }
236
+ function isDelineator(value) {
237
+ return value instanceof Delineator;
238
+ }
239
+ function isString(value) {
240
+ return typeof value === 'string';
241
+ }
242
+ function getKeyText(keyMap, key, isMac) {
243
+ const lowerKey = key.toLowerCase();
244
+ if (lowerKey in keyMap) {
245
+ const result = processKey(keyMap[lowerKey], 'text', isMac);
246
+ return typeof result[1] === 'string' ? result[1] : String(result[1]);
247
+ }
248
+ return key.toUpperCase();
249
+ }
250
+ function applyDisplayModeToKey(keyMap, mode, key, isMac) {
251
+ const lowerKey = key.toLowerCase();
252
+ if (lowerKey in keyMap) {
253
+ const result = processKey(keyMap[lowerKey], mode, isMac);
254
+ if (result[0] === 'text' && typeof result[1] === 'string' && result[1].startsWith('$') && !result[1].startsWith('$vuetify.')) {
255
+ return ['text', result[1].replace('$', '').toUpperCase(), key];
256
+ }
257
+ return [...result, key];
258
+ }
259
+ return ['text', key.toUpperCase(), key];
260
+ }
261
+ export const VHotkey = genericComponent()({
262
+ name: 'VHotkey',
263
+ props: makeVHotkeyProps(),
264
+ setup(props) {
265
+ const {
266
+ t
267
+ } = useLocale();
268
+ const {
269
+ themeClasses
270
+ } = provideTheme(props);
271
+ const {
272
+ rtlClasses
273
+ } = useRtl();
274
+ const {
275
+ borderClasses
276
+ } = useBorder(props);
277
+ const {
278
+ roundedClasses
279
+ } = useRounded(props);
280
+ const {
281
+ elevationClasses
282
+ } = useElevation(props);
283
+ const isContainedVariant = computed(() => props.variant === 'contained');
284
+ const effectiveVariantProps = computed(() => ({
285
+ ...props,
286
+ variant: isContainedVariant.value ? 'elevated' : props.variant
287
+ }));
288
+ const {
289
+ colorClasses,
290
+ colorStyles,
291
+ variantClasses
292
+ } = useVariant(effectiveVariantProps);
293
+ const isMac = computed(() => props.platform === 'auto' ? typeof navigator !== 'undefined' && /macintosh/i.test(navigator.userAgent) : props.platform === 'mac');
294
+ const effectiveDisplayMode = computed(() => props.displayMode);
295
+ const AND_DELINEATOR = new Delineator('and'); // For + separators
296
+ const THEN_DELINEATOR = new Delineator('then'); // For - separators
297
+
298
+ const effectiveKeyMap = computed(() => props.keyMap);
299
+ const keyCombinations = computed(() => {
300
+ if (!props.keys) return [];
301
+
302
+ // Split by spaces to handle multiple key combinations
303
+ // Example: "ctrl+k meta+p" -> ["ctrl+k", "meta+p"]
304
+ return props.keys.split(' ').map(combination => {
305
+ // Use the shared sequence splitting logic
306
+ const sequenceGroups = splitKeySequence(combination);
307
+
308
+ // Process each sequence group
309
+ return sequenceGroups.flatMap((group, groupIndex) => {
310
+ // Use the shared key combination splitting logic
311
+ const keyParts = splitKeyCombination(group);
312
+ const parts = keyParts.reduce((acc, part, index) => {
313
+ if (index !== 0) {
314
+ // Add AND delineator between keys
315
+ return [...acc, AND_DELINEATOR, part];
316
+ }
317
+ return [...acc, part];
318
+ }, []);
319
+
320
+ // Add THEN delineator between sequence groups
321
+ const result = parts.map(key => {
322
+ if (isString(key)) {
323
+ return applyDisplayModeToKey(effectiveKeyMap.value, effectiveDisplayMode.value, key, isMac.value);
324
+ }
325
+ return key;
326
+ });
327
+
328
+ // Add sequence separator if not the last group
329
+ if (groupIndex < sequenceGroups.length - 1) {
330
+ result.push(THEN_DELINEATOR);
331
+ }
332
+ return result;
333
+ });
334
+ });
335
+ });
336
+ const accessibleLabel = computed(() => {
337
+ if (!props.keys) return '';
338
+
339
+ // Convert the parsed key combinations into readable text
340
+ const readableShortcuts = keyCombinations.value.map(combination => {
341
+ const readableParts = [];
342
+ for (const key of combination) {
343
+ if (isDelineator(key)) {
344
+ if (AND_DELINEATOR.isEqual(key)) {
345
+ readableParts.push(t('$vuetify.hotkey.plus'));
346
+ } else if (THEN_DELINEATOR.isEqual(key)) {
347
+ readableParts.push(t('$vuetify.hotkey.then'));
348
+ }
349
+ } else {
350
+ // Always use text representation for screen readers
351
+ const textKey = key[0] === 'icon' || key[0] === 'symbol' ? applyDisplayModeToKey(mergeDeep(hotkeyMap, props.keyMap), 'text', String(key[1]), isMac.value)[1] : key[1];
352
+ readableParts.push(translateKey(textKey));
353
+ }
354
+ }
355
+ return readableParts.join(' ');
356
+ });
357
+ const shortcutText = readableShortcuts.join(', ');
358
+ return t('$vuetify.hotkey.shortcut', shortcutText);
359
+ });
360
+ function translateKey(key) {
361
+ return key.startsWith('$vuetify.') ? t(key) : key;
362
+ }
363
+ function getKeyTooltip(key) {
364
+ if (effectiveDisplayMode.value === 'text') return undefined;
365
+ const textKey = getKeyText(effectiveKeyMap.value, String(key[2]), isMac.value);
366
+ return translateKey(textKey);
367
+ }
368
+ function renderKey(key, keyIndex, isContained) {
369
+ const KeyComponent = isContained ? 'kbd' : VKbd;
370
+ const keyClasses = ['v-hotkey__key', `v-hotkey__key-${key[0]}`, ...(isContained ? ['v-hotkey__key--nested'] : [borderClasses.value, roundedClasses.value, elevationClasses.value, colorClasses.value])];
371
+ return _createVNode(KeyComponent, {
372
+ "key": keyIndex,
373
+ "class": _normalizeClass(keyClasses),
374
+ "style": _normalizeStyle(isContained ? undefined : colorStyles.value),
375
+ "aria-hidden": "true",
376
+ "title": getKeyTooltip(key)
377
+ }, {
378
+ default: () => [key[0] === 'icon' ? _createVNode(VIcon, {
379
+ "icon": key[1],
380
+ "aria-hidden": "true"
381
+ }, null) : translateKey(key[1])]
382
+ });
383
+ }
384
+ function renderDivider(key, keyIndex) {
385
+ return _createElementVNode("span", {
386
+ "key": keyIndex,
387
+ "class": "v-hotkey__divider",
388
+ "aria-hidden": "true"
389
+ }, [AND_DELINEATOR.isEqual(key) ? '+' : t('$vuetify.hotkey.then')]);
390
+ }
391
+ useRender(() => _createElementVNode("div", {
392
+ "class": _normalizeClass(['v-hotkey', {
393
+ 'v-hotkey--disabled': props.disabled,
394
+ 'v-hotkey--inline': props.inline,
395
+ 'v-hotkey--contained': isContainedVariant.value
396
+ }, themeClasses.value, rtlClasses.value, variantClasses.value, props.class]),
397
+ "style": _normalizeStyle(props.style),
398
+ "role": "img",
399
+ "aria-label": accessibleLabel.value
400
+ }, [isContainedVariant.value ? _createVNode(VKbd, {
401
+ "key": "contained",
402
+ "class": _normalizeClass(['v-hotkey__contained-wrapper', borderClasses.value, roundedClasses.value, elevationClasses.value, colorClasses.value]),
403
+ "style": _normalizeStyle(colorStyles.value),
404
+ "aria-hidden": "true"
405
+ }, {
406
+ default: () => [props.prefix && _createElementVNode("span", {
407
+ "key": "contained-prefix",
408
+ "class": "v-hotkey__prefix"
409
+ }, [props.prefix]), keyCombinations.value.map((combination, comboIndex) => _createElementVNode("span", {
410
+ "class": "v-hotkey__combination",
411
+ "key": comboIndex
412
+ }, [combination.map((key, keyIndex) => isDelineator(key) ? renderDivider(key, keyIndex) : renderKey(key, keyIndex, true)), comboIndex < keyCombinations.value.length - 1 && _createElementVNode("span", {
413
+ "aria-hidden": "true"
414
+ }, [_createTextVNode("\xA0")])])), props.suffix && _createElementVNode("span", {
415
+ "key": "contained-suffix",
416
+ "class": "v-hotkey__suffix"
417
+ }, [props.suffix])]
418
+ }) : _createElementVNode(_Fragment, null, [props.prefix && _createElementVNode("span", {
419
+ "key": "prefix",
420
+ "class": "v-hotkey__prefix"
421
+ }, [props.prefix]), keyCombinations.value.map((combination, comboIndex) => _createElementVNode("span", {
422
+ "class": "v-hotkey__combination",
423
+ "key": comboIndex
424
+ }, [combination.map((key, keyIndex) => isDelineator(key) ? renderDivider(key, keyIndex) : renderKey(key, keyIndex, false)), comboIndex < keyCombinations.value.length - 1 && _createElementVNode("span", {
425
+ "aria-hidden": "true"
426
+ }, [_createTextVNode("\xA0")])])), props.suffix && _createElementVNode("span", {
427
+ "key": "suffix",
428
+ "class": "v-hotkey__suffix"
429
+ }, [props.suffix])])]));
430
+ }
431
+ });
432
+ //# sourceMappingURL=VHotkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VHotkey.js","names":["VIcon","VKbd","makeBorderProps","useBorder","makeComponentProps","makeElevationProps","useElevation","splitKeyCombination","splitKeySequence","useLocale","useRtl","makeRoundedProps","useRounded","makeThemeProps","provideTheme","useVariant","computed","genericComponent","mergeDeep","propsFactory","useRender","processKey","config","requestedMode","isMac","keyCfg","mac","default","mode","icon","symbol","value","text","startsWith","slice","toUpperCase","hotkeyMap","ctrl","meta","cmd","shift","alt","enter","arrowup","arrowdown","arrowleft","arrowright","backspace","escape","makeVHotkeyVariantProps","variant","type","String","validator","v","includes","makeVHotkeyProps","keys","displayMode","keyMap","Object","platform","inline","Boolean","disabled","prefix","suffix","color","Delineator","constructor","delineator","val","Error","isEqual","d","isDelineator","isString","getKeyText","key","lowerKey","toLowerCase","result","applyDisplayModeToKey","replace","VHotkey","name","props","setup","t","themeClasses","rtlClasses","borderClasses","roundedClasses","elevationClasses","isContainedVariant","effectiveVariantProps","colorClasses","colorStyles","variantClasses","navigator","test","userAgent","effectiveDisplayMode","AND_DELINEATOR","THEN_DELINEATOR","effectiveKeyMap","keyCombinations","split","map","combination","sequenceGroups","flatMap","group","groupIndex","keyParts","parts","reduce","acc","part","index","length","push","accessibleLabel","readableShortcuts","readableParts","textKey","translateKey","join","shortcutText","getKeyTooltip","undefined","renderKey","keyIndex","isContained","KeyComponent","keyClasses","_createVNode","_normalizeClass","_normalizeStyle","renderDivider","_createElementVNode","class","style","comboIndex","_createTextVNode","_Fragment"],"sources":["../../../src/labs/VHotkey/VHotkey.tsx"],"sourcesContent":["/**\n * VHotkey Component\n *\n * Purpose: Renders keyboard shortcuts in a visually consistent and accessible way.\n * This component handles the complex logic of displaying keyboard combinations\n * across different platforms (Mac vs PC) and display modes (icons, symbols, text).\n *\n * Why it exists:\n * - Provides consistent visual representation of keyboard shortcuts\n * - Handles platform-specific key differences (Cmd vs Ctrl, Option vs Alt)\n * - Supports multiple display modes for different design needs\n * - Encapsulates complex key parsing and rendering logic\n * - Used throughout the command palette for instruction display\n *\n * Key Mapping Structure:\n * The keyMap uses a simple object structure where each key has:\n * - `default`: Required configuration for all platforms\n * - `mac`: Optional Mac-specific overrides\n * Each config can specify `symbol`, `icon`, and `text` representations.\n *\n * Example:\n * ```\n * ctrl: {\n * mac: { symbol: '⌃', icon: '$ctrl', text: 'Control' },\n * default: { text: 'Ctrl', icon: '$ctrl' }\n * }\n * ```\n */\n\n// Styles\nimport './VHotkey.scss'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VKbd } from '@/components/VKbd'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { splitKeyCombination, splitKeySequence } from '@/composables/hotkey/hotkey-parsing'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useVariant } from '@/composables/variant'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, mergeDeep, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { IconValue } from '@/composables/icons'\nimport type { Variant } from '@/composables/variant'\n\n// Display mode types for different visual representations\ntype DisplayMode = 'icon' | 'symbol' | 'text'\n\n// Extended variant type that includes our custom 'contained' variant\ntype HotkeyVariant = 'elevated' | 'flat' | 'tonal' | 'outlined' | 'text' | 'plain' | 'contained'\n\n// Key display tuple: [mode, content] where content is string or IconValue\ntype KeyDisplay = [Exclude<DisplayMode, 'icon'>, string] | [Extract<DisplayMode, 'icon'>, IconValue]\n\n// Key tuple: [mode, content] where content is string or IconValue\ntype Key = [Exclude<DisplayMode, 'icon'>, string, string] | [Extract<DisplayMode, 'icon'>, IconValue, string]\n\ntype KeyConfig = {\n symbol?: string\n icon?: string\n text: string\n}\n\ntype PlatformKeyConfig = {\n mac?: KeyConfig\n default: KeyConfig\n}\n\ntype KeyMapConfig = Record<string, PlatformKeyConfig>\n\nfunction processKey (config: PlatformKeyConfig, requestedMode: DisplayMode, isMac: boolean): KeyDisplay {\n const keyCfg = (isMac && config.mac) ? config.mac : config.default\n\n // 1. Resolve the safest display mode for the current platform\n const mode: DisplayMode = (() => {\n // Non-Mac platforms rarely use icons – prefer text\n if (requestedMode === 'icon' && !isMac) return 'text'\n\n // If the requested mode lacks an asset, fall back to text\n if (requestedMode === 'icon' && !keyCfg.icon) return 'text'\n if (requestedMode === 'symbol' && !keyCfg.symbol) return 'text'\n\n return requestedMode\n })()\n\n // 2. Pick value for the chosen mode, defaulting to text representation\n let value: string | IconValue = keyCfg[mode] ?? keyCfg.text\n\n // 3. Guard against icon tokens leaking into text mode (e.g. \"$ctrl\")\n if (mode === 'text' && typeof value === 'string' && value.startsWith('$') && !value.startsWith('$vuetify.')) {\n value = value.slice(1).toUpperCase() // \"$ctrl\" → \"CTRL\"\n }\n\n return mode === 'icon'\n ? ['icon', value as IconValue]\n : [mode as Exclude<DisplayMode, 'icon'>, value as string]\n}\n\nexport const hotkeyMap: KeyMapConfig = {\n ctrl: {\n mac: { symbol: '⌃', icon: '$ctrl', text: '$vuetify.hotkey.ctrl' },\n default: { text: 'Ctrl' },\n },\n meta: {\n mac: { symbol: '⌘', icon: '$command', text: '$vuetify.hotkey.command' },\n default: { text: 'Ctrl' },\n },\n cmd: {\n mac: { symbol: '⌘', icon: '$command', text: '$vuetify.hotkey.command' },\n default: { text: 'Ctrl' },\n },\n shift: {\n mac: { symbol: '⇧', icon: '$shift', text: '$vuetify.hotkey.shift' },\n default: { text: 'Shift' },\n },\n alt: {\n mac: { symbol: '⌥', icon: '$alt', text: '$vuetify.hotkey.option' },\n default: { text: 'Alt' },\n },\n enter: {\n default: { symbol: '↵', icon: '$enter', text: '$vuetify.hotkey.enter' },\n },\n arrowup: {\n default: { symbol: '↑', icon: '$arrowup', text: '$vuetify.hotkey.upArrow' },\n },\n arrowdown: {\n default: { symbol: '↓', icon: '$arrowdown', text: '$vuetify.hotkey.downArrow' },\n },\n arrowleft: {\n default: { symbol: '←', icon: '$arrowleft', text: '$vuetify.hotkey.leftArrow' },\n },\n arrowright: {\n default: { symbol: '→', icon: '$arrowright', text: '$vuetify.hotkey.rightArrow' },\n },\n backspace: {\n default: { symbol: '⌫', icon: '$backspace', text: '$vuetify.hotkey.backspace' },\n },\n escape: {\n default: { text: '$vuetify.hotkey.escape' },\n },\n ' ': {\n mac: { symbol: '␣', icon: '$space', text: '$vuetify.hotkey.space' },\n default: { text: '$vuetify.hotkey.space' },\n },\n '-': {\n default: { text: '-' },\n },\n}\n\n// Create custom variant props that extend the base variant props with our 'contained' option\nconst makeVHotkeyVariantProps = propsFactory({\n variant: {\n type: String as PropType<HotkeyVariant>,\n default: 'elevated' as const,\n validator: (v: any) => ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain', 'contained'].includes(v),\n },\n}, 'VHotkeyVariant')\n\nexport const makeVHotkeyProps = propsFactory({\n // String representing keyboard shortcuts (e.g., \"ctrl+k\", \"meta+shift+p\")\n keys: String,\n // How to display keys: 'symbol' uses special characters (⌘, ⌃), 'icon' uses SVG icons, 'text' uses words\n displayMode: {\n type: String as PropType<DisplayMode>,\n default: 'icon',\n },\n // Custom key mapping configuration. Users can import and modify the exported hotkeyMap as needed\n keyMap: {\n type: Object as PropType<KeyMapConfig>,\n default: () => hotkeyMap,\n },\n platform: {\n type: String as PropType<'auto' | 'pc' | 'mac'>,\n default: 'auto',\n },\n inline: Boolean,\n disabled: Boolean,\n prefix: String,\n suffix: String,\n\n ...makeComponentProps(),\n ...makeThemeProps(),\n ...makeBorderProps(),\n ...makeRoundedProps(),\n ...makeElevationProps(),\n ...makeVHotkeyVariantProps(),\n color: String,\n}, 'VHotkey')\n\nclass Delineator {\n val\n constructor (delineator: string) {\n if (['and', 'then'].includes(delineator)) this.val = delineator as 'then' | 'and'\n else { throw new Error('Not a valid delineator') }\n }\n\n public isEqual (d: Delineator) {\n return this.val === d.val\n }\n}\n\nfunction isDelineator (value: any): value is Delineator {\n return value instanceof Delineator\n}\nfunction isString (value: any): value is string {\n return typeof value === 'string'\n}\n\nfunction getKeyText (keyMap: KeyMapConfig, key: string, isMac: boolean): string {\n const lowerKey = key.toLowerCase()\n\n if (lowerKey in keyMap) {\n const result = processKey(keyMap[lowerKey], 'text', isMac)\n return typeof result[1] === 'string' ? result[1] : String(result[1])\n }\n\n return key.toUpperCase()\n}\n\nfunction applyDisplayModeToKey (keyMap: KeyMapConfig, mode: DisplayMode, key: string, isMac: boolean): Key {\n const lowerKey = key.toLowerCase()\n\n if (lowerKey in keyMap) {\n const result = processKey(keyMap[lowerKey], mode, isMac)\n\n if (result[0] === 'text' && typeof result[1] === 'string' && result[1].startsWith('$') && !result[1].startsWith('$vuetify.')) {\n return ['text', result[1].replace('$', '').toUpperCase(), key]\n }\n\n return [...result, key]\n }\n\n return ['text', key.toUpperCase(), key]\n}\n\nexport const VHotkey = genericComponent()({\n name: 'VHotkey',\n\n props: makeVHotkeyProps(),\n\n setup (props) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { borderClasses } = useBorder(props)\n const { roundedClasses } = useRounded(props)\n const { elevationClasses } = useElevation(props)\n\n const isContainedVariant = computed(() => props.variant === 'contained')\n\n const effectiveVariantProps = computed(() => ({\n ...props,\n variant: isContainedVariant.value ? 'elevated' as Variant : props.variant as Variant,\n }))\n\n const { colorClasses, colorStyles, variantClasses } = useVariant(effectiveVariantProps)\n\n const isMac = computed(() =>\n props.platform === 'auto'\n ? (typeof navigator !== 'undefined' && /macintosh/i.test(navigator.userAgent))\n : props.platform === 'mac'\n )\n\n const effectiveDisplayMode = computed<DisplayMode>(() => props.displayMode)\n\n const AND_DELINEATOR = new Delineator('and') // For + separators\n const THEN_DELINEATOR = new Delineator('then') // For - separators\n\n const effectiveKeyMap = computed(() => props.keyMap)\n\n const keyCombinations = computed(() => {\n if (!props.keys) return []\n\n // Split by spaces to handle multiple key combinations\n // Example: \"ctrl+k meta+p\" -> [\"ctrl+k\", \"meta+p\"]\n return props.keys.split(' ').map(combination => {\n // Use the shared sequence splitting logic\n const sequenceGroups = splitKeySequence(combination)\n\n // Process each sequence group\n return sequenceGroups.flatMap((group, groupIndex) => {\n // Use the shared key combination splitting logic\n const keyParts = splitKeyCombination(group)\n\n const parts = keyParts.reduce<Array<string | Delineator>>((acc, part, index) => {\n if (index !== 0) {\n // Add AND delineator between keys\n return [...acc, AND_DELINEATOR, part]\n }\n return [...acc, part]\n }, [])\n\n // Add THEN delineator between sequence groups\n const result = parts.map(key => {\n if (isString(key)) {\n return applyDisplayModeToKey(effectiveKeyMap.value, effectiveDisplayMode.value, key, isMac.value)\n }\n return key\n })\n\n // Add sequence separator if not the last group\n if (groupIndex < sequenceGroups.length - 1) {\n result.push(THEN_DELINEATOR)\n }\n\n return result\n })\n })\n })\n\n const accessibleLabel = computed(() => {\n if (!props.keys) return ''\n\n // Convert the parsed key combinations into readable text\n const readableShortcuts = keyCombinations.value.map(combination => {\n const readableParts: string[] = []\n\n for (const key of combination) {\n if (isDelineator(key)) {\n if (AND_DELINEATOR.isEqual(key)) {\n readableParts.push(t('$vuetify.hotkey.plus'))\n } else if (THEN_DELINEATOR.isEqual(key)) {\n readableParts.push(t('$vuetify.hotkey.then'))\n }\n } else {\n // Always use text representation for screen readers\n const textKey = key[0] === 'icon' || key[0] === 'symbol'\n ? applyDisplayModeToKey(mergeDeep(hotkeyMap, props.keyMap), 'text', String(key[1]), isMac.value)[1]\n : key[1]\n readableParts.push(translateKey(textKey as string))\n }\n }\n\n return readableParts.join(' ')\n })\n\n const shortcutText = readableShortcuts.join(', ')\n return t('$vuetify.hotkey.shortcut', shortcutText)\n })\n\n function translateKey (key: string) {\n return key.startsWith('$vuetify.') ? t(key) : key\n }\n\n function getKeyTooltip (key: Key): string | undefined {\n if (effectiveDisplayMode.value === 'text') return undefined\n\n const textKey = getKeyText(effectiveKeyMap.value, String(key[2]), isMac.value)\n return translateKey(textKey)\n }\n\n function renderKey (key: Key, keyIndex: number, isContained: boolean) {\n const KeyComponent = isContained ? 'kbd' : VKbd\n const keyClasses = [\n 'v-hotkey__key',\n `v-hotkey__key-${key[0]}`,\n ...(isContained ? ['v-hotkey__key--nested'] : [\n borderClasses.value,\n roundedClasses.value,\n elevationClasses.value,\n colorClasses.value,\n ]),\n ]\n\n return (\n <KeyComponent\n key={ keyIndex }\n class={ keyClasses }\n style={ isContained ? undefined : colorStyles.value }\n aria-hidden=\"true\"\n title={ getKeyTooltip(key) }\n >\n {\n key[0] === 'icon' ? (\n <VIcon\n icon={ key[1] }\n aria-hidden=\"true\"\n />\n ) : translateKey(key[1])\n }\n </KeyComponent>\n )\n }\n\n function renderDivider (key: Delineator, keyIndex: number) {\n return (\n <span\n key={ keyIndex }\n class=\"v-hotkey__divider\"\n aria-hidden=\"true\"\n >\n {\n AND_DELINEATOR.isEqual(key) ? '+' : t('$vuetify.hotkey.then')\n }\n </span>\n )\n }\n\n useRender(() => (\n <div\n class={[\n 'v-hotkey',\n {\n 'v-hotkey--disabled': props.disabled,\n 'v-hotkey--inline': props.inline,\n 'v-hotkey--contained': isContainedVariant.value,\n },\n themeClasses.value,\n rtlClasses.value,\n variantClasses.value,\n props.class,\n ]}\n style={ props.style }\n role=\"img\"\n aria-label={ accessibleLabel.value }\n >\n { isContainedVariant.value ? (\n <VKbd\n key=\"contained\"\n class={[\n 'v-hotkey__contained-wrapper',\n borderClasses.value,\n roundedClasses.value,\n elevationClasses.value,\n colorClasses.value,\n ]}\n style={ colorStyles.value }\n aria-hidden=\"true\"\n >\n { props.prefix && (\n <span key=\"contained-prefix\" class=\"v-hotkey__prefix\">{ props.prefix }</span>\n )}\n { keyCombinations.value.map((combination, comboIndex) => (\n <span class=\"v-hotkey__combination\" key={ comboIndex }>\n { combination.map((key, keyIndex) =>\n isDelineator(key)\n ? renderDivider(key, keyIndex)\n : renderKey(key, keyIndex, true)\n )}\n { comboIndex < keyCombinations.value.length - 1 && <span aria-hidden=\"true\">&nbsp;</span> }\n </span>\n ))}\n { props.suffix && (\n <span key=\"contained-suffix\" class=\"v-hotkey__suffix\">{ props.suffix }</span>\n )}\n </VKbd>\n ) : (\n <>\n { props.prefix && (\n <span key=\"prefix\" class=\"v-hotkey__prefix\">{ props.prefix }</span>\n )}\n { keyCombinations.value.map((combination, comboIndex) => (\n <span class=\"v-hotkey__combination\" key={ comboIndex }>\n { combination.map((key, keyIndex) =>\n isDelineator(key)\n ? renderDivider(key, keyIndex)\n : renderKey(key, keyIndex, false)\n )}\n { comboIndex < keyCombinations.value.length - 1 && <span aria-hidden=\"true\">&nbsp;</span> }\n </span>\n ))}\n { props.suffix && (\n <span key=\"suffix\" class=\"v-hotkey__suffix\">{ props.suffix }</span>\n )}\n </>\n )}\n </div>\n ))\n },\n})\n\nexport type VHotkey = InstanceType<typeof VHotkey>\n\nexport type { KeyConfig, PlatformKeyConfig, KeyMapConfig, DisplayMode }\n"],"mappings":"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","ignoreList":[]}