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.
- package/dist/json/attributes.json +3178 -3218
- package/dist/json/importMap-labs.json +16 -16
- package/dist/json/importMap.json +154 -154
- package/dist/json/tags.json +0 -10
- package/dist/json/web-types.json +5596 -5696
- package/dist/vuetify-labs.cjs +204 -216
- package/dist/vuetify-labs.css +4081 -4083
- package/dist/vuetify-labs.d.ts +470 -658
- package/dist/vuetify-labs.esm.js +204 -216
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +204 -216
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +136 -99
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2706 -2696
- package/dist/vuetify.d.ts +328 -456
- package/dist/vuetify.esm.js +136 -99
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +136 -99
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +333 -329
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +63 -94
- package/lib/components/VAvatar/VAvatar.css +1 -1
- package/lib/components/VAvatar/_variables.scss +1 -1
- package/lib/components/VBtnToggle/VBtnToggle.sass +1 -1
- package/lib/components/VCard/VCard.js +8 -1
- package/lib/components/VCard/VCard.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +63 -94
- package/lib/components/VDatePicker/VDatePicker.js +7 -16
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VField/VField.css +6 -1
- package/lib/components/VField/VField.d.ts +8 -13
- package/lib/components/VField/VField.js +1 -1
- package/lib/components/VField/VField.js.map +1 -1
- package/lib/components/VField/VField.sass +5 -0
- package/lib/components/VFileInput/VFileInput.d.ts +0 -13
- package/lib/components/VNumberInput/VNumberInput.d.ts +63 -89
- package/lib/components/VSelect/VSelect.d.ts +63 -94
- package/lib/components/VTabs/VTab.css +3 -2
- package/lib/components/VTabs/VTab.sass +2 -1
- package/lib/components/VTextField/VTextField.d.ts +18 -31
- package/lib/components/VTextField/VTextField.js +17 -7
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.d.ts +0 -13
- package/lib/components/VTextarea/VTextarea.js +17 -7
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VWindow/VWindow.js +2 -2
- package/lib/components/VWindow/VWindow.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 +50 -50
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +0 -13
- package/lib/labs/VDateInput/VDateInput.d.ts +63 -94
- 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/labs/VMaskInput/VMaskInput.d.ts +63 -94
- 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/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
|
|
78
|
-
|
|
79
|
-
|
|
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 =
|
|
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(
|
|
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).
|
|
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-
|
|
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,
|
|
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
|