vuetify 3.10.8 → 3.10.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/json/attributes.json +1543 -1543
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +174 -174
- package/dist/json/web-types.json +2937 -2937
- package/dist/vuetify-labs.cjs +205 -216
- package/dist/vuetify-labs.css +4754 -4730
- package/dist/vuetify-labs.d.ts +72 -72
- package/dist/vuetify-labs.esm.js +205 -216
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +205 -216
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +137 -99
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2766 -2730
- package/dist/vuetify.d.ts +56 -56
- package/dist/vuetify.esm.js +137 -99
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +137 -99
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +334 -330
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAvatar/VAvatar.css +1 -1
- package/lib/components/VAvatar/_variables.scss +1 -1
- package/lib/components/VBtnToggle/VBtnToggle.css +21 -0
- package/lib/components/VBtnToggle/VBtnToggle.sass +22 -0
- package/lib/components/VCard/VCard.js +8 -1
- package/lib/components/VCard/VCard.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.js +7 -16
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VList/VList.css +6 -0
- package/lib/components/VList/VList.sass +6 -0
- package/lib/components/VList/VListItem.css +0 -3
- package/lib/components/VList/VListItem.sass +0 -4
- package/lib/components/VOverlay/useActivator.js +2 -1
- package/lib/components/VOverlay/useActivator.js.map +1 -1
- package/lib/components/VTabs/VTab.css +8 -0
- package/lib/components/VTabs/VTab.sass +7 -0
- package/lib/components/VTextField/VTextField.js +17 -7
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.js +17 -7
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/composables/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +37 -2
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/delay.js +3 -2
- package/lib/composables/delay.js.map +1 -1
- package/lib/composables/hotkey/hotkey.js +42 -53
- package/lib/composables/hotkey/hotkey.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +56 -56
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.js +8 -12
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VHotkey/VHotkey.css +4 -16
- package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
- package/lib/labs/VHotkey/VHotkey.js +62 -106
- package/lib/labs/VHotkey/VHotkey.js.map +1 -1
- package/lib/labs/VHotkey/VHotkey.scss +8 -25
- package/lib/styles/main.css +4 -0
- package/lib/styles/settings/_variables.scss +1 -0
- package/lib/util/box.js +3 -8
- package/lib/util/box.js.map +1 -1
- package/lib/util/throttle.js +2 -2
- package/lib/util/throttle.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTextField.js","names":["VCounter","makeVFieldProps","VField","makeVInputProps","VInput","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","omit","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","role","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","vInputRef","vFieldRef","inputRef","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlMousedown","target","preventDefault","onControlClick","onClear","reset","stopPropagation","onInput","el","trim","caretPosition","selectionStart","selectionEnd","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","controlRef","inputNode","_withDirectives","_createElementVNode","fieldName","fieldAutocomplete","handler","once","_Fragment","_normalizeClass","disabled"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// 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 { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, omit, 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\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String],\n counterValue: [Number, Function] as PropType<number | ((value: any) => number)>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n role: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\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 },\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' ? props.counterValue(model.value)\n : typeof props.counterValue === 'number' ? props.counterValue\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\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 isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (!isFocused.value) focus()\n\n nextTick(() => {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n })\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n emit('click:control', e)\n }\n function onClear (e: MouseEvent, reset: () => void) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n reset()\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value\n if (\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n ) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || (props.counter !== false && props.counter != null))\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !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 reset,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ (e: MouseEvent) => onClear(e, reset) }\n role={ props.role }\n { ...omit(fieldProps, ['onClick:clear']) }\n id={ id.value }\n active={ isActive.value || isDirty.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 const inputNode = (\n <input\n ref={ val => inputRef.value = controlRef.value = val as HTMLInputElement }\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 name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n placeholder={ props.placeholder }\n size={ 1 }\n role={ props.role }\n type={ props.type }\n onFocus={ focus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n <span class=\"v-text-field__prefix__text\">\n { props.prefix }\n </span>\n </span>\n )}\n\n { slots.default ? (\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default() }\n { inputNode }\n </div>\n ) : cloneVNode(inputNode, { class: fieldClass })}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n <span class=\"v-text-field__suffix__text\">\n { props.suffix }\n </span>\n </span>\n )}\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, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VTextField.js","names":["VCounter","makeVFieldProps","VField","makeVInputProps","VInput","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","omit","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","role","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","vInputRef","vFieldRef","inputRef","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlMousedown","target","preventDefault","onControlClick","onClear","reset","stopPropagation","onInput","el","trim","start","selectionStart","end","selectionEnd","offset","trimStart","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","controlRef","inputNode","_withDirectives","_createElementVNode","fieldName","fieldAutocomplete","handler","once","_Fragment","_normalizeClass","disabled"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// 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 { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, omit, 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\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String],\n counterValue: [Number, Function] as PropType<number | ((value: any) => number)>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n role: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\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 },\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' ? props.counterValue(model.value)\n : typeof props.counterValue === 'number' ? props.counterValue\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\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 isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (!isFocused.value) focus()\n\n nextTick(() => {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n })\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n emit('click:control', e)\n }\n function onClear (e: MouseEvent, reset: () => void) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n reset()\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n\n if (!(\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n )) {\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 useRender(() => {\n const hasCounter = !!(slots.counter || (props.counter !== false && props.counter != null))\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !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 reset,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ (e: MouseEvent) => onClear(e, reset) }\n role={ props.role }\n { ...omit(fieldProps, ['onClick:clear']) }\n id={ id.value }\n active={ isActive.value || isDirty.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 const inputNode = (\n <input\n ref={ val => inputRef.value = controlRef.value = val as HTMLInputElement }\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 name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n placeholder={ props.placeholder }\n size={ 1 }\n role={ props.role }\n type={ props.type }\n onFocus={ focus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n <span class=\"v-text-field__prefix__text\">\n { props.prefix }\n </span>\n </span>\n )}\n\n { slots.default ? (\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default() }\n { inputNode }\n </div>\n ) : cloneVNode(inputNode, { class: fieldClass })}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n <span class=\"v-text-field__suffix__text\">\n { props.suffix }\n </span>\n </span>\n )}\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, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -115,14 +115,24 @@ export const VTextarea = genericComponent()({
|
|
|
115
115
|
}
|
|
116
116
|
function onInput(e) {
|
|
117
117
|
const el = e.target;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
nextTick(() => {
|
|
122
|
-
el.selectionStart = caretPosition[0];
|
|
123
|
-
el.selectionEnd = caretPosition[1];
|
|
124
|
-
});
|
|
118
|
+
if (!props.modelModifiers?.trim) {
|
|
119
|
+
model.value = el.value;
|
|
120
|
+
return;
|
|
125
121
|
}
|
|
122
|
+
const value = el.value;
|
|
123
|
+
const start = el.selectionStart;
|
|
124
|
+
const end = el.selectionEnd;
|
|
125
|
+
model.value = value;
|
|
126
|
+
nextTick(() => {
|
|
127
|
+
let offset = 0;
|
|
128
|
+
if (value.trimStart().length === el.value.length) {
|
|
129
|
+
// #22307 - Whitespace has been removed from the
|
|
130
|
+
// start, offset the caret position to compensate
|
|
131
|
+
offset = value.length - el.value.length;
|
|
132
|
+
}
|
|
133
|
+
if (start != null) el.selectionStart = start - offset;
|
|
134
|
+
if (end != null) el.selectionEnd = end - offset;
|
|
135
|
+
});
|
|
126
136
|
}
|
|
127
137
|
const sizerRef = ref();
|
|
128
138
|
const rows = ref(Number(props.rows));
|
|
@@ -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":";AAAA;AACA;AACA;;AAEA;AAAA,SACSA,QAAQ;AAAA,SACRC,MAAM;AAAA,SACNC,eAAe;AAAA,SACfC,eAAe,EAAEC,MAAM,+BAEhC;AAAA,SACSC,UAAU;AAAA,SACVC,qBAAqB,EAAEC,eAAe;AAAA,SACtCC,YAAY;AAAA,SACZC,QAAQ;AAAA,SACRC,WAAW;AAAA,SACXC,eAAe,6CAExB;AAAA,OACOC,UAAU,6CAEjB;AACA,SAASC,QAAQ,EAAEC,QAAQ,EAAEC,eAAe,EAAEC,SAAS,EAAEC,GAAG,EAAEC,UAAU,EAAEC,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAAA,SAChGC,SAAS,EAAEC,KAAK,EAAEC,aAAa,EAAEC,gBAAgB,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,+BAErG;AAMA,OAAO,MAAMC,kBAAkB,GAAGF,YAAY,CAAC;EAC7CG,QAAQ,EAAEC,OAAO;EACjBC,SAAS,EAAED,OAAO;EAClBE,OAAO,EAAE,CAACF,OAAO,EAAEG,MAAM,EAAEC,MAAM,CAAqC;EACtEC,YAAY,EAAEC,QAA4C;EAC1DC,MAAM,EAAEH,MAAM;EACdI,WAAW,EAAEJ,MAAM;EACnBK,qBAAqB,EAAET,OAAO;EAC9BU,iBAAiB,EAAEV,OAAO;EAC1BW,QAAQ,EAAEX,OAAO;EACjBY,IAAI,EAAE;IACJC,IAAI,EAAE,CAACV,MAAM,EAAEC,MAAM,CAAC;IACtBU,OAAO,EAAE,CAAC;IACVC,SAAS,EAAGC,CAAM,IAAK,CAACC,KAAK,CAACC,UAAU,CAACF,CAAC,CAAC;EAC7C,CAAC;EACDG,OAAO,EAAE;IACPN,IAAI,EAAE,CAACV,MAAM,EAAEC,MAAM,CAAC;IACtBW,SAAS,EAAGC,CAAM,IAAK,CAACC,KAAK,CAACC,UAAU,CAACF,CAAC,CAAC;EAC7C,CAAC;EACDI,MAAM,EAAEhB,MAAM;EACdiB,cAAc,EAAEC,MAA2C;EAE3D,GAAG9C,qBAAqB,CAAC,CAAC;EAC1B,GAAGH,eAAe,CAAC,CAAC;EACpB,GAAGD,eAAe,CAAC;AACrB,CAAC,EAAE,WAAW,CAAC;AAMf,OAAO,MAAMmD,SAAS,GAAG5B,gBAAgB,CAAiB,CAAC,CAAC;EAC1D6B,IAAI,EAAE,WAAW;EAEjBC,UAAU,EAAE;IAAE3C;EAAW,CAAC;EAE1B4C,YAAY,EAAE,KAAK;EAEnBC,KAAK,EAAE7B,kBAAkB,CAAC,CAAC;EAE3B8B,KAAK,EAAE;IACL,eAAe,EAAGC,CAAa,IAAK,IAAI;IACxC,mBAAmB,EAAGA,CAAa,IAAK,IAAI;IAC5C,gBAAgB,EAAGC,OAAgB,IAAK,IAAI;IAC5C,mBAAmB,EAAGC,GAAW,IAAK,IAAI;IAC1C,aAAa,EAAGnB,IAAY,IAAK;EACnC,CAAC;EAEDoB,KAAKA,CAAEL,KAAK,EAAAM,IAAA,EAA0B;IAAA,IAAxB;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAH,IAAA;IAClC,MAAMI,KAAK,GAAGxD,eAAe,CAAC8C,KAAK,EAAE,YAAY,CAAC;IAClD,MAAM;MAAEW,SAAS;MAAEC,KAAK;MAAEC;IAAK,CAAC,GAAG7D,QAAQ,CAACgD,KAAK,CAAC;IAClD,MAAM;MAAEc;IAAY,CAAC,GAAG/D,YAAY,CAACiD,KAAK,CAAC;IAC3C,MAAMtB,YAAY,GAAGtB,QAAQ,CAAC,MAAM;MAClC,OAAO,OAAO4C,KAAK,CAACtB,YAAY,KAAK,UAAU,GAC3CsB,KAAK,CAACtB,YAAY,CAACgC,KAAK,CAACK,KAAK,CAAC,GAC/B,CAACL,KAAK,CAACK,KAAK,IAAI,EAAE,EAAEC,QAAQ,CAAC,CAAC,CAACC,MAAM;IAC3C,CAAC,CAAC;IACF,MAAMC,GAAG,GAAG9D,QAAQ,CAAC,MAAM;MACzB,IAAImD,KAAK,CAACY,SAAS,EAAE,OAAOZ,KAAK,CAACY,SAAS;MAE3C,IACE,CAACnB,KAAK,CAACzB,OAAO,IACb,OAAOyB,KAAK,CAACzB,OAAO,KAAK,QAAQ,IAClC,OAAOyB,KAAK,CAACzB,OAAO,KAAK,QAAS,EAClC,OAAO6C,SAAS;MAElB,OAAOpB,KAAK,CAACzB,OAAO;IACtB,CAAC,CAAC;IAEF,MAAM8C,SAAS,GAAG7D,GAAG,CAAS,CAAC;IAC/B,MAAM8D,SAAS,GAAG9D,GAAG,CAAS,CAAC;IAC/B,MAAM+D,aAAa,GAAG9D,UAAU,CAAC,EAAE,CAAC;IACpC,MAAM+D,WAAW,GAAGhE,GAAG,CAAsB,CAAC;IAC9C,MAAMiE,cAAc,GAAGjE,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM;MAAEkE;IAAS,CAAC,GAAG9E,UAAU,CAAC,CAAC;IACjC,MAAM+E,YAAY,GAAG7E,eAAe,CAACkD,KAAK,CAAC;IAC3C,MAAM4B,QAAQ,GAAGxE,QAAQ,CAAC,MACxB4C,KAAK,CAAClB,qBAAqB,IAC3B6B,SAAS,CAACI,KAAK,IACff,KAAK,CAAC6B,MACP,CAAC;IAEF,SAASC,OAAOA,CAAA,EAAI;MAClB,IAAIH,YAAY,CAACI,aAAa,CAAChB,KAAK,EAAE;QACpCY,YAAY,CAACK,MAAM,CAAC,CAAC;MACvB;MAEA,IAAIR,WAAW,CAACT,KAAK,KAAKkB,QAAQ,CAACC,aAAa,EAAE;QAChDV,WAAW,CAACT,KAAK,EAAEH,KAAK,CAAC,CAAC;MAC5B;MAEA,IAAI,CAACD,SAAS,CAACI,KAAK,EAAEH,KAAK,CAAC,CAAC;IAC/B;IACA,SAASuB,cAAcA,CAAEjC,CAAa,EAAE;MACtC4B,OAAO,CAAC,CAAC;MAETtB,IAAI,CAAC,eAAe,EAAEN,CAAC,CAAC;IAC1B;IACA,SAASkC,kBAAkBA,CAAElC,CAAa,EAAE;MAC1CM,IAAI,CAAC,mBAAmB,EAAEN,CAAC,CAAC;IAC9B;IACA,SAASmC,OAAOA,CAAEnC,CAAa,EAAE;MAC/BA,CAAC,CAACoC,eAAe,CAAC,CAAC;MAEnBR,OAAO,CAAC,CAAC;MAETzE,QAAQ,CAAC,MAAM;QACbqD,KAAK,CAACK,KAAK,GAAG,EAAE;QAEhBnD,SAAS,CAACoC,KAAK,CAAC,eAAe,CAAC,EAAEE,CAAC,CAAC;MACtC,CAAC,CAAC;IACJ;IACA,SAASqC,OAAOA,CAAErC,CAAQ,EAAE;MAC1B,MAAMsC,EAAE,GAAGtC,CAAC,CAACuC,MAA6B;MAC1C/B,KAAK,CAACK,KAAK,GAAGyB,EAAE,CAACzB,KAAK;MACtB,IAAIf,KAAK,CAACN,cAAc,EAAEgD,IAAI,EAAE;QAC9B,MAAMC,aAAa,GAAG,CAACH,EAAE,CAACI,cAAc,EAAEJ,EAAE,CAACK,YAAY,CAAC;QAC1DxF,QAAQ,CAAC,MAAM;UACbmF,EAAE,CAACI,cAAc,GAAGD,aAAa,CAAC,CAAC,CAAC;UACpCH,EAAE,CAACK,YAAY,GAAGF,aAAa,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC;MACJ;IACF;IAEA,MAAMG,QAAQ,GAAGtF,GAAG,CAAsB,CAAC;IAC3C,MAAMyB,IAAI,GAAGzB,GAAG,CAACgB,MAAM,CAACwB,KAAK,CAACf,IAAI,CAAC,CAAC;IACpC,MAAM8D,mBAAmB,GAAG3F,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC4F,QAAQ,CAAChD,KAAK,CAACiD,OAAO,CAAC,CAAC;IAC3FtF,WAAW,CAAC,MAAM;MAChB,IAAI,CAACqC,KAAK,CAAC5B,QAAQ,EAAEa,IAAI,CAAC8B,KAAK,GAAGvC,MAAM,CAACwB,KAAK,CAACf,IAAI,CAAC;IACtD,CAAC,CAAC;IACF,SAASiE,oBAAoBA,CAAA,EAAI;MAC/B7F,QAAQ,CAAC,MAAM;QACb,IAAI,CAACmE,WAAW,CAACT,KAAK,EAAE;QACxB,IAAIW,QAAQ,CAACX,KAAK,CAACoC,OAAO,EAAE;UAC1B1B,cAAc,CAACV,KAAK,GAAG,EAAE;UACzB;QACF;QACA,MAAM;UAAEqC,WAAW;UAAEC;QAAY,CAAC,GAAG7B,WAAW,CAACT,KAAK;QACtDU,cAAc,CAACV,KAAK,GAAGuC,IAAI,CAACpC,GAAG,CAAC,CAAC,EAAEkC,WAAW,GAAGC,WAAW,CAAC;MAC/D,CAAC,CAAC;MAEF,IAAI,CAACrD,KAAK,CAAC5B,QAAQ,EAAE;MAErBf,QAAQ,CAAC,MAAM;QACb,IAAI,CAACyF,QAAQ,CAAC/B,KAAK,IAAI,CAACO,SAAS,CAACP,KAAK,EAAE;QAEzC,MAAMwC,KAAK,GAAGC,gBAAgB,CAACV,QAAQ,CAAC/B,KAAK,CAAC;QAC9C,MAAM0C,UAAU,GAAGD,gBAAgB,CAAClC,SAAS,CAACP,KAAK,CAAC2C,GAAG,CAAC;QAExD,MAAMC,OAAO,GAAGpE,UAAU,CAACgE,KAAK,CAACK,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,GACzErE,UAAU,CAACgE,KAAK,CAACK,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,GAC3DrE,UAAU,CAACgE,KAAK,CAACK,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAEhE,MAAMC,MAAM,GAAGf,QAAQ,CAAC/B,KAAK,CAAC+C,YAAY;QAC1C,MAAMC,UAAU,GAAGxE,UAAU,CAACgE,KAAK,CAACQ,UAAU,CAAC;QAC/C,MAAMC,SAAS,GAAGV,IAAI,CAACpC,GAAG,CACxB3B,UAAU,CAACS,KAAK,CAACf,IAAI,CAAC,GAAG8E,UAAU,GAAGJ,OAAO,EAC7CpE,UAAU,CAACkE,UAAU,CAACG,gBAAgB,CAAC,0BAA0B,CAAC,CACpE,CAAC;QACD,MAAMK,SAAS,GAAG1E,UAAU,CAACS,KAAK,CAACR,OAAQ,CAAC,GAAGuE,UAAU,GAAGJ,OAAO,IAAIO,QAAQ;QAC/E,MAAMC,SAAS,GAAGtG,KAAK,CAACgG,MAAM,IAAI,CAAC,EAAEG,SAAS,EAAEC,SAAS,CAAC;QAC1DhF,IAAI,CAAC8B,KAAK,GAAGuC,IAAI,CAACc,KAAK,CAAC,CAACD,SAAS,GAAGR,OAAO,IAAII,UAAU,CAAC;QAE3DxC,aAAa,CAACR,KAAK,GAAGjD,aAAa,CAACqG,SAAS,CAAC;MAChD,CAAC,CAAC;IACJ;IAEA5G,SAAS,CAAC2F,oBAAoB,CAAC;IAC/BxF,KAAK,CAACgD,KAAK,EAAEwC,oBAAoB,CAAC;IAClCxF,KAAK,CAAC,MAAMsC,KAAK,CAACf,IAAI,EAAEiE,oBAAoB,CAAC;IAC7CxF,KAAK,CAAC,MAAMsC,KAAK,CAACR,OAAO,EAAE0D,oBAAoB,CAAC;IAChDxF,KAAK,CAAC,MAAMsC,KAAK,CAACqE,OAAO,EAAEnB,oBAAoB,CAAC;IAChDxF,KAAK,CAACuB,IAAI,EAAEmB,GAAG,IAAI;MACjBI,IAAI,CAAC,aAAa,EAAEJ,GAAG,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAIkE,QAAoC;IACxC5G,KAAK,CAACoF,QAAQ,EAAE1C,GAAG,IAAI;MACrB,IAAIA,GAAG,EAAE;QACPkE,QAAQ,GAAG,IAAIC,cAAc,CAACrB,oBAAoB,CAAC;QACnDoB,QAAQ,CAACE,OAAO,CAAC1B,QAAQ,CAAC/B,KAAM,CAAC;MACnC,CAAC,MAAM;QACLuD,QAAQ,EAAEG,UAAU,CAAC,CAAC;MACxB;IACF,CAAC,CAAC;IACFnH,eAAe,CAAC,MAAM;MACpBgH,QAAQ,EAAEG,UAAU,CAAC,CAAC;IACxB,CAAC,CAAC;IAEFvG,SAAS,CAAC,MAAM;MACd,MAAMwG,UAAU,GAAG,CAAC,EAAEjE,KAAK,CAAClC,OAAO,IAAIyB,KAAK,CAACzB,OAAO,IAAIyB,KAAK,CAACtB,YAAY,CAAC;MAC3E,MAAMiG,UAAU,GAAG,CAAC,EAAED,UAAU,IAAIjE,KAAK,CAACmE,OAAO,CAAC;MAClD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAG/G,gBAAgB,CAACwC,KAAK,CAAC;MACvD,MAAM;QAAEwE,UAAU,EAAEC,CAAC;QAAE,GAAGC;MAAW,CAAC,GAAGtI,MAAM,CAACuI,WAAW,CAAClF,KAAK,CAAC;MAClE,MAAMmF,UAAU,GAAG;QACjB,GAAG3I,MAAM,CAAC0I,WAAW,CAAClF,KAAK,CAAC;QAC5B,eAAe,EAAEqC;MACnB,CAAC;MAED,OAAA+C,YAAA,CAAAzI,MAAA,EAAA0I,WAAA;QAAA,OAEUhE,SAAS;QAAA,cACLX,KAAK,CAACK,KAAK;QAAA,uBAAAuE,MAAA,IAAX5E,KAAK,CAACK,KAAK,GAAAuE,MAAA;QAAA,SACd,CACL,yBAAyB,EACzB;UACE,sBAAsB,EAAEtF,KAAK,CAACpB,MAAM;UACpC,sBAAsB,EAAEoB,KAAK,CAACP,MAAM;UACpC,wBAAwB,EAAEO,KAAK,CAACpB,MAAM;UACtC,wBAAwB,EAAEoB,KAAK,CAACP,MAAM;UACtC,uBAAuB,EAAEO,KAAK,CAAC5B,QAAQ;UACvC,uBAAuB,EAAE4B,KAAK,CAAChB,QAAQ,IAAIgB,KAAK,CAAC5B,QAAQ;UACzD,2BAA2B,EAAE2E,mBAAmB,CAAChC;QACnD,CAAC,EACDf,KAAK,CAACuF,KAAK,CACZ;QAAA,SACM,CACL;UACE,+BAA+B,EAAEzH,aAAa,CAAC2D,cAAc,CAACV,KAAK;QACrE,CAAC,EACDf,KAAK,CAACuD,KAAK;MACZ,GACIsB,SAAS,EACTI,UAAU;QAAA,eACDhG,IAAI,CAAC8B,KAAK,KAAK,CAAC,IAAI,CAACgC,mBAAmB,CAAChC,KAAK;QAAA,WAClDJ,SAAS,CAACI;MAAK;QAGvB,GAAGN,KAAK;QACRtB,OAAO,EAAEqG,KAAA;UAAA,IAAC;YACRC,EAAE;YACFC,UAAU;YACVC,OAAO;YACPC,UAAU;YACVC,OAAO;YACPlB;UACF,CAAC,GAAAa,KAAA;UAAA,OAAAJ,YAAA,CAAA5I,MAAA,EAAA6I,WAAA;YAAA,OAES/D,SAAS;YAAA,SACR;cACL,6BAA6B,EAAEC,aAAa,CAACR;YAC/C,CAAC;YAAA,WACSoB,cAAc;YAAA,eACVC,kBAAkB;YAAA,wBACTpC,KAAK,CAAC,sBAAsB,CAAC;YAAA,uBAC9BA,KAAK,CAAC,qBAAqB;UAAC,GAC7CmF,UAAU;YAAA,MACVM,EAAE,CAAC1E,KAAK;YAAA,UACJa,QAAQ,CAACb,KAAK,IAAI4E,OAAO,CAAC5E,KAAK;YAAA,eAC1B9B,IAAI,CAAC8B,KAAK,KAAK,CAAC,IAAI,CAACgC,mBAAmB,CAAChC,KAAK;YAAA,SACpD4E,OAAO,CAAC5E,KAAK,IAAIf,KAAK,CAAC8F,KAAK;YAAA,YACzBJ,UAAU,CAAC3E,KAAK;YAAA,WACjBJ,SAAS,CAACI,KAAK;YAAA,WACf4D,UAAU,CAAC5D,KAAK;YAAA,SAClB8E,OAAO,CAAC9E,KAAK,KAAK;UAAK;YAG7B,GAAGN,KAAK;YACRtB,OAAO,EAAE4G,KAAA;cAAA,IAAC;gBACR/F,KAAK,EAAE;kBAAEuF,KAAK,EAAES,UAAU;kBAAE,GAAGC;gBAAU,CAAC;gBAC1CC;cACF,CAAC,GAAAH,KAAA;cAAA,OAAAI,mBAAA,CAAAC,SAAA,SAEKpG,KAAK,CAACpB,MAAM,IAAAuH,mBAAA;gBAAA;cAAA,IAERnG,KAAK,CAACpB,MAAM,EAEjB,EAAAyH,eAAA,CAAAF,mBAAA,aAAAd,WAAA;gBAAA,OAGOjF,GAAG,IAAIoB,WAAW,CAACT,KAAK,GAAGmF,UAAU,CAACnF,KAAK,GAAGX,GAA0B;gBAAA,SACtE4F,UAAU;gBAAA,SACVtF,KAAK,CAACK,KAAK;gBAAA,WACTwB,OAAO;gBAAA,aAILvC,KAAK,CAAC1B,SAAS;gBAAA,YAChBsH,UAAU,CAAC7E,KAAK;gBAAA,YAChB2E,UAAU,CAAC3E,KAAK;gBAAA,eACbf,KAAK,CAACnB,WAAW;gBAAA,QACxBmB,KAAK,CAACf,IAAI;gBAAA,QACV0C,YAAY,CAAC2E,SAAS,CAACvF,KAAK;gBAAA,gBACpBY,YAAY,CAAC4E,iBAAiB,CAACxF,KAAK;gBAAA,WACzCe,OAAO;gBAAA,UACRjB;cAAI,GACRoF,SAAS,EACTnB,UAAU,YAAA3H,UAAA,EAbD;gBACZqJ,OAAO,EAAE1F;cACX,CAAC,EAAE,IAAI;gBAAA2F,IAAA;cAAA,MAcPzG,KAAK,CAAC5B,QAAQ,IAAAiI,eAAA,CAAAF,mBAAA;gBAAA,SAAAO,eAAA,CAEL,CACLV,UAAU,EACV,mBAAmB,CACpB;gBAAA,MACI,GAAGC,SAAS,CAACR,EAAE,QAAQ;gBAAA,uBAAAH,MAAA,IAClB5E,KAAK,CAACK,KAAK,GAAAuE,MAAA;gBAAA,OACfxC,QAAQ;gBAAA;gBAAA;cAAA,YAAA6D,WAAA,EADJjG,KAAK,CAACK,KAAK,GAKxB,EAECf,KAAK,CAACP,MAAM,IAAA0G,mBAAA;gBAAA;cAAA,IAERnG,KAAK,CAACP,MAAM,EAEjB;YAAA;UAEJ;QAAA,CAGN;QACDmF,OAAO,EAAED,UAAU,GAAGsB,SAAS,IAAAE,mBAAA,CAAAC,SAAA,SAEzB3F,KAAK,CAACmE,OAAO,GAAGqB,SAAS,CAAC,EAE1BvB,UAAU,IAAAyB,mBAAA,CAAAC,SAAA,SAAAD,mBAAA,sBAAAf,YAAA,CAAA7I,QAAA;UAAA,UAKGyD,KAAK,CAACjB,iBAAiB,IAAI4B,SAAS,CAACI,KAAK;UAAA,SAC3CrC,YAAY,CAACqC,KAAK;UAAA,OACpBG,GAAG,CAACH,KAAK;UAAA,YACJf,KAAK,CAAC4G;QAAQ,GACPnG,KAAK,CAAClC,OAAO,GAGpC,EAEJ,GAAG6C;MAAS;IAIrB,CAAC,CAAC;IAEF,OAAOnE,WAAW,CAAC,CAAC,CAAC,EAAEoE,SAAS,EAAEC,SAAS,EAAEE,WAAW,CAAC;EAC3D;AACF,CAAC,CAAC","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 (
|
|
135
|
-
if (
|
|
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":"AAAA;AAAA,SACSA,OAAO;AAAA,SACPC,eAAe,6BAExB;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,YAAY,EAAEC,WAAW,4BAElC;AAGA;AA2CA;AACA,OAAO,MAAMC,iBAAiB,GAAGF,YAAY,CAAC;EAC5CG,YAAY,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAuD;EACrFC,QAAQ,EAAE;IACRC,IAAI,EAAEC,OAAO;IACbC,OAAO,EAAE;EACX,CAAC;EACDC,YAAY,EAAE,IAAgC;EAC9CC,UAAU,EAAEP,KAA4B;EACxCQ,KAAK,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EACvBC,GAAG,EAAE,IAAgC;EACrCC,GAAG,EAAE,IAAgC;EACrCC,kBAAkB,EAAET,OAAO;EAC3BU,IAAI,EAAE,CAACL,MAAM,EAAEC,MAAM,CAAC;EACtBK,QAAQ,EAAE;IACRZ,IAAI,EAAEH,KAAqC;IAC3CK,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACrC,CAAC;EACDW,YAAY,EAAE;IACZb,IAAI,EAAEO,MAAwC;IAC9CL,OAAO,EAAE;EACX,CAAC;EACDY,cAAc,EAAE;IACdd,IAAI,EAAE,CAACM,MAAM,EAAEC,MAAM,CAAC;IACtBL,OAAO,EAAEa;EACX,CAAC;EACDC,cAAc,EAAE;IACdhB,IAAI,EAAE,CAACM,MAAM,EAAEC,MAAM,CAAC;IACtBL,OAAO,EAAEa;EACX,CAAC;EACDE,aAAa,EAAEV;AACjB,CAAC,EAAE,UAAU,CAAC;AAEd,OAAO,SAASW,WAAWA,CAAEC,KAAoB,EAAE;EACjD,MAAMC,OAAO,GAAG9B,OAAO,CAAC,CAAC;EACzB,MAAM+B,KAAK,GAAG9B,eAAe,CAC3B4B,KAAK,EACL,YAAY,EACZ,EAAE,EACFG,CAAC,IAAI5B,WAAW,CAAC4B,CAAC,CAAC,CAACC,GAAG,CAACC,CAAC,IAAIJ,OAAO,CAACK,IAAI,CAACD,CAAC,CAAC,CAC9C,CAAC;EACD,MAAMrB,YAAY,GAAGX,QAAQ,CAAC,MAAM;IAClC,IAAI2B,KAAK,CAAChB,YAAY,EAAE,OAAOiB,OAAO,CAACK,IAAI,CAACN,KAAK,CAAChB,YAAY,CAAC;IAC/D,IAAIkB,KAAK,CAACK,KAAK,CAACC,MAAM,GAAG,CAAC,EAAE,OAAOP,OAAO,CAACK,IAAI,CAACJ,KAAK,CAACK,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAIP,KAAK,CAACV,GAAG,EAAE,OAAOW,OAAO,CAACK,IAAI,CAACN,KAAK,CAACV,GAAG,CAAC;IAC7C,IAAIZ,KAAK,CAAC+B,OAAO,CAACT,KAAK,CAACvB,YAAY,CAAC,EAAE,OAAOwB,OAAO,CAACK,IAAI,CAACN,KAAK,CAACvB,YAAY,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAOwB,OAAO,CAACK,IAAI,CAAC,CAAC;EACvB,CAAC,CAAC;EAEF,MAAMd,IAAI,GAAGpB,eAAe,CAC1B4B,KAAK,EACL,MAAM,EACNJ,SAAS,EACTO,CAAC,IAAI;IACH,MAAMI,KAAK,GAAGJ,CAAC,IAAI,IAAI,GAAGhB,MAAM,CAACgB,CAAC,CAAC,GAAGF,OAAO,CAACS,OAAO,CAAC1B,YAAY,CAACuB,KAAK,CAAC;IAEzE,OAAON,OAAO,CAACU,WAAW,CAACV,OAAO,CAACW,OAAO,CAACX,OAAO,CAACK,IAAI,CAAC,CAAC,EAAEC,KAAK,CAAC,CAAC;EACpE,CAAC,EACDJ,CAAC,IAAIF,OAAO,CAACS,OAAO,CAACP,CAAC,CACxB,CAAC;EAED,MAAMjB,KAAK,GAAGd,eAAe,CAC3B4B,KAAK,EACL,OAAO,EACPJ,SAAS,EACTO,CAAC,IAAI;IACH,MAAMI,KAAK,GAAGJ,CAAC,IAAI,IAAI,GAAGhB,MAAM,CAACgB,CAAC,CAAC,GAAGF,OAAO,CAACY,QAAQ,CAAC7B,YAAY,CAACuB,KAAK,CAAC;IAC1E,MAAMD,IAAI,GAAGL,OAAO,CAACW,OAAO,CAACX,OAAO,CAACa,YAAY,CAACb,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC,EAAEL,OAAO,CAACS,OAAO,CAAClB,IAAI,CAACe,KAAK,CAAC,CAAC;IAE/F,OAAON,OAAO,CAACc,QAAQ,CAACT,IAAI,EAAEC,KAAK,CAAC;EACtC,CAAC,EACDJ,CAAC,IAAIF,OAAO,CAACY,QAAQ,CAACV,CAAC,CACzB,CAAC;EAED,MAAMa,aAAa,GAAG3C,QAAQ,CAAC,MAAM;IACnC,MAAMsB,cAAc,GAAGM,OAAO,CAACgB,QAAQ,CAAChB,OAAO,CAACiB,WAAW,CAACjB,OAAO,CAACK,IAAI,CAAC,CAAC,EAAEN,KAAK,CAACL,cAAc,CAAC,CAAC,CAACwB,MAAM,CAAC,CAAC;IAC3G,OAAOlB,OAAO,CAACmB,WAAW,CAACpB,KAAK,CAACL,cAAc,EAAEK,KAAK,CAACF,aAAa,CAAC,CAClEuB,MAAM,CAAC,CAACC,CAAC,EAAEjB,CAAC,KAAKL,KAAK,CAACP,QAAQ,CAAC8B,QAAQ,CAAC,CAAClB,CAAC,GAAGV,cAAc,IAAI,CAAC,CAAC,CAAC;EACxE,CAAC,CAAC;EAEF,MAAMD,YAAY,GAAGrB,QAAQ,CAAC,MAAM;IAClC,MAAMmD,KAAK,GAAGvB,OAAO,CAACwB,YAAY,CAACvC,KAAK,CAACqB,KAAK,EAAEP,KAAK,CAACL,cAAc,CAAC;IAErE,MAAM+B,IAAI,GAAGF,KAAK,CAACG,IAAI,CAAC,CAAC;;IAEzB;IACA;IACA,MAAMC,WAAW,GAAG,CAAC,GAAG,CAAC;IACzB,IAAI5B,KAAK,CAACN,YAAY,KAAK,QAAQ,IAAIgC,IAAI,CAAClB,MAAM,GAAGoB,WAAW,EAAE;MAChE,MAAMC,OAAO,GAAGH,IAAI,CAACA,IAAI,CAAClB,MAAM,GAAG,CAAC,CAAC;MAErC,IAAIsB,IAAI,GAAG,EAAE;MACb,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,IAAIH,WAAW,GAAGF,IAAI,CAAClB,MAAM,EAAEuB,GAAG,EAAE,EAAE;QACzDD,IAAI,CAACE,IAAI,CAAC/B,OAAO,CAACgC,OAAO,CAACJ,OAAO,EAAEE,GAAG,CAAC,CAAC;QAExC,IAAIA,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;UACjBP,KAAK,CAACQ,IAAI,CAACF,IAAI,CAAC;UAChBA,IAAI,GAAG,EAAE;QACX;MACF;IACF;IAEA,OAAON,KAAK;EACd,CAAC,CAAC;EAEF,SAASU,OAAOA,CAAER,IAAY,EAAES,KAAW,EAAiB;IAC1D,OAAOT,IAAI,CAACL,MAAM,CAACf,IAAI,IAAI;MACzB,OAAON,KAAK,CAACP,QAAQ,CAAC8B,QAAQ,CAACtB,OAAO,CAACgB,QAAQ,CAACX,IAAI,CAAC,CAACa,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAACf,GAAG,CAAC,CAACE,IAAI,EAAE8B,KAAK,KAAK;MACtB,MAAMC,OAAO,GAAGpC,OAAO,CAACqC,KAAK,CAAChC,IAAI,CAAC;MACnC,MAAMiC,UAAU,GAAG,CAACtC,OAAO,CAACuC,WAAW,CAAClC,IAAI,EAAEpB,KAAK,CAACqB,KAAK,CAAC;MAC1D,MAAMkC,OAAO,GAAGxC,OAAO,CAACyC,SAAS,CAACpC,IAAI,EAAEL,OAAO,CAACa,YAAY,CAAC5B,KAAK,CAACqB,KAAK,CAAC,CAAC;MAC1E,MAAMoC,KAAK,GAAG1C,OAAO,CAACyC,SAAS,CAACpC,IAAI,EAAEL,OAAO,CAAC2C,UAAU,CAAC1D,KAAK,CAACqB,KAAK,CAAC,CAAC;MACtE,MAAMsC,MAAM,GAAG5C,OAAO,CAACyC,SAAS,CAACpC,IAAI,EAAEpB,KAAK,CAACqB,KAAK,CAAC;MACnD,MAAMuC,aAAa,GAAG9C,KAAK,CAACP,QAAQ,CAACe,MAAM;MAE3C,OAAO;QACLF,IAAI;QACJyC,SAAS,EAAE9C,OAAO,CAAC+C,MAAM,CAAC1C,IAAI,EAAE,cAAc,CAAC;QAC/CiC,UAAU;QACVU,UAAU,EAAEA,UAAU,CAAC3C,IAAI,CAAC;QAC5BqC,KAAK;QACLO,QAAQ,EAAEX,UAAU,IAAI,CAACvC,KAAK,CAACT,kBAAkB;QACjDsD,MAAM;QACNM,UAAU,EAAEjD,KAAK,CAACK,KAAK,CAAC6C,IAAI,CAAC7C,KAAK,IAAIN,OAAO,CAACyC,SAAS,CAACpC,IAAI,EAAEC,KAAK,CAAC,CAAC;QACrEkC,OAAO;QACPY,OAAO,EAAEpD,OAAO,CAACyC,SAAS,CAACpC,IAAI,EAAE6B,KAAK,CAAC;QACvCmB,SAAS,EAAElB,KAAK,GAAGU,aAAa,KAAKA,aAAa,GAAG,CAAC;QACtDS,WAAW,EAAEnB,KAAK,GAAGU,aAAa,KAAK,CAAC;QACxCT,OAAO;QACPmB,SAAS,EAAEvD,OAAO,CAAC+C,MAAM,CAAC1C,IAAI,EAAE,YAAY,CAAC;QAC7CpB,KAAK,EAAEe,OAAO,CAACY,QAAQ,CAACP,IAAI,CAAC;QAC7Bd,IAAI,EAAES,OAAO,CAACS,OAAO,CAACJ,IAAI;MAC5B,CAAC;IACH,CAAC,CAAC;EACJ;EAEA,MAAMmD,UAAU,GAAGpF,QAAQ,CAAC,MAAM;IAChC,MAAMwD,OAAO,GAAG5B,OAAO,CAACiB,WAAW,CAAClC,YAAY,CAACuB,KAAK,EAAEP,KAAK,CAACL,cAAc,CAAC;IAC7E,MAAMmC,IAAY,GAAG,EAAE;IACvB,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,IAAI,CAAC,EAAEA,GAAG,EAAE,EAAE;MACjCD,IAAI,CAACE,IAAI,CAAC/B,OAAO,CAACgC,OAAO,CAACJ,OAAO,EAAEE,GAAG,CAAS,CAAC;IAClD;IAEA,MAAMI,KAAK,GAAGlC,OAAO,CAACK,IAAI,CAAC,CAAS;IAEpC,OAAO4B,OAAO,CAACJ,IAAI,EAAYK,KAAa,CAAC;EAC/C,CAAC,CAAC;EAEF,MAAMP,WAAW,GAAGvD,QAAQ,CAAC,MAAM;IACjC,MAAMqD,IAAI,GAAGhC,YAAY,CAACa,KAAK,CAACoB,IAAI,CAAC,CAAW;IAChD,MAAMQ,KAAK,GAAGlC,OAAO,CAACK,IAAI,CAAC,CAAS;IAEpC,OAAO4B,OAAO,CAACR,IAAI,EAAYS,KAAK,CAAC;EACvC,CAAC,CAAC;EAEF,MAAMuB,WAAW,GAAGrF,QAAQ,CAAC,MAAM;IACjC,OAAOqB,YAAY,CAACa,KAAK,CAACH,GAAG,CAAC0B,IAAI,IAAI;MACpC,OAAOA,IAAI,CAACtB,MAAM,GAAGP,OAAO,CAAC0D,OAAO,CAAC7B,IAAI,CAAC,CAAC,CAAC,EAAE9B,KAAK,CAACL,cAAc,EAAEK,KAAK,CAACH,cAAc,CAAC,GAAG,IAAI;IAClG,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAM;IAAE+D,OAAO;IAAEC;EAAQ,CAAC,GAAGC,gBAAgB,CAAC9D,KAAK,CAAC;EAEpD,SAASiD,UAAUA,CAAE1C,KAAc,EAAE;IACnC,IAAIP,KAAK,CAACpB,QAAQ,EAAE,OAAO,IAAI;IAE/B,MAAM0B,IAAI,GAAGL,OAAO,CAACK,IAAI,CAACC,KAAK,CAAC;IAEhC,IAAIqD,OAAO,CAACrD,KAAK,IAAIN,OAAO,CAAC8D,QAAQ,CAAC9D,OAAO,CAAC+D,QAAQ,CAAC1D,IAAI,CAAC,EAAEsD,OAAO,CAACrD,KAAK,CAAC,EAAE,OAAO,IAAI;IACzF,IAAIsD,OAAO,CAACtD,KAAK,IAAIN,OAAO,CAACgE,OAAO,CAAC3D,IAAI,EAAEuD,OAAO,CAACtD,KAAK,CAAC,EAAE,OAAO,IAAI;IAEtE,IAAI7B,KAAK,CAAC+B,OAAO,CAACT,KAAK,CAACvB,YAAY,CAAC,IAAIuB,KAAK,CAACvB,YAAY,CAAC+B,MAAM,GAAG,CAAC,EAAE;MACtE,OAAO,CAACR,KAAK,CAACvB,YAAY,CAAC2E,IAAI,CAACc,CAAC,IAAIjE,OAAO,CAACyC,SAAS,CAACzC,OAAO,CAACK,IAAI,CAAC4D,CAAC,CAAC,EAAE5D,IAAI,CAAC,CAAC;IAChF;IAEA,IAAI,OAAON,KAAK,CAACvB,YAAY,KAAK,UAAU,EAAE;MAC5C,OAAO,CAACuB,KAAK,CAACvB,YAAY,CAAC6B,IAAI,CAAC;IAClC;IAEA,OAAO,KAAK;EACd;EAEA,OAAO;IACLtB,YAAY;IACZ4C,WAAW;IACX6B,UAAU;IACVvB,OAAO;IACPhC,KAAK;IACLR,YAAY;IACZsB,aAAa;IACb0C;EACF,CAAC;AACH;AAEA,OAAO,SAASI,gBAAgBA,CAAE9D,KAAyC,EAAE;EAC3E,MAAMC,OAAO,GAAG9B,OAAO,CAAC,CAAC;EAEzB,MAAMyF,OAAO,GAAGvF,QAAQ,CAAC,MAAM;IAC7B,IAAI,CAAC2B,KAAK,CAACV,GAAG,EAAE,OAAO,IAAI;IAC3B,MAAMgB,IAAI,GAAGL,OAAO,CAACK,IAAI,CAACN,KAAK,CAACV,GAAG,CAAC;IACpC,OAAOW,OAAO,CAACkE,OAAO,CAAC7D,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;EAC5C,CAAC,CAAC;EAEF,MAAMuD,OAAO,GAAGxF,QAAQ,CAAC,MAAM;IAC7B,IAAI,CAAC2B,KAAK,CAACX,GAAG,EAAE,OAAO,IAAI;IAC3B,MAAMiB,IAAI,GAAGL,OAAO,CAACK,IAAI,CAACN,KAAK,CAACX,GAAG,CAAC;IACpC,OAAOY,OAAO,CAACkE,OAAO,CAAC7D,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;EAC5C,CAAC,CAAC;EAEF,SAAS8D,SAASA,CAAE9D,IAAa,EAAE;IACjC,IAAIsD,OAAO,CAACrD,KAAK,IAAIN,OAAO,CAAC8D,QAAQ,CAACzD,IAAI,EAAEsD,OAAO,CAACrD,KAAK,CAAC,EAAE;MAC1D,OAAOqD,OAAO,CAACrD,KAAK;IACtB;IACA,IAAIsD,OAAO,CAACtD,KAAK,IAAIN,OAAO,CAACgE,OAAO,CAAC3D,IAAI,EAAEuD,OAAO,CAACtD,KAAK,CAAC,EAAE;MACzD,OAAOsD,OAAO,CAACtD,KAAK;IACtB;IACA,OAAOD,IAAI;EACb;EAEA,SAAS+D,gBAAgBA,CAAE/D,IAAa,EAAE;IACxC,OAAO,CAAC,CAACsD,OAAO,CAACrD,KAAK,IAAIN,OAAO,CAACgE,OAAO,CAAC3D,IAAI,EAAEsD,OAAO,CAACrD,KAAK,CAAC,MAC3D,CAACsD,OAAO,CAACtD,KAAK,IAAIN,OAAO,CAAC8D,QAAQ,CAACzD,IAAI,EAAEuD,OAAO,CAACtD,KAAK,CAAC,CAAC;EAC7D;EAEA,OAAO;IACLqD,OAAO;IACPC,OAAO;IACPO,SAAS;IACTC;EACF,CAAC;AACH","ignoreList":[]}
|
package/lib/composables/delay.js
CHANGED
|
@@ -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 =
|
|
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(
|
|
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(
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
+
clearTimeout(timeout);
|
|
58
52
|
}
|
|
59
|
-
watch(() => toValue(keys),
|
|
53
|
+
watch(() => toValue(keys), newKeys => {
|
|
60
54
|
cleanup();
|
|
61
|
-
if (
|
|
62
|
-
const groups = splitKeySequence(
|
|
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),
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
89
|
-
|
|
88
|
+
// Use the shared combination splitting logic
|
|
89
|
+
const parts = splitKeyCombination(group.toLowerCase());
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
107
|
+
return {
|
|
108
|
+
modifiers,
|
|
109
|
+
actualKey
|
|
110
|
+
};
|
|
122
111
|
}
|
|
123
112
|
//# sourceMappingURL=hotkey.js.map
|