vuetify 3.10.8 → 3.10.10

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 (68) hide show
  1. package/dist/json/attributes.json +1543 -1543
  2. package/dist/json/importMap-labs.json +18 -18
  3. package/dist/json/importMap.json +174 -174
  4. package/dist/json/web-types.json +2937 -2937
  5. package/dist/vuetify-labs.cjs +205 -216
  6. package/dist/vuetify-labs.css +4754 -4730
  7. package/dist/vuetify-labs.d.ts +72 -72
  8. package/dist/vuetify-labs.esm.js +205 -216
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +205 -216
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.cjs +137 -99
  13. package/dist/vuetify.cjs.map +1 -1
  14. package/dist/vuetify.css +2766 -2730
  15. package/dist/vuetify.d.ts +56 -56
  16. package/dist/vuetify.esm.js +137 -99
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +137 -99
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +334 -330
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VAvatar/VAvatar.css +1 -1
  24. package/lib/components/VAvatar/_variables.scss +1 -1
  25. package/lib/components/VBtnToggle/VBtnToggle.css +21 -0
  26. package/lib/components/VBtnToggle/VBtnToggle.sass +22 -0
  27. package/lib/components/VCard/VCard.js +8 -1
  28. package/lib/components/VCard/VCard.js.map +1 -1
  29. package/lib/components/VDatePicker/VDatePicker.js +7 -16
  30. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  31. package/lib/components/VList/VList.css +6 -0
  32. package/lib/components/VList/VList.sass +6 -0
  33. package/lib/components/VList/VListItem.css +0 -3
  34. package/lib/components/VList/VListItem.sass +0 -4
  35. package/lib/components/VOverlay/useActivator.js +2 -1
  36. package/lib/components/VOverlay/useActivator.js.map +1 -1
  37. package/lib/components/VTabs/VTab.css +8 -0
  38. package/lib/components/VTabs/VTab.sass +7 -0
  39. package/lib/components/VTextField/VTextField.js +17 -7
  40. package/lib/components/VTextField/VTextField.js.map +1 -1
  41. package/lib/components/VTextarea/VTextarea.js +17 -7
  42. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  43. package/lib/composables/calendar.d.ts +6 -0
  44. package/lib/composables/calendar.js +37 -2
  45. package/lib/composables/calendar.js.map +1 -1
  46. package/lib/composables/delay.js +3 -2
  47. package/lib/composables/delay.js.map +1 -1
  48. package/lib/composables/hotkey/hotkey.js +42 -53
  49. package/lib/composables/hotkey/hotkey.js.map +1 -1
  50. package/lib/entry-bundler.js +1 -1
  51. package/lib/entry-bundler.js.map +1 -1
  52. package/lib/framework.d.ts +56 -56
  53. package/lib/framework.js +1 -1
  54. package/lib/framework.js.map +1 -1
  55. package/lib/labs/VDateInput/VDateInput.js +8 -12
  56. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  57. package/lib/labs/VHotkey/VHotkey.css +4 -16
  58. package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
  59. package/lib/labs/VHotkey/VHotkey.js +62 -106
  60. package/lib/labs/VHotkey/VHotkey.js.map +1 -1
  61. package/lib/labs/VHotkey/VHotkey.scss +8 -25
  62. package/lib/styles/main.css +4 -0
  63. package/lib/styles/settings/_variables.scss +1 -0
  64. package/lib/util/box.js +3 -8
  65. package/lib/util/box.js.map +1 -1
  66. package/lib/util/throttle.js +2 -2
  67. package/lib/util/throttle.js.map +1 -1
  68. package/package.json +1 -1
@@ -53,7 +53,6 @@ export declare const makeVHotkeyProps: <Defaults extends {
53
53
  elevation?: unknown;
54
54
  rounded?: unknown;
55
55
  tile?: unknown;
56
- variant?: unknown;
57
56
  keys?: unknown;
58
57
  displayMode?: unknown;
59
58
  keyMap?: unknown;
@@ -62,6 +61,7 @@ export declare const makeVHotkeyProps: <Defaults extends {
62
61
  disabled?: unknown;
63
62
  prefix?: unknown;
64
63
  suffix?: unknown;
64
+ variant?: unknown;
65
65
  color?: unknown;
66
66
  } = {}>(defaults?: Defaults | undefined) => {
67
67
  theme: unknown extends Defaults["theme"] ? StringConstructor : {
@@ -110,18 +110,6 @@ export declare const makeVHotkeyProps: <Defaults extends {
110
110
  type: PropType<unknown extends Defaults["tile"] ? boolean : boolean | Defaults["tile"]>;
111
111
  default: unknown extends Defaults["tile"] ? boolean : boolean | Defaults["tile"];
112
112
  };
113
- variant: unknown extends Defaults["variant"] ? {
114
- type: PropType<HotkeyVariant>;
115
- default: "elevated";
116
- validator: (v: any) => boolean;
117
- } : Omit<{
118
- type: PropType<HotkeyVariant>;
119
- default: "elevated";
120
- validator: (v: any) => boolean;
121
- }, "default" | "type"> & {
122
- type: PropType<unknown extends Defaults["variant"] ? HotkeyVariant : Defaults["variant"] | HotkeyVariant>;
123
- default: unknown extends Defaults["variant"] ? HotkeyVariant : Defaults["variant"] | NonNullable<HotkeyVariant>;
124
- };
125
113
  keys: unknown extends Defaults["keys"] ? StringConstructor : {
126
114
  type: PropType<unknown extends Defaults["keys"] ? string : string | Defaults["keys"]>;
127
115
  default: unknown extends Defaults["keys"] ? string : string | Defaults["keys"];
@@ -172,6 +160,18 @@ export declare const makeVHotkeyProps: <Defaults extends {
172
160
  type: PropType<unknown extends Defaults["suffix"] ? string : string | Defaults["suffix"]>;
173
161
  default: unknown extends Defaults["suffix"] ? string : string | Defaults["suffix"];
174
162
  };
163
+ variant: unknown extends Defaults["variant"] ? {
164
+ type: PropType<HotkeyVariant>;
165
+ default: "elevated";
166
+ validator: (v: any) => boolean;
167
+ } : Omit<{
168
+ type: PropType<HotkeyVariant>;
169
+ default: "elevated";
170
+ validator: (v: any) => boolean;
171
+ }, "default" | "type"> & {
172
+ type: PropType<unknown extends Defaults["variant"] ? HotkeyVariant : Defaults["variant"] | HotkeyVariant>;
173
+ default: unknown extends Defaults["variant"] ? HotkeyVariant : Defaults["variant"] | NonNullable<HotkeyVariant>;
174
+ };
175
175
  color: unknown extends Defaults["color"] ? StringConstructor : {
176
176
  type: PropType<unknown extends Defaults["color"] ? string : string | Defaults["color"]>;
177
177
  default: unknown extends Defaults["color"] ? string : string | Defaults["color"];
@@ -181,12 +181,12 @@ export declare const VHotkey: {
181
181
  new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
182
182
  style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
183
183
  tile: boolean;
184
- variant: HotkeyVariant;
185
184
  displayMode: DisplayMode;
186
185
  keyMap: KeyMapConfig;
187
186
  platform: "auto" | "mac" | "pc";
188
187
  inline: boolean;
189
188
  disabled: boolean;
189
+ variant: HotkeyVariant;
190
190
  } & {
191
191
  theme?: string | undefined;
192
192
  class?: any;
@@ -212,12 +212,12 @@ export declare const VHotkey: {
212
212
  style: import("vue").StyleValue;
213
213
  rounded: string | number | boolean;
214
214
  tile: boolean;
215
- variant: HotkeyVariant;
216
215
  displayMode: DisplayMode;
217
216
  keyMap: KeyMapConfig;
218
217
  platform: "auto" | "mac" | "pc";
219
218
  inline: boolean;
220
219
  disabled: boolean;
220
+ variant: HotkeyVariant;
221
221
  }, true, {}, import("vue").SlotsType<Partial<{
222
222
  default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
223
223
  [key: string]: any;
@@ -232,12 +232,12 @@ export declare const VHotkey: {
232
232
  }, {
233
233
  style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
234
234
  tile: boolean;
235
- variant: HotkeyVariant;
236
235
  displayMode: DisplayMode;
237
236
  keyMap: KeyMapConfig;
238
237
  platform: "auto" | "mac" | "pc";
239
238
  inline: boolean;
240
239
  disabled: boolean;
240
+ variant: HotkeyVariant;
241
241
  } & {
242
242
  theme?: string | undefined;
243
243
  class?: any;
@@ -263,12 +263,12 @@ export declare const VHotkey: {
263
263
  style: import("vue").StyleValue;
264
264
  rounded: string | number | boolean;
265
265
  tile: boolean;
266
- variant: HotkeyVariant;
267
266
  displayMode: DisplayMode;
268
267
  keyMap: KeyMapConfig;
269
268
  platform: "auto" | "mac" | "pc";
270
269
  inline: boolean;
271
270
  disabled: boolean;
271
+ variant: HotkeyVariant;
272
272
  }>;
273
273
  __isFragment?: undefined;
274
274
  __isTeleport?: undefined;
@@ -276,12 +276,12 @@ export declare const VHotkey: {
276
276
  } & import("vue").ComponentOptionsBase<{
277
277
  style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
278
278
  tile: boolean;
279
- variant: HotkeyVariant;
280
279
  displayMode: DisplayMode;
281
280
  keyMap: KeyMapConfig;
282
281
  platform: "auto" | "mac" | "pc";
283
282
  inline: boolean;
284
283
  disabled: boolean;
284
+ variant: HotkeyVariant;
285
285
  } & {
286
286
  theme?: string | undefined;
287
287
  class?: any;
@@ -307,12 +307,12 @@ export declare const VHotkey: {
307
307
  style: import("vue").StyleValue;
308
308
  rounded: string | number | boolean;
309
309
  tile: boolean;
310
- variant: HotkeyVariant;
311
310
  displayMode: DisplayMode;
312
311
  keyMap: KeyMapConfig;
313
312
  platform: "auto" | "mac" | "pc";
314
313
  inline: boolean;
315
314
  disabled: boolean;
315
+ variant: HotkeyVariant;
316
316
  }, {}, string, import("vue").SlotsType<Partial<{
317
317
  default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
318
318
  [key: string]: any;
@@ -334,11 +334,6 @@ export declare const VHotkey: {
334
334
  default: undefined;
335
335
  };
336
336
  tile: BooleanConstructor;
337
- variant: {
338
- type: PropType<HotkeyVariant>;
339
- default: "elevated";
340
- validator: (v: any) => boolean;
341
- };
342
337
  keys: StringConstructor;
343
338
  displayMode: {
344
339
  type: PropType<DisplayMode>;
@@ -356,6 +351,11 @@ export declare const VHotkey: {
356
351
  disabled: BooleanConstructor;
357
352
  prefix: StringConstructor;
358
353
  suffix: StringConstructor;
354
+ variant: {
355
+ type: PropType<HotkeyVariant>;
356
+ default: "elevated";
357
+ validator: (v: any) => boolean;
358
+ };
359
359
  color: StringConstructor;
360
360
  }, import("vue").ExtractPropTypes<{
361
361
  theme: StringConstructor;
@@ -374,11 +374,6 @@ export declare const VHotkey: {
374
374
  default: undefined;
375
375
  };
376
376
  tile: BooleanConstructor;
377
- variant: {
378
- type: PropType<HotkeyVariant>;
379
- default: "elevated";
380
- validator: (v: any) => boolean;
381
- };
382
377
  keys: StringConstructor;
383
378
  displayMode: {
384
379
  type: PropType<DisplayMode>;
@@ -396,6 +391,11 @@ export declare const VHotkey: {
396
391
  disabled: BooleanConstructor;
397
392
  prefix: StringConstructor;
398
393
  suffix: StringConstructor;
394
+ variant: {
395
+ type: PropType<HotkeyVariant>;
396
+ default: "elevated";
397
+ validator: (v: any) => boolean;
398
+ };
399
399
  color: StringConstructor;
400
400
  }>>;
401
401
  export type VHotkey = InstanceType<typeof VHotkey>;
@@ -1,4 +1,4 @@
1
- import { createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from "vue";
1
+ import { createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, Fragment as _Fragment, createTextVNode as _createTextVNode } from "vue";
2
2
  /**
3
3
  * VHotkey Component
4
4
  *
@@ -47,7 +47,7 @@ import { genericComponent, mergeDeep, propsFactory, useRender } from "../../util
47
47
  // Display mode types for different visual representations
48
48
  // Extended variant type that includes our custom 'contained' variant
49
49
  // Key display tuple: [mode, content] where content is string or IconValue
50
- // Key tuple: [mode, content] where content is string or IconValue
50
+ // Key tuple: [mode, content, keycode] where content is string or IconValue
51
51
  function processKey(config, requestedMode, isMac) {
52
52
  const keyCfg = isMac && config.mac ? config.mac : config.default;
53
53
 
@@ -185,15 +185,6 @@ export const hotkeyMap = {
185
185
  }
186
186
  }
187
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
188
  export const makeVHotkeyProps = propsFactory({
198
189
  // String representing keyboard shortcuts (e.g., "ctrl+k", "meta+shift+p")
199
190
  keys: String,
@@ -215,30 +206,21 @@ export const makeVHotkeyProps = propsFactory({
215
206
  disabled: Boolean,
216
207
  prefix: String,
217
208
  suffix: String,
209
+ variant: {
210
+ type: String,
211
+ default: 'elevated',
212
+ validator: v => ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain', 'contained'].includes(v)
213
+ },
218
214
  ...makeComponentProps(),
219
215
  ...makeThemeProps(),
220
216
  ...makeBorderProps(),
221
217
  ...makeRoundedProps(),
222
218
  ...makeElevationProps(),
223
- ...makeVHotkeyVariantProps(),
224
219
  color: String
225
220
  }, '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
- }
221
+ const AND_DELINEATOR = Symbol('VHotkey:AND_DELINEATOR'); // For + separators
222
+ const THEN_DELINEATOR = Symbol('VHotkey:THEN_DELINEATOR'); // For - separators
223
+
242
224
  function getKeyText(keyMap, key, isMac) {
243
225
  const lowerKey = key.toLowerCase();
244
226
  if (lowerKey in keyMap) {
@@ -280,57 +262,38 @@ export const VHotkey = genericComponent()({
280
262
  const {
281
263
  elevationClasses
282
264
  } = useElevation(props);
283
- const isContainedVariant = computed(() => props.variant === 'contained');
284
- const effectiveVariantProps = computed(() => ({
285
- ...props,
286
- variant: isContainedVariant.value ? 'elevated' : props.variant
287
- }));
288
265
  const {
289
266
  colorClasses,
290
267
  colorStyles,
291
268
  variantClasses
292
- } = useVariant(effectiveVariantProps);
269
+ } = useVariant(() => ({
270
+ color: props.color,
271
+ variant: props.variant === 'contained' ? 'elevated' : props.variant
272
+ }));
293
273
  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
274
  const keyCombinations = computed(() => {
300
275
  if (!props.keys) return [];
301
276
 
302
277
  // Split by spaces to handle multiple key combinations
303
278
  // Example: "ctrl+k meta+p" -> ["ctrl+k", "meta+p"]
304
279
  return props.keys.split(' ').map(combination => {
305
- // Use the shared sequence splitting logic
280
+ const result = [];
306
281
  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
- }, []);
282
+ for (let i = 0; i < sequenceGroups.length; i++) {
283
+ const group = sequenceGroups[i];
319
284
 
320
285
  // 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
- });
286
+ if (i > 0) result.push(THEN_DELINEATOR);
287
+ const keyParts = splitKeyCombination(group);
288
+ for (let j = 0; j < keyParts.length; j++) {
289
+ const part = keyParts[j];
327
290
 
328
- // Add sequence separator if not the last group
329
- if (groupIndex < sequenceGroups.length - 1) {
330
- result.push(THEN_DELINEATOR);
291
+ // Add AND delineator between keys
292
+ if (j > 0) result.push(AND_DELINEATOR);
293
+ result.push(applyDisplayModeToKey(props.keyMap, props.displayMode, part, isMac.value));
331
294
  }
332
- return result;
333
- });
295
+ }
296
+ return result;
334
297
  });
335
298
  });
336
299
  const accessibleLabel = computed(() => {
@@ -340,16 +303,16 @@ export const VHotkey = genericComponent()({
340
303
  const readableShortcuts = keyCombinations.value.map(combination => {
341
304
  const readableParts = [];
342
305
  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 {
306
+ if (Array.isArray(key)) {
350
307
  // Always use text representation for screen readers
351
308
  const textKey = key[0] === 'icon' || key[0] === 'symbol' ? applyDisplayModeToKey(mergeDeep(hotkeyMap, props.keyMap), 'text', String(key[1]), isMac.value)[1] : key[1];
352
309
  readableParts.push(translateKey(textKey));
310
+ } else {
311
+ if (key === AND_DELINEATOR) {
312
+ readableParts.push(t('$vuetify.hotkey.plus'));
313
+ } else if (key === THEN_DELINEATOR) {
314
+ readableParts.push(t('$vuetify.hotkey.then'));
315
+ }
353
316
  }
354
317
  }
355
318
  return readableParts.join(' ');
@@ -361,11 +324,12 @@ export const VHotkey = genericComponent()({
361
324
  return key.startsWith('$vuetify.') ? t(key) : key;
362
325
  }
363
326
  function getKeyTooltip(key) {
364
- if (effectiveDisplayMode.value === 'text') return undefined;
365
- const textKey = getKeyText(effectiveKeyMap.value, String(key[2]), isMac.value);
327
+ if (props.displayMode === 'text') return undefined;
328
+ const textKey = getKeyText(props.keyMap, String(key[2]), isMac.value);
366
329
  return translateKey(textKey);
367
330
  }
368
- function renderKey(key, keyIndex, isContained) {
331
+ function renderKey(key, keyIndex) {
332
+ const isContained = props.variant === 'contained';
369
333
  const KeyComponent = isContained ? 'kbd' : VKbd;
370
334
  const keyClasses = ['v-hotkey__key', `v-hotkey__key-${key[0]}`, ...(isContained ? ['v-hotkey__key--nested'] : [borderClasses.value, roundedClasses.value, elevationClasses.value, colorClasses.value])];
371
335
  return _createVNode(KeyComponent, {
@@ -386,47 +350,39 @@ export const VHotkey = genericComponent()({
386
350
  "key": keyIndex,
387
351
  "class": "v-hotkey__divider",
388
352
  "aria-hidden": "true"
389
- }, [AND_DELINEATOR.isEqual(key) ? '+' : t('$vuetify.hotkey.then')]);
353
+ }, [key === AND_DELINEATOR ? '+' : t('$vuetify.hotkey.then')]);
390
354
  }
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",
355
+ useRender(() => {
356
+ const content = _createElementVNode(_Fragment, null, [props.prefix && _createElementVNode("span", {
357
+ "key": "prefix",
408
358
  "class": "v-hotkey__prefix"
409
359
  }, [props.prefix]), keyCombinations.value.map((combination, comboIndex) => _createElementVNode("span", {
410
360
  "class": "v-hotkey__combination",
411
361
  "key": comboIndex
412
- }, [combination.map((key, keyIndex) => isDelineator(key) ? renderDivider(key, keyIndex) : renderKey(key, keyIndex, true)), comboIndex < keyCombinations.value.length - 1 && _createElementVNode("span", {
362
+ }, [combination.map((key, keyIndex) => Array.isArray(key) ? renderKey(key, keyIndex) : renderDivider(key, keyIndex)), comboIndex < keyCombinations.value.length - 1 && _createElementVNode("span", {
413
363
  "aria-hidden": "true"
414
364
  }, [_createTextVNode("\xA0")])])), props.suffix && _createElementVNode("span", {
415
- "key": "contained-suffix",
365
+ "key": "suffix",
416
366
  "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])])]));
367
+ }, [props.suffix])]);
368
+ return _createElementVNode("div", {
369
+ "class": _normalizeClass(['v-hotkey', {
370
+ 'v-hotkey--disabled': props.disabled,
371
+ 'v-hotkey--inline': props.inline,
372
+ 'v-hotkey--contained': props.variant === 'contained'
373
+ }, themeClasses.value, rtlClasses.value, variantClasses.value, props.class]),
374
+ "style": _normalizeStyle(props.style),
375
+ "role": "img",
376
+ "aria-label": accessibleLabel.value
377
+ }, [props.variant !== 'contained' ? content : _createVNode(VKbd, {
378
+ "key": "contained",
379
+ "class": _normalizeClass(['v-hotkey__contained-wrapper', borderClasses.value, roundedClasses.value, elevationClasses.value, colorClasses.value]),
380
+ "style": _normalizeStyle(colorStyles.value),
381
+ "aria-hidden": "true"
382
+ }, {
383
+ default: () => [content]
384
+ })]);
385
+ });
430
386
  }
431
387
  });
432
388
  //# sourceMappingURL=VHotkey.js.map
@@ -1 +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":[]}
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","makeVHotkeyProps","keys","String","displayMode","type","keyMap","Object","platform","inline","Boolean","disabled","prefix","suffix","variant","validator","v","includes","color","AND_DELINEATOR","Symbol","THEN_DELINEATOR","getKeyText","key","lowerKey","toLowerCase","result","applyDisplayModeToKey","replace","VHotkey","name","props","setup","t","themeClasses","rtlClasses","borderClasses","roundedClasses","elevationClasses","colorClasses","colorStyles","variantClasses","navigator","test","userAgent","keyCombinations","split","map","combination","sequenceGroups","i","length","group","push","keyParts","j","part","accessibleLabel","readableShortcuts","readableParts","Array","isArray","textKey","translateKey","join","shortcutText","getKeyTooltip","undefined","renderKey","keyIndex","isContained","KeyComponent","keyClasses","_createVNode","_normalizeClass","_normalizeStyle","renderDivider","_createElementVNode","content","_Fragment","comboIndex","_createTextVNode","class","style"],"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'\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, keycode] 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\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 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\n ...makeComponentProps(),\n ...makeThemeProps(),\n ...makeBorderProps(),\n ...makeRoundedProps(),\n ...makeElevationProps(),\n color: String,\n}, 'VHotkey')\n\nconst AND_DELINEATOR = Symbol('VHotkey:AND_DELINEATOR') // For + separators\nconst THEN_DELINEATOR = Symbol('VHotkey:THEN_DELINEATOR') // For - separators\ntype Delineator = typeof AND_DELINEATOR | typeof THEN_DELINEATOR\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 { colorClasses, colorStyles, variantClasses } = useVariant(() => ({\n color: props.color,\n variant: props.variant === 'contained' ? 'elevated' : props.variant,\n }))\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 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 const result: Array<Key | Delineator> = []\n\n const sequenceGroups = splitKeySequence(combination)\n for (let i = 0; i < sequenceGroups.length; i++) {\n const group = sequenceGroups[i]\n\n // Add THEN delineator between sequence groups\n if (i > 0) result.push(THEN_DELINEATOR)\n\n const keyParts = splitKeyCombination(group)\n for (let j = 0; j < keyParts.length; j++) {\n const part = keyParts[j]\n\n // Add AND delineator between keys\n if (j > 0) result.push(AND_DELINEATOR)\n result.push(applyDisplayModeToKey(props.keyMap, props.displayMode, part, isMac.value))\n }\n }\n\n return result\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 (Array.isArray(key)) {\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 } else {\n if (key === AND_DELINEATOR) {\n readableParts.push(t('$vuetify.hotkey.plus'))\n } else if (key === THEN_DELINEATOR) {\n readableParts.push(t('$vuetify.hotkey.then'))\n }\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 (props.displayMode === 'text') return undefined\n\n const textKey = getKeyText(props.keyMap, String(key[2]), isMac.value)\n return translateKey(textKey)\n }\n\n function renderKey (key: Key, keyIndex: number) {\n const isContained = props.variant === 'contained'\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 { key === AND_DELINEATOR\n ? '+'\n : t('$vuetify.hotkey.then')}\n </span>\n )\n }\n\n useRender(() => {\n const content = (\n <>\n { props.prefix && (\n <span key=\"prefix\" class=\"v-hotkey__prefix\">{ props.prefix }</span>\n )}\n\n { keyCombinations.value.map((combination, comboIndex) => (\n <span class=\"v-hotkey__combination\" key={ comboIndex }>\n { combination.map((key, keyIndex) =>\n Array.isArray(key)\n ? renderKey(key, keyIndex)\n : renderDivider(key, keyIndex)\n )}\n { comboIndex < keyCombinations.value.length - 1 && (\n <span aria-hidden=\"true\">&nbsp;</span>\n )}\n </span>\n ))}\n\n { props.suffix && (\n <span key=\"suffix\" class=\"v-hotkey__suffix\">{ props.suffix }</span>\n )}\n </>\n )\n\n return (\n <div\n class={[\n 'v-hotkey',\n {\n 'v-hotkey--disabled': props.disabled,\n 'v-hotkey--inline': props.inline,\n 'v-hotkey--contained': props.variant === 'contained',\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 { props.variant !== 'contained' ? content : (\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 { content }\n </VKbd>\n )}\n </div>\n )\n })\n },\n})\n\nexport type VHotkey = InstanceType<typeof VHotkey>\n\nexport type { KeyConfig, PlatformKeyConfig, KeyMapConfig, DisplayMode }\n"],"mappings":"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","ignoreList":[]}
@@ -147,8 +147,6 @@
147
147
  gap: $hotkey-combination-gap;
148
148
  }
149
149
 
150
-
151
-
152
150
  &--inline &__key {
153
151
  &-symbol.v-kbd,
154
152
  &-text.v-kbd {
@@ -209,22 +207,20 @@
209
207
  }
210
208
 
211
209
  &--variant-outlined &__key.v-kbd {
210
+ background: none;
211
+
212
212
  @include tools.elevation(0);
213
- & {
214
- background: none;
215
- }
216
213
  }
217
214
 
218
215
  &--variant-text {
219
216
  .v-hotkey__key.v-kbd {
217
+ background: transparent !important;
218
+ border: none !important;
219
+ padding-left: 0;
220
+ padding-right: 0;
221
+ min-width: auto;
222
+
220
223
  @include tools.elevation(0);
221
- & {
222
- background: transparent !important;
223
- border: none !important;
224
- padding-left: 0;
225
- padding-right: 0;
226
- min-width: auto;
227
- }
228
224
  }
229
225
 
230
226
  .v-hotkey__combination {
@@ -237,17 +233,4 @@
237
233
  box-shadow: unset;
238
234
  }
239
235
  }
240
-
241
- // Screen reader only content
242
- .sr-only {
243
- position: absolute;
244
- width: 1px;
245
- height: 1px;
246
- padding: 0;
247
- margin: -1px;
248
- overflow: hidden;
249
- clip: rect(0, 0, 0, 0);
250
- white-space: nowrap;
251
- border: 0;
252
- }
253
236
  }