@xwadex/fesd-next 0.3.2 → 0.3.4-10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useAnchors.tsx","../../src/shadcns/components/ui/alert.tsx","../../src/shadcns/components/ui/badge.tsx","../../src/shadcns/components/ui/button.tsx","../../src/shadcns/components/ui/carousel.tsx","../../src/shadcns/components/ui/chart.tsx","../../src/shadcns/components/ui/form.tsx","../../src/shadcns/components/ui/navigation-menu.tsx","../../src/shadcns/components/ui/sidebar.tsx","../../src/shadcns/components/ui/toggle-group.tsx","../../src/shadcns/components/ui/toggle.tsx","../../src/shadcns/lib/utils.ts","../../src/components/anchors/anchors.tsx","../../src/components/scroll-containers/lenis-scroll.tsx","../../src/components/scroll-containers/scroll-containers.tsx","../../src/components/scroll-containers/native-scroll.tsx","../../src/components/embla-carousels/embla-carousels-hooks.tsx","../../src/components/embla-carousels/embla-carousels.tsx","../../src/components/emblas/embla-context.tsx","../../src/components/emblas/embla.tsx","../../src/components/emblas/embla-container.tsx","../../src/components/emblas/emblas-pagination.tsx","../../src/components/tests/tests.tsx"],"names":["useRef","useCallback","offseters","lenis","cva","Slot","jsx","api","jsxs","React3","React4","React6","React8","registerAnchors","registerOffseters","Fragment","useEffect","useState","Lenis","useLayoutEffect","create","createContext","memo","useEffectEvent","useMemo","useEmblaCarousel","use","CarouselContext","Autoplay","emblaApi","React","total"],"mappings":"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","file":"index.js","sourcesContent":["\n\n// update: 2025.11.12\n// version: 0.0.3.bate\n// dev: wade\n\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\"\nimport { useAnimate, motionValue } from \"motion/react\"\nimport { create } from \"zustand\"\nimport { getScrollContainerStores, getRootLenis } from \"@/packages/components\"\n\nimport type { AnimationPlaybackControlsWithThen, Easing } from \"motion/react\"\nimport Lenis from \"lenis\"\n\nconst ANCHOR_ATTRIBUTE = \"data-anchor\"\nconst OFFSETER_ATTRIBUTE = \"data-anchor-offseter\"\n\nexport interface AnimateOptions {\n\tduration?: number\n\tdelay?: number\n\tease?: Easing | Easing[] | undefined\n\tonScroll?: (lenis?: Lenis) => void\n\tonScrolling?: (value: number) => void\n\tonScrolled?: (lenis?: Lenis) => void\n}\n\nexport interface AnchorOptions extends AnimateOptions {\n\tanchor: string,\n\tcontainer?: string,\n\toffseters?: string | string[]\n\tdirection?: \"x\" | \"y\"\n\talign?: \"start\" | \"center\" | \"end\"\n\toffset?: number\n}\n\nexport interface ScrollOptions extends AnimateOptions {\n\tcontrollerKey: string\n\tcontainerDom: HTMLElement | Window\n\tanchorScrollValue: { left: number, top: number }\n\tcontainerScrollValue: { left: number, top: number }\n\tdirection?: AnchorOptions[\"direction\"]\n}\n\nexport type AnimateController = AnimationPlaybackControlsWithThen\n\nexport interface AnchorsMethods {\n\tregisterAnchors: (name: string) => {\n\t\t[key: string]: string | React.RefObject<null>;\n\t\tref: React.RefObject<null>;\n\t};\n\tregisterOffseters: (name: string) => {\n\t\t[key: string]: string | React.RefObject<null>;\n\t\tref: React.RefObject<null>;\n\t};\n\tsetStores: (options: AnchorStoreOptions) => void;\n\tgetStores: () => AnchorsStores;\n\tscrollToAnchor: (anchorOptions: AnchorOptions) => void;\n}\n\nexport function useAnchors(): AnchorsMethods {\n\tconst [_, animate] = useAnimate()\n\n\tconst controllerRef = useRef<Map<string, AnimateController>>(new Map())\n\n\tconst scrollAnimations = useCallback(({\n\t\tcontrollerKey,\n\t\tcontainerDom,\n\t\tanchorScrollValue,\n\t\tcontainerScrollValue,\n\t\tdirection = \"y\",\n\t\tduration = 1,\n\t\tdelay = 0,\n\t\tease = [0, 1, .5, .99],\n\t\tonScroll: onPlay,\n\t\tonScrolled,\n\t\tonScrolling,\n\t\t...props\n\t}: ScrollOptions) => {\n\n\t\tif (direction !== \"y\" && direction !== \"x\") {\n\t\t\tconsole.error(`Scroll Direction isn't 'x' or 'y' `)\n\t\t\treturn\n\t\t}\n\n\t\tconst { left: scrollLeft, top: scrollTop } = containerScrollValue\n\t\tconst { left: anchorLeft, top: anchorTop } = anchorScrollValue\n\n\t\tconst isScrollX = direction === \"x\"\n\t\tconst isScrollY = direction === \"y\"\n\n\t\tconst startValue = isScrollX ? scrollLeft : scrollTop\n\t\tconst endValue = isScrollX ? anchorLeft : anchorTop\n\n\t\tif (startValue == endValue) {\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t\treturn\n\t\t}\n\n\t\tconst motionStartValue = motionValue(startValue)\n\n\t\tconst onUpdate = (value: number) => {\n\t\t\tconst left = isScrollX ? value : undefined\n\t\t\tconst top = isScrollY ? value : undefined\n\t\t\tcontainerDom.scrollTo({ left, top })\n\t\t\tonScrolling?.(value)\n\t\t}\n\n\t\tconst onComplete = () => {\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t\tonScrolled?.()\n\t\t}\n\n\t\tconst options = {\n\t\t\tduration,\n\t\t\tease,\n\t\t\tdelay,\n\t\t\tonPlay,\n\t\t\tonUpdate,\n\t\t\tonComplete,\n\t\t\t...props\n\t\t}\n\n\t\tcontrollerRef.current.set(\n\t\t\tcontrollerKey, animate(motionStartValue, endValue, options)\n\t\t)\n\t}, [])\n\n\tconst scrollToAnchor = useCallback((\n\t\tanchorOptions: AnchorOptions\n\t) => {\n\t\tconst {\n\t\t\tanchor: anchorName,\n\t\t\tcontainer: containerName,\n\t\t\toffseters,\n\t\t\talign,\n\t\t\toffset = 0,\n\t\t\tdirection = \"y\",\n\t\t\t...options\n\t\t} = anchorOptions\n\n\t\tconst anchorsStores = getAnchorsStores()\n\t\tconst scrollContainersStores = getScrollContainerStores()\n\n\t\tconst isScrolltoAnchor = anchorName !== \"#\"\n\t\tconst isScrollContainer = containerName && containerName !== \"window\"\n\t\tconst controllerKey = containerName ?? \"window\"\n\n\t\tif (controllerRef.current.has(controllerKey)) {\n\t\t\tcontrollerRef.current.get(controllerKey)?.stop()\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t}\n\n\t\tconst anchorDom = isScrolltoAnchor\n\t\t\t? anchorsStores.anchors.get(anchorName) as HTMLElement\n\t\t\t: undefined\n\t\tif (isScrolltoAnchor && !(anchorDom instanceof HTMLElement)) return\n\n\t\tconst containerDom = isScrollContainer\n\t\t\t? scrollContainersStores.containers.get(containerName) as HTMLElement\n\t\t\t: window\n\n\t\tif (!containerDom) return\n\n\t\tconst getOffseterDomClient = (offseters: string) => {\n\t\t\tconst offseterDom = anchorsStores.offseters.get(offseters) as HTMLElement\n\t\t\tconst { clientWidth, clientHeight } = offseterDom || {}\n\t\t\treturn { width: clientWidth ?? 0, height: clientHeight ?? 0 }\n\t\t}\n\n\t\tconst offsets = Array.isArray(offseters)\n\t\t\t? offseters.reduce((init: Record<string, number>, offseter: string) => {\n\t\t\t\tconst { width, height } = getOffseterDomClient(offseter)\n\t\t\t\treturn {\n\t\t\t\t\twidth: (init.width ?? 0) + width,\n\t\t\t\t\theight: (init.height ?? 0) + height\n\t\t\t\t}\n\t\t\t}, {})\n\t\t\t: typeof offseters == \"string\"\n\t\t\t\t? getOffseterDomClient(offseters as string)\n\t\t\t\t: { width: 0, height: 0 }\n\n\t\tconst offsetValue = {\n\t\t\twidth: direction === \"x\" ? offsets.width + offset : 0,\n\t\t\theight: direction === \"y\" ? offsets.height + offset : 0,\n\t\t}\n\n\t\tconst isLenisScroll = containerDom == window\n\t\t\t&& window.document.documentElement.classList.contains(\"lenis\")\n\t\t\t|| containerDom instanceof Lenis\n\n\t\tif (isLenisScroll) {\n\t\t\tconst lenis = (isScrollContainer ? (containerDom as Lenis) : getRootLenis()?.root)\n\t\t\t// TODO 尚未找到可以判斷已經移動到錨點位置的方式\n\t\t\tif (!lenis) return\n\n\t\t\tconst directionOffset = direction === \"x\"\n\t\t\t\t? offsetValue.width + offset\n\t\t\t\t: offsetValue.height + offset\n\n\t\t\t// TODO 尚未建立lenis options完整設定\n\t\t\tlenis.scrollTo(\n\t\t\t\tanchorDom ?? 0, {\n\t\t\t\toffset: (directionOffset * -1),\n\t\t\t\tonStart: (lenis) => options?.onScroll?.(lenis),\n\t\t\t\tonComplete: (lenis) => options?.onScrolled?.(lenis)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst containerScrollValue = {\n\t\t\ttop: Math.round(isScrollContainer\n\t\t\t\t? (containerDom as HTMLElement).scrollTop\n\t\t\t\t: (containerDom as Window).pageYOffset),\n\t\t\tleft: Math.round(isScrollContainer\n\t\t\t\t? (containerDom as HTMLElement).scrollLeft\n\t\t\t\t: pageXOffset)\n\t\t}\n\n\t\tconst containerRect = isScrollContainer\n\t\t\t? (containerDom as HTMLElement).getBoundingClientRect()\n\t\t\t: { top: 0, left: 0 }\n\n\t\tconst containerOffsetValue = {\n\t\t\tleft: containerScrollValue.left - (isScrollContainer ? containerRect.left : 0),\n\t\t\ttop: containerScrollValue.top - (isScrollContainer ? containerRect.top : 0)\n\t\t}\n\n\t\tconst anchorRect = anchorDom ? anchorDom.getBoundingClientRect() : { left: 0, top: 0 }\n\n\t\tconst anchorScrollValue = {\n\t\t\tleft: isScrolltoAnchor\n\t\t\t\t? Math.round(anchorRect.left + containerOffsetValue.left - offsetValue.width)\n\t\t\t\t: offsetValue.width,\n\t\t\ttop: isScrolltoAnchor\n\t\t\t\t? Math.round(anchorRect.top + containerOffsetValue.top - offsetValue.height)\n\t\t\t\t: offsetValue.height\n\t\t}\n\n\t\tscrollAnimations({\n\t\t\tcontrollerKey,\n\t\t\tcontainerDom,\n\t\t\tcontainerScrollValue,\n\t\t\tanchorScrollValue,\n\t\t\tdirection,\n\t\t\t...options\n\t\t})\n\n\t}, [])\n\n\tconst returnsMemo = useMemo(() => ({\n\t\tregisterAnchors,\n\t\tregisterOffseters,\n\t\tsetStores: setAnchorsStore,\n\t\tgetStores: getAnchorsStores,\n\t\tscrollToAnchor\n\t}), [scrollToAnchor])\n\n\treturn returnsMemo\n}\n\nexport interface RegistrationDatas {\n\tkey: keyof AnchorsStores\n\tname: string\n}\n\nexport function useRegistration({ key, name }: RegistrationDatas) {\n\tconst ref = useRef(null)\n\tconst attribute = key == \"anchors\" ? ANCHOR_ATTRIBUTE : OFFSETER_ATTRIBUTE\n\n\tuseLayoutEffect(() => {\n\t\tsetAnchorsStore({ key, action: \"add\", node: ref.current, name })\n\t\treturn () => { setAnchorsStore({ key, action: \"remove\", node: ref.current, name }) }\n\t}, [])\n\n\treturn { ref, [attribute]: name }\n}\n\nexport function registerAnchors(name: string) {\n\treturn useRegistration({ key: \"anchors\", name })\n}\n\nexport function registerOffseters(name: string) {\n\treturn useRegistration({ key: \"offseters\", name })\n}\n\nexport interface AnchorsStores {\n\tanchors: Map<string, HTMLElement | null>\n\toffseters: Map<string, HTMLElement | null>\n}\n\nexport const useAnchorsStores = create<AnchorsStores>()(() => ({\n\tanchors: new Map(),\n\toffseters: new Map(),\n}))\n\nexport const getAnchorsStores = () => useAnchorsStores.getState()\n\nexport interface AnchorStoreOptions extends RegistrationDatas {\n\tnode: HTMLDivElement | null\n\taction: \"add\" | \"remove\",\n}\n\nexport const setAnchorsStore = (options: AnchorStoreOptions) => {\n\tconst { key, action, name, node } = options\n\n\tuseAnchorsStores.setState(stores => {\n\t\tswitch (key) {\n\t\t\tcase \"anchors\":\n\t\t\t\tconst anchorDom = stores.anchors?.get(name)\n\t\t\t\tif (action == \"add\" && node instanceof HTMLElement) {\n\t\t\t\t\tif (anchorDom == node) return stores\n\t\t\t\t\tstores.anchors?.set(name, node)\n\n\t\t\t\t} else if (action == \"remove\" && anchorDom) {\n\t\t\t\t\tstores.anchors?.delete(name)\n\t\t\t\t}\n\n\t\t\t\treturn { anchors: stores.anchors }\n\n\t\t\tcase \"offseters\":\n\t\t\t\tconst offseterDom = stores.offseters?.get(name)\n\n\t\t\t\tif (action == \"add\" && node instanceof HTMLElement) {\n\t\t\t\t\tif (offseterDom == node) return stores\n\t\t\t\t\tstores.offseters?.set(name, node)\n\n\t\t\t\t} else if (action == \"remove\" && offseterDom) {\n\t\t\t\t\tstores.offseters?.delete(name)\n\t\t\t\t}\n\t\t\t\treturn { offseters: stores.offseters }\n\n\t\t\tdefault:\n\t\t\t\treturn stores\n\t\t}\n\t})\n}\n\n\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\n\nconst alertVariants = cva(\n\t'relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-card text-card-foreground',\n\t\t\t\tdestructive:\n\t\t\t\t\t'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nfunction Alert({\n\tclassName,\n\tvariant,\n\t...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert\"\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(alertVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-title\"\n\t\t\tclassName={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-description\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\n\nconst badgeVariants = cva(\n\t'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n\t\t\t\tsecondary:\n\t\t\t\t\t'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n\t\t\t\tdestructive:\n\t\t\t\t\t'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n\t\t\t\toutline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nfunction Badge({\n\tclassName,\n\tvariant,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'span';\n\n\treturn (\n\t\t<Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n\t);\n}\n\nexport { Badge, badgeVariants };\n","\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\nconst buttonVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n\t\t\t\tdestructive:\n\t\t\t\t\t'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n\t\t\t\toutline:\n\t\t\t\t\t'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n\t\t\t\tsecondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n\t\t\t\tghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n\t\t\t\tlink: 'text-primary underline-offset-4 hover:underline',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-4 py-2 has-[>svg]:px-3',\n\t\t\t\tsm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n\t\t\t\tlg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n\t\t\t\ticon: 'size-9',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction Button({\n\tclassName,\n\tvariant,\n\tsize,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'button'> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tasChild?: boolean;\n\t}) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport * as React from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\n\nimport { cn } from '@/packages/shadcns';\nimport { Button } from '@/packages/shadcns';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n\topts?: CarouselOptions;\n\tplugins?: CarouselPlugin;\n\torientation?: 'horizontal' | 'vertical';\n\tsetApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n\tcarouselRef: ReturnType<typeof useEmblaCarousel>[0];\n\tapi: ReturnType<typeof useEmblaCarousel>[1];\n\tscrollPrev: () => void;\n\tscrollNext: () => void;\n\tcanScrollPrev: boolean;\n\tcanScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n\tconst context = React.useContext(CarouselContext);\n\n\tif (!context) {\n\t\tthrow new Error('useCarousel must be used within a <Carousel />');\n\t}\n\n\treturn context;\n}\n\nfunction Carousel({\n\torientation = 'horizontal',\n\topts,\n\tsetApi,\n\tplugins,\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & CarouselProps) {\n\tconst [carouselRef, api] = useEmblaCarousel(\n\t\t{\n\t\t\t...opts,\n\t\t\taxis: orientation === 'horizontal' ? 'x' : 'y',\n\t\t},\n\t\tplugins,\n\t);\n\tconst [canScrollPrev, setCanScrollPrev] = React.useState(false);\n\tconst [canScrollNext, setCanScrollNext] = React.useState(false);\n\n\tconst onSelect = React.useCallback((api: CarouselApi) => {\n\t\tif (!api) return;\n\t\tsetCanScrollPrev(api.canScrollPrev());\n\t\tsetCanScrollNext(api.canScrollNext());\n\t}, []);\n\n\tconst scrollPrev = React.useCallback(() => {\n\t\tapi?.scrollPrev();\n\t}, [api]);\n\n\tconst scrollNext = React.useCallback(() => {\n\t\tapi?.scrollNext();\n\t}, [api]);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (event.key === 'ArrowLeft') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollPrev();\n\t\t\t} else if (event.key === 'ArrowRight') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollNext();\n\t\t\t}\n\t\t},\n\t\t[scrollPrev, scrollNext],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!api || !setApi) return;\n\t\tsetApi(api);\n\t}, [api, setApi]);\n\n\tReact.useEffect(() => {\n\t\tif (!api) return;\n\t\tonSelect(api);\n\t\tapi.on('reInit', onSelect);\n\t\tapi.on('select', onSelect);\n\n\t\treturn () => {\n\t\t\tapi?.off('select', onSelect);\n\t\t};\n\t}, [api, onSelect]);\n\n\treturn (\n\t\t<CarouselContext.Provider\n\t\t\tvalue={{\n\t\t\t\tcarouselRef,\n\t\t\t\tapi: api,\n\t\t\t\topts,\n\t\t\t\torientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n\t\t\t\tscrollPrev,\n\t\t\t\tscrollNext,\n\t\t\t\tcanScrollPrev,\n\t\t\t\tcanScrollNext,\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tonKeyDownCapture={handleKeyDown}\n\t\t\t\tclassName={cn('relative', className)}\n\t\t\t\trole=\"region\"\n\t\t\t\taria-roledescription=\"carousel\"\n\t\t\t\tdata-slot=\"carousel\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CarouselContext.Provider>\n\t);\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst { carouselRef, orientation } = useCarousel();\n\n\treturn (\n\t\t<div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex',\n\t\t\t\t\torientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst { orientation } = useCarousel();\n\n\treturn (\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\taria-roledescription=\"slide\"\n\t\t\tdata-slot=\"carousel-item\"\n\t\t\tclassName={cn(\n\t\t\t\t'min-w-0 shrink-0 grow-0 basis-full',\n\t\t\t\torientation === 'horizontal' ? 'pl-4' : 'pt-4',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CarouselPrevious({\n\tclassName,\n\tvariant = 'outline',\n\tsize = 'icon',\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-previous\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t'absolute size-8 rounded-full',\n\t\t\t\torientation === 'horizontal'\n\t\t\t\t\t? 'top-1/2 -left-12 -translate-y-1/2'\n\t\t\t\t\t: '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollPrev}\n\t\t\tonClick={scrollPrev}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowLeft />\n\t\t\t<span className=\"sr-only\">Previous slide</span>\n\t\t</Button>\n\t);\n}\n\nfunction CarouselNext({\n\tclassName,\n\tvariant = 'outline',\n\tsize = 'icon',\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollNext, canScrollNext } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-next\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t'absolute size-8 rounded-full',\n\t\t\t\torientation === 'horizontal'\n\t\t\t\t\t? 'top-1/2 -right-12 -translate-y-1/2'\n\t\t\t\t\t: '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollNext}\n\t\t\tonClick={scrollNext}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowRight />\n\t\t\t<span className=\"sr-only\">Next slide</span>\n\t\t</Button>\n\t);\n}\n\nexport {\n\ttype CarouselApi,\n\tCarousel,\n\tCarouselContent,\n\tCarouselItem,\n\tCarouselPrevious,\n\tCarouselNext,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/packages/shadcns';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error('useChart must be used within a <ChartContainer />');\n\t}\n\n\treturn context;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n\tconst colorConfig = Object.entries(config).filter(([, config]) => config.theme || config.color);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<style\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: Object.entries(THEMES)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t\t\t\t\t\t\t\t.map(([key, itemConfig]) => {\n\t\t\t\t\t\t\t\t\tconst color =\n\t\t\t\t\t\t\t\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color;\n\t\t\t\t\t\t\t\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('\\n')}\n}\n`,\n\t\t\t\t\t)\n\t\t\t\t\t.join('\\n'),\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = 'dot',\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<'div'> & {\n\t\thideLabel?: boolean;\n\t\thideIndicator?: boolean;\n\t\tindicator?: 'line' | 'dot' | 'dashed';\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === 'string'\n\t\t\t\t? config[label as keyof typeof config]?.label || label\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn('font-medium', labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn <div className={cn('font-medium', labelClassName)}>{value}</div>;\n\t}, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== 'dot';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey || item.name || item.dataKey || 'value'}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst indicatorColor = color || item.payload.fill || item.color;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.dataKey}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n\t\t\t\t\t\t\t\tindicator === 'dot' && 'items-center',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'h-2.5 w-2.5': indicator === 'dot',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'w-1': indicator === 'line',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'w-0 border-[1.5px] border-dashed bg-transparent':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === 'dashed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'my-0.5':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnestLabel && indicator === 'dashed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-bg': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-border': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'flex flex-1 justify-between leading-none',\n\t\t\t\t\t\t\t\t\t\t\tnestLabel ? 'items-end' : 'items-center',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{item.value && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = 'bottom',\n\tnameKey,\n}: React.ComponentProps<'div'> &\n\tPick<RechartsPrimitive.LegendProps, 'payload' | 'verticalAlign'> & {\n\t\thideIcon?: boolean;\n\t\tnameKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center justify-center gap-4',\n\t\t\t\tverticalAlign === 'top' ? 'pb-3' : 'pt-3',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload.map((item) => {\n\t\t\t\tconst key = `${nameKey || item.dataKey || 'value'}`;\n\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{itemConfig?.label}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n\tif (typeof payload !== 'object' || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n\t) {\n\t\tconfigLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n\tController,\n\tFormProvider,\n\tuseFormContext,\n\tuseFormState,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype FieldValues,\n} from 'react-hook-form';\n\nimport { cn, Label } from '@/packages/shadcns';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n\tname: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n\t...props\n}: ControllerProps<TFieldValues, TName>) => {\n\treturn (\n\t\t<FormFieldContext.Provider value={{ name: props.name }}>\n\t\t\t<Controller {...props} />\n\t\t</FormFieldContext.Provider>\n\t);\n};\n\nconst useFormField = () => {\n\tconst fieldContext = React.useContext(FormFieldContext);\n\tconst itemContext = React.useContext(FormItemContext);\n\tconst { getFieldState } = useFormContext();\n\tconst formState = useFormState({ name: fieldContext.name });\n\tconst fieldState = getFieldState(fieldContext.name, formState);\n\n\tif (!fieldContext) {\n\t\tthrow new Error('useFormField should be used within <FormField>');\n\t}\n\n\tconst { id } = itemContext;\n\n\treturn {\n\t\tid,\n\t\tname: fieldContext.name,\n\t\tformItemId: `${id}-form-item`,\n\t\tformDescriptionId: `${id}-form-item-description`,\n\t\tformMessageId: `${id}-form-item-message`,\n\t\t...fieldState,\n\t};\n};\n\ntype FormItemContextValue = {\n\tid: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst id = React.useId();\n\n\treturn (\n\t\t<FormItemContext.Provider value={{ id }}>\n\t\t\t<div data-slot=\"form-item\" className={cn('grid gap-2', className)} {...props} />\n\t\t</FormItemContext.Provider>\n\t);\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n\tconst { error, formItemId } = useFormField();\n\n\treturn (\n\t\t<Label\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-error={!!error}\n\t\t\tclassName={cn('data-[error=true]:text-destructive', className)}\n\t\t\thtmlFor={formItemId}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n\tconst { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n\treturn (\n\t\t<Slot\n\t\t\tdata-slot=\"form-control\"\n\t\t\tid={formItemId}\n\t\t\taria-describedby={\n\t\t\t\t!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={!!error}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n\tconst { formDescriptionId } = useFormField();\n\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"form-description\"\n\t\t\tid={formDescriptionId}\n\t\t\tclassName={cn('text-muted-foreground text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n\tconst { error, formMessageId } = useFormField();\n\tconst body = error ? String(error?.message ?? '') : props.children;\n\n\tif (!body) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"form-message\"\n\t\t\tid={formMessageId}\n\t\t\tclassName={cn('text-destructive text-sm', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{body}\n\t\t</p>\n\t);\n}\n\nexport {\n\tuseFormField,\n\tForm,\n\tFormItem,\n\tFormLabel,\n\tFormControl,\n\tFormDescription,\n\tFormMessage,\n\tFormField,\n};\n","\n\nimport * as React from 'react';\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport { ChevronDownIcon } from 'lucide-react';\n\nimport { cn } from '@/packages/shadcns';\n\nfunction NavigationMenu({\n\tclassName,\n\tchildren,\n\tviewport = true,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n\tviewport?: boolean;\n}) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Root\n\t\t\tdata-slot=\"navigation-menu\"\n\t\t\tdata-viewport={viewport}\n\t\t\tclassName={cn(\n\t\t\t\t'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t{viewport && <NavigationMenuViewport />}\n\t\t</NavigationMenuPrimitive.Root>\n\t);\n}\n\nfunction NavigationMenuList({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.List\n\t\t\tdata-slot=\"navigation-menu-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'group flex flex-1 list-none items-center justify-center gap-1',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuItem({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Item\n\t\t\tdata-slot=\"navigation-menu-item\"\n\t\t\tclassName={cn('relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst navigationMenuTriggerStyle = cva(\n\t'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1',\n);\n\nfunction NavigationMenuTrigger({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Trigger\n\t\t\tdata-slot=\"navigation-menu-trigger\"\n\t\t\tclassName={cn(navigationMenuTriggerStyle(), 'group', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}{' '}\n\t\t\t<ChevronDownIcon\n\t\t\t\tclassName=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t/>\n\t\t</NavigationMenuPrimitive.Trigger>\n\t);\n}\n\nfunction NavigationMenuContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Content\n\t\t\tdata-slot=\"navigation-menu-content\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto',\n\t\t\t\t'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuViewport({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n\treturn (\n\t\t<div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n\t\t\t<NavigationMenuPrimitive.Viewport\n\t\t\t\tdata-slot=\"navigation-menu-viewport\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction NavigationMenuLink({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Link\n\t\t\tdata-slot=\"navigation-menu-link\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuIndicator({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Indicator\n\t\t\tdata-slot=\"navigation-menu-indicator\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n\t\t</NavigationMenuPrimitive.Indicator>\n\t);\n}\n\nexport {\n\tNavigationMenu,\n\tNavigationMenuList,\n\tNavigationMenuItem,\n\tNavigationMenuContent,\n\tNavigationMenuTrigger,\n\tNavigationMenuLink,\n\tNavigationMenuIndicator,\n\tNavigationMenuViewport,\n\tnavigationMenuTriggerStyle,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport {\n\tcn,\n\tuseIsMobile,\n\tButton,\n\tInput,\n\tSeparator,\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n\tSkeleton\n} from '@/packages/shadcns';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n\tstate: 'expanded' | 'collapsed';\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\topenMobile: boolean;\n\tsetOpenMobile: (open: boolean) => void;\n\tisMobile: boolean;\n\ttoggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n\tconst context = React.useContext(SidebarContext);\n\tif (!context) {\n\t\tthrow new Error('useSidebar must be used within a SidebarProvider.');\n\t}\n\n\treturn context;\n}\n\nfunction SidebarProvider({\n\tdefaultOpen = true,\n\topen: openProp,\n\tonOpenChange: setOpenProp,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst isMobile = useIsMobile();\n\tconst [openMobile, setOpenMobile] = React.useState(false);\n\n\t// This is the internal state of the sidebar.\n\t// We use openProp and setOpenProp for control from outside the component.\n\tconst [_open, _setOpen] = React.useState(defaultOpen);\n\tconst open = openProp ?? _open;\n\tconst setOpen = React.useCallback(\n\t\t(value: boolean | ((value: boolean) => boolean)) => {\n\t\t\tconst openState = typeof value === 'function' ? value(open) : value;\n\t\t\tif (setOpenProp) {\n\t\t\t\tsetOpenProp(openState);\n\t\t\t} else {\n\t\t\t\t_setOpen(openState);\n\t\t\t}\n\n\t\t\t// This sets the cookie to keep the sidebar state.\n\t\t\tdocument.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n\t\t},\n\t\t[setOpenProp, open],\n\t);\n\n\t// Helper to toggle the sidebar.\n\tconst toggleSidebar = React.useCallback(() => {\n\t\treturn isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n\t}, [isMobile, setOpen, setOpenMobile]);\n\n\t// Adds a keyboard shortcut to toggle the sidebar.\n\tReact.useEffect(() => {\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleSidebar();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\treturn () => window.removeEventListener('keydown', handleKeyDown);\n\t}, [toggleSidebar]);\n\n\t// We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n\t// This makes it easier to style the sidebar with Tailwind classes.\n\tconst state = open ? 'expanded' : 'collapsed';\n\n\tconst contextValue = React.useMemo<SidebarContextProps>(\n\t\t() => ({\n\t\t\tstate,\n\t\t\topen,\n\t\t\tsetOpen,\n\t\t\tisMobile,\n\t\t\topenMobile,\n\t\t\tsetOpenMobile,\n\t\t\ttoggleSidebar,\n\t\t}),\n\t\t[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n\t);\n\n\treturn (\n\t\t<SidebarContext.Provider value={contextValue}>\n\t\t\t<TooltipProvider delayDuration={0}>\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"sidebar-wrapper\"\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'--sidebar-width': SIDEBAR_WIDTH,\n\t\t\t\t\t\t\t'--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</TooltipProvider>\n\t\t</SidebarContext.Provider>\n\t);\n}\n\nfunction Sidebar({\n\tside = 'left',\n\tvariant = 'sidebar',\n\tcollapsible = 'offcanvas',\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tside?: 'left' | 'right';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n\tconst { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n\tif (collapsible === 'none') {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n\t\t\t\t<SheetContent\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\t\tdata-mobile=\"true\"\n\t\t\t\t\tclassName=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\tside={side}\n\t\t\t\t>\n\t\t\t\t\t<SheetHeader className=\"sr-only\">\n\t\t\t\t\t\t<SheetTitle>Sidebar</SheetTitle>\n\t\t\t\t\t\t<SheetDescription>Displays the mobile sidebar.</SheetDescription>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">{children}</div>\n\t\t\t\t</SheetContent>\n\t\t\t</Sheet>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group peer text-sidebar-foreground hidden md:block\"\n\t\t\tdata-state={state}\n\t\t\tdata-collapsible={state === 'collapsed' ? collapsible : ''}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t\tdata-slot=\"sidebar\"\n\t\t>\n\t\t\t{/* This is what handles the sidebar gap on desktop */}\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar-gap\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n\t\t\t\t\t'group-data-[collapsible=offcanvas]:w-0',\n\t\t\t\t\t'group-data-[side=right]:rotate-180',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar-container\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n\t\t\t\t\tside === 'left'\n\t\t\t\t\t\t? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n\t\t\t\t\t\t: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n\t\t\t\t\t// Adjust the padding for floating and inset variants.\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar-inner\"\n\t\t\t\t\tclassName=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n\tconst { toggleSidebar } = useSidebar();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-sidebar=\"trigger\"\n\t\t\tdata-slot=\"sidebar-trigger\"\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"icon\"\n\t\t\tclassName={cn('size-7', className)}\n\t\t\tonClick={(event) => {\n\t\t\t\tonClick?.(event);\n\t\t\t\ttoggleSidebar();\n\t\t\t}}\n\t\t\t{...props}\n\t\t>\n\t\t\t<PanelLeftIcon />\n\t\t\t<span className=\"sr-only\">Toggle Sidebar</span>\n\t\t</Button>\n\t);\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n\tconst { toggleSidebar } = useSidebar();\n\n\treturn (\n\t\t<button\n\t\t\tdata-sidebar=\"rail\"\n\t\t\tdata-slot=\"sidebar-rail\"\n\t\t\taria-label=\"Toggle Sidebar\"\n\t\t\ttabIndex={-1}\n\t\t\tonClick={toggleSidebar}\n\t\t\ttitle=\"Toggle Sidebar\"\n\t\t\tclassName={cn(\n\t\t\t\t'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n\t\t\t\t'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n\t\t\t\t'[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n\t\t\t\t'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n\t\t\t\t'[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n\t\t\t\t'[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n\treturn (\n\t\t<main\n\t\t\tdata-slot=\"sidebar-inset\"\n\t\t\tclassName={cn(\n\t\t\t\t'bg-background relative flex w-full flex-1 flex-col',\n\t\t\t\t'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n\treturn (\n\t\t<Input\n\t\t\tdata-slot=\"sidebar-input\"\n\t\t\tdata-sidebar=\"input\"\n\t\t\tclassName={cn('bg-background h-8 w-full shadow-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-header\"\n\t\t\tdata-sidebar=\"header\"\n\t\t\tclassName={cn('flex flex-col gap-2 p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-footer\"\n\t\t\tdata-sidebar=\"footer\"\n\t\t\tclassName={cn('flex flex-col gap-2 p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n\treturn (\n\t\t<Separator\n\t\t\tdata-slot=\"sidebar-separator\"\n\t\t\tdata-sidebar=\"separator\"\n\t\t\tclassName={cn('bg-sidebar-border mx-2 w-auto', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-content\"\n\t\t\tdata-sidebar=\"content\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-group\"\n\t\t\tdata-sidebar=\"group\"\n\t\t\tclassName={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupLabel({\n\tclassName,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'div';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-group-label\"\n\t\t\tdata-sidebar=\"group-label\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupAction({\n\tclassName,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-group-action\"\n\t\t\tdata-sidebar=\"group-action\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t'after:absolute after:-inset-2 md:after:hidden',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-group-content\"\n\t\t\tdata-sidebar=\"group-content\"\n\t\t\tclassName={cn('w-full text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"sidebar-menu\"\n\t\t\tdata-sidebar=\"menu\"\n\t\t\tclassName={cn('flex w-full min-w-0 flex-col gap-1', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"sidebar-menu-item\"\n\t\t\tdata-sidebar=\"menu-item\"\n\t\t\tclassName={cn('group/menu-item relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst sidebarMenuButtonVariants = cva(\n\t'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n\t\t\t\toutline:\n\t\t\t\t\t'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-8 text-sm',\n\t\t\t\tsm: 'h-7 text-xs',\n\t\t\t\tlg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction SidebarMenuButton({\n\tasChild = false,\n\tisActive = false,\n\tvariant = 'default',\n\tsize = 'default',\n\ttooltip,\n\tclassName,\n\t...props\n}: React.ComponentProps<'button'> & {\n\tasChild?: boolean;\n\tisActive?: boolean;\n\ttooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n\tconst Comp = asChild ? Slot : 'button';\n\tconst { isMobile, state } = useSidebar();\n\n\tconst button = (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-button\"\n\t\t\tdata-sidebar=\"menu-button\"\n\t\t\tdata-size={size}\n\t\t\tdata-active={isActive}\n\t\t\tclassName={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n\n\tif (!tooltip) {\n\t\treturn button;\n\t}\n\n\tif (typeof tooltip === 'string') {\n\t\ttooltip = {\n\t\t\tchildren: tooltip,\n\t\t};\n\t}\n\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger asChild>{button}</TooltipTrigger>\n\t\t\t<TooltipContent\n\t\t\t\tside=\"right\"\n\t\t\t\talign=\"center\"\n\t\t\t\thidden={state !== 'collapsed' || isMobile}\n\t\t\t\t{...tooltip}\n\t\t\t/>\n\t\t</Tooltip>\n\t);\n}\n\nfunction SidebarMenuAction({\n\tclassName,\n\tasChild = false,\n\tshowOnHover = false,\n\t...props\n}: React.ComponentProps<'button'> & {\n\tasChild?: boolean;\n\tshowOnHover?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-action\"\n\t\t\tdata-sidebar=\"menu-action\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t'after:absolute after:-inset-2 md:after:hidden',\n\t\t\t\t'peer-data-[size=sm]/menu-button:top-1',\n\t\t\t\t'peer-data-[size=default]/menu-button:top-1.5',\n\t\t\t\t'peer-data-[size=lg]/menu-button:top-2.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tshowOnHover &&\n\t\t\t\t'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-menu-badge\"\n\t\t\tdata-sidebar=\"menu-badge\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n\t\t\t\t'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n\t\t\t\t'peer-data-[size=sm]/menu-button:top-1',\n\t\t\t\t'peer-data-[size=default]/menu-button:top-1.5',\n\t\t\t\t'peer-data-[size=lg]/menu-button:top-2.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSkeleton({\n\tclassName,\n\tshowIcon = false,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tshowIcon?: boolean;\n}) {\n\t// Random width between 50 to 90%.\n\tconst width = React.useMemo(() => {\n\t\treturn `${Math.floor(Math.random() * 40) + 50}%`;\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-menu-skeleton\"\n\t\t\tdata-sidebar=\"menu-skeleton\"\n\t\t\tclassName={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{showIcon && (\n\t\t\t\t<Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />\n\t\t\t)}\n\t\t\t<Skeleton\n\t\t\t\tclassName=\"h-4 max-w-(--skeleton-width) flex-1\"\n\t\t\t\tdata-sidebar=\"menu-skeleton-text\"\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t'--skeleton-width': width,\n\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"sidebar-menu-sub\"\n\t\t\tdata-sidebar=\"menu-sub\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"sidebar-menu-sub-item\"\n\t\t\tdata-sidebar=\"menu-sub-item\"\n\t\t\tclassName={cn('group/menu-sub-item relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSubButton({\n\tasChild = false,\n\tsize = 'md',\n\tisActive = false,\n\tclassName,\n\t...props\n}: React.ComponentProps<'a'> & {\n\tasChild?: boolean;\n\tsize?: 'sm' | 'md';\n\tisActive?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'a';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-sub-button\"\n\t\t\tdata-sidebar=\"menu-sub-button\"\n\t\t\tdata-size={size}\n\t\t\tdata-active={isActive}\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n\t\t\t\tsize === 'sm' && 'text-xs',\n\t\t\t\tsize === 'md' && 'text-sm',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tSidebar,\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarGroupAction,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarHeader,\n\tSidebarInput,\n\tSidebarInset,\n\tSidebarMenu,\n\tSidebarMenuAction,\n\tSidebarMenuBadge,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n\tSidebarMenuSkeleton,\n\tSidebarMenuSub,\n\tSidebarMenuSubButton,\n\tSidebarMenuSubItem,\n\tSidebarProvider,\n\tSidebarRail,\n\tSidebarSeparator,\n\tSidebarTrigger,\n\tuseSidebar,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';\nimport { type VariantProps } from 'class-variance-authority';\n\nimport { cn, toggleVariants } from '@/packages/shadcns';\n\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n\tsize: 'default',\n\tvariant: 'default',\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cn(\n\t\t\t\t'group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n\tconst context = React.useContext(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tclassName={cn(\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\t'min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport * as React from 'react';\nimport * as TogglePrimitive from '@radix-ui/react-toggle';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\nconst toggleVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-transparent',\n\t\t\t\toutline:\n\t\t\t\t\t'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-2 min-w-9',\n\t\t\t\tsm: 'h-8 px-1.5 min-w-8',\n\t\t\t\tlg: 'h-10 px-2.5 min-w-10',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction Toggle({\n\tclassName,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<TogglePrimitive.Root\n\t\t\tdata-slot=\"toggle\"\n\t\t\tclassName={cn(toggleVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Toggle, toggleVariants };\n","import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs: ClassValue[]): string {\n\treturn twMerge(clsx(...inputs));\n}\n","\n\n// update: 2025.11.12\n// version: 0.0.2.bate\n// dev: wade\n\nimport { useAnchors } from \"@/packages/hooks\"\nimport type { AnchorOptions } from \"@/packages/hooks\"\nimport { cn } from \"@/packages/shadcns\"\n\n\ninterface PropsType extends React.ComponentProps<\"div\"> {\n\tname: string\n}\n\nexport const AnchorTarget: React.FC<PropsType> = ({ name, ...props }) => {\n\tconst { registerAnchors } = useAnchors()\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\t{...registerAnchors(name)}\n\t\t/>\n\t)\n}\n\nexport const AnchorOffseter: React.FC<PropsType> = ({ name, ...props }) => {\n\tconst { registerOffseters } = useAnchors()\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\t{...registerOffseters(name)}\n\t\t/>\n\t)\n}\n\ntype TriggerProps = AnchorOptions & React.ComponentProps<\"div\"> & {}\n\nexport const AnchorTrigger: React.FC<TriggerProps> = ({\n\tchildren,\n\tclassName,\n\t...options\n}) => {\n\tconst { scrollToAnchor } = useAnchors()\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(className)}\n\t\t\tonClick={() => scrollToAnchor(options)}\n\t\t>{children}</div>\n\t)\n}\n\nexport const Anchors = {\n\tTrigger: AnchorTrigger,\n\tTarget: AnchorTarget,\n\tOffseter: AnchorOffseter\n}\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { memo, useEffect, useEffectEvent, useLayoutEffect, useRef, useState } from \"react\"\nimport { ReactLenis, useLenis, } from \"lenis/react\"\nimport Lenis from 'lenis'\nimport { create } from \"zustand\"\nimport { ScrollContainerContext, setScrollContainerStore } from \"./scroll-containers\"\nimport { cn } from \"@/packages/shadcns\"\nimport type { LenisRef } from \"lenis/react\"\nimport type { LenisOptions } from \"lenis\"\n\nexport interface LenisScrollProps {\n\troot?: boolean | \"asChild\"\n\tname?: string\n\toptions?: LenisOptions\n\tchildren?: React.ReactNode\n\tclassName?: string\n}\n\nexport const LenisScroll: React.FC<LenisScrollProps> = memo((props) => {\n\n\treturn (\n\t\t<>{props?.root == true\n\t\t\t? <LenisRootScroll {...props} />\n\t\t\t: <LenisContainerScroll {...props} />\n\t\t}\t</>)\n})\n\nexport const LenisRootScroll: React.FC<LenisScrollProps> = memo(({\n\troot,\n\toptions\n}) => {\n\n\tconst lenis = useLenis()\n\tconst lenisRef = useRef<LenisRef>(null)\n\n\tconst registerRootLenis = useEffectEvent(() => {\n\t\tif (!root == true || !lenis) return\n\t\tsetRootLenis(lenis)\n\t})\n\n\tuseEffect(() => { registerRootLenis() }, [lenis])\n\n\treturn (\n\t\t<ReactLenis\n\t\t\tref={lenisRef}\n\t\t\troot={root}\n\t\t\toptions={{\n\t\t\t\tautoRaf: true,\n\t\t\t\tlerp: 0.0005,\n\t\t\t\tduration: 1.5,\n\t\t\t\tsmoothWheel: true,\n\t\t\t\t...options\n\t\t\t}} />\n\t)\n})\n\ntype LenisScrollContainerProps = Omit<LenisScrollProps, \"root\">\ntype RefStateType = React.RefObject<HTMLDivElement | null> | undefined\n\nexport const LenisContainerScroll: React.FC<LenisScrollContainerProps> = memo(({\n\tname,\n\tclassName,\n\tchildren,\n\toptions,\n\t...restProps\n}) => {\n\n\tconst [containerRef, setContainerRef] = useState<RefStateType>();\n\n\tconst wrapperRef = useRef<HTMLDivElement>(null)\n\tconst contentRef = useRef<HTMLDivElement>(null)\n\n\tconst initLenis = useEffectEvent(() => {\n\t\tif (!wrapperRef.current || !contentRef.current || !name) return\n\n\t\tconst lenis = new Lenis({\n\t\t\twrapper: wrapperRef.current,\n\t\t\tcontent: contentRef.current,\n\t\t\tautoRaf: true,\n\t\t\t...options\n\t\t})\n\n\t\tsetContainerRef(contentRef)\n\t\tsetScrollContainerStore({ name, action: \"add\", node: lenis })\n\n\t\treturn () => {\n\t\t\tsetScrollContainerStore({ name, action: \"remove\" })\n\t\t\tlenis?.destroy?.()\n\t\t}\n\t})\n\n\tuseLayoutEffect(() => {\n\t\tconst effect = initLenis()\n\t\treturn effect\n\t}, [name, options])\n\n\treturn (\n\t\t<div\n\t\t\tref={wrapperRef}\n\t\t\tdata-lenis-scroll={name}\n\t\t\tclassName={cn(\"group overflow-hidden\", className)}\n\t\t\t{...restProps}\n\n\t\t>\n\t\t\t<div\n\t\t\t\tref={contentRef}\n\t\t\t\tclassName={cn(\"h-full\", \"relative\", \"will-change-transform overscroll-contain\")}\n\t\t\t>\n\t\t\t\t<ScrollContainerContext value={{ containerRef }}>\n\t\t\t\t\t{children}\n\t\t\t\t</ScrollContainerContext>\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n\ninterface LenisStores {\n\troot?: Lenis | null\n}\n\nexport const useLenisStores = create<LenisStores>()(() => ({\n\troot: null,\n}))\n\nexport const setRootLenis = (lenis: Lenis) => useLenisStores.setState(() => {\n\treturn { root: lenis }\n})\n\nexport const getRootLenis = () => useLenisStores.getState()\n\n\n\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { createContext, use } from \"react\"\nimport Lenis from \"lenis\"\nimport { create } from \"zustand\"\nimport { NativeScroll } from \"./native-scroll\"\nimport { LenisScroll, LenisScrollProps } from \"./lenis-scroll\"\n\ntype PropsType<T extends React.ElementType = \"div\"> = React.ComponentProps<T> & LenisScrollProps & {\n\tname: string\n\tlenis?: boolean\n}\n\nexport const ScrollContainer = <T extends React.ElementType = \"div\">({\n\tname, lenis = false, ...props\n}: PropsType<T>) => {\n\n\treturn (\n\t\t<>{lenis\n\t\t\t? <LenisScroll name={name} {...props} />\n\t\t\t: <NativeScroll name={name} {...props} />\n\t\t}</>\n\t)\n}\n\nexport interface ScrollContainerContext {\n\tcontainerRef: React.RefObject<HTMLDivElement | null> | undefined\n}\n\nexport const ScrollContainerContext = createContext<ScrollContainerContext | null>(null)\n\nexport const useScrollContainerContext = () => {\n\tconst context = use(ScrollContainerContext)\n\tif (!context) throw new Error(\"useScrollContainerContext must be used inside ScrollContainerProvider\")\n\treturn context\n}\n\nexport interface ScrollContainersStores {\n\tcontainers: Map<string, Lenis | HTMLDivElement | null>\n}\n\nexport const useScrollContainersStores = create<ScrollContainersStores>()(() => ({\n\tcontainers: new Map(),\n}))\n\n\nexport const getScrollContainer = (name: string) => {\n\tconst stores = useScrollContainersStores.getState()\n\treturn stores.containers?.get(name)\n}\n\nexport const getScrollContainerStores = () => useScrollContainersStores.getState()\n\nexport interface SetStoreOptions {\n\tname: string\n\tnode?: Lenis | HTMLDivElement | null\n\taction: \"add\" | \"remove\",\n}\n\nexport const setScrollContainerStore = (options: SetStoreOptions) => {\n\tconst { action, name, node } = options\n\n\tuseScrollContainersStores.setState(stores => {\n\t\tconst containerDom = stores.containers?.get(name)\n\t\tconst isContainerNode = node instanceof Lenis || node instanceof HTMLDivElement\n\n\t\tif (action == \"add\" && isContainerNode) {\n\t\t\tif (containerDom == node) return stores\n\t\t\t// console.log(\"node\", node, name);\n\t\t\tstores.containers?.set(name, node)\n\n\t\t} else if (action == \"remove\" && containerDom) {\n\t\t\tstores.containers?.delete(name)\n\t\t}\n\n\t\treturn { containers: stores.containers }\n\t})\n}\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { memo, useEffectEvent, useEffect, useRef, useState } from \"react\"\nimport { ScrollContainerContext, setScrollContainerStore } from \"./scroll-containers\"\nimport { cn } from \"@/packages/shadcns\"\n\ntype PropsType<T extends React.ElementType = \"div\"> = React.ComponentProps<T> & {\n\tname: string\n\ttag?: T\n}\n\nexport const NativeScroll = memo(<T extends React.ElementType = \"div\">({\n\ttag: Component = \"div\",\n\tname,\n\tclassName,\n\t...restProps\n}: PropsType<T>) => {\n\n\tconst componentRef = useRef<HTMLDivElement | null>(null)\n\tconst [containerRef, setContainerRef] = useState<React.RefObject<HTMLDivElement | null> | undefined>();\n\n\tconst nativeEffect = useEffectEvent(() => {\n\t\tif (!componentRef.current) return\n\t\tsetContainerRef(componentRef)\n\t\tsetScrollContainerStore({ name, action: \"add\", node: componentRef.current })\n\t\treturn () => { setScrollContainerStore({ name, action: \"remove\" }) }\n\t})\n\n\tuseEffect(() => {\n\t\tconst effect = nativeEffect()\n\t\treturn effect\n\t}, [componentRef?.current])\n\n\treturn (\n\t\t<ScrollContainerContext value={{ containerRef }} >\n\t\t\t<Component\n\t\t\t\tref={componentRef}\n\t\t\t\tdata-native-scroll={name}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-auto\",\n\t\t\t\t\t\"will-change-transform\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t</ScrollContainerContext>\n\t)\n})\n","\n\n// update: 2025.11.20\n// version: 0.0.1.bate\n// dev: wade\n\nimport { useCallback, useEffect, useEffectEvent, useMemo, useState } from \"react\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport { WheelGesturesPlugin } from \"embla-carousel-wheel-gestures\"\nimport Autoplay from \"embla-carousel-autoplay\"\nimport AutoScroll from \"embla-carousel-auto-scroll\"\nimport AutoHeight from \"embla-carousel-auto-height\"\nimport ClassNames from \"embla-carousel-class-names\"\nimport Fade from \"embla-carousel-fade\"\nimport type { UseEmblaCarouselType } from \"embla-carousel-react\"\nimport type { AutoplayOptionsType } from \"embla-carousel-autoplay\"\nimport type { AutoScrollOptionsType } from \"embla-carousel-auto-scroll\"\nimport type { AutoHeightOptionsType } from \"embla-carousel-auto-height\"\nimport type { ClassNamesOptionsType } from \"embla-carousel-class-names\"\nimport type { FadeOptionsType } from \"embla-carousel-fade\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\n\nexport interface EmblaCarouselsHooksTypes {\n\toptions?: CarouselOptions\n\tautoplay?: AutoplayOptionsType | true\n\tautoScroll?: AutoScrollOptionsType | true\n\tclassNames?: ClassNamesOptionsType | true\n\tautoHeight?: AutoHeightOptionsType | true\n\tfade?: FadeOptionsType | true\n\twheel?: {\n\t\twheelDraggingClass?: string\n\t\tforceWheelAxis?: \"x\" | \"y\"\n\t\ttarget?: Element\n\t} | true\n\tsetApi?: (api: CarouselApi) => void\n}\n\nexport function emblaCarouselsHooks({\n\toptions,\n\tautoplay,\n\tautoScroll,\n\tclassNames,\n\tautoHeight,\n\tfade,\n\twheel,\n\tsetApi,\n}: EmblaCarouselsHooksTypes) {\n\n\tconst orientation = options?.axis ?? \"x\"\n\n\tconst plugins = useMemo(() => ([\n\t\tautoplay && Autoplay(typeof autoplay == \"boolean\" ? undefined : autoplay),\n\t\tautoScroll && AutoScroll(typeof autoScroll == \"boolean\" ? undefined : autoScroll),\n\t\tautoHeight && AutoHeight(typeof autoHeight == \"boolean\" ? undefined : autoHeight),\n\t\tclassNames && ClassNames(typeof classNames == \"boolean\" ? undefined : classNames),\n\t\tfade && Fade(typeof fade == \"boolean\" ? undefined : fade),\n\t\twheel && WheelGesturesPlugin(typeof wheel == \"boolean\" ? undefined : wheel),\n\t].filter(\n\t\tplugin => plugin\n\t)), [\n\t\tautoplay,\n\t\tautoScroll,\n\t\tclassNames,\n\t\tfade,\n\t\twheel,\n\t\tautoHeight\n\t]) as any[]\n\n\tconst [emblaRef, emblaApi] = useEmblaCarousel(options, plugins)\n\n\tconst [currentIndex, setCurrentIndex] = useState(0)\n\n\tconst [isScrollPrev, setIsScrollPrev] = useState(false)\n\tconst [isScrollNext, setIsScrollNext] = useState(false)\n\n\tconst scrollPrev = useCallback(() => {\n\t\temblaApi?.scrollPrev()\n\t}, [emblaApi])\n\n\tconst scrollNext = useCallback(() => {\n\t\temblaApi?.scrollNext()\n\t}, [emblaApi])\n\n\tconst onKeyDownCapture = useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\tconsole.log(\"key...\")\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault()\n\t\t\tscrollPrev()\n\t\t} else if (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault()\n\t\t\tscrollNext()\n\t\t}\n\t}, [scrollPrev, scrollNext])\n\n\tconst onSelect = useCallback((api: CarouselApi) => {\n\t\tif (!api) return\n\t\tsetCurrentIndex(api?.selectedScrollSnap())\n\t\tsetIsScrollPrev(api.canScrollPrev())\n\t\tsetIsScrollNext(api.canScrollNext())\n\t}, [])\n\n\tconst initalEffect = useEffectEvent(() => {\n\t\tif (!emblaApi || !setApi) return\n\n\t\tsetApi?.(emblaApi)\n\t\tonSelect(emblaApi)\n\n\t\temblaApi.on(\"reInit\", onSelect)\n\t\temblaApi.on(\"select\", onSelect)\n\n\t\treturn () => {\n\t\t\temblaApi?.off(\"select\", onSelect)\n\t\t}\n\t})\n\n\tuseEffect(() => {\n\t\tconst events = initalEffect()\n\t\treturn () => { events?.() }\n\t}, [emblaApi])\n\n\n\treturn {\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t\tonKeyDownCapture\n\t} as {\n\t\temblaRef: (node: HTMLElement | null) => void\n\t\temblaApi: CarouselApi\n\t\torientation: \"x\" | \"y\"\n\t\tcurrentIndex: number\n\t\tisScrollPrev: boolean\n\t\tisScrollNext: boolean\n\t\tscrollPrev: () => void\n\t\tscrollNext: () => void\n\t\tonKeyDownCapture: (event: React.KeyboardEvent<HTMLDivElement>) => void\n\t}\n\n}\n","\n\n// update: 2025.11.20\n// version: 0.0.1.bate\n// dev: wade\n\nimport { createContext, memo, use, useMemo } from \"react\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport { emblaCarouselsHooks, } from \"./embla-carousels-hooks\"\nimport { cn } from \"@/packages/shadcns\"\nimport type { EmblaCarouselsHooksTypes } from \"./embla-carousels-hooks\"\n\nexport type CarouselsContextProps = {\n\temblaRef: ReturnType<typeof useEmblaCarousel>[0]\n\temblaApi: ReturnType<typeof useEmblaCarousel>[1]\n\tcurrentIndex?: number\n\torientation: \"x\" | \"y\"\n\tisScrollPrev: boolean\n\tisScrollNext: boolean\n\tscrollPrev: () => void\n\tscrollNext: () => void\n}\n\nconst CarouselsContext = createContext<CarouselsContextProps | null>(null)\n\nexport const useCarouselsContext = () => {\n\tconst context = use(CarouselsContext)\n\tif (!context) throw new Error(\"useCarousel must be used within a <Carousel />\")\n\treturn context\n}\n\nexport interface PropsTypes extends EmblaCarouselsHooksTypes, React.ComponentProps<\"div\"> { }\n\nexport const EmblaCarouselsRoots: React.FC<PropsTypes> = memo(({\n\tchildren,\n\tclassName,\n\tsetApi,\n\toptions,\n\tautoplay,\n\tautoScroll,\n\tclassNames,\n\tautoHeight,\n\tfade,\n\twheel,\n\t...props\n}) => {\n\n\tconst {\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t\tonKeyDownCapture,\n\t} = emblaCarouselsHooks({\n\t\tsetApi,\n\t\toptions,\n\t\tautoplay,\n\t\tautoScroll,\n\t\tclassNames,\n\t\tautoHeight,\n\t\tfade,\n\t\twheel,\n\t})\n\n\tconst contextValue = useMemo(() => ({\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t}), [\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t])\n\n\treturn (\n\t\t<CarouselsContext value={contextValue}>\n\t\t\t<div\n\t\t\t\tdata-component=\"embla-carousels\"\n\t\t\t\tonKeyDownCapture={onKeyDownCapture}\n\t\t\t\tclassName={cn(\"relative overflow-hidden\", className)}\n\t\t\t\taria-roledescription=\"embla-carousels\"\n\t\t\t\trole=\"region\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CarouselsContext>\n\t)\n})\n\nexport const EmblaCarouselsContents: React.FC<React.ComponentProps<\"div\">> = memo(({ className, ...props }) => {\n\tconst { emblaRef, orientation } = useCarouselsContext()\n\n\treturn (\n\t\t<div\n\t\t\tref={emblaRef}\n\t\t\tclassName=\"overflow-hidden\"\n\t\t\tdata-component=\"embla-carousels-contents\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex\",\n\t\t\t\t\torientation === \"x\" ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t)\n})\n\nexport const EmblaCarouselsSlides: React.FC<React.ComponentProps<\"div\">> = memo(({ className, ...props }) => {\n\n\treturn (\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\taria-roledescription=\"slide\"\n\t\t\tdata-component=\"embla-carousels-slides\"\n\t\t\tclassName={cn(\n\t\t\t\t\"min-w-0 shrink-0 grow-0 basis-full\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n})\n\nexport const EmblaCarousels = {\n\tRoots: EmblaCarouselsRoots,\n\tContents: EmblaCarouselsContents,\n\tSlides: EmblaCarouselsSlides,\n}\n\n","\n\n\nimport { createContext, use } from \"react\"\nimport type { EmblaViewportRefType } from \"embla-carousel-react\"\nimport type { EmblaCarouselType } from 'embla-carousel';\n\ninterface CarouselContextTypes {\n\tdatas: []\n\temblaRef?: EmblaViewportRefType\n\temblaApi?: EmblaCarouselType | null\n\n\tselectIndex: number\n\tscrollSnaps: number[]\n\n\tnextScroll: () => void\n\tprevScroll: () => void\n\tscrollToIndex: (index: number) => void\n\n\tautoPlayReset: () => void\n\tautoPlayStop: () => void\n\tautoPlayPlay: () => void\n}\n\nconst CarouselContext = createContext<CarouselContextTypes | null>(null)\n\nexport const CarouselContextProvider = (props: {\n\tchildren: React.ReactNode\n\tvalue: CarouselContextTypes\n}) => {\n\treturn <CarouselContext {...props} />\n}\n\nexport const useCarouselContext = () => {\n\tconst context = use(CarouselContext)\n\tif (!context) throw new Error(\"useCMSData must be used inside CMSProvider\")\n\treturn context\n}\n\n","\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport { EmblaCarouselType, EmblaOptionsType } from \"embla-carousel\"\nimport { cn } from \"@/packages/shadcns\"\nimport { CarouselContextProvider } from \"./embla-context\"\nimport type { AutoplayOptionsType } from \"embla-carousel-autoplay\"\nimport Autoplay from \"embla-carousel-autoplay\"\n\n// 1. Autoplay\n// 2. 頁碼 2-1動態點點 / 2-2頁碼要跟張數整除\n// 3. fade\n\nexport interface PropsTypes extends EmblaOptionsType {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\toptions?: EmblaOptionsType\n\tdatas?: any\n\n\tautoplayEnabled?: boolean // 預設開啟\n\tautoplayOptions?: AutoplayOptionsType\n\n\tsetApi?: any\n\tsetMethods?: any\n\tsetRef?: any\n\tstyle?: any\n\tcontrols?: any\n\n\tplugins?: any\n\n\tonScrolled?: (index: number) => void\n}\n\nconst Embla: React.FC<PropsTypes> = ({\n\tchildren,\n\tclassName,\n\toptions,\n\tdatas,\n\n\tautoplayEnabled = true,\n\tautoplayOptions,\n\n\tsetApi,\n\tsetMethods,\n\tsetRef,\n\n\tstyle,\n\tcontrols,\n\n\tonScrolled\n}) => {\n\n\tconst { loop, duration = 40 } = options || {}\n\n\tconst autoplaySetting = useMemo(() => {\n\t\tif (!autoplayEnabled) return\n\t\treturn [Autoplay({ playOnInit: true, delay: 5000, stopOnInteraction: false, ...autoplayOptions })]\n\t}, [autoplayEnabled, autoplayOptions])\n\n\tconst [emblaRef, emblaApi] = useEmblaCarousel({ ...options, loop, duration }, autoplaySetting)\n\n\tconst [selectIndex, setSelectIndex] = useState(0)\n\n\tconst [scrollSnaps, setScrollSnaps] = useState<number[]>([])\n\n\tconst nextScroll = useCallback(() => {\n\t\tif (!emblaApi) return\n\t\tconst { canScrollNext, scrollNext } = emblaApi\n\t\tcanScrollNext() && scrollNext() && autoPlayReset()\n\t}, [emblaApi])\n\n\tconst prevScroll = useCallback(() => {\n\t\tif (!emblaApi) return\n\t\tconst { canScrollPrev, scrollPrev } = emblaApi\n\t\tcanScrollPrev() && scrollPrev() && autoPlayReset()\n\t}, [emblaApi])\n\n\tconst scrollToIndex = useCallback((index: number) => {\n\t\tif (!emblaApi || typeof index !== \"number\") return\n\t\temblaApi.scrollTo(index)\n\n\t}, [emblaApi])\n\n\t// 自動輪播啟動\n\tconst autoPlayReset = useCallback(() => {\n\t\tif (!emblaApi) return\n\t\t// console.log(\"autoplay.reset\");\n\t\tconst autoplay = emblaApi?.plugins()?.autoplay\n\t\tautoplay && autoplay.reset()\n\t}, [emblaApi])\n\n\tconst autoPlayPlay = useCallback(() => {\n\t\tif (!emblaApi) return\n\t\t// console.log(\"autoplay.play\");\n\n\t\tif (!emblaApi.canScrollNext()) return // 防呆\n\t\tconst autoplay = emblaApi?.plugins()?.autoplay\n\t\tautoplay && autoplay.play()\n\t}, [emblaApi])\n\n\t// 自動輪播暫停\n\tconst autoPlayStop = useCallback(() => {\n\t\tif (!emblaApi) return\n\t\t// console.log(\"autoplay.stop\");\n\t\tconst autoplay = emblaApi?.plugins()?.autoplay\n\t\tautoplay && autoplay.stop()\n\t}, [emblaApi])\n\n\tconst contextValue = useMemo(() => ({\n\t\tdatas,\n\t\temblaRef,\n\t\temblaApi,\n\n\t\tselectIndex,\n\t\tscrollSnaps,\n\n\t\tnextScroll,\n\t\tprevScroll,\n\t\tscrollToIndex,\n\n\t\tautoPlayReset,\n\t\tautoPlayStop,\n\t\tautoPlayPlay\n\t}), [\n\t\tdatas,\n\t\temblaRef,\n\t\temblaApi,\n\n\t\tselectIndex,\n\t\tscrollSnaps,\n\n\t\tnextScroll,\n\t\tprevScroll,\n\t\tscrollToIndex,\n\n\t\tautoPlayReset,\n\t\tautoPlayStop,\n\t\tautoPlayPlay\n\t])\n\n\tconst onInit = useCallback((emblaApi: any) => {\n\t\tconst snapList = emblaApi.scrollSnapList();\n\t\tsetScrollSnaps(snapList);\n\t}, []);\n\n\tconst onSelectEvent = (emblaApi: EmblaCarouselType) => {\n\t\temblaApi.on(\"select\", () => {\n\t\t\tonScrolled?.(emblaApi.selectedScrollSnap())\n\t\t\tsetSelectIndex(emblaApi.selectedScrollSnap());\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\n\t\tif (!emblaApi) return\n\n\t\tsetRef?.(emblaRef)\n\t\tsetApi?.(emblaApi)\n\t\tsetMethods?.({})\n\n\t\tonInit(emblaApi)\n\t\tonSelectEvent(emblaApi)\n\n\t}, [emblaApi])\n\n\n\treturn (\n\n\t\t<CarouselContextProvider value={contextValue}>\n\t\t\t{/* 最外層:現在只是 Provider 的容器,沒有 overflow-hidden */}\n\t\t\t<div\n\t\t\t\tdata-component=\"embla-root\"\n\t\t\t\tclassName={cn(\"relative w-full\")}\n\t\t\t>\n\t\t\t\t{/* Embla Viewport */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\t\t\"w-full\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tref={emblaRef}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{/* 控制區 可放多組 */}\n\t\t\t\t{Array.isArray(controls) ? controls.map((ctrl, i) => (\n\t\t\t\t\t<React.Fragment key={i}>{ctrl}</React.Fragment>\n\t\t\t\t)) : controls}\n\t\t\t</div>\n\n\t\t</CarouselContextProvider>\n\t\t// <CarouselContextProvider\n\t\t// \tvalue={contextValue}\n\t\t// >\n\t\t// \t<div\n\t\t// \t\tdata-component=\"embla-root\"\n\t\t// \t\tclassName={cn(\n\t\t// \t\t\t\"overflow-hidden\",\n\t\t// \t\t\t\"relative\",\n\t\t// \t\t\t\"w-full\",\n\t\t// \t\t\tclassName\n\t\t// \t\t)}\n\t\t// \t\tref={emblaRef}\n\t\t// \t\tstyle={style}\n\t\t// \t>\n\t\t// \t\t{children}\n\t\t// \t</div>\n\t\t// </CarouselContextProvider>\n\t)\n}\n\nEmbla.displayName = \"Embla\"\nexport default Embla\n","\n\nimport { cn } from \"@/packages/shadcns\"\nimport { useCarouselContext } from \"./embla-context\";\n\ntype PropsTypes = {\n\tclassName?: string\n\t// slideRender: (datas: any) => React.ReactNode // 方式1.\n\tslide?: React.FC<any> //方式2.\n\tchildren?: any\n\tstyle?: any\n}\n\nconst EmblaContainer: React.FC<PropsTypes> = ({\n\tslide: SlideComponent,\n\tclassName,\n\tchildren,\n\tstyle,\n\t...props\n}) => {\n\n\tconst { datas, emblaApi } = useCarouselContext()\n\tconst cantSlide = !emblaApi?.canScrollNext() && !emblaApi?.canScrollPrev()\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"embla-container\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex\",\n\t\t\t\tclassName,\n\t\t\t\tcantSlide && [\n\t\t\t\t\t\"transform-[unset!important]\"\n\t\t\t\t]\n\t\t\t)}\n\t\t\tstyle={{ ...style }}\n\t\t>\n\t\t\t{/* slide */}\n\n\t\t\t{/* 方式1. */}\n\t\t\t{/* {slideRender?.(datas)} */}\n\n\t\t\t{/* 方式2. 資料型別不能指定*/}\n\t\t\t{SlideComponent && datas?.map((item: any, index) => (\n\t\t\t\t<SlideComponent key={item?.multipurpose?.key ?? item?.id ?? index}\n\t\t\t\t\t{...item} index={index} {...props} />\n\t\t\t))}\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nEmblaContainer.displayName = \"EmblaContainer\"\nexport default EmblaContainer\n\n","\n\nimport { cn } from \"@/packages/shadcns\"\nimport { useCarouselContext } from \"./embla-context\"\nimport { useEffect, useState } from \"react\";\n\ntype EmblaPaginationPropsTypes = {\n\tcolor?: \"black\" | \"white\" | string\n\talign?: \"start\" | \"center\" | \"end\";\n\tclassName?: string;\n\tmaxDots?: number; // 預設 5\n\tdynamic?: boolean; // 預設 true\n\tswiperNumber?: boolean; // 預設 true\n\tstyle?: string\n};\n\nexport const EmblaPagination: React.FC<EmblaPaginationPropsTypes> = ({\n\tcolor = \"black\",\n\talign,\n\tclassName,\n\tmaxDots = 5,\n\tdynamic = true,\n\tswiperNumber = true,\n}) => {\n\n\tconst { selectIndex, scrollToIndex, scrollSnaps, autoPlayReset, emblaApi } = useCarouselContext()\n\n\t// 點點計算\n\tconst total = scrollSnaps?.length ?? 0;\n\tconst active = Math.max(0, Math.min(selectIndex ?? 0, Math.max(0, total - 1)));\n\n\t// 顯示數字\n\tconst paginationNumber = `${Number(active + 1) < 10 ? \"0\" + Number(active + 1) : Number(active + 1)}`;\n\n\tconst isWhite = color === \"white\";\n\n\t// 點擊事件\n\tconst clickEvent = (index: number) => {\n\t\tscrollToIndex(index) // 移動到當澤輪播\n\t\tautoPlayReset() // 如果有開啟自動輪播要重置輪播時間\n\t}\n\n\t// 點點是否為當前\n\tconst isSelected = (index: number) => {\n\t\treturn index === selectIndex\n\t}\n\n\t// -- 動態點點 Start --\n\tconst [selectedIndex, setSelectedIndex] = useState(0)\n\tconst [slideCount, setSlideCount] = useState(0)\n\n\tuseEffect(() => {\n\t\tif (!emblaApi || !dynamic) return\n\n\t\tconst update = () => {\n\t\t\tsetSelectedIndex(emblaApi.selectedScrollSnap())\n\t\t\tsetSlideCount(emblaApi.scrollSnapList().length)\n\t\t}\n\n\t\temblaApi.on('select', update)\n\t\temblaApi.on('reInit', update) // 重新初始化時也更新\n\t\tupdate()\n\n\t\treturn () => {\n\t\t\temblaApi.off('select', update)\n\t\t\temblaApi.off('reInit', update)\n\t\t}\n\t}, [emblaApi, dynamic])\n\n\tconst getVisibleBullets = () => {\n\t\tconst total = slideCount ?? 0\n\t\tif (total === 0) return []\n\n\t\tconst limit = Math.max(1, Number(maxDots))\n\t\tconst windowSize = Math.min(total, limit)\n\n\t\tconst left = Math.floor((windowSize - 1) / 2)\n\t\tconst right = windowSize - left - 1\n\n\t\tlet start = selectedIndex - left\n\t\tlet end = selectedIndex + right\n\n\t\tif (start < 0) { end = Math.min(end - start, total - 1); start = 0 }\n\t\tif (end > total - 1) { start = Math.max(0, start - (end - (total - 1))); end = total - 1 }\n\n\t\treturn Array.from({ length: end - start + 1 }, (_, i) => start + i)\n\t}\n\n\tconst visibleRange = getVisibleBullets()\n\n\t// -- 動態點點 End --\n\n\t// 是否開啟動態點點決定點點跑陣列的方式\n\tconst dots = dynamic ? visibleRange : scrollSnaps?.map((_, i) => i) ?? []\n\n\t// WE - 頁碼\n\tconst swiperSnap = [\n\t\t\"text-[16px]\",\n\t\t\"font-semibold\",\n\t\t\" leading-[1.4]\",\n\t]\n\n\tconst paginationColorStyle = {\n\t\t\"black\": \"#000\",\n\t\t\"white\": \"#fff\",\n\t}[color] || `${color}`;\n\n\tconst paginationColorStyle2 = {\n\t\t\"--pagination-color\": paginationColorStyle,\n\t} as React.CSSProperties;\n\n\treturn (\n\t\t<div\n\t\t\tdata-compoents=\"emblas-pagination\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex\",\n\t\t\t\t\"items-center\",\n\t\t\t\t\"gap-7.25\",\n\t\t\t\talign === \"center\" && [\n\t\t\t\t\t\"justify-center\",\n\t\t\t\t],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={paginationColorStyle2}\n\t\t>\n\t\t\t{swiperNumber &&\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tswiperSnap,\n\t\t\t\t\t\t\"relative\",\n\n\t\t\t\t\t\t\"after:absolute\",\n\t\t\t\t\t\t\"after:top-1/2\",\n\t\t\t\t\t\t\"after:right-[-15px]\",\n\t\t\t\t\t\t\"after:-translate-y-1/2\",\n\n\t\t\t\t\t\t\"after:block\",\n\n\t\t\t\t\t\t// \"after:bg-black\",\n\t\t\t\t\t\t\"after:bg-(--pagination-color)\",\n\t\t\t\t\t\t\"after:w-0.5\",\n\t\t\t\t\t\t\"after:h-3.75\",\n\t\t\t\t\t\t\"after:opacity-20\",\n\n\t\t\t\t\t\tisWhite && [\n\t\t\t\t\t\t\t\"after:bg-white\",\n\t\t\t\t\t\t]\n\t\t\t\t\t)}>\n\t\t\t\t\t{paginationNumber}\n\t\t\t\t</div>}\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex\",\n\t\t\t\t\t\"flex-wrap\",\n\t\t\t\t\t\"justify-end\",\n\t\t\t\t\t\"items-center\",\n\t\t\t\t\t\"gap-y-0\",\n\t\t\t\t\t\"gap-x-2.5\",\n\t\t\t\t\t\"**:data-[component='emblas-pagination-dots']:bg-(--pagination-color)\",\n\t\t\t\t\tisWhite && [\n\t\t\t\t\t\t\"**:data-[component='emblas-pagination-dots']:bg-white\",\n\t\t\t\t\t]\n\t\t\t\t)}>\n\t\t\t\t{/* 點點在這邊跑 */}\n\t\t\t\t{dots.map((index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-component=\"emblas-pagination-dots\"\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tonClick={() => clickEvent(index)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-1.5\",\n\t\t\t\t\t\t\t\"h-1.5\",\n\t\t\t\t\t\t\t\"rounded-full\",\n\t\t\t\t\t\t\t\"cursor-pointer\",\n\t\t\t\t\t\t\t\"opacity-30\",\n\t\t\t\t\t\t\tisSelected(index) && (\"opacity-100\"),\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n\nEmblaPagination.displayName = \"EmblaPagination\"\nexport default EmblaPagination\n\n\n\n\n\n\n","\n\nimport { Button } from \"@/packages/shadcns\"\nimport { CarouselPrevious } from \"@/packages/shadcns\"\nimport { Carousel } from \"@/packages/shadcns\"\n\nexport interface PropsTypes { }\n\nconst Tests: React.FC<PropsTypes> = () => {\n\n\treturn (\n\t\t<>\n\t\t\t<Carousel>\n\t\t\t\t<CarouselPrevious />\n\t\t\t</Carousel>\n\t\t\t<Button>test123133232</Button>\n\t\t</>\n\t)\n}\n\nTests.displayName = \"Tests\"\nexport default Tests\n"]}
@@ -0,0 +1,68 @@
1
+ export { A as AnchorOptions, a as AnchorStoreOptions, b as AnchorsMethods, c as AnchorsStores, d as AnimateController, e as AnimateOptions, R as RegistrationDatas, S as ScrollOptions, g as getAnchorsStores, r as registerAnchors, f as registerOffseters, s as setAnchorsStore, u as useAnchors, h as useAnchorsStores, i as useRegistration } from '../useAnchors-BzgJT2J9.js';
2
+ import 'zustand';
3
+ import 'react';
4
+ import 'motion/react';
5
+ import 'lenis';
6
+
7
+ interface DebounceTypes {
8
+ callback: () => any;
9
+ dependency: any[];
10
+ delay?: number;
11
+ active?: boolean;
12
+ }
13
+ declare function useDebounce({ callback, dependency, delay, active, }: DebounceTypes): void;
14
+
15
+ declare function useDebounceValue<T>(value: T, delay?: number): T;
16
+
17
+ declare function useCookies(): {
18
+ setCookies: (name: string, value: string, days?: number) => void;
19
+ getCookies: (name: string) => string | null;
20
+ updateCookies: (name: string, value: string, days?: number) => void;
21
+ deleteCookies: (name: string) => void;
22
+ };
23
+
24
+ interface ResizeTypes {
25
+ width?: number | string;
26
+ height?: number | string;
27
+ }
28
+ interface DragResizeProps {
29
+ active?: boolean;
30
+ direction?: "horizontal" | "vertical";
31
+ minWidth?: number;
32
+ maxWidth?: number;
33
+ minHeight?: number;
34
+ maxHeight?: number;
35
+ onInit?: (size: ResizeTypes) => void;
36
+ onResizeStart?: (size: ResizeTypes) => void;
37
+ onResizing?: (size: ResizeTypes) => void;
38
+ onResizeEnd?: (size: ResizeTypes) => void;
39
+ }
40
+ type DragResizeTypes = {
41
+ dragRef: React.RefObject<HTMLDivElement | null>;
42
+ resizeRef: React.RefObject<HTMLDivElement | null>;
43
+ resize?: ResizeTypes;
44
+ };
45
+ declare function useDragResize({ active, direction, minWidth, maxWidth, minHeight, maxHeight, onInit, onResizeStart, onResizing, onResizeEnd }: DragResizeProps): DragResizeTypes;
46
+
47
+ type ReturnDatasTypes = {
48
+ fetcher: (payload: PayloadTypes) => Promise<any>;
49
+ cancel: () => void;
50
+ pending: boolean;
51
+ };
52
+ interface PayloadTypes {
53
+ url: string | URL | globalThis.Request;
54
+ options?: RequestInit;
55
+ }
56
+ declare function useAsyncFetcher(): ReturnDatasTypes;
57
+
58
+ declare function useMounted(): {
59
+ isMounded: boolean;
60
+ };
61
+
62
+ declare function useEffectOne(callback: () => void): void;
63
+
64
+ declare function useEffectLeave(callback: () => void): void;
65
+
66
+ declare function useHash(): string;
67
+
68
+ export { type DebounceTypes, type DragResizeProps, type DragResizeTypes, type ResizeTypes, useAsyncFetcher, useCookies, useDebounce, useDebounceValue, useDragResize, useEffectLeave, useEffectOne, useHash, useMounted };