vuetify 3.10.5 → 3.10.6

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 (89) hide show
  1. package/README.md +0 -6
  2. package/dist/json/attributes.json +3568 -3592
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +152 -152
  5. package/dist/json/tags.json +3 -9
  6. package/dist/json/web-types.json +6916 -6969
  7. package/dist/vuetify-labs.cjs +178 -72
  8. package/dist/vuetify-labs.css +4389 -4339
  9. package/dist/vuetify-labs.d.ts +108 -163
  10. package/dist/vuetify-labs.esm.js +178 -72
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +178 -72
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +159 -62
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4349 -4321
  17. package/dist/vuetify.d.ts +108 -128
  18. package/dist/vuetify.esm.js +159 -62
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +159 -62
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +113 -102
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
  26. package/lib/components/VAutocomplete/VAutocomplete.js +13 -11
  27. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  28. package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
  29. package/lib/components/VChipGroup/VChipGroup.js +3 -1
  30. package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
  31. package/lib/components/VCombobox/VCombobox.d.ts +6 -67
  32. package/lib/components/VCombobox/VCombobox.js +26 -28
  33. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  34. package/lib/components/VCounter/VCounter.css +1 -0
  35. package/lib/components/VCounter/VCounter.sass +1 -0
  36. package/lib/components/VDatePicker/VDatePicker.js +1 -1
  37. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  38. package/lib/components/VList/VListItem.css +14 -12
  39. package/lib/components/VList/VListItem.js +4 -2
  40. package/lib/components/VList/VListItem.js.map +1 -1
  41. package/lib/components/VList/VListItem.sass +20 -18
  42. package/lib/components/VMenu/VMenu.js +22 -4
  43. package/lib/components/VMenu/VMenu.js.map +1 -1
  44. package/lib/components/VNumberInput/VNumberInput.css +8 -0
  45. package/lib/components/VNumberInput/VNumberInput.js +5 -2
  46. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  47. package/lib/components/VNumberInput/VNumberInput.sass +10 -4
  48. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
  49. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
  50. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  51. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
  52. package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
  53. package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
  54. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  55. package/lib/components/VTabs/VTabs.d.ts +25 -0
  56. package/lib/components/VTextField/VTextField.js +0 -3
  57. package/lib/components/VTextField/VTextField.js.map +1 -1
  58. package/lib/components/VTextarea/VTextarea.css +2 -2
  59. package/lib/components/VTextarea/VTextarea.js +20 -1
  60. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  61. package/lib/components/VTextarea/VTextarea.sass +4 -2
  62. package/lib/components/VWindow/VWindow.js +43 -3
  63. package/lib/components/VWindow/VWindow.js.map +1 -1
  64. package/lib/composables/date/date.js +1 -1
  65. package/lib/composables/date/date.js.map +1 -1
  66. package/lib/composables/group.js +1 -1
  67. package/lib/composables/group.js.map +1 -1
  68. package/lib/composables/nested/nested.js +12 -2
  69. package/lib/composables/nested/nested.js.map +1 -1
  70. package/lib/composables/virtual.js +2 -2
  71. package/lib/composables/virtual.js.map +1 -1
  72. package/lib/entry-bundler.js +1 -1
  73. package/lib/framework.d.ts +54 -54
  74. package/lib/framework.js +1 -1
  75. package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
  76. package/lib/labs/VColorInput/VColorInput.js +2 -2
  77. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  78. package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
  79. package/lib/labs/VDateInput/VDateInput.js +16 -7
  80. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  81. package/lib/labs/VIconBtn/VIconBtn.css +22 -0
  82. package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
  83. package/lib/labs/VMaskInput/VMaskInput.js +1 -1
  84. package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
  85. package/lib/labs/rules/rules.js +1 -1
  86. package/lib/labs/rules/rules.js.map +1 -1
  87. package/lib/util/helpers.js +4 -2
  88. package/lib/util/helpers.js.map +1 -1
  89. package/package.json +1 -1
@@ -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","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","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 }), ['active', 'location', 'rounded']),\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 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')) {\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')) {\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 = 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).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n model.value = createDateRange(adapter, start, stop)\n } else {\n model.value = parts.map(parseDate)\n }\n }\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']))\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","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":[]}
@@ -175,4 +175,26 @@
175
175
  }
176
176
  .v-icon-btn--active:not(:hover) .v-icon-btn__overlay {
177
177
  --v-activated-opacity: 0;
178
+ }
179
+
180
+ @media (forced-colors: active) {
181
+ .v-icon-btn:focus-visible {
182
+ outline: 2px solid;
183
+ outline-offset: 2px;
184
+ }
185
+ .v-icon-btn:not(.v-icon-btn--active):hover, .v-icon-btn:not(.v-icon-btn--active):focus {
186
+ color: highlight !important;
187
+ }
188
+ .v-icon-btn--active:not(.v-icon-btn--disabled), .v-icon-btn--active:not(.v-icon-btn--disabled)[class*=bg-] {
189
+ outline-color: canvastext !important;
190
+ background: highlight !important;
191
+ color: highlighttext !important;
192
+ }
193
+ .v-icon-btn--disabled {
194
+ color: graytext;
195
+ }
196
+ .v-icon-btn__overlay, .v-icon-btn__underlay,
197
+ .v-icon-btn .v-icon {
198
+ forced-color-adjust: preserve-parent-color;
199
+ }
178
200
  }
@@ -107,4 +107,36 @@
107
107
  --v-activated-opacity: 0;
108
108
  }
109
109
  }
110
+
111
+ @media (forced-colors: active) {
112
+ .v-icon-btn {
113
+ &:focus-visible {
114
+ outline: 2px solid;
115
+ outline-offset: 2px;
116
+ }
117
+
118
+ &:not(&--active):hover,
119
+ &:not(&--active):focus {
120
+ color: highlight !important;
121
+ }
122
+
123
+ &--active:not(&--disabled),
124
+ &--active:not(&--disabled)[class*="bg-"]
125
+ {
126
+ outline-color: canvastext !important;
127
+ background: highlight !important;
128
+ color: highlighttext !important;
129
+ }
130
+
131
+ &--disabled {
132
+ color: graytext;
133
+ }
134
+
135
+ &__overlay,
136
+ &__underlay,
137
+ .v-icon {
138
+ forced-color-adjust: preserve-parent-color;
139
+ }
140
+ }
141
+ }
110
142
  }
@@ -31,7 +31,7 @@ export const VMaskInput = genericComponent()({
31
31
  // Always display masked value in input when mask is applied
32
32
  val => props.mask ? mask.mask(mask.unmask(val)) : val, val => {
33
33
  if (props.mask) {
34
- const valueWithoutDelimiters = removeMaskDelimiters(val);
34
+ const valueWithoutDelimiters = val ? removeMaskDelimiters(val) : '';
35
35
 
36
36
  // E.g. mask is #-# and the input value is '2-23'
37
37
  // model-value should be enforced to '2-2'
@@ -1 +1 @@
1
- {"version":3,"file":"VMaskInput.js","names":["makeVTextFieldProps","VTextField","forwardRefs","isMaskDelimiter","makeMaskProps","useMask","useProxiedModel","computed","nextTick","onBeforeMount","ref","shallowRef","toRef","genericComponent","propsFactory","useRender","makeVMaskInputProps","returnMaskedValue","Boolean","VMaskInput","name","props","emits","val","setup","_ref","slots","emit","vTextFieldRef","inputAction","caretPosition","mask","model","undefined","unmask","valueWithoutDelimiters","removeMaskDelimiters","newMaskedValue","newUnmaskedValue","newCaretPosition","getNewCaretPosition","oldValue","value","newValue","oldCaret","setSelectionRange","validationValue","split","filter","ch","join","_ref2","length","newCaret","onKeyDown","e","metaKey","inputElement","target","selectionStart","key","hasSelection","selectionEnd","preventDefault","deleteSelection","onCut","copySelectionToClipboard","onPaste","pastedString","clipboardData","getData","pastedCharacters","replaceSelection","insertCharacters","start","end","selectedText","substring","navigator","clipboard","writeText","curStart","success","simulateBackspace","slice","i","insertCharacter","character","replaceCharacter","index","targetIndex","textFieldProps","filterProps","_createVNode","_mergeProps","$event"],"sources":["../../../src/labs/VMaskInput/VMaskInput.tsx"],"sourcesContent":["// Components\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { isMaskDelimiter, makeMaskProps, useMask } from '@/composables/mask'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onBeforeMount, ref, shallowRef, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VMaskInputSlots = VTextFieldSlots\n\nexport const makeVMaskInputProps = propsFactory({\n returnMaskedValue: Boolean,\n ...makeVTextFieldProps(),\n ...makeMaskProps(),\n}, 'VMaskInput')\n\nexport const VMaskInput = genericComponent<VMaskInputSlots>()({\n name: 'VMaskInput',\n\n props: makeVMaskInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots, emit }) {\n const vTextFieldRef = ref<VTextField>()\n\n const inputAction = shallowRef()\n const caretPosition = shallowRef(0)\n\n const mask = useMask(props)\n const returnMaskedValue = computed(() => props.mask && props.returnMaskedValue)\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n // Always display masked value in input when mask is applied\n val => props.mask ? mask.mask(mask.unmask(val)) : val,\n val => {\n if (props.mask) {\n const valueWithoutDelimiters = removeMaskDelimiters(val)\n\n // E.g. mask is #-# and the input value is '2-23'\n // model-value should be enforced to '2-2'\n const newMaskedValue = mask.mask(valueWithoutDelimiters)\n const newUnmaskedValue = mask.unmask(newMaskedValue)\n\n const newCaretPosition = getNewCaretPosition({\n oldValue: model.value,\n newValue: newMaskedValue,\n oldCaret: caretPosition.value,\n })\n\n vTextFieldRef.value!.value = newMaskedValue\n vTextFieldRef.value!.setSelectionRange(newCaretPosition, newCaretPosition)\n\n return returnMaskedValue.value ? mask.mask(newUnmaskedValue) : newUnmaskedValue\n }\n return val\n },\n )\n\n const validationValue = toRef(() => returnMaskedValue.value ? model.value : mask.unmask(model.value))\n\n function removeMaskDelimiters (val: string): string {\n return val.split('').filter(ch => !isMaskDelimiter(ch)).join('')\n }\n\n function getNewCaretPosition ({\n oldValue,\n newValue,\n oldCaret,\n }: {\n oldValue: string\n newValue: string\n oldCaret: number\n }): number {\n if (!newValue) return 0\n if (!oldValue) return newValue.length\n\n let newCaret: number\n\n if (inputAction.value === 'Backspace') {\n newCaret = oldCaret - 1\n while (newCaret > 0 && isMaskDelimiter(newValue[newCaret - 1])) newCaret--\n } else if (inputAction.value === 'Delete') {\n newCaret = oldCaret\n } else { // insertion\n newCaret = oldCaret + 1\n while (isMaskDelimiter(newValue[newCaret])) newCaret++\n if (isMaskDelimiter(newValue[oldCaret])) newCaret++\n }\n\n return newCaret\n }\n\n onBeforeMount(() => {\n if (props.returnMaskedValue) {\n emit('update:modelValue', model.value)\n }\n })\n\n function onKeyDown (e: KeyboardEvent) {\n if (e.metaKey) return\n\n const inputElement = e.target as HTMLInputElement\n\n caretPosition.value = inputElement.selectionStart || 0\n inputAction.value = e.key\n\n const hasSelection = inputElement.selectionStart !== inputElement.selectionEnd\n if (e.key === 'Backspace' && hasSelection) {\n e.preventDefault()\n deleteSelection(e)\n }\n }\n\n async function onCut (e: Event) {\n e.preventDefault()\n\n copySelectionToClipboard(e)\n deleteSelection(e)\n }\n\n async function onPaste (e: ClipboardEvent) {\n e.preventDefault()\n\n const inputElement = e.target as HTMLInputElement\n const pastedString = removeMaskDelimiters(e.clipboardData?.getData('text') || '')\n\n if (!pastedString) return\n\n const pastedCharacters = [...pastedString]\n\n const hasSelection = inputElement.selectionStart !== inputElement.selectionEnd\n\n if (hasSelection) {\n replaceSelection(inputElement, pastedCharacters)\n } else {\n insertCharacters(inputElement, pastedCharacters)\n }\n }\n\n function copySelectionToClipboard (e: Event) {\n const inputElement = e.target as HTMLInputElement\n const start = inputElement.selectionStart || 0\n const end = inputElement.selectionEnd || 0\n const selectedText = inputElement.value.substring(start, end)\n navigator.clipboard.writeText(selectedText)\n }\n\n async function deleteSelection (e: Event) {\n const inputElement = e.target as HTMLInputElement\n const curStart = inputElement.selectionStart || 0\n caretPosition.value = inputElement.selectionEnd || 0\n\n while (caretPosition.value > curStart) {\n const success = await simulateBackspace(inputElement)\n if (!success) break\n }\n }\n\n async function simulateBackspace (inputElement: HTMLInputElement) {\n inputAction.value = 'Backspace'\n model.value = inputElement.value.slice(0, caretPosition.value - 1) + inputElement.value.slice(caretPosition.value)\n inputAction.value = ''\n if (caretPosition.value === inputElement.selectionEnd) return false\n caretPosition.value = inputElement.selectionEnd || 0\n await nextTick()\n return true\n }\n\n async function insertCharacters (inputElement: HTMLInputElement, pastedCharacters: string[]) {\n for (let i = 0; i < pastedCharacters.length; i++) {\n await insertCharacter(inputElement, pastedCharacters[i])\n }\n }\n\n async function insertCharacter (inputElement: HTMLInputElement, character: string) {\n caretPosition.value = inputElement.selectionEnd || 0\n model.value = inputElement.value.slice(0, caretPosition.value) + character + inputElement.value.slice(caretPosition.value)\n await nextTick()\n }\n\n async function replaceSelection (inputElement: HTMLInputElement, pastedCharacters: string[]) {\n caretPosition.value = inputElement.selectionStart || 0\n for (let i = 0; i < pastedCharacters.length; i++) {\n await replaceCharacter(caretPosition.value, pastedCharacters[i])\n caretPosition.value++\n }\n }\n\n async function replaceCharacter (index: number, character: string) {\n let targetIndex = index\n\n // Find next non-delimiter position\n while (targetIndex < model.value.length && isMaskDelimiter(model.value[targetIndex])) targetIndex++\n\n model.value = model.value.slice(0, targetIndex) + character + model.value.slice(targetIndex + 1)\n await nextTick()\n }\n\n useRender(() => {\n const textFieldProps = VTextField.filterProps(props)\n\n return (\n <VTextField\n { ...textFieldProps }\n v-model={ model.value }\n ref={ vTextFieldRef }\n validationValue={ validationValue.value }\n onCut={ onCut }\n onPaste={ onPaste }\n onKeydown={ onKeyDown }\n >\n {{ ...slots }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VMaskInput = InstanceType<typeof VMaskInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VMaskInput.js","names":["makeVTextFieldProps","VTextField","forwardRefs","isMaskDelimiter","makeMaskProps","useMask","useProxiedModel","computed","nextTick","onBeforeMount","ref","shallowRef","toRef","genericComponent","propsFactory","useRender","makeVMaskInputProps","returnMaskedValue","Boolean","VMaskInput","name","props","emits","val","setup","_ref","slots","emit","vTextFieldRef","inputAction","caretPosition","mask","model","undefined","unmask","valueWithoutDelimiters","removeMaskDelimiters","newMaskedValue","newUnmaskedValue","newCaretPosition","getNewCaretPosition","oldValue","value","newValue","oldCaret","setSelectionRange","validationValue","split","filter","ch","join","_ref2","length","newCaret","onKeyDown","e","metaKey","inputElement","target","selectionStart","key","hasSelection","selectionEnd","preventDefault","deleteSelection","onCut","copySelectionToClipboard","onPaste","pastedString","clipboardData","getData","pastedCharacters","replaceSelection","insertCharacters","start","end","selectedText","substring","navigator","clipboard","writeText","curStart","success","simulateBackspace","slice","i","insertCharacter","character","replaceCharacter","index","targetIndex","textFieldProps","filterProps","_createVNode","_mergeProps","$event"],"sources":["../../../src/labs/VMaskInput/VMaskInput.tsx"],"sourcesContent":["// Components\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { isMaskDelimiter, makeMaskProps, useMask } from '@/composables/mask'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onBeforeMount, ref, shallowRef, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VMaskInputSlots = VTextFieldSlots\n\nexport const makeVMaskInputProps = propsFactory({\n returnMaskedValue: Boolean,\n ...makeVTextFieldProps(),\n ...makeMaskProps(),\n}, 'VMaskInput')\n\nexport const VMaskInput = genericComponent<VMaskInputSlots>()({\n name: 'VMaskInput',\n\n props: makeVMaskInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots, emit }) {\n const vTextFieldRef = ref<VTextField>()\n\n const inputAction = shallowRef()\n const caretPosition = shallowRef(0)\n\n const mask = useMask(props)\n const returnMaskedValue = computed(() => props.mask && props.returnMaskedValue)\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n // Always display masked value in input when mask is applied\n val => props.mask ? mask.mask(mask.unmask(val)) : val,\n val => {\n if (props.mask) {\n const valueWithoutDelimiters = val ? removeMaskDelimiters(val) : ''\n\n // E.g. mask is #-# and the input value is '2-23'\n // model-value should be enforced to '2-2'\n const newMaskedValue = mask.mask(valueWithoutDelimiters)\n const newUnmaskedValue = mask.unmask(newMaskedValue)\n\n const newCaretPosition = getNewCaretPosition({\n oldValue: model.value,\n newValue: newMaskedValue,\n oldCaret: caretPosition.value,\n })\n\n vTextFieldRef.value!.value = newMaskedValue\n vTextFieldRef.value!.setSelectionRange(newCaretPosition, newCaretPosition)\n\n return returnMaskedValue.value ? mask.mask(newUnmaskedValue) : newUnmaskedValue\n }\n return val\n },\n )\n\n const validationValue = toRef(() => returnMaskedValue.value ? model.value : mask.unmask(model.value))\n\n function removeMaskDelimiters (val: string): string {\n return val.split('').filter(ch => !isMaskDelimiter(ch)).join('')\n }\n\n function getNewCaretPosition ({\n oldValue,\n newValue,\n oldCaret,\n }: {\n oldValue: string\n newValue: string\n oldCaret: number\n }): number {\n if (!newValue) return 0\n if (!oldValue) return newValue.length\n\n let newCaret: number\n\n if (inputAction.value === 'Backspace') {\n newCaret = oldCaret - 1\n while (newCaret > 0 && isMaskDelimiter(newValue[newCaret - 1])) newCaret--\n } else if (inputAction.value === 'Delete') {\n newCaret = oldCaret\n } else { // insertion\n newCaret = oldCaret + 1\n while (isMaskDelimiter(newValue[newCaret])) newCaret++\n if (isMaskDelimiter(newValue[oldCaret])) newCaret++\n }\n\n return newCaret\n }\n\n onBeforeMount(() => {\n if (props.returnMaskedValue) {\n emit('update:modelValue', model.value)\n }\n })\n\n function onKeyDown (e: KeyboardEvent) {\n if (e.metaKey) return\n\n const inputElement = e.target as HTMLInputElement\n\n caretPosition.value = inputElement.selectionStart || 0\n inputAction.value = e.key\n\n const hasSelection = inputElement.selectionStart !== inputElement.selectionEnd\n if (e.key === 'Backspace' && hasSelection) {\n e.preventDefault()\n deleteSelection(e)\n }\n }\n\n async function onCut (e: Event) {\n e.preventDefault()\n\n copySelectionToClipboard(e)\n deleteSelection(e)\n }\n\n async function onPaste (e: ClipboardEvent) {\n e.preventDefault()\n\n const inputElement = e.target as HTMLInputElement\n const pastedString = removeMaskDelimiters(e.clipboardData?.getData('text') || '')\n\n if (!pastedString) return\n\n const pastedCharacters = [...pastedString]\n\n const hasSelection = inputElement.selectionStart !== inputElement.selectionEnd\n\n if (hasSelection) {\n replaceSelection(inputElement, pastedCharacters)\n } else {\n insertCharacters(inputElement, pastedCharacters)\n }\n }\n\n function copySelectionToClipboard (e: Event) {\n const inputElement = e.target as HTMLInputElement\n const start = inputElement.selectionStart || 0\n const end = inputElement.selectionEnd || 0\n const selectedText = inputElement.value.substring(start, end)\n navigator.clipboard.writeText(selectedText)\n }\n\n async function deleteSelection (e: Event) {\n const inputElement = e.target as HTMLInputElement\n const curStart = inputElement.selectionStart || 0\n caretPosition.value = inputElement.selectionEnd || 0\n\n while (caretPosition.value > curStart) {\n const success = await simulateBackspace(inputElement)\n if (!success) break\n }\n }\n\n async function simulateBackspace (inputElement: HTMLInputElement) {\n inputAction.value = 'Backspace'\n model.value = inputElement.value.slice(0, caretPosition.value - 1) + inputElement.value.slice(caretPosition.value)\n inputAction.value = ''\n if (caretPosition.value === inputElement.selectionEnd) return false\n caretPosition.value = inputElement.selectionEnd || 0\n await nextTick()\n return true\n }\n\n async function insertCharacters (inputElement: HTMLInputElement, pastedCharacters: string[]) {\n for (let i = 0; i < pastedCharacters.length; i++) {\n await insertCharacter(inputElement, pastedCharacters[i])\n }\n }\n\n async function insertCharacter (inputElement: HTMLInputElement, character: string) {\n caretPosition.value = inputElement.selectionEnd || 0\n model.value = inputElement.value.slice(0, caretPosition.value) + character + inputElement.value.slice(caretPosition.value)\n await nextTick()\n }\n\n async function replaceSelection (inputElement: HTMLInputElement, pastedCharacters: string[]) {\n caretPosition.value = inputElement.selectionStart || 0\n for (let i = 0; i < pastedCharacters.length; i++) {\n await replaceCharacter(caretPosition.value, pastedCharacters[i])\n caretPosition.value++\n }\n }\n\n async function replaceCharacter (index: number, character: string) {\n let targetIndex = index\n\n // Find next non-delimiter position\n while (targetIndex < model.value.length && isMaskDelimiter(model.value[targetIndex])) targetIndex++\n\n model.value = model.value.slice(0, targetIndex) + character + model.value.slice(targetIndex + 1)\n await nextTick()\n }\n\n useRender(() => {\n const textFieldProps = VTextField.filterProps(props)\n\n return (\n <VTextField\n { ...textFieldProps }\n v-model={ model.value }\n ref={ vTextFieldRef }\n validationValue={ validationValue.value }\n onCut={ onCut }\n onPaste={ onPaste }\n onKeydown={ onKeyDown }\n >\n {{ ...slots }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VMaskInput = InstanceType<typeof VMaskInput>\n"],"mappings":"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","ignoreList":[]}
@@ -18,7 +18,7 @@ export function createRules(options, locale) {
18
18
  return v => !v || typeof v === 'string' && /^.+@\S+\.\S+$/.test(v) || t(err || '$vuetify.rules.email');
19
19
  },
20
20
  number: err => {
21
- return v => !!Number(v) || t(err || '$vuetify.rules.number');
21
+ return v => !v || !isNaN(Number(v)) || t(err || '$vuetify.rules.number');
22
22
  },
23
23
  integer: err => {
24
24
  return v => /^[\d]*$/.test(v) || t(err || '$vuetify.rules.integer');
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","names":["computed","inject","toRef","createRules","options","locale","t","aliases","required","err","v","email","test","number","Number","integer","capital","maxLength","len","length","minLength","strictLength","exclude","forbiddenCharacters","error","character","includes","notEmpty","pattern","resolve","fn","map","rule","ruleName","ruleParams","undefined","Array","isArray","slice","startsWith","RulesSymbol","Symbol","for","useRules","rules","Error"],"sources":["../../../src/labs/rules/rules.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, toRef } from 'vue'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance } from '@/composables/locale'\nimport type { ValidationProps, ValidationRule } from '@/composables/validation'\n\nexport type ValidationRuleBuilderWithoutOptions = (err?: string) => ValidationRule\nexport type ValidationRuleBuilderWithOptions<T> = (options: T, err?: string) => ValidationRule\nexport type ValidationRuleBuilder =\n | ValidationRuleBuilderWithoutOptions\n | ValidationRuleBuilderWithOptions<any>\n\nexport interface RuleAliases {\n [name: string]: ValidationRuleBuilder\n required: ValidationRuleBuilderWithoutOptions\n email: ValidationRuleBuilderWithoutOptions\n number: ValidationRuleBuilderWithoutOptions\n integer: ValidationRuleBuilderWithoutOptions\n capital: ValidationRuleBuilderWithoutOptions\n maxLength: ValidationRuleBuilderWithOptions<number>\n minLength: ValidationRuleBuilderWithOptions<number>\n strictLength: ValidationRuleBuilderWithOptions<number>\n exclude: ValidationRuleBuilderWithOptions<string[]>\n notEmpty: ValidationRuleBuilderWithoutOptions\n pattern: ValidationRuleBuilderWithOptions<RegExp>\n}\n\nexport type RulesOptions = {\n aliases?: Partial<RuleAliases>\n}\n\ntype ValidationRuleParams = [any, string?]\nexport type ValidationAlias = string | [string, ...ValidationRuleParams]\n\nexport type RulesInstance = {\n resolve: (fn: () => ValidationProps['rules']) => Readonly<Ref<any[]>>\n aliases: RuleAliases\n}\n\nexport function createRules (options: RulesOptions | undefined, locale: LocaleInstance) {\n const { t } = locale\n\n const aliases: RuleAliases = {\n required: (err?: string) => {\n return (v: any) => {\n // If the modifier .number is used, the 0 will be a number and it's a falsy value so we need to check for it\n return v === 0 || !!v || t(err || '$vuetify.rules.required')\n }\n },\n email: (err?: string) => {\n return (v: any) => (!v || (typeof v === 'string' && /^.+@\\S+\\.\\S+$/.test(v))) || t(err || '$vuetify.rules.email')\n },\n number: (err?: string) => {\n return (v: string) => !!Number(v) || t(err || '$vuetify.rules.number')\n },\n integer: (err?: string) => {\n return (v: string) => (/^[\\d]*$/.test(v)) || t(err || '$vuetify.rules.integer')\n },\n capital: (err?: string) => {\n return (v: string) => (/^[A-Z]*$/.test(v)) || t(err || '$vuetify.rules.capital')\n },\n maxLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length <= len) || t(err || '$vuetify.rules.maxLength', len)\n },\n minLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length >= len) || t(err || '$vuetify.rules.minLength', len)\n },\n strictLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length === len) || t(err || '$vuetify.rules.strictLength', len)\n },\n exclude: (forbiddenCharacters: string[], err?: string) => {\n return (v: string) => {\n let error: string | true = true\n for (const character of forbiddenCharacters) {\n if (v.includes(character)) error = err || t('$vuetify.rules.exclude', character)\n }\n return error\n }\n },\n notEmpty: (err?: string) => {\n return (v: any) => (v && v.length > 0) || t(err || '$vuetify.rules.notEmpty')\n },\n pattern: (pattern: RegExp, err?: string) => {\n return (v: any) => (!v || pattern.test(v) || t(err || '$vuetify.rules.pattern'))\n },\n\n ...options?.aliases,\n }\n\n function resolve (fn: () => ValidationProps['rules']) {\n return computed(() => fn().map(rule => {\n let ruleName: string | null = null\n let ruleParams: ValidationRuleParams = [undefined]\n if (Array.isArray(rule)) {\n ruleName = rule[0]\n ruleParams = rule.slice(1) as ValidationRuleParams\n } else if (typeof rule === 'string') {\n ruleName = rule\n }\n\n if (ruleName !== null) {\n if (ruleName.startsWith('$')) {\n ruleName = ruleName.slice(1)\n }\n\n return aliases[ruleName]?.(...ruleParams)\n } else {\n return rule\n }\n }))\n }\n\n return {\n resolve,\n aliases,\n }\n}\n\nexport const RulesSymbol: InjectionKey<RulesInstance> = Symbol.for('vuetify:rules')\n\nexport function useRules (): RuleAliases\nexport function useRules (fn: () => ValidationProps['rules']): Readonly<Ref<ValidationProps['rules']>> | Readonly<Ref<ValidationRule[]>>\n\nexport function useRules (fn?: () => ValidationProps['rules']) {\n const rules = inject(RulesSymbol, null)\n\n if (!fn) {\n if (!rules) {\n throw new Error('Could not find Vuetify rules injection')\n }\n return rules.aliases\n }\n\n return rules?.resolve(fn) ?? toRef(fn)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"rules.js","names":["computed","inject","toRef","createRules","options","locale","t","aliases","required","err","v","email","test","number","isNaN","Number","integer","capital","maxLength","len","length","minLength","strictLength","exclude","forbiddenCharacters","error","character","includes","notEmpty","pattern","resolve","fn","map","rule","ruleName","ruleParams","undefined","Array","isArray","slice","startsWith","RulesSymbol","Symbol","for","useRules","rules","Error"],"sources":["../../../src/labs/rules/rules.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, toRef } from 'vue'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance } from '@/composables/locale'\nimport type { ValidationProps, ValidationRule } from '@/composables/validation'\n\nexport type ValidationRuleBuilderWithoutOptions = (err?: string) => ValidationRule\nexport type ValidationRuleBuilderWithOptions<T> = (options: T, err?: string) => ValidationRule\nexport type ValidationRuleBuilder =\n | ValidationRuleBuilderWithoutOptions\n | ValidationRuleBuilderWithOptions<any>\n\nexport interface RuleAliases {\n [name: string]: ValidationRuleBuilder\n required: ValidationRuleBuilderWithoutOptions\n email: ValidationRuleBuilderWithoutOptions\n number: ValidationRuleBuilderWithoutOptions\n integer: ValidationRuleBuilderWithoutOptions\n capital: ValidationRuleBuilderWithoutOptions\n maxLength: ValidationRuleBuilderWithOptions<number>\n minLength: ValidationRuleBuilderWithOptions<number>\n strictLength: ValidationRuleBuilderWithOptions<number>\n exclude: ValidationRuleBuilderWithOptions<string[]>\n notEmpty: ValidationRuleBuilderWithoutOptions\n pattern: ValidationRuleBuilderWithOptions<RegExp>\n}\n\nexport type RulesOptions = {\n aliases?: Partial<RuleAliases>\n}\n\ntype ValidationRuleParams = [any, string?]\nexport type ValidationAlias = string | [string, ...ValidationRuleParams]\n\nexport type RulesInstance = {\n resolve: (fn: () => ValidationProps['rules']) => Readonly<Ref<any[]>>\n aliases: RuleAliases\n}\n\nexport function createRules (options: RulesOptions | undefined, locale: LocaleInstance) {\n const { t } = locale\n\n const aliases: RuleAliases = {\n required: (err?: string) => {\n return (v: any) => {\n // If the modifier .number is used, the 0 will be a number and it's a falsy value so we need to check for it\n return v === 0 || !!v || t(err || '$vuetify.rules.required')\n }\n },\n email: (err?: string) => {\n return (v: any) => (!v || (typeof v === 'string' && /^.+@\\S+\\.\\S+$/.test(v))) || t(err || '$vuetify.rules.email')\n },\n number: (err?: string) => {\n return (v: string) => !v || !isNaN(Number(v)) || t(err || '$vuetify.rules.number')\n },\n integer: (err?: string) => {\n return (v: string) => (/^[\\d]*$/.test(v)) || t(err || '$vuetify.rules.integer')\n },\n capital: (err?: string) => {\n return (v: string) => (/^[A-Z]*$/.test(v)) || t(err || '$vuetify.rules.capital')\n },\n maxLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length <= len) || t(err || '$vuetify.rules.maxLength', len)\n },\n minLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length >= len) || t(err || '$vuetify.rules.minLength', len)\n },\n strictLength: (len: number, err?: string) => {\n return (v: any) => (!v || v.length === len) || t(err || '$vuetify.rules.strictLength', len)\n },\n exclude: (forbiddenCharacters: string[], err?: string) => {\n return (v: string) => {\n let error: string | true = true\n for (const character of forbiddenCharacters) {\n if (v.includes(character)) error = err || t('$vuetify.rules.exclude', character)\n }\n return error\n }\n },\n notEmpty: (err?: string) => {\n return (v: any) => (v && v.length > 0) || t(err || '$vuetify.rules.notEmpty')\n },\n pattern: (pattern: RegExp, err?: string) => {\n return (v: any) => (!v || pattern.test(v) || t(err || '$vuetify.rules.pattern'))\n },\n\n ...options?.aliases,\n }\n\n function resolve (fn: () => ValidationProps['rules']) {\n return computed(() => fn().map(rule => {\n let ruleName: string | null = null\n let ruleParams: ValidationRuleParams = [undefined]\n if (Array.isArray(rule)) {\n ruleName = rule[0]\n ruleParams = rule.slice(1) as ValidationRuleParams\n } else if (typeof rule === 'string') {\n ruleName = rule\n }\n\n if (ruleName !== null) {\n if (ruleName.startsWith('$')) {\n ruleName = ruleName.slice(1)\n }\n\n return aliases[ruleName]?.(...ruleParams)\n } else {\n return rule\n }\n }))\n }\n\n return {\n resolve,\n aliases,\n }\n}\n\nexport const RulesSymbol: InjectionKey<RulesInstance> = Symbol.for('vuetify:rules')\n\nexport function useRules (): RuleAliases\nexport function useRules (fn: () => ValidationProps['rules']): Readonly<Ref<ValidationProps['rules']>> | Readonly<Ref<ValidationRule[]>>\n\nexport function useRules (fn?: () => ValidationProps['rules']) {\n const rules = inject(RulesSymbol, null)\n\n if (!fn) {\n if (!rules) {\n throw new Error('Could not find Vuetify rules injection')\n }\n return rules.aliases\n }\n\n return rules?.resolve(fn) ?? toRef(fn)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -439,8 +439,10 @@ export function callEvent(handler) {
439
439
  }
440
440
  export function focusableChildren(el) {
441
441
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
442
- const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
443
- return [...el.querySelectorAll(targets)];
442
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', 'details:not(:has(> summary))', 'details > summary', '[tabindex]', '[contenteditable]:not([contenteditable="false"])', 'audio[controls]', 'video[controls]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled], [inert])`).join(', ');
443
+ return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
444
+ .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
445
+ .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
444
446
  }
445
447
  export function getNextElement(elements, location, condition) {
446
448
  let _el;