@vuetify/nightly 3.11.2-dev.2025-12-03 → 3.11.2-dev.2025-12-05

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.
@@ -1,3 +1,4 @@
1
+ @forward '../VKbd/variables';
1
2
  @use '../../styles/settings';
2
3
  @use '../VKbd/variables' as vkbd;
3
4
 
@@ -11,6 +11,9 @@
11
11
  .v-otp-input .v-field {
12
12
  height: 100%;
13
13
  }
14
+ .v-otp-input .v-field .v-field__outline__start, .v-otp-input .v-field .v-field__outline__end {
15
+ flex: 1;
16
+ }
14
17
 
15
18
  .v-otp-input__divider {
16
19
  margin: 0 8px;
@@ -174,7 +174,8 @@ export const VOtpInput = genericComponent()({
174
174
  baseColor: toRef(() => props.baseColor),
175
175
  disabled: toRef(() => props.disabled),
176
176
  error: toRef(() => props.error),
177
- variant: toRef(() => props.variant)
177
+ variant: toRef(() => props.variant),
178
+ rounded: toRef(() => props.rounded)
178
179
  }
179
180
  }, {
180
181
  scoped: true
@@ -1 +1 @@
1
- {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useIntersectionObserver","useLocale","useProxiedModel","useToggleScope","computed","effectScope","nextTick","ref","toRef","watch","watchEffect","filterInputAttrs","focusChild","genericComponent","pick","propsFactory","useRender","makeVOtpInputProps","autofocus","Boolean","divider","String","focusAll","label","type","default","length","Number","modelValue","undefined","placeholder","variant","VOtpInput","name","props","emits","finish","val","setup","_ref","attrs","emit","slots","dimensionStyles","isFocused","focus","blur","model","split","join","t","fields","Array","value","fill","focusIndex","contentRef","inputRef","current","_isComposing","intersectScope","run","intersectionRef","isIntersecting","v","stop","onInput","isValidNumber","array","slice","target","onCompositionend","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","trim","finalIndex","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","_normalizeClass","onCompositionstart","event","loading","some","input"],"sources":["../../../src/components/VOtpInput/VOtpInput.tsx"],"sourcesContent":["// Styles\nimport './VOtpInput.sass'\n\n// Components\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, effectScope, nextTick, ref, toRef, watch, watchEffect } from 'vue'\nimport { filterInputAttrs, focusChild, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VOtpInputSlots = {\n default: never\n loader: never\n}\n\nexport const makeVOtpInputProps = propsFactory({\n autofocus: Boolean,\n divider: String,\n focusAll: Boolean,\n label: {\n type: String,\n default: '$vuetify.input.otp',\n },\n length: {\n type: [Number, String],\n default: 6,\n },\n modelValue: {\n type: [Number, String],\n default: undefined,\n },\n placeholder: String,\n type: {\n type: String as PropType<'text' | 'password' | 'number'>,\n default: 'number',\n },\n\n ...makeDimensionProps(),\n ...makeFocusProps(),\n ...pick(makeVFieldProps({\n variant: 'outlined' as const,\n }), [\n 'baseColor',\n 'bgColor',\n 'class',\n 'color',\n 'disabled',\n 'error',\n 'loading',\n 'rounded',\n 'style',\n 'theme',\n 'variant',\n ]),\n}, 'VOtpInput')\n\nexport const VOtpInput = genericComponent<VOtpInputSlots>()({\n name: 'VOtpInput',\n\n props: makeVOtpInputProps(),\n\n emits: {\n finish: (val: string) => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { dimensionStyles } = useDimension(props)\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n '',\n val => val == null ? [] : String(val).split(''),\n val => val.join('')\n )\n const { t } = useLocale()\n\n const length = computed(() => Number(props.length))\n const fields = computed(() => Array(length.value).fill(0))\n const focusIndex = ref(-1)\n const contentRef = ref<HTMLElement>()\n const inputRef = ref<HTMLInputElement[]>([])\n const current = computed(() => inputRef.value[focusIndex.value])\n let _isComposing = false\n\n useToggleScope(() => props.autofocus, () => {\n const intersectScope = effectScope()\n intersectScope.run(() => {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n watchEffect(() => {\n intersectionRef.value = inputRef.value[0]\n })\n watch(isIntersecting, v => {\n if (!v) return\n intersectionRef.value?.focus()\n intersectScope.stop()\n })\n })\n })\n\n function onInput () {\n // The maxlength attribute doesn't work for the number type input, so the text type is used.\n // The following logic simulates the behavior of a number input.\n if (isValidNumber(current.value.value)) {\n current.value.value = ''\n return\n }\n\n if (_isComposing) return\n\n const array = model.value.slice()\n const value = current.value.value\n\n array[focusIndex.value] = value\n\n let target: any = null\n\n if (focusIndex.value > model.value.length) {\n target = model.value.length + 1\n } else if (focusIndex.value + 1 !== length.value) {\n target = 'next'\n }\n\n model.value = array\n\n if (target) focusChild(contentRef.value!, target)\n }\n\n function onCompositionend () {\n _isComposing = false\n onInput()\n }\n\n function onKeydown (e: KeyboardEvent) {\n const array = model.value.slice()\n const index = focusIndex.value\n let target: 'next' | 'prev' | 'first' | 'last' | number | null = null\n\n if (![\n 'ArrowLeft',\n 'ArrowRight',\n 'Backspace',\n 'Delete',\n ].includes(e.key)) return\n\n e.preventDefault()\n\n if (e.key === 'ArrowLeft') {\n target = 'prev'\n } else if (e.key === 'ArrowRight') {\n target = 'next'\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n array[focusIndex.value] = ''\n\n model.value = array\n\n if (focusIndex.value > 0 && e.key === 'Backspace') {\n target = 'prev'\n } else {\n requestAnimationFrame(() => {\n inputRef.value[index]?.select()\n })\n }\n }\n\n requestAnimationFrame(() => {\n if (target != null) {\n focusChild(contentRef.value!, target)\n }\n })\n }\n\n function onPaste (index: number, e: ClipboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? ''\n const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n focusIndex.value = finalIndex\n }\n\n function reset () {\n model.value = []\n }\n\n function onFocus (e: FocusEvent, index: number) {\n focus()\n\n focusIndex.value = index\n }\n\n function onBlur () {\n blur()\n\n focusIndex.value = -1\n }\n\n function isValidNumber (value: string) {\n return props.type === 'number' && /[^0-9]/g.test(value)\n }\n\n provideDefaults({\n VField: {\n color: toRef(() => props.color),\n bgColor: toRef(() => props.color),\n baseColor: toRef(() => props.baseColor),\n disabled: toRef(() => props.disabled),\n error: toRef(() => props.error),\n variant: toRef(() => props.variant),\n },\n }, { scoped: true })\n\n watch(model, val => {\n if (val.length === length.value) {\n emit('finish', val.join(''))\n }\n }, { deep: true })\n\n watch(focusIndex, val => {\n if (val < 0) return\n\n nextTick(() => {\n inputRef.value[val]?.select()\n })\n })\n\n useRender(() => {\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n return (\n <div\n class={[\n 'v-otp-input',\n {\n 'v-otp-input--divided': !!props.divider,\n },\n props.class,\n ]}\n style={[\n props.style,\n ]}\n { ...rootAttrs }\n >\n <div\n ref={ contentRef }\n class=\"v-otp-input__content\"\n style={[\n dimensionStyles.value,\n ]}\n >\n { fields.value.map((_, i) => (\n <>\n { props.divider && i !== 0 && (\n <span class=\"v-otp-input__divider\">{ props.divider }</span>\n )}\n\n <VField\n focused={ (isFocused.value && props.focusAll) || focusIndex.value === i }\n key={ i }\n >\n {{\n ...slots,\n loader: undefined,\n default: () => {\n return (\n <input\n ref={ val => inputRef.value[i] = val as HTMLInputElement }\n aria-label={ t(props.label, i + 1) }\n autofocus={ i === 0 && props.autofocus }\n autocomplete=\"one-time-code\"\n class={[\n 'v-otp-input__field',\n ]}\n disabled={ props.disabled }\n inputmode={ props.type === 'number' ? 'numeric' : 'text' }\n min={ props.type === 'number' ? 0 : undefined }\n maxlength={ i === 0 ? length.value : '1' }\n placeholder={ props.placeholder }\n type={ props.type === 'number' ? 'text' : props.type }\n value={ model.value[i] }\n onInput={ onInput }\n onFocus={ e => onFocus(e, i) }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n onCompositionstart={ () => _isComposing = true }\n onCompositionend={ onCompositionend }\n onPaste={ event => onPaste(i, event) }\n />\n )\n },\n }}\n </VField>\n </>\n ))}\n\n <input\n class=\"v-otp-input-input\"\n type=\"hidden\"\n { ...inputAttrs }\n value={ model.value.join('') }\n />\n\n <VOverlay\n contained\n contentClass=\"v-otp-input__loader\"\n modelValue={ !!props.loading }\n persistent\n >\n { slots.loader?.() ?? (\n <VProgressCircular\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n size=\"24\"\n width=\"2\"\n />\n )}\n </VOverlay>\n\n { slots.default?.() }\n </div>\n </div>\n )\n })\n\n return {\n blur: () => {\n inputRef.value?.some(input => input.blur())\n },\n focus: () => {\n inputRef.value?.[0].focus()\n },\n reset,\n isFocused,\n }\n },\n})\n\nexport type VOtpInput = InstanceType<typeof VOtpInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useIntersectionObserver","useLocale","useProxiedModel","useToggleScope","computed","effectScope","nextTick","ref","toRef","watch","watchEffect","filterInputAttrs","focusChild","genericComponent","pick","propsFactory","useRender","makeVOtpInputProps","autofocus","Boolean","divider","String","focusAll","label","type","default","length","Number","modelValue","undefined","placeholder","variant","VOtpInput","name","props","emits","finish","val","setup","_ref","attrs","emit","slots","dimensionStyles","isFocused","focus","blur","model","split","join","t","fields","Array","value","fill","focusIndex","contentRef","inputRef","current","_isComposing","intersectScope","run","intersectionRef","isIntersecting","v","stop","onInput","isValidNumber","array","slice","target","onCompositionend","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","trim","finalIndex","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","rounded","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","_normalizeClass","onCompositionstart","event","loading","some","input"],"sources":["../../../src/components/VOtpInput/VOtpInput.tsx"],"sourcesContent":["// Styles\nimport './VOtpInput.sass'\n\n// Components\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, effectScope, nextTick, ref, toRef, watch, watchEffect } from 'vue'\nimport { filterInputAttrs, focusChild, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VOtpInputSlots = {\n default: never\n loader: never\n}\n\nexport const makeVOtpInputProps = propsFactory({\n autofocus: Boolean,\n divider: String,\n focusAll: Boolean,\n label: {\n type: String,\n default: '$vuetify.input.otp',\n },\n length: {\n type: [Number, String],\n default: 6,\n },\n modelValue: {\n type: [Number, String],\n default: undefined,\n },\n placeholder: String,\n type: {\n type: String as PropType<'text' | 'password' | 'number'>,\n default: 'number',\n },\n\n ...makeDimensionProps(),\n ...makeFocusProps(),\n ...pick(makeVFieldProps({\n variant: 'outlined' as const,\n }), [\n 'baseColor',\n 'bgColor',\n 'class',\n 'color',\n 'disabled',\n 'error',\n 'loading',\n 'rounded',\n 'style',\n 'theme',\n 'variant',\n ]),\n}, 'VOtpInput')\n\nexport const VOtpInput = genericComponent<VOtpInputSlots>()({\n name: 'VOtpInput',\n\n props: makeVOtpInputProps(),\n\n emits: {\n finish: (val: string) => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { dimensionStyles } = useDimension(props)\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n '',\n val => val == null ? [] : String(val).split(''),\n val => val.join('')\n )\n const { t } = useLocale()\n\n const length = computed(() => Number(props.length))\n const fields = computed(() => Array(length.value).fill(0))\n const focusIndex = ref(-1)\n const contentRef = ref<HTMLElement>()\n const inputRef = ref<HTMLInputElement[]>([])\n const current = computed(() => inputRef.value[focusIndex.value])\n let _isComposing = false\n\n useToggleScope(() => props.autofocus, () => {\n const intersectScope = effectScope()\n intersectScope.run(() => {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n watchEffect(() => {\n intersectionRef.value = inputRef.value[0]\n })\n watch(isIntersecting, v => {\n if (!v) return\n intersectionRef.value?.focus()\n intersectScope.stop()\n })\n })\n })\n\n function onInput () {\n // The maxlength attribute doesn't work for the number type input, so the text type is used.\n // The following logic simulates the behavior of a number input.\n if (isValidNumber(current.value.value)) {\n current.value.value = ''\n return\n }\n\n if (_isComposing) return\n\n const array = model.value.slice()\n const value = current.value.value\n\n array[focusIndex.value] = value\n\n let target: any = null\n\n if (focusIndex.value > model.value.length) {\n target = model.value.length + 1\n } else if (focusIndex.value + 1 !== length.value) {\n target = 'next'\n }\n\n model.value = array\n\n if (target) focusChild(contentRef.value!, target)\n }\n\n function onCompositionend () {\n _isComposing = false\n onInput()\n }\n\n function onKeydown (e: KeyboardEvent) {\n const array = model.value.slice()\n const index = focusIndex.value\n let target: 'next' | 'prev' | 'first' | 'last' | number | null = null\n\n if (![\n 'ArrowLeft',\n 'ArrowRight',\n 'Backspace',\n 'Delete',\n ].includes(e.key)) return\n\n e.preventDefault()\n\n if (e.key === 'ArrowLeft') {\n target = 'prev'\n } else if (e.key === 'ArrowRight') {\n target = 'next'\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n array[focusIndex.value] = ''\n\n model.value = array\n\n if (focusIndex.value > 0 && e.key === 'Backspace') {\n target = 'prev'\n } else {\n requestAnimationFrame(() => {\n inputRef.value[index]?.select()\n })\n }\n }\n\n requestAnimationFrame(() => {\n if (target != null) {\n focusChild(contentRef.value!, target)\n }\n })\n }\n\n function onPaste (index: number, e: ClipboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? ''\n const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n focusIndex.value = finalIndex\n }\n\n function reset () {\n model.value = []\n }\n\n function onFocus (e: FocusEvent, index: number) {\n focus()\n\n focusIndex.value = index\n }\n\n function onBlur () {\n blur()\n\n focusIndex.value = -1\n }\n\n function isValidNumber (value: string) {\n return props.type === 'number' && /[^0-9]/g.test(value)\n }\n\n provideDefaults({\n VField: {\n color: toRef(() => props.color),\n bgColor: toRef(() => props.color),\n baseColor: toRef(() => props.baseColor),\n disabled: toRef(() => props.disabled),\n error: toRef(() => props.error),\n variant: toRef(() => props.variant),\n rounded: toRef(() => props.rounded),\n },\n }, { scoped: true })\n\n watch(model, val => {\n if (val.length === length.value) {\n emit('finish', val.join(''))\n }\n }, { deep: true })\n\n watch(focusIndex, val => {\n if (val < 0) return\n\n nextTick(() => {\n inputRef.value[val]?.select()\n })\n })\n\n useRender(() => {\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n return (\n <div\n class={[\n 'v-otp-input',\n {\n 'v-otp-input--divided': !!props.divider,\n },\n props.class,\n ]}\n style={[\n props.style,\n ]}\n { ...rootAttrs }\n >\n <div\n ref={ contentRef }\n class=\"v-otp-input__content\"\n style={[\n dimensionStyles.value,\n ]}\n >\n { fields.value.map((_, i) => (\n <>\n { props.divider && i !== 0 && (\n <span class=\"v-otp-input__divider\">{ props.divider }</span>\n )}\n\n <VField\n focused={ (isFocused.value && props.focusAll) || focusIndex.value === i }\n key={ i }\n >\n {{\n ...slots,\n loader: undefined,\n default: () => {\n return (\n <input\n ref={ val => inputRef.value[i] = val as HTMLInputElement }\n aria-label={ t(props.label, i + 1) }\n autofocus={ i === 0 && props.autofocus }\n autocomplete=\"one-time-code\"\n class={[\n 'v-otp-input__field',\n ]}\n disabled={ props.disabled }\n inputmode={ props.type === 'number' ? 'numeric' : 'text' }\n min={ props.type === 'number' ? 0 : undefined }\n maxlength={ i === 0 ? length.value : '1' }\n placeholder={ props.placeholder }\n type={ props.type === 'number' ? 'text' : props.type }\n value={ model.value[i] }\n onInput={ onInput }\n onFocus={ e => onFocus(e, i) }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n onCompositionstart={ () => _isComposing = true }\n onCompositionend={ onCompositionend }\n onPaste={ event => onPaste(i, event) }\n />\n )\n },\n }}\n </VField>\n </>\n ))}\n\n <input\n class=\"v-otp-input-input\"\n type=\"hidden\"\n { ...inputAttrs }\n value={ model.value.join('') }\n />\n\n <VOverlay\n contained\n contentClass=\"v-otp-input__loader\"\n modelValue={ !!props.loading }\n persistent\n >\n { slots.loader?.() ?? (\n <VProgressCircular\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n size=\"24\"\n width=\"2\"\n />\n )}\n </VOverlay>\n\n { slots.default?.() }\n </div>\n </div>\n )\n })\n\n return {\n blur: () => {\n inputRef.value?.some(input => input.blur())\n },\n focus: () => {\n inputRef.value?.[0].focus()\n },\n reset,\n isFocused,\n }\n },\n})\n\nexport type VOtpInput = InstanceType<typeof VOtpInput>\n"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,11 @@
15
15
  .v-field
16
16
  height: 100%
17
17
 
18
+ .v-field__outline
19
+ &__start,
20
+ &__end
21
+ flex: 1
22
+
18
23
  .v-otp-input__divider
19
24
  margin: $otp-input-divider-margin
20
25
 
@@ -209,9 +209,9 @@ export const VWindow = genericComponent()({
209
209
  'v-window--vertical-arrows': !!props.verticalArrows,
210
210
  'v-window--crossfade': !!props.crossfade
211
211
  }, themeClasses.value, props.class]),
212
- "style": _normalizeStyle([props.style, props.transitionDuration && !PREFERS_REDUCED_MOTION ? {
213
- '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms')
214
- } : undefined])
212
+ "style": _normalizeStyle([props.style, {
213
+ '--v-window-transition-duration': !PREFERS_REDUCED_MOTION() ? convertToUnit(props.transitionDuration, 'ms') : null
214
+ }])
215
215
  }, {
216
216
  default: () => [_createElementVNode("div", {
217
217
  "class": "v-window__container",
@@ -1 +1 @@
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","left","top","scrollLeft","scrollTop","itemsLength","length","lastIndex","currentScrollY","scrollTo","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 = { left: 0, top: 0 }\n\n if (IN_BROWSER && oldVal >= 0) {\n scrollableParent = getScrollParent(rootRef.value)\n\n savedScrollPosition.left = scrollableParent?.scrollLeft\n savedScrollPosition.top = 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 = false\n } else if (newVal === 0 && oldVal === lastIndex) {\n isReversed.value = true\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.top) {\n scrollableParent.scrollTo({ ...savedScrollPosition, behavior: 'instant' })\n }\n\n requestAnimationFrame(() => {\n if (!scrollableParent) return\n\n const rafScrollY = scrollableParent.scrollTop\n\n if (rafScrollY !== savedScrollPosition.top) {\n scrollableParent.scrollTo({ ...savedScrollPosition, 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":[]}
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","left","top","scrollLeft","scrollTop","itemsLength","length","lastIndex","currentScrollY","scrollTo","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 = { left: 0, top: 0 }\n\n if (IN_BROWSER && oldVal >= 0) {\n scrollableParent = getScrollParent(rootRef.value)\n\n savedScrollPosition.left = scrollableParent?.scrollLeft\n savedScrollPosition.top = 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 = false\n } else if (newVal === 0 && oldVal === lastIndex) {\n isReversed.value = true\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.top) {\n scrollableParent.scrollTo({ ...savedScrollPosition, behavior: 'instant' })\n }\n\n requestAnimationFrame(() => {\n if (!scrollableParent) return\n\n const rafScrollY = scrollableParent.scrollTop\n\n if (rafScrollY !== savedScrollPosition.top) {\n scrollableParent.scrollTo({ ...savedScrollPosition, 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 {\n '--v-window-transition-duration': !PREFERS_REDUCED_MOTION()\n ? convertToUnit(props.transitionDuration, 'ms')\n : null,\n },\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":[]}
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.11.2-dev.2025-12-03";
19
+ export const version = "3.11.2-dev.2025-12-05";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.js";
@@ -2782,39 +2782,45 @@ declare module 'vue' {
2782
2782
  VAlert: typeof import('vuetify/components')['VAlert']
2783
2783
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
2784
2784
  VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
2785
- VAvatar: typeof import('vuetify/components')['VAvatar']
2786
2785
  VBadge: typeof import('vuetify/components')['VBadge']
2787
2786
  VBanner: typeof import('vuetify/components')['VBanner']
2788
2787
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
2789
2788
  VBannerText: typeof import('vuetify/components')['VBannerText']
2790
- VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2791
- VBtn: typeof import('vuetify/components')['VBtn']
2792
2789
  VAppBar: typeof import('vuetify/components')['VAppBar']
2793
2790
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
2794
2791
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
2792
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2793
+ VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2794
+ VAvatar: typeof import('vuetify/components')['VAvatar']
2795
+ VBtn: typeof import('vuetify/components')['VBtn']
2795
2796
  VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
2797
+ VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
2796
2798
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
2797
2799
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
2798
2800
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
2801
+ VCalendar: typeof import('vuetify/components')['VCalendar']
2802
+ VCarousel: typeof import('vuetify/components')['VCarousel']
2803
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
2799
2804
  VCard: typeof import('vuetify/components')['VCard']
2800
2805
  VCardActions: typeof import('vuetify/components')['VCardActions']
2801
2806
  VCardItem: typeof import('vuetify/components')['VCardItem']
2802
2807
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
2803
2808
  VCardText: typeof import('vuetify/components')['VCardText']
2804
2809
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
2805
- VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
2806
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2810
+ VChip: typeof import('vuetify/components')['VChip']
2807
2811
  VCheckbox: typeof import('vuetify/components')['VCheckbox']
2808
2812
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
2809
- VCalendar: typeof import('vuetify/components')['VCalendar']
2813
+ VCombobox: typeof import('vuetify/components')['VCombobox']
2814
+ VCode: typeof import('vuetify/components')['VCode']
2810
2815
  VChipGroup: typeof import('vuetify/components')['VChipGroup']
2811
- VCarousel: typeof import('vuetify/components')['VCarousel']
2812
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
2813
- VChip: typeof import('vuetify/components')['VChip']
2814
2816
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
2817
+ VDatePicker: typeof import('vuetify/components')['VDatePicker']
2818
+ VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
2819
+ VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
2820
+ VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
2821
+ VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
2822
+ VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
2815
2823
  VCounter: typeof import('vuetify/components')['VCounter']
2816
- VCode: typeof import('vuetify/components')['VCode']
2817
- VCombobox: typeof import('vuetify/components')['VCombobox']
2818
2824
  VDataTable: typeof import('vuetify/components')['VDataTable']
2819
2825
  VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
2820
2826
  VDataTableFooter: typeof import('vuetify/components')['VDataTableFooter']
@@ -2823,36 +2829,27 @@ declare module 'vue' {
2823
2829
  VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
2824
2830
  VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
2825
2831
  VDialog: typeof import('vuetify/components')['VDialog']
2826
- VDatePicker: typeof import('vuetify/components')['VDatePicker']
2827
- VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
2828
- VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
2829
- VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
2830
- VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
2831
- VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
2832
- VEmptyState: typeof import('vuetify/components')['VEmptyState']
2833
2832
  VDivider: typeof import('vuetify/components')['VDivider']
2834
- VField: typeof import('vuetify/components')['VField']
2835
- VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
2833
+ VFab: typeof import('vuetify/components')['VFab']
2836
2834
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
2837
2835
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
2838
2836
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
2839
2837
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
2840
- VFileInput: typeof import('vuetify/components')['VFileInput']
2841
- VFab: typeof import('vuetify/components')['VFab']
2838
+ VEmptyState: typeof import('vuetify/components')['VEmptyState']
2842
2839
  VFooter: typeof import('vuetify/components')['VFooter']
2840
+ VFileInput: typeof import('vuetify/components')['VFileInput']
2841
+ VField: typeof import('vuetify/components')['VField']
2842
+ VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
2843
+ VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
2844
+ VHotkey: typeof import('vuetify/components')['VHotkey']
2843
2845
  VIcon: typeof import('vuetify/components')['VIcon']
2844
2846
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
2845
2847
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
2846
2848
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
2847
2849
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
2848
- VHotkey: typeof import('vuetify/components')['VHotkey']
2850
+ VKbd: typeof import('vuetify/components')['VKbd']
2849
2851
  VImg: typeof import('vuetify/components')['VImg']
2850
2852
  VInput: typeof import('vuetify/components')['VInput']
2851
- VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
2852
- VItemGroup: typeof import('vuetify/components')['VItemGroup']
2853
- VItem: typeof import('vuetify/components')['VItem']
2854
- VKbd: typeof import('vuetify/components')['VKbd']
2855
- VLabel: typeof import('vuetify/components')['VLabel']
2856
2853
  VList: typeof import('vuetify/components')['VList']
2857
2854
  VListGroup: typeof import('vuetify/components')['VListGroup']
2858
2855
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -2862,77 +2859,81 @@ declare module 'vue' {
2862
2859
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
2863
2860
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
2864
2861
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
2862
+ VItemGroup: typeof import('vuetify/components')['VItemGroup']
2863
+ VItem: typeof import('vuetify/components')['VItem']
2865
2864
  VMenu: typeof import('vuetify/components')['VMenu']
2866
- VMain: typeof import('vuetify/components')['VMain']
2867
- VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
2865
+ VLabel: typeof import('vuetify/components')['VLabel']
2868
2866
  VMessages: typeof import('vuetify/components')['VMessages']
2867
+ VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
2868
+ VMain: typeof import('vuetify/components')['VMain']
2869
+ VNumberInput: typeof import('vuetify/components')['VNumberInput']
2869
2870
  VOverlay: typeof import('vuetify/components')['VOverlay']
2870
2871
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
2871
2872
  VPagination: typeof import('vuetify/components')['VPagination']
2872
- VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
2873
+ VRating: typeof import('vuetify/components')['VRating']
2873
2874
  VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
2874
- VNumberInput: typeof import('vuetify/components')['VNumberInput']
2875
+ VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
2875
2876
  VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
2876
2877
  VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
2877
2878
  VSelect: typeof import('vuetify/components')['VSelect']
2878
- VRating: typeof import('vuetify/components')['VRating']
2879
- VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
2879
+ VSheet: typeof import('vuetify/components')['VSheet']
2880
2880
  VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
2881
- VSlider: typeof import('vuetify/components')['VSlider']
2882
2881
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
2883
2882
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
2884
- VStepper: typeof import('vuetify/components')['VStepper']
2885
- VStepperActions: typeof import('vuetify/components')['VStepperActions']
2886
- VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
2887
- VStepperItem: typeof import('vuetify/components')['VStepperItem']
2888
- VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
2889
- VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
2890
- VSheet: typeof import('vuetify/components')['VSheet']
2883
+ VTable: typeof import('vuetify/components')['VTable']
2884
+ VSlider: typeof import('vuetify/components')['VSlider']
2891
2885
  VSnackbar: typeof import('vuetify/components')['VSnackbar']
2886
+ VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
2887
+ VSwitch: typeof import('vuetify/components')['VSwitch']
2888
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
2889
+ VTextarea: typeof import('vuetify/components')['VTextarea']
2892
2890
  VTab: typeof import('vuetify/components')['VTab']
2893
2891
  VTabs: typeof import('vuetify/components')['VTabs']
2894
2892
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
2895
2893
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
2896
- VSwitch: typeof import('vuetify/components')['VSwitch']
2897
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
2898
- VTable: typeof import('vuetify/components')['VTable']
2899
- VTextarea: typeof import('vuetify/components')['VTextarea']
2900
- VWindow: typeof import('vuetify/components')['VWindow']
2901
- VWindowItem: typeof import('vuetify/components')['VWindowItem']
2902
- VTimeline: typeof import('vuetify/components')['VTimeline']
2903
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2904
- VTextField: typeof import('vuetify/components')['VTextField']
2894
+ VToolbar: typeof import('vuetify/components')['VToolbar']
2895
+ VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
2896
+ VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
2905
2897
  VTooltip: typeof import('vuetify/components')['VTooltip']
2898
+ VTextField: typeof import('vuetify/components')['VTextField']
2899
+ VStepper: typeof import('vuetify/components')['VStepper']
2900
+ VStepperActions: typeof import('vuetify/components')['VStepperActions']
2901
+ VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
2902
+ VStepperItem: typeof import('vuetify/components')['VStepperItem']
2903
+ VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
2904
+ VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
2906
2905
  VTimePicker: typeof import('vuetify/components')['VTimePicker']
2907
2906
  VTimePickerClock: typeof import('vuetify/components')['VTimePickerClock']
2908
2907
  VTimePickerControls: typeof import('vuetify/components')['VTimePickerControls']
2909
2908
  VTreeview: typeof import('vuetify/components')['VTreeview']
2910
2909
  VTreeviewItem: typeof import('vuetify/components')['VTreeviewItem']
2911
2910
  VTreeviewGroup: typeof import('vuetify/components')['VTreeviewGroup']
2912
- VToolbar: typeof import('vuetify/components')['VToolbar']
2913
- VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
2914
- VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
2911
+ VWindow: typeof import('vuetify/components')['VWindow']
2912
+ VWindowItem: typeof import('vuetify/components')['VWindowItem']
2913
+ VTimeline: typeof import('vuetify/components')['VTimeline']
2914
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2915
2915
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
2916
2916
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
2917
2917
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
2918
- VHover: typeof import('vuetify/components')['VHover']
2919
2918
  VContainer: typeof import('vuetify/components')['VContainer']
2920
2919
  VCol: typeof import('vuetify/components')['VCol']
2921
2920
  VRow: typeof import('vuetify/components')['VRow']
2922
2921
  VSpacer: typeof import('vuetify/components')['VSpacer']
2923
2922
  VForm: typeof import('vuetify/components')['VForm']
2924
- VLazy: typeof import('vuetify/components')['VLazy']
2923
+ VHover: typeof import('vuetify/components')['VHover']
2925
2924
  VLayout: typeof import('vuetify/components')['VLayout']
2926
2925
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
2927
2926
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
2927
+ VLazy: typeof import('vuetify/components')['VLazy']
2928
2928
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
2929
2929
  VParallax: typeof import('vuetify/components')['VParallax']
2930
2930
  VRadio: typeof import('vuetify/components')['VRadio']
2931
- VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
2932
2931
  VResponsive: typeof import('vuetify/components')['VResponsive']
2933
2932
  VSnackbarQueue: typeof import('vuetify/components')['VSnackbarQueue']
2934
- VSparkline: typeof import('vuetify/components')['VSparkline']
2933
+ VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
2935
2934
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
2935
+ VSparkline: typeof import('vuetify/components')['VSparkline']
2936
+ VValidation: typeof import('vuetify/components')['VValidation']
2936
2937
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
2937
2938
  VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
2938
2939
  VFabTransition: typeof import('vuetify/components')['VFabTransition']
@@ -2951,12 +2952,10 @@ declare module 'vue' {
2951
2952
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
2952
2953
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
2953
2954
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
2954
- VValidation: typeof import('vuetify/components')['VValidation']
2955
- VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2956
2955
  VColorInput: typeof import('vuetify/labs/components')['VColorInput']
2957
- VPie: typeof import('vuetify/labs/components')['VPie']
2958
- VPieSegment: typeof import('vuetify/labs/components')['VPieSegment']
2959
- VPieTooltip: typeof import('vuetify/labs/components')['VPieTooltip']
2956
+ VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
2957
+ VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
2958
+ VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2960
2959
  VPicker: typeof import('vuetify/labs/components')['VPicker']
2961
2960
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
2962
2961
  VVideo: typeof import('vuetify/labs/components')['VVideo']
@@ -2965,8 +2964,9 @@ declare module 'vue' {
2965
2964
  VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
2966
2965
  VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
2967
2966
  VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
2968
- VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
2969
- VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
2967
+ VPie: typeof import('vuetify/labs/components')['VPie']
2968
+ VPieSegment: typeof import('vuetify/labs/components')['VPieSegment']
2969
+ VPieTooltip: typeof import('vuetify/labs/components')['VPieTooltip']
2970
2970
  VDateInput: typeof import('vuetify/labs/components')['VDateInput']
2971
2971
  VMaskInput: typeof import('vuetify/labs/components')['VMaskInput']
2972
2972
  VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
package/lib/framework.js CHANGED
@@ -110,7 +110,7 @@ export function createVuetify() {
110
110
  };
111
111
  });
112
112
  }
113
- export const version = "3.11.2-dev.2025-12-03";
113
+ export const version = "3.11.2-dev.2025-12-05";
114
114
  createVuetify.version = version;
115
115
 
116
116
  // Vue's inject() can only be used in setup
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vuetify/nightly",
3
3
  "description": "Vue Material Component Framework",
4
- "version": "3.11.2-dev.2025-12-03",
4
+ "version": "3.11.2-dev.2025-12-05",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"
@@ -115,12 +115,14 @@
115
115
  "build:types:lib": "tsgo --pretty --emitDeclarationOnly -p tsconfig.dist.json && node build/transform-types.js",
116
116
  "build:types:bundle": "rollup --config build/rollup.types.config.js",
117
117
  "tsc": "tsc",
118
+ "tdd": "vizzly tdd start",
119
+ "tdd:stop": "vizzly tdd stop",
118
120
  "test": "vitest",
119
121
  "test:unit": "vitest --project unit",
120
122
  "test:browser": "vitest --project browser",
121
123
  "test:open": "TEST_BAIL=1 vitest --project browser -w",
122
124
  "test:coverage": "pnpm test --coverage",
123
- "test:percy": "percy exec -- vitest --project browser",
125
+ "test:screen": "TEST_TDD_ONLY=1 node ../../scripts/tdd-run.js ",
124
126
  "test:all": "concurrently -gr 'vitest --project unit' 'vitest --project browser --shard=1/5' 'vitest --project browser --shard=2/5' 'vitest --project browser --shard=3/5' 'vitest --project browser --shard=4/5' 'vitest --project browser --shard=5/5'",
125
127
  "lint": "concurrently -n \"tsc,eslint\" --kill-others-on-fail \"tsgo -p tsconfig.checks.json --noEmit --pretty\" \"eslint src -f codeframe --max-warnings 0\"",
126
128
  "lint:fix": "concurrently -n \"tsc,eslint\" \"tsgo -p tsconfig.checks.json --noEmit --pretty\" \"eslint --fix src\""
@@ -135,8 +137,6 @@
135
137
  "@fortawesome/free-solid-svg-icons": "^6.7.2",
136
138
  "@fortawesome/vue-fontawesome": "^3.0.8",
137
139
  "@intlify/devtools-types": "^11.1.12",
138
- "@percy/cli": "^1.31.4",
139
- "@percy/sdk-utils": "^1.31.4",
140
140
  "@rollup/plugin-alias": "^5.1.1",
141
141
  "@rollup/plugin-babel": "^6.1.0",
142
142
  "@rollup/plugin-node-resolve": "^16.0.3",
@@ -149,6 +149,8 @@
149
149
  "@vitest/browser-playwright": "^4.0.13",
150
150
  "@vitest/coverage-istanbul": "^4.0.13",
151
151
  "@vitest/ui": "^4.0.13",
152
+ "@vizzly-testing/cli": "^0.16.4",
153
+ "@vizzly-testing/vitest": "^0.0.3",
152
154
  "@vue/reactivity": "^3.5.25",
153
155
  "@vue/shared": "^3.5.25",
154
156
  "@vue/test-utils": "^2.4.6",