{"version":3,"file":"VCarousel.mjs","names":["VBtn","VDefaultsProvider","VProgressLinear","makeVWindowProps","VWindow","IconValue","useLocale","useProxiedModel","onMounted","ref","watch","convertToUnit","genericComponent","propsFactory","useRender","makeVCarouselProps","color","String","cycle","Boolean","delimiterIcon","type","default","height","Number","hideDelimiters","hideDelimiterBackground","interval","validator","value","progress","verticalDelimiters","continuous","mandatory","showArrows","VCarousel","name","props","emits","val","setup","_ref","slots","model","t","windowRef","slideTimeout","restartTimeout","window","clearTimeout","startTimeout","setTimeout","group","next","requestAnimationFrame","_createVNode","$event","class","style","additional","_ref2","_Fragment","left","right","items","length","icon","size","variant","map","item","index","id","isSelected","onClick","select","_mergeProps","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 { makeVWindowProps, VWindow } from '@/components/VWindow/VWindow'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { onMounted, ref, watch } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VWindowSlots } from '@/components/VWindow/VWindow'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const makeVCarouselProps = propsFactory({\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) => Number(value) > 0,\n  },\n  progress: [Boolean, String],\n  verticalDelimiters: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n\n  ...makeVWindowProps({\n    continuous: true,\n    mandatory: 'force' as const,\n    showArrows: true,\n  }),\n}, 'VCarousel')\n\ntype VCarouselSlots = VWindowSlots & {\n  item: {\n    props: Record<string, any>\n    item: {\n      id: number\n      value: unknown\n      disabled: boolean | undefined\n    }\n  }\n}\n\nexport const VCarousel = genericComponent<VCarouselSlots>()({\n  name: 'VCarousel',\n\n  props: makeVCarouselProps(),\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          props.class,\n        ]}\n        style={[\n          { height: convertToUnit(props.height) },\n          props.style,\n        ]}\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                          id: `carousel-item-${item.id}`,\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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"}