vuetify 3.10.9 → 3.10.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/json/attributes.json +3507 -3507
  2. package/dist/json/importMap-labs.json +22 -22
  3. package/dist/json/importMap.json +170 -170
  4. package/dist/json/web-types.json +6186 -6186
  5. package/dist/vuetify-labs.cjs +201 -213
  6. package/dist/vuetify-labs.css +5293 -5301
  7. package/dist/vuetify-labs.d.ts +79 -79
  8. package/dist/vuetify-labs.esm.js +201 -213
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +201 -213
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.cjs +133 -96
  13. package/dist/vuetify.cjs.map +1 -1
  14. package/dist/vuetify.css +3094 -3090
  15. package/dist/vuetify.d.ts +63 -63
  16. package/dist/vuetify.esm.js +133 -96
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +133 -96
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +332 -328
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VAvatar/VAvatar.css +1 -1
  24. package/lib/components/VAvatar/_variables.scss +1 -1
  25. package/lib/components/VBtnToggle/VBtnToggle.sass +1 -1
  26. package/lib/components/VCard/VCard.js +8 -1
  27. package/lib/components/VCard/VCard.js.map +1 -1
  28. package/lib/components/VDatePicker/VDatePicker.js +7 -16
  29. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  30. package/lib/components/VTextField/VTextField.js +17 -7
  31. package/lib/components/VTextField/VTextField.js.map +1 -1
  32. package/lib/components/VTextarea/VTextarea.js +17 -7
  33. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  34. package/lib/composables/calendar.d.ts +6 -0
  35. package/lib/composables/calendar.js +37 -2
  36. package/lib/composables/calendar.js.map +1 -1
  37. package/lib/composables/delay.js +3 -2
  38. package/lib/composables/delay.js.map +1 -1
  39. package/lib/composables/hotkey/hotkey.js +42 -53
  40. package/lib/composables/hotkey/hotkey.js.map +1 -1
  41. package/lib/entry-bundler.js +1 -1
  42. package/lib/entry-bundler.js.map +1 -1
  43. package/lib/framework.d.ts +63 -63
  44. package/lib/framework.js +1 -1
  45. package/lib/framework.js.map +1 -1
  46. package/lib/labs/VDateInput/VDateInput.js +8 -12
  47. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  48. package/lib/labs/VHotkey/VHotkey.css +4 -16
  49. package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
  50. package/lib/labs/VHotkey/VHotkey.js +62 -106
  51. package/lib/labs/VHotkey/VHotkey.js.map +1 -1
  52. package/lib/labs/VHotkey/VHotkey.scss +8 -25
  53. package/lib/styles/main.css +4 -0
  54. package/lib/styles/settings/_variables.scss +1 -0
  55. package/lib/util/box.js +3 -8
  56. package/lib/util/box.js.map +1 -1
  57. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VTextarea.js","names":["VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useDisplay","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","computed","nextTick","onBeforeUnmount","onMounted","ref","shallowRef","watch","watchEffect","callEvent","clamp","convertToUnit","filterInputAttrs","genericComponent","propsFactory","useRender","makeVTextareaProps","autoGrow","Boolean","autofocus","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","noResize","rows","type","default","validator","v","isNaN","parseFloat","maxRows","suffix","modelModifiers","Object","VTextarea","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","vInputRef","vFieldRef","controlHeight","textareaRef","scrollbarWidth","platform","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlClick","onControlMousedown","onClear","stopPropagation","onInput","el","target","trim","caretPosition","selectionStart","selectionEnd","sizerRef","isPlainOrUnderlined","includes","variant","calculateInputHeight","firefox","offsetWidth","clientWidth","Math","style","getComputedStyle","fieldStyle","$el","padding","getPropertyValue","height","scrollHeight","lineHeight","minHeight","maxHeight","Infinity","newHeight","floor","density","observer","ResizeObserver","observe","disconnect","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","controlRef","_createElementVNode","_Fragment","_withDirectives","fieldName","fieldAutocomplete","handler","once","_normalizeClass","_vModelText","disabled"],"sources":["../../../src/components/VTextarea/VTextarea.tsx"],"sourcesContent":["// Styles\nimport './VTextarea.sass'\nimport '../VTextField/VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { callEvent, clamp, convertToUnit, filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport const makeVTextareaProps = propsFactory({\n autoGrow: Boolean,\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n noResize: Boolean,\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n maxRows: {\n type: [Number, String],\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n suffix: String,\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextarea')\n\ntype VTextareaSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n counter: VCounterSlot\n}\n\nexport const VTextarea = genericComponent<VTextareaSlots>()({\n name: 'VTextarea',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextareaProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n 'update:rows': (rows: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const { onIntersect } = useAutofocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as string | number\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const controlHeight = shallowRef('')\n const textareaRef = ref<HTMLTextAreaElement>()\n const scrollbarWidth = ref(0)\n const { platform } = useDisplay()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (textareaRef.value !== document.activeElement) {\n textareaRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onControlClick (e: MouseEvent) {\n onFocus()\n\n emit('click:control', e)\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = ''\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLTextAreaElement\n model.value = el.value\n if (props.modelModifiers?.trim) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n const sizerRef = ref<HTMLTextAreaElement>()\n const rows = ref(Number(props.rows))\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n watchEffect(() => {\n if (!props.autoGrow) rows.value = Number(props.rows)\n })\n function calculateInputHeight () {\n nextTick(() => {\n if (!textareaRef.value) return\n if (platform.value.firefox) {\n scrollbarWidth.value = 12\n return\n }\n const { offsetWidth, clientWidth } = textareaRef.value\n scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth)\n })\n\n if (!props.autoGrow) return\n\n nextTick(() => {\n if (!sizerRef.value || !vFieldRef.value) return\n\n const style = getComputedStyle(sizerRef.value)\n const fieldStyle = getComputedStyle(vFieldRef.value.$el)\n\n const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) +\n parseFloat(style.getPropertyValue('--v-input-padding-top')) +\n parseFloat(style.getPropertyValue('--v-field-padding-bottom'))\n\n const height = sizerRef.value.scrollHeight\n const lineHeight = parseFloat(style.lineHeight)\n const minHeight = Math.max(\n parseFloat(props.rows) * lineHeight + padding,\n parseFloat(fieldStyle.getPropertyValue('--v-input-control-height'))\n )\n const maxHeight = parseFloat(props.maxRows!) * lineHeight + padding || Infinity\n const newHeight = clamp(height ?? 0, minHeight, maxHeight)\n rows.value = Math.floor((newHeight - padding) / lineHeight)\n\n controlHeight.value = convertToUnit(newHeight)\n })\n }\n\n onMounted(calculateInputHeight)\n watch(model, calculateInputHeight)\n watch(() => props.rows, calculateInputHeight)\n watch(() => props.maxRows, calculateInputHeight)\n watch(() => props.density, calculateInputHeight)\n watch(rows, val => {\n emit('update:rows', val)\n })\n\n let observer: ResizeObserver | undefined\n watch(sizerRef, val => {\n if (val) {\n observer = new ResizeObserver(calculateInputHeight)\n observer.observe(sizerRef.value!)\n } else {\n observer?.disconnect()\n }\n })\n onBeforeUnmount(() => {\n observer?.disconnect()\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = {\n ...VField.filterProps(props),\n 'onClick:clear': onClear,\n }\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-textarea v-text-field',\n {\n 'v-textarea--prefixed': props.prefix,\n 'v-textarea--suffixed': props.suffix,\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-textarea--auto-grow': props.autoGrow,\n 'v-textarea--no-resize': props.noResize || props.autoGrow,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={[\n {\n '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value),\n },\n props.style,\n ]}\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n hasDetails,\n }) => (\n <VField\n ref={ vFieldRef }\n style={{\n '--v-textarea-control-height': controlHeight.value,\n }}\n onClick={ onControlClick }\n onMousedown={ onControlMousedown }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n details={ hasDetails.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n controlRef,\n }) => (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n { props.prefix }\n </span>\n )}\n\n <textarea\n ref={ val => textareaRef.value = controlRef.value = val as HTMLTextAreaElement }\n class={ fieldClass }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n rows={ props.rows }\n name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.autoGrow && (\n <textarea\n class={[\n fieldClass,\n 'v-textarea__sizer',\n ]}\n id={ `${slotProps.id}-sizer` }\n v-model={ model.value }\n ref={ sizerRef }\n readonly\n aria-hidden=\"true\"\n />\n )}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n { props.suffix }\n </span>\n )}\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, textareaRef)\n },\n})\n\nexport type VTextarea = InstanceType<typeof VTextarea>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VTextarea.js","names":["VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useDisplay","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","computed","nextTick","onBeforeUnmount","onMounted","ref","shallowRef","watch","watchEffect","callEvent","clamp","convertToUnit","filterInputAttrs","genericComponent","propsFactory","useRender","makeVTextareaProps","autoGrow","Boolean","autofocus","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","noResize","rows","type","default","validator","v","isNaN","parseFloat","maxRows","suffix","modelModifiers","Object","VTextarea","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","vInputRef","vFieldRef","controlHeight","textareaRef","scrollbarWidth","platform","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlClick","onControlMousedown","onClear","stopPropagation","onInput","el","target","trim","start","selectionStart","end","selectionEnd","offset","trimStart","sizerRef","isPlainOrUnderlined","includes","variant","calculateInputHeight","firefox","offsetWidth","clientWidth","Math","style","getComputedStyle","fieldStyle","$el","padding","getPropertyValue","height","scrollHeight","lineHeight","minHeight","maxHeight","Infinity","newHeight","floor","density","observer","ResizeObserver","observe","disconnect","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","controlRef","_createElementVNode","_Fragment","_withDirectives","fieldName","fieldAutocomplete","handler","once","_normalizeClass","_vModelText","disabled"],"sources":["../../../src/components/VTextarea/VTextarea.tsx"],"sourcesContent":["// Styles\nimport './VTextarea.sass'\nimport '../VTextField/VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { callEvent, clamp, convertToUnit, filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport const makeVTextareaProps = propsFactory({\n autoGrow: Boolean,\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n noResize: Boolean,\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n maxRows: {\n type: [Number, String],\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n suffix: String,\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextarea')\n\ntype VTextareaSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n counter: VCounterSlot\n}\n\nexport const VTextarea = genericComponent<VTextareaSlots>()({\n name: 'VTextarea',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextareaProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n 'update:rows': (rows: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const { onIntersect } = useAutofocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as string | number\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const controlHeight = shallowRef('')\n const textareaRef = ref<HTMLTextAreaElement>()\n const scrollbarWidth = ref(0)\n const { platform } = useDisplay()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (textareaRef.value !== document.activeElement) {\n textareaRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onControlClick (e: MouseEvent) {\n onFocus()\n\n emit('click:control', e)\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = ''\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLTextAreaElement\n if (!props.modelModifiers?.trim) {\n model.value = el.value\n return\n }\n\n const value = el.value\n const start = el.selectionStart\n const end = el.selectionEnd\n\n model.value = value\n\n nextTick(() => {\n let offset = 0\n if (value.trimStart().length === el.value.length) {\n // #22307 - Whitespace has been removed from the\n // start, offset the caret position to compensate\n offset = value.length - el.value.length\n }\n if (start != null) el.selectionStart = start - offset\n if (end != null) el.selectionEnd = end - offset\n })\n }\n\n const sizerRef = ref<HTMLTextAreaElement>()\n const rows = ref(Number(props.rows))\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n watchEffect(() => {\n if (!props.autoGrow) rows.value = Number(props.rows)\n })\n function calculateInputHeight () {\n nextTick(() => {\n if (!textareaRef.value) return\n if (platform.value.firefox) {\n scrollbarWidth.value = 12\n return\n }\n const { offsetWidth, clientWidth } = textareaRef.value\n scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth)\n })\n\n if (!props.autoGrow) return\n\n nextTick(() => {\n if (!sizerRef.value || !vFieldRef.value) return\n\n const style = getComputedStyle(sizerRef.value)\n const fieldStyle = getComputedStyle(vFieldRef.value.$el)\n\n const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) +\n parseFloat(style.getPropertyValue('--v-input-padding-top')) +\n parseFloat(style.getPropertyValue('--v-field-padding-bottom'))\n\n const height = sizerRef.value.scrollHeight\n const lineHeight = parseFloat(style.lineHeight)\n const minHeight = Math.max(\n parseFloat(props.rows) * lineHeight + padding,\n parseFloat(fieldStyle.getPropertyValue('--v-input-control-height'))\n )\n const maxHeight = parseFloat(props.maxRows!) * lineHeight + padding || Infinity\n const newHeight = clamp(height ?? 0, minHeight, maxHeight)\n rows.value = Math.floor((newHeight - padding) / lineHeight)\n\n controlHeight.value = convertToUnit(newHeight)\n })\n }\n\n onMounted(calculateInputHeight)\n watch(model, calculateInputHeight)\n watch(() => props.rows, calculateInputHeight)\n watch(() => props.maxRows, calculateInputHeight)\n watch(() => props.density, calculateInputHeight)\n watch(rows, val => {\n emit('update:rows', val)\n })\n\n let observer: ResizeObserver | undefined\n watch(sizerRef, val => {\n if (val) {\n observer = new ResizeObserver(calculateInputHeight)\n observer.observe(sizerRef.value!)\n } else {\n observer?.disconnect()\n }\n })\n onBeforeUnmount(() => {\n observer?.disconnect()\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = {\n ...VField.filterProps(props),\n 'onClick:clear': onClear,\n }\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-textarea v-text-field',\n {\n 'v-textarea--prefixed': props.prefix,\n 'v-textarea--suffixed': props.suffix,\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-textarea--auto-grow': props.autoGrow,\n 'v-textarea--no-resize': props.noResize || props.autoGrow,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={[\n {\n '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value),\n },\n props.style,\n ]}\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n hasDetails,\n }) => (\n <VField\n ref={ vFieldRef }\n style={{\n '--v-textarea-control-height': controlHeight.value,\n }}\n onClick={ onControlClick }\n onMousedown={ onControlMousedown }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n details={ hasDetails.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n controlRef,\n }) => (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n { props.prefix }\n </span>\n )}\n\n <textarea\n ref={ val => textareaRef.value = controlRef.value = val as HTMLTextAreaElement }\n class={ fieldClass }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n rows={ props.rows }\n name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.autoGrow && (\n <textarea\n class={[\n fieldClass,\n 'v-textarea__sizer',\n ]}\n id={ `${slotProps.id}-sizer` }\n v-model={ model.value }\n ref={ sizerRef }\n readonly\n aria-hidden=\"true\"\n />\n )}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n { props.suffix }\n </span>\n )}\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, textareaRef)\n },\n})\n\nexport type VTextarea = InstanceType<typeof VTextarea>\n"],"mappings":"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","ignoreList":[]}
@@ -155,3 +155,9 @@ export declare function useCalendar(props: CalendarProps): {
155
155
  weekdayLabels: import("vue").ComputedRef<string[]>;
156
156
  weekNumbers: import("vue").ComputedRef<(number | null)[]>;
157
157
  };
158
+ export declare function useCalendarRange(props: Pick<CalendarProps, 'min' | 'max'>): {
159
+ minDate: import("vue").ComputedRef<unknown>;
160
+ maxDate: import("vue").ComputedRef<unknown>;
161
+ clampDate: (date: unknown) => unknown;
162
+ isInAllowedRange: (date: unknown) => boolean;
163
+ };
@@ -128,11 +128,15 @@ export function useCalendar(props) {
128
128
  return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null;
129
129
  });
130
130
  });
131
+ const {
132
+ minDate,
133
+ maxDate
134
+ } = useCalendarRange(props);
131
135
  function isDisabled(value) {
132
136
  if (props.disabled) return true;
133
137
  const date = adapter.date(value);
134
- if (props.min && adapter.isBefore(adapter.endOfDay(date), adapter.date(props.min))) return true;
135
- if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true;
138
+ if (minDate.value && adapter.isBefore(adapter.endOfDay(date), minDate.value)) return true;
139
+ if (maxDate.value && adapter.isAfter(date, maxDate.value)) return true;
136
140
  if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
137
141
  return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
138
142
  }
@@ -152,4 +156,35 @@ export function useCalendar(props) {
152
156
  weekNumbers
153
157
  };
154
158
  }
159
+ export function useCalendarRange(props) {
160
+ const adapter = useDate();
161
+ const minDate = computed(() => {
162
+ if (!props.min) return null;
163
+ const date = adapter.date(props.min);
164
+ return adapter.isValid(date) ? date : null;
165
+ });
166
+ const maxDate = computed(() => {
167
+ if (!props.max) return null;
168
+ const date = adapter.date(props.max);
169
+ return adapter.isValid(date) ? date : null;
170
+ });
171
+ function clampDate(date) {
172
+ if (minDate.value && adapter.isBefore(date, minDate.value)) {
173
+ return minDate.value;
174
+ }
175
+ if (maxDate.value && adapter.isAfter(date, maxDate.value)) {
176
+ return maxDate.value;
177
+ }
178
+ return date;
179
+ }
180
+ function isInAllowedRange(date) {
181
+ return (!minDate.value || adapter.isAfter(date, minDate.value)) && (!maxDate.value || adapter.isBefore(date, maxDate.value));
182
+ }
183
+ return {
184
+ minDate,
185
+ maxDate,
186
+ clampDate,
187
+ isInAllowedRange
188
+ };
189
+ }
155
190
  //# sourceMappingURL=calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","names":["useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","type","Boolean","default","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","weekdays","weeksInMonth","firstDayOfWeek","undefined","firstDayOfYear","weekdayFormat","useCalendar","props","adapter","model","v","map","i","date","value","length","isArray","getYear","startOfYear","setYear","getMonth","startOfMonth","setMonth","weekdayLabels","toJsDate","startOfWeek","getDay","getWeekdays","filter","_","includes","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","day","push","addDays","genDays","today","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","isEnd","endOfMonth","isSame","weekdaysCount","formatted","format","isDisabled","isHidden","isSelected","some","isToday","isWeekEnd","isWeekStart","localized","daysInWeek","weekNumbers","getWeek","isBefore","endOfDay","isAfter","d"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n disabled: boolean\n displayValue?: unknown\n modelValue: unknown[] | undefined\n max: unknown\n min: unknown\n showAdjacentMonths: boolean\n month: number | string | undefined\n weekdays: number[]\n year: number | string | undefined\n weeksInMonth: 'dynamic' | 'static'\n firstDayOfWeek: number | string | undefined\n firstDayOfYear: number | string | undefined\n weekdayFormat: 'long' | 'short' | 'narrow' | undefined\n\n 'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n 'onUpdate:month': ((value: number) => void) | undefined\n 'onUpdate:year': ((value: number) => void) | undefined\n}\n\nexport type CalendarDay = {\n date: Date\n formatted: string\n isAdjacent: boolean\n isDisabled: boolean\n isEnd: boolean\n isHidden: boolean\n isSame: boolean\n isSelected: boolean\n isStart: boolean\n isToday: boolean\n isWeekEnd: boolean\n isWeekStart: boolean\n isoDate: string\n localized: string\n month: number\n year: number\n}\n\nexport type CalendarWeekdays = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n disabled: {\n type: Boolean,\n default: null,\n },\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[]>,\n month: [Number, String],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n showAdjacentMonths: Boolean,\n year: [Number, String],\n weekdays: {\n type: Array as PropType<CalendarWeekdays[]>,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n },\n weeksInMonth: {\n type: String as PropType<'dynamic' | 'static'>,\n default: 'dynamic',\n },\n firstDayOfWeek: {\n type: [Number, String],\n default: undefined,\n },\n firstDayOfYear: {\n type: [Number, String],\n default: undefined,\n },\n weekdayFormat: String as PropType<'long' | 'short' | 'narrow' | undefined>,\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n const adapter = useDate()\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => wrapInArray(v).map(i => adapter.date(i)),\n )\n const displayValue = computed(() => {\n if (props.displayValue) return adapter.date(props.displayValue)\n if (model.value.length > 0) return adapter.date(model.value[0])\n if (props.min) return adapter.date(props.min)\n if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n return adapter.date()\n })\n\n const year = useProxiedModel(\n props,\n 'year',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n },\n v => adapter.getYear(v)\n )\n\n const month = useProxiedModel(\n props,\n 'month',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n return adapter.setMonth(date, value)\n },\n v => adapter.getMonth(v)\n )\n\n const weekdayLabels = computed(() => {\n const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n return adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat)\n .filter((_, i) => props.weekdays.includes((i + firstDayOfWeek) % 7))\n })\n\n const weeksInMonth = computed(() => {\n const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek)\n\n const days = weeks.flat()\n\n // Make sure there's always 6 weeks in month (6 * 7 days)\n // if weeksInMonth is 'static'\n const daysInMonth = 6 * 7\n if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n const lastDay = days[days.length - 1]\n\n let week = []\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(adapter.addDays(lastDay, day))\n\n if (day % 7 === 0) {\n weeks.push(week)\n week = []\n }\n }\n }\n\n return weeks\n })\n\n function genDays (days: Date[], today: Date): CalendarDay[] {\n return days.filter(date => {\n return props.weekdays.includes(adapter.toJsDate(date).getDay())\n }).map((date, index) => {\n const isoDate = adapter.toISO(date)\n const isAdjacent = !adapter.isSameMonth(date, month.value)\n const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n const isSame = adapter.isSameDay(date, month.value)\n const weekdaysCount = props.weekdays.length\n\n return {\n date,\n formatted: adapter.format(date, 'keyboardDate'),\n isAdjacent,\n isDisabled: isDisabled(date),\n isEnd,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isSame,\n isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n isStart,\n isToday: adapter.isSameDay(date, today),\n isWeekEnd: index % weekdaysCount === weekdaysCount - 1,\n isWeekStart: index % weekdaysCount === 0,\n isoDate,\n localized: adapter.format(date, 'dayOfMonth'),\n month: adapter.getMonth(date),\n year: adapter.getYear(date),\n }\n })\n }\n\n const daysInWeek = computed(() => {\n const lastDay = adapter.startOfWeek(displayValue.value, props.firstDayOfWeek)\n const week: Date[] = []\n for (let day = 0; day <= 6; day++) {\n week.push(adapter.addDays(lastDay, day) as Date)\n }\n\n const today = adapter.date() as Date\n\n return genDays(week as Date[], today as Date)\n })\n\n const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat() as Date[]\n const today = adapter.date() as Date\n\n return genDays(days as Date[], today)\n })\n\n const weekNumbers = computed(() => {\n return weeksInMonth.value.map(week => {\n return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null\n })\n })\n\n function isDisabled (value: unknown) {\n if (props.disabled) return true\n\n const date = adapter.date(value)\n\n if (props.min && adapter.isBefore(adapter.endOfDay(date), adapter.date(props.min))) return true\n if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true\n\n if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n }\n\n if (typeof props.allowedDates === 'function') {\n return !props.allowedDates(date)\n }\n\n return false\n }\n\n return {\n displayValue,\n daysInMonth,\n daysInWeek,\n genDays,\n model,\n weeksInMonth,\n weekdayLabels,\n weekNumbers,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"calendar.js","names":["useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","type","Boolean","default","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","weekdays","weeksInMonth","firstDayOfWeek","undefined","firstDayOfYear","weekdayFormat","useCalendar","props","adapter","model","v","map","i","date","value","length","isArray","getYear","startOfYear","setYear","getMonth","startOfMonth","setMonth","weekdayLabels","toJsDate","startOfWeek","getDay","getWeekdays","filter","_","includes","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","day","push","addDays","genDays","today","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","isEnd","endOfMonth","isSame","weekdaysCount","formatted","format","isDisabled","isHidden","isSelected","some","isToday","isWeekEnd","isWeekStart","localized","daysInWeek","weekNumbers","getWeek","minDate","maxDate","useCalendarRange","isBefore","endOfDay","isAfter","d","isValid","clampDate","isInAllowedRange"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n disabled: boolean\n displayValue?: unknown\n modelValue: unknown[] | undefined\n max: unknown\n min: unknown\n showAdjacentMonths: boolean\n month: number | string | undefined\n weekdays: number[]\n year: number | string | undefined\n weeksInMonth: 'dynamic' | 'static'\n firstDayOfWeek: number | string | undefined\n firstDayOfYear: number | string | undefined\n weekdayFormat: 'long' | 'short' | 'narrow' | undefined\n\n 'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n 'onUpdate:month': ((value: number) => void) | undefined\n 'onUpdate:year': ((value: number) => void) | undefined\n}\n\nexport type CalendarDay = {\n date: Date\n formatted: string\n isAdjacent: boolean\n isDisabled: boolean\n isEnd: boolean\n isHidden: boolean\n isSame: boolean\n isSelected: boolean\n isStart: boolean\n isToday: boolean\n isWeekEnd: boolean\n isWeekStart: boolean\n isoDate: string\n localized: string\n month: number\n year: number\n}\n\nexport type CalendarWeekdays = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n disabled: {\n type: Boolean,\n default: null,\n },\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[]>,\n month: [Number, String],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n showAdjacentMonths: Boolean,\n year: [Number, String],\n weekdays: {\n type: Array as PropType<CalendarWeekdays[]>,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n },\n weeksInMonth: {\n type: String as PropType<'dynamic' | 'static'>,\n default: 'dynamic',\n },\n firstDayOfWeek: {\n type: [Number, String],\n default: undefined,\n },\n firstDayOfYear: {\n type: [Number, String],\n default: undefined,\n },\n weekdayFormat: String as PropType<'long' | 'short' | 'narrow' | undefined>,\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n const adapter = useDate()\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => wrapInArray(v).map(i => adapter.date(i)),\n )\n const displayValue = computed(() => {\n if (props.displayValue) return adapter.date(props.displayValue)\n if (model.value.length > 0) return adapter.date(model.value[0])\n if (props.min) return adapter.date(props.min)\n if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n return adapter.date()\n })\n\n const year = useProxiedModel(\n props,\n 'year',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n },\n v => adapter.getYear(v)\n )\n\n const month = useProxiedModel(\n props,\n 'month',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n return adapter.setMonth(date, value)\n },\n v => adapter.getMonth(v)\n )\n\n const weekdayLabels = computed(() => {\n const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n return adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat)\n .filter((_, i) => props.weekdays.includes((i + firstDayOfWeek) % 7))\n })\n\n const weeksInMonth = computed(() => {\n const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek)\n\n const days = weeks.flat()\n\n // Make sure there's always 6 weeks in month (6 * 7 days)\n // if weeksInMonth is 'static'\n const daysInMonth = 6 * 7\n if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n const lastDay = days[days.length - 1]\n\n let week = []\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(adapter.addDays(lastDay, day))\n\n if (day % 7 === 0) {\n weeks.push(week)\n week = []\n }\n }\n }\n\n return weeks\n })\n\n function genDays (days: Date[], today: Date): CalendarDay[] {\n return days.filter(date => {\n return props.weekdays.includes(adapter.toJsDate(date).getDay())\n }).map((date, index) => {\n const isoDate = adapter.toISO(date)\n const isAdjacent = !adapter.isSameMonth(date, month.value)\n const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n const isSame = adapter.isSameDay(date, month.value)\n const weekdaysCount = props.weekdays.length\n\n return {\n date,\n formatted: adapter.format(date, 'keyboardDate'),\n isAdjacent,\n isDisabled: isDisabled(date),\n isEnd,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isSame,\n isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n isStart,\n isToday: adapter.isSameDay(date, today),\n isWeekEnd: index % weekdaysCount === weekdaysCount - 1,\n isWeekStart: index % weekdaysCount === 0,\n isoDate,\n localized: adapter.format(date, 'dayOfMonth'),\n month: adapter.getMonth(date),\n year: adapter.getYear(date),\n }\n })\n }\n\n const daysInWeek = computed(() => {\n const lastDay = adapter.startOfWeek(displayValue.value, props.firstDayOfWeek)\n const week: Date[] = []\n for (let day = 0; day <= 6; day++) {\n week.push(adapter.addDays(lastDay, day) as Date)\n }\n\n const today = adapter.date() as Date\n\n return genDays(week as Date[], today as Date)\n })\n\n const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat() as Date[]\n const today = adapter.date() as Date\n\n return genDays(days as Date[], today)\n })\n\n const weekNumbers = computed(() => {\n return weeksInMonth.value.map(week => {\n return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null\n })\n })\n\n const { minDate, maxDate } = useCalendarRange(props)\n\n function isDisabled (value: unknown) {\n if (props.disabled) return true\n\n const date = adapter.date(value)\n\n if (minDate.value && adapter.isBefore(adapter.endOfDay(date), minDate.value)) return true\n if (maxDate.value && adapter.isAfter(date, maxDate.value)) return true\n\n if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n }\n\n if (typeof props.allowedDates === 'function') {\n return !props.allowedDates(date)\n }\n\n return false\n }\n\n return {\n displayValue,\n daysInMonth,\n daysInWeek,\n genDays,\n model,\n weeksInMonth,\n weekdayLabels,\n weekNumbers,\n }\n}\n\nexport function useCalendarRange (props: Pick<CalendarProps, 'min' | 'max'>) {\n const adapter = useDate()\n\n const minDate = computed(() => {\n if (!props.min) return null\n const date = adapter.date(props.min)\n return adapter.isValid(date) ? date : null\n })\n\n const maxDate = computed(() => {\n if (!props.max) return null\n const date = adapter.date(props.max)\n return adapter.isValid(date) ? date : null\n })\n\n function clampDate (date: unknown) {\n if (minDate.value && adapter.isBefore(date, minDate.value)) {\n return minDate.value\n }\n if (maxDate.value && adapter.isAfter(date, maxDate.value)) {\n return maxDate.value\n }\n return date\n }\n\n function isInAllowedRange (date: unknown) {\n return (!minDate.value || adapter.isAfter(date, minDate.value)) &&\n (!maxDate.value || adapter.isBefore(date, maxDate.value))\n }\n\n return {\n minDate,\n maxDate,\n clampDate,\n isInAllowedRange,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,9 +9,10 @@ export function useDelay(props, cb) {
9
9
  let clearDelay = () => {};
10
10
  function runDelay(isOpening, options) {
11
11
  clearDelay?.();
12
- const delay = Math.max(options?.minDelay ?? 0, Number(isOpening ? props.openDelay : props.closeDelay));
12
+ const delay = isOpening ? props.openDelay : props.closeDelay;
13
+ const normalizedDelay = Math.max(options?.minDelay ?? 0, Number(delay ?? 0));
13
14
  return new Promise(resolve => {
14
- clearDelay = defer(delay, () => {
15
+ clearDelay = defer(normalizedDelay, () => {
15
16
  cb?.(isOpening);
16
17
  resolve(isOpening);
17
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"delay.js","names":["defer","propsFactory","makeDelayProps","closeDelay","Number","String","openDelay","useDelay","props","cb","clearDelay","runDelay","isOpening","options","delay","Math","max","minDelay","Promise","resolve","runOpenDelay","runCloseDelay"],"sources":["../../src/composables/delay.ts"],"sourcesContent":["// Utilities\nimport { defer, propsFactory } from '@/util'\n\n// Types\nexport interface DelayProps {\n closeDelay?: number | string\n openDelay?: number | string\n}\n\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String],\n}, 'delay')\n\nexport function useDelay (props: DelayProps, cb?: (value: boolean) => void) {\n let clearDelay: (() => void) = () => {}\n\n function runDelay (isOpening: boolean, options?: { minDelay: number }) {\n clearDelay?.()\n\n const delay = Math.max(\n options?.minDelay ?? 0,\n Number(isOpening ? props.openDelay : props.closeDelay)\n )\n\n return new Promise(resolve => {\n clearDelay = defer(delay, () => {\n cb?.(isOpening)\n resolve(isOpening)\n })\n })\n }\n\n function runOpenDelay () {\n return runDelay(true)\n }\n\n function runCloseDelay (options?: { minDelay: number }) {\n return runDelay(false, options)\n }\n\n return {\n clearDelay,\n runOpenDelay,\n runCloseDelay,\n }\n}\n"],"mappings":"AAAA;AAAA,SACSA,KAAK,EAAEC,YAAY,4BAE5B;AAMA;AACA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;EACzCE,UAAU,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EAC5BC,SAAS,EAAE,CAACF,MAAM,EAAEC,MAAM;AAC5B,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,SAASE,QAAQA,CAAEC,KAAiB,EAAEC,EAA6B,EAAE;EAC1E,IAAIC,UAAwB,GAAGA,CAAA,KAAM,CAAC,CAAC;EAEvC,SAASC,QAAQA,CAAEC,SAAkB,EAAEC,OAA8B,EAAE;IACrEH,UAAU,GAAG,CAAC;IAEd,MAAMI,KAAK,GAAGC,IAAI,CAACC,GAAG,CACpBH,OAAO,EAAEI,QAAQ,IAAI,CAAC,EACtBb,MAAM,CAACQ,SAAS,GAAGJ,KAAK,CAACF,SAAS,GAAGE,KAAK,CAACL,UAAU,CACvD,CAAC;IAED,OAAO,IAAIe,OAAO,CAACC,OAAO,IAAI;MAC5BT,UAAU,GAAGV,KAAK,CAACc,KAAK,EAAE,MAAM;QAC9BL,EAAE,GAAGG,SAAS,CAAC;QACfO,OAAO,CAACP,SAAS,CAAC;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,SAASQ,YAAYA,CAAA,EAAI;IACvB,OAAOT,QAAQ,CAAC,IAAI,CAAC;EACvB;EAEA,SAASU,aAAaA,CAAER,OAA8B,EAAE;IACtD,OAAOF,QAAQ,CAAC,KAAK,EAAEE,OAAO,CAAC;EACjC;EAEA,OAAO;IACLH,UAAU;IACVU,YAAY;IACZC;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"delay.js","names":["defer","propsFactory","makeDelayProps","closeDelay","Number","String","openDelay","useDelay","props","cb","clearDelay","runDelay","isOpening","options","delay","normalizedDelay","Math","max","minDelay","Promise","resolve","runOpenDelay","runCloseDelay"],"sources":["../../src/composables/delay.ts"],"sourcesContent":["// Utilities\nimport { defer, propsFactory } from '@/util'\n\n// Types\nexport interface DelayProps {\n closeDelay?: number | string\n openDelay?: number | string\n}\n\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String],\n}, 'delay')\n\nexport function useDelay (props: DelayProps, cb?: (value: boolean) => void) {\n let clearDelay: (() => void) = () => {}\n\n function runDelay (isOpening: boolean, options?: { minDelay: number }) {\n clearDelay?.()\n\n const delay = isOpening ? props.openDelay : props.closeDelay\n\n const normalizedDelay = Math.max(\n options?.minDelay ?? 0,\n Number(delay ?? 0)\n )\n\n return new Promise(resolve => {\n clearDelay = defer(normalizedDelay, () => {\n cb?.(isOpening)\n resolve(isOpening)\n })\n })\n }\n\n function runOpenDelay () {\n return runDelay(true)\n }\n\n function runCloseDelay (options?: { minDelay: number }) {\n return runDelay(false, options)\n }\n\n return {\n clearDelay,\n runOpenDelay,\n runCloseDelay,\n }\n}\n"],"mappings":"AAAA;AAAA,SACSA,KAAK,EAAEC,YAAY,4BAE5B;AAMA;AACA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;EACzCE,UAAU,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EAC5BC,SAAS,EAAE,CAACF,MAAM,EAAEC,MAAM;AAC5B,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,SAASE,QAAQA,CAAEC,KAAiB,EAAEC,EAA6B,EAAE;EAC1E,IAAIC,UAAwB,GAAGA,CAAA,KAAM,CAAC,CAAC;EAEvC,SAASC,QAAQA,CAAEC,SAAkB,EAAEC,OAA8B,EAAE;IACrEH,UAAU,GAAG,CAAC;IAEd,MAAMI,KAAK,GAAGF,SAAS,GAAGJ,KAAK,CAACF,SAAS,GAAGE,KAAK,CAACL,UAAU;IAE5D,MAAMY,eAAe,GAAGC,IAAI,CAACC,GAAG,CAC9BJ,OAAO,EAAEK,QAAQ,IAAI,CAAC,EACtBd,MAAM,CAACU,KAAK,IAAI,CAAC,CACnB,CAAC;IAED,OAAO,IAAIK,OAAO,CAACC,OAAO,IAAI;MAC5BV,UAAU,GAAGV,KAAK,CAACe,eAAe,EAAE,MAAM;QACxCN,EAAE,GAAGG,SAAS,CAAC;QACfQ,OAAO,CAACR,SAAS,CAAC;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,SAASS,YAAYA,CAAA,EAAI;IACvB,OAAOV,QAAQ,CAAC,IAAI,CAAC;EACvB;EAEA,SAASW,aAAaA,CAAET,OAA8B,EAAE;IACtD,OAAOF,QAAQ,CAAC,KAAK,EAAEE,OAAO,CAAC;EACjC;EAEA,OAAO;IACLH,UAAU;IACVW,YAAY;IACZC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,8 +1,7 @@
1
1
  // Composables
2
2
  import { splitKeyCombination, splitKeySequence } from "./hotkey-parsing.js"; // Utilities
3
- import { onBeforeUnmount, toValue, watch } from 'vue';
4
- import { IN_BROWSER } from "../../util/index.js";
5
- import { getCurrentInstance } from "../../util/getCurrentInstance.js"; // Types
3
+ import { onScopeDispose, toValue, watch } from 'vue';
4
+ import { IN_BROWSER } from "../../util/index.js"; // Types
6
5
  export function useHotkey(keys, callback) {
7
6
  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
8
7
  if (!IN_BROWSER) return function () {};
@@ -17,11 +16,6 @@ export function useHotkey(keys, callback) {
17
16
  let keyGroups;
18
17
  let isSequence = false;
19
18
  let groupIndex = 0;
20
- function clearTimer() {
21
- if (!timeout) return;
22
- clearTimeout(timeout);
23
- timeout = 0;
24
- }
25
19
  function isInputFocused() {
26
20
  if (toValue(inputs)) return false;
27
21
  const activeElement = document.activeElement;
@@ -29,12 +23,12 @@ export function useHotkey(keys, callback) {
29
23
  }
30
24
  function resetSequence() {
31
25
  groupIndex = 0;
32
- clearTimer();
26
+ clearTimeout(timeout);
33
27
  }
34
28
  function handler(e) {
35
29
  const group = keyGroups[groupIndex];
36
30
  if (!group || isInputFocused()) return;
37
- if (!matchesKeyGroup(e, group)) {
31
+ if (!matchesKeyGroup(e, group, isMac)) {
38
32
  if (isSequence) resetSequence();
39
33
  return;
40
34
  }
@@ -43,7 +37,7 @@ export function useHotkey(keys, callback) {
43
37
  callback(e);
44
38
  return;
45
39
  }
46
- clearTimer();
40
+ clearTimeout(timeout);
47
41
  groupIndex++;
48
42
  if (groupIndex === keyGroups.length) {
49
43
  callback(e);
@@ -54,12 +48,12 @@ export function useHotkey(keys, callback) {
54
48
  }
55
49
  function cleanup() {
56
50
  window.removeEventListener(toValue(event), handler);
57
- clearTimer();
51
+ clearTimeout(timeout);
58
52
  }
59
- watch(() => toValue(keys), function (unrefKeys) {
53
+ watch(() => toValue(keys), newKeys => {
60
54
  cleanup();
61
- if (unrefKeys) {
62
- const groups = splitKeySequence(unrefKeys.toLowerCase());
55
+ if (newKeys) {
56
+ const groups = splitKeySequence(newKeys.toLowerCase());
63
57
  isSequence = groups.length > 1;
64
58
  keyGroups = groups;
65
59
  resetSequence();
@@ -70,54 +64,49 @@ export function useHotkey(keys, callback) {
70
64
  });
71
65
 
72
66
  // Watch for changes in the event type to re-register the listener
73
- watch(() => toValue(event), function (newEvent, oldEvent) {
67
+ watch(() => toValue(event), (newEvent, oldEvent) => {
74
68
  if (oldEvent && keyGroups && keyGroups.length > 0) {
75
69
  window.removeEventListener(oldEvent, handler);
76
70
  window.addEventListener(newEvent, handler);
77
71
  }
78
72
  });
79
- try {
80
- getCurrentInstance('useHotkey');
81
- onBeforeUnmount(cleanup);
82
- } catch {
83
- // Not in Vue setup context
84
- }
85
- function parseKeyGroup(group) {
86
- const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'];
73
+ onScopeDispose(cleanup, true);
74
+ return cleanup;
75
+ }
76
+ function matchesKeyGroup(e, group, isMac) {
77
+ const {
78
+ modifiers,
79
+ actualKey
80
+ } = parseKeyGroup(group);
81
+ const expectCtrl = modifiers.ctrl || !isMac && (modifiers.cmd || modifiers.meta);
82
+ const expectMeta = isMac && (modifiers.cmd || modifiers.meta);
83
+ return e.ctrlKey === expectCtrl && e.metaKey === expectMeta && e.shiftKey === modifiers.shift && e.altKey === modifiers.alt && e.key.toLowerCase() === actualKey?.toLowerCase();
84
+ }
85
+ function parseKeyGroup(group) {
86
+ const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'];
87
87
 
88
- // Use the shared combination splitting logic
89
- const parts = splitKeyCombination(group.toLowerCase());
88
+ // Use the shared combination splitting logic
89
+ const parts = splitKeyCombination(group.toLowerCase());
90
90
 
91
- // If the combination is invalid, return empty result
92
- if (parts.length === 0) {
93
- return {
94
- modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
95
- actualKey: undefined
96
- };
97
- }
98
- const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false]));
99
- let actualKey;
100
- for (const part of parts) {
101
- if (MODIFIERS.includes(part)) {
102
- modifiers[part] = true;
103
- } else {
104
- actualKey = part;
105
- }
106
- }
91
+ // If the combination is invalid, return empty result
92
+ if (parts.length === 0) {
107
93
  return {
108
- modifiers,
109
- actualKey
94
+ modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
95
+ actualKey: undefined
110
96
  };
111
97
  }
112
- function matchesKeyGroup(e, group) {
113
- const {
114
- modifiers,
115
- actualKey
116
- } = parseKeyGroup(group);
117
- const expectCtrl = modifiers.ctrl || !isMac && (modifiers.cmd || modifiers.meta);
118
- const expectMeta = isMac && (modifiers.cmd || modifiers.meta);
119
- return e.ctrlKey === expectCtrl && e.metaKey === expectMeta && e.shiftKey === modifiers.shift && e.altKey === modifiers.alt && e.key.toLowerCase() === actualKey?.toLowerCase();
98
+ const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false]));
99
+ let actualKey;
100
+ for (const part of parts) {
101
+ if (MODIFIERS.includes(part)) {
102
+ modifiers[part] = true;
103
+ } else {
104
+ actualKey = part;
105
+ }
120
106
  }
121
- return cleanup;
107
+ return {
108
+ modifiers,
109
+ actualKey
110
+ };
122
111
  }
123
112
  //# sourceMappingURL=hotkey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hotkey.js","names":["splitKeyCombination","splitKeySequence","onBeforeUnmount","toValue","watch","IN_BROWSER","getCurrentInstance","useHotkey","keys","callback","options","arguments","length","undefined","event","inputs","preventDefault","sequenceTimeout","isMac","navigator","userAgent","includes","timeout","keyGroups","isSequence","groupIndex","clearTimer","clearTimeout","isInputFocused","activeElement","document","tagName","isContentEditable","contentEditable","resetSequence","handler","e","group","matchesKeyGroup","window","setTimeout","cleanup","removeEventListener","unrefKeys","groups","toLowerCase","addEventListener","immediate","newEvent","oldEvent","parseKeyGroup","MODIFIERS","parts","modifiers","Object","fromEntries","map","m","actualKey","part","expectCtrl","ctrl","cmd","meta","expectMeta","ctrlKey","metaKey","shiftKey","shift","altKey","alt","key"],"sources":["../../../src/composables/hotkey/hotkey.ts"],"sourcesContent":["// Composables\nimport { splitKeyCombination, splitKeySequence } from '@/composables/hotkey/hotkey-parsing'\n\n// Utilities\nimport { onBeforeUnmount, toValue, watch } from 'vue'\nimport { IN_BROWSER } from '@/util'\nimport { getCurrentInstance } from '@/util/getCurrentInstance'\n\n// Types\nimport type { MaybeRef } from '@/util'\n\ninterface HotkeyOptions {\n event?: MaybeRef<'keydown' | 'keyup'>\n inputs?: MaybeRef<boolean>\n preventDefault?: MaybeRef<boolean>\n sequenceTimeout?: MaybeRef<number>\n}\n\nexport function useHotkey (\n keys: MaybeRef<string | undefined>,\n callback: (e: KeyboardEvent) => void,\n options: HotkeyOptions = {}\n) {\n if (!IN_BROWSER) return function () {}\n\n const {\n event = 'keydown',\n inputs = false,\n preventDefault = true,\n sequenceTimeout = 1000,\n } = options\n\n const isMac = navigator?.userAgent?.includes('Macintosh') ?? false\n let timeout = 0\n let keyGroups: string[]\n let isSequence = false\n let groupIndex = 0\n\n function clearTimer () {\n if (!timeout) return\n\n clearTimeout(timeout)\n timeout = 0\n }\n\n function isInputFocused () {\n if (toValue(inputs)) return false\n\n const activeElement = document.activeElement as HTMLElement\n\n return activeElement && (\n activeElement.tagName === 'INPUT' ||\n activeElement.tagName === 'TEXTAREA' ||\n activeElement.isContentEditable ||\n activeElement.contentEditable === 'true'\n )\n }\n\n function resetSequence () {\n groupIndex = 0\n clearTimer()\n }\n\n function handler (e: KeyboardEvent) {\n const group = keyGroups[groupIndex]\n\n if (!group || isInputFocused()) return\n\n if (!matchesKeyGroup(e, group)) {\n if (isSequence) resetSequence()\n return\n }\n\n if (toValue(preventDefault)) e.preventDefault()\n\n if (!isSequence) {\n callback(e)\n return\n }\n\n clearTimer()\n groupIndex++\n\n if (groupIndex === keyGroups.length) {\n callback(e)\n resetSequence()\n return\n }\n\n timeout = window.setTimeout(resetSequence, toValue(sequenceTimeout))\n }\n\n function cleanup () {\n window.removeEventListener(toValue(event), handler)\n clearTimer()\n }\n\n watch(() => toValue(keys), function (unrefKeys) {\n cleanup()\n\n if (unrefKeys) {\n const groups = splitKeySequence(unrefKeys.toLowerCase())\n isSequence = groups.length > 1\n keyGroups = groups\n resetSequence()\n window.addEventListener(toValue(event), handler)\n }\n }, { immediate: true })\n\n // Watch for changes in the event type to re-register the listener\n watch(() => toValue(event), function (newEvent, oldEvent) {\n if (oldEvent && keyGroups && keyGroups.length > 0) {\n window.removeEventListener(oldEvent, handler)\n window.addEventListener(newEvent, handler)\n }\n })\n\n try {\n getCurrentInstance('useHotkey')\n onBeforeUnmount(cleanup)\n } catch {\n // Not in Vue setup context\n }\n\n function parseKeyGroup (group: string) {\n const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd']\n\n // Use the shared combination splitting logic\n const parts = splitKeyCombination(group.toLowerCase())\n\n // If the combination is invalid, return empty result\n if (parts.length === 0) {\n return { modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])), actualKey: undefined }\n }\n\n const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false])) as Record<string, boolean>\n let actualKey: string | undefined\n\n for (const part of parts) {\n if (MODIFIERS.includes(part)) {\n modifiers[part] = true\n } else {\n actualKey = part\n }\n }\n\n return { modifiers, actualKey }\n }\n\n function matchesKeyGroup (e: KeyboardEvent, group: string) {\n const { modifiers, actualKey } = parseKeyGroup(group)\n\n const expectCtrl = modifiers.ctrl || (!isMac && (modifiers.cmd || modifiers.meta))\n const expectMeta = isMac && (modifiers.cmd || modifiers.meta)\n\n return (\n e.ctrlKey === expectCtrl &&\n e.metaKey === expectMeta &&\n e.shiftKey === modifiers.shift &&\n e.altKey === modifiers.alt &&\n e.key.toLowerCase() === actualKey?.toLowerCase()\n )\n }\n\n return cleanup\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"hotkey.js","names":["splitKeyCombination","splitKeySequence","onScopeDispose","toValue","watch","IN_BROWSER","useHotkey","keys","callback","options","arguments","length","undefined","event","inputs","preventDefault","sequenceTimeout","isMac","navigator","userAgent","includes","timeout","keyGroups","isSequence","groupIndex","isInputFocused","activeElement","document","tagName","isContentEditable","contentEditable","resetSequence","clearTimeout","handler","e","group","matchesKeyGroup","window","setTimeout","cleanup","removeEventListener","newKeys","groups","toLowerCase","addEventListener","immediate","newEvent","oldEvent","modifiers","actualKey","parseKeyGroup","expectCtrl","ctrl","cmd","meta","expectMeta","ctrlKey","metaKey","shiftKey","shift","altKey","alt","key","MODIFIERS","parts","Object","fromEntries","map","m","part"],"sources":["../../../src/composables/hotkey/hotkey.ts"],"sourcesContent":["// Composables\nimport { splitKeyCombination, splitKeySequence } from '@/composables/hotkey/hotkey-parsing'\n\n// Utilities\nimport { onScopeDispose, toValue, watch } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\n// Types\nimport type { MaybeRef } from '@/util'\n\ninterface HotkeyOptions {\n event?: MaybeRef<'keydown' | 'keyup'>\n inputs?: MaybeRef<boolean>\n preventDefault?: MaybeRef<boolean>\n sequenceTimeout?: MaybeRef<number>\n}\n\nexport function useHotkey (\n keys: MaybeRef<string | undefined>,\n callback: (e: KeyboardEvent) => void,\n options: HotkeyOptions = {}\n) {\n if (!IN_BROWSER) return function () {}\n\n const {\n event = 'keydown',\n inputs = false,\n preventDefault = true,\n sequenceTimeout = 1000,\n } = options\n\n const isMac = navigator?.userAgent?.includes('Macintosh') ?? false\n let timeout = 0\n let keyGroups: string[]\n let isSequence = false\n let groupIndex = 0\n\n function isInputFocused () {\n if (toValue(inputs)) return false\n\n const activeElement = document.activeElement as HTMLElement\n\n return activeElement && (\n activeElement.tagName === 'INPUT' ||\n activeElement.tagName === 'TEXTAREA' ||\n activeElement.isContentEditable ||\n activeElement.contentEditable === 'true'\n )\n }\n\n function resetSequence () {\n groupIndex = 0\n clearTimeout(timeout)\n }\n\n function handler (e: KeyboardEvent) {\n const group = keyGroups[groupIndex]\n\n if (!group || isInputFocused()) return\n\n if (!matchesKeyGroup(e, group, isMac)) {\n if (isSequence) resetSequence()\n return\n }\n\n if (toValue(preventDefault)) e.preventDefault()\n\n if (!isSequence) {\n callback(e)\n return\n }\n\n clearTimeout(timeout)\n groupIndex++\n\n if (groupIndex === keyGroups.length) {\n callback(e)\n resetSequence()\n return\n }\n\n timeout = window.setTimeout(resetSequence, toValue(sequenceTimeout))\n }\n\n function cleanup () {\n window.removeEventListener(toValue(event), handler)\n clearTimeout(timeout)\n }\n\n watch(() => toValue(keys), newKeys => {\n cleanup()\n\n if (newKeys) {\n const groups = splitKeySequence(newKeys.toLowerCase())\n isSequence = groups.length > 1\n keyGroups = groups\n resetSequence()\n window.addEventListener(toValue(event), handler)\n }\n }, { immediate: true })\n\n // Watch for changes in the event type to re-register the listener\n watch(() => toValue(event), (newEvent, oldEvent) => {\n if (oldEvent && keyGroups && keyGroups.length > 0) {\n window.removeEventListener(oldEvent, handler)\n window.addEventListener(newEvent, handler)\n }\n })\n\n onScopeDispose(cleanup, true)\n\n return cleanup\n}\n\nfunction matchesKeyGroup (e: KeyboardEvent, group: string, isMac: boolean) {\n const { modifiers, actualKey } = parseKeyGroup(group)\n\n const expectCtrl = modifiers.ctrl || (!isMac && (modifiers.cmd || modifiers.meta))\n const expectMeta = isMac && (modifiers.cmd || modifiers.meta)\n\n return (\n e.ctrlKey === expectCtrl &&\n e.metaKey === expectMeta &&\n e.shiftKey === modifiers.shift &&\n e.altKey === modifiers.alt &&\n e.key.toLowerCase() === actualKey?.toLowerCase()\n )\n}\n\nfunction parseKeyGroup (group: string) {\n const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd']\n\n // Use the shared combination splitting logic\n const parts = splitKeyCombination(group.toLowerCase())\n\n // If the combination is invalid, return empty result\n if (parts.length === 0) {\n return { modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])), actualKey: undefined }\n }\n\n const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false])) as Record<string, boolean>\n let actualKey: string | undefined\n\n for (const part of parts) {\n if (MODIFIERS.includes(part)) {\n modifiers[part] = true\n } else {\n actualKey = part\n }\n }\n\n return { modifiers, actualKey }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.10.9";
19
+ export const version = "3.10.10";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"entry-bundler.js","names":["blueprints","components","directives","createVuetify","_createVuetify","options","arguments","length","undefined","version"],"sources":["../src/entry-bundler.ts"],"sourcesContent":["/* eslint-disable local-rules/sort-imports */\n\n// Styles\nimport './styles/main.sass'\n\n// Components\nimport * as blueprints from './blueprints'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\n\n// Types\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\nexport {\n blueprints,\n components,\n directives,\n}\nexport * from './composables'\n"],"mappings":"AAAA;;AAEA;AACA;;AAEA;AAAA,OACO,KAAKA,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,SACbC,aAAa,IAAIC,cAAc,0BAExC;AAGA,OAAO,MAAMD,aAAa,GAAG,SAAAA,CAAA,EAAkC;EAAA,IAAjCE,OAAuB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACxD,OAAOF,cAAc,CAAC;IAAEH,UAAU;IAAEC,UAAU;IAAE,GAAGG;EAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMI,OAAO,WAAsB;AAC1CN,aAAa,CAACM,OAAO,GAAGA,OAAO;AAE/B,SACET,UAAU,EACVC,UAAU,EACVC,UAAU;AACX","ignoreList":[]}
1
+ {"version":3,"file":"entry-bundler.js","names":["blueprints","components","directives","createVuetify","_createVuetify","options","arguments","length","undefined","version"],"sources":["../src/entry-bundler.ts"],"sourcesContent":["/* eslint-disable local-rules/sort-imports */\n\n// Styles\nimport './styles/main.sass'\n\n// Components\nimport * as blueprints from './blueprints'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\n\n// Types\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\nexport {\n blueprints,\n components,\n directives,\n}\nexport * from './composables'\n"],"mappings":"AAAA;;AAEA;AACA;;AAEA;AAAA,OACO,KAAKA,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,SACbC,aAAa,IAAIC,cAAc,0BAExC;AAGA,OAAO,MAAMD,aAAa,GAAG,SAAAA,CAAA,EAAkC;EAAA,IAAjCE,OAAuB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACxD,OAAOF,cAAc,CAAC;IAAEH,UAAU;IAAEC,UAAU;IAAE,GAAGG;EAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMI,OAAO,YAAsB;AAC1CN,aAAa,CAACM,OAAO,GAAGA,OAAO;AAE/B,SACET,UAAU,EACVC,UAAU,EACVC,UAAU;AACX","ignoreList":[]}