vuetify 3.10.9 → 3.10.11

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 (77) hide show
  1. package/dist/json/attributes.json +3178 -3218
  2. package/dist/json/importMap-labs.json +16 -16
  3. package/dist/json/importMap.json +154 -154
  4. package/dist/json/tags.json +0 -10
  5. package/dist/json/web-types.json +5596 -5696
  6. package/dist/vuetify-labs.cjs +204 -216
  7. package/dist/vuetify-labs.css +4081 -4083
  8. package/dist/vuetify-labs.d.ts +470 -658
  9. package/dist/vuetify-labs.esm.js +204 -216
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +204 -216
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +136 -99
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +2706 -2696
  16. package/dist/vuetify.d.ts +328 -456
  17. package/dist/vuetify.esm.js +136 -99
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +136 -99
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +333 -329
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.d.ts +63 -94
  25. package/lib/components/VAvatar/VAvatar.css +1 -1
  26. package/lib/components/VAvatar/_variables.scss +1 -1
  27. package/lib/components/VBtnToggle/VBtnToggle.sass +1 -1
  28. package/lib/components/VCard/VCard.js +8 -1
  29. package/lib/components/VCard/VCard.js.map +1 -1
  30. package/lib/components/VCombobox/VCombobox.d.ts +63 -94
  31. package/lib/components/VDatePicker/VDatePicker.js +7 -16
  32. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  33. package/lib/components/VField/VField.css +6 -1
  34. package/lib/components/VField/VField.d.ts +8 -13
  35. package/lib/components/VField/VField.js +1 -1
  36. package/lib/components/VField/VField.js.map +1 -1
  37. package/lib/components/VField/VField.sass +5 -0
  38. package/lib/components/VFileInput/VFileInput.d.ts +0 -13
  39. package/lib/components/VNumberInput/VNumberInput.d.ts +63 -89
  40. package/lib/components/VSelect/VSelect.d.ts +63 -94
  41. package/lib/components/VTabs/VTab.css +3 -2
  42. package/lib/components/VTabs/VTab.sass +2 -1
  43. package/lib/components/VTextField/VTextField.d.ts +18 -31
  44. package/lib/components/VTextField/VTextField.js +17 -7
  45. package/lib/components/VTextField/VTextField.js.map +1 -1
  46. package/lib/components/VTextarea/VTextarea.d.ts +0 -13
  47. package/lib/components/VTextarea/VTextarea.js +17 -7
  48. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  49. package/lib/components/VWindow/VWindow.js +2 -2
  50. package/lib/components/VWindow/VWindow.js.map +1 -1
  51. package/lib/composables/calendar.d.ts +6 -0
  52. package/lib/composables/calendar.js +37 -2
  53. package/lib/composables/calendar.js.map +1 -1
  54. package/lib/composables/delay.js +3 -2
  55. package/lib/composables/delay.js.map +1 -1
  56. package/lib/composables/hotkey/hotkey.js +42 -53
  57. package/lib/composables/hotkey/hotkey.js.map +1 -1
  58. package/lib/entry-bundler.js +1 -1
  59. package/lib/entry-bundler.js.map +1 -1
  60. package/lib/framework.d.ts +50 -50
  61. package/lib/framework.js +1 -1
  62. package/lib/framework.js.map +1 -1
  63. package/lib/labs/VColorInput/VColorInput.d.ts +0 -13
  64. package/lib/labs/VDateInput/VDateInput.d.ts +63 -94
  65. package/lib/labs/VDateInput/VDateInput.js +8 -12
  66. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  67. package/lib/labs/VHotkey/VHotkey.css +4 -16
  68. package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
  69. package/lib/labs/VHotkey/VHotkey.js +62 -106
  70. package/lib/labs/VHotkey/VHotkey.js.map +1 -1
  71. package/lib/labs/VHotkey/VHotkey.scss +8 -25
  72. package/lib/labs/VMaskInput/VMaskInput.d.ts +63 -94
  73. package/lib/styles/main.css +4 -0
  74. package/lib/styles/settings/_variables.scss +1 -0
  75. package/lib/util/box.js +3 -8
  76. package/lib/util/box.js.map +1 -1
  77. package/package.json +1 -1
@@ -4,6 +4,7 @@ import { makeVConfirmEditProps, VConfirmEdit } from "../../components/VConfirmEd
4
4
  import { makeVDatePickerProps, VDatePicker } from "../../components/VDatePicker/VDatePicker.js";
5
5
  import { VMenu } from "../../components/VMenu/VMenu.js";
6
6
  import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.js"; // Composables
7
+ import { useCalendarRange } from "../../composables/calendar.js";
7
8
  import { useDate } from "../../composables/date/index.js";
8
9
  import { createDateRange } from "../../composables/date/date.js";
9
10
  import { makeDateFormatProps, useDateFormat } from "../../composables/dateFormat.js";
@@ -74,15 +75,10 @@ export const VDateInput = genericComponent()({
74
75
  const {
75
76
  mobile
76
77
  } = useDisplay(props);
77
- const clamp = date => {
78
- if (props.max && adapter.isAfter(date, props.max)) {
79
- return props.max;
80
- }
81
- if (props.min && adapter.isBefore(date, props.min)) {
82
- return props.min;
83
- }
84
- return date;
85
- };
78
+ const {
79
+ clampDate,
80
+ isInAllowedRange
81
+ } = useCalendarRange(props);
86
82
  const emptyModelValue = () => props.multiple ? [] : null;
87
83
  const model = useProxiedModel(props, 'modelValue', emptyModelValue(), val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val, val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val);
88
84
  const menu = useProxiedModel(props, 'menu');
@@ -178,16 +174,16 @@ export const VDateInput = genericComponent()({
178
174
  model.value = emptyModelValue();
179
175
  } else if (!props.multiple) {
180
176
  if (isValid(value)) {
181
- model.value = clamp(parseDate(value));
177
+ model.value = clampDate(parseDate(value));
182
178
  }
183
179
  } else {
184
180
  const parts = value.trim().split(/\D+-\D+|[^\d\-/.]+/);
185
181
  if (parts.every(isValid)) {
186
182
  if (props.multiple === 'range') {
187
- const [start, stop] = parts.map(parseDate).map(clamp).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
183
+ const [start, stop] = parts.map(parseDate).map(clampDate).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
188
184
  model.value = createDateRange(adapter, start, stop);
189
185
  } else {
190
- model.value = parts.map(parseDate).map(clamp);
186
+ model.value = parts.map(parseDate).filter(isInAllowedRange);
191
187
  }
192
188
  }
193
189
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VDateInput.js","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useDate","createDateRange","makeDateFormatProps","useDateFormat","makeDisplayProps","useDisplay","makeFocusProps","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","watch","genericComponent","omit","pick","propsFactory","useRender","wrapInArray","makeVDateInputProps","displayFormat","type","Function","String","default","undefined","location","menu","Boolean","updateOn","Array","mobile","hideActions","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","save","value","cancel","val","setup","_ref","emit","slots","t","current","currentLocale","adapter","isValid","parseDate","formatDate","parserFormat","clamp","date","max","isAfter","min","isBefore","emptyModelValue","multiple","model","isArray","map","item","toJsDate","isEditingInput","isFocused","focused","vTextFieldRef","disabledActions","format","display","length","start","end","inputmode","isInteractive","disabled","readonly","isReadonly","onKeydown","e","key","includes","onUserInput","target","onClick","preventDefault","stopPropagation","onCancel","onSave","onUpdateDisplayModel","onBlur","_ref2","trim","parts","split","every","stop","toSorted","a","b","confirmEditProps","filterProps","datePickerProps","datePickerSlots","textFieldProps","_createVNode","_mergeProps","class","style","placeholder","event","_createElementVNode","_Fragment","$event","_ref3","actions","proxyModel","isPristine","onUpdateModel"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { createDateRange } from '@/composables/date/date'\nimport { makeDateFormatProps, useDateFormat } from '@/composables/dateFormat'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VDatePickerSlots } from '@/components/VDatePicker/VDatePicker'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\nimport type { GenericProps } from '@/util'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> &\n Pick<VDatePickerSlots, 'title' | 'header' | 'day' | 'month' | 'year'> & {\n actions: VDateInputActionsSlot\n default: never\n }\n\nexport const makeVDateInputProps = propsFactory({\n displayFormat: {\n type: [Function, String] as PropType<string | ((date: unknown) => any)>,\n default: undefined,\n },\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n menu: Boolean,\n updateOn: {\n type: Array as PropType<('blur' | 'enter')[]>,\n default: () => ['blur', 'enter'],\n },\n\n ...makeDateFormatProps(),\n ...makeDisplayProps({\n mobile: null,\n }),\n ...makeFocusProps(),\n ...makeVConfirmEditProps({\n hideActions: true,\n }),\n ...makeVTextFieldProps({\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), [\n 'active',\n 'location',\n 'rounded',\n 'height',\n 'minHeight',\n 'maxHeight',\n ]),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<new <\n T,\n Multiple extends boolean | 'range' | number | (string & {}) = false,\n TModel = Multiple extends true | number | string\n ? T[]\n : T,\n> (\n props: {\n modelValue?: TModel\n onSave?: (value: TModel) => void\n 'onUpdate:modelValue'?: (value: TModel) => void\n multiple?: Multiple\n },\n slots: VDateInputSlots\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n save: (value: unknown) => true,\n cancel: () => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: unknown) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { emit, slots }) {\n const { t, current: currentLocale } = useLocale()\n const adapter = useDate()\n const { isValid, parseDate, formatDate, parserFormat } = useDateFormat(props, currentLocale)\n const { mobile } = useDisplay(props)\n\n const clamp = (date: unknown) => {\n if (props.max && adapter.isAfter(date, props.max)) {\n return props.max\n }\n if (props.min && adapter.isBefore(date, props.min)) {\n return props.min\n }\n return date\n }\n\n const emptyModelValue = () => props.multiple ? [] : null\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n emptyModelValue(),\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = useProxiedModel(props, 'menu')\n const isEditingInput = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n const vTextFieldRef = ref<VTextField>()\n const disabledActions = ref<typeof VConfirmEdit['props']['disabled']>(['save'])\n\n function format (date: unknown) {\n if (typeof props.displayFormat === 'function') {\n return props.displayFormat(date)\n }\n if (props.displayFormat) {\n return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n }\n return formatDate(date)\n }\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n return `${format(adapter.date(start))} - ${format(adapter.date(end))}`\n }\n\n return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n })\n\n const inputmode = computed(() => {\n if (!mobile.value) return undefined\n if (isEditingInput.value) return 'text'\n\n return 'none'\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const isReadonly = computed(() => {\n if (!props.updateOn.length) return true\n\n return !(mobile.value && isEditingInput.value) && props.readonly\n })\n\n watch(menu, val => {\n if (val) return\n\n isEditingInput.value = false\n disabledActions.value = ['save']\n })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n }\n\n if (props.updateOn.includes('enter') && !props.readonly) {\n onUserInput(e.target as HTMLInputElement)\n }\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n if (menu.value && mobile.value) {\n isEditingInput.value = true\n } else {\n menu.value = true\n }\n }\n\n function onCancel () {\n emit('cancel')\n menu.value = false\n isEditingInput.value = false\n }\n\n function onSave (value: string) {\n emit('save', value)\n menu.value = false\n }\n\n function onUpdateDisplayModel (value: unknown) {\n if (value != null) return\n\n model.value = emptyModelValue()\n }\n\n function onBlur (e: FocusEvent) {\n if (props.updateOn.includes('blur') && !props.readonly) {\n onUserInput(e.target as HTMLInputElement)\n }\n\n // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n if (mobile.value && isEditingInput.value && !isFocused.value) {\n menu.value = false\n isEditingInput.value = false\n }\n }\n\n function onUserInput ({ value }: HTMLInputElement) {\n if (!value.trim()) {\n model.value = emptyModelValue()\n } else if (!props.multiple) {\n if (isValid(value)) {\n model.value = clamp(parseDate(value))\n }\n } else {\n const parts = value.trim().split(/\\D+-\\D+|[^\\d\\-/.]+/)\n if (parts.every(isValid)) {\n if (props.multiple === 'range') {\n const [start, stop] = parts.map(parseDate).map(clamp).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n model.value = createDateRange(adapter, start, stop)\n } else {\n model.value = parts.map(parseDate).map(clamp)\n }\n }\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, [\n 'active',\n 'bgColor',\n 'color',\n 'location',\n 'rounded',\n 'maxWidth',\n 'minWidth',\n 'width',\n ]))\n const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year'])\n const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']))\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n inputmode={ inputmode.value }\n placeholder={ props.placeholder ?? parserFormat.value }\n readonly={ isReadonly.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onBlur={ onBlur }\n validationValue={ model.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateDisplayModel }\n onUpdate:focused={ event => isFocused.value = event }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n disabled={ disabledActions.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n\n if (!props.multiple) {\n menu.value = false\n }\n }\n\n emit('save', value)\n\n disabledActions.value = []\n }\n\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n ...datePickerSlots,\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VDateInput.js","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useCalendarRange","useDate","createDateRange","makeDateFormatProps","useDateFormat","makeDisplayProps","useDisplay","makeFocusProps","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","watch","genericComponent","omit","pick","propsFactory","useRender","wrapInArray","makeVDateInputProps","displayFormat","type","Function","String","default","undefined","location","menu","Boolean","updateOn","Array","mobile","hideActions","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","save","value","cancel","val","setup","_ref","emit","slots","t","current","currentLocale","adapter","isValid","parseDate","formatDate","parserFormat","clampDate","isInAllowedRange","emptyModelValue","multiple","model","isArray","map","item","toJsDate","date","isEditingInput","isFocused","focused","vTextFieldRef","disabledActions","format","display","length","start","end","inputmode","isInteractive","disabled","readonly","isReadonly","onKeydown","e","key","includes","onUserInput","target","onClick","preventDefault","stopPropagation","onCancel","onSave","onUpdateDisplayModel","onBlur","_ref2","trim","parts","split","every","stop","toSorted","a","b","isAfter","filter","confirmEditProps","filterProps","datePickerProps","datePickerSlots","textFieldProps","_createVNode","_mergeProps","class","style","placeholder","event","_createElementVNode","_Fragment","$event","_ref3","actions","proxyModel","isPristine","onUpdateModel"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useCalendarRange } from '@/composables/calendar'\nimport { useDate } from '@/composables/date'\nimport { createDateRange } from '@/composables/date/date'\nimport { makeDateFormatProps, useDateFormat } from '@/composables/dateFormat'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VDatePickerSlots } from '@/components/VDatePicker/VDatePicker'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\nimport type { GenericProps } from '@/util'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> &\n Pick<VDatePickerSlots, 'title' | 'header' | 'day' | 'month' | 'year'> & {\n actions: VDateInputActionsSlot\n default: never\n }\n\nexport const makeVDateInputProps = propsFactory({\n displayFormat: {\n type: [Function, String] as PropType<string | ((date: unknown) => any)>,\n default: undefined,\n },\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n menu: Boolean,\n updateOn: {\n type: Array as PropType<('blur' | 'enter')[]>,\n default: () => ['blur', 'enter'],\n },\n\n ...makeDateFormatProps(),\n ...makeDisplayProps({\n mobile: null,\n }),\n ...makeFocusProps(),\n ...makeVConfirmEditProps({\n hideActions: true,\n }),\n ...makeVTextFieldProps({\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), [\n 'active',\n 'location',\n 'rounded',\n 'height',\n 'minHeight',\n 'maxHeight',\n ]),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<new <\n T,\n Multiple extends boolean | 'range' | number | (string & {}) = false,\n TModel = Multiple extends true | number | string\n ? T[]\n : T,\n> (\n props: {\n modelValue?: TModel\n onSave?: (value: TModel) => void\n 'onUpdate:modelValue'?: (value: TModel) => void\n multiple?: Multiple\n },\n slots: VDateInputSlots\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n save: (value: unknown) => true,\n cancel: () => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: unknown) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { emit, slots }) {\n const { t, current: currentLocale } = useLocale()\n const adapter = useDate()\n const { isValid, parseDate, formatDate, parserFormat } = useDateFormat(props, currentLocale)\n const { mobile } = useDisplay(props)\n\n const { clampDate, isInAllowedRange } = useCalendarRange(props)\n\n const emptyModelValue = () => props.multiple ? [] : null\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n emptyModelValue(),\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = useProxiedModel(props, 'menu')\n const isEditingInput = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n const vTextFieldRef = ref<VTextField>()\n const disabledActions = ref<typeof VConfirmEdit['props']['disabled']>(['save'])\n\n function format (date: unknown) {\n if (typeof props.displayFormat === 'function') {\n return props.displayFormat(date)\n }\n if (props.displayFormat) {\n return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n }\n return formatDate(date)\n }\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n return `${format(adapter.date(start))} - ${format(adapter.date(end))}`\n }\n\n return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n })\n\n const inputmode = computed(() => {\n if (!mobile.value) return undefined\n if (isEditingInput.value) return 'text'\n\n return 'none'\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const isReadonly = computed(() => {\n if (!props.updateOn.length) return true\n\n return !(mobile.value && isEditingInput.value) && props.readonly\n })\n\n watch(menu, val => {\n if (val) return\n\n isEditingInput.value = false\n disabledActions.value = ['save']\n })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n }\n\n if (props.updateOn.includes('enter') && !props.readonly) {\n onUserInput(e.target as HTMLInputElement)\n }\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n if (menu.value && mobile.value) {\n isEditingInput.value = true\n } else {\n menu.value = true\n }\n }\n\n function onCancel () {\n emit('cancel')\n menu.value = false\n isEditingInput.value = false\n }\n\n function onSave (value: string) {\n emit('save', value)\n menu.value = false\n }\n\n function onUpdateDisplayModel (value: unknown) {\n if (value != null) return\n\n model.value = emptyModelValue()\n }\n\n function onBlur (e: FocusEvent) {\n if (props.updateOn.includes('blur') && !props.readonly) {\n onUserInput(e.target as HTMLInputElement)\n }\n\n // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n if (mobile.value && isEditingInput.value && !isFocused.value) {\n menu.value = false\n isEditingInput.value = false\n }\n }\n\n function onUserInput ({ value }: HTMLInputElement) {\n if (!value.trim()) {\n model.value = emptyModelValue()\n } else if (!props.multiple) {\n if (isValid(value)) {\n model.value = clampDate(parseDate(value))\n }\n } else {\n const parts = value.trim().split(/\\D+-\\D+|[^\\d\\-/.]+/)\n if (parts.every(isValid)) {\n if (props.multiple === 'range') {\n const [start, stop] = parts\n .map(parseDate)\n .map(clampDate)\n .toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n model.value = createDateRange(adapter, start, stop)\n } else {\n model.value = parts\n .map(parseDate)\n .filter(isInAllowedRange)\n }\n }\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, [\n 'active',\n 'bgColor',\n 'color',\n 'location',\n 'rounded',\n 'maxWidth',\n 'minWidth',\n 'width',\n ]))\n const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year'])\n const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']))\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n inputmode={ inputmode.value }\n placeholder={ props.placeholder ?? parserFormat.value }\n readonly={ isReadonly.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onBlur={ onBlur }\n validationValue={ model.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateDisplayModel }\n onUpdate:focused={ event => isFocused.value = event }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n disabled={ disabledActions.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n\n if (!props.multiple) {\n menu.value = false\n }\n }\n\n emit('save', value)\n\n disabledActions.value = []\n }\n\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n ...datePickerSlots,\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}
@@ -205,13 +205,10 @@
205
205
  .v-hotkey--variant-flat .v-hotkey__key.v-kbd {
206
206
  box-shadow: none;
207
207
  }
208
- .v-hotkey--variant-outlined .v-hotkey__key.v-kbd {
209
- box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
210
- }
211
208
  .v-hotkey--variant-outlined .v-hotkey__key.v-kbd {
212
209
  background: none;
213
210
  }
214
- .v-hotkey--variant-text .v-hotkey__key.v-kbd {
211
+ .v-hotkey--variant-outlined .v-hotkey__key.v-kbd {
215
212
  box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
216
213
  }
217
214
  .v-hotkey--variant-text .v-hotkey__key.v-kbd {
@@ -221,22 +218,13 @@
221
218
  padding-right: 0;
222
219
  min-width: auto;
223
220
  }
221
+ .v-hotkey--variant-text .v-hotkey__key.v-kbd {
222
+ box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
223
+ }
224
224
  .v-hotkey--variant-text .v-hotkey__combination {
225
225
  gap: 1px;
226
226
  }
227
227
  .v-hotkey--variant-tonal .v-hotkey__key.v-kbd {
228
228
  border: unset;
229
229
  box-shadow: unset;
230
- }
231
-
232
- .sr-only {
233
- position: absolute;
234
- width: 1px;
235
- height: 1px;
236
- padding: 0;
237
- margin: -1px;
238
- overflow: hidden;
239
- clip: rect(0, 0, 0, 0);
240
- white-space: nowrap;
241
- border: 0;
242
230
  }
@@ -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