chore: use shadcn-ui way to extract types from embla-carousel-vue module

This commit is contained in:
sadeghbarati 2024-06-15 10:53:48 +03:30
parent 7c8e03d81e
commit bf0f4ed6b2
7 changed files with 37 additions and 31 deletions

View File

@ -6,5 +6,5 @@ export { default as CarouselNext } from './CarouselNext.vue'
export { useCarousel } from './useCarousel' export { useCarousel } from './useCarousel'
export type { export type {
EmblaCarouselType as CarouselApi, UnwrapRefCarouselApi as CarouselApi,
} from 'embla-carousel' } from './interface'

View File

@ -1,18 +1,24 @@
import type { HTMLAttributes, UnwrapRef } from 'vue'
import type useEmblaCarousel from 'embla-carousel-vue'
import type { import type {
EmblaCarouselType as CarouselApi, EmblaCarouselVueType,
EmblaOptionsType as CarouselOptions, } from 'embla-carousel-vue'
EmblaPluginType as CarouselPlugin,
} from 'embla-carousel' type CarouselApi = EmblaCarouselVueType[1]
import type { HTMLAttributes, Ref } from 'vue' type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
type CarouselOptions = UseCarouselParameters[0]
type CarouselPlugin = UseCarouselParameters[1]
export type UnwrapRefCarouselApi = UnwrapRef<CarouselApi>
export interface CarouselProps { export interface CarouselProps {
opts?: CarouselOptions | Ref<CarouselOptions> opts?: CarouselOptions
plugins?: CarouselPlugin[] | Ref<CarouselPlugin[]> plugins?: CarouselPlugin
orientation?: 'horizontal' | 'vertical' orientation?: 'horizontal' | 'vertical'
} }
export interface CarouselEmits { export interface CarouselEmits {
(e: 'init-api', payload: CarouselApi): void (e: 'init-api', payload: UnwrapRefCarouselApi): void
} }
export interface WithClassAsProps { export interface WithClassAsProps {

View File

@ -1,10 +1,7 @@
import { createInjectionState } from '@vueuse/core' import { createInjectionState } from '@vueuse/core'
import emblaCarouselVue from 'embla-carousel-vue' import emblaCarouselVue from 'embla-carousel-vue'
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import type { import type { UnwrapRefCarouselApi as CarouselApi, CarouselEmits, CarouselProps } from './interface'
EmblaCarouselType as CarouselApi,
} from 'embla-carousel'
import type { CarouselEmits, CarouselProps } from './interface'
const [useProvideCarousel, useInjectCarousel] = createInjectionState( const [useProvideCarousel, useInjectCarousel] = createInjectionState(
({ ({
@ -27,7 +24,7 @@ const [useProvideCarousel, useInjectCarousel] = createInjectionState(
const canScrollNext = ref(false) const canScrollNext = ref(false)
const canScrollPrev = ref(false) const canScrollPrev = ref(false)
function onSelect(api?: CarouselApi) { function onSelect(api: CarouselApi) {
canScrollNext.value = api?.canScrollNext() || false canScrollNext.value = api?.canScrollNext() || false
canScrollPrev.value = api?.canScrollPrev() || false canScrollPrev.value = api?.canScrollPrev() || false
} }

View File

@ -6,5 +6,5 @@ export { default as CarouselNext } from './CarouselNext.vue'
export { useCarousel } from './useCarousel' export { useCarousel } from './useCarousel'
export type { export type {
EmblaCarouselType as CarouselApi, UnwrapRefCarouselApi as CarouselApi,
} from 'embla-carousel' } from './interface'

View File

@ -1,18 +1,24 @@
import type { HTMLAttributes, UnwrapRef } from 'vue'
import type useEmblaCarousel from 'embla-carousel-vue'
import type { import type {
EmblaCarouselType as CarouselApi, EmblaCarouselVueType,
EmblaOptionsType as CarouselOptions, } from 'embla-carousel-vue'
EmblaPluginType as CarouselPlugin,
} from 'embla-carousel' type CarouselApi = EmblaCarouselVueType[1]
import type { HTMLAttributes, Ref } from 'vue' type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
type CarouselOptions = UseCarouselParameters[0]
type CarouselPlugin = UseCarouselParameters[1]
export type UnwrapRefCarouselApi = UnwrapRef<CarouselApi>
export interface CarouselProps { export interface CarouselProps {
opts?: CarouselOptions | Ref<CarouselOptions> opts?: CarouselOptions
plugins?: CarouselPlugin[] | Ref<CarouselPlugin[]> plugins?: CarouselPlugin
orientation?: 'horizontal' | 'vertical' orientation?: 'horizontal' | 'vertical'
} }
export interface CarouselEmits { export interface CarouselEmits {
(e: 'init-api', payload: CarouselApi): void (e: 'init-api', payload: UnwrapRefCarouselApi): void
} }
export interface WithClassAsProps { export interface WithClassAsProps {

View File

@ -1,10 +1,7 @@
import { createInjectionState } from '@vueuse/core' import { createInjectionState } from '@vueuse/core'
import emblaCarouselVue from 'embla-carousel-vue' import emblaCarouselVue from 'embla-carousel-vue'
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import type { import type { UnwrapRefCarouselApi as CarouselApi, CarouselEmits, CarouselProps } from './interface'
EmblaCarouselType as CarouselApi,
} from 'embla-carousel'
import type { CarouselEmits, CarouselProps } from './interface'
const [useProvideCarousel, useInjectCarousel] = createInjectionState( const [useProvideCarousel, useInjectCarousel] = createInjectionState(
({ ({
@ -27,7 +24,7 @@ const [useProvideCarousel, useInjectCarousel] = createInjectionState(
const canScrollNext = ref(false) const canScrollNext = ref(false)
const canScrollPrev = ref(false) const canScrollPrev = ref(false)
function onSelect(api?: CarouselApi) { function onSelect(api: CarouselApi) {
canScrollNext.value = api?.canScrollNext() || false canScrollNext.value = api?.canScrollNext() || false
canScrollPrev.value = api?.canScrollPrev() || false canScrollPrev.value = api?.canScrollPrev() || false
} }

View File

@ -12,7 +12,7 @@ const DEPENDENCIES = new Map<string, string[]>([
['v-calendar', []], ['v-calendar', []],
['@tanstack/vue-table', []], ['@tanstack/vue-table', []],
['@unovis/vue', ['@unovis/ts']], ['@unovis/vue', ['@unovis/ts']],
['embla-carousel-vue', ['embla-carousel']], ['embla-carousel-vue', []],
['vee-validate', ['@vee-validate/zod', 'zod']], ['vee-validate', ['@vee-validate/zod', 'zod']],
]) ])
// Some dependencies latest tag were not compatible with Vue3. // Some dependencies latest tag were not compatible with Vue3.