@vuetify/nightly 3.10.9-dev.2025-11-06 → 3.10.9-dev.2025-11-08

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.
@@ -19,6 +19,7 @@
19
19
  }
20
20
 
21
21
  .v-infinite-scroll-intersect {
22
+ overflow: hidden;
22
23
  pointer-events: none;
23
24
  margin-top: var(--v-infinite-margin);
24
25
  margin-bottom: calc(var(--v-infinite-margin) * -1);
@@ -35,4 +36,10 @@
35
36
  display: flex;
36
37
  justify-content: center;
37
38
  padding: 8px;
39
+ transition-property: padding;
40
+ transition-duration: 0.3s;
41
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
42
+ }
43
+ .v-infinite-scroll__side:empty, .v-infinite-scroll__side:has(> div:only-child:empty) {
44
+ padding: 0;
38
45
  }
@@ -243,7 +243,9 @@ export const VInfiniteScroll = genericComponent()({
243
243
  const effectiveSide = side ?? props.side;
244
244
  setStatus(effectiveSide, 'ok');
245
245
  nextTick(() => {
246
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
246
+ if (effectiveSide !== 'end') {
247
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
248
+ }
247
249
  if (props.mode !== 'manual') {
248
250
  nextTick(() => {
249
251
  // See #17475
@@ -1 +1 @@
1
- {"version":3,"file":"VInfiniteScroll.js","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","shallowRef","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootMargin","emits","intersect","isIntersecting","setup","_ref","emit","intersectionRef","val","_createElementVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","_isIntersecting","intersecting","done","window","requestAnimationFrame","t","renderSide","onClick","slotProps","error","empty","loading","_createVNode","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode","_normalizeClass","_normalizeStyle","reset","effectiveSide"],"sources":["../../../src/components/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watch(isIntersecting, async val => {\n emit('intersect', props.side, val)\n })\n\n useRender(() => (\n <div\n class=\"v-infinite-scroll-intersect\"\n style={{\n '--v-infinite-margin-size': props.rootMargin,\n }}\n ref={ intersectionRef }\n >&nbsp;</div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = shallowRef<InfiniteScrollStatus>('ok')\n const endStatus = shallowRef<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n const isIntersecting = shallowRef(false)\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n } else if (side === 'both') {\n startStatus.value = status\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting\n if (isIntersecting.value) {\n intersecting(side)\n }\n }\n\n function intersecting (side: InfiniteScrollSide) {\n if (props.mode !== 'manual' && !isIntersecting.value) return\n\n const status = getStatus(side)\n if (!rootEl.value || ['empty', 'loading'].includes(status)) return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'empty' || status === 'error') return\n\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // Browser takes 2 - 3 animation frames to trigger IntersectionObserver after\n // VInfiniteScrollIntersect leaves the viewpoint. So far I couldn't come up\n // with a better solution than using 3 nested window.requestAnimationFrame. (#17475)\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side)\n })\n })\n })\n })\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => intersecting(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n\n function reset (side?: InfiniteScrollSide) {\n const effectiveSide = side ?? props.side\n setStatus(effectiveSide, 'ok')\n\n nextTick(() => {\n setScrollAmount(\n getScrollSize() - previousScrollSize + getScrollAmount(),\n )\n if (props.mode !== 'manual') {\n nextTick(() => {\n // See #17475\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n if (effectiveSide === 'both') {\n intersecting('start')\n intersecting('end')\n } else {\n intersecting(effectiveSide)\n }\n })\n })\n })\n })\n }\n })\n }\n\n return { reset }\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VInfiniteScroll.js","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","shallowRef","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootMargin","emits","intersect","isIntersecting","setup","_ref","emit","intersectionRef","val","_createElementVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","_isIntersecting","intersecting","done","window","requestAnimationFrame","t","renderSide","onClick","slotProps","error","empty","loading","_createVNode","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode","_normalizeClass","_normalizeStyle","reset","effectiveSide"],"sources":["../../../src/components/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watch(isIntersecting, async val => {\n emit('intersect', props.side, val)\n })\n\n useRender(() => (\n <div\n class=\"v-infinite-scroll-intersect\"\n style={{\n '--v-infinite-margin-size': props.rootMargin,\n }}\n ref={ intersectionRef }\n >&nbsp;</div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = shallowRef<InfiniteScrollStatus>('ok')\n const endStatus = shallowRef<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n const isIntersecting = shallowRef(false)\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n } else if (side === 'both') {\n startStatus.value = status\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting\n if (isIntersecting.value) {\n intersecting(side)\n }\n }\n\n function intersecting (side: InfiniteScrollSide) {\n if (props.mode !== 'manual' && !isIntersecting.value) return\n\n const status = getStatus(side)\n if (!rootEl.value || ['empty', 'loading'].includes(status)) return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'empty' || status === 'error') return\n\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // Browser takes 2 - 3 animation frames to trigger IntersectionObserver after\n // VInfiniteScrollIntersect leaves the viewpoint. So far I couldn't come up\n // with a better solution than using 3 nested window.requestAnimationFrame. (#17475)\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side)\n })\n })\n })\n })\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => intersecting(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n\n function reset (side?: InfiniteScrollSide) {\n const effectiveSide = side ?? props.side\n setStatus(effectiveSide, 'ok')\n\n nextTick(() => {\n if (effectiveSide !== 'end') {\n setScrollAmount(\n getScrollSize() - previousScrollSize + getScrollAmount(),\n )\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // See #17475\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n if (effectiveSide === 'both') {\n intersecting('start')\n intersecting('end')\n } else {\n intersecting(effectiveSide)\n }\n })\n })\n })\n })\n }\n })\n }\n\n return { reset }\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ @use '../../styles/settings'
1
2
  @use '../../styles/tools'
2
3
  @use './variables' as *
3
4
 
@@ -21,9 +22,11 @@
21
22
  width: 100%
22
23
 
23
24
  .v-infinite-scroll-intersect
25
+ overflow: hidden
24
26
  pointer-events: none
25
27
  margin-top: var(--v-infinite-margin)
26
28
  margin-bottom: calc(var(--v-infinite-margin) * -1)
29
+
27
30
  &:nth-child(2) // TODO: "1 of &" would be more stable if structure changes
28
31
  --v-infinite-margin: var(--v-infinite-margin-size, 1px)
29
32
  &:nth-last-child(2)
@@ -34,3 +37,10 @@
34
37
  display: flex
35
38
  justify-content: center
36
39
  padding: $infinite-scroll-side-padding
40
+ transition-property: padding
41
+ transition-duration: settings.$transition-duration-root
42
+ transition-timing-function: settings.$standard-easing
43
+
44
+ &:empty,
45
+ &:has(> div:only-child:empty)
46
+ padding: 0
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.10.9-dev.2025-11-06";
19
+ export const version = "3.10.9-dev.2025-11-08";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.js";
@@ -2741,41 +2741,42 @@ declare module 'vue' {
2741
2741
  $children?: VNodeChild
2742
2742
  }
2743
2743
  export interface GlobalComponents {
2744
- VApp: typeof import('vuetify/components')['VApp']
2745
- VAvatar: typeof import('vuetify/components')['VAvatar']
2746
2744
  VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
2747
- VBadge: typeof import('vuetify/components')['VBadge']
2745
+ VApp: typeof import('vuetify/components')['VApp']
2748
2746
  VAppBar: typeof import('vuetify/components')['VAppBar']
2749
2747
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
2750
2748
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
2749
+ VBadge: typeof import('vuetify/components')['VBadge']
2751
2750
  VAlert: typeof import('vuetify/components')['VAlert']
2752
2751
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
2752
+ VAvatar: typeof import('vuetify/components')['VAvatar']
2753
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
2753
2754
  VBanner: typeof import('vuetify/components')['VBanner']
2754
2755
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
2755
2756
  VBannerText: typeof import('vuetify/components')['VBannerText']
2756
- VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2757
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2757
2758
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
2758
2759
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
2759
2760
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
2760
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
2761
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2762
2761
  VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
2763
- VBtn: typeof import('vuetify/components')['VBtn']
2764
- VCheckbox: typeof import('vuetify/components')['VCheckbox']
2765
- VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
2766
2762
  VCard: typeof import('vuetify/components')['VCard']
2767
2763
  VCardActions: typeof import('vuetify/components')['VCardActions']
2768
2764
  VCardItem: typeof import('vuetify/components')['VCardItem']
2769
2765
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
2770
2766
  VCardText: typeof import('vuetify/components')['VCardText']
2771
2767
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
2768
+ VBtn: typeof import('vuetify/components')['VBtn']
2769
+ VChip: typeof import('vuetify/components')['VChip']
2770
+ VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2771
+ VCheckbox: typeof import('vuetify/components')['VCheckbox']
2772
+ VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
2772
2773
  VCarousel: typeof import('vuetify/components')['VCarousel']
2773
2774
  VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
2774
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
2775
- VChip: typeof import('vuetify/components')['VChip']
2776
- VCombobox: typeof import('vuetify/components')['VCombobox']
2777
2775
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
2778
2776
  VCode: typeof import('vuetify/components')['VCode']
2777
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
2778
+ VCombobox: typeof import('vuetify/components')['VCombobox']
2779
+ VFab: typeof import('vuetify/components')['VFab']
2779
2780
  VCounter: typeof import('vuetify/components')['VCounter']
2780
2781
  VDatePicker: typeof import('vuetify/components')['VDatePicker']
2781
2782
  VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
@@ -2790,31 +2791,30 @@ declare module 'vue' {
2790
2791
  VDataTableRow: typeof import('vuetify/components')['VDataTableRow']
2791
2792
  VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
2792
2793
  VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
2794
+ VEmptyState: typeof import('vuetify/components')['VEmptyState']
2793
2795
  VDivider: typeof import('vuetify/components')['VDivider']
2794
2796
  VField: typeof import('vuetify/components')['VField']
2795
2797
  VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
2798
+ VDialog: typeof import('vuetify/components')['VDialog']
2799
+ VFileInput: typeof import('vuetify/components')['VFileInput']
2796
2800
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
2797
2801
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
2798
2802
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
2799
2803
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
2800
- VDialog: typeof import('vuetify/components')['VDialog']
2801
- VFileInput: typeof import('vuetify/components')['VFileInput']
2802
- VEmptyState: typeof import('vuetify/components')['VEmptyState']
2803
2804
  VFooter: typeof import('vuetify/components')['VFooter']
2805
+ VImg: typeof import('vuetify/components')['VImg']
2806
+ VItemGroup: typeof import('vuetify/components')['VItemGroup']
2807
+ VItem: typeof import('vuetify/components')['VItem']
2804
2808
  VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
2805
- VFab: typeof import('vuetify/components')['VFab']
2806
2809
  VIcon: typeof import('vuetify/components')['VIcon']
2807
2810
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
2808
2811
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
2809
2812
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
2810
2813
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
2811
- VLabel: typeof import('vuetify/components')['VLabel']
2812
- VImg: typeof import('vuetify/components')['VImg']
2813
- VKbd: typeof import('vuetify/components')['VKbd']
2814
- VItemGroup: typeof import('vuetify/components')['VItemGroup']
2815
- VItem: typeof import('vuetify/components')['VItem']
2816
2814
  VInput: typeof import('vuetify/components')['VInput']
2815
+ VLabel: typeof import('vuetify/components')['VLabel']
2817
2816
  VMain: typeof import('vuetify/components')['VMain']
2817
+ VKbd: typeof import('vuetify/components')['VKbd']
2818
2818
  VList: typeof import('vuetify/components')['VList']
2819
2819
  VListGroup: typeof import('vuetify/components')['VListGroup']
2820
2820
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -2824,64 +2824,64 @@ declare module 'vue' {
2824
2824
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
2825
2825
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
2826
2826
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
2827
- VMenu: typeof import('vuetify/components')['VMenu']
2828
2827
  VMessages: typeof import('vuetify/components')['VMessages']
2828
+ VMenu: typeof import('vuetify/components')['VMenu']
2829
2829
  VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
2830
- VNumberInput: typeof import('vuetify/components')['VNumberInput']
2831
2830
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
2831
+ VNumberInput: typeof import('vuetify/components')['VNumberInput']
2832
2832
  VPagination: typeof import('vuetify/components')['VPagination']
2833
- VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
2834
2833
  VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
2834
+ VOverlay: typeof import('vuetify/components')['VOverlay']
2835
+ VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
2835
2836
  VRating: typeof import('vuetify/components')['VRating']
2836
2837
  VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
2837
- VOverlay: typeof import('vuetify/components')['VOverlay']
2838
+ VSheet: typeof import('vuetify/components')['VSheet']
2839
+ VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
2838
2840
  VSelect: typeof import('vuetify/components')['VSelect']
2839
2841
  VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
2840
- VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
2841
- VSheet: typeof import('vuetify/components')['VSheet']
2842
+ VSlider: typeof import('vuetify/components')['VSlider']
2842
2843
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
2843
2844
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
2844
2845
  VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
2846
+ VSnackbar: typeof import('vuetify/components')['VSnackbar']
2847
+ VTab: typeof import('vuetify/components')['VTab']
2848
+ VTabs: typeof import('vuetify/components')['VTabs']
2849
+ VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
2850
+ VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
2845
2851
  VStepper: typeof import('vuetify/components')['VStepper']
2846
2852
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
2847
2853
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
2848
2854
  VStepperItem: typeof import('vuetify/components')['VStepperItem']
2849
2855
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
2850
2856
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
2851
- VSnackbar: typeof import('vuetify/components')['VSnackbar']
2852
- VSlider: typeof import('vuetify/components')['VSlider']
2853
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
2854
2857
  VSwitch: typeof import('vuetify/components')['VSwitch']
2855
- VTextarea: typeof import('vuetify/components')['VTextarea']
2856
- VTab: typeof import('vuetify/components')['VTab']
2857
- VTabs: typeof import('vuetify/components')['VTabs']
2858
- VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
2859
- VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
2860
- VTable: typeof import('vuetify/components')['VTable']
2861
- VTextField: typeof import('vuetify/components')['VTextField']
2858
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
2862
2859
  VTimePicker: typeof import('vuetify/components')['VTimePicker']
2863
2860
  VTimePickerClock: typeof import('vuetify/components')['VTimePickerClock']
2864
2861
  VTimePickerControls: typeof import('vuetify/components')['VTimePickerControls']
2865
- VTimeline: typeof import('vuetify/components')['VTimeline']
2866
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2862
+ VTable: typeof import('vuetify/components')['VTable']
2863
+ VTextarea: typeof import('vuetify/components')['VTextarea']
2864
+ VTextField: typeof import('vuetify/components')['VTextField']
2867
2865
  VTooltip: typeof import('vuetify/components')['VTooltip']
2868
- VTreeview: typeof import('vuetify/components')['VTreeview']
2869
- VTreeviewItem: typeof import('vuetify/components')['VTreeviewItem']
2870
- VTreeviewGroup: typeof import('vuetify/components')['VTreeviewGroup']
2871
2866
  VWindow: typeof import('vuetify/components')['VWindow']
2872
2867
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
2868
+ VTimeline: typeof import('vuetify/components')['VTimeline']
2869
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2873
2870
  VToolbar: typeof import('vuetify/components')['VToolbar']
2874
2871
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
2875
2872
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
2873
+ VTreeview: typeof import('vuetify/components')['VTreeview']
2874
+ VTreeviewItem: typeof import('vuetify/components')['VTreeviewItem']
2875
+ VTreeviewGroup: typeof import('vuetify/components')['VTreeviewGroup']
2876
2876
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
2877
- VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
2878
2877
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
2878
+ VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
2879
2879
  VForm: typeof import('vuetify/components')['VForm']
2880
- VHover: typeof import('vuetify/components')['VHover']
2881
2880
  VContainer: typeof import('vuetify/components')['VContainer']
2882
2881
  VCol: typeof import('vuetify/components')['VCol']
2883
2882
  VRow: typeof import('vuetify/components')['VRow']
2884
2883
  VSpacer: typeof import('vuetify/components')['VSpacer']
2884
+ VHover: typeof import('vuetify/components')['VHover']
2885
2885
  VLayout: typeof import('vuetify/components')['VLayout']
2886
2886
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
2887
2887
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
@@ -2889,13 +2889,12 @@ declare module 'vue' {
2889
2889
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
2890
2890
  VParallax: typeof import('vuetify/components')['VParallax']
2891
2891
  VRadio: typeof import('vuetify/components')['VRadio']
2892
- VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
2893
2892
  VResponsive: typeof import('vuetify/components')['VResponsive']
2894
2893
  VSnackbarQueue: typeof import('vuetify/components')['VSnackbarQueue']
2894
+ VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
2895
2895
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
2896
2896
  VSparkline: typeof import('vuetify/components')['VSparkline']
2897
2897
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
2898
- VValidation: typeof import('vuetify/components')['VValidation']
2899
2898
  VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
2900
2899
  VFabTransition: typeof import('vuetify/components')['VFabTransition']
2901
2900
  VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
@@ -2913,23 +2912,24 @@ declare module 'vue' {
2913
2912
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
2914
2913
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
2915
2914
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
2915
+ VValidation: typeof import('vuetify/components')['VValidation']
2916
+ VColorInput: typeof import('vuetify/labs/components')['VColorInput']
2916
2917
  VCalendar: typeof import('vuetify/labs/components')['VCalendar']
2917
2918
  VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
2918
2919
  VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
2919
- VColorInput: typeof import('vuetify/labs/components')['VColorInput']
2920
+ VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2921
+ VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
2922
+ VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
2923
+ VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
2920
2924
  VPicker: typeof import('vuetify/labs/components')['VPicker']
2921
2925
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
2922
- VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2926
+ VHotkey: typeof import('vuetify/labs/components')['VHotkey']
2923
2927
  VPie: typeof import('vuetify/labs/components')['VPie']
2924
2928
  VPieSegment: typeof import('vuetify/labs/components')['VPieSegment']
2925
2929
  VPieTooltip: typeof import('vuetify/labs/components')['VPieTooltip']
2926
2930
  VVideo: typeof import('vuetify/labs/components')['VVideo']
2927
2931
  VVideoControls: typeof import('vuetify/labs/components')['VVideoControls']
2928
2932
  VVideoVolume: typeof import('vuetify/labs/components')['VVideoVolume']
2929
- VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
2930
- VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
2931
- VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
2932
- VHotkey: typeof import('vuetify/labs/components')['VHotkey']
2933
2933
  VDateInput: typeof import('vuetify/labs/components')['VDateInput']
2934
2934
  VMaskInput: typeof import('vuetify/labs/components')['VMaskInput']
2935
2935
  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.10.9-dev.2025-11-06";
113
+ export const version = "3.10.9-dev.2025-11-08";
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.10.9-dev.2025-11-06",
4
+ "version": "3.10.9-dev.2025-11-08",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"