@vuetify/nightly 3.8.7-master.2025-05-31 → 3.8.7-master.2025-06-03

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/CHANGELOG.md +12 -3
  2. package/dist/json/attributes.json +3132 -3132
  3. package/dist/json/importMap-labs.json +22 -22
  4. package/dist/json/importMap.json +118 -118
  5. package/dist/json/web-types.json +5875 -5875
  6. package/dist/vuetify-labs.cjs +90 -80
  7. package/dist/vuetify-labs.css +3328 -3322
  8. package/dist/vuetify-labs.d.ts +42 -42
  9. package/dist/vuetify-labs.esm.js +90 -80
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +90 -80
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +84 -74
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +4505 -4499
  16. package/dist/vuetify.d.ts +42 -42
  17. package/dist/vuetify.esm.js +84 -74
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +84 -74
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +265 -265
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.css +6 -6
  25. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -9
  26. package/lib/components/VCarousel/VCarousel.js +3 -3
  27. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  28. package/lib/components/VChip/VChip.js +1 -0
  29. package/lib/components/VChip/VChip.js.map +1 -1
  30. package/lib/components/VColorPicker/VColorPickerPreview.js +3 -3
  31. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  32. package/lib/components/VColorPicker/VColorPickerSwatches.js +3 -3
  33. package/lib/components/VColorPicker/VColorPickerSwatches.js.map +1 -1
  34. package/lib/components/VCombobox/VCombobox.css +6 -6
  35. package/lib/components/VCombobox/VCombobox.sass +3 -9
  36. package/lib/components/VDataTable/VDataTableColumn.js +3 -3
  37. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  38. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +3 -3
  39. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  40. package/lib/components/VDataTable/VDataTableVirtual.js +7 -7
  41. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  42. package/lib/components/VDatePicker/VDatePickerControls.js +4 -4
  43. package/lib/components/VDatePicker/VDatePickerControls.js.map +1 -1
  44. package/lib/components/VDatePicker/VDatePickerMonth.js +3 -3
  45. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  46. package/lib/components/VDatePicker/VDatePickerMonths.js +3 -3
  47. package/lib/components/VDatePicker/VDatePickerMonths.js.map +1 -1
  48. package/lib/components/VDatePicker/VDatePickerYears.js +3 -3
  49. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  50. package/lib/components/VEmptyState/VEmptyState.js +3 -3
  51. package/lib/components/VEmptyState/VEmptyState.js.map +1 -1
  52. package/lib/components/VImg/VImg.js +7 -7
  53. package/lib/components/VImg/VImg.js.map +1 -1
  54. package/lib/components/VInfiniteScroll/VInfiniteScroll.js +3 -3
  55. package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
  56. package/lib/components/VOtpInput/VOtpInput.js +2 -2
  57. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  58. package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
  59. package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
  60. package/lib/components/VProgressLinear/VProgressLinear.js +3 -3
  61. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  62. package/lib/components/VSelect/VSelect.css +6 -0
  63. package/lib/components/VSelect/VSelect.sass +3 -0
  64. package/lib/components/VSelect/_mixins.scss +14 -0
  65. package/lib/components/VSelectionControl/VSelectionControl.js +2 -2
  66. package/lib/components/VSelectionControl/VSelectionControl.js.map +1 -1
  67. package/lib/components/VSlider/VSliderThumb.js +16 -10
  68. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  69. package/lib/components/VSlider/VSliderTrack.js +6 -6
  70. package/lib/components/VSlider/VSliderTrack.js.map +1 -1
  71. package/lib/components/VSlider/slider.js +4 -1
  72. package/lib/components/VSlider/slider.js.map +1 -1
  73. package/lib/components/VTable/VTable.js +3 -3
  74. package/lib/components/VTable/VTable.js.map +1 -1
  75. package/lib/components/VToolbar/VToolbar.js +5 -5
  76. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  77. package/lib/components/VVirtualScroll/VVirtualScroll.js +7 -7
  78. package/lib/components/VVirtualScroll/VVirtualScroll.js.map +1 -1
  79. package/lib/components/VWindow/VWindow.js +3 -3
  80. package/lib/components/VWindow/VWindow.js.map +1 -1
  81. package/lib/entry-bundler.js +1 -1
  82. package/lib/framework.d.ts +42 -42
  83. package/lib/framework.js +1 -1
  84. package/lib/labs/VPullToRefresh/VPullToRefresh.js +7 -7
  85. package/lib/labs/VPullToRefresh/VPullToRefresh.js.map +1 -1
  86. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"VImg.js","names":["makeVResponsiveProps","VResponsive","useBackgroundColor","makeComponentProps","makeRoundedProps","useRounded","makeTransitionProps","MaybeTransition","vIntersect","computed","nextTick","onBeforeMount","onBeforeUnmount","ref","shallowRef","toRef","vShow","watch","withDirectives","convertToUnit","genericComponent","getCurrentInstance","propsFactory","SUPPORTS_INTERSECTION","useRender","makeVImgProps","absolute","Boolean","alt","String","cover","color","draggable","type","default","undefined","eager","gradient","lazySrc","options","Object","root","rootMargin","threshold","sizes","src","crossorigin","referrerpolicy","srcset","position","VImg","name","directives","props","emits","loadstart","value","load","error","setup","_ref","emit","slots","backgroundColorClasses","backgroundColorStyles","roundedClasses","vm","currentSrc","image","state","naturalWidth","naturalHeight","normalisedSrc","aspect","Number","aspectRatio","init","val","oldVal","pollForSize","isIntersecting","lazyImg","Image","setTimeout","isUnmounted","complete","onError","onLoad","getSrc","img","timer","clearTimeout","timeout","arguments","length","poll","imgHeight","imgWidth","window","endsWith","startsWith","containClasses","__image","_createElementVNode","_normalizeClass","_normalizeStyle","objectPosition","sources","_createVNode","transition","__preloadImage","__placeholder","placeholder","__error","__gradient","backgroundImage","isBooted","stop","requestAnimationFrame","responsiveProps","filterProps","_withDirectives","_mergeProps","class","width","style","additional","_Fragment","handler","once"],"sources":["../../../src/components/VImg/VImg.tsx"],"sourcesContent":["// Styles\nimport './VImg.sass'\n\n// Components\nimport { makeVResponsiveProps, VResponsive } from '@/components/VResponsive/VResponsive'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport {\n computed,\n nextTick,\n onBeforeMount,\n onBeforeUnmount,\n ref,\n shallowRef,\n toRef,\n vShow,\n watch,\n withDirectives,\n} from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getCurrentInstance,\n propsFactory,\n SUPPORTS_INTERSECTION,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src?: string\n srcset?: string\n lazySrc?: string\n aspect: number\n}\n\nexport type VImgSlots = {\n default: never\n placeholder: never\n error: never\n sources: never\n}\n\nexport const makeVImgProps = propsFactory({\n absolute: Boolean,\n alt: String,\n cover: Boolean,\n color: String,\n draggable: {\n type: [Boolean, String] as PropType<boolean | 'true' | 'false'>,\n default: undefined,\n },\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n sizes: String,\n src: {\n type: [String, Object] as PropType<string | srcObject>,\n default: '',\n },\n crossorigin: String as PropType<'' | 'anonymous' | 'use-credentials'>,\n referrerpolicy: String as PropType<\n | 'no-referrer'\n | 'no-referrer-when-downgrade'\n | 'origin'\n | 'origin-when-cross-origin'\n | 'same-origin'\n | 'strict-origin'\n | 'strict-origin-when-cross-origin'\n | 'unsafe-url'\n >,\n srcset: String,\n position: String,\n\n ...makeVResponsiveProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTransitionProps(),\n}, 'VImg')\n\nexport const VImg = genericComponent<VImgSlots>()({\n name: 'VImg',\n\n directives: { vIntersect },\n\n props: makeVImgProps(),\n\n emits: {\n loadstart: (value: string | undefined) => true,\n load: (value: string | undefined) => true,\n error: (value: string | undefined) => true,\n },\n\n setup (props, { emit, slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { roundedClasses } = useRounded(props)\n const vm = getCurrentInstance('VImg')\n\n const currentSrc = shallowRef('') // Set from srcset\n const image = ref<HTMLImageElement>()\n const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.eager ? 'loading' : 'idle')\n const naturalWidth = shallowRef<number>()\n const naturalHeight = shallowRef<number>()\n\n const normalisedSrc = computed<srcObject>(() => {\n return props.src && typeof props.src === 'object'\n ? {\n src: props.src.src,\n srcset: props.srcset || props.src.srcset,\n lazySrc: props.lazySrc || props.src.lazySrc,\n aspect: Number(props.aspectRatio || props.src.aspect || 0),\n } : {\n src: props.src,\n srcset: props.srcset,\n lazySrc: props.lazySrc,\n aspect: Number(props.aspectRatio || 0),\n }\n })\n const aspectRatio = computed(() => {\n return normalisedSrc.value.aspect || naturalWidth.value! / naturalHeight.value! || 0\n })\n\n watch(() => props.src, () => {\n init(state.value !== 'idle')\n })\n watch(aspectRatio, (val, oldVal) => {\n if (!val && oldVal && image.value) {\n pollForSize(image.value)\n }\n })\n\n // TODO: getSrc when window width changes\n\n onBeforeMount(() => init())\n\n function init (isIntersecting?: boolean) {\n if (props.eager && isIntersecting) return\n if (\n SUPPORTS_INTERSECTION &&\n !isIntersecting &&\n !props.eager\n ) return\n\n state.value = 'loading'\n\n if (normalisedSrc.value.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = normalisedSrc.value.lazySrc\n pollForSize(lazyImg, null)\n }\n\n if (!normalisedSrc.value.src) return\n\n nextTick(() => {\n emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src)\n\n setTimeout(() => {\n if (vm.isUnmounted) return\n\n if (image.value?.complete) {\n if (!image.value.naturalWidth) {\n onError()\n }\n\n if (state.value === 'error') return\n\n if (!aspectRatio.value) pollForSize(image.value, null)\n if (state.value === 'loading') onLoad()\n } else {\n if (!aspectRatio.value) pollForSize(image.value!)\n getSrc()\n }\n })\n })\n }\n\n function onLoad () {\n if (vm.isUnmounted) return\n\n getSrc()\n pollForSize(image.value!)\n state.value = 'loaded'\n emit('load', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function onError () {\n if (vm.isUnmounted) return\n\n state.value = 'error'\n emit('error', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function getSrc () {\n const img = image.value\n if (img) currentSrc.value = img.currentSrc || img.src\n }\n\n let timer = -1\n\n onBeforeUnmount(() => {\n clearTimeout(timer)\n })\n\n function pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n clearTimeout(timer)\n if (vm.isUnmounted) return\n\n const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img\n\n if (imgHeight || imgWidth) {\n naturalWidth.value = imgWidth\n naturalHeight.value = imgHeight\n } else if (!img.complete && state.value === 'loading' && timeout != null) {\n timer = window.setTimeout(poll, timeout)\n } else if (img.currentSrc.endsWith('.svg') || img.currentSrc.startsWith('data:image/svg+xml')) {\n naturalWidth.value = 1\n naturalHeight.value = 1\n }\n }\n\n poll()\n }\n\n const containClasses = toRef(() => ({\n 'v-img__img--cover': props.cover,\n 'v-img__img--contain': !props.cover,\n }))\n\n const __image = () => {\n if (!normalisedSrc.value.src || state.value === 'idle') return null\n\n const img = (\n <img\n class={['v-img__img', containClasses.value]}\n style={{ objectPosition: props.position }}\n crossorigin={ props.crossorigin }\n src={ normalisedSrc.value.src }\n srcset={ normalisedSrc.value.srcset }\n alt={ props.alt }\n referrerpolicy={ props.referrerpolicy }\n draggable={ props.draggable }\n sizes={ props.sizes }\n ref={ image }\n onLoad={ onLoad }\n onError={ onError }\n />\n )\n\n const sources = slots.sources?.()\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n {\n withDirectives(\n sources\n ? <picture class=\"v-img__picture\">{ sources }{ img }</picture>\n : img,\n [[vShow, state.value === 'loaded']]\n )\n }\n </MaybeTransition>\n )\n }\n\n const __preloadImage = () => (\n <MaybeTransition transition={ props.transition }>\n { normalisedSrc.value.lazySrc && state.value !== 'loaded' && (\n <img\n class={['v-img__img', 'v-img__img--preload', containClasses.value]}\n style={{ objectPosition: props.position }}\n crossorigin={ props.crossorigin }\n src={ normalisedSrc.value.lazySrc }\n alt={ props.alt }\n referrerpolicy={ props.referrerpolicy }\n draggable={ props.draggable }\n />\n )}\n </MaybeTransition>\n )\n\n const __placeholder = () => {\n if (!slots.placeholder) return null\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { (state.value === 'loading' || (state.value === 'error' && !slots.error)) &&\n <div class=\"v-img__placeholder\">{ slots.placeholder() }</div>\n }\n </MaybeTransition>\n )\n }\n\n const __error = () => {\n if (!slots.error) return null\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { state.value === 'error' &&\n <div class=\"v-img__error\">{ slots.error() }</div>\n }\n </MaybeTransition>\n )\n }\n\n const __gradient = () => {\n if (!props.gradient) return null\n\n return <div class=\"v-img__gradient\" style={{ backgroundImage: `linear-gradient(${props.gradient})` }} />\n }\n\n const isBooted = shallowRef(false)\n {\n const stop = watch(aspectRatio, val => {\n if (val) {\n // Doesn't work with nextTick, idk why\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n stop()\n }\n })\n }\n\n useRender(() => {\n const responsiveProps = VResponsive.filterProps(props)\n return (\n <VResponsive\n class={[\n 'v-img',\n {\n 'v-img--absolute': props.absolute,\n 'v-img--booting': !isBooted.value,\n },\n backgroundColorClasses.value,\n roundedClasses.value,\n props.class,\n ]}\n style={[\n { width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width) },\n backgroundColorStyles.value,\n props.style,\n ]}\n { ...responsiveProps }\n aspectRatio={ aspectRatio.value }\n aria-label={ props.alt }\n role={ props.alt ? 'img' : undefined }\n v-intersect={[{\n handler: init,\n options: props.options,\n }, null, ['once']]}\n >{{\n additional: () => (\n <>\n <__image />\n <__preloadImage />\n <__gradient />\n <__placeholder />\n <__error />\n </>\n ),\n default: slots.default,\n }}</VResponsive>\n )\n })\n\n return {\n currentSrc,\n image,\n state,\n naturalWidth,\n naturalHeight,\n }\n },\n})\n\nexport type VImg = InstanceType<typeof VImg>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VImg.js","names":["makeVResponsiveProps","VResponsive","useBackgroundColor","makeComponentProps","makeRoundedProps","useRounded","makeTransitionProps","MaybeTransition","vIntersect","computed","nextTick","onBeforeMount","onBeforeUnmount","ref","shallowRef","toRef","vShow","watch","withDirectives","convertToUnit","genericComponent","getCurrentInstance","propsFactory","SUPPORTS_INTERSECTION","useRender","makeVImgProps","absolute","Boolean","alt","String","cover","color","draggable","type","default","undefined","eager","gradient","lazySrc","options","Object","root","rootMargin","threshold","sizes","src","crossorigin","referrerpolicy","srcset","position","VImg","name","directives","props","emits","loadstart","value","load","error","setup","_ref","emit","slots","backgroundColorClasses","backgroundColorStyles","roundedClasses","vm","currentSrc","image","state","naturalWidth","naturalHeight","normalisedSrc","aspect","Number","aspectRatio","init","val","oldVal","pollForSize","isIntersecting","lazyImg","Image","setTimeout","isUnmounted","complete","onError","onLoad","getSrc","img","timer","clearTimeout","timeout","arguments","length","poll","imgHeight","imgWidth","window","endsWith","startsWith","containClasses","__image","_createElementVNode","_normalizeClass","objectPosition","sources","_createVNode","transition","__preloadImage","__placeholder","placeholder","__error","__gradient","backgroundImage","isBooted","stop","requestAnimationFrame","responsiveProps","filterProps","_withDirectives","_mergeProps","class","width","style","additional","_Fragment","handler","once"],"sources":["../../../src/components/VImg/VImg.tsx"],"sourcesContent":["// Styles\nimport './VImg.sass'\n\n// Components\nimport { makeVResponsiveProps, VResponsive } from '@/components/VResponsive/VResponsive'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport {\n computed,\n nextTick,\n onBeforeMount,\n onBeforeUnmount,\n ref,\n shallowRef,\n toRef,\n vShow,\n watch,\n withDirectives,\n} from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getCurrentInstance,\n propsFactory,\n SUPPORTS_INTERSECTION,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src?: string\n srcset?: string\n lazySrc?: string\n aspect: number\n}\n\nexport type VImgSlots = {\n default: never\n placeholder: never\n error: never\n sources: never\n}\n\nexport const makeVImgProps = propsFactory({\n absolute: Boolean,\n alt: String,\n cover: Boolean,\n color: String,\n draggable: {\n type: [Boolean, String] as PropType<boolean | 'true' | 'false'>,\n default: undefined,\n },\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n sizes: String,\n src: {\n type: [String, Object] as PropType<string | srcObject>,\n default: '',\n },\n crossorigin: String as PropType<'' | 'anonymous' | 'use-credentials'>,\n referrerpolicy: String as PropType<\n | 'no-referrer'\n | 'no-referrer-when-downgrade'\n | 'origin'\n | 'origin-when-cross-origin'\n | 'same-origin'\n | 'strict-origin'\n | 'strict-origin-when-cross-origin'\n | 'unsafe-url'\n >,\n srcset: String,\n position: String,\n\n ...makeVResponsiveProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTransitionProps(),\n}, 'VImg')\n\nexport const VImg = genericComponent<VImgSlots>()({\n name: 'VImg',\n\n directives: { vIntersect },\n\n props: makeVImgProps(),\n\n emits: {\n loadstart: (value: string | undefined) => true,\n load: (value: string | undefined) => true,\n error: (value: string | undefined) => true,\n },\n\n setup (props, { emit, slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { roundedClasses } = useRounded(props)\n const vm = getCurrentInstance('VImg')\n\n const currentSrc = shallowRef('') // Set from srcset\n const image = ref<HTMLImageElement>()\n const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.eager ? 'loading' : 'idle')\n const naturalWidth = shallowRef<number>()\n const naturalHeight = shallowRef<number>()\n\n const normalisedSrc = computed<srcObject>(() => {\n return props.src && typeof props.src === 'object'\n ? {\n src: props.src.src,\n srcset: props.srcset || props.src.srcset,\n lazySrc: props.lazySrc || props.src.lazySrc,\n aspect: Number(props.aspectRatio || props.src.aspect || 0),\n } : {\n src: props.src,\n srcset: props.srcset,\n lazySrc: props.lazySrc,\n aspect: Number(props.aspectRatio || 0),\n }\n })\n const aspectRatio = computed(() => {\n return normalisedSrc.value.aspect || naturalWidth.value! / naturalHeight.value! || 0\n })\n\n watch(() => props.src, () => {\n init(state.value !== 'idle')\n })\n watch(aspectRatio, (val, oldVal) => {\n if (!val && oldVal && image.value) {\n pollForSize(image.value)\n }\n })\n\n // TODO: getSrc when window width changes\n\n onBeforeMount(() => init())\n\n function init (isIntersecting?: boolean) {\n if (props.eager && isIntersecting) return\n if (\n SUPPORTS_INTERSECTION &&\n !isIntersecting &&\n !props.eager\n ) return\n\n state.value = 'loading'\n\n if (normalisedSrc.value.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = normalisedSrc.value.lazySrc\n pollForSize(lazyImg, null)\n }\n\n if (!normalisedSrc.value.src) return\n\n nextTick(() => {\n emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src)\n\n setTimeout(() => {\n if (vm.isUnmounted) return\n\n if (image.value?.complete) {\n if (!image.value.naturalWidth) {\n onError()\n }\n\n if (state.value === 'error') return\n\n if (!aspectRatio.value) pollForSize(image.value, null)\n if (state.value === 'loading') onLoad()\n } else {\n if (!aspectRatio.value) pollForSize(image.value!)\n getSrc()\n }\n })\n })\n }\n\n function onLoad () {\n if (vm.isUnmounted) return\n\n getSrc()\n pollForSize(image.value!)\n state.value = 'loaded'\n emit('load', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function onError () {\n if (vm.isUnmounted) return\n\n state.value = 'error'\n emit('error', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function getSrc () {\n const img = image.value\n if (img) currentSrc.value = img.currentSrc || img.src\n }\n\n let timer = -1\n\n onBeforeUnmount(() => {\n clearTimeout(timer)\n })\n\n function pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n clearTimeout(timer)\n if (vm.isUnmounted) return\n\n const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img\n\n if (imgHeight || imgWidth) {\n naturalWidth.value = imgWidth\n naturalHeight.value = imgHeight\n } else if (!img.complete && state.value === 'loading' && timeout != null) {\n timer = window.setTimeout(poll, timeout)\n } else if (img.currentSrc.endsWith('.svg') || img.currentSrc.startsWith('data:image/svg+xml')) {\n naturalWidth.value = 1\n naturalHeight.value = 1\n }\n }\n\n poll()\n }\n\n const containClasses = toRef(() => ({\n 'v-img__img--cover': props.cover,\n 'v-img__img--contain': !props.cover,\n }))\n\n const __image = () => {\n if (!normalisedSrc.value.src || state.value === 'idle') return null\n\n const img = (\n <img\n class={['v-img__img', containClasses.value]}\n style={{ objectPosition: props.position }}\n crossorigin={ props.crossorigin }\n src={ normalisedSrc.value.src }\n srcset={ normalisedSrc.value.srcset }\n alt={ props.alt }\n referrerpolicy={ props.referrerpolicy }\n draggable={ props.draggable }\n sizes={ props.sizes }\n ref={ image }\n onLoad={ onLoad }\n onError={ onError }\n />\n )\n\n const sources = slots.sources?.()\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n {\n withDirectives(\n sources\n ? <picture class=\"v-img__picture\">{ sources }{ img }</picture>\n : img,\n [[vShow, state.value === 'loaded']]\n )\n }\n </MaybeTransition>\n )\n }\n\n const __preloadImage = () => (\n <MaybeTransition transition={ props.transition }>\n { normalisedSrc.value.lazySrc && state.value !== 'loaded' && (\n <img\n class={['v-img__img', 'v-img__img--preload', containClasses.value]}\n style={{ objectPosition: props.position }}\n crossorigin={ props.crossorigin }\n src={ normalisedSrc.value.lazySrc }\n alt={ props.alt }\n referrerpolicy={ props.referrerpolicy }\n draggable={ props.draggable }\n />\n )}\n </MaybeTransition>\n )\n\n const __placeholder = () => {\n if (!slots.placeholder) return null\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { (state.value === 'loading' || (state.value === 'error' && !slots.error)) &&\n <div class=\"v-img__placeholder\">{ slots.placeholder() }</div>\n }\n </MaybeTransition>\n )\n }\n\n const __error = () => {\n if (!slots.error) return null\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { state.value === 'error' &&\n <div class=\"v-img__error\">{ slots.error() }</div>\n }\n </MaybeTransition>\n )\n }\n\n const __gradient = () => {\n if (!props.gradient) return null\n\n return <div class=\"v-img__gradient\" style={{ backgroundImage: `linear-gradient(${props.gradient})` }} />\n }\n\n const isBooted = shallowRef(false)\n {\n const stop = watch(aspectRatio, val => {\n if (val) {\n // Doesn't work with nextTick, idk why\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n stop()\n }\n })\n }\n\n useRender(() => {\n const responsiveProps = VResponsive.filterProps(props)\n return (\n <VResponsive\n class={[\n 'v-img',\n {\n 'v-img--absolute': props.absolute,\n 'v-img--booting': !isBooted.value,\n },\n backgroundColorClasses.value,\n roundedClasses.value,\n props.class,\n ]}\n style={[\n { width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width) },\n backgroundColorStyles.value,\n props.style,\n ]}\n { ...responsiveProps }\n aspectRatio={ aspectRatio.value }\n aria-label={ props.alt }\n role={ props.alt ? 'img' : undefined }\n v-intersect={[{\n handler: init,\n options: props.options,\n }, null, ['once']]}\n >{{\n additional: () => (\n <>\n <__image />\n <__preloadImage />\n <__gradient />\n <__placeholder />\n <__error />\n </>\n ),\n default: slots.default,\n }}</VResponsive>\n )\n })\n\n return {\n currentSrc,\n image,\n state,\n naturalWidth,\n naturalHeight,\n }\n },\n})\n\nexport type VImg = InstanceType<typeof VImg>\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { createTextVNode as _createTextVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createVNode as _createVNode, normalizeClass as _normalizeClass } from "vue";
1
+ import { createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
2
2
  // Styles
3
3
  import "./VInfiniteScroll.css";
4
4
 
@@ -65,9 +65,9 @@ export const VInfiniteScrollIntersect = defineComponent({
65
65
  });
66
66
  useRender(() => _createElementVNode("div", {
67
67
  "class": "v-infinite-scroll-intersect",
68
- "style": _normalizeStyle({
68
+ "style": {
69
69
  '--v-infinite-margin-size': props.rootMargin
70
- }),
70
+ },
71
71
  "ref": intersectionRef
72
72
  }, [_createTextVNode("\xA0")]));
73
73
  return {};
@@ -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","_normalizeStyle","_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"],"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 }\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 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})\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"],"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 }\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 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})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, createElementVNode as _createElementVNode, createVNode as _createVNode, mergeProps as _mergeProps, normalizeStyle as _normalizeStyle } from "vue";
1
+ import { Fragment as _Fragment, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, mergeProps as _mergeProps, normalizeStyle as _normalizeStyle } from "vue";
2
2
  // Styles
3
3
  import "./VOtpInput.css";
4
4
 
@@ -189,7 +189,7 @@ export const VOtpInput = genericComponent()({
189
189
  "aria-label": t(props.label, i + 1),
190
190
  "autofocus": i === 0 && props.autofocus,
191
191
  "autocomplete": "one-time-code",
192
- "class": ['v-otp-input__field'],
192
+ "class": _normalizeClass(['v-otp-input__field']),
193
193
  "disabled": props.disabled,
194
194
  "inputmode": props.type === 'number' ? 'numeric' : 'text',
195
195
  "min": props.type === 'number' ? 0 : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useLocale","useProxiedModel","computed","nextTick","ref","toRef","watch","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","onInput","isValidNumber","array","slice","target","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","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 { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, toRef, watch } 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\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 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 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').slice(0, length.value) ?? ''\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[index].blur()\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) emit('finish', val.join(''))\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 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 content-class=\"v-otp-input__loader\"\n model-value={ !!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","useLocale","useProxiedModel","computed","nextTick","ref","toRef","watch","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","onInput","isValidNumber","array","slice","target","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","_normalizeClass","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 { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, toRef, watch } 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\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 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 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').slice(0, length.value) ?? ''\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[index].blur()\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) emit('finish', val.join(''))\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 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 content-class=\"v-otp-input__loader\"\n model-value={ !!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":[]}
@@ -95,9 +95,9 @@ export const VProgressCircular = genericComponent()({
95
95
  "aria-valuenow": props.indeterminate ? undefined : normalizedValue.value
96
96
  }, {
97
97
  default: () => [_createElementVNode("svg", {
98
- "style": _normalizeStyle({
98
+ "style": {
99
99
  transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`
100
- }),
100
+ },
101
101
  "xmlns": "http://www.w3.org/2000/svg",
102
102
  "viewBox": `0 0 ${diameter.value} ${diameter.value}`
103
103
  }, [_createElementVNode("circle", {
@@ -1 +1 @@
1
- {"version":3,"file":"VProgressCircular.js","names":["useTextColor","makeComponentProps","useIntersectionObserver","useResizeObserver","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","ref","toRef","watchEffect","clamp","convertToUnit","genericComponent","propsFactory","useRender","makeVProgressCircularProps","bgColor","String","color","indeterminate","Boolean","modelValue","type","Number","default","rotate","width","tag","VProgressCircular","name","props","setup","_ref","slots","MAGIC_RADIUS_CONSTANT","CIRCUMFERENCE","Math","PI","root","themeClasses","sizeClasses","sizeStyles","textColorClasses","textColorStyles","underlayColorClasses","underlayColorStyles","intersectionRef","isIntersecting","resizeRef","contentRect","normalizedValue","parseFloat","size","value","max","diameter","strokeWidth","strokeDashOffset","_createVNode","_normalizeClass","class","_normalizeStyle","style","undefined","_createElementVNode","transform"],"sources":["../../../src/components/VProgressCircular/VProgressCircular.tsx"],"sourcesContent":["// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { ref, toRef, watchEffect } from 'vue'\nimport { clamp, convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVProgressCircularProps = propsFactory({\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeComponentProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n}, 'VProgressCircular')\n\ntype VProgressCircularSlots = {\n default: { value: number }\n}\n\nexport const VProgressCircular = genericComponent<VProgressCircularSlots>()({\n name: 'VProgressCircular',\n\n props: makeVProgressCircularProps(),\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const root = ref<HTMLElement>()\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n const { resizeRef, contentRect } = useResizeObserver()\n\n const normalizedValue = toRef(() => clamp(parseFloat(props.modelValue), 0, 100))\n const width = toRef(() => Number(props.width))\n const size = toRef(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value\n ? Number(props.size)\n : contentRect.value\n ? contentRect.value.width\n : Math.max(width.value, 32)\n })\n const diameter = toRef(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = toRef(() => width.value / size.value * diameter.value)\n const strokeDashOffset = toRef(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n watchEffect(() => {\n intersectionRef.value = root.value\n resizeRef.value = root.value\n })\n\n useRender(() => (\n <props.tag\n ref={ root }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n props.class,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n props.style,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressCircular = InstanceType<typeof VProgressCircular>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VProgressCircular.js","names":["useTextColor","makeComponentProps","useIntersectionObserver","useResizeObserver","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","ref","toRef","watchEffect","clamp","convertToUnit","genericComponent","propsFactory","useRender","makeVProgressCircularProps","bgColor","String","color","indeterminate","Boolean","modelValue","type","Number","default","rotate","width","tag","VProgressCircular","name","props","setup","_ref","slots","MAGIC_RADIUS_CONSTANT","CIRCUMFERENCE","Math","PI","root","themeClasses","sizeClasses","sizeStyles","textColorClasses","textColorStyles","underlayColorClasses","underlayColorStyles","intersectionRef","isIntersecting","resizeRef","contentRect","normalizedValue","parseFloat","size","value","max","diameter","strokeWidth","strokeDashOffset","_createVNode","_normalizeClass","class","_normalizeStyle","style","undefined","_createElementVNode","transform"],"sources":["../../../src/components/VProgressCircular/VProgressCircular.tsx"],"sourcesContent":["// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { ref, toRef, watchEffect } from 'vue'\nimport { clamp, convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVProgressCircularProps = propsFactory({\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeComponentProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n}, 'VProgressCircular')\n\ntype VProgressCircularSlots = {\n default: { value: number }\n}\n\nexport const VProgressCircular = genericComponent<VProgressCircularSlots>()({\n name: 'VProgressCircular',\n\n props: makeVProgressCircularProps(),\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const root = ref<HTMLElement>()\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n const { resizeRef, contentRect } = useResizeObserver()\n\n const normalizedValue = toRef(() => clamp(parseFloat(props.modelValue), 0, 100))\n const width = toRef(() => Number(props.width))\n const size = toRef(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value\n ? Number(props.size)\n : contentRect.value\n ? contentRect.value.width\n : Math.max(width.value, 32)\n })\n const diameter = toRef(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = toRef(() => width.value / size.value * diameter.value)\n const strokeDashOffset = toRef(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n watchEffect(() => {\n intersectionRef.value = root.value\n resizeRef.value = root.value\n })\n\n useRender(() => (\n <props.tag\n ref={ root }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n props.class,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n props.style,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressCircular = InstanceType<typeof VProgressCircular>\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createVNode as _createVNode } from "vue";
1
+ import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from "vue";
2
2
  // Styles
3
3
  import "./VProgressLinear.css";
4
4
 
@@ -144,7 +144,7 @@ export const VProgressLinear = genericComponent()({
144
144
  default: () => [props.stream && _createElementVNode("div", {
145
145
  "key": "stream",
146
146
  "class": _normalizeClass(['v-progress-linear__stream', textColorClasses.value]),
147
- "style": _normalizeStyle({
147
+ "style": {
148
148
  ...textColorStyles.value,
149
149
  [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),
150
150
  borderTop: `${convertToUnit(height.value / 2)} dotted`,
@@ -152,7 +152,7 @@ export const VProgressLinear = genericComponent()({
152
152
  top: `calc(50% - ${convertToUnit(height.value / 4)})`,
153
153
  width: convertToUnit(100 - normalizedBuffer.value, '%'),
154
154
  '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1))
155
- })
155
+ }
156
156
  }, null), _createElementVNode("div", {
157
157
  "class": _normalizeClass(['v-progress-linear__background', !isForcedColorsModeActive ? backgroundColorClasses.value : undefined]),
158
158
  "style": _normalizeStyle([backgroundColorStyles.value, {
@@ -1 +1 @@
1
- {"version":3,"file":"VProgressLinear.js","names":["useBackgroundColor","useTextColor","makeComponentProps","useIntersectionObserver","useRtl","makeLocationProps","useLocation","useProxiedModel","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","computed","Transition","clamp","convertToUnit","genericComponent","IN_BROWSER","propsFactory","useRender","makeVProgressLinearProps","absolute","Boolean","active","type","default","bgColor","String","bgOpacity","Number","bufferValue","bufferColor","bufferOpacity","clickable","color","height","indeterminate","max","modelValue","opacity","reverse","stream","striped","roundedBar","location","VProgressLinear","name","props","emits","value","setup","_ref","slots","progress","isRtl","rtlClasses","themeClasses","locationStyles","textColorClasses","textColorStyles","backgroundColorClasses","backgroundColorStyles","bufferColorClasses","bufferColorStyles","barColorClasses","barColorStyles","roundedClasses","intersectionRef","isIntersecting","parseFloat","normalizedBuffer","normalizedValue","isReversed","transition","isForcedColorsModeActive","window","matchMedia","matches","handleClick","e","left","right","width","getBoundingClientRect","clientX","Math","round","_createVNode","tag","_normalizeClass","rounded","class","_normalizeStyle","bottom","undefined","top","style","min","_createElementVNode","borderTop","map","bar","buffer"],"sources":["../../../src/components/VProgressLinear/VProgressLinear.tsx"],"sourcesContent":["// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useRtl } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, Transition } from 'vue'\nimport { clamp, convertToUnit, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\ntype VProgressLinearSlots = {\n default: { value: number, buffer: number }\n}\n\nexport const makeVProgressLinearProps = propsFactory({\n absolute: Boolean,\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n bufferColor: String,\n bufferOpacity: [Number, String],\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n opacity: [Number, String],\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeComponentProps(),\n ...makeLocationProps({ location: 'top' } as const),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VProgressLinear')\n\nexport const VProgressLinear = genericComponent<VProgressLinearSlots>()({\n name: 'VProgressLinear',\n\n props: makeVProgressLinearProps(),\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl, rtlClasses } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { locationStyles } = useLocation(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const {\n backgroundColorClasses,\n backgroundColorStyles,\n } = useBackgroundColor(() => props.bgColor || props.color)\n const {\n backgroundColorClasses: bufferColorClasses,\n backgroundColorStyles: bufferColorStyles,\n } = useBackgroundColor(() => props.bufferColor || props.bgColor || props.color)\n const {\n backgroundColorClasses: barColorClasses,\n backgroundColorStyles: barColorStyles,\n } = useBackgroundColor(() => props.color)\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseFloat(props.max))\n const height = computed(() => parseFloat(props.height))\n const normalizedBuffer = computed(() => clamp(parseFloat(props.bufferValue) / max.value * 100, 0, 100))\n const normalizedValue = computed(() => clamp(parseFloat(progress.value) / max.value * 100, 0, 100))\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n useRender(() => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--absolute': props.absolute,\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n rtlClasses.value,\n props.class,\n ]}\n style={[\n {\n bottom: props.location === 'bottom' ? 0 : undefined,\n top: props.location === 'top' ? 0 : undefined,\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n ...(props.absolute ? locationStyles.value : {}),\n },\n props.style,\n ]}\n role=\"progressbar\"\n aria-hidden={ props.active ? 'false' : 'true' }\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : Math.min(parseFloat(progress.value), max.value) }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n key=\"stream\"\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: parseFloat(props.bufferOpacity!),\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n )}\n\n <div\n class={[\n 'v-progress-linear__background',\n !isForcedColorsModeActive ? backgroundColorClasses.value : undefined,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: parseFloat(props.bgOpacity!),\n width: props.stream ? 0 : undefined,\n },\n ]}\n />\n\n <div\n class={[\n 'v-progress-linear__buffer',\n !isForcedColorsModeActive ? bufferColorClasses.value : undefined,\n ]}\n style={[\n bufferColorStyles.value,\n {\n opacity: parseFloat(props.bufferOpacity!),\n width: convertToUnit(normalizedBuffer.value, '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n !isForcedColorsModeActive ? barColorClasses.value : undefined,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n {['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n !isForcedColorsModeActive ? barColorClasses.value : undefined,\n ]}\n style={ barColorStyles.value }\n />\n ))}\n </div>\n )}\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressLinear = InstanceType<typeof VProgressLinear>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VProgressLinear.js","names":["useBackgroundColor","useTextColor","makeComponentProps","useIntersectionObserver","useRtl","makeLocationProps","useLocation","useProxiedModel","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","computed","Transition","clamp","convertToUnit","genericComponent","IN_BROWSER","propsFactory","useRender","makeVProgressLinearProps","absolute","Boolean","active","type","default","bgColor","String","bgOpacity","Number","bufferValue","bufferColor","bufferOpacity","clickable","color","height","indeterminate","max","modelValue","opacity","reverse","stream","striped","roundedBar","location","VProgressLinear","name","props","emits","value","setup","_ref","slots","progress","isRtl","rtlClasses","themeClasses","locationStyles","textColorClasses","textColorStyles","backgroundColorClasses","backgroundColorStyles","bufferColorClasses","bufferColorStyles","barColorClasses","barColorStyles","roundedClasses","intersectionRef","isIntersecting","parseFloat","normalizedBuffer","normalizedValue","isReversed","transition","isForcedColorsModeActive","window","matchMedia","matches","handleClick","e","left","right","width","getBoundingClientRect","clientX","Math","round","_createVNode","tag","_normalizeClass","rounded","class","_normalizeStyle","bottom","undefined","top","style","min","_createElementVNode","borderTop","map","bar","buffer"],"sources":["../../../src/components/VProgressLinear/VProgressLinear.tsx"],"sourcesContent":["// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useRtl } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, Transition } from 'vue'\nimport { clamp, convertToUnit, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\ntype VProgressLinearSlots = {\n default: { value: number, buffer: number }\n}\n\nexport const makeVProgressLinearProps = propsFactory({\n absolute: Boolean,\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n bufferColor: String,\n bufferOpacity: [Number, String],\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n opacity: [Number, String],\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeComponentProps(),\n ...makeLocationProps({ location: 'top' } as const),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VProgressLinear')\n\nexport const VProgressLinear = genericComponent<VProgressLinearSlots>()({\n name: 'VProgressLinear',\n\n props: makeVProgressLinearProps(),\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl, rtlClasses } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { locationStyles } = useLocation(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const {\n backgroundColorClasses,\n backgroundColorStyles,\n } = useBackgroundColor(() => props.bgColor || props.color)\n const {\n backgroundColorClasses: bufferColorClasses,\n backgroundColorStyles: bufferColorStyles,\n } = useBackgroundColor(() => props.bufferColor || props.bgColor || props.color)\n const {\n backgroundColorClasses: barColorClasses,\n backgroundColorStyles: barColorStyles,\n } = useBackgroundColor(() => props.color)\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseFloat(props.max))\n const height = computed(() => parseFloat(props.height))\n const normalizedBuffer = computed(() => clamp(parseFloat(props.bufferValue) / max.value * 100, 0, 100))\n const normalizedValue = computed(() => clamp(parseFloat(progress.value) / max.value * 100, 0, 100))\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n useRender(() => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--absolute': props.absolute,\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n rtlClasses.value,\n props.class,\n ]}\n style={[\n {\n bottom: props.location === 'bottom' ? 0 : undefined,\n top: props.location === 'top' ? 0 : undefined,\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n ...(props.absolute ? locationStyles.value : {}),\n },\n props.style,\n ]}\n role=\"progressbar\"\n aria-hidden={ props.active ? 'false' : 'true' }\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : Math.min(parseFloat(progress.value), max.value) }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n key=\"stream\"\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: parseFloat(props.bufferOpacity!),\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n )}\n\n <div\n class={[\n 'v-progress-linear__background',\n !isForcedColorsModeActive ? backgroundColorClasses.value : undefined,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: parseFloat(props.bgOpacity!),\n width: props.stream ? 0 : undefined,\n },\n ]}\n />\n\n <div\n class={[\n 'v-progress-linear__buffer',\n !isForcedColorsModeActive ? bufferColorClasses.value : undefined,\n ]}\n style={[\n bufferColorStyles.value,\n {\n opacity: parseFloat(props.bufferOpacity!),\n width: convertToUnit(normalizedBuffer.value, '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n !isForcedColorsModeActive ? barColorClasses.value : undefined,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n {['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n !isForcedColorsModeActive ? barColorClasses.value : undefined,\n ]}\n style={ barColorStyles.value }\n />\n ))}\n </div>\n )}\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressLinear = InstanceType<typeof VProgressLinear>\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ .v-select--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,
2
+ .v-select--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,
3
+ .v-select--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,
4
+ .v-select--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating {
5
+ top: 0px;
6
+ }
1
7
  .v-select .v-field .v-text-field__prefix,
2
8
  .v-select .v-field .v-text-field__suffix,
3
9
  .v-select .v-field .v-field__input, .v-select .v-field.v-field {
@@ -3,9 +3,12 @@
3
3
  @use '../../styles/settings'
4
4
  @use '../../styles/tools'
5
5
  @use './variables' as *
6
+ @use './mixins' as *
6
7
 
7
8
  @include tools.layer('components')
8
9
  .v-select
10
+ @include select-compact-chip-label
11
+
9
12
  .v-field
10
13
  .v-text-field__prefix,
11
14
  .v-text-field__suffix,
@@ -0,0 +1,14 @@
1
+ @mixin select-compact-chip-label {
2
+ &--chips.v-input--density-compact {
3
+ .v-field--variant-solo,
4
+ .v-field--variant-solo-inverted,
5
+ .v-field--variant-filled,
6
+ .v-field--variant-solo-filled {
7
+ .v-label.v-field-label {
8
+ &--floating {
9
+ top: 0px;
10
+ }
11
+ }
12
+ }
13
+ }
14
+ }
@@ -1,4 +1,4 @@
1
- import { mergeProps as _mergeProps, createElementVNode as _createElementVNode, Fragment as _Fragment, createVNode as _createVNode, withDirectives as _withDirectives, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
1
+ import { mergeProps as _mergeProps, createElementVNode as _createElementVNode, Fragment as _Fragment, createVNode as _createVNode, normalizeClass as _normalizeClass, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from "vue";
2
2
  // Styles
3
3
  import "./VSelectionControl.css";
4
4
 
@@ -184,7 +184,7 @@ export const VSelectionControl = genericComponent()({
184
184
  backgroundColorClasses,
185
185
  backgroundColorStyles
186
186
  }), _withDirectives(_createElementVNode("div", {
187
- "class": ['v-selection-control__input']
187
+ "class": _normalizeClass(['v-selection-control__input'])
188
188
  }, [slots.input?.({
189
189
  model,
190
190
  textColorClasses,