@gradeui/ui 0.8.2 → 0.9.0
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/index.d.mts +256 -94
- package/dist/index.d.ts +256 -94
- package/dist/index.js +240 -240
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +240 -240
- package/dist/index.mjs.map +1 -1
- package/dist/map/google.d.mts +6 -0
- package/dist/map/google.d.ts +6 -0
- package/dist/map/google.js +2 -0
- package/dist/map/google.js.map +1 -0
- package/dist/map/google.mjs +2 -0
- package/dist/map/google.mjs.map +1 -0
- package/dist/map/mapbox.d.mts +6 -0
- package/dist/map/mapbox.d.ts +6 -0
- package/dist/map/mapbox.js +3 -0
- package/dist/map/mapbox.js.map +1 -0
- package/dist/map/mapbox.mjs +3 -0
- package/dist/map/mapbox.mjs.map +1 -0
- package/dist/map/maplibre.d.mts +6 -0
- package/dist/map/maplibre.d.ts +6 -0
- package/dist/map/maplibre.js +3 -0
- package/dist/map/maplibre.js.map +1 -0
- package/dist/map/maplibre.mjs +3 -0
- package/dist/map/maplibre.mjs.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/types-BxywIwvG.d.mts +160 -0
- package/dist/types-BxywIwvG.d.ts +160 -0
- package/package.json +40 -4
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,233 @@
|
|
|
1
|
-
import*as y from'react';import {useRef,useEffect}from'react';import*as ae from'@radix-ui/react-accordion';import {ChevronDown,Check,X as X$1,ChevronRight,Circle,ChevronUp,ChevronLeft,Menu,Pause,Play,ChevronLeftIcon,ChevronRightIcon,ChevronDownIcon,CalendarIcon,Palette,Download,Trash2,SunDim,Sun,Moon,MoonStar}from'lucide-react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {cva}from'class-variance-authority';import {Slot}from'@radix-ui/react-slot';import*as ge from'@radix-ui/react-avatar';import {getDefaultClassNames,DayPicker}from'react-day-picker';import*as ze from'@radix-ui/react-checkbox';import {format}from'date-fns';import*as de from'@radix-ui/react-popover';import*as F from'@radix-ui/react-dialog';import*as x from'@radix-ui/react-dropdown-menu';import*as _t from'@radix-ui/react-label';import*as qe from'@radix-ui/react-progress';import*as we from'@radix-ui/react-radio-group';import*as ne from'@radix-ui/react-scroll-area';import*as R from'@radix-ui/react-select';import*as jt from'@radix-ui/react-separator';import*as he from'@radix-ui/react-slider';import*as Xe from'@radix-ui/react-switch';import*as le from'@radix-ui/react-tabs';import*as ce from'@radix-ui/react-tooltip';import*as I from'three';import {EffectComposer,RenderPass,BloomEffect,KernelSize,NoiseEffect,BlendFunction,ScanlineEffect,VignetteEffect,ChromaticAberrationEffect,GlitchEffect,EffectPass}from'postprocessing';import Mi from'lenis';function a(...e){return twMerge(clsx(e))}var Ka=ae.Root,Sr=y.forwardRef(({className:e,...t},r)=>y.createElement(ae.Item,{ref:r,className:a("border-b",e),...t}));Sr.displayName="AccordionItem";var Cr=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(ae.Header,{className:"flex"},y.createElement(ae.Trigger,{ref:o,className:a("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...r},t,y.createElement(ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));Cr.displayName=ae.Trigger.displayName;var Nr=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(ae.Content,{ref:o,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...r},y.createElement("div",{className:a("pb-4 pt-0",e)},t)));Nr.displayName=ae.Content.displayName;var Wa=cva("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",{variants:{variant:{default:"bg-background text-foreground [&>svg]:text-foreground",destructive:"border-destructive/30 bg-destructive-soft text-destructive-deep [&>svg]:text-destructive-deep",success:"border-success/30 bg-success-soft text-success-deep [&>svg]:text-success-deep",warning:"border-warning/30 bg-warning-soft text-warning-deep [&>svg]:text-warning-deep",info:"border-info/30 bg-info-soft text-info-deep [&>svg]:text-info-deep",highlight:"border-highlight/30 bg-highlight-soft text-foreground [&>svg]:text-highlight-deep"}},defaultVariants:{variant:"default"}}),kr=y.forwardRef(({className:e,variant:t,...r},o)=>y.createElement("div",{ref:o,role:"alert",className:a(Wa({variant:t}),e),...r}));kr.displayName="Alert";var Mr=y.forwardRef(({className:e,...t},r)=>y.createElement("h5",{ref:r,className:a("mb-1 font-medium leading-none tracking-tight",e),...t}));Mr.displayName="AlertTitle";var Er=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,className:a("text-sm [&_p]:leading-relaxed",e),...t}));Er.displayName="AlertDescription";var Hr=cva("rds-app-shell min-h-screen w-full bg-background text-foreground",{variants:{nav:{none:"block",top:"grid grid-rows-[auto_1fr]",side:"grid grid-cols-[auto_1fr]"}},defaultVariants:{nav:"none"}}),Lr=cva("rds-app-shell-nav",{variants:{placement:{top:"border-b bg-background",side:"border-r bg-background",none:"hidden"},sticky:{true:"",false:""}},compoundVariants:[{placement:"top",sticky:true,className:"sticky top-0 z-30"},{placement:"side",sticky:true,className:"sticky top-0 h-screen self-start"}],defaultVariants:{placement:"top",sticky:true}}),Dr=cva("rds-app-shell-main min-w-0",{variants:{maxWidth:{full:"w-full",container:"w-full mx-auto max-w-7xl px-4 md:px-6 lg:px-8"}},defaultVariants:{maxWidth:"full"}}),Ir=y.forwardRef(({className:e,nav:t,asChild:r=false,...o},n)=>y.createElement(r?Slot:"div",{ref:n,"data-gds-part":"app-shell","data-nav":t??"none",className:a(Hr({nav:t,className:e})),...o}));Ir.displayName="AppShell";var Ar=y.forwardRef(({className:e,placement:t,sticky:r,asChild:o=false,...n},i)=>y.createElement(o?Slot:"nav",{ref:i,"data-gds-part":"app-shell-nav","data-placement":t??"top",className:a(Lr({placement:t,sticky:r,className:e})),...n}));Ar.displayName="AppShellNav";var Fr=y.forwardRef(({className:e,maxWidth:t,asChild:r=false,...o},n)=>y.createElement(r?Slot:"main",{ref:n,"data-gds-part":"app-shell-main",className:a(Dr({maxWidth:t,className:e})),...o}));Fr.displayName="AppShellMain";var Or=y.forwardRef(({className:e,...t},r)=>y.createElement(ge.Root,{ref:r,className:a("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...t}));Or.displayName=ge.Root.displayName;var Gr=y.forwardRef(({className:e,...t},r)=>y.createElement(ge.Image,{ref:r,className:a("aspect-square h-full w-full",e),...t}));Gr.displayName=ge.Image.displayName;var $r=y.forwardRef(({className:e,...t},r)=>y.createElement(ge.Fallback,{ref:r,className:a("flex h-full w-full items-center justify-center rounded-full bg-muted",e),...t}));$r.displayName=ge.Fallback.displayName;var Br=cva("inline-flex items-center gap-1 border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 [&_svg]:size-3 [&_svg]:shrink-0",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground",highlight:"border-transparent bg-rds-yellow-400 text-rds-gray-900 shadow hover:bg-rds-yellow-500",success:"border-transparent bg-rds-green-500 text-rds-gray-900 shadow hover:bg-rds-green-600",warning:"border-transparent bg-orange-500 text-white shadow hover:bg-orange-600",info:"border-transparent bg-blue-500 text-white shadow hover:bg-blue-600","success-soft":"border-rds-green-500/20 bg-rds-green-500/10 text-rds-green-600 dark:text-rds-green-400","warning-soft":"border-orange-500/20 bg-orange-500/10 text-orange-600 dark:text-orange-400","destructive-soft":"border-destructive/20 bg-destructive/10 text-destructive dark:text-red-400","info-soft":"border-blue-500/20 bg-blue-500/10 text-blue-600 dark:text-blue-400","highlight-soft":"border-rds-yellow-500/20 bg-rds-yellow-400/10 text-rds-yellow-600 dark:text-rds-yellow-400","success-outline":"border-rds-green-500/50 bg-transparent text-rds-green-600 dark:text-rds-green-400","warning-outline":"border-orange-500/50 bg-transparent text-orange-600 dark:text-orange-400","destructive-outline":"border-destructive/50 bg-transparent text-destructive dark:text-red-400","info-outline":"border-blue-500/50 bg-transparent text-blue-600 dark:text-blue-400"},rounded:{default:"rounded-md",full:"rounded-full"}},defaultVariants:{variant:"default",rounded:"default"}});function qa({className:e,variant:t,rounded:r,...o}){return y.createElement("div",{className:a(Br({variant:t,rounded:r}),e),...o})}var Ke=cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),X=y.forwardRef(({className:e,variant:t,size:r,asChild:o=false,...n},i)=>y.createElement(o?Slot:"button",{className:a("rds-button",Ke({variant:t,size:r,className:e})),ref:i,...n}));X.displayName="Button";function ut({className:e,classNames:t,showOutsideDays:r=true,captionLayout:o="label",buttonVariant:n="ghost",formatters:i,components:d,...l}){let s=getDefaultClassNames();return y.createElement(DayPicker,{showOutsideDays:r,className:a("bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,e),captionLayout:o,formatters:{formatMonthDropdown:p=>p.toLocaleString("default",{month:"short"}),...i},classNames:{root:a("w-fit",s.root),months:a("relative flex flex-col gap-4 md:flex-row",s.months),month:a("flex w-full flex-col gap-4",s.month),nav:a("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",s.nav),button_previous:a(Ke({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_previous),button_next:a(Ke({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_next),month_caption:a("flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",s.month_caption),dropdowns:a("flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",s.dropdowns),dropdown_root:a("has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",s.dropdown_root),dropdown:a("bg-popover absolute inset-0 opacity-0",s.dropdown),caption_label:a("select-none font-medium",o==="label"?"text-sm":"[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",s.caption_label),table:"w-full border-collapse",weekdays:a("flex",s.weekdays),weekday:a("text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",s.weekday),week:a("mt-2 flex w-full",s.week),week_number_header:a("w-[--cell-size] select-none",s.week_number_header),week_number:a("text-muted-foreground select-none text-[0.8rem]",s.week_number),day:a("group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",s.day),range_start:a("bg-accent rounded-l-md",s.range_start),range_middle:a("rounded-none",s.range_middle),range_end:a("bg-accent rounded-r-md",s.range_end),today:a("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",s.today),outside:a("text-muted-foreground aria-selected:text-muted-foreground",s.outside),disabled:a("text-muted-foreground opacity-50",s.disabled),hidden:a("invisible",s.hidden),...t},components:{Root:({className:p,rootRef:c,...m})=>y.createElement("div",{"data-slot":"calendar",ref:c,className:a(p),...m}),Chevron:({className:p,orientation:c,...m})=>c==="left"?y.createElement(ChevronLeftIcon,{className:a("size-4",p),...m}):c==="right"?y.createElement(ChevronRightIcon,{className:a("size-4",p),...m}):y.createElement(ChevronDownIcon,{className:a("size-4",p),...m}),DayButton:_r,WeekNumber:({children:p,...c})=>y.createElement("td",{...c},y.createElement("div",{className:"flex size-[--cell-size] items-center justify-center text-center"},p)),...d},...l})}function _r({className:e,day:t,modifiers:r,...o}){let n=getDefaultClassNames(),i=y.useRef(null);return y.useEffect(()=>{r.focused&&i.current?.focus();},[r.focused]),y.createElement(X,{ref:i,variant:"ghost",size:"icon","data-day":`${t.date.getFullYear()}-${String(t.date.getMonth()+1).padStart(2,"0")}-${String(t.date.getDate()).padStart(2,"0")}`,"data-selected-single":r.selected&&!r.range_start&&!r.range_end&&!r.range_middle,"data-range-start":r.range_start,"data-range-end":r.range_end,"data-range-middle":r.range_middle,className:a("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",n.day,e),...o})}var Kr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card",className:a("rds-card rounded-xl border bg-card text-card-foreground shadow",e),...t}));Kr.displayName="Card";var zr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card-header",className:a("flex flex-col space-y-1.5 p-6",e),...t}));zr.displayName="CardHeader";var Wr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card-title",className:a("font-semibold leading-none tracking-tight",e),...t}));Wr.displayName="CardTitle";var jr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card-description",className:a("text-sm text-muted-foreground",e),...t}));jr.displayName="CardDescription";var qr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card-content",className:a("p-6 pt-0",e),...t}));qr.displayName="CardContent";var Yr=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{ref:r,"data-gds-part":"card-footer",className:a("flex items-center p-6 pt-0",e),...t}));Yr.displayName="CardFooter";var Xr=y.forwardRef(({className:e,...t},r)=>y.createElement(ze.Root,{ref:r,className:a("rds-checkbox peer h-4 w-4 shrink-0 rounded-[3px] border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...t},y.createElement(ze.Indicator,{className:a("flex items-center justify-center text-current")},y.createElement(Check,{className:"h-4 w-4"}))));Xr.displayName=ze.Root.displayName;var Fe=de.Root,Oe=de.Trigger,rn=de.Anchor,Ee=y.forwardRef(({className:e,align:t="center",sideOffset:r=4,...o},n)=>y.createElement(de.Portal,null,y.createElement(de.Content,{ref:n,align:t,sideOffset:r,className:a("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",e),...o})));Ee.displayName=de.Content.displayName;var on="PPP",an="LLL dd, y";function nn({value:e,onChange:t,placeholder:r="Pick a date",disabled:o,className:n,contentClassName:i,align:d="start",side:l,format:s=on,captionLayout:p,icon:c,"aria-label":m}){return y.createElement(Fe,null,y.createElement(Oe,{asChild:true},y.createElement(X,{type:"button",variant:"outline",disabled:o,"aria-label":m??(e?void 0:r),"data-empty":!e,className:a("w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},c??y.createElement(CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?format(e,s):y.createElement("span",null,r))),y.createElement(Ee,{className:a("w-auto p-0",i),align:d,side:l},y.createElement(ut,{mode:"single",selected:e,onSelect:t,captionLayout:p,initialFocus:true})))}function sn({value:e,onChange:t,placeholder:r="Pick a date range",disabled:o,className:n,contentClassName:i,align:d="start",side:l,format:s=an,captionLayout:p,icon:c,numberOfMonths:m=2,"aria-label":g}){let h=!!e?.from;return y.createElement(Fe,null,y.createElement(Oe,{asChild:true},y.createElement(X,{type:"button",variant:"outline",disabled:o,"aria-label":g??(h?void 0:r),"data-empty":!h,className:a("w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},c??y.createElement(CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?.from?e.to?y.createElement(y.Fragment,null,format(e.from,s)," \u2013"," ",format(e.to,s)):format(e.from,s):y.createElement("span",null,r))),y.createElement(Ee,{className:a("w-auto p-0",i),align:d,side:l},y.createElement(ut,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:m,captionLayout:p,initialFocus:true})))}var ln=F.Root,cn=F.Trigger,Jr=F.Portal,pn=F.Close,Ut=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Overlay,{ref:r,className:a("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));Ut.displayName=F.Overlay.displayName;var Qr=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(Jr,null,y.createElement(Ut,null),y.createElement(F.Content,{ref:o,className:a("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...r},t,y.createElement(F.Close,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"},y.createElement(X$1,{className:"h-4 w-4"}),y.createElement("span",{className:"sr-only"},"Close")))));Qr.displayName=F.Content.displayName;var eo=({className:e,...t})=>y.createElement("div",{className:a("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});eo.displayName="DialogHeader";var to=({className:e,...t})=>y.createElement("div",{className:a("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});to.displayName="DialogFooter";var ro=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Title,{ref:r,className:a("text-lg font-semibold leading-none tracking-tight",e),...t}));ro.displayName=F.Title.displayName;var oo=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Description,{ref:r,className:a("text-sm text-muted-foreground",e),...t}));oo.displayName=F.Description.displayName;var gn=x.Root,hn=x.Trigger,yn=x.Group,vn=x.Portal,bn=x.Sub,xn=x.RadioGroup,ao=y.forwardRef(({className:e,inset:t,children:r,...o},n)=>y.createElement(x.SubTrigger,{ref:n,className:a("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",t&&"pl-8",e),...o},r,y.createElement(ChevronRight,{className:"ml-auto"})));ao.displayName=x.SubTrigger.displayName;var no=y.forwardRef(({className:e,...t},r)=>y.createElement(x.SubContent,{ref:r,className:a("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",e),...t}));no.displayName=x.SubContent.displayName;var io=y.forwardRef(({className:e,sideOffset:t=4,...r},o)=>y.createElement(x.Portal,null,y.createElement(x.Content,{ref:o,sideOffset:t,className:a("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",e),...r})));io.displayName=x.Content.displayName;var so=y.forwardRef(({className:e,inset:t,...r},o)=>y.createElement(x.Item,{ref:o,className:a("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",t&&"pl-8",e),...r}));so.displayName=x.Item.displayName;var lo=y.forwardRef(({className:e,children:t,checked:r,...o},n)=>y.createElement(x.CheckboxItem,{ref:n,className:a("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),checked:r,...o},y.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},y.createElement(x.ItemIndicator,null,y.createElement(Check,{className:"h-4 w-4"}))),t));lo.displayName=x.CheckboxItem.displayName;var co=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(x.RadioItem,{ref:o,className:a("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r},y.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},y.createElement(x.ItemIndicator,null,y.createElement(Circle,{className:"h-2 w-2 fill-current"}))),t));co.displayName=x.RadioItem.displayName;var po=y.forwardRef(({className:e,inset:t,...r},o)=>y.createElement(x.Label,{ref:o,className:a("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...r}));po.displayName=x.Label.displayName;var mo=y.forwardRef(({className:e,...t},r)=>y.createElement(x.Separator,{ref:r,className:a("-mx-1 my-1 h-px bg-muted",e),...t}));mo.displayName=x.Separator.displayName;var uo=({className:e,...t})=>y.createElement("span",{className:a("ml-auto text-xs tracking-widest opacity-60",e),...t});uo.displayName="DropdownMenuShortcut";var fo=y.forwardRef(({className:e,type:t,...r},o)=>y.createElement("input",{type:t,className:a("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:o,...r}));fo.displayName="Input";var Tn=cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),go=y.forwardRef(({className:e,...t},r)=>y.createElement(_t.Root,{ref:r,className:a(Tn(),e),...t}));go.displayName=_t.Root.displayName;var ho=y.forwardRef(({className:e,value:t,...r},o)=>y.createElement(qe.Root,{ref:o,className:a("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...r},y.createElement(qe.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));ho.displayName=qe.Root.displayName;var yo=y.forwardRef(({className:e,...t},r)=>y.createElement(we.Root,{className:a("grid gap-2",e),...t,ref:r}));yo.displayName=we.Root.displayName;var vo=y.forwardRef(({className:e,...t},r)=>y.createElement(we.Item,{ref:r,className:a("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),...t},y.createElement(we.Indicator,{className:"flex items-center justify-center"},y.createElement(Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));vo.displayName=we.Item.displayName;var bo=cva("rds-row flex flex-row",{variants:{gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch",baseline:"items-baseline"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},wrap:{true:"flex-wrap",false:"flex-nowrap"}},defaultVariants:{gap:"md",align:"center",justify:"start",wrap:false}}),xo=y.forwardRef(({className:e,gap:t,align:r,justify:o,wrap:n,asChild:i=false,...d},l)=>y.createElement(i?Slot:"div",{ref:l,"data-gds-part":"row",className:a(bo({gap:t,align:r,justify:o,wrap:n,className:e})),...d}));xo.displayName="Row";var Ro=cva("rds-grid grid",{variants:{cols:{1:"grid-cols-1",2:"grid-cols-1 md:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5",6:"grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",12:"grid-cols-4 md:grid-cols-6 lg:grid-cols-12"},gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"}},defaultVariants:{cols:"3",gap:"md",align:"stretch"}}),To=y.forwardRef(({className:e,cols:t,gap:r,align:o,asChild:n=false,...i},d)=>y.createElement(n?Slot:"div",{ref:d,"data-gds-part":"grid",className:a(Ro({cols:t,gap:r,align:o,className:e})),...i}));To.displayName="Grid";var wo=cva("rds-flex flex",{variants:{direction:{row:"flex-row",col:"flex-col","row-reverse":"flex-row-reverse","col-reverse":"flex-col-reverse"},gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch",baseline:"items-baseline"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},wrap:{nowrap:"flex-nowrap",wrap:"flex-wrap","wrap-reverse":"flex-wrap-reverse"}},defaultVariants:{direction:"row",gap:"none",align:"stretch",justify:"start",wrap:"nowrap"}}),Po=y.forwardRef(({className:e,direction:t,gap:r,align:o,justify:n,wrap:i,asChild:d=false,...l},s)=>y.createElement(d?Slot:"div",{ref:s,"data-gds-part":"flex",className:a(wo({direction:t,gap:r,align:o,justify:n,wrap:i,className:e})),...l}));Po.displayName="Flex";var So=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(ne.Root,{ref:o,className:a("relative overflow-hidden",e),...r},y.createElement(ne.Viewport,{className:"h-full w-full rounded-[inherit]"},t),y.createElement(Kt,null),y.createElement(ne.Corner,null)));So.displayName=ne.Root.displayName;var Kt=y.forwardRef(({className:e,orientation:t="vertical",...r},o)=>y.createElement(ne.ScrollAreaScrollbar,{ref:o,orientation:t,className:a("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...r},y.createElement(ne.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));Kt.displayName=ne.ScrollAreaScrollbar.displayName;var Ln=R.Root,Dn=R.Group,In=R.Value,No=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(R.Trigger,{ref:o,className:a("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...r},t,y.createElement(R.Icon,{asChild:true},y.createElement(ChevronDown,{className:"h-4 w-4 opacity-50"}))));No.displayName=R.Trigger.displayName;var zt=y.forwardRef(({className:e,...t},r)=>y.createElement(R.ScrollUpButton,{ref:r,className:a("flex cursor-default items-center justify-center py-1",e),...t},y.createElement(ChevronUp,{className:"h-4 w-4"})));zt.displayName=R.ScrollUpButton.displayName;var Wt=y.forwardRef(({className:e,...t},r)=>y.createElement(R.ScrollDownButton,{ref:r,className:a("flex cursor-default items-center justify-center py-1",e),...t},y.createElement(ChevronDown,{className:"h-4 w-4"})));Wt.displayName=R.ScrollDownButton.displayName;var ko=y.forwardRef(({className:e,children:t,position:r="popper",...o},n)=>y.createElement(R.Portal,null,y.createElement(R.Content,{ref:n,className:a("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...o},y.createElement(zt,null),y.createElement(R.Viewport,{className:a("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},t),y.createElement(Wt,null))));ko.displayName=R.Content.displayName;var Mo=y.forwardRef(({className:e,...t},r)=>y.createElement(R.Label,{ref:r,className:a("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));Mo.displayName=R.Label.displayName;var Eo=y.forwardRef(({className:e,children:t,...r},o)=>y.createElement(R.Item,{ref:o,className:a("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r},y.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},y.createElement(R.ItemIndicator,null,y.createElement(Check,{className:"h-4 w-4"}))),y.createElement(R.ItemText,null,t)));Eo.displayName=R.Item.displayName;var Ho=y.forwardRef(({className:e,...t},r)=>y.createElement(R.Separator,{ref:r,className:a("-mx-1 my-1 h-px bg-muted",e),...t}));Ho.displayName=R.Separator.displayName;var Lo=y.forwardRef(({className:e,orientation:t="horizontal",decorative:r=true,...o},n)=>y.createElement(jt.Root,{ref:n,decorative:r,orientation:t,className:a("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...o}));Lo.displayName=jt.Root.displayName;var On=F.Root,Gn=F.Trigger,$n=F.Close,Do=F.Portal,qt=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Overlay,{className:a("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t,ref:r}));qt.displayName=F.Overlay.displayName;var Vn=cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",{variants:{side:{top:"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",bottom:"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",left:"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",right:"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"}},defaultVariants:{side:"right"}}),Io=y.forwardRef(({side:e="right",className:t,children:r,...o},n)=>y.createElement(Do,null,y.createElement(qt,null),y.createElement(F.Content,{ref:n,className:a(Vn({side:e}),t),...o},r,y.createElement(F.Close,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary"},y.createElement(X$1,{className:"h-4 w-4"}),y.createElement("span",{className:"sr-only"},"Close")))));Io.displayName=F.Content.displayName;var Ao=({className:e,...t})=>y.createElement("div",{className:a("flex flex-col space-y-2 text-center sm:text-left",e),...t});Ao.displayName="SheetHeader";var Fo=({className:e,...t})=>y.createElement("div",{className:a("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Fo.displayName="SheetFooter";var Oo=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Title,{ref:r,className:a("text-lg font-semibold text-foreground",e),...t}));Oo.displayName=F.Title.displayName;var Go=y.forwardRef(({className:e,...t},r)=>y.createElement(F.Description,{ref:r,className:a("text-sm text-muted-foreground",e),...t}));Go.displayName=F.Description.displayName;function Bn({className:e,...t}){return React.createElement("div",{className:a("animate-pulse rounded-md bg-muted",e),...t})}var $o=y.forwardRef(({className:e,...t},r)=>y.createElement(he.Root,{ref:r,className:a("relative flex w-full touch-none select-none items-center",e),...t},y.createElement(he.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary"},y.createElement(he.Range,{className:"absolute h-full bg-primary"})),y.createElement(he.Thumb,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})));$o.displayName=he.Root.displayName;var Vo=cva("rds-stack flex flex-col",{variants:{gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"}},defaultVariants:{gap:"md",align:"stretch"}}),Bo=y.forwardRef(({className:e,gap:t,align:r,asChild:o=false,...n},i)=>y.createElement(o?Slot:"div",{ref:i,"data-gds-part":"stack",className:a(Vo({gap:t,align:r,className:e})),...n}));Bo.displayName="Stack";var Uo=y.forwardRef(({className:e,...t},r)=>y.createElement(Xe.Root,{className:a("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:r},y.createElement(Xe.Thumb,{className:a("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})));Uo.displayName=Xe.Root.displayName;var _o=y.forwardRef(({className:e,...t},r)=>y.createElement("div",{className:"relative w-full overflow-auto"},y.createElement("table",{ref:r,className:a("w-full caption-bottom text-sm",e),...t})));_o.displayName="Table";var Ko=y.forwardRef(({className:e,...t},r)=>y.createElement("thead",{ref:r,className:a("[&_tr]:border-b",e),...t}));Ko.displayName="TableHeader";var zo=y.forwardRef(({className:e,...t},r)=>y.createElement("tbody",{ref:r,className:a("[&_tr:last-child]:border-0",e),...t}));zo.displayName="TableBody";var Wo=y.forwardRef(({className:e,...t},r)=>y.createElement("tfoot",{ref:r,className:a("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));Wo.displayName="TableFooter";var jo=y.forwardRef(({className:e,...t},r)=>y.createElement("tr",{ref:r,className:a("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));jo.displayName="TableRow";var qo=y.forwardRef(({className:e,...t},r)=>y.createElement("th",{ref:r,className:a("h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));qo.displayName="TableHead";var Yo=y.forwardRef(({className:e,...t},r)=>y.createElement("td",{ref:r,className:a("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));Yo.displayName="TableCell";var Xo=y.forwardRef(({className:e,...t},r)=>y.createElement("caption",{ref:r,className:a("mt-4 text-sm text-muted-foreground",e),...t}));Xo.displayName="TableCaption";var Kn=le.Root,Zo=y.forwardRef(({className:e,...t},r)=>y.createElement(le.List,{ref:r,className:a("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...t}));Zo.displayName=le.List.displayName;var Jo=y.forwardRef(({className:e,...t},r)=>y.createElement(le.Trigger,{ref:r,className:a("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground",e),...t}));Jo.displayName=le.Trigger.displayName;var Qo=y.forwardRef(({className:e,...t},r)=>y.createElement(le.Content,{ref:r,className:a("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Qo.displayName=le.Content.displayName;var ea=y.forwardRef(({className:e,...t},r)=>y.createElement("textarea",{className:a("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));ea.displayName="Textarea";var Yt=ce.Provider,Xt=ce.Root,Zt=ce.Trigger,wt=y.forwardRef(({className:e,sideOffset:t=4,...r},o)=>y.createElement(ce.Portal,null,y.createElement(ce.Content,{ref:o,sideOffset:t,className:a("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",e),...r})));wt.displayName=ce.Content.displayName;var ra=y.createContext(null);function oa(){let e=y.useContext(ra);if(!e)throw new Error("SideMenu components must be used within SideMenu");return e}var jn=({href:e,className:t,children:r})=>y.createElement("a",{href:e,className:t},r),aa=y.forwardRef(({header:e,collapsedHeader:t,sections:r,items:o,footer:n,collapsed:i,onCollapsedChange:d,collapsible:l=true,defaultCollapsed:s=false,activeItem:p,className:c,linkComponent:m=jn},g)=>{let[h,T]=y.useState(s),f=i??h,u=()=>{let w=!f;T(w),d?.(w);};return y.createElement(Yt,{delayDuration:0},y.createElement(ra.Provider,{value:{collapsed:f,activeItem:p,LinkComponent:m}},y.createElement("aside",{ref:g,className:a("flex h-full flex-col transition-[width] duration-300 ease-in-out","bg-white dark:bg-[#141414] border-r border-rds-gray-200 dark:border-[#1a1a1a]",f?"w-16":"w-64",c)},y.createElement("div",{className:a("flex items-center border-b border-rds-gray-200 dark:border-[#1a1a1a] flex-shrink-0 h-12",f?"justify-center px-2":"justify-between px-3")},f&&t||e,l&&y.createElement("button",{onClick:u,className:a("rounded-md h-5 w-5 flex items-center justify-center","text-rds-gray-400 dark:text-rds-gray-500","hover:text-rds-gray-600 dark:hover:text-rds-gray-300 transition-colors","bg-white dark:bg-[#141414] border border-rds-gray-200 dark:border-rds-gray-700 shadow-sm",f&&"absolute left-[calc(4rem-10px)] top-6 -translate-y-1/2 z-50"),"aria-label":f?"Expand sidebar":"Collapse sidebar"},f?y.createElement(ChevronRight,{className:"h-3 w-3"}):y.createElement(ChevronLeft,{className:"h-3 w-3"}))),y.createElement("nav",{className:"flex-1 py-2 overflow-y-auto overflow-x-hidden"},o&&o.length>0&&y.createElement("div",{className:"px-2 mb-1 space-y-0.5"},o.map(w=>y.createElement(Jt,{key:w.id,item:w}))),r?.map(w=>y.createElement(qn,{key:w.id,section:w}))),n&&y.createElement("div",{className:"flex-shrink-0 border-t border-rds-gray-200 dark:border-[#1a1a1a] p-2"},n))))});aa.displayName="SideMenu";function qn({section:e}){let{collapsed:t}=oa(),[r,o]=y.useState(e.defaultExpanded??true);return t?y.createElement("div",{className:"px-2 mb-1 space-y-0.5"},e.items.map(n=>y.createElement(Jt,{key:n.id,item:n}))):y.createElement("div",{className:"px-2 mb-1"},y.createElement("button",{onClick:()=>o(!r),className:a("flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm font-medium","text-rds-gray-700 dark:text-rds-gray-300","hover:bg-rds-gray-50 dark:hover:bg-rds-gray-900","hover:text-rds-gray-900 dark:hover:text-white transition-colors")},e.icon&&y.createElement("span",{className:"h-3.5 w-3.5 flex-shrink-0"},e.icon),y.createElement("span",{className:"flex-1 text-left"},e.title),r?y.createElement(ChevronDown,{className:"h-3 w-3",strokeWidth:1.5}):y.createElement(ChevronRight,{className:"h-3 w-3",strokeWidth:1.5})),r&&y.createElement("div",{className:"mt-0.5 space-y-0.5 relative pl-5"},y.createElement("div",{className:"absolute left-[1.1rem] top-0 bottom-0 w-px bg-rds-gray-200 dark:bg-rds-gray-700"}),e.items.map(n=>y.createElement(Jt,{key:n.id,item:n,nested:true}))))}function Jt({item:e,nested:t=false}){let{collapsed:r,activeItem:o,LinkComponent:n}=oa(),i=o===e.id,d=a("flex items-center gap-2.5 rounded-md text-sm font-medium transition-colors",r?"justify-center px-2 py-2.5":"px-2 py-1.5",i?t?"bg-rds-gray-100 dark:bg-[#1a1a1a] text-rds-gray-900 dark:text-white":"bg-rds-green-50 dark:bg-rds-green-950 text-rds-green-700 dark:text-rds-green-400":"text-rds-gray-700 dark:text-rds-gray-300 hover:bg-rds-gray-50 dark:hover:bg-rds-gray-900 hover:text-rds-gray-900 dark:hover:text-white",e.disabled&&"opacity-50 pointer-events-none"),l=y.createElement(y.Fragment,null,e.icon&&y.createElement("span",{className:a("flex-shrink-0",r?"h-5 w-5":"h-3.5 w-3.5")},e.icon),!r&&y.createElement("span",null,e.label),!r&&e.badge&&y.createElement("span",{className:"ml-auto text-xs bg-rds-gray-100 dark:bg-rds-gray-800 px-1.5 py-0.5 rounded"},e.badge)),s=e.href?y.createElement(n,{href:e.href,className:d},l):y.createElement("button",{onClick:e.onClick,disabled:e.disabled,className:a(d,"w-full")},l);return r?y.createElement(Xt,null,y.createElement(Zt,{asChild:true},s),y.createElement(wt,{side:"right",sideOffset:8},e.label)):s}var Xn=({href:e,className:t,children:r})=>y.createElement("a",{href:e,className:t},r),na=y.forwardRef(({breadcrumbs:e=[],showMobileMenu:t=false,onMobileMenuClick:r,leftContent:o,rightContent:n,className:i,linkComponent:d=Xn},l)=>y.createElement("header",{ref:l,className:a("sticky top-0 z-30 flex h-12 items-center gap-3","border-b border-rds-gray-200 dark:border-[#1a1a1a]","bg-white dark:bg-[#141414] px-4",i)},t&&y.createElement("button",{onClick:r,className:"lg:hidden rounded-md p-1.5 text-rds-gray-600 hover:bg-rds-gray-100 dark:text-rds-gray-400 dark:hover:bg-rds-gray-800","aria-label":"Toggle menu"},y.createElement(Menu,{className:"h-4 w-4"})),e.length>0&&y.createElement("nav",{className:"hidden md:flex items-center gap-1.5 text-sm","aria-label":"Breadcrumb"},e.map((s,p)=>y.createElement(y.Fragment,{key:p},p>0&&y.createElement("span",{className:"text-rds-gray-400 dark:text-rds-gray-500 text-xs"},"/"),s.href?y.createElement(d,{href:s.href,className:"text-rds-gray-600 dark:text-rds-gray-400 hover:text-rds-gray-900 dark:hover:text-white transition-colors text-sm"},s.label):y.createElement("span",{className:"text-rds-gray-900 dark:text-white font-medium text-sm"},s.label)))),o,y.createElement("div",{className:"flex-1"}),n&&y.createElement("div",{className:"flex items-center gap-1.5"},n)));na.displayName="TopMenu";var ia=y.forwardRef(({name:e,email:t,avatarUrl:r,avatarContent:o,avatarClassName:n,children:i,className:d},l)=>{let[s,p]=y.useState(false),c=y.useRef(null);return y.useEffect(()=>{let m=g=>{c.current&&!c.current.contains(g.target)&&p(false);};return s&&document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m);}},[s]),y.createElement("div",{ref:l,className:a("relative",d)},y.createElement("div",{ref:c},y.createElement("button",{onClick:()=>p(!s),className:"flex items-center gap-1.5 rounded-full p-0.5 hover:ring-2 hover:ring-rds-green-500 hover:ring-offset-2 dark:hover:ring-offset-[#141414] transition-all","aria-label":"Account menu"},y.createElement("div",{className:a("h-8 w-8 rounded-full overflow-hidden flex items-center justify-center",n||"bg-gradient-to-br from-rds-yellow-400 to-rds-yellow-600")},r?y.createElement("img",{src:r,alt:e||"User",className:"h-full w-full object-cover"}):o)),s&&y.createElement("div",{className:"absolute right-0 mt-2 w-64 rounded-lg border border-rds-gray-200 dark:border-[#1a1a1a] bg-white dark:bg-[#141414] shadow-lg overflow-hidden z-50"},(e||t)&&y.createElement("div",{className:"px-4 py-3 border-b border-rds-gray-200 dark:border-[#1a1a1a]"},y.createElement("div",{className:"flex items-center gap-3"},y.createElement("div",{className:a("h-10 w-10 rounded-full overflow-hidden flex items-center justify-center",n||"bg-gradient-to-br from-rds-yellow-400 to-rds-yellow-600")},r?y.createElement("img",{src:r,alt:e||"User",className:"h-full w-full object-cover"}):o),y.createElement("div",{className:"flex-1 min-w-0"},e&&y.createElement("p",{className:"text-sm font-medium text-rds-gray-900 dark:text-white truncate"},e),t&&y.createElement("p",{className:"text-xs text-rds-gray-500 dark:text-rds-gray-400 truncate"},t)))),i)))});ia.displayName="TopMenuUser";var sa=y.forwardRef(({icon:e,children:t,onClick:r,href:o,variant:n="default",className:i},d)=>y.createElement(o?"a":"button",{ref:d,onClick:r,href:o,className:a("w-full flex items-center gap-3 px-4 py-2 text-sm transition-colors",{default:"text-rds-gray-700 dark:text-rds-gray-300 hover:bg-rds-gray-50 dark:hover:bg-[#1a1a1a]",danger:"text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-950/20",success:"text-rds-green-600 dark:text-rds-green-400 hover:bg-rds-green-50 dark:hover:bg-rds-green-950/20"}[n],i)},e&&y.createElement("span",{className:"h-4 w-4"},e),y.createElement("span",null,t)));sa.displayName="TopMenuUserItem";var da=y.forwardRef(({children:e,className:t},r)=>y.createElement("div",{ref:r,className:a("py-1 border-t border-rds-gray-200 dark:border-[#1a1a1a] first:border-t-0",t)},e));da.displayName="TopMenuUserSection";var Qt=y.createContext(null);function er(){let e=y.useContext(Qt);if(!e)throw new Error("SimpleTabsPanel must be used within SimpleTabs");return e}var la=y.forwardRef(({tabs:e,activeTab:t,defaultTab:r,onTabChange:o,children:n,className:i,tabsClassName:d},l)=>{let[s,p]=y.useState(r||e[0]?.id||""),c=t??s,m=g=>{p(g),o?.(g);};return y.createElement(Qt.Provider,{value:{activeTab:c,setActiveTab:m}},y.createElement("div",{ref:l,className:a("space-y-6",i)},y.createElement("div",{className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},y.createElement("nav",{className:a("-mb-px flex gap-1 overflow-x-auto scrollbar-hide",d),"aria-label":"Tabs"},e.map(g=>{let h=c===g.id;return y.createElement("button",{key:g.id,onClick:()=>!g.disabled&&m(g.id),disabled:g.disabled,className:a("relative flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors whitespace-nowrap",h?"text-primary":"text-muted-foreground hover:text-foreground",g.disabled&&"opacity-50 cursor-not-allowed")},g.icon&&y.createElement("span",{className:"h-4 w-4"},g.icon),g.label,h&&y.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))}))),n&&y.createElement("div",null,n)))});la.displayName="SimpleTabs";var ca=y.forwardRef(({id:e,children:t,className:r},o)=>{let{activeTab:n}=er();return n!==e?null:y.createElement("div",{ref:o,role:"tabpanel","aria-labelledby":`tab-${e}`,className:r},t)});ca.displayName="SimpleTabsPanel";var pa=y.forwardRef(({activeTab:e,defaultTab:t,onTabChange:r,children:o,className:n},i)=>{let[d,l]=y.useState(t||""),s=e??d,p=c=>{l(c),r?.(c);};return y.createElement(Qt.Provider,{value:{activeTab:s,setActiveTab:p}},y.createElement("div",{ref:i,className:a("space-y-6",n)},o))});pa.displayName="SimpleTabsRoot";var ma=y.forwardRef(({children:e,className:t},r)=>y.createElement("div",{ref:r,className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},y.createElement("nav",{className:a("-mb-px flex gap-1 overflow-x-auto scrollbar-hide",t),role:"tablist","aria-label":"Tabs"},e)));ma.displayName="SimpleTabsList";var ua=y.forwardRef(({value:e,children:t,icon:r,disabled:o,className:n},i)=>{let{activeTab:d,setActiveTab:l}=er(),s=d===e;return y.createElement("button",{ref:i,role:"tab",id:`tab-${e}`,"aria-selected":s,"aria-controls":`panel-${e}`,onClick:()=>!o&&l(e),disabled:o,className:a("relative flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors whitespace-nowrap",s?"text-primary":"text-muted-foreground hover:text-foreground",o&&"opacity-50 cursor-not-allowed",n)},r&&y.createElement("span",{className:"h-4 w-4"},r),t,s&&y.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))});ua.displayName="SimpleTabsTrigger";var fa=y.forwardRef(({value:e,children:t,className:r},o)=>{let{activeTab:n}=er();return n!==e?null:y.createElement("div",{ref:o,role:"tabpanel",id:`panel-${e}`,"aria-labelledby":`tab-${e}`,className:r},t)});fa.displayName="SimpleTabsContent";var Zn={video:"aspect-video",square:"aspect-square",portrait:"aspect-[3/4]",wide:"aspect-[21/9]",auto:""},Jn={none:"0",sm:"var(--radius, 0.25rem)",md:"calc(var(--radius, 0.375rem) * 1.25)",lg:"calc(var(--radius, 0.5rem) * 1.5)",xl:"calc(var(--radius, 0.75rem) * 2)"},ue=y.forwardRef(({className:e,aspect:t="video",radius:r="lg",border:o=false,loading:n=false,onVisibilityChange:i,fallback:d,style:l,children:s,...p},c)=>{let m=y.useRef(null);return y.useImperativeHandle(c,()=>m.current),y.useEffect(()=>{if(!i||!m.current)return;let g=m.current,h=new IntersectionObserver(([T])=>i(T.isIntersecting),{threshold:.05});return h.observe(g),()=>h.disconnect()},[i]),y.createElement("div",{ref:m,"data-gds-part":"media-surface",className:a("rds-media-surface relative w-full overflow-hidden bg-muted",Zn[t],o&&"border border-border",e),style:{borderRadius:`var(--rds-media-radius, ${Jn[r]})`,...l},...p},s,n&&y.createElement("div",{className:"absolute inset-0 flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},d))});ue.displayName="MediaSurface";function Le(){let[e,t]=y.useState(false);return y.useEffect(()=>{let r=window.matchMedia("(prefers-reduced-motion: reduce)");t(r.matches);let o=n=>t(n.matches);return r.addEventListener("change",o),()=>r.removeEventListener("change",o)},[]),e}var ga=y.forwardRef(({src:e,controls:t=true,autoPlay:r=false,loop:o=false,muted:n,pauseOffscreen:i=true,aspect:d="video",radius:l="lg",border:s=false,poster:p,label:c,className:m,style:g,playbackRate:h=1,objectFit:T="cover"},f)=>{let u=y.useRef(null),w=Le(),[N,E]=y.useState(!!p);y.useImperativeHandle(f,()=>u.current);let M=n??r,_=r&&!w;y.useEffect(()=>{u.current&&(u.current.playbackRate=h);},[h]),y.useEffect(()=>{E(!!p);},[p]);let J=y.useCallback(ve=>{!i||!u.current||(ve&&_?u.current.play().catch(()=>{}):u.current.pause());},[i,_]);return y.createElement(ue,{aspect:d,radius:l,border:s,"aria-label":c,className:m,style:g,onVisibilityChange:i?J:void 0},y.createElement("video",{ref:u,src:e,controls:t,autoPlay:_,loop:o,muted:M,playsInline:true,preload:_?"auto":"metadata",onPlaying:()=>E(false),className:a("w-full h-full",T==="cover"&&"object-cover",T==="contain"&&"object-contain",T==="fill"&&"object-fill")},"Your browser does not support the video tag."),p&&N&&y.createElement("img",{src:p,alt:"","aria-hidden":"true",loading:"lazy",decoding:"async","data-gds-part":"video-poster",className:a("absolute inset-0 w-full h-full pointer-events-none transition-opacity duration-200",T==="cover"&&"object-cover",T==="contain"&&"object-contain",T==="fill"&&"object-fill")}))});ga.displayName="VideoPlayer";var ha=y.forwardRef(({src:e,controls:t=false,autoPlay:r=true,loop:o=true,pauseOffscreen:n=true,aspect:i="square",radius:d="lg",border:l=false,poster:s,label:p,className:c,style:m,stateMachines:g,artboard:h,fit:T="contain",stateMachineInputs:f},u)=>{let w=Le(),[N,E]=y.useState(null),[M,_]=y.useState(null);return y.useEffect(()=>{let J=false;return import('@rive-app/react-canvas').then(ve=>{J||E(ve);}).catch(()=>{J||_("Rive runtime not installed. Run `npm install @rive-app/react-canvas`.");}),()=>{J=true;}},[]),y.createElement(ue,{ref:u,aspect:i,radius:d,border:l,"aria-label":p,className:c,style:m},M?y.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},M):N&&e?y.createElement(ti,{Mod:N,src:e,stateMachines:g,artboard:h,fit:T,stateMachineInputs:f,autoPlay:r&&!w,loop:o,pauseOffscreen:n,controls:t,poster:s}):s&&y.createElement("img",{src:s,alt:"",className:"w-full h-full object-contain"}))});ha.displayName="RivePlayer";function ti({Mod:e,src:t,stateMachines:r,artboard:o,fit:n,autoPlay:i,loop:d,pauseOffscreen:l,controls:s,poster:p}){let{useRive:c,Layout:m,Fit:g,Alignment:h,EventType:T}=e,f={contain:g.Contain,cover:g.Cover,fill:g.Fill,fitWidth:g.FitWidth,fitHeight:g.FitHeight,none:g.None},{rive:u,RiveComponent:w}=c({src:t,stateMachines:r,artboard:o,autoplay:i,layout:new m({fit:f[n],alignment:h.Center})}),[N,E]=y.useState(i);y.useEffect(()=>{if(!u||!d)return;let _=()=>{u.play();};return u.on(T.Stop,_),()=>{u.off(T.Stop,_);}},[u,d,T]),y.useEffect(()=>{if(!l||!u)return;let _=u.canvas;if(!_)return;let J=new IntersectionObserver(([ve])=>{ve.isIntersecting&&i?u.play():u.pause();},{threshold:.05});return J.observe(_),()=>J.disconnect()},[u,l,i]);let M=()=>{u&&(N?(u.pause(),E(false)):(u.play(),E(true)));};return y.createElement(y.Fragment,null,y.createElement(w,{className:"w-full h-full"}),!u&&p&&y.createElement("img",{src:p,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),s&&y.createElement("div",{className:a("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/40 to-transparent")},y.createElement(X,{size:"icon",variant:"secondary",onClick:M},N?y.createElement(Pause,{className:"h-4 w-4"}):y.createElement(Play,{className:"h-4 w-4"}))))}var va=({renderer:e,scene:t,camera:r,preset:o,width:n,height:i})=>{let d=new EffectComposer(e);d.setSize(n,i),d.addPass(new RenderPass(t,r));let l=new BloomEffect({intensity:0,luminanceThreshold:.6,radius:.6,kernelSize:KernelSize.MEDIUM}),s=new NoiseEffect({blendFunction:BlendFunction.OVERLAY});s.blendMode.opacity.value=0;let p=new ScanlineEffect({blendFunction:BlendFunction.OVERLAY,density:1.25});p.blendMode.opacity.value=0;let c=new VignetteEffect({darkness:0,offset:.5}),m=new ChromaticAberrationEffect({offset:new I.Vector2(0,0),radialModulation:false,modulationOffset:.15}),g=new GlitchEffect({chromaticAberrationOffset:new I.Vector2(0,0),columns:.05});g.minStrength=0,g.maxStrength=0,d.addPass(new EffectPass(r,l)),d.addPass(new EffectPass(r,s,p,c)),d.addPass(new EffectPass(r,m)),d.addPass(new EffectPass(r,g));function h(T){let f=T.effects;l.intensity=f.bloom?.intensity??0,l.luminanceMaterial&&f.bloom?.luminanceThreshold!==void 0&&(l.luminanceMaterial.threshold=f.bloom.luminanceThreshold),s.blendMode.opacity.value=f.noise?.intensity??0,p.density=f.scanlines?.density??1.25,p.blendMode.opacity.value=f.scanlines?.opacity??0,c.darkness=f.vignette?.darkness??0,c.offset=f.vignette?.offset??.5;let u=f.chromatic?.offset??0;m.offset?.set(u,u),f.glitch?(g.minStrength=f.glitch.strength?.[0]??0,g.maxStrength=f.glitch.strength?.[1]??0):(g.minStrength=0,g.maxStrength=0);}return h(o),{composer:d,setPreset:h,resize:(T,f)=>d.setSize(T,f),dispose:()=>{d.dispose();}}};var Ge=3e3,rr=400,pi=80,ba=({width:e,height:t,palette:r})=>{let o=new I.Scene;o.background=new I.Color(r.background);let n=new I.PerspectiveCamera(70,e/t,.1,rr*2);n.position.z=0;let i=new Float32Array(Ge*6),d=new Float32Array(Ge*6),l=new Float32Array(Ge),s=new I.Color(r.primary),p=new I.Color(r.accent);function c(u,w){let N=Math.random()*Math.PI*2,E=pi*Math.pow(Math.random(),.6),M=Math.cos(N)*E,_=Math.sin(N)*E,J=w?-Math.random()*rr:-rr;l[u]=J,i[u*6+0]=M,i[u*6+1]=_,i[u*6+2]=J,i[u*6+3]=M,i[u*6+4]=_,i[u*6+5]=J-2,d[u*6+0]=s.r,d[u*6+1]=s.g,d[u*6+2]=s.b,d[u*6+3]=p.r,d[u*6+4]=p.g,d[u*6+5]=p.b;}for(let u=0;u<Ge;u++)c(u,true);let m=new I.BufferGeometry;m.setAttribute("position",new I.BufferAttribute(i,3)),m.setAttribute("color",new I.BufferAttribute(d,3));let g=new I.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:I.AdditiveBlending}),h=new I.LineSegments(m,g);o.add(h);let T=60,f=6;return {scene:o,camera:n,update:(u,w)=>{let N=m.attributes.position.array;for(let E=0;E<Ge;E++){let M=E*6;N[M+2]+=T*w,N[M+5]=N[M+2]-f,N[M+2]>5&&c(E,false);}m.attributes.position.needsUpdate=true;},resize:(u,w)=>{let N=n;N.aspect=u/w,N.updateProjectionMatrix();},setPalette:u=>{o.background=new I.Color(u.background);let w=new I.Color(u.primary),N=new I.Color(u.accent),E=m.attributes.color.array;for(let M=0;M<Ge;M++)E[M*6+0]=w.r,E[M*6+1]=w.g,E[M*6+2]=w.b,E[M*6+3]=N.r,E[M*6+4]=N.g,E[M*6+5]=N.b;m.attributes.color.needsUpdate=true;},dispose:()=>{m.dispose(),g.dispose();}}};var mi=`
|
|
1
|
+
import*as v from'react';import {useRef,useEffect}from'react';import*as me from'@radix-ui/react-accordion';import {ChevronDown,Check,X,ChevronRight,Circle,ChevronUp,ChevronLeft,ImageIcon,Pause,Play,ChevronLeftIcon,ChevronRightIcon,ChevronDownIcon,CalendarIcon,GripVertical,MoreHorizontal,Palette,Download,Trash2,SunDim,Sun,Moon,MoonStar}from'lucide-react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {cva}from'class-variance-authority';import {Slot}from'@radix-ui/react-slot';import*as Ce from'@radix-ui/react-avatar';import {getDefaultClassNames,DayPicker}from'react-day-picker';import*as ct from'@radix-ui/react-checkbox';import {format}from'date-fns';import*as ve from'@radix-ui/react-popover';import*as B from'@radix-ui/react-dialog';import*as x from'@radix-ui/react-dropdown-menu';import*as lr from'@radix-ui/react-label';import*as ut from'@radix-ui/react-progress';import*as De from'@radix-ui/react-radio-group';import*as et from'react-resizable-panels';import*as ue from'@radix-ui/react-scroll-area';import*as T from'@radix-ui/react-select';import*as mr from'@radix-ui/react-separator';import*as Me from'@radix-ui/react-slider';import*as ht from'@radix-ui/react-switch';import*as xe from'@radix-ui/react-tabs';import*as be from'@radix-ui/react-tooltip';import*as hr from'@radix-ui/react-toggle';import*as rt from'@radix-ui/react-toggle-group';import {createPortal}from'react-dom';import*as G from'three';import {EffectComposer,RenderPass,BloomEffect,KernelSize,NoiseEffect,BlendFunction,ScanlineEffect,VignetteEffect,ChromaticAberrationEffect,GlitchEffect,EffectPass}from'postprocessing';import fl from'lenis';var Fn=Object.defineProperty;var Lt=(e,t)=>()=>(e&&(t=e(e=0)),t);var sr=(e,t)=>{for(var r in t)Fn(e,r,{get:t[r],enumerable:true});};var Qt,cn,pn=Lt(()=>{Qt="2pMfyvhpuKonkf7h8HzH",cn=()=>Qt!=="YOUR_KEY_HERE"&&Qt.length>0;});var fn={};sr(fn,{createMaplibreAdapter:()=>Si});function wi(){if(typeof document>"u"||document.getElementById(un))return;let e=document.createElement("link");e.id=un,e.rel="stylesheet",e.href=Pi,document.head.appendChild(e);}var Ti,mn,Pi,un,Si,gn=Lt(()=>{pn();Ti={light:"dataviz-light",dark:"dataviz-dark",satellite:"satellite"},mn=(e,t)=>`https://api.maptiler.com/maps/${Ti[e]}/style.json?key=${encodeURIComponent(t)}`,Pi="https://unpkg.com/maplibre-gl@4/dist/maplibre-gl.css",un="gds-maplibre-gl-css";Si=async(e,t,r)=>{wi();let o;try{o=await import('maplibre-gl'),o.default&&(o=o.default);}catch(c){throw r.onError({code:"sdk-missing",message:'@gradeui/ui Map: `maplibre-gl` is not installed. Run `pnpm add maplibre-gl` (or your package manager\'s equivalent) to use provider="maplibre".',cause:c}),c}let s=t.tilerKey??Qt;process.env.NODE_ENV!=="production"&&!t.tilerKey&&!cn()&&console.warn("@gradeui/ui Map: no `tilerKey` prop and the bundled MapTiler demo key is unset. Tile requests will 403. Set `tilerKey` or paste a key into demo-config.ts.");let a=t.styleUrl??mn(t.appearance,s),d=new o.Map({container:e,style:a,center:t.center,zoom:t.zoom,interactive:t.interactive,attributionControl:{compact:true}});t.bounds&&d.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(c=>{d.once("load",()=>c());}),r.onLoad(),d.on("error",c=>{let l=String(c?.error?.message??c?.message??"MapLibre error"),m=l.toLowerCase().includes("style");r.onError({code:m?"style-load-failed":"tile-load-failed",message:l,cause:c?.error??c});});let p=new globalThis.Map;return {setCenter:c=>d.setCenter(c),setZoom:c=>d.setZoom(c),setBounds:(c,l)=>d.fitBounds([c,l],{animate:false}),setAppearance:c=>{let l=t.styleUrl??mn(c,s);d.setStyle(l,{diff:false});},setInteractive:c=>{let l=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let m of l){let u=d[m];u&&(c?u.enable():u.disable());}},flyTo:(c,l)=>d.flyTo({center:c,zoom:l?.zoom,duration:l?.durationMs??800}),panTo:(c,l)=>d.panTo(c,{duration:l?.durationMs??600}),fitBounds:(c,l)=>{if(c.length===0)return;let m=1/0,u=1/0,h=-1/0,y=-1/0;for(let[f,g]of c)f<m&&(m=f),g<u&&(u=g),f>h&&(h=f),g>y&&(y=g);d.fitBounds([[m,u],[h,y]],{padding:l?.paddingPx??40,duration:l?.durationMs??800});},getCenter:()=>{let c=d.getCenter();return [c.lng,c.lat]},getZoom:()=>d.getZoom(),getBounds:()=>{let c=d.getBounds();return [[c.getWest(),c.getSouth()],[c.getEast(),c.getNorth()]]},addMarker:(c,l,m)=>{let u=document.createElement("div");u.dataset.gdsPart="map-marker",u.dataset.gdsState="idle",u.style.cursor="pointer",u.addEventListener("mouseenter",()=>r.onMarkerHover(c)),u.addEventListener("mouseleave",()=>r.onMarkerHover(null)),u.addEventListener("click",f=>{r.onMarkerClick(c,y.coords,f);});let h=new o.Marker({element:u,anchor:m==="center"?"center":"bottom"}).setLngLat(l).addTo(d),y={element:u,coords:l,setHovered:f=>{u.dataset.gdsState=f?"hovered":"idle",u.style.zIndex=f?"10":"1";},setPosition:f=>{y.coords=f,h.setLngLat(f);},remove:()=>{h.remove(),p.delete(c);}};return p.set(c,{marker:h,handle:y}),y},destroy:()=>{p.forEach(({marker:c})=>c.remove()),p.clear(),d.remove();},instance:d}};});var vn={};sr(vn,{createMapboxAdapter:()=>ki});function Mi(){if(typeof document>"u"||document.getElementById(yn))return;let e=document.createElement("link");e.id=yn,e.rel="stylesheet",e.href=Ci,document.head.appendChild(e);}var hn,Ci,yn,ki,bn=Lt(()=>{hn={light:"mapbox://styles/mapbox/light-v11",dark:"mapbox://styles/mapbox/dark-v11",satellite:"mapbox://styles/mapbox/satellite-streets-v12"},Ci="https://unpkg.com/mapbox-gl@3/dist/mapbox-gl.css",yn="gds-mapbox-gl-css";ki=async(e,t,r)=>{if(!t.accessToken)throw r.onError({code:"api-key-missing",message:'@gradeui/ui Map: provider="mapbox" requires an `accessToken` prop.'}),new Error("mapbox accessToken missing");Mi();let o;try{o=await import('mapbox-gl'),o.default&&(o=o.default);}catch(i){throw r.onError({code:"sdk-missing",message:'@gradeui/ui Map: `mapbox-gl` is not installed. Run `pnpm add mapbox-gl` to use provider="mapbox".',cause:i}),i}o.accessToken=t.accessToken;let s=t.styleUrl??hn[t.appearance],a=new o.Map({container:e,style:s,center:t.center,zoom:t.zoom,interactive:t.interactive});t.bounds&&a.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(i=>{a.once("load",()=>i());}),r.onLoad(),a.on("error",i=>{let c=String(i?.error?.message??i?.message??"Mapbox error"),l=c.toLowerCase().includes("style");r.onError({code:l?"style-load-failed":"tile-load-failed",message:c,cause:i?.error??i});});let d=new globalThis.Map;return {setCenter:i=>a.setCenter(i),setZoom:i=>a.setZoom(i),setBounds:(i,c)=>a.fitBounds([i,c],{animate:false}),setAppearance:i=>{let c=t.styleUrl??hn[i];a.setStyle(c,{diff:false});},setInteractive:i=>{let c=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let l of c){let m=a[l];m&&(i?m.enable():m.disable());}},flyTo:(i,c)=>a.flyTo({center:i,zoom:c?.zoom,duration:c?.durationMs??800}),panTo:(i,c)=>a.panTo(i,{duration:c?.durationMs??600}),fitBounds:(i,c)=>{if(i.length===0)return;let l=1/0,m=1/0,u=-1/0,h=-1/0;for(let[y,f]of i)y<l&&(l=y),f<m&&(m=f),y>u&&(u=y),f>h&&(h=f);a.fitBounds([[l,m],[u,h]],{padding:c?.paddingPx??40,duration:c?.durationMs??800});},getCenter:()=>{let i=a.getCenter();return [i.lng,i.lat]},getZoom:()=>a.getZoom(),getBounds:()=>{let i=a.getBounds();return [[i.getWest(),i.getSouth()],[i.getEast(),i.getNorth()]]},addMarker:(i,c,l)=>{let m=document.createElement("div");m.dataset.gdsPart="map-marker",m.dataset.gdsState="idle",m.style.cursor="pointer",m.addEventListener("mouseenter",()=>r.onMarkerHover(i)),m.addEventListener("mouseleave",()=>r.onMarkerHover(null)),m.addEventListener("click",y=>{r.onMarkerClick(i,h.coords,y);});let u=new o.Marker({element:m,anchor:l==="center"?"center":"bottom"}).setLngLat(c).addTo(a),h={element:m,coords:c,setHovered:y=>{m.dataset.gdsState=y?"hovered":"idle",m.style.zIndex=y?"10":"1";},setPosition:y=>{h.coords=y,u.setLngLat(y);},remove:()=>{u.remove(),d.delete(i);}};return d.set(i,{marker:u,handle:h}),h},destroy:()=>{d.forEach(({marker:i})=>i.remove()),d.clear(),a.remove();},instance:a}};});var Rn={};sr(Rn,{createGoogleAdapter:()=>Hi});var Ni,Ei,xn,Hi,Tn=Lt(()=>{Ni=[{featureType:"poi",stylers:[{visibility:"off"}]},{featureType:"transit",stylers:[{visibility:"simplified"}]}],Ei=[{elementType:"geometry",stylers:[{color:"#1a1a1a"}]},{elementType:"labels.text.stroke",stylers:[{color:"#1a1a1a"}]},{elementType:"labels.text.fill",stylers:[{color:"#9ca3af"}]},{featureType:"poi",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"geometry",stylers:[{color:"#262626"}]},{featureType:"road",elementType:"labels.text.fill",stylers:[{color:"#9ca3af"}]},{featureType:"water",elementType:"geometry",stylers:[{color:"#0f172a"}]},{featureType:"transit",stylers:[{visibility:"simplified"},{color:"#3a3a3a"}]}],xn=e=>e==="dark"?Ei:Ni,Hi=async(e,t,r)=>{if(!t.apiKey)throw r.onError({code:"api-key-missing",message:'@gradeui/ui Map: provider="google" requires an `apiKey` prop.'}),new Error("google apiKey missing");let o;try{let l=await import('@googlemaps/js-api-loader');o=l.Loader??l.default?.Loader;}catch(l){throw r.onError({code:"sdk-missing",message:'@gradeui/ui Map: `@googlemaps/js-api-loader` is not installed. Run `pnpm add @googlemaps/js-api-loader` to use provider="google".',cause:l}),l}let s=new o({apiKey:t.apiKey,version:"weekly",libraries:["maps","marker"]}),a;try{a=await s.load();}catch(l){throw r.onError({code:"provider-init-failed",message:"@gradeui/ui Map: Google Maps loader failed.",cause:l}),l}let d=t.appearance==="satellite",p=new a.maps.Map(e,{center:{lat:t.center[1],lng:t.center[0]},zoom:t.zoom,mapTypeId:d?a.maps.MapTypeId.HYBRID:a.maps.MapTypeId.ROADMAP,mapId:t.mapId,styles:d?void 0:xn(t.appearance==="dark"?"dark":"light"),disableDefaultUI:!t.interactive,gestureHandling:t.interactive?"auto":"none",keyboardShortcuts:t.interactive});if(t.bounds){let l=new a.maps.LatLngBounds({lat:t.bounds[0][1],lng:t.bounds[0][0]},{lat:t.bounds[1][1],lng:t.bounds[1][0]});p.fitBounds(l);}await new Promise(l=>{a.maps.event.addListenerOnce(p,"idle",()=>l());}),r.onLoad();let i=new globalThis.Map;return {setCenter:l=>p.setCenter({lat:l[1],lng:l[0]}),setZoom:l=>p.setZoom(l),setBounds:(l,m)=>{let u=new a.maps.LatLngBounds({lat:l[1],lng:l[0]},{lat:m[1],lng:m[0]});p.fitBounds(u);},setAppearance:l=>{l==="satellite"?(p.setMapTypeId(a.maps.MapTypeId.HYBRID),p.setOptions({styles:void 0})):(p.setMapTypeId(a.maps.MapTypeId.ROADMAP),p.setOptions({styles:xn(l)}));},setInteractive:l=>{p.setOptions({disableDefaultUI:!l,gestureHandling:l?"auto":"none",keyboardShortcuts:l});},flyTo:(l,m)=>{p.panTo({lat:l[1],lng:l[0]}),m?.zoom!=null&&p.setZoom(m.zoom);},panTo:l=>p.panTo({lat:l[1],lng:l[0]}),fitBounds:(l,m)=>{if(l.length===0)return;let u=new a.maps.LatLngBounds;for(let[h,y]of l)u.extend({lat:y,lng:h});p.fitBounds(u,m?.paddingPx??40);},getCenter:()=>{let l=p.getCenter();return l?[l.lng(),l.lat()]:[0,0]},getZoom:()=>p.getZoom()??0,getBounds:()=>{let l=p.getBounds();if(!l)return [[0,0],[0,0]];let m=l.getSouthWest(),u=l.getNorthEast();return [[m.lng(),m.lat()],[u.lng(),u.lat()]]},addMarker:(l,m,u)=>{let h=document.createElement("div");h.dataset.gdsPart="map-marker",h.dataset.gdsState="idle",h.style.cursor="pointer",u==="center"&&(h.style.transform="translateY(50%)"),h.addEventListener("mouseenter",()=>r.onMarkerHover(l)),h.addEventListener("mouseleave",()=>r.onMarkerHover(null)),h.addEventListener("click",g=>{r.onMarkerClick(l,f.coords,g);});let y=new a.maps.marker.AdvancedMarkerElement({map:p,position:{lat:m[1],lng:m[0]},content:h}),f={element:h,coords:m,setHovered:g=>{h.dataset.gdsState=g?"hovered":"idle",y.zIndex=g?10:1;},setPosition:g=>{f.coords=g,y.position={lat:g[1],lng:g[0]};},remove:()=>{y.map=null,i.delete(l);}};return i.set(l,{marker:y,handle:f}),f},destroy:()=>{i.forEach(({marker:l})=>{l.map=null;}),i.clear();},instance:p}};});function n(...e){return twMerge(clsx(e))}var Vn=me.Root,Kr=v.forwardRef(({className:e,...t},r)=>v.createElement(me.Item,{ref:r,className:n("border-b",e),...t}));Kr.displayName="AccordionItem";var Ur=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(me.Header,{className:"flex"},v.createElement(me.Trigger,{ref:o,className:n("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...r},t,v.createElement(ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));Ur.displayName=me.Trigger.displayName;var Wr=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(me.Content,{ref:o,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...r},v.createElement("div",{className:n("pb-4 pt-0",e)},t)));Wr.displayName=me.Content.displayName;var _n=cva("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",{variants:{variant:{default:"bg-background text-foreground [&>svg]:text-foreground",destructive:"border-destructive/30 bg-destructive-soft text-destructive-deep [&>svg]:text-destructive-deep",success:"border-success/30 bg-success-soft text-success-deep [&>svg]:text-success-deep",warning:"border-warning/30 bg-warning-soft text-warning-deep [&>svg]:text-warning-deep",info:"border-info/30 bg-info-soft text-info-deep [&>svg]:text-info-deep",highlight:"border-highlight/30 bg-highlight-soft text-foreground [&>svg]:text-highlight-deep"}},defaultVariants:{variant:"default"}}),jr=v.forwardRef(({className:e,variant:t,...r},o)=>v.createElement("div",{ref:o,role:"alert",className:n(_n({variant:t}),e),...r}));jr.displayName="Alert";var Zr=v.forwardRef(({className:e,...t},r)=>v.createElement("h5",{ref:r,className:n("mb-1 font-medium leading-none tracking-tight",e),...t}));Zr.displayName="AlertTitle";var qr=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,className:n("text-sm [&_p]:leading-relaxed",e),...t}));qr.displayName="AlertDescription";var Yr=cva("rds-app-shell min-h-screen w-full bg-background text-foreground grid",{variants:{nav:{none:"",top:"",side:"","three-pane":""}},defaultVariants:{nav:"none"}}),Xr=cva("rds-app-shell-header",{variants:{sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{sticky:false}}),Jr=cva("rds-app-shell-nav",{variants:{placement:{top:"border-b bg-background",side:"border-r bg-background",none:"hidden"},sticky:{true:"",false:""}},compoundVariants:[{placement:"top",sticky:true,className:"sticky top-0 z-30"},{placement:"side",sticky:true,className:"sticky top-0 h-screen self-start"}],defaultVariants:{placement:"top",sticky:true}}),Qr=cva("rds-app-shell-aside min-w-0 border-r bg-background",{variants:{sticky:{true:"sticky top-0 h-screen self-start",false:""}},defaultVariants:{sticky:false}}),eo=cva("rds-app-shell-main min-w-0",{variants:{maxWidth:{full:"w-full",container:"w-full mx-auto max-w-7xl px-4 md:px-6 lg:px-8"}},defaultVariants:{maxWidth:"full"}}),to=cva("rds-app-shell-footer border-t bg-background"),ro=v.forwardRef(({className:e,nav:t,asChild:r=false,...o},s)=>v.createElement(r?Slot:"div",{ref:s,"data-gds-part":"app-shell","data-nav":t??"none",className:n(Yr({nav:t,className:e})),...o}));ro.displayName="AppShell";var oo=v.forwardRef(({className:e,sticky:t,asChild:r=false,...o},s)=>v.createElement(r?Slot:"header",{ref:s,"data-gds-part":"app-shell-header",className:n(Xr({sticky:t,className:e})),...o}));oo.displayName="AppShellHeader";var ao=v.forwardRef(({className:e,placement:t,sticky:r,asChild:o=false,...s},a)=>v.createElement(o?Slot:"nav",{ref:a,"data-gds-part":"app-shell-nav","data-placement":t??"top",className:n(Jr({placement:t,sticky:r,className:e})),...s}));ao.displayName="AppShellNav";var no=v.forwardRef(({className:e,sticky:t,asChild:r=false,...o},s)=>v.createElement(r?Slot:"aside",{ref:s,"data-gds-part":"app-shell-aside",className:n(Qr({sticky:t,className:e})),...o}));no.displayName="AppShellAside";var so=v.forwardRef(({className:e,maxWidth:t,asChild:r=false,...o},s)=>v.createElement(r?Slot:"main",{ref:s,"data-gds-part":"app-shell-main",className:n(eo({maxWidth:t,className:e})),...o}));so.displayName="AppShellMain";var io=v.forwardRef(({className:e,asChild:t=false,...r},o)=>v.createElement(t?Slot:"footer",{ref:o,"data-gds-part":"app-shell-footer",className:n(to({className:e})),...r}));io.displayName="AppShellFooter";var lo=v.forwardRef(({className:e,...t},r)=>v.createElement(Ce.Root,{ref:r,className:n("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...t}));lo.displayName=Ce.Root.displayName;var co=v.forwardRef(({className:e,...t},r)=>v.createElement(Ce.Image,{ref:r,className:n("aspect-square h-full w-full",e),...t}));co.displayName=Ce.Image.displayName;var po=v.forwardRef(({className:e,...t},r)=>v.createElement(Ce.Fallback,{ref:r,className:n("flex h-full w-full items-center justify-center rounded-full bg-muted",e),...t}));po.displayName=Ce.Fallback.displayName;var uo=cva("inline-flex items-center gap-1 border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 [&_svg]:size-3 [&_svg]:shrink-0",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground",highlight:"border-transparent bg-rds-yellow-400 text-rds-gray-900 shadow hover:bg-rds-yellow-500",success:"border-transparent bg-rds-green-500 text-rds-gray-900 shadow hover:bg-rds-green-600",warning:"border-transparent bg-orange-500 text-white shadow hover:bg-orange-600",info:"border-transparent bg-blue-500 text-white shadow hover:bg-blue-600","success-soft":"border-rds-green-500/20 bg-rds-green-500/10 text-rds-green-600 dark:text-rds-green-400","warning-soft":"border-orange-500/20 bg-orange-500/10 text-orange-600 dark:text-orange-400","destructive-soft":"border-destructive/20 bg-destructive/10 text-destructive dark:text-red-400","info-soft":"border-blue-500/20 bg-blue-500/10 text-blue-600 dark:text-blue-400","highlight-soft":"border-rds-yellow-500/20 bg-rds-yellow-400/10 text-rds-yellow-600 dark:text-rds-yellow-400","success-outline":"border-rds-green-500/50 bg-transparent text-rds-green-600 dark:text-rds-green-400","warning-outline":"border-orange-500/50 bg-transparent text-orange-600 dark:text-orange-400","destructive-outline":"border-destructive/50 bg-transparent text-destructive dark:text-red-400","info-outline":"border-blue-500/50 bg-transparent text-blue-600 dark:text-blue-400"},rounded:{default:"rounded-md",full:"rounded-full"}},defaultVariants:{variant:"default",rounded:"default"}});function Kn({className:e,variant:t,rounded:r,...o}){return v.createElement("div",{className:n(uo({variant:t,rounded:r}),e),...o})}var dt=cva("inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{sm:"h-7 gap-1.5 px-2.5 text-xs [&_svg]:size-3.5",md:"h-8 gap-1.5 px-3 text-xs [&_svg]:size-3.5",default:"h-8 gap-1.5 px-3 text-xs [&_svg]:size-3.5",lg:"h-10 gap-2 px-4 text-sm [&_svg]:size-4",icon:"h-8 w-8 [&_svg]:size-3.5"}},defaultVariants:{variant:"default",size:"md"}}),re=v.forwardRef(({className:e,variant:t,size:r,asChild:o=false,...s},a)=>v.createElement(o?Slot:"button",{className:n("rds-button",dt({variant:t,size:r,className:e})),ref:a,...s}));re.displayName="Button";function At({className:e,classNames:t,showOutsideDays:r=true,captionLayout:o="label",buttonVariant:s="ghost",formatters:a,components:d,...p}){let i=getDefaultClassNames();return v.createElement(DayPicker,{showOutsideDays:r,className:n("bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,e),captionLayout:o,formatters:{formatMonthDropdown:c=>c.toLocaleString("default",{month:"short"}),...a},classNames:{root:n("w-fit",i.root),months:n("relative flex flex-col gap-4 md:flex-row",i.months),month:n("flex w-full flex-col gap-4",i.month),nav:n("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",i.nav),button_previous:n(dt({variant:s}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",i.button_previous),button_next:n(dt({variant:s}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",i.button_next),month_caption:n("flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",i.month_caption),dropdowns:n("flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",i.dropdowns),dropdown_root:n("has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",i.dropdown_root),dropdown:n("bg-popover absolute inset-0 opacity-0",i.dropdown),caption_label:n("select-none font-medium",o==="label"?"text-sm":"[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",i.caption_label),table:"w-full border-collapse",weekdays:n("flex",i.weekdays),weekday:n("text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",i.weekday),week:n("mt-2 flex w-full",i.week),week_number_header:n("w-[--cell-size] select-none",i.week_number_header),week_number:n("text-muted-foreground select-none text-[0.8rem]",i.week_number),day:n("group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",i.day),range_start:n("bg-accent rounded-l-md",i.range_start),range_middle:n("rounded-none",i.range_middle),range_end:n("bg-accent rounded-r-md",i.range_end),today:n("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",i.today),outside:n("text-muted-foreground aria-selected:text-muted-foreground",i.outside),disabled:n("text-muted-foreground opacity-50",i.disabled),hidden:n("invisible",i.hidden),...t},components:{Root:({className:c,rootRef:l,...m})=>v.createElement("div",{"data-slot":"calendar",ref:l,className:n(c),...m}),Chevron:({className:c,orientation:l,...m})=>l==="left"?v.createElement(ChevronLeftIcon,{className:n("size-4",c),...m}):l==="right"?v.createElement(ChevronRightIcon,{className:n("size-4",c),...m}):v.createElement(ChevronDownIcon,{className:n("size-4",c),...m}),DayButton:go,WeekNumber:({children:c,...l})=>v.createElement("td",{...l},v.createElement("div",{className:"flex size-[--cell-size] items-center justify-center text-center"},c)),...d},...p})}function go({className:e,day:t,modifiers:r,...o}){let s=getDefaultClassNames(),a=v.useRef(null);return v.useEffect(()=>{r.focused&&a.current?.focus();},[r.focused]),v.createElement(re,{ref:a,variant:"ghost",size:"icon","data-day":`${t.date.getFullYear()}-${String(t.date.getMonth()+1).padStart(2,"0")}-${String(t.date.getDate()).padStart(2,"0")}`,"data-selected-single":r.selected&&!r.range_start&&!r.range_end&&!r.range_middle,"data-range-start":r.range_start,"data-range-end":r.range_end,"data-range-middle":r.range_middle,className:n("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",s.day,e),...o})}var ho=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card",className:n("rds-card rounded-xl border bg-card text-card-foreground shadow",e),...t}));ho.displayName="Card";var yo=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card-header",className:n("flex flex-col space-y-1.5 p-6",e),...t}));yo.displayName="CardHeader";var vo=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card-title",className:n("font-semibold leading-none tracking-tight",e),...t}));vo.displayName="CardTitle";var bo=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card-description",className:n("text-sm text-muted-foreground",e),...t}));bo.displayName="CardDescription";var xo=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card-content",className:n("p-6 pt-0",e),...t}));xo.displayName="CardContent";var Ro=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{ref:r,"data-gds-part":"card-footer",className:n("flex items-center p-6 pt-0",e),...t}));Ro.displayName="CardFooter";var To=v.forwardRef(({className:e,...t},r)=>v.createElement(ct.Root,{ref:r,className:n("rds-checkbox peer h-4 w-4 shrink-0 rounded-[3px] border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...t},v.createElement(ct.Indicator,{className:n("flex items-center justify-center text-current")},v.createElement(Check,{className:"h-4 w-4"}))));To.displayName=ct.Root.displayName;var Je=ve.Root,Qe=ve.Trigger,Jn=ve.Anchor,Ve=v.forwardRef(({className:e,align:t="center",sideOffset:r=4,...o},s)=>v.createElement(ve.Portal,null,v.createElement(ve.Content,{ref:s,align:t,sideOffset:r,className:n("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",e),...o})));Ve.displayName=ve.Content.displayName;var Qn="PPP",es="LLL dd, y";function ts({value:e,onChange:t,placeholder:r="Pick a date",disabled:o,className:s,contentClassName:a,align:d="start",side:p,format:i=Qn,captionLayout:c,icon:l,"aria-label":m}){return v.createElement(Je,null,v.createElement(Qe,{asChild:true},v.createElement(re,{type:"button",variant:"outline",disabled:o,"aria-label":m??(e?void 0:r),"data-empty":!e,className:n("w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",s)},l??v.createElement(CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?format(e,i):v.createElement("span",null,r))),v.createElement(Ve,{className:n("w-auto p-0",a),align:d,side:p},v.createElement(At,{mode:"single",selected:e,onSelect:t,captionLayout:c,initialFocus:true})))}function rs({value:e,onChange:t,placeholder:r="Pick a date range",disabled:o,className:s,contentClassName:a,align:d="start",side:p,format:i=es,captionLayout:c,icon:l,numberOfMonths:m=2,"aria-label":u}){let h=!!e?.from;return v.createElement(Je,null,v.createElement(Qe,{asChild:true},v.createElement(re,{type:"button",variant:"outline",disabled:o,"aria-label":u??(h?void 0:r),"data-empty":!h,className:n("w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",s)},l??v.createElement(CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?.from?e.to?v.createElement(v.Fragment,null,format(e.from,i)," \u2013"," ",format(e.to,i)):format(e.from,i):v.createElement("span",null,r))),v.createElement(Ve,{className:n("w-auto p-0",a),align:d,side:p},v.createElement(At,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:m,captionLayout:c,initialFocus:true})))}var as=B.Root,ns=B.Trigger,wo=B.Portal,ss=B.Close,ir=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Overlay,{ref:r,className:n("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));ir.displayName=B.Overlay.displayName;var So=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(wo,null,v.createElement(ir,null),v.createElement(B.Content,{ref:o,className:n("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...r},t,v.createElement(B.Close,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"},v.createElement(X,{className:"h-4 w-4"}),v.createElement("span",{className:"sr-only"},"Close")))));So.displayName=B.Content.displayName;var Co=({className:e,...t})=>v.createElement("div",{className:n("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});Co.displayName="DialogHeader";var Mo=({className:e,...t})=>v.createElement("div",{className:n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Mo.displayName="DialogFooter";var ko=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Title,{ref:r,className:n("text-lg font-semibold leading-none tracking-tight",e),...t}));ko.displayName=B.Title.displayName;var No=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Description,{ref:r,className:n("text-sm text-muted-foreground",e),...t}));No.displayName=B.Description.displayName;var cs=x.Root,ps=x.Trigger,ms=x.Group,us=x.Portal,fs=x.Sub,gs=x.RadioGroup,Eo=v.forwardRef(({className:e,inset:t,children:r,...o},s)=>v.createElement(x.SubTrigger,{ref:s,className:n("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",t&&"pl-8",e),...o},r,v.createElement(ChevronRight,{className:"ml-auto"})));Eo.displayName=x.SubTrigger.displayName;var Ho=v.forwardRef(({className:e,...t},r)=>v.createElement(x.SubContent,{ref:r,className:n("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",e),...t}));Ho.displayName=x.SubContent.displayName;var Lo=v.forwardRef(({className:e,sideOffset:t=4,...r},o)=>v.createElement(x.Portal,null,v.createElement(x.Content,{ref:o,sideOffset:t,className:n("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",e),...r})));Lo.displayName=x.Content.displayName;var Do=v.forwardRef(({className:e,inset:t,...r},o)=>v.createElement(x.Item,{ref:o,className:n("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",t&&"pl-8",e),...r}));Do.displayName=x.Item.displayName;var Ao=v.forwardRef(({className:e,children:t,checked:r,...o},s)=>v.createElement(x.CheckboxItem,{ref:s,className:n("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),checked:r,...o},v.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v.createElement(x.ItemIndicator,null,v.createElement(Check,{className:"h-4 w-4"}))),t));Ao.displayName=x.CheckboxItem.displayName;var Io=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(x.RadioItem,{ref:o,className:n("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r},v.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v.createElement(x.ItemIndicator,null,v.createElement(Circle,{className:"h-2 w-2 fill-current"}))),t));Io.displayName=x.RadioItem.displayName;var Fo=v.forwardRef(({className:e,inset:t,...r},o)=>v.createElement(x.Label,{ref:o,className:n("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...r}));Fo.displayName=x.Label.displayName;var Go=v.forwardRef(({className:e,...t},r)=>v.createElement(x.Separator,{ref:r,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));Go.displayName=x.Separator.displayName;var Oo=({className:e,...t})=>v.createElement("span",{className:n("ml-auto text-xs tracking-widest opacity-60",e),...t});Oo.displayName="DropdownMenuShortcut";var Bo=v.forwardRef(({className:e,type:t,...r},o)=>v.createElement("input",{type:t,className:n("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:o,...r}));Bo.displayName="Input";var ys=cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Vo=v.forwardRef(({className:e,...t},r)=>v.createElement(lr.Root,{ref:r,className:n(ys(),e),...t}));Vo.displayName=lr.Root.displayName;var zo=v.forwardRef(({className:e,value:t,...r},o)=>v.createElement(ut.Root,{ref:o,className:n("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...r},v.createElement(ut.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));zo.displayName=ut.Root.displayName;var _o=v.forwardRef(({className:e,...t},r)=>v.createElement(De.Root,{className:n("grid gap-2",e),...t,ref:r}));_o.displayName=De.Root.displayName;var $o=v.forwardRef(({className:e,...t},r)=>v.createElement(De.Item,{ref:r,className:n("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),...t},v.createElement(De.Indicator,{className:"flex items-center justify-center"},v.createElement(Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));$o.displayName=De.Item.displayName;var xs=({className:e,...t})=>v.createElement(et.PanelGroup,{"data-gds-part":"resizable-panel-group",className:n("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...t}),Rs=et.Panel,Ts=({withHandle:e,className:t,...r})=>v.createElement(et.PanelResizeHandle,{"data-gds-part":"resizable-handle",className:n("relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",t),...r},e&&v.createElement("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border"},v.createElement(GripVertical,{className:"h-2.5 w-2.5"})));var Ko=cva("rds-row flex flex-row",{variants:{gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch",baseline:"items-baseline"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},wrap:{true:"flex-wrap",false:"flex-nowrap"}},defaultVariants:{gap:"md",align:"center",justify:"start",wrap:false}}),Uo=v.forwardRef(({className:e,gap:t,align:r,justify:o,wrap:s,asChild:a=false,...d},p)=>v.createElement(a?Slot:"div",{ref:p,"data-gds-part":"row",className:n(Ko({gap:t,align:r,justify:o,wrap:s,className:e})),...d}));Uo.displayName="Row";var Wo=cva("rds-grid grid",{variants:{cols:{1:"grid-cols-1",2:"grid-cols-1 md:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5",6:"grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",12:"grid-cols-4 md:grid-cols-6 lg:grid-cols-12"},gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"}},defaultVariants:{cols:"3",gap:"md",align:"stretch"}}),jo=v.forwardRef(({className:e,cols:t,gap:r,align:o,asChild:s=false,...a},d)=>v.createElement(s?Slot:"div",{ref:d,"data-gds-part":"grid",className:n(Wo({cols:t,gap:r,align:o,className:e})),...a}));jo.displayName="Grid";var Zo=cva("rds-flex flex",{variants:{direction:{row:"flex-row",col:"flex-col","row-reverse":"flex-row-reverse","col-reverse":"flex-col-reverse"},gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch",baseline:"items-baseline"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},wrap:{nowrap:"flex-nowrap",wrap:"flex-wrap","wrap-reverse":"flex-wrap-reverse"}},defaultVariants:{direction:"row",gap:"none",align:"stretch",justify:"start",wrap:"nowrap"}}),qo=v.forwardRef(({className:e,direction:t,gap:r,align:o,justify:s,wrap:a,asChild:d=false,...p},i)=>v.createElement(d?Slot:"div",{ref:i,"data-gds-part":"flex",className:n(Zo({direction:t,gap:r,align:o,justify:s,wrap:a,className:e})),...p}));qo.displayName="Flex";var Yo=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(ue.Root,{ref:o,className:n("relative overflow-hidden",e),...r},v.createElement(ue.Viewport,{className:"h-full w-full rounded-[inherit]"},t),v.createElement(dr,null),v.createElement(ue.Corner,null)));Yo.displayName=ue.Root.displayName;var dr=v.forwardRef(({className:e,orientation:t="vertical",...r},o)=>v.createElement(ue.ScrollAreaScrollbar,{ref:o,orientation:t,className:n("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...r},v.createElement(ue.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));dr.displayName=ue.ScrollAreaScrollbar.displayName;var Hs=T.Root,Ls=T.Group,Ds=T.Value,Jo=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(T.Trigger,{ref:o,className:n("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...r},t,v.createElement(T.Icon,{asChild:true},v.createElement(ChevronDown,{className:"h-4 w-4 opacity-50"}))));Jo.displayName=T.Trigger.displayName;var cr=v.forwardRef(({className:e,...t},r)=>v.createElement(T.ScrollUpButton,{ref:r,className:n("flex cursor-default items-center justify-center py-1",e),...t},v.createElement(ChevronUp,{className:"h-4 w-4"})));cr.displayName=T.ScrollUpButton.displayName;var pr=v.forwardRef(({className:e,...t},r)=>v.createElement(T.ScrollDownButton,{ref:r,className:n("flex cursor-default items-center justify-center py-1",e),...t},v.createElement(ChevronDown,{className:"h-4 w-4"})));pr.displayName=T.ScrollDownButton.displayName;var Qo=v.forwardRef(({className:e,children:t,position:r="popper",...o},s)=>v.createElement(T.Portal,null,v.createElement(T.Content,{ref:s,className:n("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...o},v.createElement(cr,null),v.createElement(T.Viewport,{className:n("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},t),v.createElement(pr,null))));Qo.displayName=T.Content.displayName;var ea=v.forwardRef(({className:e,...t},r)=>v.createElement(T.Label,{ref:r,className:n("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));ea.displayName=T.Label.displayName;var ta=v.forwardRef(({className:e,children:t,...r},o)=>v.createElement(T.Item,{ref:o,className:n("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r},v.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v.createElement(T.ItemIndicator,null,v.createElement(Check,{className:"h-4 w-4"}))),v.createElement(T.ItemText,null,t)));ta.displayName=T.Item.displayName;var ra=v.forwardRef(({className:e,...t},r)=>v.createElement(T.Separator,{ref:r,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));ra.displayName=T.Separator.displayName;var oa=v.forwardRef(({className:e,orientation:t="horizontal",decorative:r=true,...o},s)=>v.createElement(mr.Root,{ref:s,decorative:r,orientation:t,className:n("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...o}));oa.displayName=mr.Root.displayName;var Fs=B.Root,Gs=B.Trigger,Os=B.Close,aa=B.Portal,ur=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Overlay,{className:n("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t,ref:r}));ur.displayName=B.Overlay.displayName;var Bs=cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",{variants:{side:{top:"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",bottom:"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",left:"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",right:"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"}},defaultVariants:{side:"right"}}),na=v.forwardRef(({side:e="right",className:t,children:r,...o},s)=>v.createElement(aa,null,v.createElement(ur,null),v.createElement(B.Content,{ref:s,className:n(Bs({side:e}),t),...o},r,v.createElement(B.Close,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary"},v.createElement(X,{className:"h-4 w-4"}),v.createElement("span",{className:"sr-only"},"Close")))));na.displayName=B.Content.displayName;var sa=({className:e,...t})=>v.createElement("div",{className:n("flex flex-col space-y-2 text-center sm:text-left",e),...t});sa.displayName="SheetHeader";var ia=({className:e,...t})=>v.createElement("div",{className:n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});ia.displayName="SheetFooter";var la=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Title,{ref:r,className:n("text-lg font-semibold text-foreground",e),...t}));la.displayName=B.Title.displayName;var da=v.forwardRef(({className:e,...t},r)=>v.createElement(B.Description,{ref:r,className:n("text-sm text-muted-foreground",e),...t}));da.displayName=B.Description.displayName;function Vs({className:e,...t}){return React.createElement("div",{className:n("animate-pulse rounded-md bg-muted",e),...t})}var ca=v.forwardRef(({className:e,...t},r)=>v.createElement(Me.Root,{ref:r,className:n("relative flex w-full touch-none select-none items-center",e),...t},v.createElement(Me.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary"},v.createElement(Me.Range,{className:"absolute h-full bg-primary"})),v.createElement(Me.Thumb,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})));ca.displayName=Me.Root.displayName;var pa=cva("rds-stack flex flex-col",{variants:{gap:{none:"gap-0",xs:"gap-1",sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8","2xl":"gap-12"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"}},defaultVariants:{gap:"md",align:"stretch"}}),ma=v.forwardRef(({className:e,gap:t,align:r,asChild:o=false,...s},a)=>v.createElement(o?Slot:"div",{ref:a,"data-gds-part":"stack",className:n(pa({gap:t,align:r,className:e})),...s}));ma.displayName="Stack";var ua=v.forwardRef(({className:e,...t},r)=>v.createElement(ht.Root,{className:n("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:r},v.createElement(ht.Thumb,{className:n("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})));ua.displayName=ht.Root.displayName;var fa=v.forwardRef(({className:e,...t},r)=>v.createElement("div",{className:"relative w-full overflow-auto"},v.createElement("table",{ref:r,className:n("w-full caption-bottom text-sm",e),...t})));fa.displayName="Table";var ga=v.forwardRef(({className:e,...t},r)=>v.createElement("thead",{ref:r,className:n("[&_tr]:border-b",e),...t}));ga.displayName="TableHeader";var ha=v.forwardRef(({className:e,...t},r)=>v.createElement("tbody",{ref:r,className:n("[&_tr:last-child]:border-0",e),...t}));ha.displayName="TableBody";var ya=v.forwardRef(({className:e,...t},r)=>v.createElement("tfoot",{ref:r,className:n("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));ya.displayName="TableFooter";var va=v.forwardRef(({className:e,...t},r)=>v.createElement("tr",{ref:r,className:n("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));va.displayName="TableRow";var ba=v.forwardRef(({className:e,...t},r)=>v.createElement("th",{ref:r,className:n("h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));ba.displayName="TableHead";var xa=v.forwardRef(({className:e,...t},r)=>v.createElement("td",{ref:r,className:n("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));xa.displayName="TableCell";var Ra=v.forwardRef(({className:e,...t},r)=>v.createElement("caption",{ref:r,className:n("mt-4 text-sm text-muted-foreground",e),...t}));Ra.displayName="TableCaption";var Ta=v.forwardRef(({...e},t)=>v.createElement("nav",{ref:t,"aria-label":"breadcrumb",...e}));Ta.displayName="Breadcrumb";var Pa=v.forwardRef(({className:e,...t},r)=>v.createElement("ol",{ref:r,className:n("flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",e),...t}));Pa.displayName="BreadcrumbList";var wa=v.forwardRef(({className:e,...t},r)=>v.createElement("li",{ref:r,className:n("inline-flex items-center gap-1.5",e),...t}));wa.displayName="BreadcrumbItem";var fr=n("inline-flex items-center gap-1.5 rounded-md px-1.5 py-0.5 text-xs","transition-colors hover:text-foreground hover:bg-muted/60","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","[&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0"),Sa=v.forwardRef(({asChild:e,className:t,href:r,...o},s)=>e?v.createElement("span",{ref:s,className:n(fr,t),...o}):r?v.createElement("a",{ref:s,href:r,className:n(fr,t),...o}):v.createElement("button",{ref:s,type:"button",className:n(fr,t),...o}));Sa.displayName="BreadcrumbLink";var Ca=v.forwardRef(({className:e,...t},r)=>v.createElement("span",{ref:r,role:"link","aria-disabled":"true","aria-current":"page",className:n("inline-flex items-center gap-1.5 px-0.5 text-xs font-medium text-foreground","[&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0",e),...t}));Ca.displayName="BreadcrumbPage";var Ma=({children:e,className:t,...r})=>v.createElement("li",{role:"presentation","aria-hidden":"true",className:n("[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",t),...r},e??v.createElement(ChevronRight,null));Ma.displayName="BreadcrumbSeparator";var ka=({className:e,...t})=>v.createElement("span",{role:"presentation","aria-hidden":"true",className:n("flex h-5 w-5 items-center justify-center",e),...t},v.createElement(MoreHorizontal,{className:"h-3.5 w-3.5"}),v.createElement("span",{className:"sr-only"},"More"));ka.displayName="BreadcrumbEllipsis";var gr=be.Provider,vt=be.Root,bt=be.Trigger,tt=v.forwardRef(({className:e,sideOffset:t=4,...r},o)=>v.createElement(be.Portal,null,v.createElement(be.Content,{ref:o,sideOffset:t,className:n("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",e),...r})));tt.displayName=be.Content.displayName;var Ea=v.createContext("md"),Us=xe.Root,Ws=cva("inline-flex items-center justify-center rounded-lg bg-muted text-muted-foreground",{variants:{size:{sm:"h-7 p-0.5",md:"h-8 p-0.5",lg:"h-10 p-1"}},defaultVariants:{size:"md"}}),js=cva("inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[state=active]:bg-background data-[state=active]:text-foreground",{variants:{size:{sm:"h-6 px-1.5 text-[11px] gap-1 [&_svg]:size-3",md:"h-7 px-2 text-xs gap-1.5 [&_svg]:size-3.5",lg:"h-8 px-2.5 text-sm gap-2 [&_svg]:size-4"}},defaultVariants:{size:"md"}}),Ha=v.forwardRef(({className:e,size:t="md",children:r,...o},s)=>v.createElement(Ea.Provider,{value:t??"md"},v.createElement(xe.List,{ref:s,className:n(Ws({size:t}),e),...o},r)));Ha.displayName=xe.List.displayName;var La=v.forwardRef(({className:e,size:t,tooltip:r,...o},s)=>{let a=v.useContext(Ea),d=t??a,p=o["aria-label"]??(typeof r=="string"?r:void 0),i=v.createElement(xe.Trigger,{ref:s,className:n(js({size:d}),e),"aria-label":p,...o});return r?v.createElement(vt,null,v.createElement(bt,{asChild:true},i),v.createElement(tt,null,r)):i});La.displayName=xe.Trigger.displayName;var Da=v.forwardRef(({className:e,...t},r)=>v.createElement(xe.Content,{ref:r,className:n("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Da.displayName=xe.Content.displayName;var Aa=v.forwardRef(({className:e,...t},r)=>v.createElement("textarea",{className:n("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));Aa.displayName="Textarea";var Ia=cva("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-1.5 min-w-8",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),Fa=v.forwardRef(({className:e,variant:t,size:r,...o},s)=>v.createElement(hr.Root,{ref:s,className:n(Ia({variant:t,size:r,className:e})),...o}));Fa.displayName=hr.Root.displayName;var Oa=v.createContext("md"),qs=cva("inline-flex items-center justify-center rounded-lg bg-muted text-muted-foreground",{variants:{size:{sm:"h-7 p-0.5",md:"h-8 p-0.5",lg:"h-10 p-1"}},defaultVariants:{size:"md"}}),Ys=cva("inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[state=on]:bg-background data-[state=on]:text-foreground",{variants:{size:{sm:"h-6 px-1.5 text-[11px] gap-1 [&_svg]:size-3",md:"h-7 px-2 text-xs gap-1.5 [&_svg]:size-3.5",lg:"h-8 px-2.5 text-sm gap-2 [&_svg]:size-4"}},defaultVariants:{size:"md"}}),Ba=v.forwardRef(({className:e,size:t="md",children:r,...o},s)=>v.createElement(Oa.Provider,{value:t??"md"},v.createElement(rt.Root,{ref:s,className:n(qs({size:t}),e),...o},r)));Ba.displayName=rt.Root.displayName;var Va=v.forwardRef(({className:e,size:t,...r},o)=>{let s=v.useContext(Oa);return v.createElement(rt.Item,{ref:o,className:n(Ys({size:t??s}),e),...r})});Va.displayName=rt.Item.displayName;var _a=v.createContext(null);function $a(){let e=v.useContext(_a);if(!e)throw new Error("SideMenu components must be used within SideMenu");return e}var Qs=({href:e,className:t,children:r})=>v.createElement("a",{href:e,className:t},r),Ka=v.forwardRef(({header:e,collapsedHeader:t,sections:r,items:o,footer:s,collapsed:a,onCollapsedChange:d,collapsible:p=true,defaultCollapsed:i=false,activeItem:c,className:l,linkComponent:m=Qs},u)=>{let[h,y]=v.useState(i),f=a??h,g=()=>{let R=!f;y(R),d?.(R);};return v.createElement(gr,{delayDuration:0},v.createElement(_a.Provider,{value:{collapsed:f,activeItem:c,LinkComponent:m}},v.createElement("aside",{ref:u,className:n("flex h-full flex-col transition-[width] duration-300 ease-in-out","bg-white dark:bg-[#141414] border-r border-rds-gray-200 dark:border-[#1a1a1a]",f?"w-16":"w-64",l)},v.createElement("div",{className:n("flex items-center border-b border-rds-gray-200 dark:border-[#1a1a1a] flex-shrink-0 h-12",f?"justify-center px-2":"justify-between px-3")},f&&t||e,p&&v.createElement("button",{onClick:g,className:n("rounded-md h-5 w-5 flex items-center justify-center","text-rds-gray-400 dark:text-rds-gray-500","hover:text-rds-gray-600 dark:hover:text-rds-gray-300 transition-colors","bg-white dark:bg-[#141414] border border-rds-gray-200 dark:border-rds-gray-700 shadow-sm",f&&"absolute left-[calc(4rem-10px)] top-6 -translate-y-1/2 z-50"),"aria-label":f?"Expand sidebar":"Collapse sidebar"},f?v.createElement(ChevronRight,{className:"h-3 w-3"}):v.createElement(ChevronLeft,{className:"h-3 w-3"}))),v.createElement("nav",{className:"flex-1 py-2 overflow-y-auto overflow-x-hidden"},o&&o.length>0&&v.createElement("div",{className:"px-2 mb-1 space-y-0.5"},o.map(R=>v.createElement(yr,{key:R.id,item:R}))),r?.map(R=>v.createElement(ei,{key:R.id,section:R}))),s&&v.createElement("div",{className:"flex-shrink-0 border-t border-rds-gray-200 dark:border-[#1a1a1a] p-2"},s))))});Ka.displayName="SideMenu";function ei({section:e}){let{collapsed:t}=$a(),[r,o]=v.useState(e.defaultExpanded??true);return t?v.createElement("div",{className:"px-2 mb-1 space-y-0.5"},e.items.map(s=>v.createElement(yr,{key:s.id,item:s}))):v.createElement("div",{className:"px-2 mb-1"},v.createElement("button",{onClick:()=>o(!r),className:n("flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm font-medium","text-rds-gray-700 dark:text-rds-gray-300","hover:bg-rds-gray-50 dark:hover:bg-rds-gray-900","hover:text-rds-gray-900 dark:hover:text-white transition-colors")},e.icon&&v.createElement("span",{className:"h-3.5 w-3.5 flex-shrink-0"},e.icon),v.createElement("span",{className:"flex-1 text-left"},e.title),r?v.createElement(ChevronDown,{className:"h-3 w-3",strokeWidth:1.5}):v.createElement(ChevronRight,{className:"h-3 w-3",strokeWidth:1.5})),r&&v.createElement("div",{className:"mt-0.5 space-y-0.5 relative pl-5"},v.createElement("div",{className:"absolute left-[1.1rem] top-0 bottom-0 w-px bg-rds-gray-200 dark:bg-rds-gray-700"}),e.items.map(s=>v.createElement(yr,{key:s.id,item:s,nested:true}))))}function yr({item:e,nested:t=false}){let{collapsed:r,activeItem:o,LinkComponent:s}=$a(),a=o===e.id,d=n("flex items-center gap-2.5 rounded-md text-sm font-medium transition-colors",r?"justify-center px-2 py-2.5":"px-2 py-1.5",a?t?"bg-rds-gray-100 dark:bg-[#1a1a1a] text-rds-gray-900 dark:text-white":"bg-rds-green-50 dark:bg-rds-green-950 text-rds-green-700 dark:text-rds-green-400":"text-rds-gray-700 dark:text-rds-gray-300 hover:bg-rds-gray-50 dark:hover:bg-rds-gray-900 hover:text-rds-gray-900 dark:hover:text-white",e.disabled&&"opacity-50 pointer-events-none"),p=v.createElement(v.Fragment,null,e.icon&&v.createElement("span",{className:n("flex-shrink-0",r?"h-5 w-5":"h-3.5 w-3.5")},e.icon),!r&&v.createElement("span",null,e.label),!r&&e.badge&&v.createElement("span",{className:"ml-auto text-xs bg-rds-gray-100 dark:bg-rds-gray-800 px-1.5 py-0.5 rounded"},e.badge)),i=e.href?v.createElement(s,{href:e.href,className:d},p):v.createElement("button",{onClick:e.onClick,disabled:e.disabled,className:n(d,"w-full")},p);return r?v.createElement(vt,null,v.createElement(bt,{asChild:true},i),v.createElement(tt,{side:"right",sideOffset:8},e.label)):i}var vr=v.createContext(null);function br(){let e=v.useContext(vr);if(!e)throw new Error("SimpleTabsPanel must be used within SimpleTabs");return e}var Ua=v.forwardRef(({tabs:e,activeTab:t,defaultTab:r,onTabChange:o,children:s,className:a,tabsClassName:d},p)=>{let[i,c]=v.useState(r||e[0]?.id||""),l=t??i,m=u=>{c(u),o?.(u);};return v.createElement(vr.Provider,{value:{activeTab:l,setActiveTab:m}},v.createElement("div",{ref:p,className:n("space-y-6",a)},v.createElement("div",{className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},v.createElement("nav",{className:n("-mb-px flex gap-1 overflow-x-auto scrollbar-hide",d),"aria-label":"Tabs"},e.map(u=>{let h=l===u.id;return v.createElement("button",{key:u.id,onClick:()=>!u.disabled&&m(u.id),disabled:u.disabled,className:n("relative flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors whitespace-nowrap",h?"text-primary":"text-muted-foreground hover:text-foreground",u.disabled&&"opacity-50 cursor-not-allowed")},u.icon&&v.createElement("span",{className:"h-4 w-4"},u.icon),u.label,h&&v.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))}))),s&&v.createElement("div",null,s)))});Ua.displayName="SimpleTabs";var Wa=v.forwardRef(({id:e,children:t,className:r},o)=>{let{activeTab:s}=br();return s!==e?null:v.createElement("div",{ref:o,role:"tabpanel","aria-labelledby":`tab-${e}`,className:r},t)});Wa.displayName="SimpleTabsPanel";var ja=v.forwardRef(({activeTab:e,defaultTab:t,onTabChange:r,children:o,className:s},a)=>{let[d,p]=v.useState(t||""),i=e??d,c=l=>{p(l),r?.(l);};return v.createElement(vr.Provider,{value:{activeTab:i,setActiveTab:c}},v.createElement("div",{ref:a,className:n("space-y-6",s)},o))});ja.displayName="SimpleTabsRoot";var Za=v.forwardRef(({children:e,className:t},r)=>v.createElement("div",{ref:r,className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},v.createElement("nav",{className:n("-mb-px flex gap-1 overflow-x-auto scrollbar-hide",t),role:"tablist","aria-label":"Tabs"},e)));Za.displayName="SimpleTabsList";var qa=v.forwardRef(({value:e,children:t,icon:r,disabled:o,className:s},a)=>{let{activeTab:d,setActiveTab:p}=br(),i=d===e;return v.createElement("button",{ref:a,role:"tab",id:`tab-${e}`,"aria-selected":i,"aria-controls":`panel-${e}`,onClick:()=>!o&&p(e),disabled:o,className:n("relative flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors whitespace-nowrap",i?"text-primary":"text-muted-foreground hover:text-foreground",o&&"opacity-50 cursor-not-allowed",s)},r&&v.createElement("span",{className:"h-4 w-4"},r),t,i&&v.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))});qa.displayName="SimpleTabsTrigger";var Ya=v.forwardRef(({value:e,children:t,className:r},o)=>{let{activeTab:s}=br();return s!==e?null:v.createElement("div",{ref:o,role:"tabpanel",id:`panel-${e}`,"aria-labelledby":`tab-${e}`,className:r},t)});Ya.displayName="SimpleTabsContent";var Ae=[50,100,200,300,400,500,600,700,800,900,950],Xa=[.985,.955,.895,.82,.72,.61,.51,.415,.325,.245,.17],ti=[.015,.04,.075,.11,.14,.17,.17,.15,.12,.08,.04];function Ut({hue:e,chromaScale:t=1}){let r=(e%360+360)%360,o={};for(let s=0;s<Ae.length;s++){let a=Xa[s],d=ti[s]*t;o[Ae[s]]=`${a.toFixed(4)} ${d.toFixed(4)} ${r.toFixed(2)}`;}return o}function Ja(){let e={};for(let t=0;t<Ae.length;t++){let r=Xa[t];e[Ae[t]]=`${r.toFixed(4)} 0 0`;}return e}var xr={light:{destructive:"0.560 0.220 27.0",destructiveFg:"0.990 0.005 27.0",success:"0.610 0.180 145.0",warning:"0.720 0.180 60.0",info:"0.580 0.200 240.0",highlight:"0.860 0.180 95.0"},dark:{destructive:"0.680 0.220 27.0",destructiveFg:"0.990 0.005 27.0",success:"0.720 0.180 145.0",warning:"0.800 0.180 60.0",info:"0.700 0.200 240.0",highlight:"0.880 0.180 95.0"}},xt="1 0 0",Qa="0 0 0";function ot(e,t){let[,r,o]=e.split(/\s+/).map(l=>l.trim()),s=Number(r),a=o;if(t==="light"){let m=Math.min(s*.22,.045),u=.38,h=s;return {soft:`${.965.toFixed(3)} ${m.toFixed(3)} ${a}`,deep:`${u.toFixed(3)} ${h.toFixed(3)} ${a}`}}let d=.22,p=Math.min(s*.45,.075),i=.82,c=s*.9;return {soft:`${d.toFixed(3)} ${p.toFixed(3)} ${a}`,deep:`${i.toFixed(3)} ${c.toFixed(3)} ${a}`}}var Wt={geist:"var(--font-geist), system-ui, sans-serif",inter:"var(--font-inter), system-ui, sans-serif",manrope:"var(--font-manrope), system-ui, sans-serif",figtree:"var(--font-figtree), system-ui, sans-serif",dmSans:"var(--font-dm-sans), system-ui, sans-serif",lexend:"var(--font-lexend), system-ui, sans-serif",outfit:"var(--font-outfit), system-ui, sans-serif",plusJakarta:"var(--font-plus-jakarta), system-ui, sans-serif",spaceGrotesk:"var(--font-space-grotesk), system-ui, sans-serif",fraunces:"var(--font-fraunces), Georgia, serif",instrumentSerif:"var(--font-instrument-serif), Georgia, serif",sourceSerif:"var(--font-source-serif), Georgia, serif",jetbrainsMono:"var(--font-jetbrains-mono), ui-monospace, monospace",geistMono:"var(--font-geist-mono), ui-monospace, monospace",ibmPlexMono:"var(--font-ibm-plex-mono), ui-monospace, monospace",system:"system-ui, -apple-system, sans-serif",serif:"Georgia, 'Times New Roman', serif",mono:"ui-monospace, Menlo, monospace"};var ri=["superLight","light","dark","superDark"],oi={muted:.6,default:1,vibrant:1.3};function ai(e,t,r){let o=t.primary*r,s=t.accent*r,a=(o+s)/2*.8,d=p=>(p%360+360)%360;return {1:`0.600 ${(.17*o).toFixed(4)} ${e.primary.toFixed(2)}`,2:`0.640 ${(.17*a).toFixed(4)} ${d(e.primary+140).toFixed(2)}`,3:`0.580 ${(.17*a).toFixed(4)} ${d(e.primary+220).toFixed(2)}`,4:`0.510 0.0250 ${e.neutral.toFixed(2)}`,5:`0.620 ${(.17*s).toFixed(4)} ${e.accent.toFixed(2)}`}}var b=e=>({source:"neutral",step:e}),fe=e=>({source:"primary",step:e}),Ie=e=>({source:"accent",step:e}),Rt=e=>({source:"pure",value:e}),ni={superLight:{background:b(50),foreground:b(800),card:Rt(xt),cardForeground:b(800),popover:Rt(xt),popoverForeground:b(800),primary:fe(600),primaryForeground:fe(50),secondary:b(100),secondaryForeground:b(700),muted:b(100),mutedForeground:b(500),accent:Ie(600),accentForeground:Ie(50),border:b(200),input:b(200),ring:fe(500)},light:{background:b(50),foreground:b(950),card:Rt(xt),cardForeground:b(950),popover:Rt(xt),popoverForeground:b(950),primary:fe(500),primaryForeground:fe(50),secondary:b(100),secondaryForeground:b(700),muted:b(100),mutedForeground:b(500),accent:Ie(500),accentForeground:Ie(50),border:b(200),input:b(200),ring:fe(500)},dark:{background:b(950),foreground:b(50),card:b(900),cardForeground:b(50),popover:b(900),popoverForeground:b(50),primary:fe(400),primaryForeground:fe(950),secondary:b(800),secondaryForeground:b(200),muted:b(800),mutedForeground:b(400),accent:Ie(400),accentForeground:Ie(950),border:b(800),input:b(800),ring:fe(400)},superDark:{background:Rt(Qa),foreground:b(100),card:b(950),cardForeground:b(100),popover:b(950),popoverForeground:b(100),primary:fe(300),primaryForeground:fe(950),secondary:b(900),secondaryForeground:b(300),muted:b(900),mutedForeground:b(500),accent:Ie(300),accentForeground:Ie(950),border:b(900),input:b(900),ring:fe(300)}};function Y(e,t){return e.source==="pure"?e.value:t[e.source][e.step]}function si(e,t){let r=ni[t],o=t==="superLight"||t==="light",s=o?xr.light:xr.dark;return {background:Y(r.background,e),foreground:Y(r.foreground,e),card:Y(r.card,e),cardForeground:Y(r.cardForeground,e),popover:Y(r.popover,e),popoverForeground:Y(r.popoverForeground,e),primary:Y(r.primary,e),primaryForeground:Y(r.primaryForeground,e),secondary:Y(r.secondary,e),secondaryForeground:Y(r.secondaryForeground,e),muted:Y(r.muted,e),mutedForeground:Y(r.mutedForeground,e),accent:Y(r.accent,e),accentForeground:Y(r.accentForeground,e),border:Y(r.border,e),input:Y(r.input,e),ring:Y(r.ring,e),destructive:s.destructive,destructiveForeground:s.destructiveFg,success:s.success,warning:s.warning,info:s.info,highlight:s.highlight,...(()=>{let a=o?"light":"dark",d=ot(s.destructive,a),p=ot(s.success,a),i=ot(s.warning,a),c=ot(s.info,a),l=ot(s.highlight,a);return {destructiveSoft:d.soft,destructiveDeep:d.deep,successSoft:p.soft,successDeep:p.deep,warningSoft:i.soft,warningDeep:i.deep,infoSoft:c.soft,infoDeep:c.deep,highlightSoft:l.soft,highlightDeep:l.deep}})()}}var ke={display:3.75,h1:2.5,h2:2,h3:1.5,h4:1.25,h5:1.125,h6:1,body:1,bodySm:.875},ii={compact:.85,default:1,spacious:1.18};function li(e){let t=ii[e.scale],r=o=>`${(o*t).toFixed(3)}rem`;return {fontSans:Wt[e.body],fontMono:Wt[e.mono],fontDisplay:Wt[e.display],headingWeight:e.headingWeight??600,bodyWeight:e.bodyWeight??400,headingTracking:e.headingTracking??"-0.01em",scale:{display:r(ke.display),h1:r(ke.h1),h2:r(ke.h2),h3:r(ke.h3),h4:r(ke.h4),h5:r(ke.h5),h6:r(ke.h6),body:r(ke.body),bodySm:r(ke.bodySm)}}}var di={sharp:0,subtle:.25,soft:.5,round:.875,pill:1.25};function ci(e){let t=di[e.style],r=o=>`${o.toFixed(3)}rem`;return {base:r(t),sm:r(Math.max(0,t-.25)),md:r(t),lg:r(t+.25),xl:r(t+.5),"2xl":r(t+1),full:"9999px"}}var pi={tight:.85,default:1,roomy:1.2};function mi(e){return {baseUnit:"1rem",densityFactor:pi[e.density]}}var ui={none:{sm:"none",md:"none",lg:"none",xl:"none","2xl":"none",inner:"none"},subtle:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.03)",md:"0 2px 4px -1px rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.03)",lg:"0 6px 14px -2px rgb(0 0 0 / 0.05)",xl:"0 12px 24px -4px rgb(0 0 0 / 0.06)","2xl":"0 24px 48px -12px rgb(0 0 0 / 0.12)",inner:"inset 0 1px 2px 0 rgb(0 0 0 / 0.03)"},default:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},dramatic:{sm:"0 2px 4px 0 rgb(0 0 0 / 0.12)",md:"0 8px 16px -2px rgb(0 0 0 / 0.18), 0 4px 8px -4px rgb(0 0 0 / 0.12)",lg:"0 20px 32px -4px rgb(0 0 0 / 0.22), 0 8px 16px -8px rgb(0 0 0 / 0.18)",xl:"0 32px 48px -6px rgb(0 0 0 / 0.28), 0 12px 24px -10px rgb(0 0 0 / 0.22)","2xl":"0 48px 80px -16px rgb(0 0 0 / 0.45)",inner:"inset 0 4px 8px 0 rgb(0 0 0 / 0.1)"}};function fi(e){let t=e?.shadows??"default",r=e?.motionIntensity??1,o=s=>`${Math.round(s*r)}ms`;return {shadows:ui[t],motion:{fast:o(150),base:o(200),slow:o(300),slower:o(500)},borderWidth:e?.borderWidth??"1px"}}function _e(e){let t=oi[e.intensity??"default"],r=e.neutralPureGray??false,o=(e.chroma?.neutral??.08)*t,s=(e.chroma?.primary??1)*t,a=(e.chroma?.accent??1)*t,d=r?Ja():Ut({hue:e.hues.neutral,chromaScale:o}),p=Ut({hue:e.hues.primary,chromaScale:s}),i=Ut({hue:e.hues.accent,chromaScale:a}),c={neutral:d,primary:p,accent:i},l=ai(e.hues,{primary:s,accent:a},t),m=Object.fromEntries(ri.map(R=>[R,si(c,R)])),u=li(e.typography),h=ci(e.radius),y=mi(e.spacing),f=fi(e.effects),g={buttonShape:e.components?.buttonShape??"default",inputStyle:e.components?.inputStyle??"outlined",cardStyle:e.components?.cardStyle??"flat"};return {id:e.id,name:e.name,description:e.description,tagline:e.tagline,input:e,ramps:c,colors:m,chart:l,typography:u,radius:h,spacing:y,effects:f,components:g}}var Tt={id:"calm",name:"Calm",description:"Warm neutrals, terracotta primary, serif typography.",tagline:"Signature",hues:{neutral:40,primary:20,accent:40},chroma:{neutral:.15,primary:.75,accent:.8},intensity:"muted",typography:{display:"fraunces",body:"fraunces",mono:"jetbrainsMono",scale:"default",headingWeight:600,headingTracking:"-0.02em"},spacing:{density:"roomy"},radius:{style:"round"},effects:{shadows:"subtle",motionIntensity:1.25},components:{buttonShape:"pill",inputStyle:"outlined",cardStyle:"outlined"}},Rr={id:"energy",name:"Energy",description:"Teal + indigo \u2014 punchy, cool-tone, modern sans.",tagline:"Alternate",hues:{neutral:175,primary:175,accent:235},chroma:{neutral:.08,primary:1,accent:1},intensity:"vibrant",typography:{display:"geist",body:"geist",mono:"geistMono",scale:"default",headingWeight:600},spacing:{density:"default"},radius:{style:"soft"},effects:{shadows:"default",motionIntensity:1},components:{buttonShape:"default",inputStyle:"outlined",cardStyle:"flat"}},jt=[Tt,Rr];function gi(e){return {"--background":e.background,"--foreground":e.foreground,"--card":e.card,"--card-foreground":e.cardForeground,"--popover":e.popover,"--popover-foreground":e.popoverForeground,"--primary":e.primary,"--primary-foreground":e.primaryForeground,"--secondary":e.secondary,"--secondary-foreground":e.secondaryForeground,"--muted":e.muted,"--muted-foreground":e.mutedForeground,"--accent":e.accent,"--accent-foreground":e.accentForeground,"--destructive":e.destructive,"--destructive-foreground":e.destructiveForeground,"--border":e.border,"--input":e.input,"--ring":e.ring,"--success":e.success,"--warning":e.warning,"--info":e.info,"--highlight":e.highlight,"--destructive-soft":e.destructiveSoft,"--destructive-deep":e.destructiveDeep,"--success-soft":e.successSoft,"--success-deep":e.successDeep,"--warning-soft":e.warningSoft,"--warning-deep":e.warningDeep,"--info-soft":e.infoSoft,"--info-deep":e.infoDeep,"--highlight-soft":e.highlightSoft,"--highlight-deep":e.highlightDeep}}function Pr(e,t){let r=e.colors[t];return {...gi(r),...Tr("neutral",e.ramps.neutral),...Tr("primary",e.ramps.primary),...Tr("accent",e.ramps.accent),"--chart-1":e.chart[1],"--chart-2":e.chart[2],"--chart-3":e.chart[3],"--chart-4":e.chart[4],"--chart-5":e.chart[5],"--font-sans":e.typography.fontSans,"--font-mono":e.typography.fontMono,"--font-display":e.typography.fontDisplay,"--font-heading-weight":String(e.typography.headingWeight),"--font-body-weight":String(e.typography.bodyWeight),"--font-heading-tracking":e.typography.headingTracking,"--text-display":e.typography.scale.display,"--text-h1":e.typography.scale.h1,"--text-h2":e.typography.scale.h2,"--text-h3":e.typography.scale.h3,"--text-h4":e.typography.scale.h4,"--text-h5":e.typography.scale.h5,"--text-h6":e.typography.scale.h6,"--text-body":e.typography.scale.body,"--text-body-sm":e.typography.scale.bodySm,"--radius":e.radius.base,"--rds-radius-sm":e.radius.sm,"--rds-radius-md":e.radius.md,"--rds-radius-lg":e.radius.lg,"--rds-radius-xl":e.radius.xl,"--rds-radius-2xl":e.radius["2xl"],"--rds-radius-full":e.radius.full,"--rds-density":String(e.spacing.densityFactor),"--rds-shadow-sm":e.effects.shadows.sm,"--rds-shadow-md":e.effects.shadows.md,"--rds-shadow-lg":e.effects.shadows.lg,"--rds-shadow-xl":e.effects.shadows.xl,"--rds-shadow-2xl":e.effects.shadows["2xl"],"--rds-shadow-inner":e.effects.shadows.inner,"--rds-transition-fast":e.effects.motion.fast,"--rds-transition-base":e.effects.motion.base,"--rds-transition-slow":e.effects.motion.slow,"--rds-transition-slower":e.effects.motion.slower,"--rds-border-width":e.effects.borderWidth}}function Tr(e,t){let r={};for(let o of Ae)r[`--ramp-${e}-${o}`]=t[o];return r}function Zt(e,t){if(typeof document>"u")return;let r=document.documentElement,o=Pr(e,t);for(let[s,a]of Object.entries(o))r.style.setProperty(s,a);r.setAttribute("data-ramp-theme",e.id),r.setAttribute("data-mode",t),r.setAttribute("data-button-shape",e.components.buttonShape??"default"),r.setAttribute("data-input-style",e.components.inputStyle??"outlined"),r.setAttribute("data-card-style",e.components.cardStyle??"flat");}function Pt(e){if(typeof document>"u")return "";let t=document.createElement("span");t.style.color=`oklch(${e})`,t.style.position="absolute",t.style.visibility="hidden",document.body.appendChild(t);let r=getComputedStyle(t).color;document.body.removeChild(t);let o=r.match(/\d+/g);if(!o||o.length<3)return "";let[s,a,d]=o.slice(0,3).map(Number);return "#"+[s,a,d].map(p=>Math.max(0,Math.min(255,p)).toString(16).padStart(2,"0")).join("").toUpperCase()}function hi(e){let t=e.trim().split(/\s+/);if(t.length<3)return {oklch:e,hex:""};let[r,o,s]=t.map(Number),a=`${r.toFixed(3)} ${o.toFixed(3)} ${Math.round(s)}`,d=Pt(e);return {oklch:a,hex:d}}function wr(e,t,r){let o=[`### ${e} ramp (hue ${Math.round(r)}\xB0)`,"","| Step | OKLCH | Hex |","|------|-------|-----|"];for(let s of Ae){let{oklch:a,hex:d}=hi(t[s]);o.push(`| ${s} | \`${a}\` | \`${d||"\u2014"}\` |`);}return o.join(`
|
|
2
|
+
`)}function en(e,t){let r=[`### ${e}`,"","| Token | Usage | Light (hex) | Dark (hex) |","|-------|-------|-------------|------------|"];for(let o of t){let s=Pt(o.light)||"\u2014",a=Pt(o.dark)||"\u2014";r.push(`| \`--${o.token}\` | ${o.usage} | \`${s}\` (\`${o.light}\`) | \`${a}\` (\`${o.dark}\`) |`);}return r.join(`
|
|
3
|
+
`)}function tn(e){return JSON.stringify(e.input,null,2)}function rn(e){let{input:t,ramps:r,colors:o,chart:s,typography:a,radius:d,spacing:p,effects:i,components:c}=e,l=t.intensity??"default",m=f=>({token:f,usage:yi[f]??"",light:o.light[f],dark:o.dark[f]}),u=["background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","border","input","ring"].map(m),h=["destructive","destructiveForeground","success","warning","info","highlight"].map(m),y=[1,2,3,4,5].map(f=>{let g=s[f];return {slot:f,triplet:g,hex:Pt(g)||"\u2014"}});return `# ${e.name} \u2014 Grade Design System Theme
|
|
4
|
+
|
|
5
|
+
> **Portable theme spec.** Paste this entire file into a fresh LLM prompt along with your design brief. The model will have everything it needs to produce UI that matches this exact theme \u2014 colors, typography, spacing, shapes, and the "feel" we're after.
|
|
6
|
+
|
|
7
|
+
## At a glance
|
|
8
|
+
|
|
9
|
+
- **Name**: ${e.name}
|
|
10
|
+
- **ID**: \`${t.id}\`
|
|
11
|
+
${t.description?`- **Description**: ${t.description}
|
|
12
|
+
`:""}- **Hues**: neutral \`${t.hues.neutral}\xB0\` \xB7 primary \`${t.hues.primary}\xB0\` \xB7 accent \`${t.hues.accent}\xB0\`
|
|
13
|
+
- **Intensity**: \`${l}\` ${l==="muted"?"(quieter chroma across the board)":l==="vibrant"?"(punchier chroma across the board)":"(balanced)"}
|
|
14
|
+
- **Typography**: ${t.typography.display} display \xB7 ${t.typography.body} body \xB7 ${t.typography.mono} mono \xB7 scale \`${t.typography.scale}\`
|
|
15
|
+
- **Spacing density**: \`${t.spacing.density}\`
|
|
16
|
+
- **Radius style**: \`${t.radius.style}\` (base \`${d.base}\`)
|
|
17
|
+
- **Button shape**: \`${c.buttonShape}\` \xB7 **Input style**: \`${c.inputStyle}\` \xB7 **Card style**: \`${c.cardStyle}\`
|
|
18
|
+
- **Shadow preset**: \`${t.effects?.shadows??"default"}\` \xB7 **Motion intensity**: \`${t.effects?.motionIntensity??1}\`
|
|
19
|
+
|
|
20
|
+
## How themes work
|
|
21
|
+
|
|
22
|
+
Every theme in Grade DS is produced by a pure function:
|
|
23
|
+
|
|
24
|
+
\`\`\`ts
|
|
25
|
+
generateTheme(input: ThemeInput) => GeneratedTheme
|
|
26
|
+
\`\`\`
|
|
27
|
+
|
|
28
|
+
A \`ThemeInput\` is a small object (three hues plus a handful of presets). The generator turns it into three 11-stop **OKLCH** color ramps, semantic tokens for four brightness modes (superLight / light / dark / superDark), a chart palette, and concrete values for typography, radius, spacing, and effects. Everything downstream reads from CSS variables set on \`:root\`.
|
|
29
|
+
|
|
30
|
+
## Full ThemeInput (round-trippable)
|
|
31
|
+
|
|
32
|
+
\`\`\`json
|
|
33
|
+
${tn(e)}
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
## Color ramps
|
|
37
|
+
|
|
38
|
+
Three 11-stop OKLCH ramps, generated from the input hues + chromas + global intensity. Every color elsewhere in the theme resolves back to one of these stops.
|
|
39
|
+
|
|
40
|
+
${wr("Neutral",r.neutral,t.hues.neutral)}
|
|
41
|
+
|
|
42
|
+
${wr("Primary",r.primary,t.hues.primary)}
|
|
43
|
+
|
|
44
|
+
${wr("Accent",r.accent,t.hues.accent)}
|
|
45
|
+
|
|
46
|
+
## Semantic tokens (hue-derived)
|
|
47
|
+
|
|
48
|
+
Purpose-based tokens drawn from the ramps. Two values per token \u2014 the generator produces them for all four brightness modes, but only light + dark are shown here for brevity.
|
|
49
|
+
|
|
50
|
+
${en("Core semantic tokens",u)}
|
|
51
|
+
|
|
52
|
+
## Fixed semantic tokens (not hue-derived)
|
|
53
|
+
|
|
54
|
+
Status colors stay consistent across themes so users always read green as success, red as destructive, etc. Accessibility wins over brand cohesion.
|
|
55
|
+
|
|
56
|
+
${en("Status colors",h)}
|
|
57
|
+
|
|
58
|
+
## Chart palette
|
|
59
|
+
|
|
60
|
+
5-stop categorical palette derived from theme hues. Primary leads, then two hue-rotated variants, then neutral, then accent. Adjacent slots are guaranteed to be visually distinct.
|
|
61
|
+
|
|
62
|
+
| Slot | OKLCH | Hex |
|
|
63
|
+
|------|-------|-----|
|
|
64
|
+
${y.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
|
|
65
|
+
`)}
|
|
66
|
+
|
|
67
|
+
## Typography
|
|
68
|
+
|
|
69
|
+
- **Display font**: \`${a.fontDisplay}\`
|
|
70
|
+
- **Body font**: \`${a.fontSans}\`
|
|
71
|
+
- **Mono font**: \`${a.fontMono}\`
|
|
72
|
+
- **Heading weight**: \`${a.headingWeight}\`
|
|
73
|
+
- **Body weight**: \`${a.bodyWeight}\`
|
|
74
|
+
- **Heading letter-spacing**: \`${a.headingTracking}\`
|
|
75
|
+
|
|
76
|
+
### Type scale
|
|
77
|
+
|
|
78
|
+
| Step | Size |
|
|
79
|
+
|------|------|
|
|
80
|
+
| \`text-display\` | \`${a.scale.display}\` |
|
|
81
|
+
| \`text-h1\` | \`${a.scale.h1}\` |
|
|
82
|
+
| \`text-h2\` | \`${a.scale.h2}\` |
|
|
83
|
+
| \`text-h3\` | \`${a.scale.h3}\` |
|
|
84
|
+
| \`text-h4\` | \`${a.scale.h4}\` |
|
|
85
|
+
| \`text-h5\` | \`${a.scale.h5}\` |
|
|
86
|
+
| \`text-h6\` | \`${a.scale.h6}\` |
|
|
87
|
+
| body | \`${a.scale.body}\` |
|
|
88
|
+
| body-sm | \`${a.scale.bodySm}\` |
|
|
89
|
+
|
|
90
|
+
## Radius, spacing, effects
|
|
91
|
+
|
|
92
|
+
### Radius
|
|
93
|
+
|
|
94
|
+
| Step | Value |
|
|
95
|
+
|------|-------|
|
|
96
|
+
| \`--radius\` (base) | \`${d.base}\` |
|
|
97
|
+
| \`--rds-radius-sm\` | \`${d.sm}\` |
|
|
98
|
+
| \`--rds-radius-md\` | \`${d.md}\` |
|
|
99
|
+
| \`--rds-radius-lg\` | \`${d.lg}\` |
|
|
100
|
+
| \`--rds-radius-xl\` | \`${d.xl}\` |
|
|
101
|
+
| \`--rds-radius-2xl\` | \`${d["2xl"]}\` |
|
|
102
|
+
| \`--rds-radius-full\` | \`${d.full}\` |
|
|
103
|
+
|
|
104
|
+
### Spacing
|
|
105
|
+
|
|
106
|
+
- **Density factor**: \`${p.densityFactor}\` (applied as \`var(--rds-density)\` on components that opt in)
|
|
107
|
+
- **Base unit**: \`${p.baseUnit}\`
|
|
108
|
+
|
|
109
|
+
### Motion
|
|
110
|
+
|
|
111
|
+
| Var | Duration |
|
|
112
|
+
|-----|----------|
|
|
113
|
+
| \`--rds-transition-fast\` | \`${i.motion.fast}\` |
|
|
114
|
+
| \`--rds-transition-base\` | \`${i.motion.base}\` |
|
|
115
|
+
| \`--rds-transition-slow\` | \`${i.motion.slow}\` |
|
|
116
|
+
| \`--rds-transition-slower\` | \`${i.motion.slower}\` |
|
|
117
|
+
|
|
118
|
+
### Shadows
|
|
119
|
+
|
|
120
|
+
All shadows are applied via Tailwind's \`shadow-*\` utilities mapped to these var values.
|
|
121
|
+
|
|
122
|
+
| Var | Value |
|
|
123
|
+
|-----|-------|
|
|
124
|
+
| \`--rds-shadow-sm\` | \`${i.shadows.sm}\` |
|
|
125
|
+
| \`--rds-shadow-md\` | \`${i.shadows.md}\` |
|
|
126
|
+
| \`--rds-shadow-lg\` | \`${i.shadows.lg}\` |
|
|
127
|
+
| \`--rds-shadow-xl\` | \`${i.shadows.xl}\` |
|
|
128
|
+
|
|
129
|
+
## CSS variable conventions
|
|
130
|
+
|
|
131
|
+
Every color is stored as a bare \`L C H\` OKLCH triplet and wrapped at call time:
|
|
132
|
+
|
|
133
|
+
\`\`\`css
|
|
134
|
+
:root {
|
|
135
|
+
--primary: ${o.light.primary};
|
|
136
|
+
--background: ${o.light.background};
|
|
137
|
+
}
|
|
138
|
+
\`\`\`
|
|
139
|
+
|
|
140
|
+
Tailwind config wraps these with \`oklch(var(--x) / <alpha-value>)\` so Tailwind's opacity shortcuts work:
|
|
141
|
+
|
|
142
|
+
\`\`\`html
|
|
143
|
+
<div class="bg-primary text-primary-foreground">...</div>
|
|
144
|
+
<div class="bg-primary/50 hover:bg-primary/80">...</div>
|
|
145
|
+
<div class="text-muted-foreground border-border/40">...</div>
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
## Tailwind class cheat sheet
|
|
149
|
+
|
|
150
|
+
| Utility | Token |
|
|
151
|
+
|---------|-------|
|
|
152
|
+
| \`bg-background\`, \`text-foreground\` | page bg + primary text |
|
|
153
|
+
| \`bg-card\`, \`text-card-foreground\` | elevated surfaces |
|
|
154
|
+
| \`bg-popover\`, \`text-popover-foreground\` | floating menus |
|
|
155
|
+
| \`bg-primary\`, \`text-primary-foreground\` | primary action / brand |
|
|
156
|
+
| \`bg-secondary\`, \`text-secondary-foreground\` | secondary surface |
|
|
157
|
+
| \`bg-muted\`, \`text-muted-foreground\` | subtle surface + subtext |
|
|
158
|
+
| \`bg-accent\`, \`text-accent-foreground\` | highlight / hover |
|
|
159
|
+
| \`border-border\`, \`border-input\` | default + form borders |
|
|
160
|
+
| \`ring-ring\` | focus ring |
|
|
161
|
+
| \`bg-destructive\`, \`bg-success\`, \`bg-warning\`, \`bg-info\`, \`bg-highlight\` | status colors |
|
|
162
|
+
| \`bg-chart-1\` \u2026 \`bg-chart-5\` | chart series |
|
|
163
|
+
|
|
164
|
+
## Components the theme styles
|
|
165
|
+
|
|
166
|
+
Import from \`@gradeui/ui\` \u2014 all components read theme vars and re-skin automatically:
|
|
167
|
+
|
|
168
|
+
\`\`\`tsx
|
|
169
|
+
import {
|
|
170
|
+
Button, Input, Textarea, Label, Select, Checkbox, RadioGroup, Switch,
|
|
171
|
+
Slider, Toggle, Calendar, Card, Badge, Alert, Skeleton, Separator,
|
|
172
|
+
HoverCard, Popover, Dialog, Sheet, Tooltip, Progress, DropdownMenu,
|
|
173
|
+
Command, Tabs, SimpleTabs, Accordion, Collapsible, ScrollArea, Table,
|
|
174
|
+
Avatar, AIChat, Logo, SectionBlock, CardBlock, MediaBlock, FAQBlock,
|
|
175
|
+
} from "@gradeui/ui";
|
|
176
|
+
import "@gradeui/ui/styles.css";
|
|
177
|
+
\`\`\`
|
|
178
|
+
|
|
179
|
+
Every component accepts a \`className\` for layout tweaks. Variants are passed via a \`variant\` prop: \`<Button variant="outline">\`, \`<Alert variant="success">\`, \`<Badge variant="destructive-soft">\`.
|
|
180
|
+
|
|
181
|
+
## Feel and voice
|
|
182
|
+
|
|
183
|
+
When generating UI in the ${e.name} theme, match this character:
|
|
184
|
+
|
|
185
|
+
${vi(e)}
|
|
186
|
+
|
|
187
|
+
## Instructions for the generating LLM
|
|
188
|
+
|
|
189
|
+
1. **Use semantic tokens first**. Prefer \`bg-primary\`, \`text-foreground\`, \`border-border\` over raw ramp classes. Reach for \`bg-primary-500\` / \`bg-neutral-200\` only when you need a specific shade unavailable as a semantic token.
|
|
190
|
+
2. **Status colors are fixed**. Do not use \`success\` for a generic success-feeling visual \u2014 it's always green-ish. Use \`primary\` / \`accent\` for brand flavor; \`success\` / \`warning\` / \`destructive\` for actual state.
|
|
191
|
+
3. **Respect the shape presets**. If the theme's buttonShape is \`pill\`, don't add \`rounded-none\` to a Button. The component already matches the theme.
|
|
192
|
+
4. **Typography scales with the theme**. Heading utilities \`.text-h1\`\u2013\`.text-h6\` pick up the theme's display font automatically; body text inherits the body font. Only override with \`font-mono\` for code-like content.
|
|
193
|
+
5. **Charts get theme palette**. Use \`var(--chart-1)\` through \`var(--chart-5)\` for series colors. Don't hardcode hex in charts.
|
|
194
|
+
6. **Dark mode is one class**. Add \`dark\` to \`<html>\` (or toggle with the provider's \`setMode("dark")\`). All tokens have dark variants already \u2014 no \`dark:\` prefixes needed on most components.
|
|
195
|
+
7. **Layout freely**. The theme controls look-and-feel; composition is up to you. Use Tailwind for grids, spacing, flex layout exactly as normal.
|
|
196
|
+
|
|
197
|
+
## Quick regeneration
|
|
198
|
+
|
|
199
|
+
To recreate this theme in code:
|
|
200
|
+
|
|
201
|
+
\`\`\`ts
|
|
202
|
+
import { generateTheme, applyThemeToRoot, type ThemeInput } from "@gradeui/ui";
|
|
203
|
+
|
|
204
|
+
const input: ThemeInput = ${tn(e).replace(/\n/g,`
|
|
205
|
+
`)};
|
|
206
|
+
|
|
207
|
+
const theme = generateTheme(input);
|
|
208
|
+
applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
209
|
+
\`\`\`
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
*Generated from Grade Design System v1 \xB7 ${new Date().toISOString()}*
|
|
213
|
+
`}var yi={background:"Page / body background",foreground:"Primary text",card:"Elevated surface background",cardForeground:"Text on cards",popover:"Floating menu background",popoverForeground:"Text inside floating menus",primary:"Primary actions, links, default button",primaryForeground:"Text on primary-tinted fills",secondary:"Secondary surfaces + quiet buttons",secondaryForeground:"Text on secondary surfaces",muted:"Subtle surfaces (hover states, skeletons)",mutedForeground:"Secondary / less-important text",accent:"Highlights, hover accents",accentForeground:"Text on accent surfaces",border:"Default borders",input:"Form input borders",ring:"Focus ring color",destructive:"Destructive actions, errors",destructiveForeground:"Text on destructive surfaces",success:"Success states",warning:"Warning states",info:"Informational states",highlight:"Emphasis, new features, callouts"};function vi(e){let t=[],{input:r,components:o}=e;r.intensity==="muted"?t.push("- **Quiet and restrained.** Avoid heavy saturation, glowing effects, or loud contrast jumps. Let whitespace do the work."):r.intensity==="vibrant"?t.push("- **Loud and confident.** Primary color wants to lead. Use it on hero CTAs, key metrics, empty states. Don't be shy."):t.push("- **Balanced.** Neither shouty nor sleepy \u2014 a workhorse feel suited to product interfaces."),r.spacing.density==="roomy"?t.push("- **Generous spacing.** Stretch things out \u2014 reach for `gap-6`, `gap-8`, `p-6`, `p-8`. Airy is the vibe."):r.spacing.density==="tight"?t.push("- **Dense layouts.** Pack information in \u2014 `gap-2`, `gap-3`, `p-3`, `p-4`. Scan-friendly dashboard energy."):t.push("- **Standard density.** Use Tailwind's default spacing ladder."),r.radius.style==="pill"?t.push("- **Fully rounded.** Controls are pill-shaped. Use `rounded-full` on custom chips / pills too."):r.radius.style==="sharp"?t.push("- **Square corners.** Zero radius everywhere \u2014 very architectural. Do not add curves."):r.radius.style==="round"?t.push("- **Rounded and friendly.** Corner radius is noticeable (\u224814px base). Avoid sharp edges."):t.push("- **Standard rounded corners.**");let s=r.typography.display;return s==="fraunces"||s==="instrumentSerif"||s==="sourceSerif"?t.push("- **Editorial serif headings.** Treat headings like magazine titles \u2014 give them space and weight. Serifs reward larger sizes."):(s==="geist"||s==="inter")&&t.push("- **Modern technical sans.** Clean, functional, neutral. Good for product UIs."),o.cardStyle==="outlined"?t.push("- **Cards are outlined**, not shadowed. Rely on borders + spacing for hierarchy."):o.cardStyle==="elevated"?t.push("- **Cards have real elevation.** Use shadows to stack content visually."):o.cardStyle==="glass"&&t.push("- **Glass / frosted cards.** Use translucent surfaces over background imagery or gradients."),o.buttonShape==="pill"&&t.push("- **Buttons are pills** \u2014 don't override with square corners."),t.join(`
|
|
214
|
+
`)}function Sr(e){if(typeof window>"u"||typeof document>"u")return;let t=rn(e),r=new Blob([t],{type:"text/markdown;charset=utf-8"}),o=URL.createObjectURL(r),s=document.createElement("a");s.href=o,s.download=`ramp-theme-${e.input.id}.md`,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(o);}var Pe=Object.fromEntries(jt.map(e=>[e.id,_e(e)])),at=Tt.id;function $e(e){if(e in Pe)return Pe[e];let t=Mr(e);if(t)return _e(t)}function Cr(){return [...Object.values(Pe),...nn()]}var on="ramp-user-themes";function qt(){if(typeof localStorage>"u")return {};try{let e=localStorage.getItem(on);if(!e)return {};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function an(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(on,JSON.stringify(e));}catch{}}function nn(){return Object.values(qt()).map(_e)}function Mr(e){return qt()[e]}function Yt(e){let t=qt();return t[e.id]=e,an(t),_e(e)}function kr(e){if(e in Pe)return;let t=qt();delete t[e],an(t);}function bi(e,t,r){let o=Pe[e]?.input??Mr(e);if(!o)return;let s={...o,id:t,name:r};return Yt(s),s}var Nr="ramp-theme",Xt="ramp-mode",ln=["superLight","light","dark","superDark"],sn=new Set(["dark","superDark"]),xi=`
|
|
215
|
+
(function() {
|
|
216
|
+
try {
|
|
217
|
+
var mode = localStorage.getItem('${Xt}');
|
|
218
|
+
var valid = ['superLight','light','dark','superDark'];
|
|
219
|
+
if (!mode || valid.indexOf(mode) === -1) {
|
|
220
|
+
mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
221
|
+
}
|
|
222
|
+
if (mode === 'dark' || mode === 'superDark') {
|
|
223
|
+
document.documentElement.classList.add('dark');
|
|
224
|
+
}
|
|
225
|
+
document.documentElement.setAttribute('data-mode', mode);
|
|
226
|
+
var themeId = localStorage.getItem('${Nr}');
|
|
227
|
+
if (themeId) document.documentElement.setAttribute('data-ramp-theme', themeId);
|
|
228
|
+
} catch(e) {}
|
|
229
|
+
})();
|
|
230
|
+
`,Er=v.createContext(null);function Ri({children:e,defaultTheme:t=at,defaultMode:r="light"}){let[o,s]=v.useState(t),[a,d]=v.useState(r),[p,i]=v.useState(0);v.useEffect(()=>{try{let f=localStorage.getItem(Nr);f&&$e(f)&&s(f);let g=localStorage.getItem(Xt);if(g&&ln.includes(g))d(g);else if(typeof window<"u"){let R=window.matchMedia("(prefers-color-scheme: dark)").matches;d(R?"dark":"light");}}catch{}},[]),v.useEffect(()=>{let f=$e(o)??$e(at);f&&(Zt(f,a),typeof document<"u"&&document.documentElement.classList.toggle("dark",sn.has(a)));},[o,a,p]),v.useEffect(()=>{if(typeof window>"u")return;let f=window.matchMedia("(prefers-color-scheme: dark)"),g=R=>{try{if(localStorage.getItem(Xt))return}catch{return}d(R.matches?"dark":"light");};return f.addEventListener("change",g),()=>f.removeEventListener("change",g)},[]);let c=v.useCallback(f=>{s(f);try{localStorage.setItem(Nr,f);}catch{}},[]),l=v.useCallback(f=>{d(f);try{localStorage.setItem(Xt,f);}catch{}},[]),m=v.useCallback(f=>{Yt(f),i(g=>g+1),c(f.id);},[c]),u=v.useCallback(f=>{f in Pe||(kr(f),i(g=>g+1),s(g=>g===f?at:g));},[]),h=v.useCallback(()=>{i(f=>f+1);},[]),y=v.useMemo(()=>{let f=$e(o)??$e(at);return {theme:f,themeId:f.id,mode:a,isDark:sn.has(a),setThemeId:c,setMode:l,themes:Cr(),saveAndActivate:m,deleteTheme:u,refresh:h}},[o,a,p,c,l,m,u,h]);return v.createElement(Er.Provider,{value:y},e)}function Hr(){let e=v.useContext(Er);if(!e)throw new Error("useGradeTheme must be used inside <GradeThemeProvider>. Wrap your app (typically in app/layout.tsx).");return e}function Ke(){return v.useContext(Er)}var Lr=v.createContext(null);function dn(){return v.useContext(Lr)}var Li={maplibre:()=>Promise.resolve().then(()=>(gn(),fn)).then(e=>e.createMaplibreAdapter),mapbox:()=>Promise.resolve().then(()=>(bn(),vn)).then(e=>e.createMapboxAdapter),google:()=>Promise.resolve().then(()=>(Tn(),Rn)).then(e=>e.createGoogleAdapter)},Di=500,Dr=v.forwardRef(function(t,r){let{center:o,zoom:s,bounds:a,appearance:d="auto",interactive:p=true,hoveredId:i,onHoveredIdChange:c,onLoad:l,onError:m,className:u,style:h,children:y,...f}=t,g=f.provider??"maplibre",R=f.styleUrl,w=f.tilerKey,k=f.accessToken,S=f.apiKey,_=f.mapId,j=v.useRef(null),O=v.useRef(null),se=v.useRef(new globalThis.Map),Se=v.useRef(null),[Nt,We]=v.useState(false),Et=v.useRef(c),H=v.useRef(m),Be=v.useRef(l);v.useEffect(()=>{Et.current=c,H.current=m,Be.current=l;});let je=Ke()?.isDark??false,A=d==="auto"?je?"dark":"light":d;v.useEffect(()=>{let L=false,Ze=j.current;if(!Ze)return;let Ne=d==="auto"?je?"dark":"light":d;return (async()=>{try{let ge=await Li[g]();if(L)return;let pe=await ge(Ze,{center:o,zoom:s,bounds:a,appearance:Ne,interactive:p,styleUrl:R,tilerKey:w,accessToken:k,apiKey:S,mapId:_},{onLoad:()=>{},onError:he=>H.current?.(he),onMarkerHover:he=>Et.current?.(he),onMarkerClick:()=>{}});if(L){pe.destroy();return}O.current=pe,We(!0),Be.current?.(Pn(O,se));}catch(ge){if(L)return;ge?.code||H.current?.({code:"provider-init-failed",message:ge?.message??"Map init failed",cause:ge});}})(),()=>{L=true,O.current?.destroy(),O.current=null,We(false),se.current.clear(),Se.current=null;}},[g,R,k,S,_,w]),v.useEffect(()=>{O.current?.setAppearance(A);},[A]),v.useEffect(()=>{O.current?.setInteractive(p);},[p]),v.useEffect(()=>{O.current&&(a?O.current.setBounds(a[0],a[1]):(O.current.setCenter(o),O.current.setZoom(s)));},[o[0],o[1],s,a?.[0]?.[0],a?.[0]?.[1],a?.[1]?.[0],a?.[1]?.[1]]),v.useEffect(()=>{let L=Se.current;L&&L!==i&&se.current.get(L)?.setHovered(false),i&&se.current.get(i)?.setHovered(true),Se.current=i??null;},[i]),v.useImperativeHandle(r,()=>Pn(O,se),[]);let nr=v.useMemo(()=>({registerMarker:(L,Ze,Ne)=>{let ge=O.current;if(!ge)return null;let pe=ge.addMarker(L,Ze,Ne);se.current.set(L,pe),process.env.NODE_ENV!=="production"&&se.current.size===Di+1&&console.warn(`@gradeui/ui Map: rendering ${se.current.size} markers. DOM markers degrade past ~1k. Consider clustering via the .instance escape hatch.`);let he=pe.remove;return pe.remove=()=>{he(),se.current.delete(L),Se.current===L&&(Se.current=null);},i===L&&pe.setHovered(true),pe}}),[Nt]);return v.createElement("div",{ref:j,"data-gds-part":"map",className:n("rds-map relative isolate overflow-hidden",u),style:{borderRadius:"var(--rds-map-radius, var(--radius, 0.5rem))",border:"var(--rds-map-border, 1px solid var(--border, transparent))",...h}},v.createElement(Lr.Provider,{value:nr},y))});Dr.displayName="Map";function Pn(e,t){let r=()=>{};return {flyTo:(o,s)=>{let a=e.current;if(!a)return;let d;if(typeof o=="string"){if(d=t.current.get(o)?.coords??null,!d){console.warn(`@gradeui/ui Map.flyTo: no marker registered with id "${o}".`);return}}else d=o;a.flyTo(d,s);},panTo:(o,s)=>e.current?.panTo(o,s)??r(),fitBounds:(o,s)=>e.current?.fitBounds(o,s)??r(),getCenter:()=>e.current?.getCenter()??[0,0],getZoom:()=>e.current?.getZoom()??0,getBounds:()=>e.current?.getBounds()??[[0,0],[0,0]],get instance(){return e.current?.instance??null}}}var Ar=v.memo(function({id:t,at:r,anchor:o="bottom",className:s,children:a,onClick:d}){let p=dn(),[i,c]=v.useState(null),l=v.useRef(null),m=v.useRef(d);return v.useEffect(()=>{m.current=d;}),v.useEffect(()=>{if(!p)return;let u=p.registerMarker(t,r,o);if(u){l.current=u,c(u.element);let h=y=>{m.current?.({id:t,coords:u.coords,native:y});};return u.element.addEventListener("click",h),()=>{u.element.removeEventListener("click",h),u.remove(),l.current=null,c(null);}}},[p,t]),v.useEffect(()=>{l.current?.setPosition(r);},[r[0],r[1]]),i?createPortal(v.createElement("div",{"data-gds-part":"map-marker-content",className:n("pointer-events-auto",s)},a),i):null});Ar.displayName="MapMarker";var Fi={video:"aspect-video",square:"aspect-square",portrait:"aspect-[3/4]",wide:"aspect-[21/9]",auto:""},Gi={none:"0",sm:"var(--radius, 0.25rem)",md:"calc(var(--radius, 0.375rem) * 1.25)",lg:"calc(var(--radius, 0.5rem) * 1.5)",xl:"calc(var(--radius, 0.75rem) * 2)"},we=v.forwardRef(({className:e,aspect:t="video",radius:r="lg",border:o=false,loading:s=false,onVisibilityChange:a,fallback:d,emptyState:p="icon",style:i,children:c,...l},m)=>{let u=v.useRef(null);return v.useImperativeHandle(m,()=>u.current),v.useEffect(()=>{if(!a||!u.current)return;let h=u.current,y=new IntersectionObserver(([f])=>a(f.isIntersecting),{threshold:.05});return y.observe(h),()=>y.disconnect()},[a]),v.createElement("div",{ref:u,"data-gds-part":"media-surface",className:n("rds-media-surface relative w-full overflow-hidden bg-muted",Fi[t],o&&"border border-border",e),style:{borderRadius:`var(--rds-media-radius, ${Gi[r]})`,...i},...l},c,s&&v.createElement("div",{className:"absolute inset-0 flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},d),!c&&!s&&p!=="none"&&v.createElement("div",{"data-gds-part":"media-surface-placeholder",className:"absolute inset-0 flex items-center justify-center pointer-events-none",style:{background:"var(--rds-media-placeholder-bg)",color:"var(--rds-media-placeholder-fg)"},"aria-hidden":true},p==="icon"?v.createElement(ImageIcon,{className:"h-1/3 w-1/3 max-h-10 max-w-10"}):p))});we.displayName="MediaSurface";function Ue(){let[e,t]=v.useState(false);return v.useEffect(()=>{let r=window.matchMedia("(prefers-reduced-motion: reduce)");t(r.matches);let o=s=>t(s.matches);return r.addEventListener("change",o),()=>r.removeEventListener("change",o)},[]),e}var wn=v.forwardRef(({src:e,controls:t=true,autoPlay:r=false,loop:o=false,muted:s,pauseOffscreen:a=true,aspect:d="video",radius:p="lg",border:i=false,poster:c,label:l,className:m,style:u,playbackRate:h=1,objectFit:y="cover"},f)=>{let g=v.useRef(null),R=Ue(),[w,k]=v.useState(!!c);v.useImperativeHandle(f,()=>g.current);let S=s??r,_=r&&!R;v.useEffect(()=>{g.current&&(g.current.playbackRate=h);},[h]),v.useEffect(()=>{k(!!c);},[c]);let j=v.useCallback(O=>{!a||!g.current||(O&&_?g.current.play().catch(()=>{}):g.current.pause());},[a,_]);return v.createElement(we,{aspect:d,radius:p,border:i,"aria-label":l,className:m,style:u,onVisibilityChange:a?j:void 0},v.createElement("video",{ref:g,src:e,controls:t,autoPlay:_,loop:o,muted:S,playsInline:true,preload:_?"auto":"metadata",onPlaying:()=>k(false),className:n("w-full h-full",y==="cover"&&"object-cover",y==="contain"&&"object-contain",y==="fill"&&"object-fill")},"Your browser does not support the video tag."),c&&w&&v.createElement("img",{src:c,alt:"","aria-hidden":"true",loading:"lazy",decoding:"async","data-gds-part":"video-poster",className:n("absolute inset-0 w-full h-full pointer-events-none transition-opacity duration-200",y==="cover"&&"object-cover",y==="contain"&&"object-contain",y==="fill"&&"object-fill")}))});wn.displayName="VideoPlayer";var Sn=v.forwardRef(({src:e,controls:t=false,autoPlay:r=true,loop:o=true,pauseOffscreen:s=true,aspect:a="square",radius:d="lg",border:p=false,poster:i,label:c,className:l,style:m,stateMachines:u,artboard:h,fit:y="contain",stateMachineInputs:f},g)=>{let R=Ue(),[w,k]=v.useState(null),[S,_]=v.useState(null);return v.useEffect(()=>{let j=false;return import('@rive-app/react-canvas').then(O=>{j||k(O);}).catch(()=>{j||_("Rive runtime not installed. Run `npm install @rive-app/react-canvas`.");}),()=>{j=true;}},[]),v.createElement(we,{ref:g,aspect:a,radius:d,border:p,"aria-label":c,className:l,style:m},S?v.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},S):w&&e?v.createElement(Vi,{Mod:w,src:e,stateMachines:u,artboard:h,fit:y,stateMachineInputs:f,autoPlay:r&&!R,loop:o,pauseOffscreen:s,controls:t,poster:i}):i&&v.createElement("img",{src:i,alt:"",className:"w-full h-full object-contain"}))});Sn.displayName="RivePlayer";function Vi({Mod:e,src:t,stateMachines:r,artboard:o,fit:s,autoPlay:a,loop:d,pauseOffscreen:p,controls:i,poster:c}){let{useRive:l,Layout:m,Fit:u,Alignment:h,EventType:y}=e,f={contain:u.Contain,cover:u.Cover,fill:u.Fill,fitWidth:u.FitWidth,fitHeight:u.FitHeight,none:u.None},{rive:g,RiveComponent:R}=l({src:t,stateMachines:r,artboard:o,autoplay:a,layout:new m({fit:f[s],alignment:h.Center})}),[w,k]=v.useState(a);v.useEffect(()=>{if(!g||!d)return;let _=()=>{g.play();};return g.on(y.Stop,_),()=>{g.off(y.Stop,_);}},[g,d,y]),v.useEffect(()=>{if(!p||!g)return;let _=g.canvas;if(!_)return;let j=new IntersectionObserver(([O])=>{O.isIntersecting&&a?g.play():g.pause();},{threshold:.05});return j.observe(_),()=>j.disconnect()},[g,p,a]);let S=()=>{g&&(w?(g.pause(),k(false)):(g.play(),k(true)));};return v.createElement(v.Fragment,null,v.createElement(R,{className:"w-full h-full"}),!g&&c&&v.createElement("img",{src:c,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),i&&v.createElement("div",{className:n("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/40 to-transparent")},v.createElement(re,{size:"icon",variant:"secondary",onClick:S},w?v.createElement(Pause,{className:"h-4 w-4"}):v.createElement(Play,{className:"h-4 w-4"}))))}var Mn=({renderer:e,scene:t,camera:r,preset:o,width:s,height:a})=>{let d=new EffectComposer(e);d.setSize(s,a),d.addPass(new RenderPass(t,r));let p=new BloomEffect({intensity:0,luminanceThreshold:.6,radius:.6,kernelSize:KernelSize.MEDIUM}),i=new NoiseEffect({blendFunction:BlendFunction.OVERLAY});i.blendMode.opacity.value=0;let c=new ScanlineEffect({blendFunction:BlendFunction.OVERLAY,density:1.25});c.blendMode.opacity.value=0;let l=new VignetteEffect({darkness:0,offset:.5}),m=new ChromaticAberrationEffect({offset:new G.Vector2(0,0),radialModulation:false,modulationOffset:.15}),u=new GlitchEffect({chromaticAberrationOffset:new G.Vector2(0,0),columns:.05});u.minStrength=0,u.maxStrength=0,d.addPass(new EffectPass(r,p)),d.addPass(new EffectPass(r,i,c,l)),d.addPass(new EffectPass(r,m)),d.addPass(new EffectPass(r,u));function h(y){let f=y.effects;p.intensity=f.bloom?.intensity??0,p.luminanceMaterial&&f.bloom?.luminanceThreshold!==void 0&&(p.luminanceMaterial.threshold=f.bloom.luminanceThreshold),i.blendMode.opacity.value=f.noise?.intensity??0,c.density=f.scanlines?.density??1.25,c.blendMode.opacity.value=f.scanlines?.opacity??0,l.darkness=f.vignette?.darkness??0,l.offset=f.vignette?.offset??.5;let g=f.chromatic?.offset??0;m.offset?.set(g,g),f.glitch?(u.minStrength=f.glitch.strength?.[0]??0,u.maxStrength=f.glitch.strength?.[1]??0):(u.minStrength=0,u.maxStrength=0);}return h(o),{composer:d,setPreset:h,resize:(y,f)=>d.setSize(y,f),dispose:()=>{d.dispose();}}};var nt=3e3,Fr=400,Yi=80,kn=({width:e,height:t,palette:r})=>{let o=new G.Scene;o.background=new G.Color(r.background);let s=new G.PerspectiveCamera(70,e/t,.1,Fr*2);s.position.z=0;let a=new Float32Array(nt*6),d=new Float32Array(nt*6),p=new Float32Array(nt),i=new G.Color(r.primary),c=new G.Color(r.accent);function l(g,R){let w=Math.random()*Math.PI*2,k=Yi*Math.pow(Math.random(),.6),S=Math.cos(w)*k,_=Math.sin(w)*k,j=R?-Math.random()*Fr:-Fr;p[g]=j,a[g*6+0]=S,a[g*6+1]=_,a[g*6+2]=j,a[g*6+3]=S,a[g*6+4]=_,a[g*6+5]=j-2,d[g*6+0]=i.r,d[g*6+1]=i.g,d[g*6+2]=i.b,d[g*6+3]=c.r,d[g*6+4]=c.g,d[g*6+5]=c.b;}for(let g=0;g<nt;g++)l(g,true);let m=new G.BufferGeometry;m.setAttribute("position",new G.BufferAttribute(a,3)),m.setAttribute("color",new G.BufferAttribute(d,3));let u=new G.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:G.AdditiveBlending}),h=new G.LineSegments(m,u);o.add(h);let y=60,f=6;return {scene:o,camera:s,update:(g,R)=>{let w=m.attributes.position.array;for(let k=0;k<nt;k++){let S=k*6;w[S+2]+=y*R,w[S+5]=w[S+2]-f,w[S+2]>5&&l(k,false);}m.attributes.position.needsUpdate=true;},resize:(g,R)=>{let w=s;w.aspect=g/R,w.updateProjectionMatrix();},setPalette:g=>{o.background=new G.Color(g.background);let R=new G.Color(g.primary),w=new G.Color(g.accent),k=m.attributes.color.array;for(let S=0;S<nt;S++)k[S*6+0]=R.r,k[S*6+1]=R.g,k[S*6+2]=R.b,k[S*6+3]=w.r,k[S*6+4]=w.g,k[S*6+5]=w.b;m.attributes.color.needsUpdate=true;},dispose:()=>{m.dispose(),u.dispose();}}};var Xi=`
|
|
2
231
|
precision highp float;
|
|
3
232
|
varying vec2 vUv;
|
|
4
233
|
uniform float uTime;
|
|
@@ -36,19 +265,19 @@ import*as y from'react';import {useRef,useEffect}from'react';import*as ae from'@
|
|
|
36
265
|
|
|
37
266
|
gl_FragColor = vec4(col, 1.0);
|
|
38
267
|
}
|
|
39
|
-
`,
|
|
268
|
+
`,Ji=`
|
|
40
269
|
varying vec2 vUv;
|
|
41
270
|
void main() {
|
|
42
271
|
vUv = uv;
|
|
43
272
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
44
273
|
}
|
|
45
|
-
`,
|
|
274
|
+
`,Nn=({width:e,height:t,palette:r})=>{let o=new G.Scene,s=new G.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new G.Vector2(e,t)},uBackground:{value:new G.Color(r.background)},uPrimary:{value:new G.Color(r.primary)},uSecondary:{value:new G.Color(r.secondary)},uAccent:{value:new G.Color(r.accent)}},d=new G.ShaderMaterial({uniforms:a,vertexShader:Ji,fragmentShader:Xi,depthTest:false,depthWrite:false}),p=new G.PlaneGeometry(2,2),i=new G.Mesh(p,d);return o.add(i),{scene:o,camera:s,update:l=>{a.uTime.value=l;},resize:(l,m)=>{a.uResolution.value.set(l,m);},setPalette:l=>{a.uBackground.value.set(l.background),a.uPrimary.value.set(l.primary),a.uSecondary.value.set(l.secondary),a.uAccent.value.set(l.accent);},dispose:()=>{p.dispose(),d.dispose();}}};var Qi=`
|
|
46
275
|
varying vec2 vUv;
|
|
47
276
|
void main() {
|
|
48
277
|
vUv = uv;
|
|
49
278
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
50
279
|
}
|
|
51
|
-
`,
|
|
280
|
+
`,el=`
|
|
52
281
|
precision highp float;
|
|
53
282
|
varying vec2 vUv;
|
|
54
283
|
uniform float uTime;
|
|
@@ -105,13 +334,13 @@ import*as y from'react';import {useRef,useEffect}from'react';import*as ae from'@
|
|
|
105
334
|
|
|
106
335
|
gl_FragColor = vec4(col, 1.0);
|
|
107
336
|
}
|
|
108
|
-
`,
|
|
337
|
+
`,En=({width:e,height:t,palette:r})=>{let o=new G.Scene,s=new G.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new G.Vector2(e,t)},uBackground:{value:new G.Color(r.background)},uPrimary:{value:new G.Color(r.primary)},uSecondary:{value:new G.Color(r.secondary)},uAccent:{value:new G.Color(r.accent)}},d=new G.ShaderMaterial({uniforms:a,vertexShader:Qi,fragmentShader:el,depthTest:false,depthWrite:false}),p=new G.PlaneGeometry(2,2),i=new G.Mesh(p,d);return o.add(i),{scene:o,camera:s,update:l=>{a.uTime.value=l;},resize:(l,m)=>{a.uResolution.value.set(l,m);},setPalette:l=>{a.uBackground.value.set(l.background),a.uPrimary.value.set(l.primary),a.uSecondary.value.set(l.secondary),a.uAccent.value.set(l.accent);},dispose:()=>{p.dispose(),d.dispose();}}};var tl=`
|
|
109
338
|
varying vec2 vUv;
|
|
110
339
|
void main() {
|
|
111
340
|
vUv = uv;
|
|
112
341
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
113
342
|
}
|
|
114
|
-
`,
|
|
343
|
+
`,rl=`
|
|
115
344
|
precision highp float;
|
|
116
345
|
varying vec2 vUv;
|
|
117
346
|
uniform float uTime;
|
|
@@ -181,7 +410,7 @@ import*as y from'react';import {useRef,useEffect}from'react';import*as ae from'@
|
|
|
181
410
|
|
|
182
411
|
gl_FragColor = vec4(col, 1.0);
|
|
183
412
|
}
|
|
184
|
-
`,
|
|
413
|
+
`,Hn=({palette:e})=>{let t=new G.Scene,r=new G.OrthographicCamera(-1,1,1,-1,0,1),o={uTime:{value:0},uBackground:{value:new G.Color(e.background)},uPrimary:{value:new G.Color(e.primary)},uSecondary:{value:new G.Color(e.secondary)},uAccent:{value:new G.Color(e.accent)}},s=new G.ShaderMaterial({uniforms:o,vertexShader:tl,fragmentShader:rl,depthTest:false,depthWrite:false}),a=new G.PlaneGeometry(2,2),d=new G.Mesh(a,s);return t.add(d),{scene:t,camera:r,update:i=>{o.uTime.value=i;},setPalette:i=>{o.uBackground.value.set(i.background),o.uPrimary.value.set(i.primary),o.uSecondary.value.set(i.secondary),o.uAccent.value.set(i.accent);},dispose:()=>{a.dispose(),s.dispose();}}};var wt={space:kn,plasma:Nn,voronoi:En,synthwave:Hn},St=[{id:"space",label:"Hyperspace",description:"Classic 'jump to hyperspace' \u2014 streaking stars flying past camera. Pairs well with VHS or Cinematic post-FX.",tags:["space","retro","motion","hero","background"],scene:"space",defaultPostPreset:"vhs"},{id:"plasma",label:"Plasma",description:"Soft rolling colour clouds \u2014 overlapping sines warping a palette ramp. Classic demoscene vibe. Pairs well with Synthwave or Cinematic.",tags:["abstract","soft","ambient","hero","background","gradient"],scene:"plasma",defaultPostPreset:"synthwave"},{id:"voronoi",label:"Voronoi",description:"Jittered cellular grid \u2014 orbiting seed points form animated cells with glowing edges. Great for data / organic / network moods. Pairs well with CRT or VHS.",tags:["abstract","cells","organic","network","hero","background"],scene:"voronoi",defaultPostPreset:"crt"},{id:"synthwave",label:"Synthwave Grid",description:"Retro-future perspective grid receding to a banded sun disc on the horizon. Pairs beautifully with the Synthwave post preset (its namesake).",tags:["retro","synthwave","80s","hero","background","grid","sun"],scene:"synthwave",defaultPostPreset:"synthwave"}],Ct=Object.fromEntries(St.map(e=>[e.id,e]));var Mt={none:{id:"none",label:"Clean",effects:{}},vhs:{id:"vhs",label:"VHS",effects:{bloom:{intensity:.35,luminanceThreshold:.5,radius:.7},noise:{intensity:.04},scanlines:{density:1.5,opacity:.12},vignette:{darkness:.4,offset:.45},chromatic:{offset:.0015}}},cinematic:{id:"cinematic",label:"Cinematic",effects:{bloom:{intensity:.5,luminanceThreshold:.55,radius:.8},vignette:{darkness:.5,offset:.5}}},synthwave:{id:"synthwave",label:"Synthwave",effects:{bloom:{intensity:.8,luminanceThreshold:.3,radius:.9},chromatic:{offset:.002},vignette:{darkness:.3,offset:.55}}},crt:{id:"crt",label:"CRT",effects:{bloom:{intensity:.2,luminanceThreshold:.7,radius:.4},scanlines:{density:2,opacity:.25},vignette:{darkness:.6,offset:.4},chromatic:{offset:.0025}}}},tr="vhs";var Ln=`
|
|
185
414
|
precision highp float;
|
|
186
415
|
varying vec2 vUv;
|
|
187
416
|
uniform float uTime;
|
|
@@ -191,242 +420,13 @@ import*as y from'react';import {useRef,useEffect}from'react';import*as ae from'@
|
|
|
191
420
|
uniform vec3 uSecondary;
|
|
192
421
|
uniform vec3 uAccent;
|
|
193
422
|
uniform vec3 uBackground;
|
|
194
|
-
`,
|
|
423
|
+
`,ol=`
|
|
195
424
|
varying vec2 vUv;
|
|
196
425
|
void main() {
|
|
197
426
|
vUv = uv;
|
|
198
427
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
199
428
|
}
|
|
200
|
-
|
|
201
|
-
${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=r;}};function
|
|
202
|
-
${e}`;bi(t,i);let d=new I.Scene,l=new I.OrthographicCamera(-1,1,1,-1,0,1),s={uTime:{value:0},uResolution:{value:new I.Vector2(r,o)},uMouse:{value:new I.Vector2(.5,.5)},uPrimary:{value:new I.Color(n.primary)},uSecondary:{value:new I.Color(n.secondary)},uAccent:{value:new I.Color(n.accent)},uBackground:{value:new I.Color(n.background)}},p=new I.ShaderMaterial({uniforms:s,vertexShader:vi,fragmentShader:i,depthTest:false,depthWrite:false}),c=new I.PlaneGeometry(2,2),m=new I.Mesh(c,p);return d.add(m),{scene:d,camera:l,update:h=>{s.uTime.value=h;},resize:(h,T)=>{s.uResolution.value.set(h,T);},setPalette:h=>{s.uPrimary.value.set(h.primary),s.uSecondary.value.set(h.secondary),s.uAccent.value.set(h.accent),s.uBackground.value.set(h.background);},setMouse:(h,T)=>{s.uMouse.value.set(h,T);},dispose:()=>{c.dispose(),p.dispose();}}}}var rt={primary:"#ff5fb9",secondary:"#9fe8ff",accent:"#ffc857",background:"#0a0a14"},Ti=/^[\d.]+\s+[\d.]+\s+[\d.]+(?:\s*\/\s*[\d.%]+)?$/,wi=/^[\d.]+\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.%]+)?$/,Pi=/^\s*var\(\s*(--[^,)\s]+)(?:\s*,[^)]*)?\s*\)\s*$/;function Ct(e,t,r){if(typeof document>"u")return r;let o=e,n=Pi.exec(e);if(n){let l=getComputedStyle(t).getPropertyValue(n[1]).trim();l&&(Ti.test(l)?o=`oklch(${l})`:wi.test(l)&&(o=`hsl(${l})`));}let i=document.createElement("span");if(i.style.color="",i.style.color=o,i.style.color==="")return r;i.style.display="none",t.appendChild(i);let d=getComputedStyle(i).color;if(t.removeChild(i),!d)return r;if(d.startsWith("rgb"))return d;try{let l=document.createElement("canvas");l.width=1,l.height=1;let s=l.getContext("2d");if(!s)return d;s.clearRect(0,0,1,1),s.fillStyle=d,s.fillRect(0,0,1,1);let[p,c,m]=s.getImageData(0,0,1,1).data;return `rgb(${p}, ${c}, ${m})`}catch{return d}}function Pa(e,t){return {primary:Ct(e.primary,t,rt.primary),secondary:Ct(e.secondary,t,rt.secondary),accent:Ct(e.accent,t,rt.accent),background:Ct(e.background,t,rt.background)}}var Nt=y.forwardRef(({preset:e,fragmentShader:t,onShaderError:r,postPreset:o,palette:n,createScene:i,controls:d=false,autoPlay:l=true,pauseOffscreen:s=true,aspect:p="video",radius:c="lg",border:m=false,poster:g,label:h,className:T,style:f,maxDpr:u},w)=>{let N=y.useRef(null),[E,M]=y.useState(l),[_,J]=y.useState(false),ve=Le(),Ft=y.useMemo(()=>({...rt,...n}),[n]),Ot=y.useMemo(()=>i||(t?or(t):e&&Je[e]?Je[e]:null),[i,t,e]),hr=y.useMemo(()=>{if(o)return o;if(e){let A=et[e];if(A?.defaultPostPreset)return A.defaultPostPreset}return St},[o,e]);y.useEffect(()=>{let A=N.current;if(!A||!Ot)return;let dt=A.clientWidth||1,lt=A.clientHeight||1,$t=Pa(Ft,A),$=new I.WebGLRenderer({antialias:true,alpha:false,powerPreference:"high-performance"}),Ga=u??Math.min(window.devicePixelRatio||1,2);$.setPixelRatio(Ga),$.setSize(dt,lt),$.setClearColor(new I.Color($t.background),1),$.domElement.dataset.gdsPart="shader-canvas",$.domElement.style.width="100%",$.domElement.style.height="100%",$.domElement.style.display="block",A.appendChild($.domElement);let pe;try{pe=Ot({renderer:$,width:dt,height:lt,palette:$t});}catch(D){if(D instanceof $e)r?.(D),pe=Je.space({renderer:$,width:dt,height:lt,palette:$t});else throw $.dispose(),$.domElement.parentElement===A&&A.removeChild($.domElement),D}let $a=tt[hr]??tt[St],ct=va({renderer:$,scene:pe.scene,camera:pe.camera,preset:$a,width:dt,height:lt}),yr=new I.Clock,vr=0,Ue=l&&!ve,br=true,xr=()=>{if(vr=requestAnimationFrame(xr),!Ue||s&&!br)return;let D=yr.getDelta(),te=yr.getElapsedTime();pe.update?.(te,D),ct.composer.render(D);};xr(),Ue&&J(true);let Rr=new ResizeObserver(([D])=>{let te=Math.max(1,Math.floor(D.contentRect.width)),_e=Math.max(1,Math.floor(D.contentRect.height));$.setSize(te,_e),ct.resize(te,_e),pe.resize?.(te,_e);});Rr.observe(A);let Tr=new IntersectionObserver(([D])=>{br=D.isIntersecting;},{threshold:.05});Tr.observe(A);let wr=new MutationObserver(()=>{if(!N.current)return;let D=Pa(Ft,N.current);$.setClearColor(new I.Color(D.background),1),pe.setPalette?.(D);});wr.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-theme","data-gds-theme","data-grade-mode"]});let Pr=pe,pt=Pr.setMouse?D=>{let te=A.getBoundingClientRect(),_e=(D.clientX-te.left)/te.width,Va=1-(D.clientY-te.top)/te.height;Pr.setMouse(_e,Va);}:null;return pt&&A.addEventListener("pointermove",pt),Gt.current={toggle:()=>{Ue=!Ue,M(Ue);},setPalette:D=>{$.setClearColor(new I.Color(D.background),1),pe.setPalette?.(D);},setPostPreset:D=>{let te=tt[D];te&&ct.setPreset(te);}},()=>{cancelAnimationFrame(vr),Rr.disconnect(),Tr.disconnect(),wr.disconnect(),pt&&A.removeEventListener("pointermove",pt),ct.dispose(),pe.dispose?.(),$.dispose(),$.domElement.parentElement===A&&A.removeChild($.domElement),Gt.current=null;}},[Ot,hr,Ft,l,ve,s,u,r]);let Gt=y.useRef(null),Oa=()=>Gt.current?.toggle();return y.createElement(ue,{ref:A=>{N.current=A,typeof w=="function"?w(A):w&&(w.current=A);},aspect:p,radius:c,border:m,"aria-label":h,className:T,style:f,"data-gds-part":"three-scene"},!_&&g&&y.createElement("img",{src:g,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),d&&y.createElement("div",{"data-gds-part":"scene-controls",className:a("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/30 to-transparent")},y.createElement(X,{size:"icon",variant:"secondary",onClick:Oa},E?y.createElement(Pause,{className:"h-4 w-4"}):y.createElement(Play,{className:"h-4 w-4"}))))});Nt.displayName="ThreeScene";var kt=y.forwardRef(({preset:e,live:t="hover",postPreset:r,palette:o,className:n,aspect:i="video",radius:d="lg",label:l,hideLabel:s=false,onClick:p},c)=>{let m=et[e],[g,h]=y.useState(false),T=t==="always"||t==="hover"&&g;return y.createElement("div",{ref:c,"data-gds-part":"picker-card","data-gds-preset":e,onMouseEnter:()=>h(true),onMouseLeave:()=>h(false),onClick:p,className:a("group cursor-pointer flex flex-col gap-2",n)},T?y.createElement(Nt,{preset:e,postPreset:r,palette:o,aspect:i,radius:d,autoPlay:true,controls:false,pauseOffscreen:true,poster:m?.poster,maxDpr:1}):y.createElement(ue,{aspect:i,radius:d,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},m?.poster?y.createElement("img",{src:m.poster,alt:m.label,className:"w-full h-full object-cover"}):y.createElement("div",{className:"absolute inset-0 flex items-center justify-center text-xs text-muted-foreground"},m?.label??e)),!s&&y.createElement("div",{className:"flex items-baseline justify-between text-xs"},y.createElement("span",{className:"font-medium text-foreground","data-gds-part":"preset-label"},l??m?.label??e),m?.tags?.[0]&&y.createElement("span",{className:"text-muted-foreground"},m.tags[0])))});kt.displayName="ShaderPresetPreview";function Ci({value:e,onChange:t,filterTags:r,live:o="hover",postPreset:n,palette:i,columns:d=3,className:l}){let s=y.useMemo(()=>r?.length?Qe.filter(c=>r.some(m=>c.tags.includes(m))):Qe,[r]);return y.createElement("div",{"data-gds-part":"preset-grid",role:"radiogroup",className:a("grid grid-cols-2 gap-3",d===2?"md:grid-cols-2":d===4?"md:grid-cols-4":"md:grid-cols-3",l)},s.map(c=>{let m=e===c.id;return y.createElement("div",{key:c.id,className:"relative",role:"radio","aria-checked":m},y.createElement(kt,{preset:c.id,postPreset:n,palette:i,live:o,onClick:()=>t?.(c.id),className:a("transition-all",m&&"ring-2 ring-primary ring-offset-2 ring-offset-background rounded-lg")}),m&&y.createElement("div",{"data-gds-part":"picker-selected-badge",className:"absolute top-2 right-2 rounded-full bg-primary text-primary-foreground p-1 shadow-sm"},y.createElement(Check,{className:"h-3.5 w-3.5"})))}))}function Ei({children:e}){let t=useRef(null);return useEffect(()=>{let r=new Mi({duration:1.2,easing:n=>Math.min(1,1.001-Math.pow(2,-10*n)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:true});t.current=r;function o(n){r.raf(n),requestAnimationFrame(o);}return requestAnimationFrame(o),()=>{r.destroy(),t.current=null;}},[]),React.createElement(React.Fragment,null,e)}var Ne=[50,100,200,300,400,500,600,700,800,900,950],Sa=[.985,.955,.895,.82,.72,.61,.51,.415,.325,.245,.17],Hi=[.015,.04,.075,.11,.14,.17,.17,.15,.12,.08,.04];function Mt({hue:e,chromaScale:t=1}){let r=(e%360+360)%360,o={};for(let n=0;n<Ne.length;n++){let i=Sa[n],d=Hi[n]*t;o[Ne[n]]=`${i.toFixed(4)} ${d.toFixed(4)} ${r.toFixed(2)}`;}return o}function Ca(){let e={};for(let t=0;t<Ne.length;t++){let r=Sa[t];e[Ne[t]]=`${r.toFixed(4)} 0 0`;}return e}var ar={light:{destructive:"0.560 0.220 27.0",destructiveFg:"0.990 0.005 27.0",success:"0.610 0.180 145.0",warning:"0.720 0.180 60.0",info:"0.580 0.200 240.0",highlight:"0.860 0.180 95.0"},dark:{destructive:"0.680 0.220 27.0",destructiveFg:"0.990 0.005 27.0",success:"0.720 0.180 145.0",warning:"0.800 0.180 60.0",info:"0.700 0.200 240.0",highlight:"0.880 0.180 95.0"}},ot="1 0 0",Na="0 0 0";function Ve(e,t){let[,r,o]=e.split(/\s+/).map(c=>c.trim()),n=Number(r),i=o;if(t==="light"){let m=Math.min(n*.22,.045),g=.38,h=n;return {soft:`${.965.toFixed(3)} ${m.toFixed(3)} ${i}`,deep:`${g.toFixed(3)} ${h.toFixed(3)} ${i}`}}let d=.22,l=Math.min(n*.45,.075),s=.82,p=n*.9;return {soft:`${d.toFixed(3)} ${l.toFixed(3)} ${i}`,deep:`${s.toFixed(3)} ${p.toFixed(3)} ${i}`}}var Et={geist:"var(--font-geist), system-ui, sans-serif",inter:"var(--font-inter), system-ui, sans-serif",manrope:"var(--font-manrope), system-ui, sans-serif",figtree:"var(--font-figtree), system-ui, sans-serif",dmSans:"var(--font-dm-sans), system-ui, sans-serif",lexend:"var(--font-lexend), system-ui, sans-serif",outfit:"var(--font-outfit), system-ui, sans-serif",plusJakarta:"var(--font-plus-jakarta), system-ui, sans-serif",spaceGrotesk:"var(--font-space-grotesk), system-ui, sans-serif",fraunces:"var(--font-fraunces), Georgia, serif",instrumentSerif:"var(--font-instrument-serif), Georgia, serif",sourceSerif:"var(--font-source-serif), Georgia, serif",jetbrainsMono:"var(--font-jetbrains-mono), ui-monospace, monospace",geistMono:"var(--font-geist-mono), ui-monospace, monospace",ibmPlexMono:"var(--font-ibm-plex-mono), ui-monospace, monospace",system:"system-ui, -apple-system, sans-serif",serif:"Georgia, 'Times New Roman', serif",mono:"ui-monospace, Menlo, monospace"};var Li=["superLight","light","dark","superDark"],Di={muted:.6,default:1,vibrant:1.3};function Ii(e,t,r){let o=t.primary*r,n=t.accent*r,i=(o+n)/2*.8,d=l=>(l%360+360)%360;return {1:`0.600 ${(.17*o).toFixed(4)} ${e.primary.toFixed(2)}`,2:`0.640 ${(.17*i).toFixed(4)} ${d(e.primary+140).toFixed(2)}`,3:`0.580 ${(.17*i).toFixed(4)} ${d(e.primary+220).toFixed(2)}`,4:`0.510 0.0250 ${e.neutral.toFixed(2)}`,5:`0.620 ${(.17*n).toFixed(4)} ${e.accent.toFixed(2)}`}}var v=e=>({source:"neutral",step:e}),ie=e=>({source:"primary",step:e}),ke=e=>({source:"accent",step:e}),at=e=>({source:"pure",value:e}),Ai={superLight:{background:v(50),foreground:v(800),card:at(ot),cardForeground:v(800),popover:at(ot),popoverForeground:v(800),primary:ie(600),primaryForeground:ie(50),secondary:v(100),secondaryForeground:v(700),muted:v(100),mutedForeground:v(500),accent:ke(600),accentForeground:ke(50),border:v(200),input:v(200),ring:ie(500)},light:{background:v(50),foreground:v(950),card:at(ot),cardForeground:v(950),popover:at(ot),popoverForeground:v(950),primary:ie(500),primaryForeground:ie(50),secondary:v(100),secondaryForeground:v(700),muted:v(100),mutedForeground:v(500),accent:ke(500),accentForeground:ke(50),border:v(200),input:v(200),ring:ie(500)},dark:{background:v(950),foreground:v(50),card:v(900),cardForeground:v(50),popover:v(900),popoverForeground:v(50),primary:ie(400),primaryForeground:ie(950),secondary:v(800),secondaryForeground:v(200),muted:v(800),mutedForeground:v(400),accent:ke(400),accentForeground:ke(950),border:v(800),input:v(800),ring:ie(400)},superDark:{background:at(Na),foreground:v(100),card:v(950),cardForeground:v(100),popover:v(950),popoverForeground:v(100),primary:ie(300),primaryForeground:ie(950),secondary:v(900),secondaryForeground:v(300),muted:v(900),mutedForeground:v(500),accent:ke(300),accentForeground:ke(950),border:v(900),input:v(900),ring:ie(300)}};function Y(e,t){return e.source==="pure"?e.value:t[e.source][e.step]}function Fi(e,t){let r=Ai[t],o=t==="superLight"||t==="light",n=o?ar.light:ar.dark;return {background:Y(r.background,e),foreground:Y(r.foreground,e),card:Y(r.card,e),cardForeground:Y(r.cardForeground,e),popover:Y(r.popover,e),popoverForeground:Y(r.popoverForeground,e),primary:Y(r.primary,e),primaryForeground:Y(r.primaryForeground,e),secondary:Y(r.secondary,e),secondaryForeground:Y(r.secondaryForeground,e),muted:Y(r.muted,e),mutedForeground:Y(r.mutedForeground,e),accent:Y(r.accent,e),accentForeground:Y(r.accentForeground,e),border:Y(r.border,e),input:Y(r.input,e),ring:Y(r.ring,e),destructive:n.destructive,destructiveForeground:n.destructiveFg,success:n.success,warning:n.warning,info:n.info,highlight:n.highlight,...(()=>{let i=o?"light":"dark",d=Ve(n.destructive,i),l=Ve(n.success,i),s=Ve(n.warning,i),p=Ve(n.info,i),c=Ve(n.highlight,i);return {destructiveSoft:d.soft,destructiveDeep:d.deep,successSoft:l.soft,successDeep:l.deep,warningSoft:s.soft,warningDeep:s.deep,infoSoft:p.soft,infoDeep:p.deep,highlightSoft:c.soft,highlightDeep:c.deep}})()}}var ye={display:3.75,h1:2.5,h2:2,h3:1.5,h4:1.25,h5:1.125,h6:1,body:1,bodySm:.875},Oi={compact:.85,default:1,spacious:1.18};function Gi(e){let t=Oi[e.scale],r=o=>`${(o*t).toFixed(3)}rem`;return {fontSans:Et[e.body],fontMono:Et[e.mono],fontDisplay:Et[e.display],headingWeight:e.headingWeight??600,bodyWeight:e.bodyWeight??400,headingTracking:e.headingTracking??"-0.01em",scale:{display:r(ye.display),h1:r(ye.h1),h2:r(ye.h2),h3:r(ye.h3),h4:r(ye.h4),h5:r(ye.h5),h6:r(ye.h6),body:r(ye.body),bodySm:r(ye.bodySm)}}}var $i={sharp:0,subtle:.25,soft:.5,round:.875,pill:1.25};function Vi(e){let t=$i[e.style],r=o=>`${o.toFixed(3)}rem`;return {base:r(t),sm:r(Math.max(0,t-.25)),md:r(t),lg:r(t+.25),xl:r(t+.5),"2xl":r(t+1),full:"9999px"}}var Bi={tight:.85,default:1,roomy:1.2};function Ui(e){return {baseUnit:"1rem",densityFactor:Bi[e.density]}}var _i={none:{sm:"none",md:"none",lg:"none",xl:"none","2xl":"none",inner:"none"},subtle:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.03)",md:"0 2px 4px -1px rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.03)",lg:"0 6px 14px -2px rgb(0 0 0 / 0.05)",xl:"0 12px 24px -4px rgb(0 0 0 / 0.06)","2xl":"0 24px 48px -12px rgb(0 0 0 / 0.12)",inner:"inset 0 1px 2px 0 rgb(0 0 0 / 0.03)"},default:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},dramatic:{sm:"0 2px 4px 0 rgb(0 0 0 / 0.12)",md:"0 8px 16px -2px rgb(0 0 0 / 0.18), 0 4px 8px -4px rgb(0 0 0 / 0.12)",lg:"0 20px 32px -4px rgb(0 0 0 / 0.22), 0 8px 16px -8px rgb(0 0 0 / 0.18)",xl:"0 32px 48px -6px rgb(0 0 0 / 0.28), 0 12px 24px -10px rgb(0 0 0 / 0.22)","2xl":"0 48px 80px -16px rgb(0 0 0 / 0.45)",inner:"inset 0 4px 8px 0 rgb(0 0 0 / 0.1)"}};function Ki(e){let t=e?.shadows??"default",r=e?.motionIntensity??1,o=n=>`${Math.round(n*r)}ms`;return {shadows:_i[t],motion:{fast:o(150),base:o(200),slow:o(300),slower:o(500)},borderWidth:e?.borderWidth??"1px"}}function De(e){let t=Di[e.intensity??"default"],r=e.neutralPureGray??false,o=(e.chroma?.neutral??.08)*t,n=(e.chroma?.primary??1)*t,i=(e.chroma?.accent??1)*t,d=r?Ca():Mt({hue:e.hues.neutral,chromaScale:o}),l=Mt({hue:e.hues.primary,chromaScale:n}),s=Mt({hue:e.hues.accent,chromaScale:i}),p={neutral:d,primary:l,accent:s},c=Ii(e.hues,{primary:n,accent:i},t),m=Object.fromEntries(Li.map(w=>[w,Fi(p,w)])),g=Gi(e.typography),h=Vi(e.radius),T=Ui(e.spacing),f=Ki(e.effects),u={buttonShape:e.components?.buttonShape??"default",inputStyle:e.components?.inputStyle??"outlined",cardStyle:e.components?.cardStyle??"flat"};return {id:e.id,name:e.name,description:e.description,tagline:e.tagline,input:e,ramps:p,colors:m,chart:c,typography:g,radius:h,spacing:T,effects:f,components:u}}var nt={id:"calm",name:"Calm",description:"Warm neutrals, terracotta primary, serif typography.",tagline:"Signature",hues:{neutral:40,primary:20,accent:40},chroma:{neutral:.15,primary:.75,accent:.8},intensity:"muted",typography:{display:"fraunces",body:"fraunces",mono:"jetbrainsMono",scale:"default",headingWeight:600,headingTracking:"-0.02em"},spacing:{density:"roomy"},radius:{style:"round"},effects:{shadows:"subtle",motionIntensity:1.25},components:{buttonShape:"pill",inputStyle:"outlined",cardStyle:"outlined"}},nr={id:"energy",name:"Energy",description:"Teal + indigo \u2014 punchy, cool-tone, modern sans.",tagline:"Alternate",hues:{neutral:175,primary:175,accent:235},chroma:{neutral:.08,primary:1,accent:1},intensity:"vibrant",typography:{display:"geist",body:"geist",mono:"geistMono",scale:"default",headingWeight:600},spacing:{density:"default"},radius:{style:"soft"},effects:{shadows:"default",motionIntensity:1},components:{buttonShape:"default",inputStyle:"outlined",cardStyle:"flat"}},Ht=[nt,nr];function zi(e){return {"--background":e.background,"--foreground":e.foreground,"--card":e.card,"--card-foreground":e.cardForeground,"--popover":e.popover,"--popover-foreground":e.popoverForeground,"--primary":e.primary,"--primary-foreground":e.primaryForeground,"--secondary":e.secondary,"--secondary-foreground":e.secondaryForeground,"--muted":e.muted,"--muted-foreground":e.mutedForeground,"--accent":e.accent,"--accent-foreground":e.accentForeground,"--destructive":e.destructive,"--destructive-foreground":e.destructiveForeground,"--border":e.border,"--input":e.input,"--ring":e.ring,"--success":e.success,"--warning":e.warning,"--info":e.info,"--highlight":e.highlight,"--destructive-soft":e.destructiveSoft,"--destructive-deep":e.destructiveDeep,"--success-soft":e.successSoft,"--success-deep":e.successDeep,"--warning-soft":e.warningSoft,"--warning-deep":e.warningDeep,"--info-soft":e.infoSoft,"--info-deep":e.infoDeep,"--highlight-soft":e.highlightSoft,"--highlight-deep":e.highlightDeep}}function sr(e,t){let r=e.colors[t];return {...zi(r),...ir("neutral",e.ramps.neutral),...ir("primary",e.ramps.primary),...ir("accent",e.ramps.accent),"--chart-1":e.chart[1],"--chart-2":e.chart[2],"--chart-3":e.chart[3],"--chart-4":e.chart[4],"--chart-5":e.chart[5],"--font-sans":e.typography.fontSans,"--font-mono":e.typography.fontMono,"--font-display":e.typography.fontDisplay,"--font-heading-weight":String(e.typography.headingWeight),"--font-body-weight":String(e.typography.bodyWeight),"--font-heading-tracking":e.typography.headingTracking,"--text-display":e.typography.scale.display,"--text-h1":e.typography.scale.h1,"--text-h2":e.typography.scale.h2,"--text-h3":e.typography.scale.h3,"--text-h4":e.typography.scale.h4,"--text-h5":e.typography.scale.h5,"--text-h6":e.typography.scale.h6,"--text-body":e.typography.scale.body,"--text-body-sm":e.typography.scale.bodySm,"--radius":e.radius.base,"--rds-radius-sm":e.radius.sm,"--rds-radius-md":e.radius.md,"--rds-radius-lg":e.radius.lg,"--rds-radius-xl":e.radius.xl,"--rds-radius-2xl":e.radius["2xl"],"--rds-radius-full":e.radius.full,"--rds-density":String(e.spacing.densityFactor),"--rds-shadow-sm":e.effects.shadows.sm,"--rds-shadow-md":e.effects.shadows.md,"--rds-shadow-lg":e.effects.shadows.lg,"--rds-shadow-xl":e.effects.shadows.xl,"--rds-shadow-2xl":e.effects.shadows["2xl"],"--rds-shadow-inner":e.effects.shadows.inner,"--rds-transition-fast":e.effects.motion.fast,"--rds-transition-base":e.effects.motion.base,"--rds-transition-slow":e.effects.motion.slow,"--rds-transition-slower":e.effects.motion.slower,"--rds-border-width":e.effects.borderWidth}}function ir(e,t){let r={};for(let o of Ne)r[`--ramp-${e}-${o}`]=t[o];return r}function Lt(e,t){if(typeof document>"u")return;let r=document.documentElement,o=sr(e,t);for(let[n,i]of Object.entries(o))r.style.setProperty(n,i);r.setAttribute("data-ramp-theme",e.id),r.setAttribute("data-mode",t),r.setAttribute("data-button-shape",e.components.buttonShape??"default"),r.setAttribute("data-input-style",e.components.inputStyle??"outlined"),r.setAttribute("data-card-style",e.components.cardStyle??"flat");}function it(e){if(typeof document>"u")return "";let t=document.createElement("span");t.style.color=`oklch(${e})`,t.style.position="absolute",t.style.visibility="hidden",document.body.appendChild(t);let r=getComputedStyle(t).color;document.body.removeChild(t);let o=r.match(/\d+/g);if(!o||o.length<3)return "";let[n,i,d]=o.slice(0,3).map(Number);return "#"+[n,i,d].map(l=>Math.max(0,Math.min(255,l)).toString(16).padStart(2,"0")).join("").toUpperCase()}function Wi(e){let t=e.trim().split(/\s+/);if(t.length<3)return {oklch:e,hex:""};let[r,o,n]=t.map(Number),i=`${r.toFixed(3)} ${o.toFixed(3)} ${Math.round(n)}`,d=it(e);return {oklch:i,hex:d}}function dr(e,t,r){let o=[`### ${e} ramp (hue ${Math.round(r)}\xB0)`,"","| Step | OKLCH | Hex |","|------|-------|-----|"];for(let n of Ne){let{oklch:i,hex:d}=Wi(t[n]);o.push(`| ${n} | \`${i}\` | \`${d||"\u2014"}\` |`);}return o.join(`
|
|
203
|
-
`)}function ka(e,t){let r=[`### ${e}`,"","| Token | Usage | Light (hex) | Dark (hex) |","|-------|-------|-------------|------------|"];for(let o of t){let n=it(o.light)||"\u2014",i=it(o.dark)||"\u2014";r.push(`| \`--${o.token}\` | ${o.usage} | \`${n}\` (\`${o.light}\`) | \`${i}\` (\`${o.dark}\`) |`);}return r.join(`
|
|
204
|
-
`)}function Ma(e){return JSON.stringify(e.input,null,2)}function Ea(e){let{input:t,ramps:r,colors:o,chart:n,typography:i,radius:d,spacing:l,effects:s,components:p}=e,c=t.intensity??"default",m=f=>({token:f,usage:ji[f]??"",light:o.light[f],dark:o.dark[f]}),g=["background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","border","input","ring"].map(m),h=["destructive","destructiveForeground","success","warning","info","highlight"].map(m),T=[1,2,3,4,5].map(f=>{let u=n[f];return {slot:f,triplet:u,hex:it(u)||"\u2014"}});return `# ${e.name} \u2014 Grade Design System Theme
|
|
205
|
-
|
|
206
|
-
> **Portable theme spec.** Paste this entire file into a fresh LLM prompt along with your design brief. The model will have everything it needs to produce UI that matches this exact theme \u2014 colors, typography, spacing, shapes, and the "feel" we're after.
|
|
207
|
-
|
|
208
|
-
## At a glance
|
|
209
|
-
|
|
210
|
-
- **Name**: ${e.name}
|
|
211
|
-
- **ID**: \`${t.id}\`
|
|
212
|
-
${t.description?`- **Description**: ${t.description}
|
|
213
|
-
`:""}- **Hues**: neutral \`${t.hues.neutral}\xB0\` \xB7 primary \`${t.hues.primary}\xB0\` \xB7 accent \`${t.hues.accent}\xB0\`
|
|
214
|
-
- **Intensity**: \`${c}\` ${c==="muted"?"(quieter chroma across the board)":c==="vibrant"?"(punchier chroma across the board)":"(balanced)"}
|
|
215
|
-
- **Typography**: ${t.typography.display} display \xB7 ${t.typography.body} body \xB7 ${t.typography.mono} mono \xB7 scale \`${t.typography.scale}\`
|
|
216
|
-
- **Spacing density**: \`${t.spacing.density}\`
|
|
217
|
-
- **Radius style**: \`${t.radius.style}\` (base \`${d.base}\`)
|
|
218
|
-
- **Button shape**: \`${p.buttonShape}\` \xB7 **Input style**: \`${p.inputStyle}\` \xB7 **Card style**: \`${p.cardStyle}\`
|
|
219
|
-
- **Shadow preset**: \`${t.effects?.shadows??"default"}\` \xB7 **Motion intensity**: \`${t.effects?.motionIntensity??1}\`
|
|
220
|
-
|
|
221
|
-
## How themes work
|
|
222
|
-
|
|
223
|
-
Every theme in Grade DS is produced by a pure function:
|
|
224
|
-
|
|
225
|
-
\`\`\`ts
|
|
226
|
-
generateTheme(input: ThemeInput) => GeneratedTheme
|
|
227
|
-
\`\`\`
|
|
228
|
-
|
|
229
|
-
A \`ThemeInput\` is a small object (three hues plus a handful of presets). The generator turns it into three 11-stop **OKLCH** color ramps, semantic tokens for four brightness modes (superLight / light / dark / superDark), a chart palette, and concrete values for typography, radius, spacing, and effects. Everything downstream reads from CSS variables set on \`:root\`.
|
|
230
|
-
|
|
231
|
-
## Full ThemeInput (round-trippable)
|
|
232
|
-
|
|
233
|
-
\`\`\`json
|
|
234
|
-
${Ma(e)}
|
|
235
|
-
\`\`\`
|
|
236
|
-
|
|
237
|
-
## Color ramps
|
|
238
|
-
|
|
239
|
-
Three 11-stop OKLCH ramps, generated from the input hues + chromas + global intensity. Every color elsewhere in the theme resolves back to one of these stops.
|
|
240
|
-
|
|
241
|
-
${dr("Neutral",r.neutral,t.hues.neutral)}
|
|
242
|
-
|
|
243
|
-
${dr("Primary",r.primary,t.hues.primary)}
|
|
244
|
-
|
|
245
|
-
${dr("Accent",r.accent,t.hues.accent)}
|
|
246
|
-
|
|
247
|
-
## Semantic tokens (hue-derived)
|
|
248
|
-
|
|
249
|
-
Purpose-based tokens drawn from the ramps. Two values per token \u2014 the generator produces them for all four brightness modes, but only light + dark are shown here for brevity.
|
|
250
|
-
|
|
251
|
-
${ka("Core semantic tokens",g)}
|
|
252
|
-
|
|
253
|
-
## Fixed semantic tokens (not hue-derived)
|
|
254
|
-
|
|
255
|
-
Status colors stay consistent across themes so users always read green as success, red as destructive, etc. Accessibility wins over brand cohesion.
|
|
256
|
-
|
|
257
|
-
${ka("Status colors",h)}
|
|
258
|
-
|
|
259
|
-
## Chart palette
|
|
260
|
-
|
|
261
|
-
5-stop categorical palette derived from theme hues. Primary leads, then two hue-rotated variants, then neutral, then accent. Adjacent slots are guaranteed to be visually distinct.
|
|
262
|
-
|
|
263
|
-
| Slot | OKLCH | Hex |
|
|
264
|
-
|------|-------|-----|
|
|
265
|
-
${T.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
|
|
266
|
-
`)}
|
|
267
|
-
|
|
268
|
-
## Typography
|
|
269
|
-
|
|
270
|
-
- **Display font**: \`${i.fontDisplay}\`
|
|
271
|
-
- **Body font**: \`${i.fontSans}\`
|
|
272
|
-
- **Mono font**: \`${i.fontMono}\`
|
|
273
|
-
- **Heading weight**: \`${i.headingWeight}\`
|
|
274
|
-
- **Body weight**: \`${i.bodyWeight}\`
|
|
275
|
-
- **Heading letter-spacing**: \`${i.headingTracking}\`
|
|
276
|
-
|
|
277
|
-
### Type scale
|
|
278
|
-
|
|
279
|
-
| Step | Size |
|
|
280
|
-
|------|------|
|
|
281
|
-
| \`text-display\` | \`${i.scale.display}\` |
|
|
282
|
-
| \`text-h1\` | \`${i.scale.h1}\` |
|
|
283
|
-
| \`text-h2\` | \`${i.scale.h2}\` |
|
|
284
|
-
| \`text-h3\` | \`${i.scale.h3}\` |
|
|
285
|
-
| \`text-h4\` | \`${i.scale.h4}\` |
|
|
286
|
-
| \`text-h5\` | \`${i.scale.h5}\` |
|
|
287
|
-
| \`text-h6\` | \`${i.scale.h6}\` |
|
|
288
|
-
| body | \`${i.scale.body}\` |
|
|
289
|
-
| body-sm | \`${i.scale.bodySm}\` |
|
|
290
|
-
|
|
291
|
-
## Radius, spacing, effects
|
|
292
|
-
|
|
293
|
-
### Radius
|
|
294
|
-
|
|
295
|
-
| Step | Value |
|
|
296
|
-
|------|-------|
|
|
297
|
-
| \`--radius\` (base) | \`${d.base}\` |
|
|
298
|
-
| \`--rds-radius-sm\` | \`${d.sm}\` |
|
|
299
|
-
| \`--rds-radius-md\` | \`${d.md}\` |
|
|
300
|
-
| \`--rds-radius-lg\` | \`${d.lg}\` |
|
|
301
|
-
| \`--rds-radius-xl\` | \`${d.xl}\` |
|
|
302
|
-
| \`--rds-radius-2xl\` | \`${d["2xl"]}\` |
|
|
303
|
-
| \`--rds-radius-full\` | \`${d.full}\` |
|
|
304
|
-
|
|
305
|
-
### Spacing
|
|
306
|
-
|
|
307
|
-
- **Density factor**: \`${l.densityFactor}\` (applied as \`var(--rds-density)\` on components that opt in)
|
|
308
|
-
- **Base unit**: \`${l.baseUnit}\`
|
|
309
|
-
|
|
310
|
-
### Motion
|
|
311
|
-
|
|
312
|
-
| Var | Duration |
|
|
313
|
-
|-----|----------|
|
|
314
|
-
| \`--rds-transition-fast\` | \`${s.motion.fast}\` |
|
|
315
|
-
| \`--rds-transition-base\` | \`${s.motion.base}\` |
|
|
316
|
-
| \`--rds-transition-slow\` | \`${s.motion.slow}\` |
|
|
317
|
-
| \`--rds-transition-slower\` | \`${s.motion.slower}\` |
|
|
318
|
-
|
|
319
|
-
### Shadows
|
|
320
|
-
|
|
321
|
-
All shadows are applied via Tailwind's \`shadow-*\` utilities mapped to these var values.
|
|
322
|
-
|
|
323
|
-
| Var | Value |
|
|
324
|
-
|-----|-------|
|
|
325
|
-
| \`--rds-shadow-sm\` | \`${s.shadows.sm}\` |
|
|
326
|
-
| \`--rds-shadow-md\` | \`${s.shadows.md}\` |
|
|
327
|
-
| \`--rds-shadow-lg\` | \`${s.shadows.lg}\` |
|
|
328
|
-
| \`--rds-shadow-xl\` | \`${s.shadows.xl}\` |
|
|
329
|
-
|
|
330
|
-
## CSS variable conventions
|
|
331
|
-
|
|
332
|
-
Every color is stored as a bare \`L C H\` OKLCH triplet and wrapped at call time:
|
|
333
|
-
|
|
334
|
-
\`\`\`css
|
|
335
|
-
:root {
|
|
336
|
-
--primary: ${o.light.primary};
|
|
337
|
-
--background: ${o.light.background};
|
|
338
|
-
}
|
|
339
|
-
\`\`\`
|
|
340
|
-
|
|
341
|
-
Tailwind config wraps these with \`oklch(var(--x) / <alpha-value>)\` so Tailwind's opacity shortcuts work:
|
|
342
|
-
|
|
343
|
-
\`\`\`html
|
|
344
|
-
<div class="bg-primary text-primary-foreground">...</div>
|
|
345
|
-
<div class="bg-primary/50 hover:bg-primary/80">...</div>
|
|
346
|
-
<div class="text-muted-foreground border-border/40">...</div>
|
|
347
|
-
\`\`\`
|
|
348
|
-
|
|
349
|
-
## Tailwind class cheat sheet
|
|
350
|
-
|
|
351
|
-
| Utility | Token |
|
|
352
|
-
|---------|-------|
|
|
353
|
-
| \`bg-background\`, \`text-foreground\` | page bg + primary text |
|
|
354
|
-
| \`bg-card\`, \`text-card-foreground\` | elevated surfaces |
|
|
355
|
-
| \`bg-popover\`, \`text-popover-foreground\` | floating menus |
|
|
356
|
-
| \`bg-primary\`, \`text-primary-foreground\` | primary action / brand |
|
|
357
|
-
| \`bg-secondary\`, \`text-secondary-foreground\` | secondary surface |
|
|
358
|
-
| \`bg-muted\`, \`text-muted-foreground\` | subtle surface + subtext |
|
|
359
|
-
| \`bg-accent\`, \`text-accent-foreground\` | highlight / hover |
|
|
360
|
-
| \`border-border\`, \`border-input\` | default + form borders |
|
|
361
|
-
| \`ring-ring\` | focus ring |
|
|
362
|
-
| \`bg-destructive\`, \`bg-success\`, \`bg-warning\`, \`bg-info\`, \`bg-highlight\` | status colors |
|
|
363
|
-
| \`bg-chart-1\` \u2026 \`bg-chart-5\` | chart series |
|
|
364
|
-
|
|
365
|
-
## Components the theme styles
|
|
366
|
-
|
|
367
|
-
Import from \`@gradeui/ui\` \u2014 all components read theme vars and re-skin automatically:
|
|
368
|
-
|
|
369
|
-
\`\`\`tsx
|
|
370
|
-
import {
|
|
371
|
-
Button, Input, Textarea, Label, Select, Checkbox, RadioGroup, Switch,
|
|
372
|
-
Slider, Toggle, Calendar, Card, Badge, Alert, Skeleton, Separator,
|
|
373
|
-
HoverCard, Popover, Dialog, Sheet, Tooltip, Progress, DropdownMenu,
|
|
374
|
-
Command, Tabs, SimpleTabs, Accordion, Collapsible, ScrollArea, Table,
|
|
375
|
-
Avatar, AIChat, Logo, SectionBlock, CardBlock, MediaBlock, FAQBlock,
|
|
376
|
-
} from "@gradeui/ui";
|
|
377
|
-
import "@gradeui/ui/styles.css";
|
|
378
|
-
\`\`\`
|
|
379
|
-
|
|
380
|
-
Every component accepts a \`className\` for layout tweaks. Variants are passed via a \`variant\` prop: \`<Button variant="outline">\`, \`<Alert variant="success">\`, \`<Badge variant="destructive-soft">\`.
|
|
381
|
-
|
|
382
|
-
## Feel and voice
|
|
383
|
-
|
|
384
|
-
When generating UI in the ${e.name} theme, match this character:
|
|
385
|
-
|
|
386
|
-
${qi(e)}
|
|
387
|
-
|
|
388
|
-
## Instructions for the generating LLM
|
|
389
|
-
|
|
390
|
-
1. **Use semantic tokens first**. Prefer \`bg-primary\`, \`text-foreground\`, \`border-border\` over raw ramp classes. Reach for \`bg-primary-500\` / \`bg-neutral-200\` only when you need a specific shade unavailable as a semantic token.
|
|
391
|
-
2. **Status colors are fixed**. Do not use \`success\` for a generic success-feeling visual \u2014 it's always green-ish. Use \`primary\` / \`accent\` for brand flavor; \`success\` / \`warning\` / \`destructive\` for actual state.
|
|
392
|
-
3. **Respect the shape presets**. If the theme's buttonShape is \`pill\`, don't add \`rounded-none\` to a Button. The component already matches the theme.
|
|
393
|
-
4. **Typography scales with the theme**. Heading utilities \`.text-h1\`\u2013\`.text-h6\` pick up the theme's display font automatically; body text inherits the body font. Only override with \`font-mono\` for code-like content.
|
|
394
|
-
5. **Charts get theme palette**. Use \`var(--chart-1)\` through \`var(--chart-5)\` for series colors. Don't hardcode hex in charts.
|
|
395
|
-
6. **Dark mode is one class**. Add \`dark\` to \`<html>\` (or toggle with the provider's \`setMode("dark")\`). All tokens have dark variants already \u2014 no \`dark:\` prefixes needed on most components.
|
|
396
|
-
7. **Layout freely**. The theme controls look-and-feel; composition is up to you. Use Tailwind for grids, spacing, flex layout exactly as normal.
|
|
397
|
-
|
|
398
|
-
## Quick regeneration
|
|
399
|
-
|
|
400
|
-
To recreate this theme in code:
|
|
401
|
-
|
|
402
|
-
\`\`\`ts
|
|
403
|
-
import { generateTheme, applyThemeToRoot, type ThemeInput } from "@gradeui/ui";
|
|
404
|
-
|
|
405
|
-
const input: ThemeInput = ${Ma(e).replace(/\n/g,`
|
|
406
|
-
`)};
|
|
407
|
-
|
|
408
|
-
const theme = generateTheme(input);
|
|
409
|
-
applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
410
|
-
\`\`\`
|
|
411
|
-
|
|
412
|
-
---
|
|
413
|
-
*Generated from Grade Design System v1 \xB7 ${new Date().toISOString()}*
|
|
414
|
-
`}var ji={background:"Page / body background",foreground:"Primary text",card:"Elevated surface background",cardForeground:"Text on cards",popover:"Floating menu background",popoverForeground:"Text inside floating menus",primary:"Primary actions, links, default button",primaryForeground:"Text on primary-tinted fills",secondary:"Secondary surfaces + quiet buttons",secondaryForeground:"Text on secondary surfaces",muted:"Subtle surfaces (hover states, skeletons)",mutedForeground:"Secondary / less-important text",accent:"Highlights, hover accents",accentForeground:"Text on accent surfaces",border:"Default borders",input:"Form input borders",ring:"Focus ring color",destructive:"Destructive actions, errors",destructiveForeground:"Text on destructive surfaces",success:"Success states",warning:"Warning states",info:"Informational states",highlight:"Emphasis, new features, callouts"};function qi(e){let t=[],{input:r,components:o}=e;r.intensity==="muted"?t.push("- **Quiet and restrained.** Avoid heavy saturation, glowing effects, or loud contrast jumps. Let whitespace do the work."):r.intensity==="vibrant"?t.push("- **Loud and confident.** Primary color wants to lead. Use it on hero CTAs, key metrics, empty states. Don't be shy."):t.push("- **Balanced.** Neither shouty nor sleepy \u2014 a workhorse feel suited to product interfaces."),r.spacing.density==="roomy"?t.push("- **Generous spacing.** Stretch things out \u2014 reach for `gap-6`, `gap-8`, `p-6`, `p-8`. Airy is the vibe."):r.spacing.density==="tight"?t.push("- **Dense layouts.** Pack information in \u2014 `gap-2`, `gap-3`, `p-3`, `p-4`. Scan-friendly dashboard energy."):t.push("- **Standard density.** Use Tailwind's default spacing ladder."),r.radius.style==="pill"?t.push("- **Fully rounded.** Controls are pill-shaped. Use `rounded-full` on custom chips / pills too."):r.radius.style==="sharp"?t.push("- **Square corners.** Zero radius everywhere \u2014 very architectural. Do not add curves."):r.radius.style==="round"?t.push("- **Rounded and friendly.** Corner radius is noticeable (\u224814px base). Avoid sharp edges."):t.push("- **Standard rounded corners.**");let n=r.typography.display;return n==="fraunces"||n==="instrumentSerif"||n==="sourceSerif"?t.push("- **Editorial serif headings.** Treat headings like magazine titles \u2014 give them space and weight. Serifs reward larger sizes."):(n==="geist"||n==="inter")&&t.push("- **Modern technical sans.** Clean, functional, neutral. Good for product UIs."),o.cardStyle==="outlined"?t.push("- **Cards are outlined**, not shadowed. Rely on borders + spacing for hierarchy."):o.cardStyle==="elevated"?t.push("- **Cards have real elevation.** Use shadows to stack content visually."):o.cardStyle==="glass"&&t.push("- **Glass / frosted cards.** Use translucent surfaces over background imagery or gradients."),o.buttonShape==="pill"&&t.push("- **Buttons are pills** \u2014 don't override with square corners."),t.join(`
|
|
415
|
-
`)}function lr(e){if(typeof window>"u"||typeof document>"u")return;let t=Ea(e),r=new Blob([t],{type:"text/markdown;charset=utf-8"}),o=URL.createObjectURL(r),n=document.createElement("a");n.href=o,n.download=`ramp-theme-${e.input.id}.md`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(o);}var fe=Object.fromEntries(Ht.map(e=>[e.id,De(e)])),Be=nt.id;function Ie(e){if(e in fe)return fe[e];let t=pr(e);if(t)return De(t)}function cr(){return [...Object.values(fe),...Da()]}var Ha="ramp-user-themes";function Dt(){if(typeof localStorage>"u")return {};try{let e=localStorage.getItem(Ha);if(!e)return {};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function La(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(Ha,JSON.stringify(e));}catch{}}function Da(){return Object.values(Dt()).map(De)}function pr(e){return Dt()[e]}function It(e){let t=Dt();return t[e.id]=e,La(t),De(e)}function mr(e){if(e in fe)return;let t=Dt();delete t[e],La(t);}function Yi(e,t,r){let o=fe[e]?.input??pr(e);if(!o)return;let n={...o,id:t,name:r};return It(n),n}var ur="ramp-theme",At="ramp-mode",Aa=["superLight","light","dark","superDark"],Ia=new Set(["dark","superDark"]),Xi=`
|
|
416
|
-
(function() {
|
|
417
|
-
try {
|
|
418
|
-
var mode = localStorage.getItem('${At}');
|
|
419
|
-
var valid = ['superLight','light','dark','superDark'];
|
|
420
|
-
if (!mode || valid.indexOf(mode) === -1) {
|
|
421
|
-
mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
422
|
-
}
|
|
423
|
-
if (mode === 'dark' || mode === 'superDark') {
|
|
424
|
-
document.documentElement.classList.add('dark');
|
|
425
|
-
}
|
|
426
|
-
document.documentElement.setAttribute('data-mode', mode);
|
|
427
|
-
var themeId = localStorage.getItem('${ur}');
|
|
428
|
-
if (themeId) document.documentElement.setAttribute('data-ramp-theme', themeId);
|
|
429
|
-
} catch(e) {}
|
|
430
|
-
})();
|
|
431
|
-
`,fr=y.createContext(null);function Zi({children:e,defaultTheme:t=Be,defaultMode:r="light"}){let[o,n]=y.useState(t),[i,d]=y.useState(r),[l,s]=y.useState(0);y.useEffect(()=>{try{let f=localStorage.getItem(ur);f&&Ie(f)&&n(f);let u=localStorage.getItem(At);if(u&&Aa.includes(u))d(u);else if(typeof window<"u"){let w=window.matchMedia("(prefers-color-scheme: dark)").matches;d(w?"dark":"light");}}catch{}},[]),y.useEffect(()=>{let f=Ie(o)??Ie(Be);f&&(Lt(f,i),typeof document<"u"&&document.documentElement.classList.toggle("dark",Ia.has(i)));},[o,i,l]),y.useEffect(()=>{if(typeof window>"u")return;let f=window.matchMedia("(prefers-color-scheme: dark)"),u=w=>{try{if(localStorage.getItem(At))return}catch{return}d(w.matches?"dark":"light");};return f.addEventListener("change",u),()=>f.removeEventListener("change",u)},[]);let p=y.useCallback(f=>{n(f);try{localStorage.setItem(ur,f);}catch{}},[]),c=y.useCallback(f=>{d(f);try{localStorage.setItem(At,f);}catch{}},[]),m=y.useCallback(f=>{It(f),s(u=>u+1),p(f.id);},[p]),g=y.useCallback(f=>{f in fe||(mr(f),s(u=>u+1),n(u=>u===f?Be:u));},[]),h=y.useCallback(()=>{s(f=>f+1);},[]),T=y.useMemo(()=>{let f=Ie(o)??Ie(Be);return {theme:f,themeId:f.id,mode:i,isDark:Ia.has(i),setThemeId:p,setMode:c,themes:cr(),saveAndActivate:m,deleteTheme:g,refresh:h}},[o,i,l,p,c,m,g,h]);return y.createElement(fr.Provider,{value:T},e)}function gr(){let e=y.useContext(fr);if(!e)throw new Error("useGradeTheme must be used inside <GradeThemeProvider>. Wrap your app (typically in app/layout.tsx).");return e}function st(){return y.useContext(fr)}function rs({className:e}){let t=st();if(!t)return null;let{theme:r,themes:o,setThemeId:n,deleteTheme:i}=t;return y.createElement(Fe,null,y.createElement(Oe,{asChild:true},y.createElement(X,{variant:"ghost",size:"sm",className:a("gap-2",e),"aria-label":"Switch theme"},y.createElement(Palette,{className:"h-4 w-4"}),y.createElement("span",{className:"hidden sm:inline"},r.name))),y.createElement(Ee,{className:"w-80 p-2",align:"end"},y.createElement("div",{className:"flex items-start justify-between gap-2 px-2 py-1.5 mb-1"},y.createElement("div",null,y.createElement("div",{className:"text-xs font-medium text-muted-foreground"},"Theme"),y.createElement("div",{className:"text-xs text-muted-foreground/80"},"Switch the skin applied site-wide.")),y.createElement("button",{type:"button",onClick:()=>lr(r),className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",title:"Download the active theme as a markdown spec \u2014 paste into a fresh LLM prompt"},y.createElement(Download,{className:"h-3 w-3"}),".md")),y.createElement("div",{className:"flex flex-col gap-0.5"},o.map(d=>{let l=d.id===r.id,s=d.id in fe,p=d.ramps.primary[500],c=d.ramps.accent[500],m=d.ramps.neutral[500];return y.createElement("div",{key:d.id,className:a("group flex items-start gap-3 rounded-md px-2 py-2 text-left transition-colors","hover:bg-muted",l&&"bg-muted")},y.createElement("button",{type:"button",onClick:()=>n(d.id),className:"flex items-start gap-3 flex-1 min-w-0 text-left"},y.createElement("div",{className:"mt-0.5 flex shrink-0 overflow-hidden rounded-md border border-border"},y.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${p})`},"aria-hidden":true}),y.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${c})`},"aria-hidden":true}),y.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${m})`},"aria-hidden":true})),y.createElement("div",{className:"min-w-0 flex-1"},y.createElement("div",{className:"flex items-center gap-2"},y.createElement("span",{className:"text-sm font-medium truncate text-foreground"},d.name),d.tagline&&y.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},d.tagline)),d.description&&y.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},d.description))),l&&y.createElement(Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!s&&!l&&y.createElement("button",{type:"button",onClick:g=>{g.stopPropagation(),i(d.id);},className:"mt-1 opacity-0 group-hover:opacity-100 transition-opacity rounded p-1 hover:bg-destructive/10 hover:text-destructive","aria-label":`Delete theme ${d.name}`},y.createElement(Trash2,{className:"h-3.5 w-3.5"})))}))))}var Fa=[{mode:"superLight",label:"Super light",icon:SunDim,tooltip:"Super light \u2014 airy, low contrast"},{mode:"light",label:"Light",icon:Sun,tooltip:"Light"},{mode:"dark",label:"Dark",icon:Moon,tooltip:"Dark"},{mode:"superDark",label:"Super dark",icon:MoonStar,tooltip:"Super dark \u2014 OLED, high contrast"}];function ss({className:e,variant:t="icons"}){let r=st();if(!r)return null;let{mode:o,setMode:n}=r;return t==="labeled"?y.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:a("inline-flex flex-wrap gap-1 rounded-md border border-border bg-background p-1",e)},Fa.map(({mode:i,label:d,icon:l})=>{let s=o===i;return y.createElement("button",{key:i,type:"button",role:"radio","aria-checked":s,onClick:()=>n(i),className:a("flex items-center gap-2 rounded px-3 py-1.5 text-sm transition-colors",s?"bg-primary text-primary-foreground":"hover:bg-accent hover:text-accent-foreground")},y.createElement(l,{className:"h-4 w-4"}),y.createElement("span",null,d))})):y.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:a("inline-flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5",e)},Fa.map(({mode:i,icon:d,tooltip:l})=>{let s=o===i;return y.createElement("button",{key:i,type:"button",role:"radio","aria-checked":s,"aria-label":l,title:l,onClick:()=>n(i),className:a("flex h-7 w-7 items-center justify-center rounded transition-colors",s?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground")},y.createElement(d,{className:"h-3.5 w-3.5"}))}))}function cs(){let{isDark:e,setMode:t}=gr();return React.createElement(X,{variant:"ghost",size:"sm",onClick:()=>t(e?"light":"dark"),className:"gap-2","aria-label":e?"Switch to light mode":"Switch to dark mode"},e?React.createElement(React.Fragment,null,React.createElement(Sun,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Light")):React.createElement(React.Fragment,null,React.createElement(Moon,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Dark")))}export{Aa as ALL_MODES,Ka as Accordion,Nr as AccordionContent,Sr as AccordionItem,Cr as AccordionTrigger,kr as Alert,Er as AlertDescription,Mr as AlertTitle,Ir as AppShell,Fr as AppShellMain,Ar as AppShellNav,Or as Avatar,$r as AvatarFallback,Gr as AvatarImage,Ht as BUILT_IN_INPUTS,qa as Badge,X as Button,ut as Calendar,_r as CalendarDayButton,Kr as Card,qr as CardContent,jr as CardDescription,Yr as CardFooter,zr as CardHeader,Wr as CardTitle,Xr as Checkbox,nn as DatePicker,sn as DateRangePicker,ln as Dialog,pn as DialogClose,Qr as DialogContent,oo as DialogDescription,to as DialogFooter,eo as DialogHeader,Ut as DialogOverlay,Jr as DialogPortal,ro as DialogTitle,cn as DialogTrigger,gn as DropdownMenu,lo as DropdownMenuCheckboxItem,io as DropdownMenuContent,yn as DropdownMenuGroup,so as DropdownMenuItem,po as DropdownMenuLabel,vn as DropdownMenuPortal,xn as DropdownMenuRadioGroup,co as DropdownMenuRadioItem,mo as DropdownMenuSeparator,uo as DropdownMenuShortcut,bn as DropdownMenuSub,no as DropdownMenuSubContent,ao as DropdownMenuSubTrigger,hn as DropdownMenuTrigger,wa as FRAGMENT_HEADER,Po as Flex,Xi as GRADE_PRE_HYDRATION_SCRIPT,ss as GradeModeSwitcher,Zi as GradeThemeProvider,rs as GradeThemeSwitcher,To as Grid,fo as Input,go as Label,Ei as LenisProvider,ue as MediaSurface,Fe as Popover,rn as PopoverAnchor,Ee as PopoverContent,Oe as PopoverTrigger,ho as Progress,yo as RadioGroup,vo as RadioGroupItem,ha as RivePlayer,xo as Row,So as ScrollArea,Kt as ScrollBar,Ln as Select,ko as SelectContent,Dn as SelectGroup,Eo as SelectItem,Mo as SelectLabel,Wt as SelectScrollDownButton,zt as SelectScrollUpButton,Ho as SelectSeparator,No as SelectTrigger,In as SelectValue,Lo as Separator,$e as ShaderCompileError,Ci as ShaderPresetPicker,kt as ShaderPresetPreview,On as Sheet,$n as SheetClose,Io as SheetContent,Go as SheetDescription,Fo as SheetFooter,Ao as SheetHeader,qt as SheetOverlay,Do as SheetPortal,Oo as SheetTitle,Gn as SheetTrigger,aa as SideMenu,la as SimpleTabs,fa as SimpleTabsContent,ma as SimpleTabsList,ca as SimpleTabsPanel,pa as SimpleTabsRoot,ua as SimpleTabsTrigger,Bn as Skeleton,$o as Slider,Bo as Stack,Uo as Switch,_o as Table,zo as TableBody,Xo as TableCaption,Yo as TableCell,Wo as TableFooter,qo as TableHead,Ko as TableHeader,jo as TableRow,Kn as Tabs,Qo as TabsContent,Zo as TabsList,Jo as TabsTrigger,ea as Textarea,cs as ThemeToggle,Nt as ThreeScene,Xt as Tooltip,wt as TooltipContent,Yt as TooltipProvider,Zt as TooltipTrigger,na as TopMenu,ia as TopMenuUser,sa as TopMenuUserItem,da as TopMenuUserSection,ga as VideoPlayer,Dr as appShellMainVariants,Lr as appShellNavVariants,Lt as applyThemeToRoot,Br as badgeVariants,or as buildFragmentShaderScene,fe as builtInThemes,Ke as buttonVariants,nt as calmInput,a as cn,St as defaultPostPreset,Be as defaultThemeId,mr as deleteUserTheme,Yi as duplicateTheme,nr as energyInput,wo as flexVariants,De as generateTheme,Ie as getTheme,Ro as gridVariants,cr as listThemes,Da as listUserThemes,pr as loadUserThemeInput,tt as postPresets,bo as rowVariants,It as saveUserTheme,Je as sceneRegistry,et as shaderPresetById,Qe as shaderPresets,Hr as shellVariants,Vo as stackVariants,sr as themeToCSSVars,gr as useGradeTheme,st as useMaybeGradeTheme,Le as usePrefersReducedMotion};//# sourceMappingURL=index.mjs.map
|
|
429
|
+
`,st=class extends Error{log;source;constructor(t,r){super(`Fragment shader failed to compile:
|
|
430
|
+
${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=r;}};function al(e,t){let r=e.getContext(),o=r.createShader(r.FRAGMENT_SHADER);if(!o)throw new Error("Unable to allocate fragment shader");r.shaderSource(o,t),r.compileShader(o);let s=r.getShaderParameter(o,r.COMPILE_STATUS),a=r.getShaderInfoLog(o)||"";if(r.deleteShader(o),!s)throw new st(a,t)}function Gr(e){return ({renderer:t,width:r,height:o,palette:s})=>{let a=`${Ln}
|
|
431
|
+
${e}`;al(t,a);let d=new G.Scene,p=new G.OrthographicCamera(-1,1,1,-1,0,1),i={uTime:{value:0},uResolution:{value:new G.Vector2(r,o)},uMouse:{value:new G.Vector2(.5,.5)},uPrimary:{value:new G.Color(s.primary)},uSecondary:{value:new G.Color(s.secondary)},uAccent:{value:new G.Color(s.accent)},uBackground:{value:new G.Color(s.background)}},c=new G.ShaderMaterial({uniforms:i,vertexShader:ol,fragmentShader:a,depthTest:false,depthWrite:false}),l=new G.PlaneGeometry(2,2),m=new G.Mesh(l,c);return d.add(m),{scene:d,camera:p,update:h=>{i.uTime.value=h;},resize:(h,y)=>{i.uResolution.value.set(h,y);},setPalette:h=>{i.uPrimary.value.set(h.primary),i.uSecondary.value.set(h.secondary),i.uAccent.value.set(h.accent),i.uBackground.value.set(h.background);},setMouse:(h,y)=>{i.uMouse.value.set(h,y);},dispose:()=>{l.dispose(),c.dispose();}}}}var kt={primary:"#ff5fb9",secondary:"#9fe8ff",accent:"#ffc857",background:"#0a0a14"},il=/^[\d.]+\s+[\d.]+\s+[\d.]+(?:\s*\/\s*[\d.%]+)?$/,ll=/^[\d.]+\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.%]+)?$/,dl=/^\s*var\(\s*(--[^,)\s]+)(?:\s*,[^)]*)?\s*\)\s*$/;function rr(e,t,r){if(typeof document>"u")return r;let o=e,s=dl.exec(e);if(s){let p=getComputedStyle(t).getPropertyValue(s[1]).trim();p&&(il.test(p)?o=`oklch(${p})`:ll.test(p)&&(o=`hsl(${p})`));}let a=document.createElement("span");if(a.style.color="",a.style.color=o,a.style.color==="")return r;a.style.display="none",t.appendChild(a);let d=getComputedStyle(a).color;if(t.removeChild(a),!d)return r;if(d.startsWith("rgb"))return d;try{let p=document.createElement("canvas");p.width=1,p.height=1;let i=p.getContext("2d");if(!i)return d;i.clearRect(0,0,1,1),i.fillStyle=d,i.fillRect(0,0,1,1);let[c,l,m]=i.getImageData(0,0,1,1).data;return `rgb(${c}, ${l}, ${m})`}catch{return d}}function Dn(e,t){return {primary:rr(e.primary,t,kt.primary),secondary:rr(e.secondary,t,kt.secondary),accent:rr(e.accent,t,kt.accent),background:rr(e.background,t,kt.background)}}var or=v.forwardRef(({preset:e,fragmentShader:t,onShaderError:r,postPreset:o,palette:s,createScene:a,controls:d=false,autoPlay:p=true,pauseOffscreen:i=true,aspect:c="video",radius:l="lg",border:m=false,poster:u,label:h,className:y,style:f,maxDpr:g},R)=>{let w=v.useRef(null),[k,S]=v.useState(p),[_,j]=v.useState(false),O=Ue(),se=v.useMemo(()=>({...kt,...s}),[s]),Se=v.useMemo(()=>a||(t?Gr(t):e&&wt[e]?wt[e]:null),[a,t,e]),Nt=v.useMemo(()=>{if(o)return o;if(e){let H=Ct[e];if(H?.defaultPostPreset)return H.defaultPostPreset}return tr},[o,e]);v.useEffect(()=>{let H=w.current;if(!H||!Se)return;let Be=H.clientWidth||1,it=H.clientHeight||1,je=Dn(se,H),A=new G.WebGLRenderer({antialias:true,alpha:false,powerPreference:"high-performance"}),nr=g??Math.min(window.devicePixelRatio||1,2);A.setPixelRatio(nr),A.setSize(Be,it),A.setClearColor(new G.Color(je.background),1),A.domElement.dataset.gdsPart="shader-canvas",A.domElement.style.width="100%",A.domElement.style.height="100%",A.domElement.style.display="block",H.appendChild(A.domElement);let L;try{L=Se({renderer:A,width:Be,height:it,palette:je});}catch(F){if(F instanceof st)r?.(F),L=wt.space({renderer:A,width:Be,height:it,palette:je});else throw A.dispose(),A.domElement.parentElement===H&&H.removeChild(A.domElement),F}let Ze=Mt[Nt]??Mt[tr],Ne=Mn({renderer:A,scene:L.scene,camera:L.camera,preset:Ze,width:Be,height:it}),ge=new G.Clock,pe=0,he=p&&!O,Or=true,Br=()=>{if(pe=requestAnimationFrame(Br),!he||i&&!Or)return;let F=ge.getDelta(),ie=ge.getElapsedTime();L.update?.(ie,F),Ne.composer.render(F);};Br(),he&&j(true);let Vr=new ResizeObserver(([F])=>{let ie=Math.max(1,Math.floor(F.contentRect.width)),lt=Math.max(1,Math.floor(F.contentRect.height));A.setSize(ie,lt),Ne.resize(ie,lt),L.resize?.(ie,lt);});Vr.observe(H);let zr=new IntersectionObserver(([F])=>{Or=F.isIntersecting;},{threshold:.05});zr.observe(H);let _r=new MutationObserver(()=>{if(!w.current)return;let F=Dn(se,w.current);A.setClearColor(new G.Color(F.background),1),L.setPalette?.(F);});_r.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-theme","data-gds-theme","data-grade-mode"]});let $r=L,Ht=$r.setMouse?F=>{let ie=H.getBoundingClientRect(),lt=(F.clientX-ie.left)/ie.width,In=1-(F.clientY-ie.top)/ie.height;$r.setMouse(lt,In);}:null;return Ht&&H.addEventListener("pointermove",Ht),We.current={toggle:()=>{he=!he,S(he);},setPalette:F=>{A.setClearColor(new G.Color(F.background),1),L.setPalette?.(F);},setPostPreset:F=>{let ie=Mt[F];ie&&Ne.setPreset(ie);}},()=>{cancelAnimationFrame(pe),Vr.disconnect(),zr.disconnect(),_r.disconnect(),Ht&&H.removeEventListener("pointermove",Ht),Ne.dispose(),L.dispose?.(),A.dispose(),A.domElement.parentElement===H&&H.removeChild(A.domElement),We.current=null;}},[Se,Nt,se,p,O,i,g,r]);let We=v.useRef(null),Et=()=>We.current?.toggle();return v.createElement(we,{ref:H=>{w.current=H,typeof R=="function"?R(H):R&&(R.current=H);},aspect:c,radius:l,border:m,"aria-label":h,className:y,style:f,"data-gds-part":"three-scene"},!_&&u&&v.createElement("img",{src:u,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),d&&v.createElement("div",{"data-gds-part":"scene-controls",className:n("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/30 to-transparent")},v.createElement(re,{size:"icon",variant:"secondary",onClick:Et},k?v.createElement(Pause,{className:"h-4 w-4"}):v.createElement(Play,{className:"h-4 w-4"}))))});or.displayName="ThreeScene";var ar=v.forwardRef(({preset:e,live:t="hover",postPreset:r,palette:o,className:s,aspect:a="video",radius:d="lg",label:p,hideLabel:i=false,onClick:c},l)=>{let m=Ct[e],[u,h]=v.useState(false),y=t==="always"||t==="hover"&&u;return v.createElement("div",{ref:l,"data-gds-part":"picker-card","data-gds-preset":e,onMouseEnter:()=>h(true),onMouseLeave:()=>h(false),onClick:c,className:n("group cursor-pointer flex flex-col gap-2",s)},y?v.createElement(or,{preset:e,postPreset:r,palette:o,aspect:a,radius:d,autoPlay:true,controls:false,pauseOffscreen:true,poster:m?.poster,maxDpr:1}):v.createElement(we,{aspect:a,radius:d,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},m?.poster?v.createElement("img",{src:m.poster,alt:m.label,className:"w-full h-full object-cover"}):v.createElement("div",{className:"absolute inset-0 flex items-center justify-center text-xs text-muted-foreground"},m?.label??e)),!i&&v.createElement("div",{className:"flex items-baseline justify-between text-xs"},v.createElement("span",{className:"font-medium text-foreground","data-gds-part":"preset-label"},p??m?.label??e),m?.tags?.[0]&&v.createElement("span",{className:"text-muted-foreground"},m.tags[0])))});ar.displayName="ShaderPresetPreview";function pl({value:e,onChange:t,filterTags:r,live:o="hover",postPreset:s,palette:a,columns:d=3,className:p}){let i=v.useMemo(()=>r?.length?St.filter(l=>r.some(m=>l.tags.includes(m))):St,[r]);return v.createElement("div",{"data-gds-part":"preset-grid",role:"radiogroup",className:n("grid grid-cols-2 gap-3",d===2?"md:grid-cols-2":d===4?"md:grid-cols-4":"md:grid-cols-3",p)},i.map(l=>{let m=e===l.id;return v.createElement("div",{key:l.id,className:"relative",role:"radio","aria-checked":m},v.createElement(ar,{preset:l.id,postPreset:s,palette:a,live:o,onClick:()=>t?.(l.id),className:n("transition-all",m&&"ring-2 ring-primary ring-offset-2 ring-offset-background rounded-lg")}),m&&v.createElement("div",{"data-gds-part":"picker-selected-badge",className:"absolute top-2 right-2 rounded-full bg-primary text-primary-foreground p-1 shadow-sm"},v.createElement(Check,{className:"h-3.5 w-3.5"})))}))}function gl({children:e}){let t=useRef(null);return useEffect(()=>{let r=new fl({duration:1.2,easing:s=>Math.min(1,1.001-Math.pow(2,-10*s)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:true});t.current=r;function o(s){r.raf(s),requestAnimationFrame(o);}return requestAnimationFrame(o),()=>{r.destroy(),t.current=null;}},[]),React.createElement(React.Fragment,null,e)}function xl({className:e}){let t=Ke();if(!t)return null;let{theme:r,themes:o,setThemeId:s,deleteTheme:a}=t;return v.createElement(Je,null,v.createElement(Qe,{asChild:true},v.createElement(re,{variant:"ghost",size:"sm",className:n("gap-2",e),"aria-label":"Switch theme"},v.createElement(Palette,{className:"h-4 w-4"}),v.createElement("span",{className:"hidden sm:inline"},r.name))),v.createElement(Ve,{className:"w-80 p-2",align:"end"},v.createElement("div",{className:"flex items-start justify-between gap-2 px-2 py-1.5 mb-1"},v.createElement("div",null,v.createElement("div",{className:"text-xs font-medium text-muted-foreground"},"Theme"),v.createElement("div",{className:"text-xs text-muted-foreground/80"},"Switch the skin applied site-wide.")),v.createElement("button",{type:"button",onClick:()=>Sr(r),className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",title:"Download the active theme as a markdown spec \u2014 paste into a fresh LLM prompt"},v.createElement(Download,{className:"h-3 w-3"}),".md")),v.createElement("div",{className:"flex flex-col gap-0.5"},o.map(d=>{let p=d.id===r.id,i=d.id in Pe,c=d.ramps.primary[500],l=d.ramps.accent[500],m=d.ramps.neutral[500];return v.createElement("div",{key:d.id,className:n("group flex items-start gap-3 rounded-md px-2 py-2 text-left transition-colors","hover:bg-muted",p&&"bg-muted")},v.createElement("button",{type:"button",onClick:()=>s(d.id),className:"flex items-start gap-3 flex-1 min-w-0 text-left"},v.createElement("div",{className:"mt-0.5 flex shrink-0 overflow-hidden rounded-md border border-border"},v.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${c})`},"aria-hidden":true}),v.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${l})`},"aria-hidden":true}),v.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${m})`},"aria-hidden":true})),v.createElement("div",{className:"min-w-0 flex-1"},v.createElement("div",{className:"flex items-center gap-2"},v.createElement("span",{className:"text-sm font-medium truncate text-foreground"},d.name),d.tagline&&v.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},d.tagline)),d.description&&v.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},d.description))),p&&v.createElement(Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!i&&!p&&v.createElement("button",{type:"button",onClick:u=>{u.stopPropagation(),a(d.id);},className:"mt-1 opacity-0 group-hover:opacity-100 transition-opacity rounded p-1 hover:bg-destructive/10 hover:text-destructive","aria-label":`Delete theme ${d.name}`},v.createElement(Trash2,{className:"h-3.5 w-3.5"})))}))))}var An=[{mode:"superLight",label:"Super light",icon:SunDim,tooltip:"Super light \u2014 airy, low contrast"},{mode:"light",label:"Light",icon:Sun,tooltip:"Light"},{mode:"dark",label:"Dark",icon:Moon,tooltip:"Dark"},{mode:"superDark",label:"Super dark",icon:MoonStar,tooltip:"Super dark \u2014 OLED, high contrast"}];function Sl({className:e,variant:t="icons"}){let r=Ke();if(!r)return null;let{mode:o,setMode:s}=r;return t==="labeled"?v.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:n("inline-flex flex-wrap gap-1 rounded-md border border-border bg-background p-1",e)},An.map(({mode:a,label:d,icon:p})=>{let i=o===a;return v.createElement("button",{key:a,type:"button",role:"radio","aria-checked":i,onClick:()=>s(a),className:n("flex items-center gap-2 rounded px-3 py-1.5 text-sm transition-colors",i?"bg-primary text-primary-foreground":"hover:bg-accent hover:text-accent-foreground")},v.createElement(p,{className:"h-4 w-4"}),v.createElement("span",null,d))})):v.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:n("inline-flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5",e)},An.map(({mode:a,icon:d,tooltip:p})=>{let i=o===a;return v.createElement("button",{key:a,type:"button",role:"radio","aria-checked":i,"aria-label":p,title:p,onClick:()=>s(a),className:n("flex h-7 w-7 items-center justify-center rounded transition-colors",i?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground")},v.createElement(d,{className:"h-3.5 w-3.5"}))}))}function kl(){let{isDark:e,setMode:t}=Hr();return React.createElement(re,{variant:"ghost",size:"sm",onClick:()=>t(e?"light":"dark"),className:"gap-2","aria-label":e?"Switch to light mode":"Switch to dark mode"},e?React.createElement(React.Fragment,null,React.createElement(Sun,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Light")):React.createElement(React.Fragment,null,React.createElement(Moon,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Dark")))}export{ln as ALL_MODES,Vn as Accordion,Wr as AccordionContent,Kr as AccordionItem,Ur as AccordionTrigger,jr as Alert,qr as AlertDescription,Zr as AlertTitle,ro as AppShell,no as AppShellAside,io as AppShellFooter,oo as AppShellHeader,so as AppShellMain,ao as AppShellNav,lo as Avatar,po as AvatarFallback,co as AvatarImage,jt as BUILT_IN_INPUTS,Kn as Badge,Ta as Breadcrumb,ka as BreadcrumbEllipsis,wa as BreadcrumbItem,Sa as BreadcrumbLink,Pa as BreadcrumbList,Ca as BreadcrumbPage,Ma as BreadcrumbSeparator,re as Button,At as Calendar,go as CalendarDayButton,ho as Card,xo as CardContent,bo as CardDescription,Ro as CardFooter,yo as CardHeader,vo as CardTitle,To as Checkbox,ts as DatePicker,rs as DateRangePicker,as as Dialog,ss as DialogClose,So as DialogContent,No as DialogDescription,Mo as DialogFooter,Co as DialogHeader,ir as DialogOverlay,wo as DialogPortal,ko as DialogTitle,ns as DialogTrigger,cs as DropdownMenu,Ao as DropdownMenuCheckboxItem,Lo as DropdownMenuContent,ms as DropdownMenuGroup,Do as DropdownMenuItem,Fo as DropdownMenuLabel,us as DropdownMenuPortal,gs as DropdownMenuRadioGroup,Io as DropdownMenuRadioItem,Go as DropdownMenuSeparator,Oo as DropdownMenuShortcut,fs as DropdownMenuSub,Ho as DropdownMenuSubContent,Eo as DropdownMenuSubTrigger,ps as DropdownMenuTrigger,Ln as FRAGMENT_HEADER,qo as Flex,xi as GRADE_PRE_HYDRATION_SCRIPT,Sl as GradeModeSwitcher,Ri as GradeThemeProvider,xl as GradeThemeSwitcher,jo as Grid,Bo as Input,Vo as Label,gl as LenisProvider,Dr as Map,Ar as MapMarker,we as MediaSurface,Je as Popover,Jn as PopoverAnchor,Ve as PopoverContent,Qe as PopoverTrigger,zo as Progress,_o as RadioGroup,$o as RadioGroupItem,Ts as ResizableHandle,Rs as ResizablePanel,xs as ResizablePanelGroup,Sn as RivePlayer,Uo as Row,Yo as ScrollArea,dr as ScrollBar,Hs as Select,Qo as SelectContent,Ls as SelectGroup,ta as SelectItem,ea as SelectLabel,pr as SelectScrollDownButton,cr as SelectScrollUpButton,ra as SelectSeparator,Jo as SelectTrigger,Ds as SelectValue,oa as Separator,st as ShaderCompileError,pl as ShaderPresetPicker,ar as ShaderPresetPreview,Fs as Sheet,Os as SheetClose,na as SheetContent,da as SheetDescription,ia as SheetFooter,sa as SheetHeader,ur as SheetOverlay,aa as SheetPortal,la as SheetTitle,Gs as SheetTrigger,Ka as SideMenu,Ua as SimpleTabs,Ya as SimpleTabsContent,Za as SimpleTabsList,Wa as SimpleTabsPanel,ja as SimpleTabsRoot,qa as SimpleTabsTrigger,Vs as Skeleton,ca as Slider,ma as Stack,ua as Switch,fa as Table,ha as TableBody,Ra as TableCaption,xa as TableCell,ya as TableFooter,ba as TableHead,ga as TableHeader,va as TableRow,Us as Tabs,Da as TabsContent,Ha as TabsList,La as TabsTrigger,Aa as Textarea,kl as ThemeToggle,or as ThreeScene,Fa as Toggle,Ba as ToggleGroup,Va as ToggleGroupItem,vt as Tooltip,tt as TooltipContent,gr as TooltipProvider,bt as TooltipTrigger,wn as VideoPlayer,Qr as appShellAsideVariants,to as appShellFooterVariants,Xr as appShellHeaderVariants,eo as appShellMainVariants,Jr as appShellNavVariants,Zt as applyThemeToRoot,uo as badgeVariants,Gr as buildFragmentShaderScene,Pe as builtInThemes,dt as buttonVariants,Tt as calmInput,n as cn,tr as defaultPostPreset,at as defaultThemeId,kr as deleteUserTheme,bi as duplicateTheme,Rr as energyInput,Zo as flexVariants,_e as generateTheme,$e as getTheme,Wo as gridVariants,Cr as listThemes,nn as listUserThemes,Mr as loadUserThemeInput,Mt as postPresets,Ko as rowVariants,Yt as saveUserTheme,wt as sceneRegistry,Ct as shaderPresetById,St as shaderPresets,Yr as shellVariants,pa as stackVariants,Pr as themeToCSSVars,Ia as toggleVariants,Hr as useGradeTheme,Ke as useMaybeGradeTheme,Ue as usePrefersReducedMotion};//# sourceMappingURL=index.mjs.map
|
|
432
432
|
//# sourceMappingURL=index.mjs.map
|