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.
- package/dist/json/attributes.json +1543 -1543
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +174 -174
- package/dist/json/web-types.json +2937 -2937
- package/dist/vuetify-labs.cjs +205 -216
- package/dist/vuetify-labs.css +4754 -4730
- package/dist/vuetify-labs.d.ts +72 -72
- package/dist/vuetify-labs.esm.js +205 -216
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +205 -216
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +137 -99
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2766 -2730
- package/dist/vuetify.d.ts +56 -56
- package/dist/vuetify.esm.js +137 -99
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +137 -99
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +334 -330
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAvatar/VAvatar.css +1 -1
- package/lib/components/VAvatar/_variables.scss +1 -1
- package/lib/components/VBtnToggle/VBtnToggle.css +21 -0
- package/lib/components/VBtnToggle/VBtnToggle.sass +22 -0
- package/lib/components/VCard/VCard.js +8 -1
- package/lib/components/VCard/VCard.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.js +7 -16
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VList/VList.css +6 -0
- package/lib/components/VList/VList.sass +6 -0
- package/lib/components/VList/VListItem.css +0 -3
- package/lib/components/VList/VListItem.sass +0 -4
- package/lib/components/VOverlay/useActivator.js +2 -1
- package/lib/components/VOverlay/useActivator.js.map +1 -1
- package/lib/components/VTabs/VTab.css +8 -0
- package/lib/components/VTabs/VTab.sass +7 -0
- package/lib/components/VTextField/VTextField.js +17 -7
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.js +17 -7
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/composables/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +37 -2
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/delay.js +3 -2
- package/lib/composables/delay.js.map +1 -1
- package/lib/composables/hotkey/hotkey.js +42 -53
- package/lib/composables/hotkey/hotkey.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +56 -56
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.js +8 -12
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VHotkey/VHotkey.css +4 -16
- package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
- package/lib/labs/VHotkey/VHotkey.js +62 -106
- package/lib/labs/VHotkey/VHotkey.js.map +1 -1
- package/lib/labs/VHotkey/VHotkey.scss +8 -25
- package/lib/styles/main.css +4 -0
- package/lib/styles/settings/_variables.scss +1 -0
- package/lib/util/box.js +3 -8
- package/lib/util/box.js.map +1 -1
- package/lib/util/throttle.js +2 -2
- package/lib/util/throttle.js.map +1 -1
- 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,
|
|
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
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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(
|
|
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
|
-
|
|
280
|
+
const result = [];
|
|
306
281
|
const sequenceGroups = splitKeySequence(combination);
|
|
307
|
-
|
|
308
|
-
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
329
|
-
|
|
330
|
-
result.push(
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
365
|
-
const textKey = getKeyText(
|
|
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
|
|
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
|
-
}, [
|
|
353
|
+
}, [key === AND_DELINEATOR ? '+' : t('$vuetify.hotkey.then')]);
|
|
390
354
|
}
|
|
391
|
-
useRender(() =>
|
|
392
|
-
|
|
393
|
-
|
|
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) =>
|
|
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": "
|
|
365
|
+
"key": "suffix",
|
|
416
366
|
"class": "v-hotkey__suffix"
|
|
417
|
-
}, [props.suffix])]
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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\"> </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\"> </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\"> </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
|
}
|