@xploreu/components 0.1.5 → 0.1.6
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.
- package/dist/{chunk-VGDQOHO3.js → chunk-CPQOX4RR.js} +2 -2
- package/dist/{chunk-VGDQOHO3.js.map → chunk-CPQOX4RR.js.map} +1 -1
- package/dist/chunk-MF7T3OYE.js +2 -0
- package/dist/chunk-MF7T3OYE.js.map +1 -0
- package/dist/chunk-P4RPQUEL.js +2 -0
- package/dist/chunk-P4RPQUEL.js.map +1 -0
- package/dist/chunk-ZXAHA7TB.js +2 -0
- package/dist/chunk-ZXAHA7TB.js.map +1 -0
- package/dist/effects/auto-height.d.ts +14 -0
- package/dist/effects/auto-height.js +2 -0
- package/dist/effects/auto-height.js.map +1 -0
- package/dist/effects/highlight.d.ts +94 -0
- package/dist/effects/highlight.js +2 -0
- package/dist/effects/highlight.js.map +1 -0
- package/dist/effects/index.d.ts +6 -0
- package/dist/effects/index.js +2 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/primitives/index.d.ts +2 -0
- package/dist/primitives/index.js +1 -1
- package/dist/primitives/tabs.d.ts +4 -75
- package/dist/primitives/tabs.js +1 -1
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -1
- package/dist/ui/tabs.d.ts +2 -0
- package/dist/ui/tabs.js +1 -1
- package/package.json +9 -1
- package/dist/chunk-MHG7LM4H.js +0 -2
- package/dist/chunk-MHG7LM4H.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,c,d,e,g,f as f$1}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,c,d,e,g,f as f$1}from'./chunk-P4RPQUEL.js';import {cn}from'@xploreu/lib/cn';import {jsx}from'react/jsx-runtime';function T({className:a$1,variant:t="default",...i}){return jsx(a,{className:cn("group/tabs flex flex-col gap-2",a$1),"data-variant":t,...i})}function v({className:a,highlightClassName:t,...i}){return jsx(b,{className:cn("absolute z-0","group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-transparent group-data-[variant=default]/tabs:rounded-md group-data-[variant=default]/tabs:bg-primary group-data-[variant=default]/tabs:shadow-sm","group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary",t),children:jsx(c,{className:cn("inline-flex w-fit items-center justify-center","group-data-[variant=default]/tabs:bg-bg-primary group-data-[variant=default]/tabs:h-9 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.75","group-data-[variant=underline]/tabs:gap-7",a),...i})})}function P({className:a,...t}){return jsx(d,{className:"flex-1",value:t.value,children:jsx(e,{className:cn("group/tabs-trigger data-[state=active]:text-text-brand-tertiary-alt focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-500 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=default]/tabs:px-2 group-data-[variant=default]/tabs:py-1","group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3",a),...t})})}function m(a){return jsx(g,{...a})}function f({className:a,...t}){return jsx(f$1,{className:cn("flex-1 outline-none",a),...t})}export{T as a,v as b,P as c,m as d,f as e};//# sourceMappingURL=chunk-CPQOX4RR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-CPQOX4RR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/tabs.tsx"],"names":["Tabs","className","variant","props","jsx","cn","TabsList","highlightClassName","TabsHighlight","TabsTrigger","TabsHighlightItem","TabsContents","TabsContent"],"mappings":"4HAqBA,SAASA,CAAAA,CAAK,CACZ,SAAA,CAAAC,GAAAA,CACA,OAAA,CAAAC,EAAU,SAAA,CACV,GAAGC,CACL,CAAA,CAAc,CACZ,OACEC,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWK,EAAAA,CAAG,gCAAA,CAAkCJ,GAAS,CAAA,CACzD,cAAA,CAAcC,CAAAA,CACb,GAAGC,EACN,CAEJ,CAMA,SAASG,CAAAA,CAAS,CAChB,SAAA,CAAAL,CAAAA,CACA,kBAAA,CAAAM,CAAAA,CACA,GAAGJ,CACL,CAAA,CAAkB,CAChB,OACEC,GAAAA,CAACI,CAAAA,CAAA,CACC,SAAA,CAAWH,EAAAA,CACT,cAAA,CACA,+QAAA,CACA,8OAAA,CACAE,CACF,CAAA,CAEA,QAAA,CAAAH,IAACE,CAAAA,CAAA,CACC,SAAA,CAAWD,EAAAA,CACT,+CAAA,CACA,6KAAA,CACA,2CAAA,CACAJ,CACF,EACC,GAAGE,CAAAA,CACN,CAAA,CACF,CAEJ,CAIA,SAASM,CAAAA,CAAY,CAAE,SAAA,CAAAR,CAAAA,CAAW,GAAGE,CAAM,CAAA,CAAqB,CAC9D,OACEC,GAAAA,CAACM,EAAA,CACC,SAAA,CAAU,QAAA,CACV,KAAA,CAAOP,CAAAA,CAAM,KAAA,CAEb,QAAA,CAAAC,GAAAA,CAACK,EAAA,CACC,SAAA,CAAWJ,EAAAA,CACT,0gBAAA,CACA,+EAAA,CACA,oFAAA,CACAJ,CACF,CAAA,CACC,GAAGE,CAAAA,CACN,CAAA,CACF,CAEJ,CAIA,SAASQ,CAAAA,CAAaR,CAAAA,CAA0B,CAC9C,OAAOC,GAAAA,CAACO,CAAAA,CAAA,CAAuB,GAAGR,CAAAA,CAAO,CAC3C,CAIA,SAASS,EAAY,CAAE,SAAA,CAAAX,CAAAA,CAAW,GAAGE,CAAM,CAAA,CAAqB,CAC9D,OACEC,IAACQ,GAAAA,CAAA,CACC,SAAA,CAAWP,EAAAA,CAAG,qBAAA,CAAuBJ,CAAS,CAAA,CAC7C,GAAGE,EACN,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/tabs.tsx"],"names":["Tabs","className","variant","props","jsx","cn","TabsList","highlightClassName","TabsHighlight","TabsTrigger","TabsHighlightItem","TabsContents","TabsContent"],"mappings":"4HAqBA,SAASA,CAAAA,CAAK,CACZ,SAAA,CAAAC,GAAAA,CACA,OAAA,CAAAC,EAAU,SAAA,CACV,GAAGC,CACL,CAAA,CAAc,CACZ,OACEC,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWK,EAAAA,CAAG,gCAAA,CAAkCJ,GAAS,CAAA,CACzD,cAAA,CAAcC,CAAAA,CACb,GAAGC,EACN,CAEJ,CAMA,SAASG,CAAAA,CAAS,CAChB,SAAA,CAAAL,CAAAA,CACA,kBAAA,CAAAM,CAAAA,CACA,GAAGJ,CACL,CAAA,CAAkB,CAChB,OACEC,GAAAA,CAACI,CAAAA,CAAA,CACC,SAAA,CAAWH,EAAAA,CACT,cAAA,CACA,+QAAA,CACA,8OAAA,CACAE,CACF,CAAA,CAEA,QAAA,CAAAH,IAACE,CAAAA,CAAA,CACC,SAAA,CAAWD,EAAAA,CACT,+CAAA,CACA,6KAAA,CACA,2CAAA,CACAJ,CACF,EACC,GAAGE,CAAAA,CACN,CAAA,CACF,CAEJ,CAIA,SAASM,CAAAA,CAAY,CAAE,SAAA,CAAAR,CAAAA,CAAW,GAAGE,CAAM,CAAA,CAAqB,CAC9D,OACEC,GAAAA,CAACM,EAAA,CACC,SAAA,CAAU,QAAA,CACV,KAAA,CAAOP,CAAAA,CAAM,KAAA,CAEb,QAAA,CAAAC,GAAAA,CAACK,EAAA,CACC,SAAA,CAAWJ,EAAAA,CACT,0gBAAA,CACA,+EAAA,CACA,oFAAA,CACAJ,CACF,CAAA,CACC,GAAGE,CAAAA,CACN,CAAA,CACF,CAEJ,CAIA,SAASQ,CAAAA,CAAaR,CAAAA,CAA0B,CAC9C,OAAOC,GAAAA,CAACO,CAAAA,CAAA,CAAuB,GAAGR,CAAAA,CAAO,CAC3C,CAIA,SAASS,EAAY,CAAE,SAAA,CAAAX,CAAAA,CAAW,GAAGE,CAAM,CAAA,CAAqB,CAC9D,OACEC,IAACQ,GAAAA,CAAA,CACC,SAAA,CAAWP,EAAAA,CAAG,qBAAA,CAAuBJ,CAAS,CAAA,CAC7C,GAAGE,EACN,CAEJ","file":"chunk-CPQOX4RR.js","sourcesContent":["\nimport {\n Tabs as TabsPrimitive,\n TabsContent as TabsContentPrimitive,\n type TabsContentProps as TabsContentPrimitiveProps,\n TabsContents as TabsContentsPrimitive,\n type TabsContentsProps as TabsContentsPrimitiveProps,\n TabsHighlight as TabsHighlightPrimitive,\n TabsHighlightItem as TabsHighlightItemPrimitive,\n TabsList as TabsListPrimitive,\n type TabsListProps as TabsListPrimitiveProps,\n type TabsProps as TabsPrimitiveProps,\n TabsTrigger as TabsTriggerPrimitive,\n type TabsTriggerProps as TabsTriggerPrimitiveProps,\n} from \"../primitives/tabs\";\nimport { cn } from \"@xploreu/lib/cn\";\n\ntype TabsProps = TabsPrimitiveProps & {\n variant?: \"default\" | \"underline\";\n}\n\nfunction Tabs({\n className,\n variant = \"default\",\n ...props\n}: TabsProps) {\n return (\n <TabsPrimitive\n className={cn(\"group/tabs flex flex-col gap-2\", className)}\n data-variant={variant}\n {...props}\n />\n )\n}\n\ntype TabsListProps = TabsListPrimitiveProps & {\n highlightClassName?: string;\n}\n\nfunction TabsList({\n className,\n highlightClassName,\n ...props\n}: TabsListProps) {\n return (\n <TabsHighlightPrimitive\n className={cn(\n \"absolute z-0\",\n \"group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-transparent group-data-[variant=default]/tabs:rounded-md group-data-[variant=default]/tabs:bg-primary group-data-[variant=default]/tabs:shadow-sm\",\n \"group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary\",\n highlightClassName\n )}\n >\n <TabsListPrimitive\n className={cn(\n \"inline-flex w-fit items-center justify-center\",\n \"group-data-[variant=default]/tabs:bg-bg-primary group-data-[variant=default]/tabs:h-9 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.75\",\n \"group-data-[variant=underline]/tabs:gap-7\",\n className,\n )}\n {...props}\n />\n </TabsHighlightPrimitive>\n )\n}\n\ntype TabsTriggerProps = TabsTriggerPrimitiveProps\n\nfunction TabsTrigger({ className, ...props }: TabsTriggerProps) {\n return (\n <TabsHighlightItemPrimitive\n className=\"flex-1\"\n value={props.value}\n >\n <TabsTriggerPrimitive\n className={cn(\n \"group/tabs-trigger data-[state=active]:text-text-brand-tertiary-alt focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-500 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=default]/tabs:px-2 group-data-[variant=default]/tabs:py-1\",\n \"group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3\",\n className,\n )}\n {...props}\n />\n </TabsHighlightItemPrimitive>\n )\n}\n\ntype TabsContentsProps = TabsContentsPrimitiveProps\n\nfunction TabsContents(props: TabsContentsProps) {\n return <TabsContentsPrimitive {...props} />\n}\n\ntype TabsContentProps = TabsContentPrimitiveProps\n\nfunction TabsContent({ className, ...props }: TabsContentProps) {\n return (\n <TabsContentPrimitive\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Tabs,\n TabsContent,\n type TabsContentProps,\n TabsContents,\n type TabsContentsProps,\n TabsList,\n type TabsListProps,\n type TabsProps,\n TabsTrigger,\n type TabsTriggerProps,\n}"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as e from'react';import {AnimatePresence,motion}from'motion/react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var ee={top:0,left:0,width:0,height:0},Z=e.createContext(void 0);function te(){let f=e.useContext(Z);if(!f)throw new Error("useHighlight must be used within a HighlightProvider");return f}function se({ref:f,...r}){let{as:d="div",children:c,value:H,defaultValue:y,onValueChange:V,className:U,style:N,transition:u={type:"spring",stiffness:350,damping:35},hover:F=false,click:_=true,enabled:b=true,controlledItems:z,disabled:W=false,exitDelay:E=200,mode:p="children"}=r,s=e.useRef(null);e.useImperativeHandle(f,()=>s.current);let T=r?.boundsOffset??ee,w=T.top??0,I=T.left??0,D=T.width??0,C=T.height??0,S=e.useRef({top:w,left:I,width:D,height:C});e.useEffect(()=>{S.current={top:w,left:I,width:D,height:C};},[w,I,D,C]);let[P,x]=e.useState(H??y??null),[l,k]=e.useState(null),[A,q]=e.useState(""),$=t=>{x(a=>a!==t?(V?.(t),t):a);},i=e.useRef(void 0);e.useEffect(()=>{i.current=t=>{if(!s.current)return;let a=s.current.getBoundingClientRect(),o=S.current,g={top:t.top-a.top+o.top,left:t.left-a.left+o.left,width:t.width+o.width,height:t.height+o.height};k(n=>n&&n.top===g.top&&n.left===g.left&&n.width===g.width&&n.height===g.height?n:g);};});let R=t=>{i.current?.(t);},v=e.useCallback(()=>{k(t=>t===null?t:null);},[]);e.useEffect(()=>{H!==void 0?x(H):y!==void 0&&x(y);},[H,y]);let L=e.useId();e.useEffect(()=>{if(p!=="parent")return;let t=s.current;if(!t)return;let a=()=>{if(!P)return;let o=t.querySelector(`[data-value="${P}"][data-highlight="true"]`);o&&i.current?.(o.getBoundingClientRect());};return t.addEventListener("scroll",a,{passive:true}),()=>t.removeEventListener("scroll",a)},[p,P]);let h=t=>p==="parent"?jsxs(d,{ref:s,className:r?.containerClassName,"data-slot":"motion-highlight-container",style:{position:"relative",zIndex:1},children:[jsx(AnimatePresence,{initial:false,mode:"wait",children:l&&jsx(motion.div,{animate:{top:l.top,left:l.left,width:l.width,height:l.height,opacity:1},className:cn(U,A),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...u,delay:(u?.delay??0)+(E??0)/1e3}},initial:{top:l.top,left:l.left,width:l.width,height:l.height,opacity:0},style:{position:"absolute",zIndex:0,...N},transition:u})}),t]}):t;return jsx(Z.Provider,{value:{mode:p,activeValue:P,setActiveValue:$,id:L,hover:F,click:_,className:U,style:N,transition:u,disabled:W,enabled:b,exitDelay:E,setBounds:R,clearBounds:v,activeClassName:A,setActiveClassName:q,forceUpdateBounds:r?.forceUpdateBounds},children:b?h(z?c:e.Children.map(c,(t,a)=>jsx(ne,{className:r?.itemsClassName,children:t},a))):c})}function J(f,r){return Object.keys(r).reduce((d,c)=>(f.props[c]===void 0&&(d[c]=r[c]),d),{})}function ne({ref:f,as:r,children:d,id:c,value:H,className:y,style:V,transition:U,disabled:N=false,activeClassName:u,exitDelay:F,asChild:_=false,forceUpdateBounds:b,...z}){let W=e.useId(),{activeValue:E,setActiveValue:p,mode:s,setBounds:j,clearBounds:T,hover:w,click:I,enabled:D,className:C,style:S,transition:P,id:x,disabled:l,exitDelay:k,forceUpdateBounds:A,setActiveClassName:q}=te(),$=r??"div",i=d,R=c??H??i.props?.["data-value"]??i.props?.id??W,v=E===R,L=N===void 0?l:N,h=U??P,t=e.useRef(null);e.useImperativeHandle(f,()=>t.current);let a=e.useCallback(n=>{t.current=n;},[]);if(e.useEffect(()=>{if(s!=="parent")return;let n,M=null,Y=b===true||A&&b!==false,G=()=>{if(!t.current)return;let B=t.current.getBoundingClientRect();if(Y){if(M&&M.top===B.top&&M.left===B.left&&M.width===B.width&&M.height===B.height){n=requestAnimationFrame(G);return}M=B,n=requestAnimationFrame(G);}j(B);};if(v?(G(),q(u??"")):E||T(),Y)return ()=>cancelAnimationFrame(n)},[s,v,E,j,T,u,q,b,A]),!e.isValidElement(d))return d;let o={"data-active":v?"true":"false","aria-selected":v,"data-disabled":L,"data-value":R,"data-highlight":true},g=w?{onMouseEnter:n=>{p(R),i.props.onMouseEnter?.(n);},onMouseLeave:n=>{p(null),i.props.onMouseLeave?.(n);}}:I?{onClick:n=>{p(R),i.props.onClick?.(n);}}:{};return _?s==="children"?e.cloneElement(i,{key:R,ref:a,className:cn("relative",i.props.className),...J(i,{...o,"data-slot":"motion-highlight-item-container"}),...g,...z},jsxs(Fragment,{children:[jsx(AnimatePresence,{initial:false,mode:"wait",children:v&&!L&&jsx(motion.div,{animate:{opacity:1},className:cn(C,u),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...h,delay:(h?.delay??0)+(F??k??0)/1e3}},initial:{opacity:0},layoutId:`transition-background-${x}`,style:{position:"absolute",zIndex:0,...S,...V},transition:h,...o})}),jsx($,{className:y,"data-slot":"motion-highlight-item",style:{position:"relative",zIndex:1},...o,children:d})]})):e.cloneElement(i,{ref:a,...J(i,{...o,"data-slot":"motion-highlight-item"}),...g}):D?jsxs($,{ref:t,className:cn(s==="children"&&"relative",y),"data-slot":"motion-highlight-item-container",...o,...z,...g,children:[s==="children"&&jsx(AnimatePresence,{initial:false,mode:"wait",children:v&&!L&&jsx(motion.div,{animate:{opacity:1},className:cn(C,u),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...h,delay:(h?.delay??0)+(F??k??0)/1e3}},initial:{opacity:0},layoutId:`transition-background-${x}`,style:{position:"absolute",zIndex:0,...S,...V},transition:h,...o})}),e.cloneElement(i,{style:{position:"relative",zIndex:1},className:i.props.className,...J(i,{...o,"data-slot":"motion-highlight-item"})})]},R):d}export{te as a,se as b,ne as c};//# sourceMappingURL=chunk-MF7T3OYE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-MF7T3OYE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/effects/highlight.tsx"],"names":["DEFAULT_BOUNDS_OFFSET","HighlightContext","useHighlight","context","Highlight","ref","props","Component","children","value","defaultValue","onValueChange","className","style","transition","hover","click","enabled","controlledItems","disabled","exitDelay","mode","localRef","boundsOffset","boundsOffsetTop","boundsOffsetLeft","boundsOffsetWidth","boundsOffsetHeight","boundsOffsetRef","activeValue","setActiveValue","boundsState","setBoundsState","activeClassNameState","setActiveClassNameState","safeSetActiveValue","id","prev","safeSetBoundsRef","bounds","containerRect","offset","newBounds","safeSetBounds","clearBounds","container","onScroll","activeEl","render","jsxs","jsx","AnimatePresence","motion","cn","child","index","HighlightItem","getNonOverridingDataAttributes","element","dataAttributes","acc","key","as","activeClassName","asChild","forceUpdateBounds","itemId","setBounds","contextClassName","contextStyle","contextTransition","contextId","contextDisabled","contextExitDelay","contextForceUpdateBounds","setActiveClassName","childValue","isActive","isDisabled","itemTransition","refCallback","node","rafId","previousBounds","shouldUpdateBounds","updateBounds","commonHandlers","e","Fragment"],"mappings":"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","file":"chunk-MF7T3OYE.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n AnimatePresence,\n motion,\n type Transition\n} from \"motion/react\"\n\nimport { cn } from \"@xploreu/lib/cn\"\n\ntype HighlightMode = \"children\" | \"parent\"\n\ntype Bounds = {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nconst DEFAULT_BOUNDS_OFFSET: Bounds = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n}\n\ntype HighlightContextType<T extends string> = {\n as?: keyof HTMLElementTagNameMap;\n mode: HighlightMode;\n activeValue: T | null;\n setActiveValue: (value: T | null) => void;\n setBounds: (bounds: DOMRect) => void;\n clearBounds: () => void;\n id: string;\n hover: boolean;\n click: boolean;\n className?: string;\n style?: React.CSSProperties;\n activeClassName?: string;\n setActiveClassName: (className: string) => void;\n transition?: Transition;\n disabled?: boolean;\n enabled?: boolean;\n exitDelay?: number;\n forceUpdateBounds?: boolean;\n}\n\nconst HighlightContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n HighlightContextType<any> | undefined\n>(undefined)\n\nfunction useHighlight<T extends string>(): HighlightContextType<T> {\n const context = React.useContext(HighlightContext)\n if (!context) {\n throw new Error(\"useHighlight must be used within a HighlightProvider\")\n }\n return context as unknown as HighlightContextType<T>\n}\n\ntype BaseHighlightProps<T extends React.ElementType = \"div\"> = {\n as?: T;\n ref?: React.Ref<HTMLDivElement>;\n mode?: HighlightMode;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n className?: string;\n style?: React.CSSProperties;\n transition?: Transition;\n hover?: boolean;\n click?: boolean;\n disabled?: boolean;\n enabled?: boolean;\n exitDelay?: number;\n}\n\ntype ParentModeHighlightProps = {\n boundsOffset?: Partial<Bounds>;\n containerClassName?: string;\n forceUpdateBounds?: boolean;\n}\n\ntype ControlledParentModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> &\n ParentModeHighlightProps & {\n mode: \"parent\";\n controlledItems: true;\n children: React.ReactNode;\n }\n\ntype ControlledChildrenModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> & {\n mode?: \"children\" | undefined;\n controlledItems: true;\n children: React.ReactNode;\n }\n\ntype UncontrolledParentModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> &\n ParentModeHighlightProps & {\n mode: \"parent\";\n controlledItems?: false;\n itemsClassName?: string;\n children: React.ReactElement | React.ReactElement[];\n }\n\ntype UncontrolledChildrenModeHighlightProps<\n T extends React.ElementType = \"div\",\n> = BaseHighlightProps<T> & {\n mode?: \"children\";\n controlledItems?: false;\n itemsClassName?: string;\n children: React.ReactElement | React.ReactElement[];\n}\n\ntype HighlightProps<T extends React.ElementType = \"div\"> =\n | ControlledParentModeHighlightProps<T>\n | ControlledChildrenModeHighlightProps<T>\n | UncontrolledParentModeHighlightProps<T>\n | UncontrolledChildrenModeHighlightProps<T>\n\nfunction Highlight<T extends React.ElementType = \"div\">({\n ref,\n ...props\n}: HighlightProps<T>) {\n const {\n as: Component = \"div\",\n children,\n value,\n defaultValue,\n onValueChange,\n className,\n style,\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\n hover = false,\n click = true,\n enabled = true,\n controlledItems,\n disabled = false,\n exitDelay = 200,\n mode = \"children\",\n } = props\n\n const localRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const propsBoundsOffset = (props as ParentModeHighlightProps)?.boundsOffset\n const boundsOffset = propsBoundsOffset ?? DEFAULT_BOUNDS_OFFSET\n const boundsOffsetTop = boundsOffset.top ?? 0\n const boundsOffsetLeft = boundsOffset.left ?? 0\n const boundsOffsetWidth = boundsOffset.width ?? 0\n const boundsOffsetHeight = boundsOffset.height ?? 0\n\n const boundsOffsetRef = React.useRef({\n top: boundsOffsetTop,\n left: boundsOffsetLeft,\n width: boundsOffsetWidth,\n height: boundsOffsetHeight,\n })\n\n React.useEffect(() => {\n boundsOffsetRef.current = {\n top: boundsOffsetTop,\n left: boundsOffsetLeft,\n width: boundsOffsetWidth,\n height: boundsOffsetHeight,\n }\n }, [\n boundsOffsetTop,\n boundsOffsetLeft,\n boundsOffsetWidth,\n boundsOffsetHeight,\n ])\n\n const [activeValue, setActiveValue] = React.useState<string | null>(\n value ?? defaultValue ?? null,\n )\n const [boundsState, setBoundsState] = React.useState<Bounds | null>(null)\n const [activeClassNameState, setActiveClassNameState] =\n React.useState<string>(\"\")\n\n const safeSetActiveValue = (id: string | null) => {\n setActiveValue((prev) => {\n if (prev !== id) {\n onValueChange?.(id)\n return id\n }\n return prev\n })\n }\n\n const safeSetBoundsRef = React.useRef<\n ((bounds: DOMRect) => void) | undefined\n >(undefined)\n\n React.useEffect(() => {\n safeSetBoundsRef.current = (bounds: DOMRect) => {\n if (!localRef.current) return\n\n const containerRect = localRef.current.getBoundingClientRect()\n const offset = boundsOffsetRef.current\n const newBounds: Bounds = {\n top: bounds.top - containerRect.top + offset.top,\n left: bounds.left - containerRect.left + offset.left,\n width: bounds.width + offset.width,\n height: bounds.height + offset.height,\n }\n\n setBoundsState((prev) => {\n if (\n prev &&\n prev.top === newBounds.top &&\n prev.left === newBounds.left &&\n prev.width === newBounds.width &&\n prev.height === newBounds.height\n ) {\n return prev\n }\n return newBounds\n })\n }\n })\n\n const safeSetBounds = (bounds: DOMRect) => {\n safeSetBoundsRef.current?.(bounds)\n }\n\n const clearBounds = React.useCallback(() => {\n setBoundsState((prev) => (prev === null ? prev : null))\n }, [])\n\n React.useEffect(() => {\n if (value !== undefined) setActiveValue(value)\n else if (defaultValue !== undefined) setActiveValue(defaultValue)\n }, [value, defaultValue])\n\n const id = React.useId()\n\n React.useEffect(() => {\n if (mode !== \"parent\") return\n const container = localRef.current\n if (!container) return\n\n const onScroll = () => {\n if (!activeValue) return\n const activeEl = container.querySelector<HTMLElement>(\n `[data-value=\"${activeValue}\"][data-highlight=\"true\"]`,\n )\n if (activeEl)\n safeSetBoundsRef.current?.(activeEl.getBoundingClientRect())\n }\n\n container.addEventListener(\"scroll\", onScroll, { passive: true })\n return () => container.removeEventListener(\"scroll\", onScroll)\n }, [mode, activeValue])\n\n const render = (children: React.ReactNode) => {\n if (mode === \"parent\") {\n return (\n <Component\n ref={localRef}\n className={(props as ParentModeHighlightProps)?.containerClassName}\n data-slot=\"motion-highlight-container\"\n style={{ position: \"relative\", zIndex: 1 }}\n >\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {boundsState && (\n <motion.div\n animate={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 1,\n }}\n className={cn(className, activeClassNameState)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...transition,\n delay: (transition?.delay ?? 0) + (exitDelay ?? 0) / 1000,\n },\n }}\n initial={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 0,\n }}\n style={{ position: \"absolute\", zIndex: 0, ...style }}\n transition={transition}\n />\n )}\n </AnimatePresence>\n {children}\n </Component>\n )\n }\n\n return children\n }\n\n return (\n <HighlightContext.Provider\n value={{\n mode,\n activeValue,\n setActiveValue: safeSetActiveValue,\n id,\n hover,\n click,\n className,\n style,\n transition,\n disabled,\n enabled,\n exitDelay,\n setBounds: safeSetBounds,\n clearBounds,\n activeClassName: activeClassNameState,\n setActiveClassName: setActiveClassNameState,\n forceUpdateBounds: (props as ParentModeHighlightProps)\n ?.forceUpdateBounds,\n }}\n >\n {enabled\n ? controlledItems\n ? render(children)\n : render(\n React.Children.map(children, (child, index) => (\n <HighlightItem\n key={index}\n className={props?.itemsClassName}\n >\n {child}\n </HighlightItem>\n )),\n )\n : children}\n </HighlightContext.Provider>\n )\n}\n\nfunction getNonOverridingDataAttributes(\n element: React.ReactElement,\n dataAttributes: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.keys(dataAttributes).reduce<Record<string, unknown>>(\n (acc, key) => {\n if ((element.props as Record<string, unknown>)[key] === undefined) {\n acc[key] = dataAttributes[key]\n }\n return acc\n },\n {},\n )\n}\n\ntype ExtendedChildProps = React.ComponentProps<\"div\"> & {\n id?: string;\n ref?: React.Ref<HTMLElement>;\n \"data-active\"?: string;\n \"data-value\"?: string;\n \"data-disabled\"?: boolean;\n \"data-highlight\"?: boolean;\n \"data-slot\"?: string;\n}\n\ntype HighlightItemProps<T extends React.ElementType = \"div\"> =\n React.ComponentProps<T> & {\n as?: T;\n children: React.ReactElement;\n id?: string;\n value?: string;\n className?: string;\n style?: React.CSSProperties;\n transition?: Transition;\n activeClassName?: string;\n disabled?: boolean;\n exitDelay?: number;\n asChild?: boolean;\n forceUpdateBounds?: boolean;\n }\n\nfunction HighlightItem<T extends React.ElementType>({\n ref,\n as,\n children,\n id,\n value,\n className,\n style,\n transition,\n disabled = false,\n activeClassName,\n exitDelay,\n asChild = false,\n forceUpdateBounds,\n ...props\n}: HighlightItemProps<T>) {\n const itemId = React.useId()\n const {\n activeValue,\n setActiveValue,\n mode,\n setBounds,\n clearBounds,\n hover,\n click,\n enabled,\n className: contextClassName,\n style: contextStyle,\n transition: contextTransition,\n id: contextId,\n disabled: contextDisabled,\n exitDelay: contextExitDelay,\n forceUpdateBounds: contextForceUpdateBounds,\n setActiveClassName,\n } = useHighlight()\n\n const Component = as ?? \"div\"\n const element = children as React.ReactElement<ExtendedChildProps>\n const childValue =\n id ?? value ?? element.props?.[\"data-value\"] ?? element.props?.id ?? itemId\n const isActive = activeValue === childValue\n const isDisabled = disabled === undefined ? contextDisabled : disabled\n const itemTransition = transition ?? contextTransition\n\n const localRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const refCallback = React.useCallback((node: HTMLElement | null) => {\n localRef.current = node as HTMLDivElement\n }, [])\n\n React.useEffect(() => {\n if (mode !== \"parent\") return\n let rafId: number\n let previousBounds: Bounds | null = null\n const shouldUpdateBounds =\n forceUpdateBounds === true ||\n (contextForceUpdateBounds && forceUpdateBounds !== false)\n\n const updateBounds = () => {\n if (!localRef.current) return\n\n const bounds = localRef.current.getBoundingClientRect()\n\n if (shouldUpdateBounds) {\n if (\n previousBounds &&\n previousBounds.top === bounds.top &&\n previousBounds.left === bounds.left &&\n previousBounds.width === bounds.width &&\n previousBounds.height === bounds.height\n ) {\n rafId = requestAnimationFrame(updateBounds)\n return\n }\n previousBounds = bounds\n rafId = requestAnimationFrame(updateBounds)\n }\n\n setBounds(bounds)\n }\n\n if (isActive) {\n updateBounds()\n setActiveClassName(activeClassName ?? \"\")\n } else if (!activeValue) clearBounds()\n\n if (shouldUpdateBounds) return () => cancelAnimationFrame(rafId)\n }, [\n mode,\n isActive,\n activeValue,\n setBounds,\n clearBounds,\n activeClassName,\n setActiveClassName,\n forceUpdateBounds,\n contextForceUpdateBounds,\n ])\n\n if (!React.isValidElement(children)) return children\n\n const dataAttributes = {\n \"data-active\": isActive ? \"true\" : \"false\",\n \"aria-selected\": isActive,\n \"data-disabled\": isDisabled,\n \"data-value\": childValue,\n \"data-highlight\": true,\n }\n\n const commonHandlers = hover\n ? {\n onMouseEnter: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(childValue)\n element.props.onMouseEnter?.(e)\n },\n onMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(null)\n element.props.onMouseLeave?.(e)\n },\n }\n : click\n ? {\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(childValue)\n element.props.onClick?.(e)\n },\n }\n : {}\n\n if (asChild) {\n if (mode === \"children\") {\n return React.cloneElement(\n element,\n {\n key: childValue,\n ref: refCallback,\n className: cn(\"relative\", element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item-container\",\n }),\n ...commonHandlers,\n ...props,\n },\n <>\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {isActive && !isDisabled && (\n <motion.div\n animate={{ opacity: 1 }}\n className={cn(contextClassName, activeClassName)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay:\n (itemTransition?.delay ?? 0) +\n (exitDelay ?? contextExitDelay ?? 0) / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n layoutId={`transition-background-${contextId}`}\n style={{\n position: \"absolute\",\n zIndex: 0,\n ...contextStyle,\n ...style,\n }}\n transition={itemTransition}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n\n <Component\n className={className}\n data-slot=\"motion-highlight-item\"\n style={{ position: \"relative\", zIndex: 1 }}\n {...dataAttributes}\n >\n {children}\n </Component>\n </>,\n )\n }\n\n return React.cloneElement(element, {\n ref: refCallback,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item\",\n }),\n ...commonHandlers,\n })\n }\n\n return enabled ? (\n <Component\n key={childValue}\n ref={localRef}\n className={cn(mode === \"children\" && \"relative\", className)}\n data-slot=\"motion-highlight-item-container\"\n {...dataAttributes}\n {...props}\n {...commonHandlers}\n >\n {mode === \"children\" && (\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {isActive && !isDisabled && (\n <motion.div\n animate={{ opacity: 1 }}\n className={cn(contextClassName, activeClassName)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay:\n (itemTransition?.delay ?? 0) +\n (exitDelay ?? contextExitDelay ?? 0) / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n layoutId={`transition-background-${contextId}`}\n style={{\n position: \"absolute\",\n zIndex: 0,\n ...contextStyle,\n ...style,\n }}\n transition={itemTransition}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n )}\n\n {React.cloneElement(element, {\n style: { position: \"relative\", zIndex: 1 },\n className: element.props.className,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item\",\n }),\n })}\n </Component>\n ) : (\n children\n )\n}\n\nexport {\n Highlight,\n HighlightItem,\n type HighlightItemProps,\n type HighlightProps,\n useHighlight,\n}"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-ZXAHA7TB.js';import {b as b$1,c as c$1}from'./chunk-MF7T3OYE.js';import'react';import*as s from'@radix-ui/react-tabs';import {useControllableState}from'@radix-ui/react-use-controllable-state';import {AnimatePresence,motion}from'motion/react';import {getStrictContext}from'@xploreu/lib/get-strict-context';import {jsx}from'react/jsx-runtime';var[c,u]=getStrictContext("TabsContext");function I({value:t,defaultValue:e,onValueChange:i,...n}){let[a,r]=useControllableState({prop:t,defaultProp:e||"",onChange:i});return jsx(c,{value:{value:a,setValue:r},children:jsx(s.Root,{"data-slot":"tabs",value:a,onValueChange:r,...n})})}function A({transition:t={type:"spring",stiffness:200,damping:25},...e}){let{value:i}=u();return jsx(b$1,{click:false,controlledItems:true,"data-slot":"tabs-highlight",transition:t,value:i,...e})}function x(t){return jsx(s.List,{"data-slot":"tabs-list",...t})}function M(t){return jsx(c$1,{"data-slot":"tabs-highlight-item",...t})}function V(t){return jsx(s.Trigger,{"data-slot":"tabs-trigger",...t})}function O({value:t,forceMount:e,transition:i={duration:.5,ease:"easeInOut"},...n}){return jsx(AnimatePresence,{mode:"wait",children:jsx(s.Content,{asChild:true,forceMount:e,value:t,children:jsx(motion.div,{animate:{opacity:1,filter:"blur(0px)"},"data-slot":"tabs-content",exit:{opacity:0,filter:"blur(4px)"},initial:{opacity:0,filter:"blur(4px)"},layout:true,layoutDependency:t,transition:i,...n})})})}var b={type:"spring",stiffness:200,damping:30};function d(t){return !("mode"in t)||t.mode==="auto-height"}function w(t){let{value:e}=u();if(d(t)){let{transition:r=b,...P}=t;return jsx(a,{"data-slot":"tabs-contents",deps:[e],transition:r,...P})}let{transition:i=b,style:n,...a$1}=t;return jsx(motion.div,{"data-slot":"tabs-contents",layout:"size",layoutDependency:e,style:{overflow:"hidden",...n},transition:{layout:i},...a$1})}export{I as a,A as b,x as c,M as d,V as e,O as f,w as g};//# sourceMappingURL=chunk-P4RPQUEL.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-P4RPQUEL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/tabs.tsx"],"names":["TabsProvider","useTabs","getStrictContext","Tabs","valueProp","defaultValue","onValueChange","props","value","setValue","useControllableState","jsx","TabsHighlight","transition","Highlight","TabsList","TabsHighlightItem","HighlightItem","TabsTrigger","TabsContent","forceMount","AnimatePresence","motion","defaultTransition","isAutoMode","TabsContents","autoProps","AutoHeight","style","layoutProps"],"mappings":"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","file":"chunk-P4RPQUEL.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\"\nimport {\n AnimatePresence,\n type HTMLMotionProps,\n motion,\n type Transition,\n} from \"motion/react\"\n\nimport { AutoHeight, type AutoHeightProps } from \"../effects/auto-height\"\nimport {\n Highlight,\n HighlightItem,\n type HighlightItemProps,\n type HighlightProps,\n} from \"../effects/highlight\"\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\n\ntype TabsContextType = {\n value: string | undefined;\n setValue: TabsProps[\"onValueChange\"];\n}\n\nconst [TabsProvider, useTabs] =\n getStrictContext<TabsContextType>(\"TabsContext\")\n\ntype TabsProps = React.ComponentProps<typeof TabsPrimitive.Root>\n\nfunction Tabs({\n value: valueProp,\n defaultValue,\n onValueChange,\n ...props\n}: TabsProps) {\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue || \"\",\n onChange: onValueChange,\n })\n\n return (\n <TabsProvider value={{ value, setValue }}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n value={value}\n onValueChange={setValue}\n {...props}\n />\n </TabsProvider>\n )\n}\n\ntype TabsHighlightProps = Omit<HighlightProps, \"controlledItems\" | \"value\">\n\nfunction TabsHighlight({\n transition = { type: \"spring\", stiffness: 200, damping: 25 },\n ...props\n}: TabsHighlightProps) {\n const { value } = useTabs()\n\n return (\n <Highlight\n click={false}\n controlledItems\n data-slot=\"tabs-highlight\"\n transition={transition}\n value={value}\n {...props}\n />\n )\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>\n\nfunction TabsList(props: TabsListProps) {\n return <TabsPrimitive.List\n data-slot=\"tabs-list\"\n {...props}\n />\n}\n\ntype TabsHighlightItemProps = HighlightItemProps & {\n value: string;\n}\n\nfunction TabsHighlightItem(props: TabsHighlightItemProps) {\n return <HighlightItem\n data-slot=\"tabs-highlight-item\"\n {...props}\n />\n}\n\ntype TabsTriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger>\n\nfunction TabsTrigger(props: TabsTriggerProps) {\n return <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n {...props}\n />\n}\n\ntype TabsContentProps = React.ComponentProps<typeof TabsPrimitive.Content> &\n HTMLMotionProps<\"div\">\n\nfunction TabsContent({\n value,\n forceMount,\n transition = { duration: 0.5, ease: \"easeInOut\" },\n ...props\n}: TabsContentProps) {\n return (\n <AnimatePresence mode=\"wait\">\n <TabsPrimitive.Content\n asChild\n forceMount={forceMount}\n value={value}\n >\n <motion.div\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n data-slot=\"tabs-content\"\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n layout\n layoutDependency={value}\n transition={transition}\n {...props}\n />\n </TabsPrimitive.Content>\n </AnimatePresence>\n )\n}\n\ntype TabsContentsAutoProps = AutoHeightProps & {\n mode?: \"auto-height\";\n children: React.ReactNode;\n transition?: Transition;\n}\n\ntype TabsContentsLayoutProps = Omit<HTMLMotionProps<\"div\">, \"transition\"> & {\n mode: \"layout\";\n children: React.ReactNode;\n transition?: Transition;\n}\n\ntype TabsContentsProps = TabsContentsAutoProps | TabsContentsLayoutProps\n\nconst defaultTransition: Transition = {\n type: \"spring\",\n stiffness: 200,\n damping: 30,\n}\n\nfunction isAutoMode(props: TabsContentsProps): props is TabsContentsAutoProps {\n return !(\"mode\" in props) || props.mode === \"auto-height\"\n}\n\nfunction TabsContents(props: TabsContentsProps) {\n const { value } = useTabs()\n\n if (isAutoMode(props)) {\n const { transition = defaultTransition, ...autoProps } = props\n\n return (\n <AutoHeight\n data-slot=\"tabs-contents\"\n deps={[value]}\n transition={transition}\n {...autoProps}\n />\n )\n }\n\n const { transition = defaultTransition, style, ...layoutProps } = props\n\n return (\n <motion.div\n data-slot=\"tabs-contents\"\n layout=\"size\"\n layoutDependency={value}\n style={{ overflow: \"hidden\", ...style }}\n transition={{ layout: transition }}\n {...layoutProps}\n />\n )\n}\n\nexport {\n Tabs,\n TabsContent,\n type TabsContentProps,\n TabsContents,\n type TabsContentsProps,\n TabsHighlight,\n TabsHighlightItem,\n type TabsHighlightItemProps,\n type TabsHighlightProps,\n TabsList,\n type TabsListProps,\n type TabsProps,\n TabsTrigger,\n type TabsTriggerProps,\n}"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-VFZXA6DY.js';import'react';import {motion}from'motion/react';import {useAutoHeight}from'@xploreu/hooks/use-auto-height';import {jsx}from'react/jsx-runtime';function u({children:o,deps:e=[],transition:n={type:"spring",stiffness:300,damping:30,bounce:0,restDelta:.01},style:r,animate:s,asChild:a$1=false,...p}){let{ref:m,height:d}=useAutoHeight(e),h=a$1?a:motion.div;return jsx(h,{animate:{height:d,...s},style:{overflow:"hidden",...r},transition:n,...p,children:jsx("div",{ref:m,children:o})})}export{u as a};//# sourceMappingURL=chunk-ZXAHA7TB.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-ZXAHA7TB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/effects/auto-height.tsx"],"names":["AutoHeight","children","deps","transition","style","animate","asChild","props","ref","height","useAutoHeight","Comp","Slot","motion","jsx"],"mappings":"mLAwBA,SAASA,CAAAA,CAAW,CAClB,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,EAAC,CACR,WAAAC,CAAAA,CAAa,CACX,KAAM,QAAA,CACN,SAAA,CAAW,IACX,OAAA,CAAS,EAAA,CACT,OAAQ,CAAA,CACR,SAAA,CAAW,GACb,CAAA,CACA,KAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,QAAAC,GAAAA,CAAU,KAAA,CACV,GAAGC,CACL,CAAA,CAAoB,CAClB,GAAM,CAAE,IAAAC,CAAAA,CAAK,MAAA,CAAAC,CAAO,CAAA,CAAIC,aAAAA,CAA8BR,CAAI,CAAA,CAEpDS,CAAAA,CAAOL,IAAUM,CAAAA,CAAOC,MAAAA,CAAO,IAErC,OACEC,GAAAA,CAACH,EAAA,CACC,OAAA,CAAS,CAAE,MAAA,CAAAF,CAAAA,CAAQ,GAAGJ,CAAQ,CAAA,CAC9B,MAAO,CAAE,QAAA,CAAU,SAAU,GAAGD,CAAM,EACtC,UAAA,CAAYD,CAAAA,CACX,GAAGI,CAAAA,CAEJ,QAAA,CAAAO,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKN,EACP,QAAA,CAAAP,CAAAA,CACH,EACF,CAEJ","file":"chunk-ZXAHA7TB.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n type HTMLMotionProps,\n type LegacyAnimationControls,\n motion,\n type TargetAndTransition,\n type Transition,\n} from \"motion/react\"\n\nimport { Slot, type WithAsChild } from \"../primitives/slot\"\nimport { useAutoHeight } from \"@xploreu/hooks/use-auto-height\"\n\ntype AutoHeightProps = WithAsChild<\n {\n children: React.ReactNode;\n deps?: React.DependencyList;\n animate?: TargetAndTransition | LegacyAnimationControls;\n transition?: Transition;\n } & Omit<HTMLMotionProps<\"div\">, \"animate\">\n>\n\nfunction AutoHeight({\n children,\n deps = [],\n transition = {\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n bounce: 0,\n restDelta: 0.01,\n },\n style,\n animate,\n asChild = false,\n ...props\n}: AutoHeightProps) {\n const { ref, height } = useAutoHeight<HTMLDivElement>(deps)\n\n const Comp = asChild ? Slot : motion.div\n\n return (\n <Comp\n animate={{ height, ...animate }}\n style={{ overflow: \"hidden\", ...style }}\n transition={transition}\n {...props}\n >\n <div ref={ref}>\n {children}\n </div>\n </Comp>\n )\n}\n\nexport { AutoHeight, type AutoHeightProps }\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { TargetAndTransition, LegacyAnimationControls, Transition, HTMLMotionProps } from 'motion/react';
|
|
4
|
+
import { WithAsChild } from '../primitives/slot.js';
|
|
5
|
+
|
|
6
|
+
type AutoHeightProps = WithAsChild<{
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
deps?: React.DependencyList;
|
|
9
|
+
animate?: TargetAndTransition | LegacyAnimationControls;
|
|
10
|
+
transition?: Transition;
|
|
11
|
+
} & Omit<HTMLMotionProps<"div">, "animate">>;
|
|
12
|
+
declare function AutoHeight({ children, deps, transition, style, animate, asChild, ...props }: AutoHeightProps): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { AutoHeight, type AutoHeightProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"auto-height.js"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Transition } from 'motion/react';
|
|
4
|
+
|
|
5
|
+
type HighlightMode = "children" | "parent";
|
|
6
|
+
type Bounds = {
|
|
7
|
+
top: number;
|
|
8
|
+
left: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
type HighlightContextType<T extends string> = {
|
|
13
|
+
as?: keyof HTMLElementTagNameMap;
|
|
14
|
+
mode: HighlightMode;
|
|
15
|
+
activeValue: T | null;
|
|
16
|
+
setActiveValue: (value: T | null) => void;
|
|
17
|
+
setBounds: (bounds: DOMRect) => void;
|
|
18
|
+
clearBounds: () => void;
|
|
19
|
+
id: string;
|
|
20
|
+
hover: boolean;
|
|
21
|
+
click: boolean;
|
|
22
|
+
className?: string;
|
|
23
|
+
style?: React.CSSProperties;
|
|
24
|
+
activeClassName?: string;
|
|
25
|
+
setActiveClassName: (className: string) => void;
|
|
26
|
+
transition?: Transition;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
exitDelay?: number;
|
|
30
|
+
forceUpdateBounds?: boolean;
|
|
31
|
+
};
|
|
32
|
+
declare function useHighlight<T extends string>(): HighlightContextType<T>;
|
|
33
|
+
type BaseHighlightProps<T extends React.ElementType = "div"> = {
|
|
34
|
+
as?: T;
|
|
35
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
36
|
+
mode?: HighlightMode;
|
|
37
|
+
value?: string | null;
|
|
38
|
+
defaultValue?: string | null;
|
|
39
|
+
onValueChange?: (value: string | null) => void;
|
|
40
|
+
className?: string;
|
|
41
|
+
style?: React.CSSProperties;
|
|
42
|
+
transition?: Transition;
|
|
43
|
+
hover?: boolean;
|
|
44
|
+
click?: boolean;
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
enabled?: boolean;
|
|
47
|
+
exitDelay?: number;
|
|
48
|
+
};
|
|
49
|
+
type ParentModeHighlightProps = {
|
|
50
|
+
boundsOffset?: Partial<Bounds>;
|
|
51
|
+
containerClassName?: string;
|
|
52
|
+
forceUpdateBounds?: boolean;
|
|
53
|
+
};
|
|
54
|
+
type ControlledParentModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & ParentModeHighlightProps & {
|
|
55
|
+
mode: "parent";
|
|
56
|
+
controlledItems: true;
|
|
57
|
+
children: React.ReactNode;
|
|
58
|
+
};
|
|
59
|
+
type ControlledChildrenModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & {
|
|
60
|
+
mode?: "children" | undefined;
|
|
61
|
+
controlledItems: true;
|
|
62
|
+
children: React.ReactNode;
|
|
63
|
+
};
|
|
64
|
+
type UncontrolledParentModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & ParentModeHighlightProps & {
|
|
65
|
+
mode: "parent";
|
|
66
|
+
controlledItems?: false;
|
|
67
|
+
itemsClassName?: string;
|
|
68
|
+
children: React.ReactElement | React.ReactElement[];
|
|
69
|
+
};
|
|
70
|
+
type UncontrolledChildrenModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & {
|
|
71
|
+
mode?: "children";
|
|
72
|
+
controlledItems?: false;
|
|
73
|
+
itemsClassName?: string;
|
|
74
|
+
children: React.ReactElement | React.ReactElement[];
|
|
75
|
+
};
|
|
76
|
+
type HighlightProps<T extends React.ElementType = "div"> = ControlledParentModeHighlightProps<T> | ControlledChildrenModeHighlightProps<T> | UncontrolledParentModeHighlightProps<T> | UncontrolledChildrenModeHighlightProps<T>;
|
|
77
|
+
declare function Highlight<T extends React.ElementType = "div">({ ref, ...props }: HighlightProps<T>): react_jsx_runtime.JSX.Element;
|
|
78
|
+
type HighlightItemProps<T extends React.ElementType = "div"> = React.ComponentProps<T> & {
|
|
79
|
+
as?: T;
|
|
80
|
+
children: React.ReactElement;
|
|
81
|
+
id?: string;
|
|
82
|
+
value?: string;
|
|
83
|
+
className?: string;
|
|
84
|
+
style?: React.CSSProperties;
|
|
85
|
+
transition?: Transition;
|
|
86
|
+
activeClassName?: string;
|
|
87
|
+
disabled?: boolean;
|
|
88
|
+
exitDelay?: number;
|
|
89
|
+
asChild?: boolean;
|
|
90
|
+
forceUpdateBounds?: boolean;
|
|
91
|
+
};
|
|
92
|
+
declare function HighlightItem<T extends React.ElementType>({ ref, as, children, id, value, className, style, transition, disabled, activeClassName, exitDelay, asChild, forceUpdateBounds, ...props }: HighlightItemProps<T>): any;
|
|
93
|
+
|
|
94
|
+
export { Highlight, HighlightItem, type HighlightItemProps, type HighlightProps, useHighlight };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"highlight.js"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AutoHeight, AutoHeightProps } from './auto-height.js';
|
|
2
|
+
export { Highlight, HighlightItem, HighlightItemProps, HighlightProps, useHighlight } from './highlight.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import 'motion/react';
|
|
6
|
+
import '../primitives/slot.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/primitives/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as Dialog,g as DialogClose,f as DialogContent,k as DialogDescription,i as DialogFooter,h as DialogHeader,e as DialogOverlay,d as DialogPortal,j as DialogTitle,c as DialogTrigger,a as useDialog}from'../chunk-YMSEOWKF.js';export{a as Tabs,f as TabsContent,g as TabsContents,b as TabsHighlight,d as TabsHighlightItem,c as TabsList,e as TabsTrigger}from'../chunk-
|
|
1
|
+
export{b as Dialog,g as DialogClose,f as DialogContent,k as DialogDescription,i as DialogFooter,h as DialogHeader,e as DialogOverlay,d as DialogPortal,j as DialogTitle,c as DialogTrigger,a as useDialog}from'../chunk-YMSEOWKF.js';export{a as Tabs,f as TabsContent,g as TabsContents,b as TabsHighlight,d as TabsHighlightItem,c as TabsList,e as TabsTrigger}from'../chunk-P4RPQUEL.js';import'../chunk-ZXAHA7TB.js';import'../chunk-MF7T3OYE.js';export{a as Slot}from'../chunk-VFZXA6DY.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,81 +1,10 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
children: React.ReactNode;
|
|
9
|
-
deps?: React.DependencyList;
|
|
10
|
-
animate?: TargetAndTransition | LegacyAnimationControls;
|
|
11
|
-
transition?: Transition;
|
|
12
|
-
} & Omit<HTMLMotionProps<"div">, "animate">>;
|
|
13
|
-
|
|
14
|
-
type HighlightMode = "children" | "parent";
|
|
15
|
-
type Bounds = {
|
|
16
|
-
top: number;
|
|
17
|
-
left: number;
|
|
18
|
-
width: number;
|
|
19
|
-
height: number;
|
|
20
|
-
};
|
|
21
|
-
type BaseHighlightProps<T extends React.ElementType = "div"> = {
|
|
22
|
-
as?: T;
|
|
23
|
-
ref?: React.Ref<HTMLDivElement>;
|
|
24
|
-
mode?: HighlightMode;
|
|
25
|
-
value?: string | null;
|
|
26
|
-
defaultValue?: string | null;
|
|
27
|
-
onValueChange?: (value: string | null) => void;
|
|
28
|
-
className?: string;
|
|
29
|
-
style?: React.CSSProperties;
|
|
30
|
-
transition?: Transition;
|
|
31
|
-
hover?: boolean;
|
|
32
|
-
click?: boolean;
|
|
33
|
-
disabled?: boolean;
|
|
34
|
-
enabled?: boolean;
|
|
35
|
-
exitDelay?: number;
|
|
36
|
-
};
|
|
37
|
-
type ParentModeHighlightProps = {
|
|
38
|
-
boundsOffset?: Partial<Bounds>;
|
|
39
|
-
containerClassName?: string;
|
|
40
|
-
forceUpdateBounds?: boolean;
|
|
41
|
-
};
|
|
42
|
-
type ControlledParentModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & ParentModeHighlightProps & {
|
|
43
|
-
mode: "parent";
|
|
44
|
-
controlledItems: true;
|
|
45
|
-
children: React.ReactNode;
|
|
46
|
-
};
|
|
47
|
-
type ControlledChildrenModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & {
|
|
48
|
-
mode?: "children" | undefined;
|
|
49
|
-
controlledItems: true;
|
|
50
|
-
children: React.ReactNode;
|
|
51
|
-
};
|
|
52
|
-
type UncontrolledParentModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & ParentModeHighlightProps & {
|
|
53
|
-
mode: "parent";
|
|
54
|
-
controlledItems?: false;
|
|
55
|
-
itemsClassName?: string;
|
|
56
|
-
children: React.ReactElement | React.ReactElement[];
|
|
57
|
-
};
|
|
58
|
-
type UncontrolledChildrenModeHighlightProps<T extends React.ElementType = "div"> = BaseHighlightProps<T> & {
|
|
59
|
-
mode?: "children";
|
|
60
|
-
controlledItems?: false;
|
|
61
|
-
itemsClassName?: string;
|
|
62
|
-
children: React.ReactElement | React.ReactElement[];
|
|
63
|
-
};
|
|
64
|
-
type HighlightProps<T extends React.ElementType = "div"> = ControlledParentModeHighlightProps<T> | ControlledChildrenModeHighlightProps<T> | UncontrolledParentModeHighlightProps<T> | UncontrolledChildrenModeHighlightProps<T>;
|
|
65
|
-
type HighlightItemProps<T extends React.ElementType = "div"> = React.ComponentProps<T> & {
|
|
66
|
-
as?: T;
|
|
67
|
-
children: React.ReactElement;
|
|
68
|
-
id?: string;
|
|
69
|
-
value?: string;
|
|
70
|
-
className?: string;
|
|
71
|
-
style?: React.CSSProperties;
|
|
72
|
-
transition?: Transition;
|
|
73
|
-
activeClassName?: string;
|
|
74
|
-
disabled?: boolean;
|
|
75
|
-
exitDelay?: number;
|
|
76
|
-
asChild?: boolean;
|
|
77
|
-
forceUpdateBounds?: boolean;
|
|
78
|
-
};
|
|
4
|
+
import { HTMLMotionProps, Transition } from 'motion/react';
|
|
5
|
+
import { AutoHeightProps } from '../effects/auto-height.js';
|
|
6
|
+
import { HighlightProps, HighlightItemProps } from '../effects/highlight.js';
|
|
7
|
+
import './slot.js';
|
|
79
8
|
|
|
80
9
|
type TabsProps = React.ComponentProps<typeof TabsPrimitive.Root>;
|
|
81
10
|
declare function Tabs({ value: valueProp, defaultValue, onValueChange, ...props }: TabsProps): react_jsx_runtime.JSX.Element;
|
package/dist/primitives/tabs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as Tabs,f as TabsContent,g as TabsContents,b as TabsHighlight,d as TabsHighlightItem,c as TabsList,e as TabsTrigger}from'../chunk-
|
|
1
|
+
export{a as Tabs,f as TabsContent,g as TabsContents,b as TabsHighlight,d as TabsHighlightItem,c as TabsList,e as TabsTrigger}from'../chunk-P4RPQUEL.js';import'../chunk-ZXAHA7TB.js';import'../chunk-MF7T3OYE.js';import'../chunk-VFZXA6DY.js';//# sourceMappingURL=tabs.js.map
|
|
2
2
|
//# sourceMappingURL=tabs.js.map
|
package/dist/ui/index.d.ts
CHANGED
package/dist/ui/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as Button,a as buttonVariants}from'../chunk-CJONAIBS.js';export{a as Dialog,c as DialogClose,d as DialogContent,h as DialogDescription,f as DialogFooter,e as DialogHeader,g as DialogTitle,b as DialogTrigger}from'../chunk-X57LUCWV.js';export{a as Tabs,e as TabsContent,d as TabsContents,b as TabsList,c as TabsTrigger}from'../chunk-
|
|
1
|
+
export{b as Button,a as buttonVariants}from'../chunk-CJONAIBS.js';export{a as Dialog,c as DialogClose,d as DialogContent,h as DialogDescription,f as DialogFooter,e as DialogHeader,g as DialogTitle,b as DialogTrigger}from'../chunk-X57LUCWV.js';export{a as Tabs,e as TabsContent,d as TabsContents,b as TabsList,c as TabsTrigger}from'../chunk-CPQOX4RR.js';import'../chunk-YMSEOWKF.js';import'../chunk-P4RPQUEL.js';import'../chunk-ZXAHA7TB.js';import'../chunk-MF7T3OYE.js';import'../chunk-VFZXA6DY.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/tabs.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { TabsProps as TabsProps$1, TabsContentProps as TabsContentProps$1, TabsC
|
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@radix-ui/react-tabs';
|
|
5
5
|
import 'motion/react';
|
|
6
|
+
import '../effects/auto-height.js';
|
|
6
7
|
import '../primitives/slot.js';
|
|
8
|
+
import '../effects/highlight.js';
|
|
7
9
|
|
|
8
10
|
type TabsProps = TabsProps$1 & {
|
|
9
11
|
variant?: "default" | "underline";
|
package/dist/ui/tabs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as Tabs,e as TabsContent,d as TabsContents,b as TabsList,c as TabsTrigger}from'../chunk-
|
|
1
|
+
export{a as Tabs,e as TabsContent,d as TabsContents,b as TabsList,c as TabsTrigger}from'../chunk-CPQOX4RR.js';import'../chunk-P4RPQUEL.js';import'../chunk-ZXAHA7TB.js';import'../chunk-MF7T3OYE.js';import'../chunk-VFZXA6DY.js';//# sourceMappingURL=tabs.js.map
|
|
2
2
|
//# sourceMappingURL=tabs.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xploreu/components",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Shared UI components for XploreU apps",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -27,6 +27,14 @@
|
|
|
27
27
|
"./primitives/*": {
|
|
28
28
|
"types": "./dist/primitives/*.d.ts",
|
|
29
29
|
"import": "./dist/primitives/*.js"
|
|
30
|
+
},
|
|
31
|
+
"./effects": {
|
|
32
|
+
"types": "./dist/effects/index.d.ts",
|
|
33
|
+
"import": "./dist/effects/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./effects/*": {
|
|
36
|
+
"types": "./dist/effects/*.d.ts",
|
|
37
|
+
"import": "./dist/effects/*.js"
|
|
30
38
|
}
|
|
31
39
|
},
|
|
32
40
|
"files": [
|
package/dist/chunk-MHG7LM4H.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {a}from'./chunk-VFZXA6DY.js';import*as t from'react';import*as C from'@radix-ui/react-tabs';import {useControllableState}from'@radix-ui/react-use-controllable-state';import {AnimatePresence,motion}from'motion/react';import {useAutoHeight}from'@xploreu/hooks/use-auto-height';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {cn}from'@xploreu/lib/cn';import {getStrictContext}from'@xploreu/lib/get-strict-context';function ot({children:e,deps:i=[],transition:o={type:"spring",stiffness:300,damping:30,bounce:0,restDelta:.01},style:a$1,animate:c,asChild:d=false,...b}){let{ref:E,height:H}=useAutoHeight(i),h=d?a:motion.div;return jsx(h,{animate:{height:H,...c},style:{overflow:"hidden",...a$1},transition:o,...b,children:jsx("div",{ref:E,children:e})})}var ht={top:0,left:0,width:0,height:0},st=t.createContext(void 0);function pt(){let e=t.useContext(st);if(!e)throw new Error("useHighlight must be used within a HighlightProvider");return e}function at({ref:e,...i}){let{as:o="div",children:a,value:c,defaultValue:d,onValueChange:b,className:E,style:H,transition:h={type:"spring",stiffness:350,damping:35},hover:q=false,click:G=true,enabled:x=true,controlledItems:W,disabled:J=false,exitDelay:A=200,mode:P="children"}=i,p=t.useRef(null);t.useImperativeHandle(e,()=>p.current);let M=i?.boundsOffset??ht,D=M.top??0,S=M.left??0,O=M.width??0,L=M.height??0,k=t.useRef({top:D,left:S,width:O,height:L});t.useEffect(()=>{k.current={top:D,left:S,width:O,height:L};},[D,S,O,L]);let[N,B]=t.useState(c??d??null),[g,V]=t.useState(null),[U,$]=t.useState(""),_=n=>{B(u=>u!==n?(b?.(n),n):u);},r=t.useRef(void 0);t.useEffect(()=>{r.current=n=>{if(!p.current)return;let u=p.current.getBoundingClientRect(),l=k.current,T={top:n.top-u.top+l.top,left:n.left-u.left+l.left,width:n.width+l.width,height:n.height+l.height};V(s=>s&&s.top===T.top&&s.left===T.left&&s.width===T.width&&s.height===T.height?s:T);};});let v=n=>{r.current?.(n);},R=t.useCallback(()=>{V(n=>n===null?n:null);},[]);t.useEffect(()=>{c!==void 0?B(c):d!==void 0&&B(d);},[c,d]);let z=t.useId();t.useEffect(()=>{if(P!=="parent")return;let n=p.current;if(!n)return;let u=()=>{if(!N)return;let l=n.querySelector(`[data-value="${N}"][data-highlight="true"]`);l&&r.current?.(l.getBoundingClientRect());};return n.addEventListener("scroll",u,{passive:true}),()=>n.removeEventListener("scroll",u)},[P,N]);let f=n=>P==="parent"?jsxs(o,{ref:p,className:i?.containerClassName,"data-slot":"motion-highlight-container",style:{position:"relative",zIndex:1},children:[jsx(AnimatePresence,{initial:false,mode:"wait",children:g&&jsx(motion.div,{animate:{top:g.top,left:g.left,width:g.width,height:g.height,opacity:1},className:cn(E,U),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...h,delay:(h?.delay??0)+(A??0)/1e3}},initial:{top:g.top,left:g.left,width:g.width,height:g.height,opacity:0},style:{position:"absolute",zIndex:0,...H},transition:h})}),n]}):n;return jsx(st.Provider,{value:{mode:P,activeValue:N,setActiveValue:_,id:z,hover:q,click:G,className:E,style:H,transition:h,disabled:J,enabled:x,exitDelay:A,setBounds:v,clearBounds:R,activeClassName:U,setActiveClassName:$,forceUpdateBounds:i?.forceUpdateBounds},children:x?f(W?a:t.Children.map(a,(n,u)=>jsx(tt,{className:i?.itemsClassName,children:n},u))):a})}function X(e,i){return Object.keys(i).reduce((o,a)=>(e.props[a]===void 0&&(o[a]=i[a]),o),{})}function tt({ref:e,as:i,children:o,id:a,value:c,className:d,style:b,transition:E,disabled:H=false,activeClassName:h,exitDelay:q,asChild:G=false,forceUpdateBounds:x,...W}){let J=t.useId(),{activeValue:A,setActiveValue:P,mode:p,setBounds:K,clearBounds:M,hover:D,click:S,enabled:O,className:L,style:k,transition:N,id:B,disabled:g,exitDelay:V,forceUpdateBounds:U,setActiveClassName:$}=pt(),_=i??"div",r=o,v=a??c??r.props?.["data-value"]??r.props?.id??J,R=A===v,z=H===void 0?g:H,f=E??N,n=t.useRef(null);t.useImperativeHandle(e,()=>n.current);let u=t.useCallback(s=>{n.current=s;},[]);if(t.useEffect(()=>{if(p!=="parent")return;let s,I=null,et=x===true||U&&x!==false,Q=()=>{if(!n.current)return;let w=n.current.getBoundingClientRect();if(et){if(I&&I.top===w.top&&I.left===w.left&&I.width===w.width&&I.height===w.height){s=requestAnimationFrame(Q);return}I=w,s=requestAnimationFrame(Q);}K(w);};if(R?(Q(),$(h??"")):A||M(),et)return ()=>cancelAnimationFrame(s)},[p,R,A,K,M,h,$,x,U]),!t.isValidElement(o))return o;let l={"data-active":R?"true":"false","aria-selected":R,"data-disabled":z,"data-value":v,"data-highlight":true},T=D?{onMouseEnter:s=>{P(v),r.props.onMouseEnter?.(s);},onMouseLeave:s=>{P(null),r.props.onMouseLeave?.(s);}}:S?{onClick:s=>{P(v),r.props.onClick?.(s);}}:{};return G?p==="children"?t.cloneElement(r,{key:v,ref:u,className:cn("relative",r.props.className),...X(r,{...l,"data-slot":"motion-highlight-item-container"}),...T,...W},jsxs(Fragment,{children:[jsx(AnimatePresence,{initial:false,mode:"wait",children:R&&!z&&jsx(motion.div,{animate:{opacity:1},className:cn(L,h),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...f,delay:(f?.delay??0)+(q??V??0)/1e3}},initial:{opacity:0},layoutId:`transition-background-${B}`,style:{position:"absolute",zIndex:0,...k,...b},transition:f,...l})}),jsx(_,{className:d,"data-slot":"motion-highlight-item",style:{position:"relative",zIndex:1},...l,children:o})]})):t.cloneElement(r,{ref:u,...X(r,{...l,"data-slot":"motion-highlight-item"}),...T}):O?jsxs(_,{ref:n,className:cn(p==="children"&&"relative",d),"data-slot":"motion-highlight-item-container",...l,...W,...T,children:[p==="children"&&jsx(AnimatePresence,{initial:false,mode:"wait",children:R&&!z&&jsx(motion.div,{animate:{opacity:1},className:cn(L,h),"data-slot":"motion-highlight",exit:{opacity:0,transition:{...f,delay:(f?.delay??0)+(q??V??0)/1e3}},initial:{opacity:0},layoutId:`transition-background-${B}`,style:{position:"absolute",zIndex:0,...k,...b},transition:f,...l})}),t.cloneElement(r,{style:{position:"relative",zIndex:1},className:r.props.className,...X(r,{...l,"data-slot":"motion-highlight-item"})})]},v):o}var[yt,dt]=getStrictContext("TabsContext");function Ot({value:e,defaultValue:i,onValueChange:o,...a}){let[c,d]=useControllableState({prop:e,defaultProp:i||"",onChange:o});return jsx(yt,{value:{value:c,setValue:d},children:jsx(C.Root,{"data-slot":"tabs",value:c,onValueChange:d,...a})})}function kt({transition:e={type:"spring",stiffness:200,damping:25},...i}){let{value:o}=dt();return jsx(at,{click:false,controlledItems:true,"data-slot":"tabs-highlight",transition:e,value:o,...i})}function Vt(e){return jsx(C.List,{"data-slot":"tabs-list",...e})}function Ut(e){return jsx(tt,{"data-slot":"tabs-highlight-item",...e})}function zt(e){return jsx(C.Trigger,{"data-slot":"tabs-trigger",...e})}function Ft({value:e,forceMount:i,transition:o={duration:.5,ease:"easeInOut"},...a}){return jsx(AnimatePresence,{mode:"wait",children:jsx(C.Content,{asChild:true,forceMount:i,value:e,children:jsx(motion.div,{animate:{opacity:1,filter:"blur(0px)"},"data-slot":"tabs-content",exit:{opacity:0,filter:"blur(4px)"},initial:{opacity:0,filter:"blur(4px)"},layout:true,layoutDependency:e,transition:o,...a})})})}var rt={type:"spring",stiffness:200,damping:30};function bt(e){return !("mode"in e)||e.mode==="auto-height"}function qt(e){let{value:i}=dt();if(bt(e)){let{transition:d=rt,...b}=e;return jsx(ot,{"data-slot":"tabs-contents",deps:[i],transition:d,...b})}let{transition:o=rt,style:a,...c}=e;return jsx(motion.div,{"data-slot":"tabs-contents",layout:"size",layoutDependency:i,style:{overflow:"hidden",...a},transition:{layout:o},...c})}export{Ot as a,kt as b,Vt as c,Ut as d,zt as e,Ft as f,qt as g};//# sourceMappingURL=chunk-MHG7LM4H.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-MHG7LM4H.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/effects/auto-height.tsx","../src/effects/highlight.tsx","../src/primitives/tabs.tsx"],"names":["AutoHeight","children","deps","transition","style","animate","asChild","props","ref","height","useAutoHeight","Comp","Slot","motion","jsx","DEFAULT_BOUNDS_OFFSET","HighlightContext","useHighlight","context","Highlight","Component","value","defaultValue","onValueChange","className","hover","click","enabled","controlledItems","disabled","exitDelay","mode","localRef","boundsOffset","boundsOffsetTop","boundsOffsetLeft","boundsOffsetWidth","boundsOffsetHeight","boundsOffsetRef","activeValue","setActiveValue","boundsState","setBoundsState","activeClassNameState","setActiveClassNameState","safeSetActiveValue","id","prev","safeSetBoundsRef","bounds","containerRect","offset","newBounds","safeSetBounds","clearBounds","container","onScroll","activeEl","render","jsxs","AnimatePresence","cn","child","index","HighlightItem","getNonOverridingDataAttributes","element","dataAttributes","acc","key","as","activeClassName","forceUpdateBounds","itemId","setBounds","contextClassName","contextStyle","contextTransition","contextId","contextDisabled","contextExitDelay","contextForceUpdateBounds","setActiveClassName","childValue","isActive","isDisabled","itemTransition","refCallback","node","rafId","previousBounds","shouldUpdateBounds","updateBounds","commonHandlers","e","Fragment","TabsProvider","useTabs","getStrictContext","Tabs","valueProp","setValue","useControllableState","TabsHighlight","TabsList","TabsHighlightItem","TabsTrigger","TabsContent","forceMount","defaultTransition","isAutoMode","TabsContents","autoProps","layoutProps"],"mappings":"4aAwBA,SAASA,EAAAA,CAAW,CAClB,QAAA,CAAAC,CAAAA,CACA,KAAAC,CAAAA,CAAO,GACP,UAAA,CAAAC,CAAAA,CAAa,CACX,IAAA,CAAM,QAAA,CACN,UAAW,GAAA,CACX,OAAA,CAAS,EAAA,CACT,MAAA,CAAQ,CAAA,CACR,SAAA,CAAW,GACb,CAAA,CACA,KAAA,CAAAC,IACA,OAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CAAU,KAAA,CACV,GAAGC,CACL,CAAA,CAAoB,CAClB,GAAM,CAAE,IAAAC,CAAAA,CAAK,MAAA,CAAAC,CAAO,CAAA,CAAIC,aAAAA,CAA8BR,CAAI,CAAA,CAEpDS,CAAAA,CAAOL,CAAAA,CAAUM,EAAOC,MAAAA,CAAO,GAAA,CAErC,OACEC,GAAAA,CAACH,CAAAA,CAAA,CACC,OAAA,CAAS,CAAE,MAAA,CAAAF,CAAAA,CAAQ,GAAGJ,CAAQ,EAC9B,KAAA,CAAO,CAAE,SAAU,QAAA,CAAU,GAAGD,GAAM,CAAA,CACtC,UAAA,CAAYD,CAAAA,CACX,GAAGI,CAAAA,CAEJ,QAAA,CAAAO,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKN,EACP,QAAA,CAAAP,CAAAA,CACH,EACF,CAEJ,CClCA,IAAMc,GAAgC,CACpC,GAAA,CAAK,EACL,IAAA,CAAM,CAAA,CACN,MAAO,CAAA,CACP,MAAA,CAAQ,CACV,CAAA,CAuBMC,EAAAA,CAAyB,gBAG7B,MAAS,CAAA,CAEX,SAASC,EAAAA,EAA0D,CACjE,IAAMC,EAAgB,CAAA,CAAA,UAAA,CAAWF,EAAgB,EACjD,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sDAAsD,CAAA,CAExE,OAAOA,CACT,CAgEA,SAASC,EAAAA,CAA+C,CACtD,IAAAX,CAAAA,CACA,GAAGD,CACL,CAAA,CAAsB,CACpB,GAAM,CACJ,EAAA,CAAIa,CAAAA,CAAY,MAChB,QAAA,CAAAnB,CAAAA,CACA,MAAAoB,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,KAAA,CAAApB,CAAAA,CACA,WAAAD,CAAAA,CAAa,CAAE,KAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3D,MAAAsB,CAAAA,CAAQ,KAAA,CACR,MAAAC,CAAAA,CAAQ,IAAA,CACR,QAAAC,CAAAA,CAAU,IAAA,CACV,gBAAAC,CAAAA,CACA,QAAA,CAAAC,EAAW,KAAA,CACX,SAAA,CAAAC,EAAY,GAAA,CACZ,IAAA,CAAAC,EAAO,UACT,CAAA,CAAIxB,CAAAA,CAEEyB,CAAAA,CAAiB,CAAA,CAAA,MAAA,CAAuB,IAAI,EAC5C,CAAA,CAAA,mBAAA,CAAoBxB,CAAAA,CAAK,IAAMwB,CAAAA,CAAS,OAAyB,EAGvE,IAAMC,CAAAA,CADqB1B,GAAoC,YAAA,EACrBQ,EAAAA,CACpCmB,EAAkBD,CAAAA,CAAa,GAAA,EAAO,EACtCE,CAAAA,CAAmBF,CAAAA,CAAa,MAAQ,CAAA,CACxCG,CAAAA,CAAoBH,CAAAA,CAAa,KAAA,EAAS,CAAA,CAC1CI,CAAAA,CAAqBJ,EAAa,MAAA,EAAU,CAAA,CAE5CK,EAAwB,CAAA,CAAA,MAAA,CAAO,CACnC,IAAKJ,CAAAA,CACL,IAAA,CAAMC,EACN,KAAA,CAAOC,CAAAA,CACP,OAAQC,CACV,CAAC,EAEK,CAAA,CAAA,SAAA,CAAU,IAAM,CACpBC,CAAAA,CAAgB,OAAA,CAAU,CACxB,GAAA,CAAKJ,CAAAA,CACL,IAAA,CAAMC,EACN,KAAA,CAAOC,CAAAA,CACP,OAAQC,CACV,EACF,EAAG,CACDH,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CACF,CAAC,EAED,GAAM,CAACE,EAAaC,CAAc,CAAA,CAAU,WAC1CnB,CAAAA,EAASC,CAAAA,EAAgB,IAC3B,CAAA,CACM,CAACmB,CAAAA,CAAaC,CAAc,CAAA,CAAU,CAAA,CAAA,QAAA,CAAwB,IAAI,CAAA,CAClE,CAACC,EAAsBC,CAAuB,CAAA,CAC5C,WAAiB,EAAE,CAAA,CAErBC,EAAsBC,CAAAA,EAAsB,CAChDN,EAAgBO,CAAAA,EACVA,CAAAA,GAASD,GACXvB,CAAAA,GAAgBuB,CAAE,CAAA,CACXA,CAAAA,EAEFC,CACR,EACH,EAEMC,CAAAA,CAAyB,CAAA,CAAA,MAAA,CAE7B,MAAS,CAAA,CAEL,CAAA,CAAA,SAAA,CAAU,IAAM,CACpBA,CAAAA,CAAiB,QAAWC,CAAAA,EAAoB,CAC9C,GAAI,CAACjB,CAAAA,CAAS,QAAS,OAEvB,IAAMkB,EAAgBlB,CAAAA,CAAS,OAAA,CAAQ,qBAAA,EAAsB,CACvDmB,CAAAA,CAASb,CAAAA,CAAgB,QACzBc,CAAAA,CAAoB,CACxB,IAAKH,CAAAA,CAAO,GAAA,CAAMC,EAAc,GAAA,CAAMC,CAAAA,CAAO,IAC7C,IAAA,CAAMF,CAAAA,CAAO,KAAOC,CAAAA,CAAc,IAAA,CAAOC,EAAO,IAAA,CAChD,KAAA,CAAOF,EAAO,KAAA,CAAQE,CAAAA,CAAO,KAAA,CAC7B,MAAA,CAAQF,CAAAA,CAAO,MAAA,CAASE,EAAO,MACjC,CAAA,CAEAT,EAAgBK,CAAAA,EAEZA,CAAAA,EACAA,EAAK,GAAA,GAAQK,CAAAA,CAAU,GAAA,EACvBL,CAAAA,CAAK,IAAA,GAASK,CAAAA,CAAU,MACxBL,CAAAA,CAAK,KAAA,GAAUK,EAAU,KAAA,EACzBL,CAAAA,CAAK,SAAWK,CAAAA,CAAU,MAAA,CAEnBL,CAAAA,CAEFK,CACR,EACH,EACF,CAAC,CAAA,CAED,IAAMC,EAAiBJ,CAAAA,EAAoB,CACzCD,EAAiB,OAAA,GAAUC,CAAM,EACnC,CAAA,CAEMK,CAAAA,CAAoB,cAAY,IAAM,CAC1CZ,EAAgBK,CAAAA,EAAUA,CAAAA,GAAS,KAAOA,CAAAA,CAAO,IAAK,EACxD,CAAA,CAAG,EAAE,EAEC,CAAA,CAAA,SAAA,CAAU,IAAM,CAChB1B,CAAAA,GAAU,MAAA,CAAWmB,EAAenB,CAAK,CAAA,CACpCC,IAAiB,MAAA,EAAWkB,CAAAA,CAAelB,CAAY,EAClE,CAAA,CAAG,CAACD,CAAAA,CAAOC,CAAY,CAAC,CAAA,CAExB,IAAMwB,CAAAA,CAAW,CAAA,CAAA,KAAA,EAAM,CAEjB,CAAA,CAAA,SAAA,CAAU,IAAM,CACpB,GAAIf,IAAS,QAAA,CAAU,OACvB,IAAMwB,CAAAA,CAAYvB,CAAAA,CAAS,QAC3B,GAAI,CAACuB,EAAW,OAEhB,IAAMC,EAAW,IAAM,CACrB,GAAI,CAACjB,CAAAA,CAAa,OAClB,IAAMkB,CAAAA,CAAWF,CAAAA,CAAU,cACzB,CAAA,aAAA,EAAgBhB,CAAW,2BAC7B,CAAA,CACIkB,CAAAA,EACFT,EAAiB,OAAA,GAAUS,CAAAA,CAAS,qBAAA,EAAuB,EAC/D,CAAA,CAEA,OAAAF,CAAAA,CAAU,gBAAA,CAAiB,SAAUC,CAAAA,CAAU,CAAE,QAAS,IAAK,CAAC,CAAA,CACzD,IAAMD,CAAAA,CAAU,mBAAA,CAAoB,SAAUC,CAAQ,CAC/D,EAAG,CAACzB,CAAAA,CAAMQ,CAAW,CAAC,CAAA,CAEtB,IAAMmB,CAAAA,CAAUzD,CAAAA,EACV8B,IAAS,QAAA,CAET4B,IAAAA,CAACvC,EAAA,CACC,GAAA,CAAKY,EACL,SAAA,CAAYzB,CAAAA,EAAoC,kBAAA,CAChD,WAAA,CAAU,4BAAA,CACV,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,OAAQ,CAAE,CAAA,CAEzC,UAAAO,GAAAA,CAAC8C,eAAAA,CAAA,CACC,OAAA,CAAS,KAAA,CACT,KAAK,MAAA,CAEJ,QAAA,CAAAnB,GACC3B,GAAAA,CAACD,MAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CACP,GAAA,CAAK4B,CAAAA,CAAY,GAAA,CACjB,KAAMA,CAAAA,CAAY,IAAA,CAClB,MAAOA,CAAAA,CAAY,KAAA,CACnB,OAAQA,CAAAA,CAAY,MAAA,CACpB,QAAS,CACX,CAAA,CACA,UAAWoB,EAAAA,CAAGrC,CAAAA,CAAWmB,CAAoB,CAAA,CAC7C,WAAA,CAAU,mBACV,IAAA,CAAM,CACJ,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CACV,GAAGxC,CAAAA,CACH,KAAA,CAAA,CAAQA,GAAY,KAAA,EAAS,CAAA,EAAA,CAAM2B,GAAa,CAAA,EAAK,GACvD,CACF,CAAA,CACA,OAAA,CAAS,CACP,IAAKW,CAAAA,CAAY,GAAA,CACjB,KAAMA,CAAAA,CAAY,IAAA,CAClB,MAAOA,CAAAA,CAAY,KAAA,CACnB,MAAA,CAAQA,CAAAA,CAAY,MAAA,CACpB,OAAA,CAAS,CACX,CAAA,CACA,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,OAAQ,CAAA,CAAG,GAAGrC,CAAM,CAAA,CACnD,UAAA,CAAYD,EACd,CAAA,CAEJ,CAAA,CACCF,GACH,CAAA,CAIGA,CAAAA,CAGT,OACEa,GAAAA,CAACE,EAAAA,CAAiB,QAAA,CAAjB,CACC,KAAA,CAAO,CACL,KAAAe,CAAAA,CACA,WAAA,CAAAQ,EACA,cAAA,CAAgBM,CAAAA,CAChB,GAAAC,CAAAA,CACA,KAAA,CAAArB,EACA,KAAA,CAAAC,CAAAA,CACA,UAAAF,CAAAA,CACA,KAAA,CAAApB,EACA,UAAA,CAAAD,CAAAA,CACA,SAAA0B,CAAAA,CACA,OAAA,CAAAF,CAAAA,CACA,SAAA,CAAAG,CAAAA,CACA,SAAA,CAAWuB,EACX,WAAA,CAAAC,CAAAA,CACA,gBAAiBX,CAAAA,CACjB,kBAAA,CAAoBC,EACpB,iBAAA,CAAoBrC,CAAAA,EAChB,iBACN,CAAA,CAEC,QAAA,CAAAoB,EAEK+B,CAAAA,CADF9B,CAAAA,CACS3B,EAED,CAAA,CAAA,QAAA,CAAS,GAAA,CAAIA,EAAU,CAAC6D,CAAAA,CAAOC,CAAAA,GACnCjD,GAAAA,CAACkD,EAAAA,CAAA,CAEC,UAAWzD,CAAAA,EAAO,cAAA,CAEjB,SAAAuD,CAAAA,CAAAA,CAHIC,CAIP,CACD,CATc,CAAA,CAWjB9D,CAAAA,CACN,CAEJ,CAEA,SAASgE,EACPC,CAAAA,CACAC,CAAAA,CACyB,CACzB,OAAO,MAAA,CAAO,KAAKA,CAAc,CAAA,CAAE,MAAA,CACjC,CAACC,CAAAA,CAAKC,CAAAA,IACCH,EAAQ,KAAA,CAAkCG,CAAG,IAAM,MAAA,GACtDD,CAAAA,CAAIC,CAAG,CAAA,CAAIF,CAAAA,CAAeE,CAAG,CAAA,CAAA,CAExBD,CAAAA,CAAAA,CAET,EACF,CACF,CA4BA,SAASJ,EAAAA,CAA2C,CAClD,GAAA,CAAAxD,CAAAA,CACA,EAAA,CAAA8D,CAAAA,CACA,QAAA,CAAArE,CAAAA,CACA,GAAA6C,CAAAA,CACA,KAAA,CAAAzB,EACA,SAAA,CAAAG,CAAAA,CACA,MAAApB,CAAAA,CACA,UAAA,CAAAD,CAAAA,CACA,QAAA,CAAA0B,CAAAA,CAAW,KAAA,CACX,gBAAA0C,CAAAA,CACA,SAAA,CAAAzC,EACA,OAAA,CAAAxB,CAAAA,CAAU,MACV,iBAAA,CAAAkE,CAAAA,CACA,GAAGjE,CACL,CAAA,CAA0B,CACxB,IAAMkE,CAAAA,CAAe,CAAA,CAAA,KAAA,GACf,CACJ,WAAA,CAAAlC,EACA,cAAA,CAAAC,CAAAA,CACA,KAAAT,CAAAA,CACA,SAAA,CAAA2C,EACA,WAAA,CAAApB,CAAAA,CACA,MAAA7B,CAAAA,CACA,KAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAWgD,CAAAA,CACX,KAAA,CAAOC,CAAAA,CACP,WAAYC,CAAAA,CACZ,EAAA,CAAIC,EACJ,QAAA,CAAUC,CAAAA,CACV,UAAWC,CAAAA,CACX,iBAAA,CAAmBC,CAAAA,CACnB,kBAAA,CAAAC,CACF,CAAA,CAAIjE,IAAa,CAEXG,CAAAA,CAAYkD,GAAM,KAAA,CAClBJ,CAAAA,CAAUjE,EACVkF,CAAAA,CACJrC,CAAAA,EAAMzB,CAAAA,EAAS6C,CAAAA,CAAQ,KAAA,GAAQ,YAAY,GAAKA,CAAAA,CAAQ,KAAA,EAAO,IAAMO,CAAAA,CACjEW,CAAAA,CAAW7C,IAAgB4C,CAAAA,CAC3BE,CAAAA,CAAaxD,IAAa,MAAA,CAAYkD,CAAAA,CAAkBlD,EACxDyD,CAAAA,CAAiBnF,CAAAA,EAAc0E,EAE/B7C,CAAAA,CAAiB,CAAA,CAAA,MAAA,CAAuB,IAAI,CAAA,CAC5C,CAAA,CAAA,mBAAA,CAAoBxB,CAAAA,CAAK,IAAMwB,CAAAA,CAAS,OAAyB,EAEvE,IAAMuD,CAAAA,CAAoB,cAAaC,CAAAA,EAA6B,CAClExD,EAAS,OAAA,CAAUwD,EACrB,EAAG,EAAE,EAmDL,GAjDM,CAAA,CAAA,SAAA,CAAU,IAAM,CACpB,GAAIzD,IAAS,QAAA,CAAU,OACvB,IAAI0D,CAAAA,CACAC,CAAAA,CAAgC,IAAA,CAC9BC,GACJnB,CAAAA,GAAsB,IAAA,EACrBS,GAA4BT,CAAAA,GAAsB,KAAA,CAE/CoB,EAAe,IAAM,CACzB,GAAI,CAAC5D,CAAAA,CAAS,QAAS,OAEvB,IAAMiB,EAASjB,CAAAA,CAAS,OAAA,CAAQ,uBAAsB,CAEtD,GAAI2D,EAAAA,CAAoB,CACtB,GACED,CAAAA,EACAA,EAAe,GAAA,GAAQzC,CAAAA,CAAO,KAC9ByC,CAAAA,CAAe,IAAA,GAASzC,EAAO,IAAA,EAC/ByC,CAAAA,CAAe,KAAA,GAAUzC,CAAAA,CAAO,KAAA,EAChCyC,CAAAA,CAAe,SAAWzC,CAAAA,CAAO,MAAA,CACjC,CACAwC,CAAAA,CAAQ,qBAAA,CAAsBG,CAAY,CAAA,CAC1C,MACF,CACAF,CAAAA,CAAiBzC,CAAAA,CACjBwC,CAAAA,CAAQ,sBAAsBG,CAAY,EAC5C,CAEAlB,CAAAA,CAAUzB,CAAM,EAClB,CAAA,CAOA,GALImC,GACFQ,CAAAA,EAAa,CACbV,EAAmBX,CAAAA,EAAmB,EAAE,GAC9BhC,CAAAA,EAAae,CAAAA,GAErBqC,EAAAA,CAAoB,OAAO,IAAM,oBAAA,CAAqBF,CAAK,CACjE,EAAG,CACD1D,CAAAA,CACAqD,EACA7C,CAAAA,CACAmC,CAAAA,CACApB,EACAiB,CAAAA,CACAW,CAAAA,CACAV,EACAS,CACF,CAAC,EAEG,CAAO,CAAA,CAAA,cAAA,CAAehF,CAAQ,CAAA,CAAG,OAAOA,EAE5C,IAAMkE,CAAAA,CAAiB,CACrB,aAAA,CAAeiB,CAAAA,CAAW,MAAA,CAAS,QACnC,eAAA,CAAiBA,CAAAA,CACjB,gBAAiBC,CAAAA,CACjB,YAAA,CAAcF,EACd,gBAAA,CAAkB,IACpB,EAEMU,CAAAA,CAAiBpE,CAAAA,CACnB,CACA,YAAA,CAAeqE,CAAAA,EAAwC,CACrDtD,CAAAA,CAAe2C,CAAU,EACzBjB,CAAAA,CAAQ,KAAA,CAAM,YAAA,GAAe4B,CAAC,EAChC,CAAA,CACA,aAAeA,CAAAA,EAAwC,CACrDtD,EAAe,IAAI,CAAA,CACnB0B,EAAQ,KAAA,CAAM,YAAA,GAAe4B,CAAC,EAChC,CACF,CAAA,CACEpE,EACE,CACA,OAAA,CAAUoE,GAAwC,CAChDtD,CAAAA,CAAe2C,CAAU,CAAA,CACzBjB,CAAAA,CAAQ,KAAA,CAAM,OAAA,GAAU4B,CAAC,EAC3B,CACF,CAAA,CACE,GAEN,OAAIxF,CAAAA,CACEyB,IAAS,UAAA,CACE,CAAA,CAAA,YAAA,CACXmC,EACA,CACE,GAAA,CAAKiB,EACL,GAAA,CAAKI,CAAAA,CACL,UAAW1B,EAAAA,CAAG,UAAA,CAAYK,EAAQ,KAAA,CAAM,SAAS,CAAA,CACjD,GAAGD,CAAAA,CAA+BC,CAAAA,CAAS,CACzC,GAAGC,CAAAA,CACH,YAAa,iCACf,CAAC,EACD,GAAG0B,CAAAA,CACH,GAAGtF,CACL,CAAA,CACAoD,KAAAoC,QAAAA,CAAA,CACE,UAAAjF,GAAAA,CAAC8C,eAAAA,CAAA,CACC,OAAA,CAAS,KAAA,CACT,IAAA,CAAK,MAAA,CAEJ,QAAA,CAAAwB,CAAAA,EAAY,CAACC,CAAAA,EACZvE,GAAAA,CAACD,OAAO,GAAA,CAAP,CACC,QAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,SAAA,CAAWgD,GAAGc,CAAAA,CAAkBJ,CAAe,EAC/C,WAAA,CAAU,kBAAA,CACV,KAAM,CACJ,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CACV,GAAGe,EACH,KAAA,CAAA,CACGA,CAAAA,EAAgB,OAAS,CAAA,EAAA,CACzBxD,CAAAA,EAAakD,GAAoB,CAAA,EAAK,GAC3C,CACF,CAAA,CACA,OAAA,CAAS,CAAE,QAAS,CAAE,CAAA,CACtB,SAAU,CAAA,sBAAA,EAAyBF,CAAS,GAC5C,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,MAAA,CAAQ,CAAA,CACR,GAAGF,CAAAA,CACH,GAAGxE,CACL,CAAA,CACA,UAAA,CAAYkF,EACX,GAAGnB,CAAAA,CACN,EAEJ,CAAA,CAEArD,GAAAA,CAACM,EAAA,CACC,SAAA,CAAWI,EACX,WAAA,CAAU,uBAAA,CACV,MAAO,CAAE,QAAA,CAAU,UAAA,CAAY,MAAA,CAAQ,CAAE,CAAA,CACxC,GAAG2C,CAAAA,CAEH,QAAA,CAAAlE,EACH,CAAA,CAAA,CACF,CACF,EAGW,CAAA,CAAA,YAAA,CAAaiE,CAAAA,CAAS,CACjC,GAAA,CAAKqB,CAAAA,CACL,GAAGtB,CAAAA,CAA+BC,CAAAA,CAAS,CACzC,GAAGC,CAAAA,CACH,YAAa,uBACf,CAAC,CAAA,CACD,GAAG0B,CACL,CAAC,EAGIlE,CAAAA,CACLgC,IAAAA,CAACvC,EAAA,CAEC,GAAA,CAAKY,EACL,SAAA,CAAW6B,EAAAA,CAAG9B,IAAS,UAAA,EAAc,UAAA,CAAYP,CAAS,CAAA,CAC1D,WAAA,CAAU,kCACT,GAAG2C,CAAAA,CACH,GAAG5D,CAAAA,CACH,GAAGsF,CAAAA,CAEH,QAAA,CAAA,CAAA9D,CAAAA,GAAS,UAAA,EACRjB,IAAC8C,eAAAA,CAAA,CACC,QAAS,KAAA,CACT,IAAA,CAAK,OAEJ,QAAA,CAAAwB,CAAAA,EAAY,CAACC,CAAAA,EACZvE,GAAAA,CAACD,MAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,EACtB,SAAA,CAAWgD,EAAAA,CAAGc,CAAAA,CAAkBJ,CAAe,CAAA,CAC/C,WAAA,CAAU,mBACV,IAAA,CAAM,CACJ,QAAS,CAAA,CACT,UAAA,CAAY,CACV,GAAGe,CAAAA,CACH,OACGA,CAAAA,EAAgB,KAAA,EAAS,IACzBxD,CAAAA,EAAakD,CAAAA,EAAoB,GAAK,GAC3C,CACF,EACA,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,QAAA,CAAU,yBAAyBF,CAAS,CAAA,CAAA,CAC5C,MAAO,CACL,QAAA,CAAU,WACV,MAAA,CAAQ,CAAA,CACR,GAAGF,CAAAA,CACH,GAAGxE,CACL,CAAA,CACA,UAAA,CAAYkF,EACX,GAAGnB,CAAAA,CACN,EAEJ,CAAA,CAGK,CAAA,CAAA,YAAA,CAAaD,CAAAA,CAAS,CAC3B,KAAA,CAAO,CAAE,SAAU,UAAA,CAAY,MAAA,CAAQ,CAAE,CAAA,CACzC,SAAA,CAAWA,EAAQ,KAAA,CAAM,SAAA,CACzB,GAAGD,CAAAA,CAA+BC,CAAAA,CAAS,CACzC,GAAGC,CAAAA,CACH,YAAa,uBACf,CAAC,CACH,CAAC,CAAA,CAAA,CAAA,CAjDIgB,CAkDP,CAAA,CAEAlF,CAEJ,CC7mBA,GAAM,CAAC+F,EAAAA,CAAcC,EAAO,CAAA,CAC1BC,gBAAAA,CAAkC,aAAa,CAAA,CAIjD,SAASC,GAAK,CACZ,KAAA,CAAOC,EACP,YAAA,CAAA9E,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,GAAGhB,CACL,EAAc,CACZ,GAAM,CAACc,CAAAA,CAAOgF,CAAQ,EAAIC,oBAAAA,CAAqB,CAC7C,KAAMF,CAAAA,CACN,WAAA,CAAa9E,GAAgB,EAAA,CAC7B,QAAA,CAAUC,CACZ,CAAC,CAAA,CAED,OACET,GAAAA,CAACkF,EAAAA,CAAA,CAAa,KAAA,CAAO,CAAE,KAAA,CAAA3E,EAAO,QAAA,CAAAgF,CAAS,EACrC,QAAA,CAAAvF,GAAAA,CAAe,OAAd,CACC,WAAA,CAAU,OACV,KAAA,CAAOO,CAAAA,CACP,cAAegF,CAAAA,CACd,GAAG9F,EACN,CAAA,CACF,CAEJ,CAIA,SAASgG,EAAAA,CAAc,CACrB,UAAA,CAAApG,CAAAA,CAAa,CAAE,KAAM,QAAA,CAAU,SAAA,CAAW,IAAK,OAAA,CAAS,EAAG,EAC3D,GAAGI,CACL,EAAuB,CACrB,GAAM,CAAE,KAAA,CAAAc,CAAM,EAAI4E,EAAAA,EAAQ,CAE1B,OACEnF,GAAAA,CAACK,EAAAA,CAAA,CACC,KAAA,CAAO,KAAA,CACP,eAAA,CAAe,KACf,WAAA,CAAU,gBAAA,CACV,WAAYhB,CAAAA,CACZ,KAAA,CAAOkB,EACN,GAAGd,CAAAA,CACN,CAEJ,CAIA,SAASiG,EAAAA,CAASjG,EAAsB,CACtC,OAAOO,IAAe,CAAA,CAAA,IAAA,CAAd,CACN,YAAU,WAAA,CACT,GAAGP,CAAAA,CACN,CACF,CAMA,SAASkG,GAAkBlG,CAAAA,CAA+B,CACxD,OAAOO,GAAAA,CAACkD,EAAAA,CAAA,CACN,WAAA,CAAU,qBAAA,CACT,GAAGzD,CAAAA,CACN,CACF,CAIA,SAASmG,EAAAA,CAAYnG,EAAyB,CAC5C,OAAOO,IAAe,CAAA,CAAA,OAAA,CAAd,CACN,WAAA,CAAU,cAAA,CACT,GAAGP,CAAAA,CACN,CACF,CAKA,SAASoG,GAAY,CACnB,KAAA,CAAAtF,EACA,UAAA,CAAAuF,CAAAA,CACA,WAAAzG,CAAAA,CAAa,CAAE,SAAU,EAAA,CAAK,IAAA,CAAM,WAAY,CAAA,CAChD,GAAGI,CACL,CAAA,CAAqB,CACnB,OACEO,GAAAA,CAAC8C,eAAAA,CAAA,CAAgB,KAAK,MAAA,CACpB,QAAA,CAAA9C,IAAe,CAAA,CAAA,OAAA,CAAd,CACC,QAAO,IAAA,CACP,UAAA,CAAY8F,EACZ,KAAA,CAAOvF,CAAAA,CAEP,SAAAP,GAAAA,CAACD,MAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,MAAA,CAAQ,WAAY,CAAA,CAC3C,WAAA,CAAU,eACV,IAAA,CAAM,CAAE,QAAS,CAAA,CAAG,MAAA,CAAQ,WAAY,CAAA,CACxC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,MAAA,CAAQ,WAAY,CAAA,CAC3C,MAAA,CAAM,KACN,gBAAA,CAAkBQ,CAAAA,CAClB,WAAYlB,CAAAA,CACX,GAAGI,CAAAA,CACN,CAAA,CACF,CAAA,CACF,CAEJ,CAgBA,IAAMsG,EAAAA,CAAgC,CACpC,IAAA,CAAM,QAAA,CACN,UAAW,GAAA,CACX,OAAA,CAAS,EACX,CAAA,CAEA,SAASC,GAAWvG,CAAAA,CAA0D,CAC5E,OAAO,EAAE,MAAA,GAAUA,IAAUA,CAAAA,CAAM,IAAA,GAAS,aAC9C,CAEA,SAASwG,EAAAA,CAAaxG,EAA0B,CAC9C,GAAM,CAAE,KAAA,CAAAc,CAAM,EAAI4E,EAAAA,EAAQ,CAE1B,GAAIa,EAAAA,CAAWvG,CAAK,CAAA,CAAG,CACrB,GAAM,CAAE,WAAAJ,CAAAA,CAAa0G,EAAAA,CAAmB,GAAGG,CAAU,CAAA,CAAIzG,CAAAA,CAEzD,OACEO,GAAAA,CAACd,EAAAA,CAAA,CACC,WAAA,CAAU,eAAA,CACV,KAAM,CAACqB,CAAK,EACZ,UAAA,CAAYlB,CAAAA,CACX,GAAG6G,CAAAA,CACN,CAEJ,CAEA,GAAM,CAAE,WAAA7G,CAAAA,CAAa0G,EAAAA,CAAmB,MAAAzG,CAAAA,CAAO,GAAG6G,CAAY,CAAA,CAAI1G,CAAAA,CAElE,OACEO,IAACD,MAAAA,CAAO,GAAA,CAAP,CACC,WAAA,CAAU,eAAA,CACV,OAAO,MAAA,CACP,gBAAA,CAAkBQ,CAAAA,CAClB,KAAA,CAAO,CAAE,QAAA,CAAU,SAAU,GAAGjB,CAAM,EACtC,UAAA,CAAY,CAAE,OAAQD,CAAW,CAAA,CAChC,GAAG8G,CAAAA,CACN,CAEJ","file":"chunk-MHG7LM4H.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n type HTMLMotionProps,\n type LegacyAnimationControls,\n motion,\n type TargetAndTransition,\n type Transition,\n} from \"motion/react\"\n\nimport { Slot, type WithAsChild } from \"../primitives/slot\"\nimport { useAutoHeight } from \"@xploreu/hooks/use-auto-height\"\n\ntype AutoHeightProps = WithAsChild<\n {\n children: React.ReactNode;\n deps?: React.DependencyList;\n animate?: TargetAndTransition | LegacyAnimationControls;\n transition?: Transition;\n } & Omit<HTMLMotionProps<\"div\">, \"animate\">\n>\n\nfunction AutoHeight({\n children,\n deps = [],\n transition = {\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n bounce: 0,\n restDelta: 0.01,\n },\n style,\n animate,\n asChild = false,\n ...props\n}: AutoHeightProps) {\n const { ref, height } = useAutoHeight<HTMLDivElement>(deps)\n\n const Comp = asChild ? Slot : motion.div\n\n return (\n <Comp\n animate={{ height, ...animate }}\n style={{ overflow: \"hidden\", ...style }}\n transition={transition}\n {...props}\n >\n <div ref={ref}>\n {children}\n </div>\n </Comp>\n )\n}\n\nexport { AutoHeight, type AutoHeightProps }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n AnimatePresence,\n motion,\n type Transition\n} from \"motion/react\"\n\nimport { cn } from \"@xploreu/lib/cn\"\n\ntype HighlightMode = \"children\" | \"parent\"\n\ntype Bounds = {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nconst DEFAULT_BOUNDS_OFFSET: Bounds = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n}\n\ntype HighlightContextType<T extends string> = {\n as?: keyof HTMLElementTagNameMap;\n mode: HighlightMode;\n activeValue: T | null;\n setActiveValue: (value: T | null) => void;\n setBounds: (bounds: DOMRect) => void;\n clearBounds: () => void;\n id: string;\n hover: boolean;\n click: boolean;\n className?: string;\n style?: React.CSSProperties;\n activeClassName?: string;\n setActiveClassName: (className: string) => void;\n transition?: Transition;\n disabled?: boolean;\n enabled?: boolean;\n exitDelay?: number;\n forceUpdateBounds?: boolean;\n}\n\nconst HighlightContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n HighlightContextType<any> | undefined\n>(undefined)\n\nfunction useHighlight<T extends string>(): HighlightContextType<T> {\n const context = React.useContext(HighlightContext)\n if (!context) {\n throw new Error(\"useHighlight must be used within a HighlightProvider\")\n }\n return context as unknown as HighlightContextType<T>\n}\n\ntype BaseHighlightProps<T extends React.ElementType = \"div\"> = {\n as?: T;\n ref?: React.Ref<HTMLDivElement>;\n mode?: HighlightMode;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n className?: string;\n style?: React.CSSProperties;\n transition?: Transition;\n hover?: boolean;\n click?: boolean;\n disabled?: boolean;\n enabled?: boolean;\n exitDelay?: number;\n}\n\ntype ParentModeHighlightProps = {\n boundsOffset?: Partial<Bounds>;\n containerClassName?: string;\n forceUpdateBounds?: boolean;\n}\n\ntype ControlledParentModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> &\n ParentModeHighlightProps & {\n mode: \"parent\";\n controlledItems: true;\n children: React.ReactNode;\n }\n\ntype ControlledChildrenModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> & {\n mode?: \"children\" | undefined;\n controlledItems: true;\n children: React.ReactNode;\n }\n\ntype UncontrolledParentModeHighlightProps<T extends React.ElementType = \"div\"> =\n BaseHighlightProps<T> &\n ParentModeHighlightProps & {\n mode: \"parent\";\n controlledItems?: false;\n itemsClassName?: string;\n children: React.ReactElement | React.ReactElement[];\n }\n\ntype UncontrolledChildrenModeHighlightProps<\n T extends React.ElementType = \"div\",\n> = BaseHighlightProps<T> & {\n mode?: \"children\";\n controlledItems?: false;\n itemsClassName?: string;\n children: React.ReactElement | React.ReactElement[];\n}\n\ntype HighlightProps<T extends React.ElementType = \"div\"> =\n | ControlledParentModeHighlightProps<T>\n | ControlledChildrenModeHighlightProps<T>\n | UncontrolledParentModeHighlightProps<T>\n | UncontrolledChildrenModeHighlightProps<T>\n\nfunction Highlight<T extends React.ElementType = \"div\">({\n ref,\n ...props\n}: HighlightProps<T>) {\n const {\n as: Component = \"div\",\n children,\n value,\n defaultValue,\n onValueChange,\n className,\n style,\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\n hover = false,\n click = true,\n enabled = true,\n controlledItems,\n disabled = false,\n exitDelay = 200,\n mode = \"children\",\n } = props\n\n const localRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const propsBoundsOffset = (props as ParentModeHighlightProps)?.boundsOffset\n const boundsOffset = propsBoundsOffset ?? DEFAULT_BOUNDS_OFFSET\n const boundsOffsetTop = boundsOffset.top ?? 0\n const boundsOffsetLeft = boundsOffset.left ?? 0\n const boundsOffsetWidth = boundsOffset.width ?? 0\n const boundsOffsetHeight = boundsOffset.height ?? 0\n\n const boundsOffsetRef = React.useRef({\n top: boundsOffsetTop,\n left: boundsOffsetLeft,\n width: boundsOffsetWidth,\n height: boundsOffsetHeight,\n })\n\n React.useEffect(() => {\n boundsOffsetRef.current = {\n top: boundsOffsetTop,\n left: boundsOffsetLeft,\n width: boundsOffsetWidth,\n height: boundsOffsetHeight,\n }\n }, [\n boundsOffsetTop,\n boundsOffsetLeft,\n boundsOffsetWidth,\n boundsOffsetHeight,\n ])\n\n const [activeValue, setActiveValue] = React.useState<string | null>(\n value ?? defaultValue ?? null,\n )\n const [boundsState, setBoundsState] = React.useState<Bounds | null>(null)\n const [activeClassNameState, setActiveClassNameState] =\n React.useState<string>(\"\")\n\n const safeSetActiveValue = (id: string | null) => {\n setActiveValue((prev) => {\n if (prev !== id) {\n onValueChange?.(id)\n return id\n }\n return prev\n })\n }\n\n const safeSetBoundsRef = React.useRef<\n ((bounds: DOMRect) => void) | undefined\n >(undefined)\n\n React.useEffect(() => {\n safeSetBoundsRef.current = (bounds: DOMRect) => {\n if (!localRef.current) return\n\n const containerRect = localRef.current.getBoundingClientRect()\n const offset = boundsOffsetRef.current\n const newBounds: Bounds = {\n top: bounds.top - containerRect.top + offset.top,\n left: bounds.left - containerRect.left + offset.left,\n width: bounds.width + offset.width,\n height: bounds.height + offset.height,\n }\n\n setBoundsState((prev) => {\n if (\n prev &&\n prev.top === newBounds.top &&\n prev.left === newBounds.left &&\n prev.width === newBounds.width &&\n prev.height === newBounds.height\n ) {\n return prev\n }\n return newBounds\n })\n }\n })\n\n const safeSetBounds = (bounds: DOMRect) => {\n safeSetBoundsRef.current?.(bounds)\n }\n\n const clearBounds = React.useCallback(() => {\n setBoundsState((prev) => (prev === null ? prev : null))\n }, [])\n\n React.useEffect(() => {\n if (value !== undefined) setActiveValue(value)\n else if (defaultValue !== undefined) setActiveValue(defaultValue)\n }, [value, defaultValue])\n\n const id = React.useId()\n\n React.useEffect(() => {\n if (mode !== \"parent\") return\n const container = localRef.current\n if (!container) return\n\n const onScroll = () => {\n if (!activeValue) return\n const activeEl = container.querySelector<HTMLElement>(\n `[data-value=\"${activeValue}\"][data-highlight=\"true\"]`,\n )\n if (activeEl)\n safeSetBoundsRef.current?.(activeEl.getBoundingClientRect())\n }\n\n container.addEventListener(\"scroll\", onScroll, { passive: true })\n return () => container.removeEventListener(\"scroll\", onScroll)\n }, [mode, activeValue])\n\n const render = (children: React.ReactNode) => {\n if (mode === \"parent\") {\n return (\n <Component\n ref={localRef}\n className={(props as ParentModeHighlightProps)?.containerClassName}\n data-slot=\"motion-highlight-container\"\n style={{ position: \"relative\", zIndex: 1 }}\n >\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {boundsState && (\n <motion.div\n animate={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 1,\n }}\n className={cn(className, activeClassNameState)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...transition,\n delay: (transition?.delay ?? 0) + (exitDelay ?? 0) / 1000,\n },\n }}\n initial={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 0,\n }}\n style={{ position: \"absolute\", zIndex: 0, ...style }}\n transition={transition}\n />\n )}\n </AnimatePresence>\n {children}\n </Component>\n )\n }\n\n return children\n }\n\n return (\n <HighlightContext.Provider\n value={{\n mode,\n activeValue,\n setActiveValue: safeSetActiveValue,\n id,\n hover,\n click,\n className,\n style,\n transition,\n disabled,\n enabled,\n exitDelay,\n setBounds: safeSetBounds,\n clearBounds,\n activeClassName: activeClassNameState,\n setActiveClassName: setActiveClassNameState,\n forceUpdateBounds: (props as ParentModeHighlightProps)\n ?.forceUpdateBounds,\n }}\n >\n {enabled\n ? controlledItems\n ? render(children)\n : render(\n React.Children.map(children, (child, index) => (\n <HighlightItem\n key={index}\n className={props?.itemsClassName}\n >\n {child}\n </HighlightItem>\n )),\n )\n : children}\n </HighlightContext.Provider>\n )\n}\n\nfunction getNonOverridingDataAttributes(\n element: React.ReactElement,\n dataAttributes: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.keys(dataAttributes).reduce<Record<string, unknown>>(\n (acc, key) => {\n if ((element.props as Record<string, unknown>)[key] === undefined) {\n acc[key] = dataAttributes[key]\n }\n return acc\n },\n {},\n )\n}\n\ntype ExtendedChildProps = React.ComponentProps<\"div\"> & {\n id?: string;\n ref?: React.Ref<HTMLElement>;\n \"data-active\"?: string;\n \"data-value\"?: string;\n \"data-disabled\"?: boolean;\n \"data-highlight\"?: boolean;\n \"data-slot\"?: string;\n}\n\ntype HighlightItemProps<T extends React.ElementType = \"div\"> =\n React.ComponentProps<T> & {\n as?: T;\n children: React.ReactElement;\n id?: string;\n value?: string;\n className?: string;\n style?: React.CSSProperties;\n transition?: Transition;\n activeClassName?: string;\n disabled?: boolean;\n exitDelay?: number;\n asChild?: boolean;\n forceUpdateBounds?: boolean;\n }\n\nfunction HighlightItem<T extends React.ElementType>({\n ref,\n as,\n children,\n id,\n value,\n className,\n style,\n transition,\n disabled = false,\n activeClassName,\n exitDelay,\n asChild = false,\n forceUpdateBounds,\n ...props\n}: HighlightItemProps<T>) {\n const itemId = React.useId()\n const {\n activeValue,\n setActiveValue,\n mode,\n setBounds,\n clearBounds,\n hover,\n click,\n enabled,\n className: contextClassName,\n style: contextStyle,\n transition: contextTransition,\n id: contextId,\n disabled: contextDisabled,\n exitDelay: contextExitDelay,\n forceUpdateBounds: contextForceUpdateBounds,\n setActiveClassName,\n } = useHighlight()\n\n const Component = as ?? \"div\"\n const element = children as React.ReactElement<ExtendedChildProps>\n const childValue =\n id ?? value ?? element.props?.[\"data-value\"] ?? element.props?.id ?? itemId\n const isActive = activeValue === childValue\n const isDisabled = disabled === undefined ? contextDisabled : disabled\n const itemTransition = transition ?? contextTransition\n\n const localRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const refCallback = React.useCallback((node: HTMLElement | null) => {\n localRef.current = node as HTMLDivElement\n }, [])\n\n React.useEffect(() => {\n if (mode !== \"parent\") return\n let rafId: number\n let previousBounds: Bounds | null = null\n const shouldUpdateBounds =\n forceUpdateBounds === true ||\n (contextForceUpdateBounds && forceUpdateBounds !== false)\n\n const updateBounds = () => {\n if (!localRef.current) return\n\n const bounds = localRef.current.getBoundingClientRect()\n\n if (shouldUpdateBounds) {\n if (\n previousBounds &&\n previousBounds.top === bounds.top &&\n previousBounds.left === bounds.left &&\n previousBounds.width === bounds.width &&\n previousBounds.height === bounds.height\n ) {\n rafId = requestAnimationFrame(updateBounds)\n return\n }\n previousBounds = bounds\n rafId = requestAnimationFrame(updateBounds)\n }\n\n setBounds(bounds)\n }\n\n if (isActive) {\n updateBounds()\n setActiveClassName(activeClassName ?? \"\")\n } else if (!activeValue) clearBounds()\n\n if (shouldUpdateBounds) return () => cancelAnimationFrame(rafId)\n }, [\n mode,\n isActive,\n activeValue,\n setBounds,\n clearBounds,\n activeClassName,\n setActiveClassName,\n forceUpdateBounds,\n contextForceUpdateBounds,\n ])\n\n if (!React.isValidElement(children)) return children\n\n const dataAttributes = {\n \"data-active\": isActive ? \"true\" : \"false\",\n \"aria-selected\": isActive,\n \"data-disabled\": isDisabled,\n \"data-value\": childValue,\n \"data-highlight\": true,\n }\n\n const commonHandlers = hover\n ? {\n onMouseEnter: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(childValue)\n element.props.onMouseEnter?.(e)\n },\n onMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(null)\n element.props.onMouseLeave?.(e)\n },\n }\n : click\n ? {\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n setActiveValue(childValue)\n element.props.onClick?.(e)\n },\n }\n : {}\n\n if (asChild) {\n if (mode === \"children\") {\n return React.cloneElement(\n element,\n {\n key: childValue,\n ref: refCallback,\n className: cn(\"relative\", element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item-container\",\n }),\n ...commonHandlers,\n ...props,\n },\n <>\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {isActive && !isDisabled && (\n <motion.div\n animate={{ opacity: 1 }}\n className={cn(contextClassName, activeClassName)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay:\n (itemTransition?.delay ?? 0) +\n (exitDelay ?? contextExitDelay ?? 0) / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n layoutId={`transition-background-${contextId}`}\n style={{\n position: \"absolute\",\n zIndex: 0,\n ...contextStyle,\n ...style,\n }}\n transition={itemTransition}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n\n <Component\n className={className}\n data-slot=\"motion-highlight-item\"\n style={{ position: \"relative\", zIndex: 1 }}\n {...dataAttributes}\n >\n {children}\n </Component>\n </>,\n )\n }\n\n return React.cloneElement(element, {\n ref: refCallback,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item\",\n }),\n ...commonHandlers,\n })\n }\n\n return enabled ? (\n <Component\n key={childValue}\n ref={localRef}\n className={cn(mode === \"children\" && \"relative\", className)}\n data-slot=\"motion-highlight-item-container\"\n {...dataAttributes}\n {...props}\n {...commonHandlers}\n >\n {mode === \"children\" && (\n <AnimatePresence\n initial={false}\n mode=\"wait\"\n >\n {isActive && !isDisabled && (\n <motion.div\n animate={{ opacity: 1 }}\n className={cn(contextClassName, activeClassName)}\n data-slot=\"motion-highlight\"\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay:\n (itemTransition?.delay ?? 0) +\n (exitDelay ?? contextExitDelay ?? 0) / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n layoutId={`transition-background-${contextId}`}\n style={{\n position: \"absolute\",\n zIndex: 0,\n ...contextStyle,\n ...style,\n }}\n transition={itemTransition}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n )}\n\n {React.cloneElement(element, {\n style: { position: \"relative\", zIndex: 1 },\n className: element.props.className,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n \"data-slot\": \"motion-highlight-item\",\n }),\n })}\n </Component>\n ) : (\n children\n )\n}\n\nexport {\n Highlight,\n HighlightItem,\n type HighlightItemProps,\n type HighlightProps,\n useHighlight,\n}","\"use client\"\n\nimport * as React from \"react\"\n\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\"\nimport {\n AnimatePresence,\n type HTMLMotionProps,\n motion,\n type Transition,\n} from \"motion/react\"\n\nimport { AutoHeight, type AutoHeightProps } from \"../effects/auto-height\"\nimport {\n Highlight,\n HighlightItem,\n type HighlightItemProps,\n type HighlightProps,\n} from \"../effects/highlight\"\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\n\ntype TabsContextType = {\n value: string | undefined;\n setValue: TabsProps[\"onValueChange\"];\n}\n\nconst [TabsProvider, useTabs] =\n getStrictContext<TabsContextType>(\"TabsContext\")\n\ntype TabsProps = React.ComponentProps<typeof TabsPrimitive.Root>\n\nfunction Tabs({\n value: valueProp,\n defaultValue,\n onValueChange,\n ...props\n}: TabsProps) {\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue || \"\",\n onChange: onValueChange,\n })\n\n return (\n <TabsProvider value={{ value, setValue }}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n value={value}\n onValueChange={setValue}\n {...props}\n />\n </TabsProvider>\n )\n}\n\ntype TabsHighlightProps = Omit<HighlightProps, \"controlledItems\" | \"value\">\n\nfunction TabsHighlight({\n transition = { type: \"spring\", stiffness: 200, damping: 25 },\n ...props\n}: TabsHighlightProps) {\n const { value } = useTabs()\n\n return (\n <Highlight\n click={false}\n controlledItems\n data-slot=\"tabs-highlight\"\n transition={transition}\n value={value}\n {...props}\n />\n )\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>\n\nfunction TabsList(props: TabsListProps) {\n return <TabsPrimitive.List\n data-slot=\"tabs-list\"\n {...props}\n />\n}\n\ntype TabsHighlightItemProps = HighlightItemProps & {\n value: string;\n}\n\nfunction TabsHighlightItem(props: TabsHighlightItemProps) {\n return <HighlightItem\n data-slot=\"tabs-highlight-item\"\n {...props}\n />\n}\n\ntype TabsTriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger>\n\nfunction TabsTrigger(props: TabsTriggerProps) {\n return <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n {...props}\n />\n}\n\ntype TabsContentProps = React.ComponentProps<typeof TabsPrimitive.Content> &\n HTMLMotionProps<\"div\">\n\nfunction TabsContent({\n value,\n forceMount,\n transition = { duration: 0.5, ease: \"easeInOut\" },\n ...props\n}: TabsContentProps) {\n return (\n <AnimatePresence mode=\"wait\">\n <TabsPrimitive.Content\n asChild\n forceMount={forceMount}\n value={value}\n >\n <motion.div\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n data-slot=\"tabs-content\"\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n layout\n layoutDependency={value}\n transition={transition}\n {...props}\n />\n </TabsPrimitive.Content>\n </AnimatePresence>\n )\n}\n\ntype TabsContentsAutoProps = AutoHeightProps & {\n mode?: \"auto-height\";\n children: React.ReactNode;\n transition?: Transition;\n}\n\ntype TabsContentsLayoutProps = Omit<HTMLMotionProps<\"div\">, \"transition\"> & {\n mode: \"layout\";\n children: React.ReactNode;\n transition?: Transition;\n}\n\ntype TabsContentsProps = TabsContentsAutoProps | TabsContentsLayoutProps\n\nconst defaultTransition: Transition = {\n type: \"spring\",\n stiffness: 200,\n damping: 30,\n}\n\nfunction isAutoMode(props: TabsContentsProps): props is TabsContentsAutoProps {\n return !(\"mode\" in props) || props.mode === \"auto-height\"\n}\n\nfunction TabsContents(props: TabsContentsProps) {\n const { value } = useTabs()\n\n if (isAutoMode(props)) {\n const { transition = defaultTransition, ...autoProps } = props\n\n return (\n <AutoHeight\n data-slot=\"tabs-contents\"\n deps={[value]}\n transition={transition}\n {...autoProps}\n />\n )\n }\n\n const { transition = defaultTransition, style, ...layoutProps } = props\n\n return (\n <motion.div\n data-slot=\"tabs-contents\"\n layout=\"size\"\n layoutDependency={value}\n style={{ overflow: \"hidden\", ...style }}\n transition={{ layout: transition }}\n {...layoutProps}\n />\n )\n}\n\nexport {\n Tabs,\n TabsContent,\n type TabsContentProps,\n TabsContents,\n type TabsContentsProps,\n TabsHighlight,\n TabsHighlightItem,\n type TabsHighlightItemProps,\n type TabsHighlightProps,\n TabsList,\n type TabsListProps,\n type TabsProps,\n TabsTrigger,\n type TabsTriggerProps,\n}"]}
|