vuetify
Version:
Vue Material Component Framework
1 lines • 9.69 kB
Source Map (JSON)
{"version":3,"file":"VCarousel.mjs","names":["VBtn","VDefaultsProvider","VProgressLinear","VWindow","IconValue","useLocale","useProxiedModel","convertToUnit","genericComponent","useRender","onMounted","ref","watch","VCarousel","name","props","color","String","cycle","Boolean","delimiterIcon","type","default","height","Number","hideDelimiters","hideDelimiterBackground","interval","validator","value","modelValue","progress","showArrows","v","verticalDelimiters","emits","val","setup","slots","model","t","windowRef","slideTimeout","restartTimeout","window","clearTimeout","startTimeout","setTimeout","group","next","requestAnimationFrame","additional","left","right","items","length","icon","size","variant","map","item","index","class","isSelected","id","onClick","select","undefined","getItemIndex","prev"],"sources":["../../../src/components/VCarousel/VCarousel.tsx"],"sourcesContent":["// Styles\nimport './VCarousel.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VProgressLinear } from '@/components/VProgressLinear'\nimport { VWindow } from '@/components/VWindow'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { convertToUnit, genericComponent, useRender } from '@/util'\nimport { onMounted, ref, watch } from 'vue'\n\n// Types\nimport type { GroupProvide } from '@/composables/group'\nimport type { PropType } from 'vue'\nimport type { VWindowSlots } from '../VWindow/VWindow'\n\nexport const VCarousel = genericComponent<VWindowSlots>()({\n name: 'VCarousel',\n\n props: {\n color: String,\n cycle: Boolean,\n delimiterIcon: {\n type: IconValue,\n default: '$delimiter',\n },\n height: {\n type: [Number, String],\n default: 500,\n },\n hideDelimiters: Boolean,\n hideDelimiterBackground: Boolean,\n interval: {\n type: [Number, String],\n default: 6000,\n validator: (value: string | number) => value > 0,\n },\n modelValue: null,\n progress: [Boolean, String],\n showArrows: {\n type: [Boolean, String],\n default: true,\n validator: (v: any) => typeof v === 'boolean' || v === 'hover',\n },\n verticalDelimiters: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { t } = useLocale()\n const windowRef = ref<typeof VWindow>()\n\n let slideTimeout = -1\n watch(model, restartTimeout)\n watch(() => props.interval, restartTimeout)\n watch(() => props.cycle, val => {\n if (val) restartTimeout()\n else window.clearTimeout(slideTimeout)\n })\n\n onMounted(startTimeout)\n\n function startTimeout () {\n if (!props.cycle || !windowRef.value) return\n\n slideTimeout = window.setTimeout(windowRef.value.group.next, +props.interval > 0 ? +props.interval : 6000)\n }\n\n function restartTimeout () {\n window.clearTimeout(slideTimeout)\n window.requestAnimationFrame(startTimeout)\n }\n\n useRender(() => (\n <VWindow\n ref={ windowRef }\n v-model={ model.value }\n class={[\n 'v-carousel',\n {\n 'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,\n 'v-carousel--vertical-delimiters': props.verticalDelimiters,\n },\n ]}\n style={{ height: convertToUnit(props.height) }}\n continuous\n mandatory=\"force\"\n showArrows={ props.showArrows }\n >\n {{\n default: slots.default,\n additional: ({ group }: { group: GroupProvide }) => (\n <>\n { !props.hideDelimiters && (\n <div\n class=\"v-carousel__controls\"\n style={{\n left: props.verticalDelimiters === 'left' && props.verticalDelimiters ? 0 : 'auto',\n right: props.verticalDelimiters === 'right' ? 0 : 'auto',\n }}\n >\n { group.items.value.length > 0 && (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n color: props.color,\n icon: props.delimiterIcon,\n size: 'x-small',\n variant: 'text',\n },\n }}\n scoped\n >\n { group.items.value.map((item, index) => {\n const props = {\n 'aria-label': t('$vuetify.carousel.ariaLabel.delimiter', index + 1, group.items.value.length),\n class: [group.isSelected(item.id) && 'v-btn--active'],\n onClick: () => group.select(item.id, true),\n }\n\n return slots.item\n ? slots.item({ props, item })\n : (<VBtn { ...item } { ...props } />)\n }) }\n </VDefaultsProvider>\n ) }\n </div>\n )}\n\n { props.progress && (\n <VProgressLinear\n class=\"v-carousel__progress\"\n color={ typeof props.progress === 'string' ? props.progress : undefined }\n modelValue={ (group.getItemIndex(model.value) + 1) / group.items.value.length * 100 }\n />\n )}\n </>\n ),\n prev: slots.prev,\n next: slots.next,\n }}\n </VWindow>\n ))\n\n return {}\n },\n})\n\nexport type VCarousel = InstanceType<typeof VCarousel>\n"],"mappings":"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"}