vuetify 3.10.4 → 3.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -6
- package/dist/json/attributes.json +1910 -1922
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +182 -182
- package/dist/json/tags.json +6 -9
- package/dist/json/web-types.json +3674 -3697
- package/dist/vuetify-labs.cjs +211 -107
- package/dist/vuetify-labs.css +5703 -5642
- package/dist/vuetify-labs.d.ts +168 -175
- package/dist/vuetify-labs.esm.js +211 -107
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +211 -107
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +192 -97
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5916 -5877
- package/dist/vuetify.d.ts +168 -140
- package/dist/vuetify.esm.js +192 -97
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +192 -97
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +124 -114
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
- package/lib/components/VAutocomplete/VAutocomplete.js +13 -11
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.css +10 -0
- package/lib/components/VBadge/VBadge.sass +9 -0
- package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
- package/lib/components/VChipGroup/VChipGroup.js +3 -1
- package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +6 -67
- package/lib/components/VCombobox/VCombobox.js +26 -28
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCounter/VCounter.css +1 -0
- package/lib/components/VCounter/VCounter.sass +1 -0
- package/lib/components/VDataTable/VDataTableGroupHeaderRow.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +4 -1
- package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableHeaders.js +3 -0
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableRow.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableRow.js +3 -0
- package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
- package/lib/components/VDataTable/VDataTableRows.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableRows.js +4 -3
- package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VDivider/VDivider.css +1 -0
- package/lib/components/VDivider/VDivider.sass +1 -0
- package/lib/components/VKbd/_variables.scss +3 -1
- package/lib/components/VList/VListItem.css +14 -12
- package/lib/components/VList/VListItem.js +5 -3
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +20 -18
- package/lib/components/VMenu/VMenu.js +22 -4
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.css +8 -0
- package/lib/components/VNumberInput/VNumberInput.js +5 -2
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.sass +10 -4
- package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTable/VTable.js +20 -32
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +25 -0
- package/lib/components/VTextField/VTextField.js +0 -3
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.css +2 -2
- package/lib/components/VTextarea/VTextarea.js +20 -1
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VWindow/VWindow.js +43 -3
- package/lib/components/VWindow/VWindow.js.map +1 -1
- package/lib/composables/date/date.js +1 -1
- package/lib/composables/date/date.js.map +1 -1
- package/lib/composables/group.js +1 -1
- package/lib/composables/group.js.map +1 -1
- package/lib/composables/nested/nested.js +12 -2
- package/lib/composables/nested/nested.js.map +1 -1
- package/lib/composables/virtual.js +2 -2
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +66 -66
- package/lib/framework.js +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
- package/lib/labs/VColorInput/VColorInput.js +2 -2
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
- package/lib/labs/VDateInput/VDateInput.js +16 -7
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.css +22 -0
- package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
- package/lib/labs/VMaskInput/VMaskInput.js +1 -1
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
- package/lib/labs/rules/rules.js +4 -4
- package/lib/labs/rules/rules.js.map +1 -1
- package/lib/util/helpers.js +4 -2
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ import { VCounter } from "../VCounter/VCounter.js";
|
|
|
8
8
|
import { VField } from "../VField/index.js";
|
|
9
9
|
import { makeVFieldProps } from "../VField/VField.js";
|
|
10
10
|
import { makeVInputProps, VInput } from "../VInput/VInput.js"; // Composables
|
|
11
|
+
import { useDisplay } from "../../composables/index.js";
|
|
11
12
|
import { makeAutocompleteProps, useAutocomplete } from "../../composables/autocomplete.js";
|
|
12
13
|
import { useAutofocus } from "../../composables/autofocus.js";
|
|
13
14
|
import { useFocus } from "../../composables/focus.js";
|
|
@@ -82,6 +83,10 @@ export const VTextarea = genericComponent()({
|
|
|
82
83
|
const vFieldRef = ref();
|
|
83
84
|
const controlHeight = shallowRef('');
|
|
84
85
|
const textareaRef = ref();
|
|
86
|
+
const scrollbarWidth = ref(0);
|
|
87
|
+
const {
|
|
88
|
+
platform
|
|
89
|
+
} = useDisplay();
|
|
85
90
|
const autocomplete = useAutocomplete(props);
|
|
86
91
|
const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
|
|
87
92
|
function onFocus() {
|
|
@@ -126,6 +131,18 @@ export const VTextarea = genericComponent()({
|
|
|
126
131
|
if (!props.autoGrow) rows.value = Number(props.rows);
|
|
127
132
|
});
|
|
128
133
|
function calculateInputHeight() {
|
|
134
|
+
nextTick(() => {
|
|
135
|
+
if (!textareaRef.value) return;
|
|
136
|
+
if (platform.value.firefox) {
|
|
137
|
+
scrollbarWidth.value = 12;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const {
|
|
141
|
+
offsetWidth,
|
|
142
|
+
clientWidth
|
|
143
|
+
} = textareaRef.value;
|
|
144
|
+
scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
|
|
145
|
+
});
|
|
129
146
|
if (!props.autoGrow) return;
|
|
130
147
|
nextTick(() => {
|
|
131
148
|
if (!sizerRef.value || !vFieldRef.value) return;
|
|
@@ -186,7 +203,9 @@ export const VTextarea = genericComponent()({
|
|
|
186
203
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
|
187
204
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
188
205
|
}, props.class],
|
|
189
|
-
"style":
|
|
206
|
+
"style": [{
|
|
207
|
+
'--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
|
|
208
|
+
}, props.style]
|
|
190
209
|
}, rootAttrs, inputProps, {
|
|
191
210
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
192
211
|
"focused": isFocused.value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTextarea.js","names":["VCounter","VField","makeVFieldProps","makeVInputProps","VInput","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","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlClick","onControlMousedown","onClear","stopPropagation","onInput","el","target","trim","caretPosition","selectionStart","selectionEnd","sizerRef","isPlainOrUnderlined","includes","variant","calculateInputHeight","style","getComputedStyle","fieldStyle","$el","padding","getPropertyValue","height","scrollHeight","lineHeight","minHeight","Math","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","_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 { 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<HTMLInputElement>()\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 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={ props.style }\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 }) => (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n { props.prefix }\n </span>\n )}\n\n <textarea\n ref={ textareaRef }\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,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,GAAGF,eAAe,CAAC,CAAC;EACpB,GAAGD,eAAe,CAAC;AACrB,CAAC,EAAE,WAAW,CAAC;AAMf,OAAO,MAAMkD,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,CAAmB,CAAC;IAC3C,MAAMiE,YAAY,GAAG3E,eAAe,CAACkD,KAAK,CAAC;IAC3C,MAAM0B,QAAQ,GAAGtE,QAAQ,CAAC,MACxB4C,KAAK,CAAClB,qBAAqB,IAC3B6B,SAAS,CAACI,KAAK,IACff,KAAK,CAAC2B,MACP,CAAC;IAEF,SAASC,OAAOA,CAAA,EAAI;MAClB,IAAIH,YAAY,CAACI,aAAa,CAACd,KAAK,EAAE;QACpCU,YAAY,CAACK,MAAM,CAAC,CAAC;MACvB;MAEA,IAAIN,WAAW,CAACT,KAAK,KAAKgB,QAAQ,CAACC,aAAa,EAAE;QAChDR,WAAW,CAACT,KAAK,EAAEH,KAAK,CAAC,CAAC;MAC5B;MAEA,IAAI,CAACD,SAAS,CAACI,KAAK,EAAEH,KAAK,CAAC,CAAC;IAC/B;IACA,SAASqB,cAAcA,CAAE/B,CAAa,EAAE;MACtC0B,OAAO,CAAC,CAAC;MAETpB,IAAI,CAAC,eAAe,EAAEN,CAAC,CAAC;IAC1B;IACA,SAASgC,kBAAkBA,CAAEhC,CAAa,EAAE;MAC1CM,IAAI,CAAC,mBAAmB,EAAEN,CAAC,CAAC;IAC9B;IACA,SAASiC,OAAOA,CAAEjC,CAAa,EAAE;MAC/BA,CAAC,CAACkC,eAAe,CAAC,CAAC;MAEnBR,OAAO,CAAC,CAAC;MAETvE,QAAQ,CAAC,MAAM;QACbqD,KAAK,CAACK,KAAK,GAAG,EAAE;QAEhBnD,SAAS,CAACoC,KAAK,CAAC,eAAe,CAAC,EAAEE,CAAC,CAAC;MACtC,CAAC,CAAC;IACJ;IACA,SAASmC,OAAOA,CAAEnC,CAAQ,EAAE;MAC1B,MAAMoC,EAAE,GAAGpC,CAAC,CAACqC,MAA6B;MAC1C7B,KAAK,CAACK,KAAK,GAAGuB,EAAE,CAACvB,KAAK;MACtB,IAAIf,KAAK,CAACN,cAAc,EAAE8C,IAAI,EAAE;QAC9B,MAAMC,aAAa,GAAG,CAACH,EAAE,CAACI,cAAc,EAAEJ,EAAE,CAACK,YAAY,CAAC;QAC1DtF,QAAQ,CAAC,MAAM;UACbiF,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,GAAGpF,GAAG,CAAsB,CAAC;IAC3C,MAAMyB,IAAI,GAAGzB,GAAG,CAACgB,MAAM,CAACwB,KAAK,CAACf,IAAI,CAAC,CAAC;IACpC,MAAM4D,mBAAmB,GAAGzF,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC0F,QAAQ,CAAC9C,KAAK,CAAC+C,OAAO,CAAC,CAAC;IAC3FpF,WAAW,CAAC,MAAM;MAChB,IAAI,CAACqC,KAAK,CAAC5B,QAAQ,EAAEa,IAAI,CAAC8B,KAAK,GAAGvC,MAAM,CAACwB,KAAK,CAACf,IAAI,CAAC;IACtD,CAAC,CAAC;IACF,SAAS+D,oBAAoBA,CAAA,EAAI;MAC/B,IAAI,CAAChD,KAAK,CAAC5B,QAAQ,EAAE;MAErBf,QAAQ,CAAC,MAAM;QACb,IAAI,CAACuF,QAAQ,CAAC7B,KAAK,IAAI,CAACO,SAAS,CAACP,KAAK,EAAE;QAEzC,MAAMkC,KAAK,GAAGC,gBAAgB,CAACN,QAAQ,CAAC7B,KAAK,CAAC;QAC9C,MAAMoC,UAAU,GAAGD,gBAAgB,CAAC5B,SAAS,CAACP,KAAK,CAACqC,GAAG,CAAC;QAExD,MAAMC,OAAO,GAAG9D,UAAU,CAAC0D,KAAK,CAACK,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,GACzE/D,UAAU,CAAC0D,KAAK,CAACK,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,GAC3D/D,UAAU,CAAC0D,KAAK,CAACK,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAEhE,MAAMC,MAAM,GAAGX,QAAQ,CAAC7B,KAAK,CAACyC,YAAY;QAC1C,MAAMC,UAAU,GAAGlE,UAAU,CAAC0D,KAAK,CAACQ,UAAU,CAAC;QAC/C,MAAMC,SAAS,GAAGC,IAAI,CAACzC,GAAG,CACxB3B,UAAU,CAACS,KAAK,CAACf,IAAI,CAAC,GAAGwE,UAAU,GAAGJ,OAAO,EAC7C9D,UAAU,CAAC4D,UAAU,CAACG,gBAAgB,CAAC,0BAA0B,CAAC,CACpE,CAAC;QACD,MAAMM,SAAS,GAAGrE,UAAU,CAACS,KAAK,CAACR,OAAQ,CAAC,GAAGiE,UAAU,GAAGJ,OAAO,IAAIQ,QAAQ;QAC/E,MAAMC,SAAS,GAAGjG,KAAK,CAAC0F,MAAM,IAAI,CAAC,EAAEG,SAAS,EAAEE,SAAS,CAAC;QAC1D3E,IAAI,CAAC8B,KAAK,GAAG4C,IAAI,CAACI,KAAK,CAAC,CAACD,SAAS,GAAGT,OAAO,IAAII,UAAU,CAAC;QAE3DlC,aAAa,CAACR,KAAK,GAAGjD,aAAa,CAACgG,SAAS,CAAC;MAChD,CAAC,CAAC;IACJ;IAEAvG,SAAS,CAACyF,oBAAoB,CAAC;IAC/BtF,KAAK,CAACgD,KAAK,EAAEsC,oBAAoB,CAAC;IAClCtF,KAAK,CAAC,MAAMsC,KAAK,CAACf,IAAI,EAAE+D,oBAAoB,CAAC;IAC7CtF,KAAK,CAAC,MAAMsC,KAAK,CAACR,OAAO,EAAEwD,oBAAoB,CAAC;IAChDtF,KAAK,CAAC,MAAMsC,KAAK,CAACgE,OAAO,EAAEhB,oBAAoB,CAAC;IAChDtF,KAAK,CAACuB,IAAI,EAAEmB,GAAG,IAAI;MACjBI,IAAI,CAAC,aAAa,EAAEJ,GAAG,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI6D,QAAoC;IACxCvG,KAAK,CAACkF,QAAQ,EAAExC,GAAG,IAAI;MACrB,IAAIA,GAAG,EAAE;QACP6D,QAAQ,GAAG,IAAIC,cAAc,CAAClB,oBAAoB,CAAC;QACnDiB,QAAQ,CAACE,OAAO,CAACvB,QAAQ,CAAC7B,KAAM,CAAC;MACnC,CAAC,MAAM;QACLkD,QAAQ,EAAEG,UAAU,CAAC,CAAC;MACxB;IACF,CAAC,CAAC;IACF9G,eAAe,CAAC,MAAM;MACpB2G,QAAQ,EAAEG,UAAU,CAAC,CAAC;IACxB,CAAC,CAAC;IAEFlG,SAAS,CAAC,MAAM;MACd,MAAMmG,UAAU,GAAG,CAAC,EAAE5D,KAAK,CAAClC,OAAO,IAAIyB,KAAK,CAACzB,OAAO,IAAIyB,KAAK,CAACtB,YAAY,CAAC;MAC3E,MAAM4F,UAAU,GAAG,CAAC,EAAED,UAAU,IAAI5D,KAAK,CAAC8D,OAAO,CAAC;MAClD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAG1G,gBAAgB,CAACwC,KAAK,CAAC;MACvD,MAAM;QAAEmE,UAAU,EAAEC,CAAC;QAAE,GAAGC;MAAW,CAAC,GAAGhI,MAAM,CAACiI,WAAW,CAAC7E,KAAK,CAAC;MAClE,MAAM8E,UAAU,GAAG;QACjB,GAAGrI,MAAM,CAACoI,WAAW,CAAC7E,KAAK,CAAC;QAC5B,eAAe,EAAEmC;MACnB,CAAC;MAED,OAAA4C,YAAA,CAAAnI,MAAA,EAAAoI,WAAA;QAAA,OAEU3D,SAAS;QAAA,cACLX,KAAK,CAACK,KAAK;QAAA,uBAAAkE,MAAA,IAAXvE,KAAK,CAACK,KAAK,GAAAkE,MAAA;QAAA,SACd,CACL,yBAAyB,EACzB;UACE,sBAAsB,EAAEjF,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,EAAEyE,mBAAmB,CAAC9B;QACnD,CAAC,EACDf,KAAK,CAACkF,KAAK,CACZ;QAAA,SACOlF,KAAK,CAACiD;MAAK,GACduB,SAAS,EACTI,UAAU;QAAA,eACD3F,IAAI,CAAC8B,KAAK,KAAK,CAAC,IAAI,CAAC8B,mBAAmB,CAAC9B,KAAK;QAAA,WAClDJ,SAAS,CAACI;MAAK;QAGvB,GAAGN,KAAK;QACRtB,OAAO,EAAEgG,KAAA;UAAA,IAAC;YACRC,EAAE;YACFC,UAAU;YACVC,OAAO;YACPC,UAAU;YACVC,OAAO;YACPlB;UACF,CAAC,GAAAa,KAAA;UAAA,OAAAJ,YAAA,CAAAtI,MAAA,EAAAuI,WAAA;YAAA,OAES1D,SAAS;YAAA,SACR;cACL,6BAA6B,EAAEC,aAAa,CAACR;YAC/C,CAAC;YAAA,WACSkB,cAAc;YAAA,eACVC,kBAAkB;YAAA,wBACTlC,KAAK,CAAC,sBAAsB,CAAC;YAAA,uBAC9BA,KAAK,CAAC,qBAAqB;UAAC,GAC7C8E,UAAU;YAAA,MACVM,EAAE,CAACrE,KAAK;YAAA,UACJW,QAAQ,CAACX,KAAK,IAAIuE,OAAO,CAACvE,KAAK;YAAA,eAC1B9B,IAAI,CAAC8B,KAAK,KAAK,CAAC,IAAI,CAAC8B,mBAAmB,CAAC9B,KAAK;YAAA,SACpDuE,OAAO,CAACvE,KAAK,IAAIf,KAAK,CAACyF,KAAK;YAAA,YACzBJ,UAAU,CAACtE,KAAK;YAAA,WACjBJ,SAAS,CAACI,KAAK;YAAA,WACfuD,UAAU,CAACvD,KAAK;YAAA,SAClByE,OAAO,CAACzE,KAAK,KAAK;UAAK;YAG7B,GAAGN,KAAK;YACRtB,OAAO,EAAEuG,KAAA;cAAA,IAAC;gBACR1F,KAAK,EAAE;kBAAEkF,KAAK,EAAES,UAAU;kBAAE,GAAGC;gBAAU;cAC3C,CAAC,GAAAF,KAAA;cAAA,OAAAG,mBAAA,CAAAC,SAAA,SAEK9F,KAAK,CAACpB,MAAM,IAAAiH,mBAAA;gBAAA;cAAA,IAER7F,KAAK,CAACpB,MAAM,EAEjB,EAAAmH,eAAA,CAAAF,mBAAA,aAAAb,WAAA;gBAAA,OAGOxD,WAAW;gBAAA,SACTmE,UAAU;gBAAA,SACVjF,KAAK,CAACK,KAAK;gBAAA,WACTsB,OAAO;gBAAA,aAILrC,KAAK,CAAC1B,SAAS;gBAAA,YAChBiH,UAAU,CAACxE,KAAK;gBAAA,YAChBsE,UAAU,CAACtE,KAAK;gBAAA,eACbf,KAAK,CAACnB,WAAW;gBAAA,QACxBmB,KAAK,CAACf,IAAI;gBAAA,QACVwC,YAAY,CAACuE,SAAS,CAACjF,KAAK;gBAAA,gBACpBU,YAAY,CAACwE,iBAAiB,CAAClF,KAAK;gBAAA,WACzCa,OAAO;gBAAA,UACRf;cAAI,GACR+E,SAAS,EACTnB,UAAU,YAAAtH,UAAA,EAbD;gBACZ+I,OAAO,EAAEpF;cACX,CAAC,EAAE,IAAI;gBAAAqF,IAAA;cAAA,MAcPnG,KAAK,CAAC5B,QAAQ,IAAA2H,eAAA,CAAAF,mBAAA;gBAAA,SAAAO,eAAA,CAEL,CACLT,UAAU,EACV,mBAAmB,CACpB;gBAAA,MACI,GAAGC,SAAS,CAACR,EAAE,QAAQ;gBAAA,uBAAAH,MAAA,IAClBvE,KAAK,CAACK,KAAK,GAAAkE,MAAA;gBAAA,OACfrC,QAAQ;gBAAA;gBAAA;cAAA,YAAAyD,WAAA,EADJ3F,KAAK,CAACK,KAAK,GAKxB,EAECf,KAAK,CAACP,MAAM,IAAAoG,mBAAA;gBAAA;cAAA,IAER7F,KAAK,CAACP,MAAM,EAEjB;YAAA;UAEJ;QAAA,CAGN;QACD8E,OAAO,EAAED,UAAU,GAAGsB,SAAS,IAAAC,mBAAA,CAAAC,SAAA,SAEzBrF,KAAK,CAAC8D,OAAO,GAAGqB,SAAS,CAAC,EAE1BvB,UAAU,IAAAwB,mBAAA,CAAAC,SAAA,SAAAD,mBAAA,sBAAAd,YAAA,CAAAvI,QAAA;UAAA,UAKGwD,KAAK,CAACjB,iBAAiB,IAAI4B,SAAS,CAACI,KAAK;UAAA,SAC3CrC,YAAY,CAACqC,KAAK;UAAA,OACpBG,GAAG,CAACH,KAAK;UAAA,YACJf,KAAK,CAACsG;QAAQ,GACP7F,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","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","_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<HTMLInputElement>()\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 }) => (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n { props.prefix }\n </span>\n )}\n\n <textarea\n ref={ textareaRef }\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":[]}
|
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
.v-field__input
|
|
16
16
|
$a: calc((var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0)) - 6px)
|
|
17
17
|
$b: calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)
|
|
18
|
+
$c: calc(100% - var(--v-textarea-scroll-bar-width, 16px))
|
|
18
19
|
|
|
19
20
|
flex: 1 1 auto
|
|
20
21
|
outline: none
|
|
21
|
-
|
|
22
|
-
mask-image: linear-gradient(to bottom, transparent, transparent $a, black $b)
|
|
22
|
+
|
|
23
|
+
-webkit-mask-image: linear-gradient(to bottom, transparent, transparent $a, black $b), linear-gradient(to right, transparent, transparent $c, black $c)
|
|
24
|
+
mask-image: linear-gradient(to bottom, transparent, transparent $a, black $b), linear-gradient(to right, transparent, transparent $c, black $c)
|
|
23
25
|
|
|
24
26
|
&.v-textarea__sizer
|
|
25
27
|
visibility: hidden
|
|
@@ -10,8 +10,9 @@ import { useLocale, useRtl } from "../../composables/locale.js";
|
|
|
10
10
|
import { makeTagProps } from "../../composables/tag.js";
|
|
11
11
|
import { makeThemeProps, provideTheme } from "../../composables/theme.js"; // Directives
|
|
12
12
|
import vTouch from "../../directives/touch/index.js"; // Utilities
|
|
13
|
-
import { computed, provide, ref, shallowRef, toRef, watch } from 'vue';
|
|
14
|
-
import { convertToUnit, genericComponent, PREFERS_REDUCED_MOTION, propsFactory, useRender } from "../../util/index.js";
|
|
13
|
+
import { computed, nextTick, provide, ref, shallowRef, toRef, watch } from 'vue';
|
|
14
|
+
import { convertToUnit, genericComponent, IN_BROWSER, PREFERS_REDUCED_MOTION, propsFactory, useRender } from "../../util/index.js";
|
|
15
|
+
import { getScrollParent } from "../../util/getScrollParent.js"; // Types
|
|
15
16
|
export const VWindowSymbol = Symbol.for('vuetify:v-window');
|
|
16
17
|
export const VWindowGroupSymbol = Symbol.for('vuetify:v-window-group');
|
|
17
18
|
export const makeVWindowProps = propsFactory({
|
|
@@ -95,7 +96,21 @@ export const VWindow = genericComponent()({
|
|
|
95
96
|
const activeIndex = computed(() => {
|
|
96
97
|
return group.items.value.findIndex(item => group.selected.value.includes(item.id));
|
|
97
98
|
});
|
|
99
|
+
|
|
100
|
+
// Fix for https://github.com/vuetifyjs/vuetify/issues/18447
|
|
98
101
|
watch(activeIndex, (newVal, oldVal) => {
|
|
102
|
+
let scrollableParent;
|
|
103
|
+
const savedScrollPosition = {
|
|
104
|
+
x: 0,
|
|
105
|
+
y: 0
|
|
106
|
+
};
|
|
107
|
+
if (IN_BROWSER && oldVal >= 0) {
|
|
108
|
+
scrollableParent = getScrollParent(rootRef.value);
|
|
109
|
+
|
|
110
|
+
// Save current scroll position
|
|
111
|
+
savedScrollPosition.x = scrollableParent.scrollLeft;
|
|
112
|
+
savedScrollPosition.y = scrollableParent.scrollTop;
|
|
113
|
+
}
|
|
99
114
|
const itemsLength = group.items.value.length;
|
|
100
115
|
const lastIndex = itemsLength - 1;
|
|
101
116
|
if (itemsLength <= 2) {
|
|
@@ -107,7 +122,32 @@ export const VWindow = genericComponent()({
|
|
|
107
122
|
} else {
|
|
108
123
|
isReversed.value = newVal < oldVal;
|
|
109
124
|
}
|
|
110
|
-
|
|
125
|
+
nextTick(() => {
|
|
126
|
+
if (!IN_BROWSER || !scrollableParent) return;
|
|
127
|
+
const currentScrollY = scrollableParent.scrollTop;
|
|
128
|
+
if (currentScrollY !== savedScrollPosition.y) {
|
|
129
|
+
scrollableParent.scrollTo({
|
|
130
|
+
left: savedScrollPosition.x,
|
|
131
|
+
top: savedScrollPosition.y,
|
|
132
|
+
behavior: 'instant'
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
requestAnimationFrame(() => {
|
|
136
|
+
if (!scrollableParent) return;
|
|
137
|
+
const rafScrollY = scrollableParent.scrollTop;
|
|
138
|
+
if (rafScrollY !== savedScrollPosition.y) {
|
|
139
|
+
scrollableParent.scrollTo({
|
|
140
|
+
left: savedScrollPosition.x,
|
|
141
|
+
top: savedScrollPosition.y,
|
|
142
|
+
behavior: 'instant'
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}, {
|
|
148
|
+
flush: 'sync'
|
|
149
|
+
}); // Run synchronously before DOM updates
|
|
150
|
+
|
|
111
151
|
provide(VWindowSymbol, {
|
|
112
152
|
transition,
|
|
113
153
|
isReversed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VWindow.js","names":["VBtn","makeComponentProps","useGroup","useLocale","useRtl","makeTagProps","makeThemeProps","provideTheme","vTouch","computed","provide","ref","shallowRef","toRef","watch","convertToUnit","genericComponent","PREFERS_REDUCED_MOTION","propsFactory","useRender","VWindowSymbol","Symbol","for","VWindowGroupSymbol","makeVWindowProps","continuous","Boolean","nextIcon","type","String","Function","Object","default","prevIcon","reverse","showArrows","validator","v","verticalArrows","touch","undefined","direction","modelValue","disabled","selectedClass","mandatory","crossfade","transitionDuration","Number","VWindow","name","directives","props","emits","value","setup","_ref","slots","themeClasses","isRtl","t","group","rootRef","isRtlReverse","isReversed","transition","axis","transitionCount","transitionHeight","activeIndex","items","findIndex","item","selected","includes","id","newVal","oldVal","itemsLength","length","lastIndex","canMoveBack","canMoveForward","prev","next","arrows","prevProps","icon","class","onClick","push","_createVNode","_createElementVNode","nextProps","touchOptions","options","left","right","start","_ref2","originalEvent","stopPropagation","_withDirectives","tag","_normalizeClass","_normalizeStyle","style","height","additional"],"sources":["../../../src/components/VWindow/VWindow.tsx"],"sourcesContent":["// Styles\nimport './VWindow.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useGroup } from '@/composables/group'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Directives\nimport vTouch from '@/directives/touch'\n\n// Utilities\nimport { computed, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { GroupItemProvide, GroupProvide } from '@/composables/group'\nimport type { IconValue } from '@/composables/icons'\nimport type { TouchHandlers } from '@/directives/touch'\nimport type { GenericProps } from '@/util'\n\nexport type VWindowSlots = {\n default: { group: GroupProvide }\n additional: { group: GroupProvide }\n prev: { props: ControlProps }\n next: { props: ControlProps }\n}\n\ntype WindowProvide = {\n transition: ComputedRef<undefined | string>\n transitionCount: Ref<number>\n transitionHeight: Ref<undefined | string>\n isReversed: Ref<boolean>\n rootRef: Ref<HTMLElement | undefined>\n}\n\ntype ControlProps = {\n icon: IconValue\n class: string\n onClick: () => void\n 'aria-label': string\n}\n\nexport const VWindowSymbol: InjectionKey<WindowProvide> = Symbol.for('vuetify:v-window')\nexport const VWindowGroupSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-window-group')\n\nexport const makeVWindowProps = propsFactory({\n continuous: Boolean,\n nextIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$next',\n },\n prevIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$prev',\n },\n reverse: Boolean,\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => typeof v === 'boolean' || v === 'hover',\n },\n verticalArrows: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n touch: {\n type: [Object, Boolean] as PropType<boolean | TouchHandlers>,\n default: undefined,\n },\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n\n modelValue: null,\n disabled: Boolean,\n selectedClass: {\n type: String,\n default: 'v-window-item--active',\n },\n // TODO: mandatory should probably not be exposed but do this for now\n mandatory: {\n type: [Boolean, String] as PropType<boolean | 'force'>,\n default: 'force' as const,\n },\n crossfade: Boolean,\n transitionDuration: Number,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VWindow')\n\nexport const VWindow = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VWindowSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VWindow',\n\n directives: { vTouch },\n\n props: makeVWindowProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { isRtl } = useRtl()\n const { t } = useLocale()\n\n const group = useGroup(props, VWindowGroupSymbol)\n\n const rootRef = ref()\n const isRtlReverse = computed(() => isRtl.value ? !props.reverse : props.reverse)\n const isReversed = shallowRef(false)\n const transition = computed(() => {\n if (props.crossfade) {\n return 'v-window-crossfade-transition'\n }\n\n const axis = props.direction === 'vertical' ? 'y' : 'x'\n const reverse = isRtlReverse.value ? !isReversed.value : isReversed.value\n const direction = reverse ? '-reverse' : ''\n\n return `v-window-${axis}${direction}-transition`\n })\n const transitionCount = shallowRef(0)\n const transitionHeight = ref<undefined | string>(undefined)\n\n const activeIndex = computed(() => {\n return group.items.value.findIndex(item => group.selected.value.includes(item.id))\n })\n\n watch(activeIndex, (newVal, oldVal) => {\n const itemsLength = group.items.value.length\n const lastIndex = itemsLength - 1\n\n if (itemsLength <= 2) {\n isReversed.value = newVal < oldVal\n } else if (newVal === lastIndex && oldVal === 0) {\n isReversed.value = true\n } else if (newVal === 0 && oldVal === lastIndex) {\n isReversed.value = false\n } else {\n isReversed.value = newVal < oldVal\n }\n })\n\n provide(VWindowSymbol, {\n transition,\n isReversed,\n transitionCount,\n transitionHeight,\n rootRef,\n })\n\n const canMoveBack = toRef(() => props.continuous || activeIndex.value !== 0)\n const canMoveForward = toRef(() => props.continuous || activeIndex.value !== group.items.value.length - 1)\n\n function prev () {\n canMoveBack.value && group.prev()\n }\n\n function next () {\n canMoveForward.value && group.next()\n }\n\n const arrows = computed(() => {\n const arrows = []\n\n const prevProps = {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n class: `v-window__${isRtlReverse.value ? 'right' : 'left'}`,\n onClick: group.prev,\n 'aria-label': t('$vuetify.carousel.prev'),\n }\n\n arrows.push(canMoveBack.value\n ? slots.prev\n ? slots.prev({ props: prevProps })\n : <VBtn { ...prevProps } />\n : <div />\n )\n\n const nextProps = {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n class: `v-window__${isRtlReverse.value ? 'left' : 'right'}`,\n onClick: group.next,\n 'aria-label': t('$vuetify.carousel.next'),\n }\n\n arrows.push(canMoveForward.value\n ? slots.next\n ? slots.next({ props: nextProps })\n : <VBtn { ...nextProps } />\n : <div />\n )\n\n return arrows\n })\n\n const touchOptions = computed(() => {\n if (props.touch === false) return props.touch\n\n const options: TouchHandlers = {\n left: () => {\n isRtlReverse.value ? prev() : next()\n },\n right: () => {\n isRtlReverse.value ? next() : prev()\n },\n start: ({ originalEvent }) => {\n originalEvent.stopPropagation()\n },\n }\n\n return {\n ...options,\n ...(props.touch === true ? {} : props.touch),\n }\n })\n\n useRender(() => (\n <props.tag\n ref={ rootRef }\n class={[\n 'v-window',\n {\n 'v-window--show-arrows-on-hover': props.showArrows === 'hover',\n 'v-window--vertical-arrows': !!props.verticalArrows,\n 'v-window--crossfade': !!props.crossfade,\n },\n themeClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n props.transitionDuration && !PREFERS_REDUCED_MOTION\n ? { '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms') }\n : undefined,\n ]}\n v-touch={ touchOptions.value }\n >\n <div\n class=\"v-window__container\"\n style={{\n height: transitionHeight.value,\n }}\n >\n { slots.default?.({ group }) }\n\n { props.showArrows !== false && (\n <div\n class={[\n 'v-window__controls',\n { 'v-window__controls--left': props.verticalArrows === 'left' || props.verticalArrows === true },\n { 'v-window__controls--right': props.verticalArrows === 'right' },\n ]}\n >\n { arrows.value }\n </div>\n )}\n </div>\n\n { slots.additional?.({ group }) }\n </props.tag>\n ))\n\n return {\n group,\n }\n },\n})\n\nexport type VWindow = InstanceType<typeof VWindow>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VWindow.js","names":["VBtn","makeComponentProps","useGroup","useLocale","useRtl","makeTagProps","makeThemeProps","provideTheme","vTouch","computed","nextTick","provide","ref","shallowRef","toRef","watch","convertToUnit","genericComponent","IN_BROWSER","PREFERS_REDUCED_MOTION","propsFactory","useRender","getScrollParent","VWindowSymbol","Symbol","for","VWindowGroupSymbol","makeVWindowProps","continuous","Boolean","nextIcon","type","String","Function","Object","default","prevIcon","reverse","showArrows","validator","v","verticalArrows","touch","undefined","direction","modelValue","disabled","selectedClass","mandatory","crossfade","transitionDuration","Number","VWindow","name","directives","props","emits","value","setup","_ref","slots","themeClasses","isRtl","t","group","rootRef","isRtlReverse","isReversed","transition","axis","transitionCount","transitionHeight","activeIndex","items","findIndex","item","selected","includes","id","newVal","oldVal","scrollableParent","savedScrollPosition","x","y","scrollLeft","scrollTop","itemsLength","length","lastIndex","currentScrollY","scrollTo","left","top","behavior","requestAnimationFrame","rafScrollY","flush","canMoveBack","canMoveForward","prev","next","arrows","prevProps","icon","class","onClick","push","_createVNode","_createElementVNode","nextProps","touchOptions","options","right","start","_ref2","originalEvent","stopPropagation","_withDirectives","tag","_normalizeClass","_normalizeStyle","style","height","additional"],"sources":["../../../src/components/VWindow/VWindow.tsx"],"sourcesContent":["// Styles\nimport './VWindow.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useGroup } from '@/composables/group'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Directives\nimport vTouch from '@/directives/touch'\n\n// Utilities\nimport { computed, nextTick, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, IN_BROWSER, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\nimport { getScrollParent } from '@/util/getScrollParent'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { GroupItemProvide, GroupProvide } from '@/composables/group'\nimport type { IconValue } from '@/composables/icons'\nimport type { TouchHandlers } from '@/directives/touch'\nimport type { GenericProps } from '@/util'\n\nexport type VWindowSlots = {\n default: { group: GroupProvide }\n additional: { group: GroupProvide }\n prev: { props: ControlProps }\n next: { props: ControlProps }\n}\n\ntype WindowProvide = {\n transition: ComputedRef<undefined | string>\n transitionCount: Ref<number>\n transitionHeight: Ref<undefined | string>\n isReversed: Ref<boolean>\n rootRef: Ref<HTMLElement | undefined>\n}\n\ntype ControlProps = {\n icon: IconValue\n class: string\n onClick: () => void\n 'aria-label': string\n}\n\nexport const VWindowSymbol: InjectionKey<WindowProvide> = Symbol.for('vuetify:v-window')\nexport const VWindowGroupSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-window-group')\n\nexport const makeVWindowProps = propsFactory({\n continuous: Boolean,\n nextIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$next',\n },\n prevIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$prev',\n },\n reverse: Boolean,\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => typeof v === 'boolean' || v === 'hover',\n },\n verticalArrows: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n touch: {\n type: [Object, Boolean] as PropType<boolean | TouchHandlers>,\n default: undefined,\n },\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n\n modelValue: null,\n disabled: Boolean,\n selectedClass: {\n type: String,\n default: 'v-window-item--active',\n },\n // TODO: mandatory should probably not be exposed but do this for now\n mandatory: {\n type: [Boolean, String] as PropType<boolean | 'force'>,\n default: 'force' as const,\n },\n crossfade: Boolean,\n transitionDuration: Number,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VWindow')\n\nexport const VWindow = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VWindowSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VWindow',\n\n directives: { vTouch },\n\n props: makeVWindowProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { isRtl } = useRtl()\n const { t } = useLocale()\n\n const group = useGroup(props, VWindowGroupSymbol)\n\n const rootRef = ref()\n const isRtlReverse = computed(() => isRtl.value ? !props.reverse : props.reverse)\n const isReversed = shallowRef(false)\n const transition = computed(() => {\n if (props.crossfade) {\n return 'v-window-crossfade-transition'\n }\n\n const axis = props.direction === 'vertical' ? 'y' : 'x'\n const reverse = isRtlReverse.value ? !isReversed.value : isReversed.value\n const direction = reverse ? '-reverse' : ''\n\n return `v-window-${axis}${direction}-transition`\n })\n const transitionCount = shallowRef(0)\n const transitionHeight = ref<undefined | string>(undefined)\n\n const activeIndex = computed(() => {\n return group.items.value.findIndex(item => group.selected.value.includes(item.id))\n })\n\n // Fix for https://github.com/vuetifyjs/vuetify/issues/18447\n watch(activeIndex, (newVal, oldVal) => {\n let scrollableParent: HTMLElement | undefined\n const savedScrollPosition = { x: 0, y: 0 }\n\n if (IN_BROWSER && oldVal >= 0) {\n scrollableParent = getScrollParent(rootRef.value)\n\n // Save current scroll position\n savedScrollPosition.x = scrollableParent.scrollLeft\n savedScrollPosition.y = scrollableParent.scrollTop\n }\n\n const itemsLength = group.items.value.length\n const lastIndex = itemsLength - 1\n\n if (itemsLength <= 2) {\n isReversed.value = newVal < oldVal\n } else if (newVal === lastIndex && oldVal === 0) {\n isReversed.value = true\n } else if (newVal === 0 && oldVal === lastIndex) {\n isReversed.value = false\n } else {\n isReversed.value = newVal < oldVal\n }\n\n nextTick(() => {\n if (!IN_BROWSER || !scrollableParent) return\n\n const currentScrollY = scrollableParent.scrollTop\n\n if (currentScrollY !== savedScrollPosition.y) {\n scrollableParent.scrollTo({ left: savedScrollPosition.x, top: savedScrollPosition.y, behavior: 'instant' })\n }\n\n requestAnimationFrame(() => {\n if (!scrollableParent) return\n\n const rafScrollY = scrollableParent.scrollTop\n\n if (rafScrollY !== savedScrollPosition.y) {\n scrollableParent.scrollTo({ left: savedScrollPosition.x, top: savedScrollPosition.y, behavior: 'instant' })\n }\n })\n })\n }, { flush: 'sync' }) // Run synchronously before DOM updates\n\n provide(VWindowSymbol, {\n transition,\n isReversed,\n transitionCount,\n transitionHeight,\n rootRef,\n })\n\n const canMoveBack = toRef(() => props.continuous || activeIndex.value !== 0)\n const canMoveForward = toRef(() => props.continuous || activeIndex.value !== group.items.value.length - 1)\n\n function prev () {\n canMoveBack.value && group.prev()\n }\n\n function next () {\n canMoveForward.value && group.next()\n }\n\n const arrows = computed(() => {\n const arrows = []\n\n const prevProps = {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n class: `v-window__${isRtlReverse.value ? 'right' : 'left'}`,\n onClick: group.prev,\n 'aria-label': t('$vuetify.carousel.prev'),\n }\n\n arrows.push(canMoveBack.value\n ? slots.prev\n ? slots.prev({ props: prevProps })\n : <VBtn { ...prevProps } />\n : <div />\n )\n\n const nextProps = {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n class: `v-window__${isRtlReverse.value ? 'left' : 'right'}`,\n onClick: group.next,\n 'aria-label': t('$vuetify.carousel.next'),\n }\n\n arrows.push(canMoveForward.value\n ? slots.next\n ? slots.next({ props: nextProps })\n : <VBtn { ...nextProps } />\n : <div />\n )\n\n return arrows\n })\n\n const touchOptions = computed(() => {\n if (props.touch === false) return props.touch\n\n const options: TouchHandlers = {\n left: () => {\n isRtlReverse.value ? prev() : next()\n },\n right: () => {\n isRtlReverse.value ? next() : prev()\n },\n start: ({ originalEvent }) => {\n originalEvent.stopPropagation()\n },\n }\n\n return {\n ...options,\n ...(props.touch === true ? {} : props.touch),\n }\n })\n\n useRender(() => (\n <props.tag\n ref={ rootRef }\n class={[\n 'v-window',\n {\n 'v-window--show-arrows-on-hover': props.showArrows === 'hover',\n 'v-window--vertical-arrows': !!props.verticalArrows,\n 'v-window--crossfade': !!props.crossfade,\n },\n themeClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n props.transitionDuration && !PREFERS_REDUCED_MOTION\n ? { '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms') }\n : undefined,\n ]}\n v-touch={ touchOptions.value }\n >\n <div\n class=\"v-window__container\"\n style={{\n height: transitionHeight.value,\n }}\n >\n { slots.default?.({ group }) }\n\n { props.showArrows !== false && (\n <div\n class={[\n 'v-window__controls',\n { 'v-window__controls--left': props.verticalArrows === 'left' || props.verticalArrows === true },\n { 'v-window__controls--right': props.verticalArrows === 'right' },\n ]}\n >\n { arrows.value }\n </div>\n )}\n </div>\n\n { slots.additional?.({ group }) }\n </props.tag>\n ))\n\n return {\n group,\n }\n },\n})\n\nexport type VWindow = InstanceType<typeof VWindow>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -61,7 +61,7 @@ export function createDate(options, locale) {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
export function createDateRange(adapter, start, stop) {
|
|
64
|
-
const diff = adapter.getDiff(adapter.
|
|
64
|
+
const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
65
65
|
const datesInRange = [start];
|
|
66
66
|
for (let i = 1; i < diff; i++) {
|
|
67
67
|
const nextDate = adapter.addDays(start, i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","names":["useLocale","inject","reactive","watch","mergeDeep","VuetifyDateAdapter","DateModule","DateOptionsSymbol","Symbol","for","DateAdapterSymbol","createDate","options","locale","_options","adapter","af","bg","ca","ckb","cs","de","el","en","et","fa","fi","hr","hu","he","id","it","ja","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","instance","createInstance","createDateRange","start","stop","diff","getDiff","
|
|
1
|
+
{"version":3,"file":"date.js","names":["useLocale","inject","reactive","watch","mergeDeep","VuetifyDateAdapter","DateModule","DateOptionsSymbol","Symbol","for","DateAdapterSymbol","createDate","options","locale","_options","adapter","af","bg","ca","ckb","cs","de","el","en","et","fa","fi","hr","hu","he","id","it","ja","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","instance","createInstance","createDateRange","start","stop","diff","getDiff","Date","toISO","datesInRange","i","nextDate","addDays","push","endOfDay","current","value","formats","useDate","Error"],"sources":["../../../src/composables/date/date.ts"],"sourcesContent":["// Composables\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { inject, reactive, watch } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { InjectionKey } from 'vue'\nimport type { DateAdapter } from './DateAdapter'\nimport type { LocaleInstance } from '@/composables/locale'\n\n// Adapters\nimport { VuetifyDateAdapter } from './adapters/vuetify'\n\nexport interface DateInstance extends DateModule.InternalAdapter {\n locale?: any\n}\n\n/** Supports module augmentation to specify date adapter types */\nexport namespace DateModule {\n interface Adapter {}\n\n export type InternalAdapter = {} extends Adapter ? DateAdapter : Adapter\n}\n\nexport type InternalDateOptions = {\n adapter: (new (options: { locale: any, formats?: any }) => DateInstance) | DateInstance\n formats?: Record<string, any>\n locale: Record<string, any>\n}\n\nexport type DateOptions = Partial<InternalDateOptions>\n\nexport const DateOptionsSymbol: InjectionKey<InternalDateOptions> = Symbol.for('vuetify:date-options')\nexport const DateAdapterSymbol: InjectionKey<DateInstance> = Symbol.for('vuetify:date-adapter')\n\nexport function createDate (options: DateOptions | undefined, locale: LocaleInstance) {\n const _options = mergeDeep({\n adapter: VuetifyDateAdapter,\n locale: {\n af: 'af-ZA',\n // ar: '', # not the same value for all variants\n bg: 'bg-BG',\n ca: 'ca-ES',\n ckb: '',\n cs: 'cs-CZ',\n de: 'de-DE',\n el: 'el-GR',\n en: 'en-US',\n // es: '', # not the same value for all variants\n et: 'et-EE',\n fa: 'fa-IR',\n fi: 'fi-FI',\n // fr: '', #not the same value for all variants\n hr: 'hr-HR',\n hu: 'hu-HU',\n he: 'he-IL',\n id: 'id-ID',\n it: 'it-IT',\n ja: 'ja-JP',\n ko: 'ko-KR',\n lv: 'lv-LV',\n lt: 'lt-LT',\n nl: 'nl-NL',\n no: 'no-NO',\n pl: 'pl-PL',\n pt: 'pt-PT',\n ro: 'ro-RO',\n ru: 'ru-RU',\n sk: 'sk-SK',\n sl: 'sl-SI',\n srCyrl: 'sr-SP',\n srLatn: 'sr-SP',\n sv: 'sv-SE',\n th: 'th-TH',\n tr: 'tr-TR',\n az: 'az-AZ',\n uk: 'uk-UA',\n vi: 'vi-VN',\n zhHans: 'zh-CN',\n zhHant: 'zh-TW',\n },\n }, options) as InternalDateOptions\n\n return {\n options: _options,\n instance: createInstance(_options, locale),\n }\n}\n\nexport function createDateRange (adapter: DateInstance, start: unknown, stop?: unknown) {\n const diff = adapter.getDiff(\n new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`),\n new Date(`${adapter.toISO(start)}T00:00:00Z`),\n 'days',\n )\n const datesInRange = [start]\n\n for (let i = 1; i < diff; i++) {\n const nextDate = adapter.addDays(start, i)\n datesInRange.push(nextDate)\n }\n\n if (stop) {\n datesInRange.push(adapter.endOfDay(stop))\n }\n\n return datesInRange\n}\n\nfunction createInstance (options: InternalDateOptions, locale: LocaleInstance) {\n const instance = reactive(\n typeof options.adapter === 'function'\n // eslint-disable-next-line new-cap\n ? new options.adapter({\n locale: options.locale[locale.current.value] ?? locale.current.value,\n formats: options.formats,\n })\n : options.adapter\n )\n\n watch(locale.current, value => {\n instance.locale = options.locale[value] ?? value ?? instance.locale\n })\n\n return instance\n}\n\nexport function useDate (): DateInstance {\n const options = inject(DateOptionsSymbol)\n\n if (!options) throw new Error('[Vuetify] Could not find injected date options')\n\n const locale = useLocale()\n\n return createInstance(options, locale)\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/composables/group.js
CHANGED
|
@@ -46,7 +46,7 @@ export function useGroupItem(props, injectKey) {
|
|
|
46
46
|
function unregister() {
|
|
47
47
|
group?.unregister(id);
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
register();
|
|
50
50
|
onBeforeUnmount(() => unregister());
|
|
51
51
|
const isSelected = computed(() => {
|
|
52
52
|
return group.isSelected(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.js","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","onUpdated","provide","reactive","toRef","unref","useId","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","isFirst","items","isLast","emit","flush","toggle","select","useGroup","isUnmounted","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","useIndexAsValue","splice","push","forceMandatoryValue","findIndex","find","i","internalValue","slice","includes","step","offset","currentId","currentIndex","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, useId, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\nimport type { EventProp } from '@/util'\n\nexport interface GroupItem {\n id: string\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n useIndexAsValue?: boolean\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': EventProp<[unknown]> | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: string) => void\n select: (id: string, value: boolean) => void\n selected: Ref<Readonly<string[]>>\n isSelected: (id: string) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: Readonly<Ref<{\n id: string\n value: unknown\n disabled: boolean | undefined\n }[]>>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: string\n isSelected: Ref<boolean>\n isFirst: Ref<boolean>\n isLast: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n register: () => void\n unregister: () => void\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': EventProp<[{ value: boolean }]> | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = useId()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(() => props.value)\n const disabled = computed(() => !!(group.disabled.value || props.disabled))\n\n function register () {\n group?.register({ id, value, disabled }, vm)\n }\n\n function unregister () {\n group?.unregister(id)\n }\n\n onMounted(() => register())\n onBeforeUnmount(() => unregister())\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n const isFirst = computed(() => {\n return group.items.value[0].id === id\n })\n const isLast = computed(() => {\n return group.items.value[group.items.value.length - 1].id === id\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n }, { flush: 'sync' })\n\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n register,\n unregister,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v === undefined) return []\n\n return getIds(items, v === null ? [null] : wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index\n unwrapped.useIndexAsValue = true\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: string) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n onUpdated(() => {\n // #19655 update the items that use the index as the value.\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i\n }\n }\n })\n\n function select (id: string, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n if (!isSelected && !value) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = []\n\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value))\n const itemByIndex = items[value]\n\n if (item?.value !== undefined) {\n ids.push(item.id)\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id)\n }\n })\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = []\n\n ids.forEach(id => {\n const itemIndex = items.findIndex(item => item.id === id)\n if (~itemIndex) {\n const item = items[itemIndex]\n values.push(item.value !== undefined ? item.value : itemIndex)\n }\n })\n\n return values\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"group.js","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","onUpdated","provide","reactive","toRef","unref","useId","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","isFirst","items","isLast","emit","flush","toggle","select","useGroup","isUnmounted","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","useIndexAsValue","splice","push","forceMandatoryValue","findIndex","find","i","internalValue","slice","includes","step","offset","currentId","currentIndex","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, useId, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\nimport type { EventProp } from '@/util'\n\nexport interface GroupItem {\n id: string\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n useIndexAsValue?: boolean\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': EventProp<[unknown]> | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: string) => void\n select: (id: string, value: boolean) => void\n selected: Ref<Readonly<string[]>>\n isSelected: (id: string) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: Readonly<Ref<{\n id: string\n value: unknown\n disabled: boolean | undefined\n }[]>>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: string\n isSelected: Ref<boolean>\n isFirst: Ref<boolean>\n isLast: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n register: () => void\n unregister: () => void\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': EventProp<[{ value: boolean }]> | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = useId()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(() => props.value)\n const disabled = computed(() => !!(group.disabled.value || props.disabled))\n\n function register () {\n group?.register({ id, value, disabled }, vm)\n }\n\n function unregister () {\n group?.unregister(id)\n }\n\n register()\n onBeforeUnmount(() => unregister())\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n const isFirst = computed(() => {\n return group.items.value[0].id === id\n })\n const isLast = computed(() => {\n return group.items.value[group.items.value.length - 1].id === id\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n }, { flush: 'sync' })\n\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n register,\n unregister,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v === undefined) return []\n\n return getIds(items, v === null ? [null] : wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (unref(unwrapped.value) === undefined) {\n unwrapped.value = index\n unwrapped.useIndexAsValue = true\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: string) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n onUpdated(() => {\n // #19655 update the items that use the index as the value.\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i\n }\n }\n })\n\n function select (id: string, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n if (!isSelected && !value) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: string) => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: string[] = []\n\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value))\n const itemByIndex = items[value]\n\n if (item?.value !== undefined) {\n ids.push(item.id)\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id)\n }\n })\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = []\n\n ids.forEach(id => {\n const itemIndex = items.findIndex(item => item.id === id)\n if (~itemIndex) {\n const item = items[itemIndex]\n values.push(item.value !== undefined ? item.value : itemIndex)\n }\n })\n\n return values\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Composables
|
|
2
2
|
import { useProxiedModel } from "../proxiedModel.js"; // Utilities
|
|
3
|
-
import { computed, inject, onBeforeMount, onBeforeUnmount, provide, ref, shallowRef, toRaw, toRef, toValue } from 'vue';
|
|
3
|
+
import { computed, inject, nextTick, onBeforeMount, onBeforeUnmount, provide, ref, shallowRef, toRaw, toRef, toValue, watch } from 'vue';
|
|
4
4
|
import { independentActiveStrategy, independentSingleActiveStrategy, leafActiveStrategy, leafSingleActiveStrategy } from "./activeStrategies.js";
|
|
5
5
|
import { listOpenStrategy, multipleOpenStrategy, singleOpenStrategy } from "./openStrategies.js";
|
|
6
6
|
import { classicSelectStrategy, independentSelectStrategy, independentSingleSelectStrategy, leafSelectStrategy, leafSingleSelectStrategy, trunkSelectStrategy } from "./selectStrategies.js";
|
|
@@ -265,7 +265,9 @@ export const useNestedItem = (id, isDisabled, isGroup) => {
|
|
|
265
265
|
};
|
|
266
266
|
onBeforeMount(() => {
|
|
267
267
|
if (!parent.isGroupActivator) {
|
|
268
|
-
|
|
268
|
+
nextTick(() => {
|
|
269
|
+
parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup);
|
|
270
|
+
});
|
|
269
271
|
}
|
|
270
272
|
});
|
|
271
273
|
onBeforeUnmount(() => {
|
|
@@ -273,6 +275,14 @@ export const useNestedItem = (id, isDisabled, isGroup) => {
|
|
|
273
275
|
parent.root.unregister(computedId.value);
|
|
274
276
|
}
|
|
275
277
|
});
|
|
278
|
+
watch(computedId, (val, oldVal) => {
|
|
279
|
+
if (!parent.isGroupActivator) {
|
|
280
|
+
parent.root.unregister(oldVal);
|
|
281
|
+
nextTick(() => {
|
|
282
|
+
parent.root.register(val, parent.id.value, toValue(isDisabled), isGroup);
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
});
|
|
276
286
|
isGroup && provide(VNestedSymbol, item);
|
|
277
287
|
return item;
|
|
278
288
|
};
|