@gradeui/ui 0.9.0 → 1.0.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/components/ui/accordion.md +30 -0
- package/components/ui/ai-chat-composer.md +37 -0
- package/components/ui/ai-chat.md +81 -0
- package/components/ui/alert.md +0 -0
- package/components/ui/app-shell.md +178 -0
- package/components/ui/avatar.md +29 -0
- package/components/ui/badge.md +18 -0
- package/components/ui/breadcrumb.md +101 -0
- package/components/ui/button.md +63 -0
- package/components/ui/calendar.md +39 -0
- package/components/ui/callout.md +45 -0
- package/components/ui/card.md +40 -0
- package/components/ui/carousel.md +56 -0
- package/components/ui/chart.md +48 -0
- package/components/ui/checkbox.md +20 -0
- package/components/ui/collapsible.md +28 -0
- package/components/ui/command.md +38 -0
- package/components/ui/date-picker.md +52 -0
- package/components/ui/dialog.md +40 -0
- package/components/ui/dropdown-menu.md +45 -0
- package/components/ui/flex.md +41 -0
- package/components/ui/grid.md +44 -0
- package/components/ui/hover-card.md +35 -0
- package/components/ui/input.md +17 -0
- package/components/ui/label.md +15 -0
- package/components/ui/map.md +80 -0
- package/components/ui/media-surface.md +61 -0
- package/components/ui/multi-select.md +114 -0
- package/components/ui/popover.md +43 -0
- package/components/ui/progress.md +15 -0
- package/components/ui/radio-group.md +37 -0
- package/components/ui/resizable.md +30 -0
- package/components/ui/rive-player.md +38 -0
- package/components/ui/row.md +32 -0
- package/components/ui/scroll-area.md +27 -0
- package/components/ui/select.md +24 -0
- package/components/ui/separator.md +16 -0
- package/components/ui/shader-preset-picker.md +26 -0
- package/components/ui/shader-preset-preview.md +24 -0
- package/components/ui/sheet.md +52 -0
- package/components/ui/side-menu.md +0 -0
- package/components/ui/sidebar.md +121 -0
- package/components/ui/simple-tabs.md +0 -0
- package/components/ui/skeleton.md +17 -0
- package/components/ui/slider.md +48 -0
- package/components/ui/sortable.md +101 -0
- package/components/ui/stack.md +50 -0
- package/components/ui/switch.md +20 -0
- package/components/ui/table.md +28 -0
- package/components/ui/tabs.md +56 -0
- package/components/ui/textarea.md +14 -0
- package/components/ui/three-scene.md +226 -0
- package/components/ui/toast.md +38 -0
- package/components/ui/toggle-group.md +43 -0
- package/components/ui/toggle.md +36 -0
- package/components/ui/toolbar.md +167 -0
- package/components/ui/tooltip.md +28 -0
- package/components/ui/video-player.md +27 -0
- package/dist/contracts.d.mts +14 -0
- package/dist/contracts.d.ts +14 -0
- package/dist/contracts.js +63 -0
- package/dist/contracts.js.map +1 -0
- package/dist/contracts.mjs +63 -0
- package/dist/contracts.mjs.map +1 -0
- package/dist/index.d.mts +1339 -191
- package/dist/index.d.ts +1339 -191
- package/dist/index.js +111 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +111 -49
- package/dist/index.mjs.map +1 -1
- package/dist/map/google.js +1 -0
- package/dist/map/google.js.map +1 -1
- package/dist/map/google.mjs +1 -0
- package/dist/map/google.mjs.map +1 -1
- package/dist/map/mapbox.js +1 -0
- package/dist/map/mapbox.js.map +1 -1
- package/dist/map/mapbox.mjs +1 -0
- package/dist/map/mapbox.mjs.map +1 -1
- package/dist/map/maplibre.js +1 -0
- package/dist/map/maplibre.js.map +1 -1
- package/dist/map/maplibre.mjs +1 -0
- package/dist/map/maplibre.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.js +1 -1
- package/dist/tailwind-preset.js.map +1 -1
- package/dist/tailwind-preset.mjs +1 -1
- package/dist/tailwind-preset.mjs.map +1 -1
- package/package.json +26 -10
package/dist/index.js
CHANGED
|
@@ -1,6 +1,68 @@
|
|
|
1
|
-
'use strict';var v=require('react'),me=require('@radix-ui/react-accordion'),lucideReact=require('lucide-react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),classVarianceAuthority=require('class-variance-authority'),reactSlot=require('@radix-ui/react-slot'),Ce=require('@radix-ui/react-avatar'),reactDayPicker=require('react-day-picker'),ct=require('@radix-ui/react-checkbox'),dateFns=require('date-fns'),ve=require('@radix-ui/react-popover'),B=require('@radix-ui/react-dialog'),x=require('@radix-ui/react-dropdown-menu'),lr=require('@radix-ui/react-label'),ut=require('@radix-ui/react-progress'),De=require('@radix-ui/react-radio-group'),et=require('react-resizable-panels'),ue=require('@radix-ui/react-scroll-area'),T=require('@radix-ui/react-select'),mr=require('@radix-ui/react-separator'),Me=require('@radix-ui/react-slider'),ht=require('@radix-ui/react-switch'),xe=require('@radix-ui/react-tabs'),be=require('@radix-ui/react-tooltip'),hr=require('@radix-ui/react-toggle'),rt=require('@radix-ui/react-toggle-group'),reactDom=require('react-dom'),G=require('three'),postprocessing=require('postprocessing'),fl=require('lenis');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var v__namespace=/*#__PURE__*/_interopNamespace(v);var me__namespace=/*#__PURE__*/_interopNamespace(me);var Ce__namespace=/*#__PURE__*/_interopNamespace(Ce);var ct__namespace=/*#__PURE__*/_interopNamespace(ct);var ve__namespace=/*#__PURE__*/_interopNamespace(ve);var B__namespace=/*#__PURE__*/_interopNamespace(B);var x__namespace=/*#__PURE__*/_interopNamespace(x);var lr__namespace=/*#__PURE__*/_interopNamespace(lr);var ut__namespace=/*#__PURE__*/_interopNamespace(ut);var De__namespace=/*#__PURE__*/_interopNamespace(De);var et__namespace=/*#__PURE__*/_interopNamespace(et);var ue__namespace=/*#__PURE__*/_interopNamespace(ue);var T__namespace=/*#__PURE__*/_interopNamespace(T);var mr__namespace=/*#__PURE__*/_interopNamespace(mr);var Me__namespace=/*#__PURE__*/_interopNamespace(Me);var ht__namespace=/*#__PURE__*/_interopNamespace(ht);var xe__namespace=/*#__PURE__*/_interopNamespace(xe);var be__namespace=/*#__PURE__*/_interopNamespace(be);var hr__namespace=/*#__PURE__*/_interopNamespace(hr);var rt__namespace=/*#__PURE__*/_interopNamespace(rt);var G__namespace=/*#__PURE__*/_interopNamespace(G);var fl__default=/*#__PURE__*/_interopDefault(fl);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 tailwindMerge.twMerge(clsx.clsx(e))}var Vn=me__namespace.Root,Kr=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(me__namespace.Item,{ref:r,className:n("border-b",e),...t}));Kr.displayName="AccordionItem";var Ur=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(me__namespace.Header,{className:"flex"},v__namespace.createElement(me__namespace.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__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));Ur.displayName=me__namespace.Trigger.displayName;var Wr=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(me__namespace.Content,{ref:o,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...r},v__namespace.createElement("div",{className:n("pb-4 pt-0",e)},t)));Wr.displayName=me__namespace.Content.displayName;var _n=classVarianceAuthority.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__namespace.forwardRef(({className:e,variant:t,...r},o)=>v__namespace.createElement("div",{ref:o,role:"alert",className:n(_n({variant:t}),e),...r}));jr.displayName="Alert";var Zr=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("h5",{ref:r,className:n("mb-1 font-medium leading-none tracking-tight",e),...t}));Zr.displayName="AlertTitle";var qr=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("div",{ref:r,className:n("text-sm [&_p]:leading-relaxed",e),...t}));qr.displayName="AlertDescription";var Yr=classVarianceAuthority.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=classVarianceAuthority.cva("rds-app-shell-header",{variants:{sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{sticky:false}}),Jr=classVarianceAuthority.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=classVarianceAuthority.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=classVarianceAuthority.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=classVarianceAuthority.cva("rds-app-shell-footer border-t bg-background"),ro=v__namespace.forwardRef(({className:e,nav:t,asChild:r=false,...o},s)=>v__namespace.createElement(r?reactSlot.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__namespace.forwardRef(({className:e,sticky:t,asChild:r=false,...o},s)=>v__namespace.createElement(r?reactSlot.Slot:"header",{ref:s,"data-gds-part":"app-shell-header",className:n(Xr({sticky:t,className:e})),...o}));oo.displayName="AppShellHeader";var ao=v__namespace.forwardRef(({className:e,placement:t,sticky:r,asChild:o=false,...s},a)=>v__namespace.createElement(o?reactSlot.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__namespace.forwardRef(({className:e,sticky:t,asChild:r=false,...o},s)=>v__namespace.createElement(r?reactSlot.Slot:"aside",{ref:s,"data-gds-part":"app-shell-aside",className:n(Qr({sticky:t,className:e})),...o}));no.displayName="AppShellAside";var so=v__namespace.forwardRef(({className:e,maxWidth:t,asChild:r=false,...o},s)=>v__namespace.createElement(r?reactSlot.Slot:"main",{ref:s,"data-gds-part":"app-shell-main",className:n(eo({maxWidth:t,className:e})),...o}));so.displayName="AppShellMain";var io=v__namespace.forwardRef(({className:e,asChild:t=false,...r},o)=>v__namespace.createElement(t?reactSlot.Slot:"footer",{ref:o,"data-gds-part":"app-shell-footer",className:n(to({className:e})),...r}));io.displayName="AppShellFooter";var lo=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(Ce__namespace.Root,{ref:r,className:n("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...t}));lo.displayName=Ce__namespace.Root.displayName;var co=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(Ce__namespace.Image,{ref:r,className:n("aspect-square h-full w-full",e),...t}));co.displayName=Ce__namespace.Image.displayName;var po=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(Ce__namespace.Fallback,{ref:r,className:n("flex h-full w-full items-center justify-center rounded-full bg-muted",e),...t}));po.displayName=Ce__namespace.Fallback.displayName;var uo=classVarianceAuthority.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__namespace.createElement("div",{className:n(uo({variant:t,rounded:r}),e),...o})}var dt=classVarianceAuthority.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__namespace.forwardRef(({className:e,variant:t,size:r,asChild:o=false,...s},a)=>v__namespace.createElement(o?reactSlot.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=reactDayPicker.getDefaultClassNames();return v__namespace.createElement(reactDayPicker.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__namespace.createElement("div",{"data-slot":"calendar",ref:l,className:n(c),...m}),Chevron:({className:c,orientation:l,...m})=>l==="left"?v__namespace.createElement(lucideReact.ChevronLeftIcon,{className:n("size-4",c),...m}):l==="right"?v__namespace.createElement(lucideReact.ChevronRightIcon,{className:n("size-4",c),...m}):v__namespace.createElement(lucideReact.ChevronDownIcon,{className:n("size-4",c),...m}),DayButton:go,WeekNumber:({children:c,...l})=>v__namespace.createElement("td",{...l},v__namespace.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=reactDayPicker.getDefaultClassNames(),a=v__namespace.useRef(null);return v__namespace.useEffect(()=>{r.focused&&a.current?.focus();},[r.focused]),v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("div",{ref:r,"data-gds-part":"card-description",className:n("text-sm text-muted-foreground",e),...t}));bo.displayName="CardDescription";var xo=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("div",{ref:r,"data-gds-part":"card-content",className:n("p-6 pt-0",e),...t}));xo.displayName="CardContent";var Ro=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(ct__namespace.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__namespace.createElement(ct__namespace.Indicator,{className:n("flex items-center justify-center text-current")},v__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))));To.displayName=ct__namespace.Root.displayName;var Je=ve__namespace.Root,Qe=ve__namespace.Trigger,Jn=ve__namespace.Anchor,Ve=v__namespace.forwardRef(({className:e,align:t="center",sideOffset:r=4,...o},s)=>v__namespace.createElement(ve__namespace.Portal,null,v__namespace.createElement(ve__namespace.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__namespace.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__namespace.createElement(Je,null,v__namespace.createElement(Qe,{asChild:true},v__namespace.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__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?dateFns.format(e,i):v__namespace.createElement("span",null,r))),v__namespace.createElement(Ve,{className:n("w-auto p-0",a),align:d,side:p},v__namespace.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__namespace.createElement(Je,null,v__namespace.createElement(Qe,{asChild:true},v__namespace.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__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?.from?e.to?v__namespace.createElement(v__namespace.Fragment,null,dateFns.format(e.from,i)," \u2013"," ",dateFns.format(e.to,i)):dateFns.format(e.from,i):v__namespace.createElement("span",null,r))),v__namespace.createElement(Ve,{className:n("w-auto p-0",a),align:d,side:p},v__namespace.createElement(At,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:m,captionLayout:c,initialFocus:true})))}var as=B__namespace.Root,ns=B__namespace.Trigger,wo=B__namespace.Portal,ss=B__namespace.Close,ir=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.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__namespace.Overlay.displayName;var So=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(wo,null,v__namespace.createElement(ir,null),v__namespace.createElement(B__namespace.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__namespace.createElement(B__namespace.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__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),v__namespace.createElement("span",{className:"sr-only"},"Close")))));So.displayName=B__namespace.Content.displayName;var Co=({className:e,...t})=>v__namespace.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__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.Title,{ref:r,className:n("text-lg font-semibold leading-none tracking-tight",e),...t}));ko.displayName=B__namespace.Title.displayName;var No=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.Description,{ref:r,className:n("text-sm text-muted-foreground",e),...t}));No.displayName=B__namespace.Description.displayName;var cs=x__namespace.Root,ps=x__namespace.Trigger,ms=x__namespace.Group,us=x__namespace.Portal,fs=x__namespace.Sub,gs=x__namespace.RadioGroup,Eo=v__namespace.forwardRef(({className:e,inset:t,children:r,...o},s)=>v__namespace.createElement(x__namespace.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__namespace.createElement(lucideReact.ChevronRight,{className:"ml-auto"})));Eo.displayName=x__namespace.SubTrigger.displayName;var Ho=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(x__namespace.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__namespace.SubContent.displayName;var Lo=v__namespace.forwardRef(({className:e,sideOffset:t=4,...r},o)=>v__namespace.createElement(x__namespace.Portal,null,v__namespace.createElement(x__namespace.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__namespace.Content.displayName;var Do=v__namespace.forwardRef(({className:e,inset:t,...r},o)=>v__namespace.createElement(x__namespace.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__namespace.Item.displayName;var Ao=v__namespace.forwardRef(({className:e,children:t,checked:r,...o},s)=>v__namespace.createElement(x__namespace.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__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v__namespace.createElement(x__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))),t));Ao.displayName=x__namespace.CheckboxItem.displayName;var Io=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(x__namespace.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__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v__namespace.createElement(x__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Circle,{className:"h-2 w-2 fill-current"}))),t));Io.displayName=x__namespace.RadioItem.displayName;var Fo=v__namespace.forwardRef(({className:e,inset:t,...r},o)=>v__namespace.createElement(x__namespace.Label,{ref:o,className:n("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...r}));Fo.displayName=x__namespace.Label.displayName;var Go=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(x__namespace.Separator,{ref:r,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));Go.displayName=x__namespace.Separator.displayName;var Oo=({className:e,...t})=>v__namespace.createElement("span",{className:n("ml-auto text-xs tracking-widest opacity-60",e),...t});Oo.displayName="DropdownMenuShortcut";var Bo=v__namespace.forwardRef(({className:e,type:t,...r},o)=>v__namespace.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=classVarianceAuthority.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Vo=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(lr__namespace.Root,{ref:r,className:n(ys(),e),...t}));Vo.displayName=lr__namespace.Root.displayName;var zo=v__namespace.forwardRef(({className:e,value:t,...r},o)=>v__namespace.createElement(ut__namespace.Root,{ref:o,className:n("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...r},v__namespace.createElement(ut__namespace.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));zo.displayName=ut__namespace.Root.displayName;var _o=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(De__namespace.Root,{className:n("grid gap-2",e),...t,ref:r}));_o.displayName=De__namespace.Root.displayName;var $o=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(De__namespace.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__namespace.createElement(De__namespace.Indicator,{className:"flex items-center justify-center"},v__namespace.createElement(lucideReact.Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));$o.displayName=De__namespace.Item.displayName;var xs=({className:e,...t})=>v__namespace.createElement(et__namespace.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__namespace.Panel,Ts=({withHandle:e,className:t,...r})=>v__namespace.createElement(et__namespace.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__namespace.createElement("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border"},v__namespace.createElement(lucideReact.GripVertical,{className:"h-2.5 w-2.5"})));var Ko=classVarianceAuthority.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__namespace.forwardRef(({className:e,gap:t,align:r,justify:o,wrap:s,asChild:a=false,...d},p)=>v__namespace.createElement(a?reactSlot.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=classVarianceAuthority.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__namespace.forwardRef(({className:e,cols:t,gap:r,align:o,asChild:s=false,...a},d)=>v__namespace.createElement(s?reactSlot.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=classVarianceAuthority.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__namespace.forwardRef(({className:e,direction:t,gap:r,align:o,justify:s,wrap:a,asChild:d=false,...p},i)=>v__namespace.createElement(d?reactSlot.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__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(ue__namespace.Root,{ref:o,className:n("relative overflow-hidden",e),...r},v__namespace.createElement(ue__namespace.Viewport,{className:"h-full w-full rounded-[inherit]"},t),v__namespace.createElement(dr,null),v__namespace.createElement(ue__namespace.Corner,null)));Yo.displayName=ue__namespace.Root.displayName;var dr=v__namespace.forwardRef(({className:e,orientation:t="vertical",...r},o)=>v__namespace.createElement(ue__namespace.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__namespace.createElement(ue__namespace.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));dr.displayName=ue__namespace.ScrollAreaScrollbar.displayName;var Hs=T__namespace.Root,Ls=T__namespace.Group,Ds=T__namespace.Value,Jo=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(T__namespace.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__namespace.createElement(T__namespace.Icon,{asChild:true},v__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 opacity-50"}))));Jo.displayName=T__namespace.Trigger.displayName;var cr=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(T__namespace.ScrollUpButton,{ref:r,className:n("flex cursor-default items-center justify-center py-1",e),...t},v__namespace.createElement(lucideReact.ChevronUp,{className:"h-4 w-4"})));cr.displayName=T__namespace.ScrollUpButton.displayName;var pr=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(T__namespace.ScrollDownButton,{ref:r,className:n("flex cursor-default items-center justify-center py-1",e),...t},v__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4"})));pr.displayName=T__namespace.ScrollDownButton.displayName;var Qo=v__namespace.forwardRef(({className:e,children:t,position:r="popper",...o},s)=>v__namespace.createElement(T__namespace.Portal,null,v__namespace.createElement(T__namespace.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__namespace.createElement(cr,null),v__namespace.createElement(T__namespace.Viewport,{className:n("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},t),v__namespace.createElement(pr,null))));Qo.displayName=T__namespace.Content.displayName;var ea=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(T__namespace.Label,{ref:r,className:n("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));ea.displayName=T__namespace.Label.displayName;var ta=v__namespace.forwardRef(({className:e,children:t,...r},o)=>v__namespace.createElement(T__namespace.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__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},v__namespace.createElement(T__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))),v__namespace.createElement(T__namespace.ItemText,null,t)));ta.displayName=T__namespace.Item.displayName;var ra=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(T__namespace.Separator,{ref:r,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));ra.displayName=T__namespace.Separator.displayName;var oa=v__namespace.forwardRef(({className:e,orientation:t="horizontal",decorative:r=true,...o},s)=>v__namespace.createElement(mr__namespace.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__namespace.Root.displayName;var Fs=B__namespace.Root,Gs=B__namespace.Trigger,Os=B__namespace.Close,aa=B__namespace.Portal,ur=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.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__namespace.Overlay.displayName;var Bs=classVarianceAuthority.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__namespace.forwardRef(({side:e="right",className:t,children:r,...o},s)=>v__namespace.createElement(aa,null,v__namespace.createElement(ur,null),v__namespace.createElement(B__namespace.Content,{ref:s,className:n(Bs({side:e}),t),...o},r,v__namespace.createElement(B__namespace.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__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),v__namespace.createElement("span",{className:"sr-only"},"Close")))));na.displayName=B__namespace.Content.displayName;var sa=({className:e,...t})=>v__namespace.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__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.Title,{ref:r,className:n("text-lg font-semibold text-foreground",e),...t}));la.displayName=B__namespace.Title.displayName;var da=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(B__namespace.Description,{ref:r,className:n("text-sm text-muted-foreground",e),...t}));da.displayName=B__namespace.Description.displayName;function Vs({className:e,...t}){return React.createElement("div",{className:n("animate-pulse rounded-md bg-muted",e),...t})}var ca=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(Me__namespace.Root,{ref:r,className:n("relative flex w-full touch-none select-none items-center",e),...t},v__namespace.createElement(Me__namespace.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary"},v__namespace.createElement(Me__namespace.Range,{className:"absolute h-full bg-primary"})),v__namespace.createElement(Me__namespace.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__namespace.Root.displayName;var pa=classVarianceAuthority.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__namespace.forwardRef(({className:e,gap:t,align:r,asChild:o=false,...s},a)=>v__namespace.createElement(o?reactSlot.Slot:"div",{ref:a,"data-gds-part":"stack",className:n(pa({gap:t,align:r,className:e})),...s}));ma.displayName="Stack";var ua=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(ht__namespace.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__namespace.createElement(ht__namespace.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__namespace.Root.displayName;var fa=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("div",{className:"relative w-full overflow-auto"},v__namespace.createElement("table",{ref:r,className:n("w-full caption-bottom text-sm",e),...t})));fa.displayName="Table";var ga=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("thead",{ref:r,className:n("[&_tr]:border-b",e),...t}));ga.displayName="TableHeader";var ha=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("tbody",{ref:r,className:n("[&_tr:last-child]:border-0",e),...t}));ha.displayName="TableBody";var ya=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement("caption",{ref:r,className:n("mt-4 text-sm text-muted-foreground",e),...t}));Ra.displayName="TableCaption";var Ta=v__namespace.forwardRef(({...e},t)=>v__namespace.createElement("nav",{ref:t,"aria-label":"breadcrumb",...e}));Ta.displayName="Breadcrumb";var Pa=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.forwardRef(({asChild:e,className:t,href:r,...o},s)=>e?v__namespace.createElement("span",{ref:s,className:n(fr,t),...o}):r?v__namespace.createElement("a",{ref:s,href:r,className:n(fr,t),...o}):v__namespace.createElement("button",{ref:s,type:"button",className:n(fr,t),...o}));Sa.displayName="BreadcrumbLink";var Ca=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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__namespace.createElement("li",{role:"presentation","aria-hidden":"true",className:n("[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",t),...r},e??v__namespace.createElement(lucideReact.ChevronRight,null));Ma.displayName="BreadcrumbSeparator";var ka=({className:e,...t})=>v__namespace.createElement("span",{role:"presentation","aria-hidden":"true",className:n("flex h-5 w-5 items-center justify-center",e),...t},v__namespace.createElement(lucideReact.MoreHorizontal,{className:"h-3.5 w-3.5"}),v__namespace.createElement("span",{className:"sr-only"},"More"));ka.displayName="BreadcrumbEllipsis";var gr=be__namespace.Provider,vt=be__namespace.Root,bt=be__namespace.Trigger,tt=v__namespace.forwardRef(({className:e,sideOffset:t=4,...r},o)=>v__namespace.createElement(be__namespace.Portal,null,v__namespace.createElement(be__namespace.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__namespace.Content.displayName;var Ea=v__namespace.createContext("md"),Us=xe__namespace.Root,Ws=classVarianceAuthority.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=classVarianceAuthority.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__namespace.forwardRef(({className:e,size:t="md",children:r,...o},s)=>v__namespace.createElement(Ea.Provider,{value:t??"md"},v__namespace.createElement(xe__namespace.List,{ref:s,className:n(Ws({size:t}),e),...o},r)));Ha.displayName=xe__namespace.List.displayName;var La=v__namespace.forwardRef(({className:e,size:t,tooltip:r,...o},s)=>{let a=v__namespace.useContext(Ea),d=t??a,p=o["aria-label"]??(typeof r=="string"?r:void 0),i=v__namespace.createElement(xe__namespace.Trigger,{ref:s,className:n(js({size:d}),e),"aria-label":p,...o});return r?v__namespace.createElement(vt,null,v__namespace.createElement(bt,{asChild:true},i),v__namespace.createElement(tt,null,r)):i});La.displayName=xe__namespace.Trigger.displayName;var Da=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.createElement(xe__namespace.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__namespace.Content.displayName;var Aa=v__namespace.forwardRef(({className:e,...t},r)=>v__namespace.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=classVarianceAuthority.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__namespace.forwardRef(({className:e,variant:t,size:r,...o},s)=>v__namespace.createElement(hr__namespace.Root,{ref:s,className:n(Ia({variant:t,size:r,className:e})),...o}));Fa.displayName=hr__namespace.Root.displayName;var Oa=v__namespace.createContext("md"),qs=classVarianceAuthority.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=classVarianceAuthority.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__namespace.forwardRef(({className:e,size:t="md",children:r,...o},s)=>v__namespace.createElement(Oa.Provider,{value:t??"md"},v__namespace.createElement(rt__namespace.Root,{ref:s,className:n(qs({size:t}),e),...o},r)));Ba.displayName=rt__namespace.Root.displayName;var Va=v__namespace.forwardRef(({className:e,size:t,...r},o)=>{let s=v__namespace.useContext(Oa);return v__namespace.createElement(rt__namespace.Item,{ref:o,className:n(Ys({size:t??s}),e),...r})});Va.displayName=rt__namespace.Item.displayName;var _a=v__namespace.createContext(null);function $a(){let e=v__namespace.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__namespace.createElement("a",{href:e,className:t},r),Ka=v__namespace.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__namespace.useState(i),f=a??h,g=()=>{let R=!f;y(R),d?.(R);};return v__namespace.createElement(gr,{delayDuration:0},v__namespace.createElement(_a.Provider,{value:{collapsed:f,activeItem:c,LinkComponent:m}},v__namespace.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__namespace.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__namespace.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__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"}):v__namespace.createElement(lucideReact.ChevronLeft,{className:"h-3 w-3"}))),v__namespace.createElement("nav",{className:"flex-1 py-2 overflow-y-auto overflow-x-hidden"},o&&o.length>0&&v__namespace.createElement("div",{className:"px-2 mb-1 space-y-0.5"},o.map(R=>v__namespace.createElement(yr,{key:R.id,item:R}))),r?.map(R=>v__namespace.createElement(ei,{key:R.id,section:R}))),s&&v__namespace.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__namespace.useState(e.defaultExpanded??true);return t?v__namespace.createElement("div",{className:"px-2 mb-1 space-y-0.5"},e.items.map(s=>v__namespace.createElement(yr,{key:s.id,item:s}))):v__namespace.createElement("div",{className:"px-2 mb-1"},v__namespace.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__namespace.createElement("span",{className:"h-3.5 w-3.5 flex-shrink-0"},e.icon),v__namespace.createElement("span",{className:"flex-1 text-left"},e.title),r?v__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3",strokeWidth:1.5}):v__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3",strokeWidth:1.5})),r&&v__namespace.createElement("div",{className:"mt-0.5 space-y-0.5 relative pl-5"},v__namespace.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__namespace.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__namespace.createElement(v__namespace.Fragment,null,e.icon&&v__namespace.createElement("span",{className:n("flex-shrink-0",r?"h-5 w-5":"h-3.5 w-3.5")},e.icon),!r&&v__namespace.createElement("span",null,e.label),!r&&e.badge&&v__namespace.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__namespace.createElement(s,{href:e.href,className:d},p):v__namespace.createElement("button",{onClick:e.onClick,disabled:e.disabled,className:n(d,"w-full")},p);return r?v__namespace.createElement(vt,null,v__namespace.createElement(bt,{asChild:true},i),v__namespace.createElement(tt,{side:"right",sideOffset:8},e.label)):i}var vr=v__namespace.createContext(null);function br(){let e=v__namespace.useContext(vr);if(!e)throw new Error("SimpleTabsPanel must be used within SimpleTabs");return e}var Ua=v__namespace.forwardRef(({tabs:e,activeTab:t,defaultTab:r,onTabChange:o,children:s,className:a,tabsClassName:d},p)=>{let[i,c]=v__namespace.useState(r||e[0]?.id||""),l=t??i,m=u=>{c(u),o?.(u);};return v__namespace.createElement(vr.Provider,{value:{activeTab:l,setActiveTab:m}},v__namespace.createElement("div",{ref:p,className:n("space-y-6",a)},v__namespace.createElement("div",{className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},v__namespace.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__namespace.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__namespace.createElement("span",{className:"h-4 w-4"},u.icon),u.label,h&&v__namespace.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))}))),s&&v__namespace.createElement("div",null,s)))});Ua.displayName="SimpleTabs";var Wa=v__namespace.forwardRef(({id:e,children:t,className:r},o)=>{let{activeTab:s}=br();return s!==e?null:v__namespace.createElement("div",{ref:o,role:"tabpanel","aria-labelledby":`tab-${e}`,className:r},t)});Wa.displayName="SimpleTabsPanel";var ja=v__namespace.forwardRef(({activeTab:e,defaultTab:t,onTabChange:r,children:o,className:s},a)=>{let[d,p]=v__namespace.useState(t||""),i=e??d,c=l=>{p(l),r?.(l);};return v__namespace.createElement(vr.Provider,{value:{activeTab:i,setActiveTab:c}},v__namespace.createElement("div",{ref:a,className:n("space-y-6",s)},o))});ja.displayName="SimpleTabsRoot";var Za=v__namespace.forwardRef(({children:e,className:t},r)=>v__namespace.createElement("div",{ref:r,className:"border-b border-rds-gray-200 dark:border-rds-gray-800"},v__namespace.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__namespace.forwardRef(({value:e,children:t,icon:r,disabled:o,className:s},a)=>{let{activeTab:d,setActiveTab:p}=br(),i=d===e;return v__namespace.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__namespace.createElement("span",{className:"h-4 w-4"},r),t,i&&v__namespace.createElement("span",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-primary","aria-hidden":"true"}))});qa.displayName="SimpleTabsTrigger";var Ya=v__namespace.forwardRef(({value:e,children:t,className:r},o)=>{let{activeTab:s}=br();return s!==e?null:v__namespace.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
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';var zod=require('zod'),w=require('react'),Be=require('@radix-ui/react-accordion'),lucideReact=require('lucide-react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),classVarianceAuthority=require('class-variance-authority'),reactSlot=require('@radix-ui/react-slot'),nt=require('@radix-ui/react-avatar'),reactDayPicker=require('react-day-picker'),md=require('embla-carousel-react'),mo=require('@radix-ui/react-checkbox'),dateFns=require('date-fns'),Ue=require('@radix-ui/react-popover'),X=require('@radix-ui/react-dialog'),A=require('@radix-ui/react-dropdown-menu'),Lr=require('@radix-ui/react-label'),fo=require('@radix-ui/react-progress'),cmdk=require('cmdk'),zr=require('@radix-ui/react-separator'),ht=require('@radix-ui/react-radio-group'),Kt=require('react-resizable-panels'),Ge=require('@radix-ui/react-scroll-area'),F=require('@radix-ui/react-select'),it=require('@radix-ui/react-slider'),core=require('@dnd-kit/core'),sortable=require('@dnd-kit/sortable'),utilities=require('@dnd-kit/utilities'),wo=require('@radix-ui/react-switch'),qe=require('@radix-ui/react-tabs'),Ke=require('@radix-ui/react-tooltip'),qr=require('@radix-ui/react-toggle'),qt=require('@radix-ui/react-toggle-group'),reactDom=require('react-dom'),Z=require('three'),postprocessing=require('postprocessing'),Rm=require('lenis');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var w__namespace=/*#__PURE__*/_interopNamespace(w);var Be__namespace=/*#__PURE__*/_interopNamespace(Be);var nt__namespace=/*#__PURE__*/_interopNamespace(nt);var md__default=/*#__PURE__*/_interopDefault(md);var mo__namespace=/*#__PURE__*/_interopNamespace(mo);var Ue__namespace=/*#__PURE__*/_interopNamespace(Ue);var X__namespace=/*#__PURE__*/_interopNamespace(X);var A__namespace=/*#__PURE__*/_interopNamespace(A);var Lr__namespace=/*#__PURE__*/_interopNamespace(Lr);var fo__namespace=/*#__PURE__*/_interopNamespace(fo);var zr__namespace=/*#__PURE__*/_interopNamespace(zr);var ht__namespace=/*#__PURE__*/_interopNamespace(ht);var Kt__namespace=/*#__PURE__*/_interopNamespace(Kt);var Ge__namespace=/*#__PURE__*/_interopNamespace(Ge);var F__namespace=/*#__PURE__*/_interopNamespace(F);var it__namespace=/*#__PURE__*/_interopNamespace(it);var wo__namespace=/*#__PURE__*/_interopNamespace(wo);var qe__namespace=/*#__PURE__*/_interopNamespace(qe);var Ke__namespace=/*#__PURE__*/_interopNamespace(Ke);var qr__namespace=/*#__PURE__*/_interopNamespace(qr);var qt__namespace=/*#__PURE__*/_interopNamespace(qt);var Z__namespace=/*#__PURE__*/_interopNamespace(Z);var Rm__default=/*#__PURE__*/_interopDefault(Rm);var Tl=Object.defineProperty;var Ao=(e,t)=>()=>(e&&(t=e(e=0)),t);var vr=(e,t)=>{for(var o in t)Tl(e,o,{get:t[o],enumerable:true});};var mr,Qs,el=Ao(()=>{mr="2pMfyvhpuKonkf7h8HzH",Qs=()=>mr!=="YOUR_KEY_HERE"&&mr.length>0;});var rl={};vr(rl,{createMaplibreAdapter:()=>hp});function fp(){if(typeof document>"u"||document.getElementById(ol))return;let e=document.createElement("link");e.id=ol,e.rel="stylesheet",e.href=gp,document.head.appendChild(e);}var up,tl,gp,ol,hp,al=Ao(()=>{el();up={light:"dataviz-light",dark:"dataviz-dark",satellite:"satellite"},tl=(e,t)=>`https://api.maptiler.com/maps/${up[e]}/style.json?key=${encodeURIComponent(t)}`,gp="https://unpkg.com/maplibre-gl@4/dist/maplibre-gl.css",ol="gds-maplibre-gl-css";hp=async(e,t,o)=>{fp();let r;try{r=await import('maplibre-gl'),r.default&&(r=r.default);}catch(c){throw o.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 i=t.tilerKey??mr;process.env.NODE_ENV!=="production"&&!t.tilerKey&&!Qs()&&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??tl(t.appearance,i),d=new r.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());}),o.onLoad(),d.on("error",c=>{let l=String(c?.error?.message??c?.message??"MapLibre error"),p=l.toLowerCase().includes("style");o.onError({code:p?"style-load-failed":"tile-load-failed",message:l,cause:c?.error??c});});let m=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??tl(c,i);d.setStyle(l,{diff:false});},setInteractive:c=>{let l=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let p of l){let g=d[p];g&&(c?g.enable():g.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 p=1/0,g=1/0,u=-1/0,b=-1/0;for(let[f,h]of c)f<p&&(p=f),h<g&&(g=h),f>u&&(u=f),h>b&&(b=h);d.fitBounds([[p,g],[u,b]],{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,p)=>{let g=document.createElement("div");g.dataset.gdsPart="map-marker",g.dataset.gdsState="idle",g.style.cursor="pointer",g.addEventListener("mouseenter",()=>o.onMarkerHover(c)),g.addEventListener("mouseleave",()=>o.onMarkerHover(null)),g.addEventListener("click",f=>{o.onMarkerClick(c,b.coords,f);});let u=new r.Marker({element:g,anchor:p==="center"?"center":"bottom"}).setLngLat(l).addTo(d),b={element:g,coords:l,setHovered:f=>{g.dataset.gdsState=f?"hovered":"idle",g.style.zIndex=f?"10":"1";},setPosition:f=>{b.coords=f,u.setLngLat(f);},remove:()=>{u.remove(),m.delete(c);}};return m.set(c,{marker:u,handle:b}),b},destroy:()=>{m.forEach(({marker:c})=>c.remove()),m.clear(),d.remove();},instance:d}};});var sl={};vr(sl,{createMapboxAdapter:()=>yp});function vp(){if(typeof document>"u"||document.getElementById(il))return;let e=document.createElement("link");e.id=il,e.rel="stylesheet",e.href=bp,document.head.appendChild(e);}var nl,bp,il,yp,ll=Ao(()=>{nl={light:"mapbox://styles/mapbox/light-v11",dark:"mapbox://styles/mapbox/dark-v11",satellite:"mapbox://styles/mapbox/satellite-streets-v12"},bp="https://unpkg.com/mapbox-gl@3/dist/mapbox-gl.css",il="gds-mapbox-gl-css";yp=async(e,t,o)=>{if(!t.accessToken)throw o.onError({code:"api-key-missing",message:'@gradeui/ui Map: provider="mapbox" requires an `accessToken` prop.'}),new Error("mapbox accessToken missing");vp();let r;try{r=await import('mapbox-gl'),r.default&&(r=r.default);}catch(s){throw o.onError({code:"sdk-missing",message:'@gradeui/ui Map: `mapbox-gl` is not installed. Run `pnpm add mapbox-gl` to use provider="mapbox".',cause:s}),s}r.accessToken=t.accessToken;let i=t.styleUrl??nl[t.appearance],a=new r.Map({container:e,style:i,center:t.center,zoom:t.zoom,interactive:t.interactive});t.bounds&&a.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(s=>{a.once("load",()=>s());}),o.onLoad(),a.on("error",s=>{let c=String(s?.error?.message??s?.message??"Mapbox error"),l=c.toLowerCase().includes("style");o.onError({code:l?"style-load-failed":"tile-load-failed",message:c,cause:s?.error??s});});let d=new globalThis.Map;return {setCenter:s=>a.setCenter(s),setZoom:s=>a.setZoom(s),setBounds:(s,c)=>a.fitBounds([s,c],{animate:false}),setAppearance:s=>{let c=t.styleUrl??nl[s];a.setStyle(c,{diff:false});},setInteractive:s=>{let c=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let l of c){let p=a[l];p&&(s?p.enable():p.disable());}},flyTo:(s,c)=>a.flyTo({center:s,zoom:c?.zoom,duration:c?.durationMs??800}),panTo:(s,c)=>a.panTo(s,{duration:c?.durationMs??600}),fitBounds:(s,c)=>{if(s.length===0)return;let l=1/0,p=1/0,g=-1/0,u=-1/0;for(let[b,f]of s)b<l&&(l=b),f<p&&(p=f),b>g&&(g=b),f>u&&(u=f);a.fitBounds([[l,p],[g,u]],{padding:c?.paddingPx??40,duration:c?.durationMs??800});},getCenter:()=>{let s=a.getCenter();return [s.lng,s.lat]},getZoom:()=>a.getZoom(),getBounds:()=>{let s=a.getBounds();return [[s.getWest(),s.getSouth()],[s.getEast(),s.getNorth()]]},addMarker:(s,c,l)=>{let p=document.createElement("div");p.dataset.gdsPart="map-marker",p.dataset.gdsState="idle",p.style.cursor="pointer",p.addEventListener("mouseenter",()=>o.onMarkerHover(s)),p.addEventListener("mouseleave",()=>o.onMarkerHover(null)),p.addEventListener("click",b=>{o.onMarkerClick(s,u.coords,b);});let g=new r.Marker({element:p,anchor:l==="center"?"center":"bottom"}).setLngLat(c).addTo(a),u={element:p,coords:c,setHovered:b=>{p.dataset.gdsState=b?"hovered":"idle",p.style.zIndex=b?"10":"1";},setPosition:b=>{u.coords=b,g.setLngLat(b);},remove:()=>{g.remove(),d.delete(s);}};return d.set(s,{marker:g,handle:u}),u},destroy:()=>{d.forEach(({marker:s})=>s.remove()),d.clear(),a.remove();},instance:a}};});var cl={};vr(cl,{createGoogleAdapter:()=>Rp});var wp,xp,dl,Rp,pl=Ao(()=>{wp=[{featureType:"poi",stylers:[{visibility:"off"}]},{featureType:"transit",stylers:[{visibility:"simplified"}]}],xp=[{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"}]}],dl=e=>e==="dark"?xp:wp,Rp=async(e,t,o)=>{if(!t.apiKey)throw o.onError({code:"api-key-missing",message:'@gradeui/ui Map: provider="google" requires an `apiKey` prop.'}),new Error("google apiKey missing");let r;try{let l=await import('@googlemaps/js-api-loader');r=l.Loader??l.default?.Loader;}catch(l){throw o.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 i=new r({apiKey:t.apiKey,version:"weekly",libraries:["maps","marker"]}),a;try{a=await i.load();}catch(l){throw o.onError({code:"provider-init-failed",message:"@gradeui/ui Map: Google Maps loader failed.",cause:l}),l}let d=t.appearance==="satellite",m=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:dl(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]});m.fitBounds(l);}await new Promise(l=>{a.maps.event.addListenerOnce(m,"idle",()=>l());}),o.onLoad();let s=new globalThis.Map;return {setCenter:l=>m.setCenter({lat:l[1],lng:l[0]}),setZoom:l=>m.setZoom(l),setBounds:(l,p)=>{let g=new a.maps.LatLngBounds({lat:l[1],lng:l[0]},{lat:p[1],lng:p[0]});m.fitBounds(g);},setAppearance:l=>{l==="satellite"?(m.setMapTypeId(a.maps.MapTypeId.HYBRID),m.setOptions({styles:void 0})):(m.setMapTypeId(a.maps.MapTypeId.ROADMAP),m.setOptions({styles:dl(l)}));},setInteractive:l=>{m.setOptions({disableDefaultUI:!l,gestureHandling:l?"auto":"none",keyboardShortcuts:l});},flyTo:(l,p)=>{m.panTo({lat:l[1],lng:l[0]}),p?.zoom!=null&&m.setZoom(p.zoom);},panTo:l=>m.panTo({lat:l[1],lng:l[0]}),fitBounds:(l,p)=>{if(l.length===0)return;let g=new a.maps.LatLngBounds;for(let[u,b]of l)g.extend({lat:b,lng:u});m.fitBounds(g,p?.paddingPx??40);},getCenter:()=>{let l=m.getCenter();return l?[l.lng(),l.lat()]:[0,0]},getZoom:()=>m.getZoom()??0,getBounds:()=>{let l=m.getBounds();if(!l)return [[0,0],[0,0]];let p=l.getSouthWest(),g=l.getNorthEast();return [[p.lng(),p.lat()],[g.lng(),g.lat()]]},addMarker:(l,p,g)=>{let u=document.createElement("div");u.dataset.gdsPart="map-marker",u.dataset.gdsState="idle",u.style.cursor="pointer",g==="center"&&(u.style.transform="translateY(50%)"),u.addEventListener("mouseenter",()=>o.onMarkerHover(l)),u.addEventListener("mouseleave",()=>o.onMarkerHover(null)),u.addEventListener("click",h=>{o.onMarkerClick(l,f.coords,h);});let b=new a.maps.marker.AdvancedMarkerElement({map:m,position:{lat:p[1],lng:p[0]},content:u}),f={element:u,coords:p,setHovered:h=>{u.dataset.gdsState=h?"hovered":"idle",b.zIndex=h?10:1;},setPosition:h=>{f.coords=h,b.position={lat:h[1],lng:h[0]};},remove:()=>{b.map=null,s.delete(l);}};return s.set(l,{marker:b,handle:f}),f},destroy:()=>{s.forEach(({marker:l})=>{l.map=null;}),s.clear();},instance:m}};});var Ca={name:"Accordion",description:`Long-form content that would overwhelm if shown all at once \u2014 FAQs, settings groups, "what's included" sections, nested help. For tab-style peer views with one always visible, reach for Tabs. For a single show/hide reveal use Collapsible.`,import:"@gradeui/ui",aliases:["accordion","faq","expand","collapse list","disclosure list","disclosure group","outline group","expandable list","sectionlist"],subcomponents:["AccordionItem","AccordionTrigger","AccordionContent"],composesWith:["Card (as a faq inside a card body)","Section primitives"],props:{type:{schema:zod.z.enum(["single","multiple"]),design:"knob",description:"single keeps one open at a time, multiple lets several be open at once"},collapsible:{schema:zod.z.boolean().optional(),design:"knob",description:'only valid with type="single"; allows the open item to be toggled shut'},defaultValue:{schema:zod.z.string().optional(),design:"content",description:"initial open item(s)"},value:{schema:zod.z.string().optional(),design:"content",description:"controlled"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},children:{schema:zod.z.unknown(),design:"plumbing",description:"the row label users click to expand"}}};var ka={name:"AiChat",description:'A flexible chat block \u2014 header + scrollable message list + composer. Out of the box it looks like a polished "AI panel"; under it, every region is a slot so hosts can compose richer chat surfaces (e.g. Studio\'s left column with selection chip + settings panel above the composer, an error banner inline, per-message usage / refs / actions). Per-turn token usage, refs, and actions are optional and gated by `showUsage` / `showRefs` / `showActions` \u2014 leave them off for product-facing chats, turn them on for developer-facing ones where transparency matters. Composes with [[AIChatComposer]] (rendered internally; can be slotted in with custom props via `composerSlot`).',import:"@gradeui/ui",aliases:["ai chat","chat panel","chat block","llm chat","assistant panel","copilot chat","ai assistant"],composesWith:["Card (host in a sidebar panel)","Sheet (mobile drawer)","Stack (place above other content)","AIChatComposer (internal composer; slot to override)"],props:{messages:{schema:zod.z.unknown().optional(),design:"plumbing",description:'`{ id, role: "user" | "assistant", content, timestamp, thinking?, steps?, usage?, refs?, actions?, duration? }`; defaults to empty'},onSendMessage:{schema:zod.z.unknown().optional(),design:"event",description:"fires when the user submits via the default composer; ignored if `composerSlot` is set"},isLoading:{schema:zod.z.boolean().optional(),design:"knob",description:"shows a typing indicator at the bottom of the message list"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"composer placeholder text (ignored if `composerSlot` is set)"},title:{schema:zod.z.string().optional(),design:"plumbing",description:'header title; defaults to "AI Assistant"'},titleIcon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"optional icon rendered before the title (e.g. `<Sparkles />`)"},headerTokens:{schema:zod.z.number().optional(),design:"knob",description:'optional session-level token total shown on the right of the header; rendered as "N tokens" with a small gauge icon when set'},headerEnd:{schema:zod.z.unknown().optional(),design:"plumbing",description:"optional arbitrary content appended after `headerTokens` on the right of the header"},showUsage:{schema:zod.z.boolean().optional(),design:"knob",description:"show the per-turn `usage` strip below the assistant bubble; default false"},showRefs:{schema:zod.z.boolean().optional(),design:"knob",description:"show the per-turn `refs` strip below the assistant bubble; default false"},showActions:{schema:zod.z.boolean().optional(),design:"knob",description:"render per-turn `actions` chips when a message has them; default true"},showDuration:{schema:zod.z.boolean().optional(),design:"knob",description:'render the per-turn wall-clock duration ("2.3s") below the assistant bubble when a message carries `duration`; default false'},showThinking:{schema:zod.z.boolean().optional(),design:"knob",description:'render the per-turn reasoning ("Thoughts") disclosure above the assistant prose when a message carries `thinking`; collapsed by default, click to expand; default false'},showSteps:{schema:zod.z.boolean().optional(),design:"knob",description:'render the per-turn step timeline above the assistant prose when a message carries `steps`; collapsed view shows the current running step (or "N steps completed"), click to expand the vertical timeline with status glyphs; default false'},thinkingPhrase:{schema:zod.z.string().optional(),design:"content",description:'override the "Thinking" label in the loading indicator'},suggestedPrompts:{schema:zod.z.unknown().optional(),design:"plumbing",description:"empty-state quick prompts (ignored if `emptyStateSlot` is set)"},emptyStateSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"replaces the default empty state entirely"},errorSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"rendered after the messages list (typically an error banner)"},composerAboveSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"rendered between the messages and the composer (selection chip, settings panel)"},composerBelowSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"rendered below the composer (disclaimer, char counter)"},composerSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"full override of the composer; when provided, `onSendMessage` + `placeholder` are unused"},bare:{schema:zod.z.boolean().optional(),design:"knob",description:"strip the outer card chrome (background, border, rounded corners) so the chat takes the surface of its container; default false (keeps the canned card look)"},assistantBubble:{schema:zod.z.boolean().optional(),design:"knob",description:"whether assistant messages render with a bubble (background + border + padding + rounded corners); default true. Set false for a Claude.ai-style chromeless transcript where assistant text sits on the surface and only user turns wear a bubble."},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Ta={name:"AiChatComposer",description:"The reusable \"input card\" for any chat surface \u2014 auto-growing textarea, image attachments via paperclip and clipboard paste, attachment chips with previews, Send/Stop toggle, controlled value. Drop in below any messages list. Use this when you want the input affordances of `<AIChat>` but you're rendering your own messages list / scrollarea / header (e.g. Studio's left-column chat, where SelectionChip and SettingsPanel sit between messages and composer). For the full canned chat block, use `<AIChat>` instead.",import:"@gradeui/ui",aliases:["chat composer","chat input","prompt composer","message input"],composesWith:["AIChat (uses this internally)","Card (host above)","ScrollArea (place messages above)"],props:{value:{schema:zod.z.string(),design:"content",description:"controlled textarea value"},onChange:{schema:zod.z.unknown(),design:"event",description:"fires for every textarea change"},onSend:{schema:zod.z.unknown(),design:"event",description:"fires when the user submits (Enter or click Send); composer validates that text or attachments exist before firing"},isLoading:{schema:zod.z.boolean().optional(),design:"knob",description:"disables the textarea + paperclip and swaps Send for Stop"},onStop:{schema:zod.z.unknown().optional(),design:"event",description:"fires when the user clicks Stop; without this, Stop renders disabled"},placeholder:{schema:zod.z.string().optional(),design:"content"},maxLength:{schema:zod.z.number().optional(),design:"knob",description:"hard cap passed to the underlying `<textarea>`"},showHint:{schema:zod.z.boolean().optional(),design:"knob",description:'show the "Press Enter\u2026 \xB7 Paste images" hint below the card; default true, set false when the host renders its own footer'},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Pa={name:"AppShell",description:`The top-level page scaffold for any app-like or marketing layout. Reach for AppShell
|
|
3
|
+
instead of hand-rolling \`grid grid-cols-[auto_1fr]\` so the layout shape (top nav,
|
|
4
|
+
side nav, three-pane Slack/Mail/Notion shape, constrained vs full-width main) is a
|
|
5
|
+
prop the settings panel can mutate. Don't compose top-level layouts from raw grid
|
|
6
|
+
templates \u2014 the four variants below cover most app shapes.
|
|
7
|
+
|
|
8
|
+
Pick the \`nav\` variant from the source:
|
|
9
|
+
nav="none" \u2014 Single column. Marketing landing, login, splash.
|
|
10
|
+
nav="top" \u2014 Top bar + content. Reddit, Twitter chrome.
|
|
11
|
+
nav="side" \u2014 Left nav + content. Linear, Notion sidebar shape.
|
|
12
|
+
nav="three-pane" \u2014 **Narrow icon rail + Aside + Main.** The Slack /
|
|
13
|
+
WhatsApp / Mail / Plane / Discord / Notion-with-pages
|
|
14
|
+
shape. ANY time you see a vertical icon rail next to
|
|
15
|
+
a separate list/sidebar, this is the answer \u2014 don't
|
|
16
|
+
reach for raw \`<div className="grid">\` with three
|
|
17
|
+
column tracks.`,import:"@gradeui/ui",subcomponents:["AppShellHeader","AppShellNav","AppShellAside","AppShellMain","AppShellFooter"],composesWith:["Stack","Row","Card","Button","Separator","Sidebar","Toolbar","any page content"],props:{nav:{schema:zod.z.enum(["none","top","side","three-pane"]).optional(),design:"knob",description:"layout structure",default:"none"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"render as the child element via Slot",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var Ma={name:"Avatar",description:"User/entity identity for PEOPLE \u2014 profile pictures, author rows, member lists, account headers. Circular by default; the AvatarFallback initials read as a person's name. Always include AvatarFallback so load failure doesn't leave a gap.",import:"@gradeui/ui",aliases:["profile picture","user image","account image","avatar","person glyph","user avatar","profile image","react native avatar"],subcomponents:["AvatarImage","AvatarFallback"],composesWith:["Card (in CardHeader)","Table cells","Badge (placed next to for status)","Skeleton (loading state)"],props:{className:{schema:zod.z.unknown().optional(),design:"plumbing",description:"set size via utilities (default h-10 w-10)"},src:{schema:zod.z.unknown(),design:"plumbing"},initials:{schema:zod.z.unknown(),design:"plumbing"}}};var Ea={name:"Badge",description:"Compact status chips, counts, tags, pills. For higher-signal inline status \u2192 use Callout. For solid CTAs \u2192 Button. Soft/outline variants are quieter; solid variants are loud.",import:"@gradeui/ui",aliases:["chip","tag","pill","label chip","badge","tag view","status pill","token","count badge"],composesWith:["Card","Table (inside a cell)","Avatar (next to it)","anywhere inline"],props:{variant:{schema:zod.z.enum(["see list above"]).optional(),design:"knob"},rounded:{schema:zod.z.enum(["default","full"]).optional(),design:"knob",description:'"full" gives a pill shape'}}};var La={name:"Breadcrumb",description:'Reach for Breadcrumb whenever a screen sits inside a hierarchy and you want the path back to the top to be visible. Common spots: above page titles in admin/CMS screens, top of Settings detail pages, after a router redirect when the URL implies depth. Use the current page as a <BreadcrumbPage> (non-clickable) and prior levels as <BreadcrumbLink>. For a horizontal "top nav" of peer destinations use Side Menu or Tabs instead \u2014 Breadcrumb is strictly for hierarchical path.',import:"@gradeui/ui",aliases:["breadcrumb","breadcrumbs","crumbs","path","page hierarchy","path bar","navigation trail","finder path"],subcomponents:["BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","BreadcrumbEllipsis"],composesWith:["AppShellMain","Card (in CardHeader)","Dialog"],props:{"aria-label":{schema:zod.z.unknown().optional(),design:"plumbing",description:"passed to the underlying <nav>"},separator:{schema:zod.z.unknown().optional(),design:"plumbing",description:'**tree-wide default** for every <BreadcrumbSeparator/> inside. Pass a string ("/", "\u203A", "\u2022"), a lucide icon (`<Slash/>`, `<ChevronRight/>`), or any ReactNode. Default: `<ChevronRight/>`. Set once on the root; every separator below picks it up via context.'},className:{schema:zod.z.unknown().optional(),design:"plumbing",description:"the <ol> wrapper; usually no overrides needed"},href:{schema:zod.z.unknown().optional(),design:"plumbing",description:"renders as <a> when set, <button> when not; asChild? wraps a custom element"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"per-instance override of the separator glyph. When set, beats the root's `separator` prop for this one slot. When not set, falls back to the root's `separator`, then to `<ChevronRight/>`."}}};var Ha={name:"Button",description:'Any clickable action. Use size="icon" for square icon-only buttons, variant="link" for inline links that should look like Button. A Button placed next to a TabsList of the same size lines up edge-to-edge without per-call overrides.',import:"@gradeui/ui",aliases:["button","push button","plain button","bordered button","destructive button","capsule button","link button","action button","cta"],composesWith:["Dialog","DropdownMenu","Tooltip","Card (in CardFooter)","Row","Form controls"],props:{variant:{schema:zod.z.enum(["default","destructive","outline","secondary","ghost","link"]).optional(),design:"knob"},size:{schema:zod.z.enum(["sm","md","lg","icon"]).optional(),design:"knob",description:"t-shirt scale aligned with Tabs/ToggleGroup heights (sm=h-7, md=h-8, lg=h-10). `default` still works as an alias for `md`."},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"renders as the child element (use to wrap <a>/<Link>)"},disabled:{schema:zod.z.boolean().optional(),design:"knob"}}};var Da={name:"Calendar",description:'An inline date grid \u2014 date-of-birth pickers in profile forms, scheduling screens with a month view, range selection in reporting filters. For a compact trigger-and-popover input, use DatePicker / DateRangePicker (which wrap Calendar internally). For one-off relative dates ("yesterday", "last week") use a Select instead.',import:"@gradeui/ui",aliases:["calendar","date grid","month view","scheduler grid","calendar view","multidate picker","react native calendars"],subcomponents:["CalendarDayButton"],composesWith:["Popover (DatePicker composes them)","Card (inline scheduling card)","Dialog (full-screen mobile date pick)"],props:{mode:{schema:zod.z.enum(["single","multiple","range"]).optional(),design:"knob",description:"picks one date, several dates, or a [from, to] range"},selected:{schema:zod.z.unknown().optional(),design:"plumbing",description:"controlled selection; shape matches `mode`"},onSelect:{schema:zod.z.unknown().optional(),design:"event",description:"fires with the new selection"},month:{schema:zod.z.unknown().optional(),design:"plumbing",description:"controlled displayed month"},defaultMonth:{schema:zod.z.unknown().optional(),design:"plumbing",description:"uncontrolled initial month"},onMonthChange:{schema:zod.z.unknown().optional(),design:"event"},numberOfMonths:{schema:zod.z.number().optional(),design:"knob",description:"render multiple months side by side, useful for range pickers"},disabled:{schema:zod.z.unknown().optional(),design:"plumbing"},captionLayout:{schema:zod.z.enum(["label","dropdown","dropdown-months","dropdown-years"]).optional(),design:"knob"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Aa={name:"Callout",description:"Inline, ambient, non-blocking status/feedback that sits inside the layout flow. Form-level validation summaries, settings-page notices, page-level banners. NOT a toast (use Sonner for transient). NOT a modal (use Dialog when the user must respond). Put an icon as first child \u2014 it's auto-positioned; CalloutTitle + CalloutDescription follow.",import:"@gradeui/ui",aliases:["callout","banner","notice","inline alert","in-app notification","status banner","info banner","info callout","warning callout","success callout"],subcomponents:["CalloutTitle","CalloutDescription"],composesWith:["lucide-react icons as first child","Button (inside CalloutDescription)","Card (as a section callout)"],props:{variant:{schema:zod.z.enum(["default","destructive","success","warning","info"]).optional(),design:"knob",description:"semantic colouring; `default` is neutral"}}};var Fa={name:"Card",description:"Grouped content with a distinct surface \u2014 settings panels, dashboard tiles, list-of-cards layouts. Pair CardHeader (title + description) with CardContent and optional CardFooter (actions).",import:"@gradeui/ui",aliases:["card","group box","groupbox","panel","tile","surface"],subcomponents:["CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],composesWith:["Button (in CardFooter)","Badge","Separator","Avatar","any form controls"],props:{Each:{schema:zod.z.unknown(),design:"plumbing"},No:{schema:zod.z.unknown(),design:"plumbing",description:"Card is a flexible container surface"}}};var Ml=zod.z.enum(["start","center","end"]),Nl=zod.z.object({delay:zod.z.number().int().positive().optional(),pauseOnHover:zod.z.boolean().optional(),pauseWhenOffscreen:zod.z.boolean().optional()}),El=zod.z.union([zod.z.boolean(),Nl]),za={name:"Carousel",description:"Token-driven slideshow primitive. Embla under the hood, custom autoplay loop with per-slide duration overrides, and a VideoSlide variant that autoplays muted+loop with a poster fallback. Reach for it for marketing hero rotations, app onboarding tours, image galleries, TV/streaming featured rails \u2014 anywhere a horizontal stack of slides cycles automatically or on user input.",import:"@gradeui/ui",aliases:["carousel","slideshow","slider","hero rotation","image gallery","featured row","swipe deck"],subcomponents:["Carousel.Slide","Carousel.VideoSlide","Carousel.Dots","Carousel.Arrows","Carousel.Prev","Carousel.Next"],composesWith:["MediaSurface (inside Carousel.Slide for posters / album art)","Card (slide content)","Stack / Row (slide composition)"],props:{loop:{schema:zod.z.boolean().optional(),design:"knob",label:"Loop",default:true,description:"Wrap from the last slide back to the first. Default true \u2014 the natural fit for hero rotations. Turn off for finite onboarding sequences."},align:{schema:Ml.optional(),design:"knob",control:"toggle-group",label:"Slide alignment",default:"start",description:"How slides line up inside the viewport when not at 100% width. 'start' is full-bleed; 'center' gives the 'peek of neighbours' carousel look."},slidesPerView:{schema:zod.z.number().int().positive().optional(),design:"knob",label:"Slides per view",default:1,description:"How many slides show at once. 1 for hero rotations; 3 for thumbnail strips; etc. For media-query responsive layouts, leave this at 1 and override `--gds-carousel-slide-basis` on each Slide via CSS."},autoplay:{schema:El.optional(),design:"structured",label:"Autoplay",default:false,description:"`true` for sensible defaults (5s, pause on hover, pause offscreen). Object form: `{ delay, pauseOnHover, pauseWhenOffscreen }`. Per-slide overrides go on `<Carousel.Slide duration={ms}>`."},draggable:{schema:zod.z.boolean().optional(),design:"knob",label:"Drag to swipe",default:true,description:"Disable when slide content (a Map, a chart, a draggable card) needs to swallow drag events."},onSlideChange:{schema:zod.z.function().optional(),design:"event",description:"Fires with the new slide index whenever the active slide changes (programmatic, autoplay, or user swipe)."},className:{schema:zod.z.string().optional(),design:"plumbing"},style:{schema:zod.z.record(zod.z.string(),zod.z.unknown()).optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing",description:"Carousel.Slide / Carousel.VideoSlide children, plus optionally Carousel.Dots and Carousel.Arrows."}}};var Ba={name:"Chart",description:"Reporting dashboards, single-purpose analytics cards (revenue, conversions, active users), or anywhere you'd otherwise hand-roll a Recharts setup. Bring the actual chart type from `recharts` \u2014 ChartContainer doesn't pick the chart shape for you, it themes whatever you nest. For sparkline-style decorative trends consider just rendering a small SVG line directly; ChartContainer is overkill for non-interactive ornament.",import:"@gradeui/ui",aliases:["chart","charts","graph","bar chart","line chart","area chart","recharts","analytics chart","swift chart","swiftui chart","victory chart","victory native"],subcomponents:["ChartTooltip","ChartTooltipContent","ChartLegend","ChartLegendContent","ChartStyle"],composesWith:["Card (chart-in-a-card pattern)","Tabs (multi-metric switcher)","Recharts components (Bar","Line","Area","Pie",'Radar from "recharts")'],props:{config:{schema:zod.z.unknown(),design:"plumbing",description:'`{ [seriesKey]: { label: string; color?: string; theme?: { light: string; dark: string } } }`; the keys here are the names you reference in your Recharts <Bar dataKey="\u2026" /> calls'},id:{schema:zod.z.string().optional(),design:"plumbing",description:"used for the inlined <style> tag"},children:{schema:zod.z.unknown(),design:"plumbing",description:"typically a single Recharts ResponsiveContainer or chart"},passes:{schema:zod.z.unknown(),design:"plumbing",description:"pair with `content={<ChartTooltipContent />}`"},indicator:{schema:zod.z.enum(["dot","line","dashed"]).optional(),design:"knob"},ChartLegend:{schema:zod.z.unknown(),design:"plumbing"}}};var Ga={name:"Checkbox",description:"Binary on/off tied to a list (select multiple, agree to terms). Single on/off that controls a setting is better with Switch.",import:"@gradeui/ui",aliases:["checkbox","tickbox","tick box","check","multi-select item"],composesWith:["Label (via htmlFor)","Card","Form rows","Table (for row selection)"],props:{checked:{schema:zod.z.boolean().optional(),design:"knob"},onCheckedChange:{schema:zod.z.unknown().optional(),design:"event"},defaultChecked:{schema:zod.z.boolean().optional(),design:"knob"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},id:{schema:zod.z.string().optional(),design:"plumbing",description:"bind a Label's htmlFor to this"}}};var Oa={name:"Collapsible",description:'A single show/hide reveal \u2014 "Show advanced settings" rows, expandable inline help, "More details" sections inside cards. For multiple rows of expandable content where one-at-a-time matters, reach for Accordion. For a separate panel that floats above content, use Popover.',import:"@gradeui/ui",aliases:["collapsible","expand","show more","disclosure","advanced settings","disclosure group","expandable section","expandable view","show hide"],subcomponents:["CollapsibleTrigger","CollapsibleContent"],composesWith:["Button (as the trigger","asChild)","Card (expandable settings group)","Row (header + chevron)"],props:{open:{schema:zod.z.boolean().optional(),design:"knob",description:"controlled open state"},defaultOpen:{schema:zod.z.boolean().optional(),design:"knob",description:"uncontrolled initial state"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},children:{schema:zod.z.unknown(),design:"plumbing",description:"the clickable header (often a Button asChild)"}}};var Va={name:"Command",description:'A searchable list of actions or destinations \u2014 global \u2318K palettes, "jump to" inputs, account switchers with filter. Wrap in CommandDialog when it should pop over the entire app on a hotkey. For straight forms with filter, prefer a Select with a search input. For free-text autocomplete tied to a single value, prefer Combobox built on Popover + Command.',import:"@gradeui/ui",aliases:["command palette","command menu","cmd k","quick switcher","action menu","spotlight","spotlight search","quick open","fuzzy finder"],subcomponents:["CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","CommandSeparator","CommandShortcut","CommandDialog"],composesWith:["Dialog (CommandDialog wraps it)","Popover (inline combobox)","Tooltip"],props:{value:{schema:zod.z.string().optional(),design:"content",description:"controlled active item value"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},placeholder:{schema:zod.z.string().optional(),design:"content"},children:{schema:zod.z.unknown(),design:"plumbing",description:"wraps groups and empty state"},heading:{schema:zod.z.string().optional(),design:"content"},onSelect:{schema:zod.z.unknown().optional(),design:"event"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},open:{schema:zod.z.unknown(),design:"plumbing",description:"when you want the command palette mounted in a modal (cmd+k pattern)"}}};var _a={name:"DatePicker",description:'Any date or date-range entry. Use DatePicker for a single date (DOB, due date, booking). Use DateRangePicker for a span (report period, stay dates, filter window). Prefer these over <Input type="date"> \u2014 consistent theming, keyboard nav, a11y, and no browser-native UI drift.',import:"@gradeui/ui",aliases:["datepicker","calendar input","date field","date range","datepickerios","react native date picker","calendar input field","date field control"],subcomponents:["DateRangePicker"],composesWith:["Label","Form","Card (in CardContent)","Button (form submit)"],props:{value:{schema:zod.z.unknown().optional(),design:"plumbing"},onChange:{schema:zod.z.unknown().optional(),design:"event",description:"called on select or clear"},placeholder:{schema:zod.z.string().optional(),design:"content",description:'trigger label when empty (default "Pick a date" / "Pick a date range")'},disabled:{schema:zod.z.boolean().optional(),design:"knob"},format:{schema:zod.z.string().optional(),design:"content",description:'date-fns format token for the trigger label (default "PPP" single, "LLL dd, y" range)'},align:{schema:zod.z.enum(["start","center","end"]).optional(),design:"knob",description:'popover align (default "start")'},side:{schema:zod.z.enum(["top","right","bottom","left"]).optional(),design:"knob",description:"popover side"},captionLayout:{schema:zod.z.enum(["label","dropdown","dropdown-months","dropdown-years"]).optional(),design:"knob"},className:{schema:zod.z.string().optional(),design:"plumbing",description:"on the trigger button"},contentClassName:{schema:zod.z.string().optional(),design:"content",description:"on the PopoverContent"},icon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"replaces the default CalendarIcon"},numberOfMonths:{schema:zod.z.number().optional(),design:"knob",description:"DateRangePicker only, default 2"}}};var Wa={name:"Dialog",description:'Modal interruptions \u2014 confirmations, focused forms, detail views. Dialog is the right primitive for Apple HIG / React Native "Alert" (modal) semantics. For non-blocking inline messaging use Callout; for transient notifications use Toaster (Sonner). Always include DialogTitle (a11y requirement).',import:"@gradeui/ui",aliases:["modal","popup","overlay","alert","system alert","alert dialog","modal dialog","confirm dialog","react native modal","rn alert"],subcomponents:["DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","DialogClose"],composesWith:["Button (as DialogTrigger asChild","and inside DialogFooter)","Input/Textarea/Select inside DialogContent"],props:{open:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Radix controlled/uncontrolled pattern"},asChild:{schema:zod.z.enum(["wrap a Button"]).optional(),design:"plumbing"},accepts:{schema:zod.z.unknown(),design:"plumbing"},used:{schema:zod.z.unknown(),design:"plumbing"}}};var $a={name:"DropdownMenu",description:'A small action menu attached to a trigger \u2014 overflow "\u2026" buttons on cards, user-avatar menus in headers, "Insert" menus in editors. For a full searchable list, use Command. For ONE primary action plus a secondary, use a Button next to a smaller ghost Button instead of a dropdown.',import:"@gradeui/ui",aliases:["dropdown","dropdown menu","overflow menu","kebab menu","more menu","action menu","context-style menu","menu","pull-down menu","pulldown menu","context menu","popup menu","actions menu"],subcomponents:["DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuGroup","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuSubContent"],composesWith:["Button (as trigger asChild)","Avatar (user menu)","Card (overflow on a tile)","Tooltip (on the trigger)"],props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"usually wraps a Button"},align:{schema:zod.z.enum(["start","center","end","top","right","bottom","left"]).optional(),design:"knob"},onSelect:{schema:zod.z.unknown().optional(),design:"event"},DropdownMenuCheckboxItem:{schema:zod.z.unknown(),design:"plumbing"},DropdownMenuSub:{schema:zod.z.unknown(),design:"plumbing",description:"sub-trigger shows children, sub-content holds the deeper items"},children:{schema:zod.z.unknown(),design:"plumbing",description:"right-aligned kbd hint"}}};var Ua={name:"Flex",description:"The unopinionated flexbox primitive \u2014 reach for Flex when Stack, Row, or Grid don't quite fit. Specifically when you need reverse direction (`row-reverse` / `col-reverse`), CSS defaults instead of Row's baked-in `items-center gap-md`, or baseline alignment. Otherwise prefer Stack / Row / Grid \u2014 they're easier to read and tuned for the 95% case. Flex is the escape hatch, not the default.",import:"@gradeui/ui",aliases:["flex","flexbox","flex container","hstack","vstack","horizontal","vertical","generic container","layout view"],composesWith:["any content component"],props:{direction:{schema:zod.z.enum(["row","col","row-reverse","col-reverse"]).optional(),design:"knob",description:"main-axis direction",default:"row"},gap:{schema:zod.z.enum(["none","xs","sm","md","lg","xl","2xl"]).optional(),design:"knob",description:"gap between children",default:"none"},align:{schema:zod.z.enum(["start","center","end","stretch","baseline"]).optional(),design:"knob",description:"cross-axis alignment",default:"stretch"},justify:{schema:zod.z.enum(["start","center","end","between","around","evenly"]).optional(),design:"knob",description:"main-axis distribution",default:"start"},wrap:{schema:zod.z.enum(["nowrap","wrap","wrap-reverse"]).optional(),design:"knob",description:"wrap behaviour when children overflow",default:"nowrap"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"render as the child element via Slot",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var ja={name:"Grid",description:"2D layouts where Stack (vertical) and Row (horizontal) don't fit \u2014 stat-card grids, feature tiles, pricing columns, photo grids. Reach for Grid over hand-rolled `grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4` so the column count is a prop the settings panel can mutate and the responsive ladder stays consistent across designs.",import:"@gradeui/ui",aliases:["grid","tiles","cards grid","stat grid","columns","feature grid","grid view","lazy v grid","lazyvgrid","lazy h grid","lazyhgrid","tile grid","masonry"],composesWith:["Card","Stack (inside each cell)","Row","Button","any content component"],props:{cols:{schema:zod.z.enum(["1","2","3","4","5","6","12"]).optional(),design:"knob",description:'desktop column count; each value has a baked-in responsive ladder (e.g. "4" \u2192 1 col mobile, 2 tablet, 4 desktop)',default:"3"},gap:{schema:zod.z.enum(["none","xs","sm","md","lg","xl","2xl"]).optional(),design:"knob",description:"gap between grid cells (same scale as Stack/Row)",default:"md"},align:{schema:zod.z.enum(["start","center","end","stretch"]).optional(),design:"knob",description:"cross-axis alignment of cells",default:"stretch"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"render as the child element via Slot",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var Ka={name:"HoverCard",description:"Rich preview content surfaced on hover \u2014 user profile mini-cards on @-mentions, link previews, definition popups. Pointer-only by design (no touch-friendly trigger); pair with a click target for touch devices, or fall back to Popover. NEVER use HoverCard for critical info \u2014 if the user can't reach it via keyboard or touch, it might as well not exist for accessibility.",import:"@gradeui/ui",aliases:["hover card","hover preview","mention preview","profile peek","link preview","rich tooltip","link preview card","profile hover","peek card"],subcomponents:["HoverCardTrigger","HoverCardContent"],composesWith:["Avatar (user preview)","Card (richer content)","Link (the trigger)"],props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"usually a Link or Button"},side:{schema:zod.z.unknown().optional(),design:"plumbing"}}};var qa={name:"Input",description:"Any single-line text entry. Always pair with a Label for accessibility.",import:"@gradeui/ui",aliases:["text field","textbox","textfield","form field","text input","secure field","search field","url field","number field","textinput","text input field","react native textinput"],composesWith:["Label","Form","Card (in CardContent)","Button (form submit)"],props:{type:{schema:zod.z.string().optional(),design:"content"}}};var Ya={name:"Label",description:"Every Input / Textarea / Checkbox / Switch / RadioGroup. Always use htmlFor so clicking the label focuses the control.",import:"@gradeui/ui",aliases:["label","form label","field label","caption"],composesWith:["Input","Textarea","Checkbox","Switch","RadioGroup","Select"],props:{htmlFor:{schema:zod.z.string().optional(),design:"content",description:"binds to the input's id"}}};var Za={name:"Map",description:"Any layout that needs a real map \u2014 listings (real estate, Airbnb-style), fleet/logistics dashboards, store locators, anywhere a user picks a location from a viewport. Reach for the controlled `hoveredId` prop when a sibling list and the map need to highlight each other.",import:"@gradeui/ui",aliases:["map","maps","mapbox","maplibre","google maps","geo","location","latlng","coordinates","marker","pin","airbnb","listings","fleet","real estate","logistics","map view","mapkit","mapview","react native maps","rn maps"],subcomponents:["MapMarker"],composesWith:["Card (as marker content)","Badge","Avatar","Button","Row","Stack","Skeleton"],props:{provider:{schema:zod.z.unknown(),design:"plumbing",description:'"maplibre" (default, free, no key) | "mapbox" (needs accessToken) | "google" (needs apiKey). Switching is one prop change.'},center:{schema:zod.z.unknown(),design:"plumbing",description:"`[lng, lat]` tuple. ALWAYS lng first. Required."},zoom:{schema:zod.z.unknown(),design:"plumbing",description:"number, 0\u201322. Required."},bounds:{schema:zod.z.unknown(),design:"plumbing",description:"`[[swLng, swLat], [neLng, neLat]]`. When set, takes precedence over center+zoom."},appearance:{schema:zod.z.unknown(),design:"plumbing",description:'"light" | "dark" | "satellite" | "auto" (default "auto", follows GradeThemeProvider mode).'},hoveredId:{schema:zod.z.unknown(),design:"plumbing",description:'controlled string id, pairs with onHoveredIdChange. The matching MapMarker gets `data-gds-state="hovered"` automatically. This is how you build list \u2194 map two-way sync.'},interactive:{schema:zod.z.unknown(),design:"plumbing",description:"false freezes pan/zoom, useful for static cards."},onLoad:{schema:zod.z.unknown(),design:"event",description:"handle exposes flyTo, panTo, fitBounds, getCenter, getZoom, getBounds, instance."},tilerKey:{schema:zod.z.enum(["maplibre"]),design:"knob",description:"only needed off `gradeui.com`/`localhost`. Default key is referrer-locked."},accessToken:{schema:zod.z.enum(["mapbox), apiKey (google"]),design:"knob",description:"required for those providers."}}};var Dl=zod.z.object({kind:zod.z.literal("album"),artist:zod.z.string(),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Al=zod.z.object({kind:zod.z.literal("tv-show"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Il=zod.z.object({kind:zod.z.literal("movie"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Fl=zod.z.object({kind:zod.z.literal("game"),title:zod.z.string(),description:zod.z.string().optional()}),zl=zod.z.object({kind:zod.z.literal("book"),title:zod.z.string().optional(),author:zod.z.string().optional(),isbn:zod.z.string().optional(),description:zod.z.string().optional()}),Bl=zod.z.object({kind:zod.z.literal("poster"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Gl=zod.z.object({kind:zod.z.literal("portrait"),name:zod.z.string().optional(),role:zod.z.string().optional()}),Ol=zod.z.object({kind:zod.z.literal("landscape"),location:zod.z.string().optional(),mood:zod.z.string().optional()}),Vl=zod.z.object({kind:zod.z.literal("product"),name:zod.z.string().optional(),brand:zod.z.string().optional()}),_l=zod.z.object({kind:zod.z.literal("food"),dish:zod.z.string().optional(),cuisine:zod.z.string().optional()}),Wl=zod.z.object({kind:zod.z.literal("generic"),prompt:zod.z.string()}),$l=zod.z.union([zod.z.object({kind:zod.z.literal("video")}),zod.z.object({kind:zod.z.literal("audio")}),zod.z.object({kind:zod.z.literal("embed")}),zod.z.object({kind:zod.z.literal("3d")})]),Ul=zod.z.union([Dl,Al,Il,Fl,zl,Bl,Gl,Ol,Vl,_l,Wl,$l]),jl=zod.z.enum(["video","square","portrait","wide","auto"]),Kl=zod.z.enum(["none","sm","md","lg","xl"]),ql=zod.z.enum(["album","tv-show","movie","game","book","portrait","landscape","poster","product","food","video","audio","embed","3d","generic"]),Yl=zod.z.union([zod.z.literal("auto"),zod.z.literal("icon"),zod.z.literal("none")]),xr={name:"MediaSurface",description:"The canonical media slot for ALL non-person imagery \u2014 album art, posters, hero images, landscape photos, video and 3D containers.",when:"Pass `hint` + `alt` + (optionally) `source` so the empty-state placeholder is meaningful and the generation pipeline can later fill the slot with a real image. Use directly for declarative slots; the higher-level VideoPlayer / RivePlayer / ThreeScene wrap this for runtime-heavy media.",antipatterns:["Don't wrap <Avatar> inside <MediaSurface> to get an initials fallback. Set `alt` + `hint` on MediaSurface directly \u2014 the placeholder renders initials at small sizes derived from `alt`.","Don't use <Avatar> for album art, posters, products, food, landscapes, etc. Avatar is for PEOPLE only.","Don't inline manual gradient backgrounds (`bg-gradient-to-br \u2026`) on MediaSurface as a 'placeholder vibe' \u2014 the empty-state is already styled via `--gds-media-placeholder-bg/-fg` tokens."],composesWith:["Card","CardBlock","MediaBlock","VideoPlayer","RivePlayer","ThreeScene"],aliases:["media","image slot","media slot","image placeholder","cover","thumbnail","poster slot"],import:"@gradeui/ui",props:{hint:{schema:ql.optional(),design:"knob",control:"glyph-picker",label:"Slot kind",description:"Picks the placeholder glyph + the default aspect + the future generation provider. Defaults to 'generic'.",default:"generic",examples:["album","portrait","landscape","poster"]},aspect:{schema:jl.optional(),design:"knob",control:"toggle-group",label:"Aspect ratio",description:"Override the slot's natural framing. When omitted, derived from `hint`: album/product/food \u2192 square, portrait/poster \u2192 portrait, landscape \u2192 wide, video/audio/embed/generic \u2192 video."},radius:{schema:Kl.optional(),design:"knob",control:"toggle-group",label:"Corner radius",default:"lg",description:"Driven by the `--gds-media-radius` CSS variable."},border:{schema:zod.z.boolean().optional(),design:"knob",label:"Show border",default:false},loading:{schema:zod.z.boolean().optional(),design:"knob",label:"Loading state",default:false,description:"Overlays the muted-pulse skeleton on top of the slot."},emptyState:{schema:Yl.optional(),design:"knob",control:"select",label:"Empty state",default:"auto",description:"'auto' renders the size-tiered placeholder (initials \u2192 glyph \u2192 glyph + caption). 'icon' is a legacy alias. 'none' renders a truly empty surface."},alt:{schema:zod.z.string().optional(),design:"content",control:"text",label:"Alt text",description:"Becomes the eventual `<img alt>`. Also drives the placeholder caption (>160px slots) and the 2-letter initials fallback (<64px slots).",examples:["Travelling Without Moving \u2014 Jamiroquai","Sunset over Mount Fuji"]},src:{schema:zod.z.string().url().optional(),design:"content",control:"url",label:"Image URL",description:"When set, renders an `<img>` filling the slot via object-cover. The wrapper keeps its aspect/radius/border. Generators patch this prop; manual values always win."},source:{schema:Ul.optional(),design:"structured",label:"Source descriptor",description:"Structured metadata for the generation pipeline. Opaque to MediaSurface itself; read by the resolver to look up real imagery from the right provider (MusicBrainz / Pollinations / etc.).",perKindFields:{album:{artist:"string",title:"string",year:"number?"},poster:{title:"string",year:"number?"},portrait:{name:"string?",role:"string?"},landscape:{location:"string?",mood:"string?"},product:{name:"string?",brand:"string?"},food:{dish:"string?",cuisine:"string?"},generic:{prompt:"string"},video:{},audio:{},embed:{},"3d":{}}},className:{schema:zod.z.string().optional(),design:"plumbing"},style:{schema:zod.z.record(zod.z.string(),zod.z.unknown()).optional(),design:"plumbing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Escape hatch for putting a custom <video>, <canvas>, Rive runtime, etc. inside. When supplied, the placeholder is suppressed."},overlay:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Decorative layer rendered ABOVE the media/placeholder (play buttons, hover gradients, corner badges). Does NOT suppress the placeholder."},glyph:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Per-instance override of the hint-derived placeholder glyph. Most consumers should pick a `hint` and let the map decide."},fallback:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Custom node shown while `loading` is true."},onVisibilityChange:{schema:zod.z.function().optional(),design:"event",description:"Fires when the surface enters / leaves the viewport (IntersectionObserver)."}},actions:{fill:{label:"Fill image",icon:"Sparkles",description:"Resolve this slot's source via the free providers (MusicBrainz \u2192 Pollinations \u2192 Picsum) and patch the result into the runtime URL map.",kind:"resolve-media-source",enabledWhen:{propPresent:"source"}},refresh:{label:"Refresh",icon:"RotateCw",description:"Re-fetch this slot's resolved URL (cache-busts the browser AND the local URL map). Useful when a Pollinations URL failed to load on first hit \u2014 Pollinations has typically finished its cold-start by now, so a retry usually succeeds.",kind:"refresh-media-source",enabledWhen:{propPresent:"source"}}}};var Xa={name:"MultiSelect",description:`Picking multiple items from a finite list \u2014 tag selectors, filter chips,
|
|
18
|
+
"share with N people", multi-region settings.
|
|
19
|
+
|
|
20
|
+
**This is the answer for ANY "removable-chips-inside-an-input" pattern.**
|
|
21
|
+
MultiSelect's trigger renders the current selection as Badges with X
|
|
22
|
+
icons (the "chip-in-trigger" / "chip-in-input" shape), opens a Popover
|
|
23
|
+
with a searchable Command list, and supports "+N more" collapse past
|
|
24
|
+
\`maxCount\`. Reach for it for:
|
|
25
|
+
- Linear-style filter bars (assignee, label, project chips inside one trigger)
|
|
26
|
+
- Slack channel pickers (selected channels as removable chips)
|
|
27
|
+
- Notion relation properties (related-page chips)
|
|
28
|
+
- GitHub label / assignee pickers
|
|
29
|
+
- tag / category / mention pickers anywhere
|
|
30
|
+
Don't invent a \`<ChipInput>\` or \`<TagInput>\` for these \u2014 MultiSelect
|
|
31
|
+
already covers the trigger-with-badges shape.
|
|
32
|
+
|
|
33
|
+
Use \`<Select>\` instead for SINGLE selection. Use \`<Command>\` directly
|
|
34
|
+
(no MultiSelect wrapper) when the option set is unbounded or async
|
|
35
|
+
(users to @-mention, email recipients, search-as-you-type API results).`,import:"@gradeui/ui",composesWith:["Popover","Command","Badge","Checkbox-style row indicator","Separator"],props:{options:{schema:zod.z.unknown(),design:"plumbing"},value:{schema:zod.z.string().optional(),design:"content",description:"controlled selection"},defaultValue:{schema:zod.z.string().optional(),design:"content",description:"uncontrolled initial selection"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},placeholder:{schema:zod.z.string().optional(),design:"content",default:"Select\u2026"},searchPlaceholder:{schema:zod.z.string().optional(),design:"content",default:"Search\u2026"},emptyMessage:{schema:zod.z.string().optional(),design:"content",default:"Nothing matches."},maxCount:{schema:zod.z.number().optional(),design:"knob",description:'badges shown on the trigger before collapsing to "+N more"'},searchable:{schema:zod.z.boolean().optional(),design:"knob",description:"hide for short option lists",default:true},badgeDismissible:{schema:zod.z.boolean().optional(),design:"knob",description:"show \xD7 on each selected badge",default:true},disabled:{schema:zod.z.boolean().optional(),design:"knob"},modalPopover:{schema:zod.z.boolean().optional(),design:"knob",description:"Popover modal mode",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Ja={name:"Popover",description:'A floating panel anchored to a trigger that contains interactive content \u2014 date pickers, color pickers, filter pickers, "more info" panels, inline forms. Differs from Tooltip (hover-only, no focusable content) and Dialog (modal, blocks the page). DatePicker, DateRangePicker, and the Combobox pattern all compose Popover internally.',import:"@gradeui/ui",aliases:["popover","dropdown panel","floating panel","inline editor","attached panel","filter pop","popover view","popoverpresentation","attached popover"],subcomponents:["PopoverTrigger","PopoverContent","PopoverAnchor"],composesWith:["Button (as trigger)","Calendar (date picker)","Command (combobox)","Form controls (inline edit popover)"],props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"usually a Button"},side:{schema:zod.z.enum(["top","right","bottom","left","start","center","end"]).optional(),design:"knob"}}};var Qa={name:"Progress",description:"Determinate progress \u2014 file uploads, multi-step forms, quota meters. Indeterminate state \u2192 use Skeleton or animated Loader icon.",import:"@gradeui/ui",aliases:["progress","progress view","progress indicator","progress bar","determinate progress","loading bar","completion bar"],composesWith:["Card (as a section)","Badge (showing % next to it)","Label (describing what's loading)"],props:{value:{schema:zod.z.number().optional(),design:"knob",description:"percent complete"},max:{schema:zod.z.number().optional(),design:"knob"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var en={name:"RadioGroup",description:"A small set of mutually-exclusive options where the user needs to SEE all of them at once \u2014 pricing tiers (3-4 options), shipping speed, payment method radio cards. For 5+ options use Select. For a segmented control as part of a toolbar use ToggleGroup. For yes/no use Switch.",import:"@gradeui/ui",aliases:["radio group","radio buttons","single-choice","pricing options","payment method","radio buttons","radio control","single-select"],subcomponents:["RadioGroupItem"],composesWith:["Label (paired with each item via htmlFor)","Stack (vertical list)","Card (radio card pattern)"],props:{value:{schema:zod.z.string().optional(),design:"content",description:"controlled selection"},defaultValue:{schema:zod.z.string().optional(),design:"content",description:"uncontrolled initial"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},orientation:{schema:zod.z.enum(["horizontal","vertical"]).optional(),design:"knob",default:"vertical"},name:{schema:zod.z.string().optional(),design:"content",description:"form name when posting natively"},id:{schema:zod.z.string().optional(),design:"plumbing",description:"pair with a <Label htmlFor> for click-on-label"}}};var tn={name:"Resizable",description:`A multi-pane layout where the user wants to drag the divider \u2014 Slack/Mail-style list+detail, IDE editor+terminal, side-by-side compare view. Static layouts shouldn't use this \u2014 reach for AppShell with nav="three-pane" (fixed widths) or Grid (responsive ladder). Built on react-resizable-panels under the hood.`,import:"@gradeui/ui",aliases:["resizable","splitter","split pane","drag divider","adjustable panels","resizer","split view","draggable divider","split pane resizer","ns split view"],subcomponents:["ResizablePanelGroup","ResizablePanel","ResizableHandle"],composesWith:["AppShellMain (host the splitter inside main)","ScrollArea (each panel's content)","Card"],props:{direction:{schema:zod.z.enum(["horizontal","vertical"]),design:"knob",description:"required; sets the axis the user drags along"},autoSaveId:{schema:zod.z.string().optional(),design:"content",description:"persists user-adjusted sizes to localStorage under this id"},onLayout:{schema:zod.z.unknown().optional(),design:"event"},defaultSize:{schema:zod.z.number().optional(),design:"knob",description:"percent of group (0-100); siblings should sum to ~100"},minSize:{schema:zod.z.unknown().optional(),design:"plumbing",description:"percent bounds"},collapsible:{schema:zod.z.boolean().optional(),design:"knob",description:"allow this panel to collapse to zero"},collapsedSize:{schema:zod.z.unknown().optional(),design:"plumbing",description:"collapse behaviour controls"},withHandle:{schema:zod.z.boolean().optional(),design:"knob",description:"show a visible drag affordance (default just a hit-zone)"}}};var on={name:"RivePlayer",description:"Rive runtime wrapped in the shared media surface. Reach for Rive when you need interactive state-machine animations driven by scroll/hover/input. For non-interactive looping video, use VideoPlayer; for shader-driven backgrounds, use ThreeScene.",import:"@gradeui/ui",aliases:["rive","riv","animation","animated","lottie"],composesWith:["MediaSurface (internal)","Card","any container"],props:{src:{schema:zod.z.string(),design:"content",description:"URL or path to the .riv file"},stateMachines:{schema:zod.z.string().optional(),design:"content",description:"state machine(s) to run"},artboard:{schema:zod.z.string().optional(),design:"content",description:"artboard name; omit to use default"},controls:{schema:zod.z.boolean().optional(),design:"knob",description:"viewer mode by default; set true for play/pause overlay",default:false},autoPlay:{schema:zod.z.boolean().optional(),design:"knob",description:"respects reduced-motion",default:true},loop:{schema:zod.z.boolean().optional(),design:"knob",default:true},pauseOffscreen:{schema:zod.z.boolean().optional(),design:"knob",default:true},fit:{schema:zod.z.enum(["contain","cover","fill","fitWidth","fitHeight","none"]).optional(),design:"knob",default:"contain"},stateMachineInputs:{schema:zod.z.unknown().optional(),design:"plumbing"},aspect:{schema:zod.z.enum(["video","square","portrait","wide","auto"]).optional(),design:"knob",default:"square"},radius:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",default:"lg"},poster:{schema:zod.z.string().optional(),design:"content",description:"image shown while the runtime loads"}}};var rn={name:"Row",description:"Horizontal composition \u2014 button groups, inline form rows, logo + nav rows, anything on one line. Reach for Row instead of `flex items-center gap-*` so the alignment and spacing are editable through the settings panel. For two-pane layouts with an explicit ratio (sidebar + content, 1/3 + 2/3) use Split instead \u2014 Row evenly flows whatever children it holds.",import:"@gradeui/ui",aliases:["row","hstack","horizontal","inline","horizontal layout","hstack","h-stack","horizontal stack","lazyhstack"],composesWith:["Button","Input","NavItem","Stack (can wrap a Row)","any content component"],props:{gap:{schema:zod.z.enum(["none","xs","sm","md","lg","xl","2xl"]).optional(),design:"knob",description:"gap between children",default:"md"},align:{schema:zod.z.enum(["start","center","end","stretch","baseline"]).optional(),design:"knob",description:"cross-axis (vertical) alignment",default:"center"},justify:{schema:zod.z.enum(["start","center","end","between","around","evenly"]).optional(),design:"knob",description:"main-axis distribution",default:"start"},wrap:{schema:zod.z.boolean().optional(),design:"knob",description:"allow children to wrap onto additional lines when they overflow",default:false},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"render as the child element via Slot",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var an={name:"ScrollArea",description:"Bounded content that needs custom scroll chrome \u2014 sidebars with long item lists, chat transcripts, table panels inside a dashboard, anywhere the OS scrollbar would feel out of place against the design tokens. The wrapping element has to have a height constraint (`h-`, `max-h-`, or grid row sizing) or nothing scrolls \u2014 scroll-area can't infer a bound on its own. For body-level scrolling, leave the document to the browser.",import:"@gradeui/ui",aliases:["scroll area","scroll container","custom scrollbar","sidebar scroll","panel scroll","scroll view","scrollview","react native scrollview"],subcomponents:["ScrollBar"],composesWith:["Card (long card body)","AppShellNav (long sidebar)","Sheet (long modal body)","Table (sticky-header scrolling list)"],props:{type:{schema:zod.z.enum(["auto","always","scroll","hover"]).optional(),design:"knob",description:"when the scrollbar shows"},scrollHideDelay:{schema:zod.z.number().optional(),design:"knob",description:'ms before "scroll"/"hover" scrollbars fade'},dir:{schema:zod.z.enum(["ltr","rtl"]).optional(),design:"plumbing"},className:{schema:zod.z.string().optional(),design:"plumbing",description:"set a height/max-height here, otherwise nothing scrolls"},orientation:{schema:zod.z.enum(["vertical","horizontal"]).optional(),design:"knob",default:"vertical"}}};var nn={name:"Select",description:"Single-choice from 3+ known options. Fewer than 3 \u2192 RadioGroup. Huge list with search \u2192 use a Combobox (not in DS yet). Multi-select \u2192 not supported by this primitive.",import:"@gradeui/ui",aliases:["dropdown","combobox","picker","select","pop-up button","popup button","popup picker","picker view","rnpickerselect","react native picker","native picker"],subcomponents:["SelectTrigger","SelectValue","SelectContent","SelectItem","SelectGroup","SelectLabel","SelectSeparator"],composesWith:["Label (above SelectTrigger)","Form","Card"],props:{value:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Radix root"},wraps:{schema:zod.z.unknown(),design:"plumbing"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"text when nothing is selected"},accepts:{schema:zod.z.unknown(),design:"plumbing"}}};var sn={name:"Separator",description:"Light divider between sibling blocks in a Card, list, or header. For section-level partition use extra spacing instead.",import:"@gradeui/ui",aliases:["divider","rule","hr","line","horizontal rule"],composesWith:["Card (between CardHeader/Content/Footer)","navigation menus","any vertical stacks"],props:{orientation:{schema:zod.z.enum(["horizontal","vertical"]).optional(),design:"knob",description:'default "horizontal"'},decorative:{schema:zod.z.boolean().optional(),design:"knob",description:"hide from a11y tree",default:true},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var ln={name:"ShaderPresetPicker",description:"Runtime gallery of shader presets \u2014 click to select. Use with ThreeScene as a controlled input so the user can pick a background shader. For a single preview card, use ShaderPresetPreview directly.",import:"@gradeui/ui",aliases:["shader picker","preset picker","shader gallery","preset gallery"],composesWith:["ShaderPresetPreview (internal)","ThreeScene (the typical downstream consumer)"],props:{value:{schema:zod.z.string().optional(),design:"content",description:"currently selected preset id (controlled)"},onChange:{schema:zod.z.unknown().optional(),design:"event",description:"called when the user clicks a preset card"},filterTags:{schema:zod.z.string().optional(),design:"content",description:'only show presets matching at least one tag ("space" | "retro" | "motion" | "hero" | "background" \u2026)'},live:{schema:zod.z.enum(["never","hover","always"]).optional(),design:"knob",description:"thumbnail render mode",default:"hover"},postPreset:{schema:zod.z.string().optional(),design:"content",description:"shared post-FX preset applied to every thumbnail"},palette:{schema:zod.z.unknown().optional(),design:"plumbing",description:"shared palette applied to every thumbnail"},columns:{schema:zod.z.unknown().optional(),design:"plumbing",description:"grid columns at md+ breakpoint"}}};var dn={name:"ShaderPresetPreview",description:"Thumbnail-sized preview card for a shader preset. Defaults to a cheap static placeholder until hovered, at which point the live WebGL render kicks in. Use directly when you want a single preset card; use ShaderPresetPicker for a filterable grid.",import:"@gradeui/ui",aliases:["shader preview","preset preview","shader card"],composesWith:["ThreeScene (internal)","ShaderPresetPicker (wraps this)"],props:{preset:{schema:zod.z.string(),design:"content",description:"shader preset id from the registry"},live:{schema:zod.z.enum(["never","hover","always"]).optional(),design:"knob",description:"when to run the live WebGL render",default:"hover"},postPreset:{schema:zod.z.string().optional(),design:"content",description:"override the preset's default post-FX"},palette:{schema:zod.z.unknown().optional(),design:"plumbing",description:"palette overrides for the preview"},aspect:{schema:zod.z.enum(["video","square","portrait","wide"]).optional(),design:"knob",default:"video"},hideLabel:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the label strip under the preview",default:false},onClick:{schema:zod.z.unknown().optional(),design:"event"}}};var cn={name:"Sheet",description:"A panel that slides in from a screen edge \u2014 mobile nav drawers, side panels for editing a single record without leaving the list, filter trays on small viewports. For a centered focus modal use Dialog. For a transient announcement use Toast (Sonner). For inline reveals use Collapsible.",import:"@gradeui/ui",aliases:["sheet","drawer","side panel","slide-in","nav drawer","mobile drawer","slide-over","action sheet","modal sheet","bottom sheet","side sheet","react native modal sheet","bottom-sheet","ios action sheet"],subcomponents:["SheetTrigger","SheetContent","SheetHeader","SheetTitle","SheetDescription","SheetFooter","SheetClose"],composesWith:["Form controls (an inline edit sheet)","Button (trigger + close)","AppShellNav (mobile-only swap)"],props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing"},side:{schema:zod.z.enum(["top","right","bottom","left"]).optional(),design:"knob",default:"right"},className:{schema:zod.z.string().optional(),design:"plumbing",description:"usually set a width (right/left) or height (top/bottom)"},SheetTitle:{schema:zod.z.unknown(),design:"plumbing"}}};var pn={name:"Sidebar",description:'Vertical app navigation. Drop inside `<AppShellNav placement="side">` for full-page layouts. Compound API \u2014 `<SidebarHeader>` for brand, `<SidebarContent>` for the scrollable body of `<SidebarSection>` + `<SidebarItem>` rows, `<SidebarFooter>` for user / settings chrome. For top nav reach for TopMenu; for command-palette style search reach for Command.',import:"@gradeui/ui",aliases:["sidebar","side menu","sidemenu","navigation sidebar","app sidebar","side nav","side nav rail","master pane","sidebarmenu","navigation rail","react native drawer"],subcomponents:["SidebarHeader","SidebarContent","SidebarFooter","SidebarSection","SidebarItem"],composesWith:["AppShell (inside AppShellNav)","Avatar (in Footer)","Tooltip (auto-wrapped on collapsed items)","Button (asChild for custom routing)"],props:{collapsed:{schema:zod.z.boolean().optional(),design:"knob",description:"controlled collapsed state (wire onCollapsedChange when set)"},defaultCollapsed:{schema:zod.z.boolean().optional(),design:"knob",description:"uncontrolled initial value (default false)"},onCollapsedChange:{schema:zod.z.unknown().optional(),design:"event"},collapsible:{schema:zod.z.boolean().optional(),design:"knob",description:"show the affordance for the user to collapse (default true)"},variant:{schema:zod.z.enum(["rail","panel"]).optional(),design:"knob",description:"outer chrome \u2014 `rail` (default) sits flush against an adjacent surface with a single right-border + tracked width; `panel` is a card-style floating sidebar with full border + rounded corners and width inherited from the parent flex/grid track."},any:{schema:zod.z.unknown(),design:"plumbing",description:"brand / logo / org switcher; hides nothing when collapsed (centred)"},title:{schema:zod.z.unknown().optional(),design:"plumbing",description:'group label; **uppercase tracking-wide muted** styling auto-applied (Notion / Linear / Slack-style "GAMES", "FAVORITES", "WORKSPACE" headers); hidden when sidebar is collapsed'},icon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"optional icon beside the title"},trailing:{schema:zod.z.unknown().optional(),design:"plumbing",description:`Right-edge action slot. On **SidebarSection**: the canonical "+" / "..." header affordance (Notion's "+ Add page", Linear's "+" next to Favorites). On **SidebarTreeItem**: a sibling-of-button slot for settings cog / more-actions / '+ add child'; vertically centered against the row; click events stopPropagation'd so taps don't toggle expand. Branch row exposes \`group/row\` named-group, so consumer can use \`hidden group-hover/row:flex\` for hover-only visibility scoped to the branch alone.`},defaultExpanded:{schema:zod.z.boolean().optional(),design:"knob",description:"initial open state (default true)"},badge:{schema:zod.z.unknown().optional(),design:"plumbing",description:"trailing count / label (hidden when collapsed)"},active:{schema:zod.z.boolean().optional(),design:"knob",description:'current route; adds aria-current="page"'},href:{schema:zod.z.string().optional(),design:"content",description:"renders as <a>; for routing use `asChild` with your link component"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"wrap a custom link (<Link href> from Next.js etc.) via Radix Slot"},asButton:{schema:zod.z.boolean().optional(),design:"knob",description:"render as <button> for action rows (open dialog, log out)"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},collapsedLabel:{schema:zod.z.unknown().optional(),design:"plumbing",description:"tooltip override when sidebar is collapsed (defaults to children text)"},size:{schema:zod.z.enum(["sm","md"]).optional(),design:"knob",description:"row size \u2014 `md` (default) is the standard `text-sm font-medium` nav row; `sm` is `text-xs` + lighter weight + tighter padding for visually subordinate rows (nested screens, sub-pages). Active state still wins on color + weight."},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line under the label \u2014 `Edited 2m ago`, `12 items`, etc. Layout stacks label + description; icon vertically centered against stack; badge stays trailing. Hidden when sidebar collapsed."}}};var mn={name:"Skeleton",description:'Loading placeholder for content whose shape you know. Set width/height via className to mimic the real content (e.g. "h-4 w-32"). Not a spinner \u2014 use it where the real thing will drop in.',import:"@gradeui/ui",aliases:["placeholder","shimmer","loader","loading state","redacted","redacted placeholder","shimmer placeholder","content placeholder","lottie placeholder"],composesWith:["Card","Avatar (inside a Skeleton for avatar loading)","any layout"],props:{className:{schema:zod.z.string().optional(),design:"plumbing",description:"required in practice; supply width/height utilities"}}};var un={name:"Slider",description:'A continuous-ish numeric pick \u2014 volume, opacity, font size, price-range filters. Use a single-thumb slider for one value, two-thumb for a range. For a small set of discrete options (1-5 stars, sm/md/lg) prefer ToggleGroup. For free-text numeric entry use an Input type="number".',import:"@gradeui/ui",aliases:["slider","range slider","range input","volume","opacity slider","scrub","drag value","slider control","value slider","react native slider"],composesWith:["Label (mandatory above)","Row (label + current value display)","Card (settings rows)"],props:{value:{schema:zod.z.number().optional(),design:"knob",description:"controlled value; ALWAYS an array even for a single-thumb slider (`[50]`)"},defaultValue:{schema:zod.z.number().optional(),design:"knob",description:"uncontrolled initial; `[20, 80]` for a two-thumb range"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},min:{schema:zod.z.number().optional(),design:"knob"},max:{schema:zod.z.number().optional(),design:"knob"},step:{schema:zod.z.number().optional(),design:"knob"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},orientation:{schema:zod.z.enum(["horizontal","vertical"]).optional(),design:"knob",default:"horizontal"},dir:{schema:zod.z.enum(["ltr","rtl"]).optional(),design:"plumbing"},inverted:{schema:zod.z.boolean().optional(),design:"knob",description:"flip the visual direction"},name:{schema:zod.z.string().optional(),design:"content",description:"form name when posting natively"}}};var gn={name:"Sortable",description:"Drag-to-reorder lists, kanban-column reordering, sortable shelves, tab strips the user can rearrange. Pairs with any layout primitive \u2014 Stack for vertical lists, Row for horizontal strips, Grid for 2D card walls. For cross-container drag (drag a card from one column to another) hand-roll DndContext at the page level \u2014 Sortable v1 covers single-list reorder; Sortable.Group for cross-container is a planned follow-up. Reach for raw `@dnd-kit/core` if you need custom collision detection, drag overlays with arbitrary chrome, or non-list use cases (kanban swimlanes, draggable canvas nodes).",import:"@gradeui/ui",aliases:["sortable","reorder","drag and drop","dnd","draggable list","sortable list","kanban","drag to reorder","drag-drop","dragdroplist","drag handle","react native draggable flatlist"],subcomponents:["Sortable.Item","Sortable.Handle"],composesWith:["Stack (vertical lists)","Row (horizontal strips)","Grid (2D card walls)","Card (typical item content)","Button (as Sortable.Handle asChild)"],props:{values:{schema:zod.z.unknown(),design:"plumbing",description:"ordered list of unique ids; the source of truth for the order"},onReorder:{schema:zod.z.unknown().optional(),design:"event",description:"fires with the new order after a drag that changed it"},strategy:{schema:zod.z.enum(["vertical","horizontal","grid"]).optional(),design:"knob",description:"match the layout your items render in",default:"vertical"},disabled:{schema:zod.z.boolean().optional(),design:"knob",description:"disable drag on every item"},Sortable:{schema:zod.z.unknown(),design:"plumbing",description:"must match one entry in the parent `values` array (identity, not React key)"}}};var fn={name:"Stack",description:"Default top-level layout inside the main slot when composing two or more stacked regions (hero + content + footer, auth card + subtext, etc.). Prefer Stack over hand-rolled `flex flex-col gap-*` so the vertical rhythm is editable through the settings panel.",import:"@gradeui/ui",aliases:["stack","vstack","vertical","column","vertical layout","v-stack","vertical stack","lazyvstack"],composesWith:["Section","Row","Split","Hero","any content component"],props:{gap:{schema:zod.z.enum(["none","xs","sm","md","lg","xl","2xl"]).optional(),design:"knob",description:"vertical gap between children",default:"md"},align:{schema:zod.z.enum(["start","center","end","stretch"]).optional(),design:"knob",description:"cross-axis (horizontal) alignment of children",default:"stretch"},justify:{schema:zod.z.enum(["start","center","end","between","around","evenly"]).optional(),design:"knob",description:'main-axis (vertical) distribution. Reach for this on absolute-positioned overlays (`justify="end"` pins children to the bottom) and split footers (`justify="between"`).',default:"start"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"render as the child element via Slot, so `<Stack asChild><section>\u2026</section></Stack>` stamps Stack's classes onto the `<section>` rather than nesting a wrapper div",default:false},className:{schema:zod.z.string().optional(),design:"plumbing"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var hn={name:"Switch",description:'Instant on/off setting ("Enable notifications", "Dark mode"). Commits on toggle \u2014 no submit button needed. For selecting-from-a-list use Checkbox.',import:"@gradeui/ui",aliases:["toggle","switch","on/off switch","ios toggle","toggle switch","switch control","react native switch"],composesWith:["Label (via htmlFor)","Card (settings rows)"],props:{checked:{schema:zod.z.boolean().optional(),design:"knob"},onCheckedChange:{schema:zod.z.unknown().optional(),design:"event"},defaultChecked:{schema:zod.z.boolean().optional(),design:"knob"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},id:{schema:zod.z.string().optional(),design:"plumbing"}}};var vn={name:"Table",description:"Structured tabular data \u2014 rows \xD7 columns with alignment requirements. NOT a layout grid \u2014 for that use div+Tailwind grid utilities. Keep to <100 rows; larger datasets need virtualisation (not in DS).",import:"@gradeui/ui",aliases:["table","table view","data table","datatable","grid view","data grid","rows and columns"],subcomponents:["TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],composesWith:["Card (wrap the table)","Badge (inside TableCell for status)","Checkbox (row selection)","Button (row actions)"],props:{Each:{schema:zod.z.unknown(),design:"plumbing"},No:{schema:zod.z.unknown(),design:"plumbing",description:"styling follows the active theme tokens"}}};var yn={name:"Tabs",description:'A small set of peer views within one surface (2\u20135 tabs). For primary nav use Side Menu/routing. For filters use a filter control, not tabs. Pick `variant="pill"` for app chrome (settings panels, in-card tab strips). Pick `variant="underlined"` for marketing/docs pages and browser-tab-style treatments.',import:"@gradeui/ui",aliases:["tabs","tab strip","tab bar","tab view","tabbed interface","pageviewcontroller","react native tab view","underlined tabs","page tabs","segment switcher","simple tabs"],subcomponents:["TabsList","TabsTrigger","TabsContent"],composesWith:["Card (tabs inside a card body)","Dialog","TooltipProvider (required for tooltip prop)"],props:{defaultValue:{schema:zod.z.unknown().optional(),design:"plumbing"},size:{schema:zod.z.enum(["sm","md","lg, default md"]).optional(),design:"knob",description:"t-shirt scale aligned with Button/ToggleGroup heights; cascades to every TabsTrigger via context so set it once on the list"},variant:{schema:zod.z.enum(["pill","underlined, default pill"]).optional(),design:"knob",description:"`pill` is the shadcn chip-on-muted look; `underlined` is the minimal text + bottom-border treatment (formerly the separate SimpleTabs component, collapsed into Tabs in May 2026). Cascades to triggers."},value:{schema:zod.z.string(),design:"content",description:"matches a TabsContent value; tooltip?: string \u2014 when set, wraps the trigger in the design-system Tooltip and auto-applies aria-label (useful for icon-only triggers); requires a TooltipProvider somewhere above the tabs"}}};var wn={name:"Textarea",description:"Multi-line text entry (descriptions, messages, comments). Pair with a Label. Single-line input \u2192 use Input instead.",import:"@gradeui/ui",aliases:["text area","multiline","comment box","message field","text editor","multi-line text","multiline input","multiline text field","comments box","multiline textinput"],composesWith:["Label","Form","Card (in CardContent)"],props:{}};var xn={name:"ThreeScene",description:"WebGL primitive for shader backgrounds, generative visuals, and bespoke three.js scenes. Three authoring paths, in order of preference \u2014 (1) pick a `preset` id; (2) if nothing in the registry fits, write a `fragmentShader` against the fixed uniform contract; (3) only as a last resort, pass a full `createScene` factory. For looping video, use VideoPlayer; for interactive animations, use RivePlayer.",import:"@gradeui/ui",aliases:["three","threejs","webgl","shader","scene","3d","generative","hero background","fragment shader","glsl"],composesWith:["MediaSurface (internal)","foreground content stacked above with `position: absolute/relative z-10`"],props:{preset:{schema:zod.z.enum(["space","plasma","voronoi","synthwave"]).optional(),design:"knob",description:"shader preset id from the registry"},fragmentShader:{schema:zod.z.string().optional(),design:"content",description:"user-authored GLSL body; takes precedence over preset"},onShaderError:{schema:zod.z.unknown().optional(),design:"event",description:'fires on compile failure; scene falls back to `preset="space"`'},postPreset:{schema:zod.z.enum(["none","vhs","cinematic","synthwave","crt"]).optional(),design:"knob",description:"post-processing pass",default:"vhs"},palette:{schema:zod.z.unknown().optional(),design:"plumbing",description:"any CSS-legal colour string per slot. Re-tints automatically when the theme changes. Unset slots fall back to defaults."},createScene:{schema:zod.z.unknown().optional(),design:"plumbing",description:"custom full scene factory; takes precedence over preset AND fragmentShader"},controls:{schema:zod.z.boolean().optional(),design:"knob",description:"play/pause overlay",default:false},autoPlay:{schema:zod.z.boolean().optional(),design:"knob",description:"respects reduced-motion",default:true},pauseOffscreen:{schema:zod.z.boolean().optional(),design:"knob",description:"big win for WebGL battery life",default:true},aspect:{schema:zod.z.enum(["video","square","portrait","wide","auto"]).optional(),design:"knob",default:"video"},maxDpr:{schema:zod.z.number().optional(),design:"knob",description:"lower for thumbnails / low-end devices"},radius:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",default:"lg"}}};var Rn={name:"Toast",description:'Transient, non-blocking feedback that confirms or warns about an action \u2014 "Saved", "Failed to upload", "Copied to clipboard", "Invitation sent". For permanent inline messages reach for Callout. For confirmations that block until acknowledged use Dialog. Mount <Toaster /> ONCE at the root of the app; everywhere else, call the `toast` helper.',import:"@gradeui/ui",aliases:["toast","toaster","sonner","notification","snackbar","alert toast","transient alert","transient banner","banner notification","toastandroid"],composesWith:["App root layout (single <Toaster /> mount)","Form submit handlers (success/error toasts)","Async actions"],props:{position:{schema:zod.z.enum(["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"]).optional(),design:"knob",default:"bottom-right"},theme:{schema:zod.z.enum(["light","dark","system"]).optional(),design:"knob"},richColors:{schema:zod.z.boolean().optional(),design:"knob",description:"colored variants for success/error/warning/info"},expand:{schema:zod.z.boolean().optional(),design:"knob",description:"keep multiple toasts visually separated rather than stacked"},visibleToasts:{schema:zod.z.number().optional(),design:"knob",description:"max concurrent toasts on screen (default 3)"},duration:{schema:zod.z.number().optional(),design:"knob",description:"default ms before auto-dismiss"}}};var Sn={name:"Toggle",description:`A standalone on/off button \u2014 Bold/Italic in a toolbar, "Show grid" in a header, single binary toggle that doesn't belong inside a Switch row. For two-or-more mutually-exclusive options use ToggleGroup. For a labeled settings switch ("Active: on/off") use Switch.`,import:"@gradeui/ui",aliases:["toggle","toggle button","press button","bold button","italic button"],composesWith:["Tooltip (wrap an icon-only Toggle)","Row","TabsList (sibling)"],props:{variant:{schema:zod.z.enum(["default","outline"]).optional(),design:"knob",description:"outline adds a border, default is borderless and ghost-like"},size:{schema:zod.z.enum(["default","sm","lg"]).optional(),design:"knob"},pressed:{schema:zod.z.boolean().optional(),design:"knob",description:"controlled pressed state"},defaultPressed:{schema:zod.z.boolean().optional(),design:"knob",description:"uncontrolled initial state"},onPressedChange:{schema:zod.z.unknown().optional(),design:"event"},disabled:{schema:zod.z.boolean().optional(),design:"knob"},children:{schema:zod.z.unknown(),design:"plumbing",description:"usually an icon or short label"}}};var Cn={name:"ToggleGroup",description:'A small set of mutually-exclusive (`type="single"`) or independent (`type="multiple"`) binary options that live side-by-side as a segmented control \u2014 viewport size picker (Mobile/Tablet/Desktop), text alignment, view density. Reads identically to a TabsList of the same size; reach for ToggleGroup when each option emits a value (like a form input) rather than swapping panels. Use Tabs for panel switching, Toggle for a single on/off.',import:"@gradeui/ui",aliases:["toggle group","segmented control","segmented buttons","button group","pill group","view selector","segmented picker","segmentedcontrolios","segmented buttons group","rn segmented control"],subcomponents:["ToggleGroupItem"],composesWith:["Card (header controls)","Row","AppShellHeader chrome","settings panels"],props:{type:{schema:zod.z.enum(["single","multiple"]),design:"knob",description:"single picks one, multiple picks any number"},value:{schema:zod.z.string().optional(),design:"content",description:"controlled; matches `type` (string for single, string[] for multiple)"},defaultValue:{schema:zod.z.string().optional(),design:"content",description:"uncontrolled initial"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},size:{schema:zod.z.enum(["sm","md","lg, default md"]).optional(),design:"knob",description:"cascades to every ToggleGroupItem via context, matches Tabs/Button heights"},variant:{schema:zod.z.enum(["default","outline"]).optional(),design:"knob"},tooltip:{schema:zod.z.unknown().optional(),design:"plumbing",description:"when set, wraps the item in a Tooltip; required for icon-only items where the visible chrome doesn't carry a label"},tooltipSide:{schema:zod.z.enum(["top","right","bottom",'left", default "top']).optional(),design:"knob",description:"side the tooltip renders on"},tooltipDelay:{schema:zod.z.number().optional(),design:"knob",description:"per-item delay override; falls back to the upstream TooltipProvider's delayDuration"}}};var kn={name:"Toolbar",description:`ANY three-region chrome bar \u2014 the leading/center/trailing pattern Apple HIG
|
|
36
|
+
describes as a "Toolbar." App window chrome (Reddit, Twitter, GitHub, Linear,
|
|
37
|
+
most desktop apps), section toolbars inside Cards or panels, bottom action
|
|
38
|
+
bars on mobile layouts, persistent footer toolbars.
|
|
39
|
+
|
|
40
|
+
Don't hand-roll \`<Row justify="between">\` with a flex-1 on a middle child and
|
|
41
|
+
manual min-width juggling \u2014 Toolbar gives you the canonical \`auto 1fr auto\`
|
|
42
|
+
grid for free, with \`role="toolbar"\`, \`data-gds-part\` markers, position
|
|
43
|
+
variants for top/bottom borders, and sticky sizing.
|
|
44
|
+
|
|
45
|
+
Slot semantics:
|
|
46
|
+
leading \u2014 Logo + nav rail (e.g. a \`<Row>\` of Buttons or Link components)
|
|
47
|
+
center \u2014 Search input, page title chip, segmented Tab strip
|
|
48
|
+
trailing \u2014 Icon buttons, notification bell, avatar, primary CTA
|
|
49
|
+
|
|
50
|
+
When a slot is omitted, its column collapses cleanly. Center stays visually
|
|
51
|
+
centered in the bar regardless of leading/trailing widths because the grid
|
|
52
|
+
template is \`auto 1fr auto\` (the center column absorbs available width).
|
|
53
|
+
|
|
54
|
+
Use as the top child of \`<AppShellHeader>\` for window-level chrome:
|
|
55
|
+
<AppShellHeader>
|
|
56
|
+
<Toolbar leading={<Logo/>} center={<Search/>} trailing={<Avatar/>} />
|
|
57
|
+
</AppShellHeader>
|
|
58
|
+
|
|
59
|
+
Use directly inside a Card or page section for section-scoped toolbars:
|
|
60
|
+
<Card>
|
|
61
|
+
<Toolbar size="sm" variant="subtle" leading={...} trailing={...} />
|
|
62
|
+
{content}
|
|
63
|
+
</Card>`,import:"@gradeui/ui",subcomponents:["ToolbarSlot"],composesWith:["Button","Avatar","Input","Logo","Badge","AppShellHeader","Card","Row","Stack"],props:{leading:{schema:zod.z.unknown().optional(),design:"plumbing",description:"left-aligned region (logo + primary nav)"},center:{schema:zod.z.unknown().optional(),design:"plumbing",description:"center region (search, page title, segmented control)"},trailing:{schema:zod.z.unknown().optional(),design:"plumbing",description:"right-aligned region (action icons, avatar, primary CTA)"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"escape hatch; bypasses slot layout"},position:{schema:zod.z.enum(["top","bottom","inline"]).optional(),design:"knob",description:"border placement",default:"top"},variant:{schema:zod.z.enum(["default","subtle","transparent"]).optional(),design:"knob",default:"default"},size:{schema:zod.z.enum(["sm","md","lg"]).optional(),design:"knob",description:"height + padding",default:"md"},sticky:{schema:zod.z.boolean().optional(),design:"knob",description:"pin to top/bottom of scroll container",default:false},"aria-label":{schema:zod.z.string().optional(),design:"content",description:"required by WAI-ARIA toolbar pattern",default:"Toolbar"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Tn={name:"Tooltip",description:"A short, non-essential label that explains a control on hover/focus \u2014 icon-only buttons in toolbars, abbreviated column headers, status dots. NEVER hide critical info inside a tooltip \u2014 they're invisible on touch and can be skipped by screen readers if implemented carelessly. For richer hover content use HoverCard. For inline help text that's always visible, use a description paragraph.",import:"@gradeui/ui",aliases:["tooltip","tip","hover tip","hint","label on hover","help tag","hint","helper text bubble","info tip"],subcomponents:["TooltipTrigger","TooltipContent","TooltipProvider"],composesWith:["Button (icon-only)","Toggle","TabsTrigger (the canonical tabs already have a `tooltip` prop that wraps this)","Avatar (status badge meaning)"],props:{delayDuration:{schema:zod.z.number().optional(),design:"knob",description:"ms hover before show; mount ONCE near the app root"},skipDelayDuration:{schema:zod.z.number().optional(),design:"knob",description:'ms gap that still feels like "same hover"'},open:{schema:zod.z.unknown().optional(),design:"plumbing"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"usually wraps a Button or icon"},side:{schema:zod.z.enum(["top","right","bottom","left","start","center","end"]).optional(),design:"knob",default:"top"}}};var Pn={name:"VideoPlayer",description:"HTML5 video wrapped in the shared media surface. Controls-on for a standard player, controls-off (+ autoplay/muted/loop) for hero / background video. Prefer Rive for anything interactive, Three Scene for shader backgrounds.",import:"@gradeui/ui",aliases:["video","mp4","movie","webm","clip","video view","av player","react native video","video element"],composesWith:["MediaSurface (internal)","Card (wrap for thumbnail grids)"],props:{src:{schema:zod.z.string(),design:"content",description:"video URL"},controls:{schema:zod.z.boolean().optional(),design:"knob",description:"show native controls; false for chromeless hero/background video",default:true},autoPlay:{schema:zod.z.boolean().optional(),design:"knob",description:"forces muted=true (browser restriction)",default:false},loop:{schema:zod.z.boolean().optional(),design:"knob",default:false},muted:{schema:zod.z.boolean().optional(),design:"knob",default:false},pauseOffscreen:{schema:zod.z.boolean().optional(),design:"knob",description:"pause when scrolled out of viewport",default:true},aspect:{schema:zod.z.enum(["video","square","portrait","wide","auto"]).optional(),design:"knob",default:"video"},radius:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",description:"driven by `--gds-media-radius`",default:"lg"},objectFit:{schema:zod.z.enum(["cover","contain","fill"]).optional(),design:"knob",default:"cover"},poster:{schema:zod.z.string().optional(),design:"content",description:'image shown before playback. Always rendered as a `loading="lazy"` `<img>` overlay (not the native `poster` attribute, which fetches eagerly).'},playbackRate:{schema:zod.z.number().optional(),design:"knob"}}};var kr={Accordion:Ca,AiChat:ka,AiChatComposer:Ta,AppShell:Pa,Avatar:Ma,Badge:Ea,Breadcrumb:La,Button:Ha,Calendar:Da,Callout:Aa,Card:Fa,Carousel:za,Chart:Ba,Checkbox:Ga,Collapsible:Oa,Command:Va,DatePicker:_a,Dialog:Wa,DropdownMenu:$a,Flex:Ua,Grid:ja,HoverCard:Ka,Input:qa,Label:Ya,Map:Za,MediaSurface:xr,MultiSelect:Xa,Popover:Ja,Progress:Qa,RadioGroup:en,Resizable:tn,RivePlayer:on,Row:rn,ScrollArea:an,Select:nn,Separator:sn,ShaderPresetPicker:ln,ShaderPresetPreview:dn,Sheet:cn,Sidebar:pn,Skeleton:mn,Slider:un,Sortable:gn,Stack:fn,Switch:hn,Table:vn,Tabs:yn,Textarea:wn,ThreeScene:xn,Toast:Rn,Toggle:Sn,ToggleGroup:Cn,Toolbar:kn,Tooltip:Tn,VideoPlayer:Pn};function Xl(e){return e?kr[e]??null:null}function Jl(){return Object.keys(kr)}function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var od=Be__namespace.Root,Mn=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(Be__namespace.Item,{ref:o,className:n("border-b",e),...t}));Mn.displayName="AccordionItem";var Nn=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(Be__namespace.Header,{className:"flex"},w__namespace.createElement(Be__namespace.Trigger,{ref:r,className:n("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...o},t,w__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));Nn.displayName=Be__namespace.Trigger.displayName;var En=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(Be__namespace.Content,{ref:r,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...o},w__namespace.createElement("div",{className:n("pb-4 pt-0",e)},t)));En.displayName=Be__namespace.Content.displayName;var Ln=classVarianceAuthority.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"}},defaultVariants:{variant:"default"}}),ad={destructive:"alert",warning:"alert",info:"status",success:"status",default:"status"},Hn=w__namespace.forwardRef(({className:e,variant:t,role:o,...r},i)=>w__namespace.createElement("div",{ref:i,role:o??ad[t??"default"],"data-gds-part":"callout",className:n(Ln({variant:t}),e),...r}));Hn.displayName="Callout";var Dn=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("h5",{ref:o,"data-gds-part":"callout-title",className:n("mb-1 font-medium leading-none tracking-tight",e),...t}));Dn.displayName="CalloutTitle";var An=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"callout-description",className:n("text-sm [&_p]:leading-relaxed",e),...t}));An.displayName="CalloutDescription";var In=classVarianceAuthority.cva("gds-app-shell min-h-screen w-full bg-background text-foreground grid",{variants:{nav:{none:"",top:"",side:"","three-pane":""}},defaultVariants:{nav:"none"}}),Fn=classVarianceAuthority.cva("gds-app-shell-header",{variants:{sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{sticky:false}}),zn=classVarianceAuthority.cva("gds-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}}),Bn=classVarianceAuthority.cva("gds-app-shell-aside min-w-0 border-r bg-background",{variants:{sticky:{true:"sticky top-0 h-screen self-start",false:""}},defaultVariants:{sticky:false}}),Gn=classVarianceAuthority.cva("gds-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"}}),On=classVarianceAuthority.cva("gds-app-shell-footer border-t bg-background"),Vn=w__namespace.forwardRef(({className:e,nav:t,asChild:o=false,...r},i)=>w__namespace.createElement(o?reactSlot.Slot:"div",{ref:i,"data-gds-part":"app-shell","data-nav":t??"none",className:n(In({nav:t,className:e})),...r}));Vn.displayName="AppShell";var _n=w__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...r},i)=>w__namespace.createElement(o?reactSlot.Slot:"header",{ref:i,"data-gds-part":"app-shell-header",className:n(Fn({sticky:t,className:e})),...r}));_n.displayName="AppShellHeader";var Wn=w__namespace.forwardRef(({className:e,placement:t,sticky:o,asChild:r=false,...i},a)=>w__namespace.createElement(r?reactSlot.Slot:"nav",{ref:a,"data-gds-part":"app-shell-nav","data-placement":t??"top",className:n(zn({placement:t,sticky:o,className:e})),...i}));Wn.displayName="AppShellNav";var $n=w__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...r},i)=>w__namespace.createElement(o?reactSlot.Slot:"aside",{ref:i,"data-gds-part":"app-shell-aside",className:n(Bn({sticky:t,className:e})),...r}));$n.displayName="AppShellAside";var Un=w__namespace.forwardRef(({className:e,maxWidth:t,asChild:o=false,...r},i)=>w__namespace.createElement(o?reactSlot.Slot:"main",{ref:i,"data-gds-part":"app-shell-main",className:n(Gn({maxWidth:t,className:e})),...r}));Un.displayName="AppShellMain";var jn=w__namespace.forwardRef(({className:e,asChild:t=false,...o},r)=>w__namespace.createElement(t?reactSlot.Slot:"footer",{ref:r,"data-gds-part":"app-shell-footer",className:n(On({className:e})),...o}));jn.displayName="AppShellFooter";var Kn=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(nt__namespace.Root,{ref:o,className:n("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...t}));Kn.displayName=nt__namespace.Root.displayName;var qn=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(nt__namespace.Image,{ref:o,className:n("aspect-square h-full w-full",e),...t}));qn.displayName=nt__namespace.Image.displayName;var Yn=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(nt__namespace.Fallback,{ref:o,className:n("flex h-full w-full items-center justify-center rounded-full bg-muted",e),...t}));Yn.displayName=nt__namespace.Fallback.displayName;var Xn=classVarianceAuthority.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-gds-yellow-400 text-gds-gray-900 shadow hover:bg-gds-yellow-500",success:"border-transparent bg-gds-green-500 text-gds-gray-900 shadow hover:bg-gds-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-gds-green-500/20 bg-gds-green-500/10 text-gds-green-600 dark:text-gds-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-gds-yellow-500/20 bg-gds-yellow-400/10 text-gds-yellow-600 dark:text-gds-yellow-400","success-outline":"border-gds-green-500/50 bg-transparent text-gds-green-600 dark:text-gds-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 Vo({className:e,variant:t,rounded:o,...r}){return w__namespace.createElement("div",{className:n(Xn({variant:t,rounded:o}),e),...r})}var so=classVarianceAuthority.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",raised:"gds-button-raised"},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"}}),xe=w__namespace.forwardRef(({className:e,variant:t,size:o,asChild:r=false,...i},a)=>w__namespace.createElement(r?reactSlot.Slot:"button",{"data-gds-part":"button",className:n("gds-button",so({variant:t,size:o,className:e})),ref:a,...i}));xe.displayName="Button";function Wo({className:e,classNames:t,showOutsideDays:o=true,captionLayout:r="label",buttonVariant:i="ghost",formatters:a,components:d,...m}){let s=reactDayPicker.getDefaultClassNames();return w__namespace.createElement(reactDayPicker.DayPicker,{showOutsideDays:o,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:r,formatters:{formatMonthDropdown:c=>c.toLocaleString("default",{month:"short"}),...a},classNames:{root:n("w-fit",s.root),months:n("relative flex flex-col gap-4 md:flex-row",s.months),month:n("flex w-full flex-col gap-4",s.month),nav:n("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",s.nav),button_previous:n(so({variant:i}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_previous),button_next:n(so({variant:i}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_next),month_caption:n("flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",s.month_caption),dropdowns:n("flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",s.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",s.dropdown_root),dropdown:n("bg-popover absolute inset-0 opacity-0",s.dropdown),caption_label:n("select-none font-medium",r==="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:n("flex",s.weekdays),weekday:n("text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",s.weekday),week:n("mt-2 flex w-full",s.week),week_number_header:n("w-[--cell-size] select-none",s.week_number_header),week_number:n("text-muted-foreground select-none text-[0.8rem]",s.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",s.day),range_start:n("bg-accent rounded-l-md",s.range_start),range_middle:n("rounded-none",s.range_middle),range_end:n("bg-accent rounded-r-md",s.range_end),today:n("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",s.today),outside:n("text-muted-foreground aria-selected:text-muted-foreground",s.outside),disabled:n("text-muted-foreground opacity-50",s.disabled),hidden:n("invisible",s.hidden),...t},components:{Root:({className:c,rootRef:l,...p})=>w__namespace.createElement("div",{"data-slot":"calendar",ref:l,className:n(c),...p}),Chevron:({className:c,orientation:l,...p})=>l==="left"?w__namespace.createElement(lucideReact.ChevronLeftIcon,{className:n("size-4",c),...p}):l==="right"?w__namespace.createElement(lucideReact.ChevronRightIcon,{className:n("size-4",c),...p}):w__namespace.createElement(lucideReact.ChevronDownIcon,{className:n("size-4",c),...p}),DayButton:Qn,WeekNumber:({children:c,...l})=>w__namespace.createElement("td",{...l},w__namespace.createElement("div",{className:"flex size-[--cell-size] items-center justify-center text-center"},c)),...d},...m})}function Qn({className:e,day:t,modifiers:o,...r}){let i=reactDayPicker.getDefaultClassNames(),a=w__namespace.useRef(null);return w__namespace.useEffect(()=>{o.focused&&a.current?.focus();},[o.focused]),w__namespace.createElement(xe,{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":o.selected&&!o.range_start&&!o.range_end&&!o.range_middle,"data-range-start":o.range_start,"data-range-end":o.range_end,"data-range-middle":o.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",i.day,e),...r})}var Tr=w__namespace.createContext(null);function po(e){let t=w__namespace.useContext(Tr);if(!t)throw new Error(`<${e}> must be rendered inside a <Carousel> root.`);return t}var fd=5e3,gt=w__namespace.forwardRef(({loop:e=true,align:t="start",slidesPerView:o=1,autoplay:r=false,draggable:i=true,onSlideChange:a,className:d,style:m,children:s,...c},l)=>{let p=w__namespace.useMemo(()=>({loop:e,align:t,slidesToScroll:1,watchDrag:i,containScroll:e?false:"trimSnaps"}),[e,t,i]),[g,u]=md__default.default(p),[b,f]=w__namespace.useState(0),[h,P]=w__namespace.useState(0),[S,R]=w__namespace.useState(false),[C,k]=w__namespace.useState(false),B=w__namespace.useRef(new Map),H=w__namespace.useRef(a);H.current=a;let I=w__namespace.useMemo(()=>r?r===true?{}:r:null,[r]);w__namespace.useEffect(()=>{if(!u)return;let v=()=>{f(u.selectedScrollSnap()),P(u.scrollSnapList().length),R(u.canScrollPrev()),k(u.canScrollNext()),H.current?.(u.selectedScrollSnap());};return v(),u.on("select",v),u.on("reInit",v),()=>{u.off("select",v),u.off("reInit",v);}},[u]);let V=w__namespace.useCallback(v=>{u&&u.selectedScrollSnap()===v&&u.scrollNext();},[u]),Pe=w__namespace.useRef(false),ee=w__namespace.useRef(true),ye=w__namespace.useRef(null);w__namespace.useImperativeHandle(l,()=>ye.current),w__namespace.useEffect(()=>{if(!I?.pauseWhenOffscreen){ee.current=true;return}let v=ye.current;if(!v||typeof IntersectionObserver>"u")return;let O=new IntersectionObserver(D=>{ee.current=D.some(te=>te.isIntersecting);},{threshold:.25});return O.observe(v),()=>O.disconnect()},[I?.pauseWhenOffscreen]),w__namespace.useEffect(()=>{if(!u||!I)return;let v=null,O=()=>{v&&clearTimeout(v);let fe=u.selectedScrollSnap(),ne=B.current.get(fe)??I.delay??fd;v=setTimeout(()=>{if(Pe.current||!ee.current){O();return}u.scrollNext();},ne);},D=()=>O(),te=()=>{v&&clearTimeout(v);},Me=()=>O();return u.on("select",D),u.on("pointerDown",te),u.on("settle",Me),O(),()=>{v&&clearTimeout(v),u.off("select",D),u.off("pointerDown",te),u.off("settle",Me);}},[u,I]);let G=()=>{I?.pauseOnHover!==false&&(Pe.current=true);},ge=()=>{Pe.current=false;},Ae=w__namespace.useMemo(()=>({api:u,selectedIndex:b,slideCount:h,canScrollPrev:S,canScrollNext:C,durationsRef:B,advanceFromSlide:V}),[u,b,h,S,C,V]),we=`calc(100% / ${o})`;return w__namespace.createElement(Tr.Provider,{value:Ae},w__namespace.createElement("div",{ref:ye,"data-gds-part":"carousel",className:n("relative",d),style:{"--gds-carousel-slide-basis":we,...m},onMouseEnter:G,onMouseLeave:ge,...c},w__namespace.createElement("div",{ref:g,"data-gds-part":"carousel-viewport",className:"overflow-hidden",style:{borderRadius:"var(--gds-carousel-radius, var(--gds-media-radius, 0.5rem))"}},w__namespace.createElement("div",{"data-gds-part":"carousel-track",className:"flex",style:{gap:"var(--gds-carousel-gap, 0)",touchAction:"pan-y pinch-zoom"}},s))))});gt.displayName="Carousel";var $o=w__namespace.forwardRef(({duration:e,className:t,style:o,children:r,...i},a)=>{let{durationsRef:d}=po("Carousel.Slide"),m=w__namespace.useRef(null);return w__namespace.useImperativeHandle(a,()=>m.current),w__namespace.useEffect(()=>{if(e==null)return;let s=m.current;if(!s?.parentElement)return;let c=Array.from(s.parentElement.children).indexOf(s);if(c<0)return;let l=d.current;return l.set(c,e),()=>{l.delete(c);}},[e,d]),w__namespace.createElement("div",{ref:m,"data-gds-part":"carousel-slide",className:n("min-w-0 shrink-0 grow-0",t),style:{flexBasis:"var(--gds-carousel-slide-basis, 100%)",...o},...i},r)});$o.displayName="Carousel.Slide";var Pr=w__namespace.forwardRef(({src:e,poster:t,alt:o,controls:r=false,loop:i=true,fit:a="cover",duration:d,className:m,style:s,...c},l)=>{let{api:p,selectedIndex:g,advanceFromSlide:u}=po("Carousel.VideoSlide"),b=w__namespace.useRef(null),f=w__namespace.useRef(null);w__namespace.useImperativeHandle(l,()=>b.current);let[h,P]=w__namespace.useState(null);w__namespace.useEffect(()=>{let R=b.current;R?.parentElement&&P(Array.from(R.parentElement.children).indexOf(R));},[p]);let S=h!=null&&h===g;return w__namespace.useEffect(()=>{let R=f.current;if(R)if(S){let C=R.play();C&&typeof C.catch=="function"&&C.catch(()=>{});}else R.pause(),R.currentTime=0;},[S]),w__namespace.createElement($o,{ref:b,duration:d,className:n("relative overflow-hidden bg-[var(--gds-media-placeholder-bg)]",m),style:s,"data-gds-part":"carousel-video-slide",...c},t&&w__namespace.createElement("img",{src:t,alt:o??"","aria-hidden":S,className:"absolute inset-0 h-full w-full",style:{objectFit:a,opacity:S?0:1,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"}}),w__namespace.createElement("video",{ref:f,src:e,muted:true,playsInline:true,loop:i,controls:r,preload:"metadata","aria-label":o,className:"block h-full w-full",style:{objectFit:a,opacity:S?1:0,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"},onEnded:()=>{i||h!=null&&u(h);}}))});Pr.displayName="Carousel.VideoSlide";var Mr=w__namespace.forwardRef(({position:e="below",renderDot:t,className:o,style:r,...i},a)=>{let{api:d,selectedIndex:m,slideCount:s}=po("Carousel.Dots");if(s<=1)return null;let c=Array.from({length:s},(p,g)=>g),l=e==="overlay"?{position:"absolute",insetInlineStart:0,insetInlineEnd:0,bottom:"var(--gds-carousel-dots-inset, 0.75rem)",zIndex:1}:{marginBlockStart:"var(--gds-carousel-dots-gap, 0.75rem)"};return w__namespace.createElement("div",{ref:a,"data-gds-part":"carousel-dots",className:n("flex items-center justify-center",o),style:{gap:"var(--gds-carousel-dots-spacing, 0.5rem)",...l,...r},...i},c.map(p=>{let g=p===m,u=()=>d?.scrollTo(p);return t?t({index:p,active:g,onClick:u}):w__namespace.createElement("button",{key:p,type:"button",onClick:u,"aria-label":`Go to slide ${p+1}`,"aria-current":g?"true":void 0,"data-active":g||void 0,className:"rounded-full transition-all",style:{width:g?"var(--gds-carousel-dot-active-width, 1.25rem)":"var(--gds-carousel-dot-size, 0.5rem)",height:"var(--gds-carousel-dot-size, 0.5rem)",background:g?"var(--gds-carousel-dot-active-color, oklch(var(--primary)))":"var(--gds-carousel-dot-color, oklch(var(--muted-foreground) / 0.4))"}})}))});Mr.displayName="Carousel.Dots";var Nr=w__namespace.forwardRef(({position:e="overlay",className:t,style:o,...r},i)=>e==="outside"?w__namespace.createElement("div",{ref:i,"data-gds-part":"carousel-arrows",className:n("flex items-center justify-end gap-2 pt-2",t),style:o,...r},w__namespace.createElement(lo,null),w__namespace.createElement(co,null)):w__namespace.createElement("div",{ref:i,"data-gds-part":"carousel-arrows",className:n("pointer-events-none absolute inset-0 z-[1]",t),style:o,...r},w__namespace.createElement(lo,{className:"pointer-events-auto absolute left-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"}),w__namespace.createElement(co,{className:"pointer-events-auto absolute right-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"})));Nr.displayName="Carousel.Arrows";var lo=w__namespace.forwardRef(({className:e,style:t,children:o,...r},i)=>{let{api:a,canScrollPrev:d}=po("Carousel.Prev");return w__namespace.createElement("button",{ref:i,type:"button","data-gds-part":"carousel-prev","aria-label":"Previous slide",disabled:!d,onClick:()=>a?.scrollPrev(),className:n("inline-flex items-center justify-center rounded-full","transition disabled:opacity-40 disabled:cursor-not-allowed","hover:[background:var(--gds-carousel-arrow-hover-bg,oklch(var(--background)))]",e),style:{width:"var(--gds-carousel-arrow-size, 2.25rem)",height:"var(--gds-carousel-arrow-size, 2.25rem)",background:"var(--gds-carousel-arrow-bg, oklch(var(--background) / 0.85))",color:"var(--gds-carousel-arrow-fg, oklch(var(--foreground)))",backdropFilter:"var(--gds-carousel-arrow-backdrop, blur(6px))",boxShadow:"var(--gds-carousel-arrow-shadow, 0 2px 8px oklch(0 0 0 / 0.12))",...t},...r},o??w__namespace.createElement(lucideReact.ChevronLeft,{className:"h-4 w-4","aria-hidden":true}))});lo.displayName="Carousel.Prev";var co=w__namespace.forwardRef(({className:e,style:t,children:o,...r},i)=>{let{api:a,canScrollNext:d}=po("Carousel.Next");return w__namespace.createElement("button",{ref:i,type:"button","data-gds-part":"carousel-next","aria-label":"Next slide",disabled:!d,onClick:()=>a?.scrollNext(),className:n("inline-flex items-center justify-center rounded-full","transition disabled:opacity-40 disabled:cursor-not-allowed","hover:[background:var(--gds-carousel-arrow-hover-bg,oklch(var(--background)))]",e),style:{width:"var(--gds-carousel-arrow-size, 2.25rem)",height:"var(--gds-carousel-arrow-size, 2.25rem)",background:"var(--gds-carousel-arrow-bg, oklch(var(--background) / 0.85))",color:"var(--gds-carousel-arrow-fg, oklch(var(--foreground)))",backdropFilter:"var(--gds-carousel-arrow-backdrop, blur(6px))",boxShadow:"var(--gds-carousel-arrow-shadow, 0 2px 8px oklch(0 0 0 / 0.12))",...t},...r},o??w__namespace.createElement(lucideReact.ChevronRight,{className:"h-4 w-4","aria-hidden":true}))});co.displayName="Carousel.Next";gt.Slide=$o;gt.VideoSlide=Pr;gt.Dots=Mr;gt.Arrows=Nr;gt.Prev=lo;gt.Next=co;var hd=gt;function bd(){return w__namespace.useContext(Tr)?.api}var ei=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card",className:n("gds-card rounded-xl border bg-card text-card-foreground shadow",e),...t}));ei.displayName="Card";var ti=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card-header",className:n("flex flex-col space-y-1.5 p-6",e),...t}));ti.displayName="CardHeader";var oi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card-title",className:n("font-semibold leading-none tracking-tight",e),...t}));oi.displayName="CardTitle";var ri=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card-description",className:n("text-sm text-muted-foreground",e),...t}));ri.displayName="CardDescription";var ai=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card-content",className:n("p-6 pt-0",e),...t}));ai.displayName="CardContent";var ni=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{ref:o,"data-gds-part":"card-footer",className:n("flex items-center p-6 pt-0",e),...t}));ni.displayName="CardFooter";var ii=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(mo__namespace.Root,{ref:o,className:n("gds-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},w__namespace.createElement(mo__namespace.Indicator,{className:n("flex items-center justify-center text-current")},w__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))));ii.displayName=mo__namespace.Root.displayName;var Je=Ue__namespace.Root,Qe=Ue__namespace.Trigger,yd=Ue__namespace.Anchor,je=w__namespace.forwardRef(({className:e,align:t="center",sideOffset:o=4,...r},i)=>w__namespace.createElement(Ue__namespace.Portal,null,w__namespace.createElement(Ue__namespace.Content,{ref:i,align:t,sideOffset:o,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),...r})));je.displayName=Ue__namespace.Content.displayName;var wd="PPP",xd="LLL dd, y";function Rd({value:e,onChange:t,placeholder:o="Pick a date",disabled:r,className:i,contentClassName:a,align:d="start",side:m,format:s=wd,captionLayout:c,icon:l,"aria-label":p}){return w__namespace.createElement(Je,null,w__namespace.createElement(Qe,{asChild:true},w__namespace.createElement(xe,{type:"button",variant:"outline",disabled:r,"aria-label":p??(e?void 0:o),"data-empty":!e,className:n("w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",i)},l??w__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?dateFns.format(e,s):w__namespace.createElement("span",null,o))),w__namespace.createElement(je,{className:n("w-auto p-0",a),align:d,side:m},w__namespace.createElement(Wo,{mode:"single",selected:e,onSelect:t,captionLayout:c,initialFocus:true})))}function Sd({value:e,onChange:t,placeholder:o="Pick a date range",disabled:r,className:i,contentClassName:a,align:d="start",side:m,format:s=xd,captionLayout:c,icon:l,numberOfMonths:p=2,"aria-label":g}){let u=!!e?.from;return w__namespace.createElement(Je,null,w__namespace.createElement(Qe,{asChild:true},w__namespace.createElement(xe,{type:"button",variant:"outline",disabled:r,"aria-label":g??(u?void 0:o),"data-empty":!u,className:n("w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",i)},l??w__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?.from?e.to?w__namespace.createElement(w__namespace.Fragment,null,dateFns.format(e.from,s)," \u2013"," ",dateFns.format(e.to,s)):dateFns.format(e.from,s):w__namespace.createElement("span",null,o))),w__namespace.createElement(je,{className:n("w-auto p-0",a),align:d,side:m},w__namespace.createElement(Wo,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:p,captionLayout:c,initialFocus:true})))}var kd=X__namespace.Root,Td=X__namespace.Trigger,li=X__namespace.Portal,Pd=X__namespace.Close,Er=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.Overlay,{ref:o,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}));Er.displayName=X__namespace.Overlay.displayName;var di=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(li,null,w__namespace.createElement(Er,null),w__namespace.createElement(X__namespace.Content,{ref:r,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),...o},t,w__namespace.createElement(X__namespace.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"},w__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),w__namespace.createElement("span",{className:"sr-only"},"Close")))));di.displayName=X__namespace.Content.displayName;var ci=({className:e,...t})=>w__namespace.createElement("div",{className:n("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});ci.displayName="DialogHeader";var pi=({className:e,...t})=>w__namespace.createElement("div",{className:n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});pi.displayName="DialogFooter";var mi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.Title,{ref:o,className:n("text-lg font-semibold leading-none tracking-tight",e),...t}));mi.displayName=X__namespace.Title.displayName;var ui=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.Description,{ref:o,className:n("text-sm text-muted-foreground",e),...t}));ui.displayName=X__namespace.Description.displayName;var Ld=A__namespace.Root,Hd=A__namespace.Trigger,Dd=A__namespace.Group,Ad=A__namespace.Portal,Id=A__namespace.Sub,Fd=A__namespace.RadioGroup,gi=w__namespace.forwardRef(({className:e,inset:t,children:o,...r},i)=>w__namespace.createElement(A__namespace.SubTrigger,{ref:i,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),...r},o,w__namespace.createElement(lucideReact.ChevronRight,{className:"ml-auto"})));gi.displayName=A__namespace.SubTrigger.displayName;var fi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(A__namespace.SubContent,{ref:o,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}));fi.displayName=A__namespace.SubContent.displayName;var hi=w__namespace.forwardRef(({className:e,sideOffset:t=4,...o},r)=>w__namespace.createElement(A__namespace.Portal,null,w__namespace.createElement(A__namespace.Content,{ref:r,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),...o})));hi.displayName=A__namespace.Content.displayName;var bi=w__namespace.forwardRef(({className:e,inset:t,...o},r)=>w__namespace.createElement(A__namespace.Item,{ref:r,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),...o}));bi.displayName=A__namespace.Item.displayName;var vi=w__namespace.forwardRef(({className:e,children:t,checked:o,...r},i)=>w__namespace.createElement(A__namespace.CheckboxItem,{ref:i,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:o,...r},w__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},w__namespace.createElement(A__namespace.ItemIndicator,null,w__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))),t));vi.displayName=A__namespace.CheckboxItem.displayName;var yi=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(A__namespace.RadioItem,{ref:r,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),...o},w__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},w__namespace.createElement(A__namespace.ItemIndicator,null,w__namespace.createElement(lucideReact.Circle,{className:"h-2 w-2 fill-current"}))),t));yi.displayName=A__namespace.RadioItem.displayName;var wi=w__namespace.forwardRef(({className:e,inset:t,...o},r)=>w__namespace.createElement(A__namespace.Label,{ref:r,className:n("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...o}));wi.displayName=A__namespace.Label.displayName;var xi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(A__namespace.Separator,{ref:o,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));xi.displayName=A__namespace.Separator.displayName;var Ri=({className:e,...t})=>w__namespace.createElement("span",{className:n("ml-auto text-xs tracking-widest opacity-60",e),...t});Ri.displayName="DropdownMenuShortcut";var Bd=classVarianceAuthority.cva("flex w-full rounded-md border border-input bg-transparent shadow-sm transition-colors file:border-0 file:bg-transparent 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",{variants:{size:{default:"h-9 pl-3 pr-3 py-1 text-base file:text-sm md:text-sm",sm:"h-8 pl-2 pr-2 py-1 text-xs file:text-xs"}},defaultVariants:{size:"default"}}),Si=w__namespace.forwardRef(({className:e,type:t,size:o="default",...r},i)=>w__namespace.createElement("input",{type:t,className:n(Bd({size:o}),e),ref:i,...r}));Si.displayName="Input";var Od=classVarianceAuthority.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Ci=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(Lr__namespace.Root,{ref:o,className:n(Od(),e),...t}));Ci.displayName=Lr__namespace.Root.displayName;var ki=w__namespace.forwardRef(({className:e,value:t,...o},r)=>w__namespace.createElement(fo__namespace.Root,{ref:r,className:n("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...o},w__namespace.createElement(fo__namespace.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));ki.displayName=fo__namespace.Root.displayName;var Hr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(cmdk.Command,{ref:o,className:n("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...t}));Hr.displayName=cmdk.Command.displayName;var Dr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{className:"flex items-center border-b px-3","cmdk-input-wrapper":""},w__namespace.createElement(lucideReact.Search,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),w__namespace.createElement(cmdk.Command.Input,{ref:o,className:n("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",e),...t})));Dr.displayName=cmdk.Command.Input.displayName;var Ar=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(cmdk.Command.List,{ref:o,className:n("max-h-[300px] overflow-y-auto overflow-x-hidden",e),...t}));Ar.displayName=cmdk.Command.List.displayName;var Ir=w__namespace.forwardRef((e,t)=>w__namespace.createElement(cmdk.Command.Empty,{ref:t,className:"py-6 text-center text-sm",...e}));Ir.displayName=cmdk.Command.Empty.displayName;var qo=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(cmdk.Command.Group,{ref:o,className:n("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",e),...t}));qo.displayName=cmdk.Command.Group.displayName;var Fr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(cmdk.Command.Separator,{ref:o,className:n("-mx-1 h-px bg-border",e),...t}));Fr.displayName=cmdk.Command.Separator.displayName;var jt=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(cmdk.Command.Item,{ref:o,className:n("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",e),...t}));jt.displayName=cmdk.Command.Item.displayName;var ho=w__namespace.forwardRef(({className:e,orientation:t="horizontal",decorative:o=true,...r},i)=>w__namespace.createElement(zr__namespace.Root,{ref:i,decorative:o,orientation:t,className:n("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...r}));ho.displayName=zr__namespace.Root.displayName;var Kd=3,Ti=w__namespace.forwardRef(function({options:t,value:o,defaultValue:r,onValueChange:i,placeholder:a="Select\u2026",searchPlaceholder:d="Search\u2026",emptyMessage:m="Nothing matches.",maxCount:s=Kd,searchable:c=true,badgeDismissible:l=true,disabled:p=false,modalPopover:g=false,className:u,id:b,"aria-label":f,...h},P){let S=o!==void 0,[R,C]=w__namespace.useState(r??[]),k=S?o:R,[B,H]=w__namespace.useState(false),I=w__namespace.useMemo(()=>{let v=new Map;for(let O of t)v.set(O.value,O);return v},[t]),V=w__namespace.useCallback(v=>{S||C(v),i?.(v);},[S,i]),Pe=v=>{k.includes(v)?V(k.filter(O=>O!==v)):V([...k,v]);},ee=(v,O)=>{v.preventDefault(),v.stopPropagation(),V(k.filter(D=>D!==O));},ye=v=>{v?.preventDefault(),v?.stopPropagation(),V([]);},G=()=>{let v=t.filter(O=>!O.disabled).map(O=>O.value);V(v);},ge=t.length>0&&t.filter(v=>!v.disabled).every(v=>k.includes(v.value)),Ae=k.slice(0,s),we=Math.max(0,k.length-s);return w__namespace.createElement(Je,{open:B,onOpenChange:H,modal:g},w__namespace.createElement(Qe,{asChild:true},w__namespace.createElement("button",{ref:P,type:"button",id:b,role:"combobox","aria-expanded":B,"aria-haspopup":"listbox","aria-label":f,disabled:p,"data-gds-part":"multi-select",className:n("flex min-h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent pl-2 pr-2 text-sm shadow-sm","ring-offset-background placeholder:text-muted-foreground","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","disabled:cursor-not-allowed disabled:opacity-50","[&[data-state=open]]:ring-1 [&[data-state=open]]:ring-ring",u)},k.length===0?w__namespace.createElement("span",{className:"text-muted-foreground px-1"},a):w__namespace.createElement("div",{className:"flex flex-1 flex-wrap items-center gap-1 py-1","data-gds-part":"multi-select-badges"},Ae.map(v=>{let O=I.get(v);if(!O)return null;let D=O.icon;return w__namespace.createElement(Vo,{key:v,variant:"secondary",className:"gap-1 pr-1","data-gds-part":"multi-select-badge"},D?w__namespace.createElement(D,{className:"h-3 w-3"}):null,w__namespace.createElement("span",{className:"truncate max-w-[12rem]"},O.label),l&&!p&&w__namespace.createElement("span",{role:"button","aria-label":`Remove ${O.label}`,tabIndex:0,onClick:te=>ee(te,v),onKeyDown:te=>{(te.key==="Enter"||te.key===" ")&&ee(te,v);},className:"ml-0.5 inline-flex h-4 w-4 cursor-pointer items-center justify-center rounded-sm hover:bg-muted-foreground/20"},w__namespace.createElement(lucideReact.X,{className:"h-3 w-3","aria-hidden":true})))}),we>0&&w__namespace.createElement(Vo,{variant:"outline",className:"text-muted-foreground","data-gds-part":"multi-select-overflow",title:k.slice(s).map(v=>I.get(v)?.label??v).join(", ")},"+",we," more")),w__namespace.createElement("div",{className:"flex shrink-0 items-center gap-1"},k.length>0&&!p&&w__namespace.createElement("span",{role:"button","aria-label":"Clear all",tabIndex:0,onClick:v=>ye(v),onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&ye(v);},className:"inline-flex h-5 w-5 cursor-pointer items-center justify-center rounded-sm text-muted-foreground hover:text-foreground hover:bg-muted"},w__namespace.createElement(lucideReact.XCircle,{className:"h-3.5 w-3.5","aria-hidden":true})),w__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":true})))),w__namespace.createElement(je,{align:"start",className:"w-[var(--radix-popover-trigger-width)] p-0","data-gds-part":"multi-select-content"},w__namespace.createElement(Hr,null,c&&w__namespace.createElement(Dr,{placeholder:d}),w__namespace.createElement(Ar,null,w__namespace.createElement(Ir,null,m),w__namespace.createElement(qo,null,t.map(v=>{let O=v.icon,D=k.includes(v.value);return w__namespace.createElement(jt,{key:v.value,value:v.label,onSelect:()=>Pe(v.value),disabled:v.disabled,"data-gds-part":"multi-select-item","data-selected":D||void 0},w__namespace.createElement("div",{className:n("mr-2 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary",D?"bg-primary text-primary-foreground":"opacity-50 [&_svg]:invisible"),"aria-hidden":true},w__namespace.createElement(lucideReact.Check,{className:"h-3 w-3"})),O?w__namespace.createElement(O,{className:"mr-2 h-4 w-4 text-muted-foreground"}):null,w__namespace.createElement("span",{className:"truncate"},v.label))})),w__namespace.createElement(Fr,null),w__namespace.createElement(qo,null,w__namespace.createElement("div",{className:"flex items-center justify-between gap-1 p-1"},w__namespace.createElement(jt,{onSelect:G,className:"flex-1 justify-center text-xs",disabled:ge},"Select all"),w__namespace.createElement(ho,{orientation:"vertical",className:"h-5"}),w__namespace.createElement(jt,{onSelect:()=>ye(),className:"flex-1 justify-center text-xs",disabled:k.length===0},"Clear"),w__namespace.createElement(ho,{orientation:"vertical",className:"h-5"}),w__namespace.createElement(jt,{onSelect:()=>H(false),className:"flex-1 justify-center text-xs"},"Close")))))))});Ti.displayName="MultiSelect";var Pi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(ht__namespace.Root,{className:n("grid gap-2",e),...t,ref:o}));Pi.displayName=ht__namespace.Root.displayName;var Mi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(ht__namespace.Item,{ref:o,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},w__namespace.createElement(ht__namespace.Indicator,{className:"flex items-center justify-center"},w__namespace.createElement(lucideReact.Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));Mi.displayName=ht__namespace.Item.displayName;var Zd=({className:e,...t})=>w__namespace.createElement(Kt__namespace.PanelGroup,{"data-gds-part":"resizable-panel-group",className:n("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...t}),Xd=Kt__namespace.Panel,Jd=({withHandle:e,className:t,...o})=>w__namespace.createElement(Kt__namespace.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),...o},e&&w__namespace.createElement("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border"},w__namespace.createElement(lucideReact.GripVertical,{className:"h-2.5 w-2.5"})));var Ni=classVarianceAuthority.cva("gds-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}}),Ei=w__namespace.forwardRef(({className:e,gap:t,align:o,justify:r,wrap:i,asChild:a=false,...d},m)=>w__namespace.createElement(a?reactSlot.Slot:"div",{ref:m,"data-gds-part":"row",className:n(Ni({gap:t,align:o,justify:r,wrap:i,className:e})),...d}));Ei.displayName="Row";var Li=classVarianceAuthority.cva("gds-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"}}),Hi=w__namespace.forwardRef(({className:e,cols:t,gap:o,align:r,asChild:i=false,...a},d)=>w__namespace.createElement(i?reactSlot.Slot:"div",{ref:d,"data-gds-part":"grid",className:n(Li({cols:t,gap:o,align:r,className:e})),...a}));Hi.displayName="Grid";var Di=classVarianceAuthority.cva("gds-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"}}),Ai=w__namespace.forwardRef(({className:e,direction:t,gap:o,align:r,justify:i,wrap:a,asChild:d=false,...m},s)=>w__namespace.createElement(d?reactSlot.Slot:"div",{ref:s,"data-gds-part":"flex",className:n(Di({direction:t,gap:o,align:r,justify:i,wrap:a,className:e})),...m}));Ai.displayName="Flex";var Ii=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(Ge__namespace.Root,{ref:r,className:n("relative overflow-hidden",e),...o},w__namespace.createElement(Ge__namespace.Viewport,{className:"h-full w-full rounded-[inherit]"},t),w__namespace.createElement(Br,null),w__namespace.createElement(Ge__namespace.Corner,null)));Ii.displayName=Ge__namespace.Root.displayName;var Br=w__namespace.forwardRef(({className:e,orientation:t="vertical",...o},r)=>w__namespace.createElement(Ge__namespace.ScrollAreaScrollbar,{ref:r,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),...o},w__namespace.createElement(Ge__namespace.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));Br.displayName=Ge__namespace.ScrollAreaScrollbar.displayName;var lc=F__namespace.Root,dc=F__namespace.Group,cc=F__namespace.Value,pc=classVarianceAuthority.cva("flex w-full items-center justify-between rounded-md border border-input bg-background 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",{variants:{size:{default:"h-10 px-3 py-2 text-sm",sm:"h-8 px-2 py-1 text-xs"}},defaultVariants:{size:"default"}}),zi=w__namespace.forwardRef(({className:e,children:t,size:o="default",...r},i)=>w__namespace.createElement(F__namespace.Trigger,{ref:i,className:n(pc({size:o}),e),...r},t,w__namespace.createElement(F__namespace.Icon,{asChild:true},w__namespace.createElement(lucideReact.ChevronDown,{className:n("opacity-50",o==="sm"?"h-3.5 w-3.5":"h-4 w-4")}))));zi.displayName=F__namespace.Trigger.displayName;var Gr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(F__namespace.ScrollUpButton,{ref:o,className:n("flex cursor-default items-center justify-center py-1",e),...t},w__namespace.createElement(lucideReact.ChevronUp,{className:"h-4 w-4"})));Gr.displayName=F__namespace.ScrollUpButton.displayName;var Or=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(F__namespace.ScrollDownButton,{ref:o,className:n("flex cursor-default items-center justify-center py-1",e),...t},w__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4"})));Or.displayName=F__namespace.ScrollDownButton.displayName;var Bi=w__namespace.forwardRef(({className:e,children:t,position:o="popper",...r},i)=>w__namespace.createElement(F__namespace.Portal,null,w__namespace.createElement(F__namespace.Content,{ref:i,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",o==="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:o,...r},w__namespace.createElement(Gr,null),w__namespace.createElement(F__namespace.Viewport,{className:n("p-1",o==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},t),w__namespace.createElement(Or,null))));Bi.displayName=F__namespace.Content.displayName;var Gi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(F__namespace.Label,{ref:o,className:n("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));Gi.displayName=F__namespace.Label.displayName;var Oi=w__namespace.forwardRef(({className:e,children:t,...o},r)=>w__namespace.createElement(F__namespace.Item,{ref:r,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),...o},w__namespace.createElement("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},w__namespace.createElement(F__namespace.ItemIndicator,null,w__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))),w__namespace.createElement(F__namespace.ItemText,null,t)));Oi.displayName=F__namespace.Item.displayName;var Vi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(F__namespace.Separator,{ref:o,className:n("-mx-1 my-1 h-px bg-muted",e),...t}));Vi.displayName=F__namespace.Separator.displayName;var gc=X__namespace.Root,fc=X__namespace.Trigger,hc=X__namespace.Close,_i=X__namespace.Portal,Vr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.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:o}));Vr.displayName=X__namespace.Overlay.displayName;var bc=classVarianceAuthority.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"}}),Wi=w__namespace.forwardRef(({side:e="right",className:t,children:o,...r},i)=>w__namespace.createElement(_i,null,w__namespace.createElement(Vr,null),w__namespace.createElement(X__namespace.Content,{ref:i,className:n(bc({side:e}),t),...r},o,w__namespace.createElement(X__namespace.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"},w__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),w__namespace.createElement("span",{className:"sr-only"},"Close")))));Wi.displayName=X__namespace.Content.displayName;var $i=({className:e,...t})=>w__namespace.createElement("div",{className:n("flex flex-col space-y-2 text-center sm:text-left",e),...t});$i.displayName="SheetHeader";var Ui=({className:e,...t})=>w__namespace.createElement("div",{className:n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Ui.displayName="SheetFooter";var ji=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.Title,{ref:o,className:n("text-lg font-semibold text-foreground",e),...t}));ji.displayName=X__namespace.Title.displayName;var Ki=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(X__namespace.Description,{ref:o,className:n("text-sm text-muted-foreground",e),...t}));Ki.displayName=X__namespace.Description.displayName;function vc({className:e,...t}){return React.createElement("div",{className:n("animate-pulse rounded-md bg-muted",e),...t})}var qi=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(it__namespace.Root,{ref:o,className:n("relative flex w-full touch-none select-none items-center",e),...t},w__namespace.createElement(it__namespace.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary"},w__namespace.createElement(it__namespace.Range,{className:"absolute h-full bg-primary"})),w__namespace.createElement(it__namespace.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"})));qi.displayName=it__namespace.Root.displayName;var Mc={vertical:sortable.verticalListSortingStrategy,horizontal:sortable.horizontalListSortingStrategy,grid:sortable.rectSortingStrategy},_r=w__namespace.createContext(null),os=w__namespace.createContext(null),Wr=w__namespace.forwardRef(function({disabled:t=false,className:o,children:r,...i},a){let d=w__namespace.useRef(new Map),m=w__namespace.useCallback(p=>(d.current.set(p.id,p),()=>{d.current.delete(p.id);}),[]),s=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),c=p=>{let g=d.current,u=g.get(String(p));if(u)return u;for(let b of g.values())if(b.values.some(f=>f===p))return b;return null},l=w__namespace.useCallback(p=>{if(t)return;let{active:g,over:u}=p;if(!u)return;let b=c(g.id),f=c(u.id);if(!b||!f)return;if(b.id===f.id){if(g.id===u.id)return;let R=b.values.findIndex(k=>k===g.id),C=b.values.findIndex(k=>k===u.id);if(R===-1||C===-1)return;b.onReorder?.(sortable.arrayMove(b.values,R,C));return}let h=b.values.filter(R=>R!==g.id),P=u.id===f.id?f.values.length:Math.max(0,f.values.findIndex(R=>R===u.id)),S=[...f.values.slice(0,P),g.id,...f.values.slice(P)];b.onReorder?.(h),f.onReorder?.(S);},[t]);return w__namespace.createElement(os.Provider,{value:{registerContainer:m}},w__namespace.createElement(core.DndContext,{sensors:s,collisionDetection:core.closestCorners,onDragEnd:l},w__namespace.createElement("div",{ref:a,"data-gds-part":"sortable-group","data-disabled":t||void 0,className:n(o),...i},r)))});Wr.displayName="Sortable.Group";var vo=w__namespace.forwardRef(function({values:t,onReorder:o,strategy:r="vertical",disabled:i=false,id:a,className:d,children:m,...s},c){let l=w__namespace.useContext(os),p=l!==null,g=w__namespace.useId(),u=a??g;w__namespace.useEffect(()=>{if(p)return l.registerContainer({id:u,values:t,onReorder:o})},[p,l,u,t,o]);let b=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),f=w__namespace.useCallback(S=>{let{active:R,over:C}=S;if(!C||R.id===C.id)return;let k=t.findIndex(H=>H===R.id),B=t.findIndex(H=>H===C.id);k===-1||B===-1||o?.(sortable.arrayMove(t,k,B));},[t,o]),h=w__namespace.useMemo(()=>({disabled:i}),[i]),P=w__namespace.createElement(sortable.SortableContext,{items:t,strategy:Mc[r]},w__namespace.createElement(Nc,{id:u,enabled:p,forwardedRef:c,strategy:r,disabled:i,className:d,...s},m));return p?w__namespace.createElement(_r.Provider,{value:h},P):w__namespace.createElement(_r.Provider,{value:h},w__namespace.createElement(core.DndContext,{sensors:b,collisionDetection:core.closestCenter,onDragEnd:f},P))});vo.displayName="Sortable";function Nc({id:e,enabled:t,forwardedRef:o,strategy:r,disabled:i,className:a,children:d,...m}){let s=core.useDroppable({id:e,disabled:!t}),c=w__namespace.useCallback(l=>{t&&s.setNodeRef(l),typeof o=="function"?o(l):o&&(o.current=l);},[t,s,o]);return w__namespace.createElement("div",{ref:c,"data-gds-part":"sortable","data-strategy":r,"data-disabled":i||void 0,className:n(a),...m},d)}var rs=w__namespace.createContext(null),$r=w__namespace.forwardRef(function({value:t,asChild:o=false,disabled:r,className:i,style:a,children:d,...m},s){let c=w__namespace.useContext(_r);if(!c)throw new Error("<Sortable.Item> must be rendered inside <Sortable>.");let l=c.disabled||r||false,{attributes:p,listeners:g,setNodeRef:u,setActivatorNodeRef:b,transform:f,transition:h,isDragging:P}=sortable.useSortable({id:t,disabled:l}),S=w__namespace.useRef(false),R=w__namespace.useCallback(H=>{u(H),typeof s=="function"?s(H):s&&(s.current=H);},[u,s]),C=w__namespace.useMemo(()=>({listeners:g,setActivatorNodeRef:b,hasHandle:S,disabled:l}),[g,b,l]),k={transform:utilities.CSS.Transform.toString(f),transition:h,zIndex:P?1:void 0,cursor:l?"default":S.current?void 0:"grab",...a},B=o?reactSlot.Slot:"div";return w__namespace.createElement(rs.Provider,{value:C},w__namespace.createElement(B,{ref:R,"data-gds-part":"sortable-item","data-value":String(t),"data-dragging":P||void 0,className:n(i),style:k,...p,...S.current?{}:g,...m},d))});$r.displayName="Sortable.Item";var Ur=w__namespace.forwardRef(function({asChild:t=false,className:o,children:r,...i},a){let d=w__namespace.useContext(rs);if(!d)throw new Error("<Sortable.Handle> must be rendered inside <Sortable.Item>.");w__namespace.useLayoutEffect(()=>(d.hasHandle.current=true,()=>{d.hasHandle.current=false;}),[d.hasHandle]);let m=w__namespace.useCallback(c=>{d.setActivatorNodeRef(c),typeof a=="function"?a(c):a&&(a.current=c);},[d,a]),s={"data-gds-part":"sortable-handle","aria-label":"Drag to reorder",className:n("cursor-grab touch-none select-none",d.disabled&&"cursor-default opacity-50",o),...d.disabled?{}:d.listeners,...i};return t?w__namespace.createElement(reactSlot.Slot,{ref:m,...s},r):w__namespace.createElement("button",{type:"button",ref:m,...s},r)});Ur.displayName="Sortable.Handle";vo.Item=$r;vo.Handle=Ur;vo.Group=Wr;var Ec=vo;var as=classVarianceAuthority.cva("gds-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"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"}},defaultVariants:{gap:"md",align:"stretch",justify:"start"}}),ns=w__namespace.forwardRef(({className:e,gap:t,align:o,justify:r,asChild:i=false,...a},d)=>w__namespace.createElement(i?reactSlot.Slot:"div",{ref:d,"data-gds-part":"stack",className:n(as({gap:t,align:o,justify:r,className:e})),...a}));ns.displayName="Stack";var is=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(wo__namespace.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:o},w__namespace.createElement(wo__namespace.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")})));is.displayName=wo__namespace.Root.displayName;var ss=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("div",{className:"relative w-full overflow-auto"},w__namespace.createElement("table",{ref:o,className:n("w-full caption-bottom text-sm",e),...t})));ss.displayName="Table";var ls=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("thead",{ref:o,className:n("[&_tr]:border-b",e),...t}));ls.displayName="TableHeader";var ds=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("tbody",{ref:o,className:n("[&_tr:last-child]:border-0",e),...t}));ds.displayName="TableBody";var cs=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("tfoot",{ref:o,className:n("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));cs.displayName="TableFooter";var ps=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("tr",{ref:o,className:n("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));ps.displayName="TableRow";var ms=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("th",{ref:o,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}));ms.displayName="TableHead";var us=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("td",{ref:o,className:n("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));us.displayName="TableCell";var gs=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("caption",{ref:o,className:n("mt-4 text-sm text-muted-foreground",e),...t}));gs.displayName="TableCaption";var fs=w__namespace.createContext(w__namespace.createElement(lucideReact.ChevronRight,null)),hs=w__namespace.forwardRef(({separator:e,children:t,...o},r)=>w__namespace.createElement(fs.Provider,{value:e??w__namespace.createElement(lucideReact.ChevronRight,null)},w__namespace.createElement("nav",{ref:r,"aria-label":"breadcrumb",...o},t)));hs.displayName="Breadcrumb";var bs=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("ol",{ref:o,className:n("flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",e),...t}));bs.displayName="BreadcrumbList";var vs=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("li",{ref:o,className:n("inline-flex items-center gap-1.5",e),...t}));vs.displayName="BreadcrumbItem";var tr=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"),ys=w__namespace.forwardRef(({asChild:e,className:t,href:o,...r},i)=>e?w__namespace.createElement("span",{ref:i,className:n(tr,t),...r}):o?w__namespace.createElement("a",{ref:i,href:o,className:n(tr,t),...r}):w__namespace.createElement("button",{ref:i,type:"button",className:n(tr,t),...r}));ys.displayName="BreadcrumbLink";var ws=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("span",{ref:o,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}));ws.displayName="BreadcrumbPage";var xs=({children:e,className:t,...o})=>{let r=w__namespace.useContext(fs);return w__namespace.createElement("li",{role:"presentation","aria-hidden":"true",className:n("[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",t),...o},e??r)};xs.displayName="BreadcrumbSeparator";var Rs=({className:e,...t})=>w__namespace.createElement("span",{role:"presentation","aria-hidden":"true",className:n("flex h-5 w-5 items-center justify-center",e),...t},w__namespace.createElement(lucideReact.MoreHorizontal,{className:"h-3.5 w-3.5"}),w__namespace.createElement("span",{className:"sr-only"},"More"));Rs.displayName="BreadcrumbEllipsis";var Ss=w__namespace.forwardRef(({label:e,items:t,onSelect:o,onSelectLabel:r,current:i,className:a},d)=>{let[m,s]=w__namespace.useState(false);return w__namespace.createElement(Je,{open:m,onOpenChange:s},w__namespace.createElement(Qe,{asChild:true},w__namespace.createElement("button",{ref:d,type:"button",className:n(tr,i&&"font-medium text-foreground",a),onClick:()=>{r?r():s(c=>!c);}},w__namespace.createElement("span",null,e),w__namespace.createElement(lucideReact.ChevronDown,{className:n("h-3 w-3 text-muted-foreground transition-transform",m&&"rotate-180"),onClick:c=>{c.stopPropagation(),s(l=>!l);},role:"button","aria-label":`Show ${e} children`}))),w__namespace.createElement(je,{align:"start",className:"w-64 p-1 max-h-80 overflow-y-auto"},t.length===0?w__namespace.createElement("p",{className:"px-2 py-1.5 text-xs text-muted-foreground"},"No items here yet."):w__namespace.createElement("ul",{className:"flex flex-col gap-0.5"},t.map(c=>w__namespace.createElement("li",{key:c.id},w__namespace.createElement("button",{type:"button",onClick:()=>{o(c.id),s(false);},className:n("w-full text-left rounded-md px-2 py-1.5","flex items-start gap-2","hover:bg-muted transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",c.active&&"bg-muted/60")},w__namespace.createElement("span",{className:"flex-1 min-w-0"},w__namespace.createElement("span",{className:"flex items-center gap-1.5"},w__namespace.createElement("span",{className:"text-xs font-medium text-foreground truncate"},c.label),c.active&&w__namespace.createElement(lucideReact.Check,{className:"h-3 w-3 text-primary shrink-0"})),c.summary&&w__namespace.createElement("span",{className:"block text-[10px] text-muted-foreground leading-snug truncate"},c.summary)),c.hasChildren&&w__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 text-muted-foreground/70 shrink-0 mt-0.5"})))))))});Ss.displayName="BreadcrumbMenuTrigger";var Kr=Ke__namespace.Provider,Lt=Ke__namespace.Root,Ht=Ke__namespace.Trigger,bt=w__namespace.forwardRef(({className:e,sideOffset:t=4,...o},r)=>w__namespace.createElement(Ke__namespace.Portal,null,w__namespace.createElement(Ke__namespace.Content,{ref:r,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),...o})));bt.displayName=Ke__namespace.Content.displayName;var ks=w__namespace.createContext({size:"md",variant:"pill"}),Fc=qe__namespace.Root,zc=classVarianceAuthority.cva("inline-flex items-center text-muted-foreground",{variants:{variant:{pill:"justify-center rounded-lg bg-muted",underlined:"justify-start border-b border-border"},size:{sm:"",md:"",lg:""}},compoundVariants:[{variant:"pill",size:"sm",className:"h-7 p-0.5"},{variant:"pill",size:"md",className:"h-8 p-0.5"},{variant:"pill",size:"lg",className:"h-10 p-1"},{variant:"underlined",size:"sm",className:"gap-3"},{variant:"underlined",size:"md",className:"gap-4"},{variant:"underlined",size:"lg",className:"gap-6"}],defaultVariants:{variant:"pill",size:"md"}}),Bc=classVarianceAuthority.cva("inline-flex items-center justify-center whitespace-nowrap 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",{variants:{variant:{pill:"rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground",underlined:"rounded-none bg-transparent border-b-2 border-transparent -mb-px hover:text-foreground data-[state=active]:border-primary data-[state=active]:text-primary"},size:{sm:"text-[11px] gap-1 [&_svg]:size-3",md:"text-xs gap-1.5 [&_svg]:size-3.5",lg:"text-sm gap-2 [&_svg]:size-4"}},compoundVariants:[{variant:"pill",size:"sm",className:"h-6 px-1.5"},{variant:"pill",size:"md",className:"h-7 px-2"},{variant:"pill",size:"lg",className:"h-8 px-2.5"},{variant:"underlined",size:"sm",className:"pb-1.5 pt-1 px-1"},{variant:"underlined",size:"md",className:"pb-2 pt-1.5 px-1.5"},{variant:"underlined",size:"lg",className:"pb-2.5 pt-2 px-2"}],defaultVariants:{variant:"pill",size:"md"}}),Ts=w__namespace.forwardRef(({className:e,size:t="md",variant:o="pill",children:r,...i},a)=>w__namespace.createElement(ks.Provider,{value:{size:t??"md",variant:o??"pill"}},w__namespace.createElement(qe__namespace.List,{ref:a,className:n(zc({size:t,variant:o}),e),...i},r)));Ts.displayName=qe__namespace.List.displayName;var Ps=w__namespace.forwardRef(({className:e,size:t,variant:o,tooltip:r,...i},a)=>{let d=w__namespace.useContext(ks),m=t??d.size,s=o??d.variant,c=i["aria-label"]??(typeof r=="string"?r:void 0),l=w__namespace.createElement(qe__namespace.Trigger,{ref:a,className:n(Bc({size:m,variant:s}),e),"aria-label":c,...i});return r?w__namespace.createElement(Lt,null,w__namespace.createElement(Ht,{asChild:true},l),w__namespace.createElement(bt,null,r)):l});Ps.displayName=qe__namespace.Trigger.displayName;var Ms=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement(qe__namespace.Content,{ref:o,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}));Ms.displayName=qe__namespace.Content.displayName;var Ns=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.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:o,...t}));Ns.displayName="Textarea";var Es=classVarianceAuthority.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"}}),Ls=w__namespace.forwardRef(({className:e,variant:t,size:o,...r},i)=>w__namespace.createElement(qr__namespace.Root,{ref:i,className:n(Es({variant:t,size:o,className:e})),...r}));Ls.displayName=qr__namespace.Root.displayName;var Ds=w__namespace.createContext("md"),Oc=classVarianceAuthority.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"}}),Vc=classVarianceAuthority.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"}}),As=w__namespace.forwardRef(({className:e,size:t="md",children:o,...r},i)=>w__namespace.createElement(Ds.Provider,{value:t??"md"},w__namespace.createElement(qt__namespace.Root,{ref:i,className:n(Oc({size:t}),e),...r},o)));As.displayName=qt__namespace.Root.displayName;var Is=w__namespace.forwardRef(({className:e,size:t,tooltip:o,tooltipSide:r="top",tooltipDelay:i,"aria-label":a,...d},m)=>{let s=w__namespace.useContext(Ds),c=t??s,l=a??(typeof o=="string"?o:void 0),p=w__namespace.createElement(qt__namespace.Item,{ref:m,className:n(Vc({size:c}),e),"aria-label":l,...d});return o==null?p:w__namespace.createElement(Lt,{delayDuration:i},w__namespace.createElement(Ht,{asChild:true},w__namespace.createElement("span",{className:"inline-flex"},p)),w__namespace.createElement(bt,{side:r},o))});Is.displayName=qt__namespace.Item.displayName;var Wc=classVarianceAuthority.cva("grid items-center w-full gap-3 [grid-template-columns:auto_1fr_auto]",{variants:{position:{top:"border-b border-border",bottom:"border-t border-border",inline:""},variant:{default:"bg-background",subtle:"bg-muted/30",transparent:"bg-transparent"},size:{sm:"min-h-10 px-3",md:"min-h-12 px-4",lg:"min-h-14 px-6"},sticky:{true:"",false:""}},compoundVariants:[{sticky:true,position:"top",className:"sticky top-0 z-20"},{sticky:true,position:"bottom",className:"sticky bottom-0 z-20"}],defaultVariants:{position:"top",variant:"default",size:"md",sticky:false}}),Fs=w__namespace.forwardRef(({className:e,position:t,variant:o,size:r,sticky:i,leading:a,center:d,trailing:m,children:s,"aria-label":c,...l},p)=>{let g=s==null;return w__namespace.createElement("div",{ref:p,role:"toolbar","aria-label":c??"Toolbar","data-gds-part":"toolbar","data-position":t??"top",className:n(Wc({position:t,variant:o,size:r,sticky:i}),e),...l},g?w__namespace.createElement(w__namespace.Fragment,null,w__namespace.createElement("div",{"data-gds-part":"toolbar-leading",className:"flex items-center min-w-0"},a),w__namespace.createElement("div",{"data-gds-part":"toolbar-center",className:"flex items-center min-w-0 justify-center"},d),w__namespace.createElement("div",{"data-gds-part":"toolbar-trailing",className:"flex items-center min-w-0 justify-end"},m)):s)});Fs.displayName="Toolbar";var zs=w__namespace.forwardRef(({className:e,align:t="leading",...o},r)=>w__namespace.createElement("div",{ref:r,"data-gds-part":`toolbar-${t}`,className:n("flex items-center min-w-0",t==="center"&&"justify-center",t==="trailing"&&"justify-end",e),...o}));zs.displayName="ToolbarSlot";var Gs=w__namespace.createContext(null),Yr=w__namespace.createContext(0);function Os(){return w__namespace.useContext(Yr)}function Ro(e){let t=w__namespace.useContext(Gs);if(!t)throw new Error(`<${e}> must be rendered inside a <Sidebar> root.`);return t}var vt=w__namespace.forwardRef(({collapsed:e,defaultCollapsed:t=false,onCollapsedChange:o,collapsible:r=true,variant:i="rail",className:a,style:d,children:m,...s},c)=>{let l=e!==void 0,[p,g]=w__namespace.useState(t),u=l?e:p,b=i==="panel",f=()=>{let h=!u;l||g(h),o?.(h);};return w__namespace.createElement(Kr,{delayDuration:0},w__namespace.createElement(Gs.Provider,{value:{collapsed:u}},w__namespace.createElement("aside",{ref:c,"data-gds-part":"sidebar","data-collapsed":u||void 0,"data-variant":i,className:n("relative flex h-full flex-col bg-card text-card-foreground",b?"w-full border border-border rounded-lg overflow-hidden":"border-r border-border transition-[width] duration-200 ease-out",a),style:b?d:{width:u?"var(--gds-sidebar-collapsed-width, 4rem)":"var(--gds-sidebar-width, 16rem)",...d},...s},m,r&&!b&&w__namespace.createElement("button",{type:"button",onClick:f,"aria-label":u?"Expand sidebar":"Collapse sidebar","data-gds-part":"sidebar-collapse-toggle",className:n("absolute -right-3 top-6 z-10 flex h-6 w-6 items-center justify-center","rounded-full border border-border bg-card text-muted-foreground shadow-sm","hover:text-foreground hover:bg-muted transition-colors")},u?w__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"}):w__namespace.createElement(lucideReact.ChevronLeft,{className:"h-3 w-3"})))))});vt.displayName="Sidebar";var Xr=w__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:r}=Ro("SidebarHeader");return w__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-header","data-collapsed":r||void 0,className:n("flex shrink-0 items-center border-b border-border",r?"justify-center px-2":"px-3","h-[var(--gds-sidebar-header-height,3.25rem)]",e),...t})});Xr.displayName="SidebarHeader";var Jr=w__namespace.forwardRef(({className:e,...t},o)=>w__namespace.createElement("nav",{ref:o,"data-gds-part":"sidebar-content",className:n("flex-1 overflow-y-auto overflow-x-hidden","py-[var(--gds-sidebar-content-py,0.5rem)]",e),...t}));Jr.displayName="SidebarContent";var Qr=w__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:r}=Ro("SidebarFooter");return w__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-footer","data-collapsed":r||void 0,className:n("shrink-0 border-t border-border",r?"px-2 py-2":"px-3 py-2",e),...t})});Qr.displayName="SidebarFooter";var ea=w__namespace.forwardRef(({title:e,icon:t,trailing:o,collapsible:r=true,defaultExpanded:i=true,className:a,children:d,...m},s)=>{let{collapsed:c}=Ro("SidebarSection"),[l,p]=w__namespace.useState(i),g=!!e&&r;return c?w__namespace.createElement("div",{ref:s,"data-gds-part":"sidebar-section",className:n("px-[var(--gds-sidebar-section-px,0.5rem)] space-y-[var(--gds-sidebar-section-gap,0.125rem)]",a),...m},d):w__namespace.createElement("div",{ref:s,"data-gds-part":"sidebar-section",className:n("px-[var(--gds-sidebar-section-px,0.5rem)] pb-1",a),...m},e&&(g?w__namespace.createElement("div",{className:n("group/header flex w-full items-center gap-1 rounded-md px-2 py-1.5 text-xs font-medium uppercase tracking-wide","text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors")},w__namespace.createElement("button",{type:"button",onClick:()=>p(u=>!u),"aria-expanded":l,className:"flex flex-1 items-center gap-2 text-left min-w-0"},t,w__namespace.createElement("span",{className:"flex-1 text-left normal-case truncate"},e),l?w__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3 shrink-0",strokeWidth:1.5}):w__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 shrink-0",strokeWidth:1.5})),o&&w__namespace.createElement("span",{className:"flex items-center shrink-0",onClick:u=>u.stopPropagation(),onKeyDown:u=>u.stopPropagation()},o)):w__namespace.createElement("div",{className:n("flex items-center gap-2 px-2 py-1.5 text-xs font-medium uppercase tracking-wide","text-muted-foreground")},t,w__namespace.createElement("span",{className:"flex-1 truncate"},e),o&&w__namespace.createElement("span",{className:"shrink-0"},o))),l&&w__namespace.createElement("div",{className:n("mt-[var(--gds-sidebar-section-gap,0.125rem)]","space-y-[var(--gds-sidebar-section-gap,0.125rem)]")},d))});ea.displayName="SidebarSection";var ta=w__namespace.forwardRef(({icon:e,badge:t,active:o=false,asButton:r=false,asChild:i=false,disabled:a=false,collapsedLabel:d,size:m="md",description:s,className:c,children:l,...p},g)=>{let{collapsed:u}=Ro("SidebarItem"),b=Os(),f=!u&&b>0?{paddingLeft:`calc(0.5rem + ${b} * var(--gds-sidebar-tree-indent, 1.5rem))`}:void 0,h=m==="sm",P=h?"text-xs px-2 py-1":"text-sm px-2 py-1.5",S=h&&!o?"font-normal":"font-medium",R=o?"bg-primary/10 text-primary":h?"text-muted-foreground hover:bg-muted hover:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground",C=!u&&s!=null,k=n("group flex items-center gap-2.5 rounded-md transition-colors",P,S,C&&(h?"py-1.5":"py-2"),u?"justify-center px-2 py-2":null,R,a&&"opacity-50 pointer-events-none",c),B=C?w__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},w__namespace.createElement("span",{className:"truncate"},l),w__namespace.createElement("span",{className:n("truncate font-normal text-muted-foreground",h?"text-[10px]":"text-[11px]")},s)):w__namespace.createElement("span",{className:"flex-1 truncate text-left"},l),H=w__namespace.createElement(w__namespace.Fragment,null,e&&w__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},e),!u&&B,!u&&t!==void 0&&t!==null&&w__namespace.createElement("span",{className:"ml-auto inline-flex items-center justify-center rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground"},t)),I;if(i)I=w__namespace.createElement(reactSlot.Slot,{"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,className:k,style:f},l);else if(r){let{href:Pe,target:ee,rel:ye,download:G,hrefLang:ge,ping:Ae,referrerPolicy:we,type:v,...O}=p;I=w__namespace.createElement("button",{type:"button","data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,disabled:a,className:n(k,"w-full text-left"),style:f,...O},H);}else I=w__namespace.createElement("a",{ref:g,"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,"aria-disabled":a||void 0,className:k,style:f,...p},H);if(!u)return I;let V=d??(typeof l=="string"?l:null);return V?w__namespace.createElement(Lt,null,w__namespace.createElement(Ht,{asChild:true},I),w__namespace.createElement(bt,{side:"right",sideOffset:8},V,t!=null&&w__namespace.createElement("span",{className:"ml-2 inline-flex items-center justify-center rounded bg-foreground/10 px-1.5 py-0 text-[10px]"},t))):I});ta.displayName="SidebarItem";var oa=w__namespace.forwardRef(function({label:t,icon:o,badge:r,active:i=false,defaultExpanded:a=true,expanded:d,onExpandedChange:m,disabled:s,description:c,trailing:l,className:p,style:g,children:u,...b},f){let{collapsed:h}=Ro("SidebarTreeItem"),P=Os(),S=d!==void 0,[R,C]=w__namespace.useState(a),k=S?d:R,B=()=>{let I=!k;S||C(I),m?.(I);};if(h)return w__namespace.createElement(Yr.Provider,{value:P},u);let H=P*1.5;return w__namespace.createElement("div",{"data-gds-part":"sidebar-tree-item"},w__namespace.createElement("div",{className:"group/row relative"},w__namespace.createElement("button",{ref:f,type:"button",onClick:B,"aria-expanded":k,"aria-current":i?"page":void 0,"data-active":i||void 0,disabled:s,className:n("group flex w-full items-center gap-1.5 rounded-md py-1 text-sm font-medium transition-colors",i?"bg-primary/10 text-primary":"text-foreground/80 hover:bg-muted hover:text-foreground",s&&"opacity-50 pointer-events-none",l!=null&&"pr-12",p),style:{paddingLeft:`calc(0.25rem + ${H}rem)`,paddingRight:l!=null?"3rem":"0.5rem",...g},...b},w__namespace.createElement("span",{className:"inline-flex h-4 w-4 items-center justify-center text-muted-foreground shrink-0","aria-hidden":true},k?w__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3"}):w__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"})),o&&w__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},o),c!=null?w__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},w__namespace.createElement("span",{className:"truncate"},t),w__namespace.createElement("span",{className:"truncate text-[11px] font-normal text-muted-foreground"},c)):w__namespace.createElement("span",{className:"flex-1 truncate text-left"},t),r!=null&&w__namespace.createElement("span",{className:"ml-auto inline-flex items-center justify-center rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground"},r)),l!=null&&w__namespace.createElement("div",{onClick:I=>I.stopPropagation(),className:"pointer-events-auto absolute inset-y-0 right-1.5 flex items-center gap-0.5"},l)),k&&u&&w__namespace.createElement(Yr.Provider,{value:P+1},w__namespace.createElement("div",{className:"space-y-[var(--gds-sidebar-section-gap,0.125rem)]"},u)))});oa.displayName="SidebarTreeItem";vt.Header=Xr;vt.Content=Jr;vt.Footer=Qr;vt.Section=ea;vt.Item=ta;vt.TreeItem=oa;var yt=[50,100,200,300,400,500,600,700,800,900,950],Vs=[.985,.955,.895,.82,.72,.61,.51,.415,.325,.245,.17],jc=[.015,.04,.075,.11,.14,.17,.17,.15,.12,.08,.04];function ar({hue:e,chromaScale:t=1}){let o=(e%360+360)%360,r={};for(let i=0;i<yt.length;i++){let a=Vs[i],d=jc[i]*t;r[yt[i]]=`${a.toFixed(4)} ${d.toFixed(4)} ${o.toFixed(2)}`;}return r}function _s(){let e={};for(let t=0;t<yt.length;t++){let o=Vs[t];e[yt[t]]=`${o.toFixed(4)} 0 0`;}return e}var ra={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"}},So="1 0 0",Ws="0 0 0";function Yt(e,t){let[,o,r]=e.split(/\s+/).map(l=>l.trim()),i=Number(o),a=r;if(t==="light"){let p=Math.min(i*.22,.045),g=.38,u=i;return {soft:`${.965.toFixed(3)} ${p.toFixed(3)} ${a}`,deep:`${g.toFixed(3)} ${u.toFixed(3)} ${a}`}}let d=.22,m=Math.min(i*.45,.075),s=.82,c=i*.9;return {soft:`${d.toFixed(3)} ${m.toFixed(3)} ${a}`,deep:`${s.toFixed(3)} ${c.toFixed(3)} ${a}`}}var nr={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 Kc=["superLight","light","dark","superDark"],qc={muted:.6,default:1,vibrant:1.3};function Yc(e,t,o){let r=t.primary*o,i=t.accent*o,a=(r+i)/2*.8,d=m=>(m%360+360)%360;return {1:`0.600 ${(.17*r).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*i).toFixed(4)} ${e.accent.toFixed(2)}`}}var L=e=>({source:"neutral",step:e}),Ve=e=>({source:"primary",step:e}),wt=e=>({source:"accent",step:e}),Co=e=>({source:"pure",value:e}),Zc={superLight:{background:L(50),foreground:L(800),card:Co(So),cardForeground:L(800),popover:Co(So),popoverForeground:L(800),primary:Ve(600),primaryForeground:Ve(50),secondary:L(100),secondaryForeground:L(700),muted:L(100),mutedForeground:L(500),accent:wt(600),accentForeground:wt(50),border:L(200),input:L(200),ring:Ve(500)},light:{background:L(50),foreground:L(950),card:Co(So),cardForeground:L(950),popover:Co(So),popoverForeground:L(950),primary:Ve(500),primaryForeground:Ve(50),secondary:L(100),secondaryForeground:L(700),muted:L(100),mutedForeground:L(500),accent:wt(500),accentForeground:wt(50),border:L(200),input:L(200),ring:Ve(500)},dark:{background:L(950),foreground:L(50),card:L(900),cardForeground:L(50),popover:L(900),popoverForeground:L(50),primary:Ve(400),primaryForeground:Ve(950),secondary:L(800),secondaryForeground:L(200),muted:L(800),mutedForeground:L(400),accent:wt(400),accentForeground:wt(950),border:L(800),input:L(800),ring:Ve(400)},superDark:{background:Co(Ws),foreground:L(100),card:L(950),cardForeground:L(100),popover:L(950),popoverForeground:L(100),primary:Ve(300),primaryForeground:Ve(950),secondary:L(900),secondaryForeground:L(300),muted:L(900),mutedForeground:L(500),accent:wt(300),accentForeground:wt(950),border:L(900),input:L(900),ring:Ve(300)}};function ce(e,t){return e.source==="pure"?e.value:t[e.source][e.step]}function Xc(e,t){let o=Zc[t],r=t==="superLight"||t==="light",i=r?ra.light:ra.dark;return {background:ce(o.background,e),foreground:ce(o.foreground,e),card:ce(o.card,e),cardForeground:ce(o.cardForeground,e),popover:ce(o.popover,e),popoverForeground:ce(o.popoverForeground,e),primary:ce(o.primary,e),primaryForeground:ce(o.primaryForeground,e),secondary:ce(o.secondary,e),secondaryForeground:ce(o.secondaryForeground,e),muted:ce(o.muted,e),mutedForeground:ce(o.mutedForeground,e),accent:ce(o.accent,e),accentForeground:ce(o.accentForeground,e),border:ce(o.border,e),input:ce(o.input,e),ring:ce(o.ring,e),destructive:i.destructive,destructiveForeground:i.destructiveFg,success:i.success,warning:i.warning,info:i.info,highlight:i.highlight,...(()=>{let a=r?"light":"dark",d=Yt(i.destructive,a),m=Yt(i.success,a),s=Yt(i.warning,a),c=Yt(i.info,a),l=Yt(i.highlight,a);return {destructiveSoft:d.soft,destructiveDeep:d.deep,successSoft:m.soft,successDeep:m.deep,warningSoft:s.soft,warningDeep:s.deep,infoSoft:c.soft,infoDeep:c.deep,highlightSoft:l.soft,highlightDeep:l.deep}})()}}var st={display:3.75,h1:2.5,h2:2,h3:1.5,h4:1.25,h5:1.125,h6:1,body:1,bodySm:.875},Jc={compact:.85,default:1,spacious:1.18};function Qc(e){let t=Jc[e.scale],o=r=>`${(r*t).toFixed(3)}rem`;return {fontSans:nr[e.body],fontMono:nr[e.mono],fontDisplay:nr[e.display],headingWeight:e.headingWeight??600,bodyWeight:e.bodyWeight??400,headingTracking:e.headingTracking??"-0.01em",scale:{display:o(st.display),h1:o(st.h1),h2:o(st.h2),h3:o(st.h3),h4:o(st.h4),h5:o(st.h5),h6:o(st.h6),body:o(st.body),bodySm:o(st.bodySm)}}}var ep={sharp:0,subtle:.25,soft:.5,round:.875,pill:1.25};function tp(e){let t=ep[e.style],o=r=>`${r.toFixed(3)}rem`;return {base:o(t),sm:o(Math.max(0,t-.25)),md:o(t),lg:o(t+.25),xl:o(t+.5),"2xl":o(t+1),full:"9999px"}}var op={tight:.85,default:1,roomy:1.2};function rp(e){return {baseUnit:"1rem",densityFactor:op[e.density]}}var ap={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 np(e){let t=e?.shadows??"default",o=e?.motionIntensity??1,r=i=>`${Math.round(i*o)}ms`;return {shadows:ap[t],motion:{fast:r(150),base:r(200),slow:r(300),slower:r(500)},borderWidth:e?.borderWidth??"1px"}}function Dt(e){let t=qc[e.intensity??"default"],o=e.neutralPureGray??false,r=(e.chroma?.neutral??.08)*t,i=(e.chroma?.primary??1)*t,a=(e.chroma?.accent??1)*t,d=o?_s():ar({hue:e.hues.neutral,chromaScale:r}),m=ar({hue:e.hues.primary,chromaScale:i}),s=ar({hue:e.hues.accent,chromaScale:a}),c={neutral:d,primary:m,accent:s},l=Yc(e.hues,{primary:i,accent:a},t),p=Object.fromEntries(Kc.map(P=>[P,Xc(c,P)])),g=Qc(e.typography),u=tp(e.radius),b=rp(e.spacing),f=np(e.effects),h={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:p,chart:l,typography:g,radius:u,spacing:b,effects:f,components:h}}var ko={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"}},aa={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"}},ir=[ko,aa];function ip(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 ia(e,t){let o=e.colors[t];return {...ip(o),...na("neutral",e.ramps.neutral),...na("primary",e.ramps.primary),...na("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,"--gds-radius-sm":e.radius.sm,"--gds-radius-md":e.radius.md,"--gds-radius-lg":e.radius.lg,"--gds-radius-xl":e.radius.xl,"--gds-radius-2xl":e.radius["2xl"],"--gds-radius-full":e.radius.full,"--gds-density":String(e.spacing.densityFactor),"--gds-shadow-sm":e.effects.shadows.sm,"--gds-shadow-md":e.effects.shadows.md,"--gds-shadow-lg":e.effects.shadows.lg,"--gds-shadow-xl":e.effects.shadows.xl,"--gds-shadow-2xl":e.effects.shadows["2xl"],"--gds-shadow-inner":e.effects.shadows.inner,"--gds-transition-fast":e.effects.motion.fast,"--gds-transition-base":e.effects.motion.base,"--gds-transition-slow":e.effects.motion.slow,"--gds-transition-slower":e.effects.motion.slower,"--gds-border-width":e.effects.borderWidth}}function na(e,t){let o={};for(let r of yt)o[`--ramp-${e}-${r}`]=t[r];return o}function sr(e,t){if(typeof document>"u")return;let o=document.documentElement,r=ia(e,t);for(let[i,a]of Object.entries(r))o.style.setProperty(i,a);o.setAttribute("data-grade-theme",e.id),o.setAttribute("data-mode",t),o.setAttribute("data-button-shape",e.components.buttonShape??"default"),o.setAttribute("data-input-style",e.components.inputStyle??"outlined"),o.setAttribute("data-card-style",e.components.cardStyle??"flat");}function To(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 o=getComputedStyle(t).color;document.body.removeChild(t);let r=o.match(/\d+/g);if(!r||r.length<3)return "";let[i,a,d]=r.slice(0,3).map(Number);return "#"+[i,a,d].map(m=>Math.max(0,Math.min(255,m)).toString(16).padStart(2,"0")).join("").toUpperCase()}function sp(e){let t=e.trim().split(/\s+/);if(t.length<3)return {oklch:e,hex:""};let[o,r,i]=t.map(Number),a=`${o.toFixed(3)} ${r.toFixed(3)} ${Math.round(i)}`,d=To(e);return {oklch:a,hex:d}}function sa(e,t,o){let r=[`### ${e} ramp (hue ${Math.round(o)}\xB0)`,"","| Step | OKLCH | Hex |","|------|-------|-----|"];for(let i of yt){let{oklch:a,hex:d}=sp(t[i]);r.push(`| ${i} | \`${a}\` | \`${d||"\u2014"}\` |`);}return r.join(`
|
|
64
|
+
`)}function $s(e,t){let o=[`### ${e}`,"","| Token | Usage | Light (hex) | Dark (hex) |","|-------|-------|-------------|------------|"];for(let r of t){let i=To(r.light)||"\u2014",a=To(r.dark)||"\u2014";o.push(`| \`--${r.token}\` | ${r.usage} | \`${i}\` (\`${r.light}\`) | \`${a}\` (\`${r.dark}\`) |`);}return o.join(`
|
|
65
|
+
`)}function Us(e){return JSON.stringify(e.input,null,2)}function js(e){let{input:t,ramps:o,colors:r,chart:i,typography:a,radius:d,spacing:m,effects:s,components:c}=e,l=t.intensity??"default",p=f=>({token:f,usage:lp[f]??"",light:r.light[f],dark:r.dark[f]}),g=["background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","border","input","ring"].map(p),u=["destructive","destructiveForeground","success","warning","info","highlight"].map(p),b=[1,2,3,4,5].map(f=>{let h=i[f];return {slot:f,triplet:h,hex:To(h)||"\u2014"}});return `# ${e.name} \u2014 Grade Design System Theme
|
|
4
66
|
|
|
5
67
|
> **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
68
|
|
|
@@ -30,30 +92,30 @@ A \`ThemeInput\` is a small object (three hues plus a handful of presets). The g
|
|
|
30
92
|
## Full ThemeInput (round-trippable)
|
|
31
93
|
|
|
32
94
|
\`\`\`json
|
|
33
|
-
${
|
|
95
|
+
${Us(e)}
|
|
34
96
|
\`\`\`
|
|
35
97
|
|
|
36
98
|
## Color ramps
|
|
37
99
|
|
|
38
100
|
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
101
|
|
|
40
|
-
${
|
|
102
|
+
${sa("Neutral",o.neutral,t.hues.neutral)}
|
|
41
103
|
|
|
42
|
-
${
|
|
104
|
+
${sa("Primary",o.primary,t.hues.primary)}
|
|
43
105
|
|
|
44
|
-
${
|
|
106
|
+
${sa("Accent",o.accent,t.hues.accent)}
|
|
45
107
|
|
|
46
108
|
## Semantic tokens (hue-derived)
|
|
47
109
|
|
|
48
110
|
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
111
|
|
|
50
|
-
${
|
|
112
|
+
${$s("Core semantic tokens",g)}
|
|
51
113
|
|
|
52
114
|
## Fixed semantic tokens (not hue-derived)
|
|
53
115
|
|
|
54
116
|
Status colors stay consistent across themes so users always read green as success, red as destructive, etc. Accessibility wins over brand cohesion.
|
|
55
117
|
|
|
56
|
-
${
|
|
118
|
+
${$s("Status colors",u)}
|
|
57
119
|
|
|
58
120
|
## Chart palette
|
|
59
121
|
|
|
@@ -61,7 +123,7 @@ ${en("Status colors",h)}
|
|
|
61
123
|
|
|
62
124
|
| Slot | OKLCH | Hex |
|
|
63
125
|
|------|-------|-----|
|
|
64
|
-
${
|
|
126
|
+
${b.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
|
|
65
127
|
`)}
|
|
66
128
|
|
|
67
129
|
## Typography
|
|
@@ -94,26 +156,26 @@ ${y.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
|
|
|
94
156
|
| Step | Value |
|
|
95
157
|
|------|-------|
|
|
96
158
|
| \`--radius\` (base) | \`${d.base}\` |
|
|
97
|
-
| \`--
|
|
98
|
-
| \`--
|
|
99
|
-
| \`--
|
|
100
|
-
| \`--
|
|
101
|
-
| \`--
|
|
102
|
-
| \`--
|
|
159
|
+
| \`--gds-radius-sm\` | \`${d.sm}\` |
|
|
160
|
+
| \`--gds-radius-md\` | \`${d.md}\` |
|
|
161
|
+
| \`--gds-radius-lg\` | \`${d.lg}\` |
|
|
162
|
+
| \`--gds-radius-xl\` | \`${d.xl}\` |
|
|
163
|
+
| \`--gds-radius-2xl\` | \`${d["2xl"]}\` |
|
|
164
|
+
| \`--gds-radius-full\` | \`${d.full}\` |
|
|
103
165
|
|
|
104
166
|
### Spacing
|
|
105
167
|
|
|
106
|
-
- **Density factor**: \`${
|
|
107
|
-
- **Base unit**: \`${
|
|
168
|
+
- **Density factor**: \`${m.densityFactor}\` (applied as \`var(--gds-density)\` on components that opt in)
|
|
169
|
+
- **Base unit**: \`${m.baseUnit}\`
|
|
108
170
|
|
|
109
171
|
### Motion
|
|
110
172
|
|
|
111
173
|
| Var | Duration |
|
|
112
174
|
|-----|----------|
|
|
113
|
-
| \`--
|
|
114
|
-
| \`--
|
|
115
|
-
| \`--
|
|
116
|
-
| \`--
|
|
175
|
+
| \`--gds-transition-fast\` | \`${s.motion.fast}\` |
|
|
176
|
+
| \`--gds-transition-base\` | \`${s.motion.base}\` |
|
|
177
|
+
| \`--gds-transition-slow\` | \`${s.motion.slow}\` |
|
|
178
|
+
| \`--gds-transition-slower\` | \`${s.motion.slower}\` |
|
|
117
179
|
|
|
118
180
|
### Shadows
|
|
119
181
|
|
|
@@ -121,10 +183,10 @@ All shadows are applied via Tailwind's \`shadow-*\` utilities mapped to these va
|
|
|
121
183
|
|
|
122
184
|
| Var | Value |
|
|
123
185
|
|-----|-------|
|
|
124
|
-
| \`--
|
|
125
|
-
| \`--
|
|
126
|
-
| \`--
|
|
127
|
-
| \`--
|
|
186
|
+
| \`--gds-shadow-sm\` | \`${s.shadows.sm}\` |
|
|
187
|
+
| \`--gds-shadow-md\` | \`${s.shadows.md}\` |
|
|
188
|
+
| \`--gds-shadow-lg\` | \`${s.shadows.lg}\` |
|
|
189
|
+
| \`--gds-shadow-xl\` | \`${s.shadows.xl}\` |
|
|
128
190
|
|
|
129
191
|
## CSS variable conventions
|
|
130
192
|
|
|
@@ -132,8 +194,8 @@ Every color is stored as a bare \`L C H\` OKLCH triplet and wrapped at call time
|
|
|
132
194
|
|
|
133
195
|
\`\`\`css
|
|
134
196
|
:root {
|
|
135
|
-
--primary: ${
|
|
136
|
-
--background: ${
|
|
197
|
+
--primary: ${r.light.primary};
|
|
198
|
+
--background: ${r.light.background};
|
|
137
199
|
}
|
|
138
200
|
\`\`\`
|
|
139
201
|
|
|
@@ -168,21 +230,21 @@ Import from \`@gradeui/ui\` \u2014 all components read theme vars and re-skin au
|
|
|
168
230
|
\`\`\`tsx
|
|
169
231
|
import {
|
|
170
232
|
Button, Input, Textarea, Label, Select, Checkbox, RadioGroup, Switch,
|
|
171
|
-
Slider, Toggle, Calendar, Card, Badge,
|
|
233
|
+
Slider, Toggle, Calendar, Card, Badge, Callout, Skeleton, Separator,
|
|
172
234
|
HoverCard, Popover, Dialog, Sheet, Tooltip, Progress, DropdownMenu,
|
|
173
|
-
Command, Tabs,
|
|
235
|
+
Command, Tabs, Accordion, Collapsible, ScrollArea, Table,
|
|
174
236
|
Avatar, AIChat, Logo, SectionBlock, CardBlock, MediaBlock, FAQBlock,
|
|
175
237
|
} from "@gradeui/ui";
|
|
176
238
|
import "@gradeui/ui/styles.css";
|
|
177
239
|
\`\`\`
|
|
178
240
|
|
|
179
|
-
Every component accepts a \`className\` for layout tweaks. Variants are passed via a \`variant\` prop: \`<Button variant="outline">\`, \`<
|
|
241
|
+
Every component accepts a \`className\` for layout tweaks. Variants are passed via a \`variant\` prop: \`<Button variant="outline">\`, \`<Callout variant="success">\`, \`<Badge variant="destructive-soft">\`.
|
|
180
242
|
|
|
181
243
|
## Feel and voice
|
|
182
244
|
|
|
183
245
|
When generating UI in the ${e.name} theme, match this character:
|
|
184
246
|
|
|
185
|
-
${
|
|
247
|
+
${dp(e)}
|
|
186
248
|
|
|
187
249
|
## Instructions for the generating LLM
|
|
188
250
|
|
|
@@ -201,7 +263,7 @@ To recreate this theme in code:
|
|
|
201
263
|
\`\`\`ts
|
|
202
264
|
import { generateTheme, applyThemeToRoot, type ThemeInput } from "@gradeui/ui";
|
|
203
265
|
|
|
204
|
-
const input: ThemeInput = ${
|
|
266
|
+
const input: ThemeInput = ${Us(e).replace(/\n/g,`
|
|
205
267
|
`)};
|
|
206
268
|
|
|
207
269
|
const theme = generateTheme(input);
|
|
@@ -210,11 +272,11 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
210
272
|
|
|
211
273
|
---
|
|
212
274
|
*Generated from Grade Design System v1 \xB7 ${new Date().toISOString()}*
|
|
213
|
-
`}var
|
|
214
|
-
`)}function
|
|
275
|
+
`}var lp={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 dp(e){let t=[],{input:o,components:r}=e;o.intensity==="muted"?t.push("- **Quiet and restrained.** Avoid heavy saturation, glowing effects, or loud contrast jumps. Let whitespace do the work."):o.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."),o.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."):o.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."),o.radius.style==="pill"?t.push("- **Fully rounded.** Controls are pill-shaped. Use `rounded-full` on custom chips / pills too."):o.radius.style==="sharp"?t.push("- **Square corners.** Zero radius everywhere \u2014 very architectural. Do not add curves."):o.radius.style==="round"?t.push("- **Rounded and friendly.** Corner radius is noticeable (\u224814px base). Avoid sharp edges."):t.push("- **Standard rounded corners.**");let i=o.typography.display;return i==="fraunces"||i==="instrumentSerif"||i==="sourceSerif"?t.push("- **Editorial serif headings.** Treat headings like magazine titles \u2014 give them space and weight. Serifs reward larger sizes."):(i==="geist"||i==="inter")&&t.push("- **Modern technical sans.** Clean, functional, neutral. Good for product UIs."),r.cardStyle==="outlined"?t.push("- **Cards are outlined**, not shadowed. Rely on borders + spacing for hierarchy."):r.cardStyle==="elevated"?t.push("- **Cards have real elevation.** Use shadows to stack content visually."):r.cardStyle==="glass"&&t.push("- **Glass / frosted cards.** Use translucent surfaces over background imagery or gradients."),r.buttonShape==="pill"&&t.push("- **Buttons are pills** \u2014 don't override with square corners."),t.join(`
|
|
276
|
+
`)}function la(e){if(typeof window>"u"||typeof document>"u")return;let t=js(e),o=new Blob([t],{type:"text/markdown;charset=utf-8"}),r=URL.createObjectURL(o),i=document.createElement("a");i.href=r,i.download=`grade-theme-${e.input.id}.md`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r);}var tt=Object.fromEntries(ir.map(e=>[e.id,Dt(e)])),Zt=ko.id;function At(e){if(e in tt)return tt[e];let t=ca(e);if(t)return Dt(t)}function da(){return [...Object.values(tt),...Ys()]}var Ks="grade-user-themes";function lr(){if(typeof localStorage>"u")return {};try{let e=localStorage.getItem(Ks);if(!e)return {};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function qs(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(Ks,JSON.stringify(e));}catch{}}function Ys(){return Object.values(lr()).map(Dt)}function ca(e){return lr()[e]}function dr(e){let t=lr();return t[e.id]=e,qs(t),Dt(e)}function pa(e){if(e in tt)return;let t=lr();delete t[e],qs(t);}function cp(e,t,o){let r=tt[e]?.input??ca(e);if(!r)return;let i={...r,id:t,name:o};return dr(i),i}var ma="grade-theme",cr="grade-mode",Xs=["superLight","light","dark","superDark"],Zs=new Set(["dark","superDark"]),pp=`
|
|
215
277
|
(function() {
|
|
216
278
|
try {
|
|
217
|
-
var mode = localStorage.getItem('${
|
|
279
|
+
var mode = localStorage.getItem('${cr}');
|
|
218
280
|
var valid = ['superLight','light','dark','superDark'];
|
|
219
281
|
if (!mode || valid.indexOf(mode) === -1) {
|
|
220
282
|
mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
@@ -223,11 +285,11 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
223
285
|
document.documentElement.classList.add('dark');
|
|
224
286
|
}
|
|
225
287
|
document.documentElement.setAttribute('data-mode', mode);
|
|
226
|
-
var themeId = localStorage.getItem('${
|
|
227
|
-
if (themeId) document.documentElement.setAttribute('data-
|
|
288
|
+
var themeId = localStorage.getItem('${ma}');
|
|
289
|
+
if (themeId) document.documentElement.setAttribute('data-grade-theme', themeId);
|
|
228
290
|
} catch(e) {}
|
|
229
291
|
})();
|
|
230
|
-
`,Er=v__namespace.createContext(null);function Ri({children:e,defaultTheme:t=at,defaultMode:r="light"}){let[o,s]=v__namespace.useState(t),[a,d]=v__namespace.useState(r),[p,i]=v__namespace.useState(0);v__namespace.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__namespace.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__namespace.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__namespace.useCallback(f=>{s(f);try{localStorage.setItem(Nr,f);}catch{}},[]),l=v__namespace.useCallback(f=>{d(f);try{localStorage.setItem(Xt,f);}catch{}},[]),m=v__namespace.useCallback(f=>{Yt(f),i(g=>g+1),c(f.id);},[c]),u=v__namespace.useCallback(f=>{f in Pe||(kr(f),i(g=>g+1),s(g=>g===f?at:g));},[]),h=v__namespace.useCallback(()=>{i(f=>f+1);},[]),y=v__namespace.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__namespace.createElement(Er.Provider,{value:y},e)}function Hr(){let e=v__namespace.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__namespace.useContext(Er)}var Lr=v__namespace.createContext(null);function dn(){return v__namespace.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__namespace.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__namespace.useRef(null),O=v__namespace.useRef(null),se=v__namespace.useRef(new globalThis.Map),Se=v__namespace.useRef(null),[Nt,We]=v__namespace.useState(false),Et=v__namespace.useRef(c),H=v__namespace.useRef(m),Be=v__namespace.useRef(l);v__namespace.useEffect(()=>{Et.current=c,H.current=m,Be.current=l;});let je=Ke()?.isDark??false,A=d==="auto"?je?"dark":"light":d;v__namespace.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__namespace.useEffect(()=>{O.current?.setAppearance(A);},[A]),v__namespace.useEffect(()=>{O.current?.setInteractive(p);},[p]),v__namespace.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__namespace.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__namespace.useImperativeHandle(r,()=>Pn(O,se),[]);let nr=v__namespace.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__namespace.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__namespace.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__namespace.memo(function({id:t,at:r,anchor:o="bottom",className:s,children:a,onClick:d}){let p=dn(),[i,c]=v__namespace.useState(null),l=v__namespace.useRef(null),m=v__namespace.useRef(d);return v__namespace.useEffect(()=>{m.current=d;}),v__namespace.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__namespace.useEffect(()=>{l.current?.setPosition(r);},[r[0],r[1]]),i?reactDom.createPortal(v__namespace.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__namespace.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__namespace.useRef(null);return v__namespace.useImperativeHandle(m,()=>u.current),v__namespace.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__namespace.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__namespace.createElement("div",{className:"absolute inset-0 flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},d),!c&&!s&&p!=="none"&&v__namespace.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__namespace.createElement(lucideReact.ImageIcon,{className:"h-1/3 w-1/3 max-h-10 max-w-10"}):p))});we.displayName="MediaSurface";function Ue(){let[e,t]=v__namespace.useState(false);return v__namespace.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__namespace.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__namespace.useRef(null),R=Ue(),[w,k]=v__namespace.useState(!!c);v__namespace.useImperativeHandle(f,()=>g.current);let S=s??r,_=r&&!R;v__namespace.useEffect(()=>{g.current&&(g.current.playbackRate=h);},[h]),v__namespace.useEffect(()=>{k(!!c);},[c]);let j=v__namespace.useCallback(O=>{!a||!g.current||(O&&_?g.current.play().catch(()=>{}):g.current.pause());},[a,_]);return v__namespace.createElement(we,{aspect:d,radius:p,border:i,"aria-label":l,className:m,style:u,onVisibilityChange:a?j:void 0},v__namespace.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__namespace.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__namespace.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__namespace.useState(null),[S,_]=v__namespace.useState(null);return v__namespace.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__namespace.createElement(we,{ref:g,aspect:a,radius:d,border:p,"aria-label":c,className:l,style:m},S?v__namespace.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},S):w&&e?v__namespace.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__namespace.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__namespace.useState(a);v__namespace.useEffect(()=>{if(!g||!d)return;let _=()=>{g.play();};return g.on(y.Stop,_),()=>{g.off(y.Stop,_);}},[g,d,y]),v__namespace.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__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement(R,{className:"w-full h-full"}),!g&&c&&v__namespace.createElement("img",{src:c,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),i&&v__namespace.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__namespace.createElement(re,{size:"icon",variant:"secondary",onClick:S},w?v__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):v__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))}var Mn=({renderer:e,scene:t,camera:r,preset:o,width:s,height:a})=>{let d=new postprocessing.EffectComposer(e);d.setSize(s,a),d.addPass(new postprocessing.RenderPass(t,r));let p=new postprocessing.BloomEffect({intensity:0,luminanceThreshold:.6,radius:.6,kernelSize:postprocessing.KernelSize.MEDIUM}),i=new postprocessing.NoiseEffect({blendFunction:postprocessing.BlendFunction.OVERLAY});i.blendMode.opacity.value=0;let c=new postprocessing.ScanlineEffect({blendFunction:postprocessing.BlendFunction.OVERLAY,density:1.25});c.blendMode.opacity.value=0;let l=new postprocessing.VignetteEffect({darkness:0,offset:.5}),m=new postprocessing.ChromaticAberrationEffect({offset:new G__namespace.Vector2(0,0),radialModulation:false,modulationOffset:.15}),u=new postprocessing.GlitchEffect({chromaticAberrationOffset:new G__namespace.Vector2(0,0),columns:.05});u.minStrength=0,u.maxStrength=0,d.addPass(new postprocessing.EffectPass(r,p)),d.addPass(new postprocessing.EffectPass(r,i,c,l)),d.addPass(new postprocessing.EffectPass(r,m)),d.addPass(new postprocessing.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__namespace.Scene;o.background=new G__namespace.Color(r.background);let s=new G__namespace.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__namespace.Color(r.primary),c=new G__namespace.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__namespace.BufferGeometry;m.setAttribute("position",new G__namespace.BufferAttribute(a,3)),m.setAttribute("color",new G__namespace.BufferAttribute(d,3));let u=new G__namespace.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:G__namespace.AdditiveBlending}),h=new G__namespace.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__namespace.Color(g.background);let R=new G__namespace.Color(g.primary),w=new G__namespace.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=`
|
|
292
|
+
`,ua=w__namespace.createContext(null);function mp({children:e,defaultTheme:t=Zt,defaultMode:o="light"}){let[r,i]=w__namespace.useState(t),[a,d]=w__namespace.useState(o),[m,s]=w__namespace.useState(0);w__namespace.useEffect(()=>{try{let f=localStorage.getItem(ma);f&&At(f)&&i(f);let h=localStorage.getItem(cr);if(h&&Xs.includes(h))d(h);else if(typeof window<"u"){let P=window.matchMedia("(prefers-color-scheme: dark)").matches;d(P?"dark":"light");}}catch{}},[]),w__namespace.useEffect(()=>{let f=At(r)??At(Zt);f&&(sr(f,a),typeof document<"u"&&document.documentElement.classList.toggle("dark",Zs.has(a)));},[r,a,m]),w__namespace.useEffect(()=>{if(typeof window>"u")return;let f=window.matchMedia("(prefers-color-scheme: dark)"),h=P=>{try{if(localStorage.getItem(cr))return}catch{return}d(P.matches?"dark":"light");};return f.addEventListener("change",h),()=>f.removeEventListener("change",h)},[]);let c=w__namespace.useCallback(f=>{i(f);try{localStorage.setItem(ma,f);}catch{}},[]),l=w__namespace.useCallback(f=>{d(f);try{localStorage.setItem(cr,f);}catch{}},[]),p=w__namespace.useCallback(f=>{dr(f),s(h=>h+1),c(f.id);},[c]),g=w__namespace.useCallback(f=>{f in tt||(pa(f),s(h=>h+1),i(h=>h===f?Zt:h));},[]),u=w__namespace.useCallback(()=>{s(f=>f+1);},[]),b=w__namespace.useMemo(()=>{let f=At(r)??At(Zt);return {theme:f,themeId:f.id,mode:a,isDark:Zs.has(a),setThemeId:c,setMode:l,themes:da(),saveAndActivate:p,deleteTheme:g,refresh:u}},[r,a,m,c,l,p,g,u]);return w__namespace.createElement(ua.Provider,{value:b},e)}function ga(){let e=w__namespace.useContext(ua);if(!e)throw new Error("useGradeTheme must be used inside <GradeThemeProvider>. Wrap your app (typically in app/layout.tsx).");return e}function It(){return w__namespace.useContext(ua)}var fa=w__namespace.createContext(null);function Js(){return w__namespace.useContext(fa)}var Sp={maplibre:()=>Promise.resolve().then(()=>(al(),rl)).then(e=>e.createMaplibreAdapter),mapbox:()=>Promise.resolve().then(()=>(ll(),sl)).then(e=>e.createMapboxAdapter),google:()=>Promise.resolve().then(()=>(pl(),cl)).then(e=>e.createGoogleAdapter)},Cp=500,ha=w__namespace.forwardRef(function(t,o){let{center:r,zoom:i,bounds:a,appearance:d="auto",interactive:m=true,hoveredId:s,onHoveredIdChange:c,onLoad:l,onError:p,className:g,style:u,children:b,...f}=t,h=f.provider??"maplibre",P=f.styleUrl,S=f.tilerKey,R=f.accessToken,C=f.apiKey,k=f.mapId,B=w__namespace.useRef(null),H=w__namespace.useRef(null),I=w__namespace.useRef(new globalThis.Map),V=w__namespace.useRef(null),[Pe,ee]=w__namespace.useState(false),ye=w__namespace.useRef(c),G=w__namespace.useRef(p),ge=w__namespace.useRef(l);w__namespace.useEffect(()=>{ye.current=c,G.current=p,ge.current=l;});let we=It()?.isDark??false,v=d==="auto"?we?"dark":"light":d;w__namespace.useEffect(()=>{let D=false,te=B.current;if(!te)return;let Me=d==="auto"?we?"dark":"light":d;return (async()=>{try{let fe=await Sp[h]();if(D)return;let ne=await fe(te,{center:r,zoom:i,bounds:a,appearance:Me,interactive:m,styleUrl:P,tilerKey:S,accessToken:R,apiKey:C,mapId:k},{onLoad:()=>{},onError:he=>G.current?.(he),onMarkerHover:he=>ye.current?.(he),onMarkerClick:()=>{}});if(D){ne.destroy();return}H.current=ne,ee(!0),ge.current?.(ml(H,I));}catch(fe){if(D)return;fe?.code||G.current?.({code:"provider-init-failed",message:fe?.message??"Map init failed",cause:fe});}})(),()=>{D=true,H.current?.destroy(),H.current=null,ee(false),I.current.clear(),V.current=null;}},[h,P,R,C,k,S]),w__namespace.useEffect(()=>{H.current?.setAppearance(v);},[v]),w__namespace.useEffect(()=>{H.current?.setInteractive(m);},[m]),w__namespace.useEffect(()=>{H.current&&(a?H.current.setBounds(a[0],a[1]):(H.current.setCenter(r),H.current.setZoom(i)));},[r[0],r[1],i,a?.[0]?.[0],a?.[0]?.[1],a?.[1]?.[0],a?.[1]?.[1]]),w__namespace.useEffect(()=>{let D=V.current;D&&D!==s&&I.current.get(D)?.setHovered(false),s&&I.current.get(s)?.setHovered(true),V.current=s??null;},[s]),w__namespace.useImperativeHandle(o,()=>ml(H,I),[]);let O=w__namespace.useMemo(()=>({registerMarker:(D,te,Me)=>{let fe=H.current;if(!fe)return null;let ne=fe.addMarker(D,te,Me);I.current.set(D,ne),process.env.NODE_ENV!=="production"&&I.current.size===Cp+1&&console.warn(`@gradeui/ui Map: rendering ${I.current.size} markers. DOM markers degrade past ~1k. Consider clustering via the .instance escape hatch.`);let he=ne.remove;return ne.remove=()=>{he(),I.current.delete(D),V.current===D&&(V.current=null);},s===D&&ne.setHovered(true),ne}}),[Pe]);return w__namespace.createElement("div",{ref:B,"data-gds-part":"map",className:n("gds-map relative isolate overflow-hidden",g),style:{borderRadius:"var(--gds-map-radius, var(--radius, 0.5rem))",border:"var(--gds-map-border, 1px solid var(--border, transparent))",...u}},w__namespace.createElement(fa.Provider,{value:O},b))});ha.displayName="Map";function ml(e,t){let o=()=>{};return {flyTo:(r,i)=>{let a=e.current;if(!a)return;let d;if(typeof r=="string"){if(d=t.current.get(r)?.coords??null,!d){console.warn(`@gradeui/ui Map.flyTo: no marker registered with id "${r}".`);return}}else d=r;a.flyTo(d,i);},panTo:(r,i)=>e.current?.panTo(r,i)??o(),fitBounds:(r,i)=>e.current?.fitBounds(r,i)??o(),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 ba=w__namespace.memo(function({id:t,at:o,anchor:r="bottom",className:i,children:a,onClick:d}){let m=Js(),[s,c]=w__namespace.useState(null),l=w__namespace.useRef(null),p=w__namespace.useRef(d);return w__namespace.useEffect(()=>{p.current=d;}),w__namespace.useEffect(()=>{if(!m)return;let g=m.registerMarker(t,o,r);if(g){l.current=g,c(g.element);let u=b=>{p.current?.({id:t,coords:g.coords,native:b});};return g.element.addEventListener("click",u),()=>{g.element.removeEventListener("click",u),g.remove(),l.current=null,c(null);}}},[m,t]),w__namespace.useEffect(()=>{l.current?.setPosition(o);},[o[0],o[1]]),s?reactDom.createPortal(w__namespace.createElement("div",{"data-gds-part":"map-marker-content",className:n("pointer-events-auto",i)},a),s):null});ba.displayName="MapMarker";var Op={video:"aspect-video",square:"aspect-square",portrait:"aspect-[3/4]",wide:"aspect-[21/9]",auto:""},Vp={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)"},_p={album:lucideReact.Disc3,"tv-show":lucideReact.Tv,movie:lucideReact.Clapperboard,game:lucideReact.Gamepad2,book:lucideReact.Book,portrait:lucideReact.User,landscape:lucideReact.Mountain,poster:lucideReact.Film,product:lucideReact.Package,food:lucideReact.UtensilsCrossed,video:lucideReact.Video,audio:lucideReact.Music,embed:lucideReact.Code2,"3d":lucideReact.Box,generic:lucideReact.Image},Wp={album:"square","tv-show":"portrait",movie:"portrait",game:"portrait",book:"portrait",portrait:"portrait",landscape:"wide",poster:"portrait",product:"square",food:"square",video:"video",audio:"video",embed:"video","3d":"square",generic:"video"};function $p(e){if(!e)return "";let t=/^(the|a|an|and|for|by|of|in|on|at|to)$/i,o=e.trim().split(/\s+/).filter(r=>r&&!t.test(r));return o.length===0?e.replace(/\s+/g,"").slice(0,2).toUpperCase():o.length===1?o[0].slice(0,2).toUpperCase():(o[0][0]+o[1][0]).toUpperCase()}function Up(e){return e<64?"sm":e>=160?"lg":"md"}var ot=w__namespace.forwardRef(({className:e,aspect:t,radius:o="lg",border:r=false,loading:i=false,onVisibilityChange:a,fallback:d,emptyState:m="auto",hint:s="generic",alt:c,source:l,src:p,glyph:g,overlay:u,instanceId:b,style:f,children:h,...P},S)=>{let R=w__namespace.useRef(null);w__namespace.useImperativeHandle(S,()=>R.current);let C=s,k=t,B=o,H=r,I=i,V=c,Pe=p,ee=m,ye=k??Wp[C];w__namespace.useEffect(()=>{if(!a||!R.current)return;let he=R.current,lt=new IntersectionObserver(([zt])=>a(zt.isIntersecting),{threshold:.05});return lt.observe(he),()=>lt.disconnect()},[a]);let G=!h&&ee!=="none",[ge,Ae]=w__namespace.useState("md");w__namespace.useEffect(()=>{if(!G)return;let he=R.current;if(!he)return;let lt=new ResizeObserver(([zt])=>{let Ho=zt.contentRect.width;Ae(Up(Ho));});return lt.observe(he),()=>lt.disconnect()},[G]);let we=w__namespace.useMemo(()=>$p(V),[V]),v=_p[C]??lucideReact.Image,O=ee==="auto"||ee==="icon",D=Pe,te=w__namespace.useMemo(()=>l?JSON.stringify(l):void 0,[l]),[Me,fe]=w__namespace.useState(false);w__namespace.useEffect(()=>{fe(false);},[D]);let ne=Me?void 0:D;return w__namespace.createElement("div",{ref:R,"data-gds-part":"media-surface","data-media-hint":C,"data-media-source-kind":l?.kind,"data-media-source":te,"data-media-alt":V,"data-gds-instance-id":b,className:n("gds-media-surface relative w-full overflow-hidden",Op[ye],H&&"border border-border",e),style:{borderRadius:`var(--gds-media-radius, ${Vp[B]})`,...f},...P},G&&w__namespace.createElement("div",{"data-gds-part":"media-surface-placeholder","data-tier":ge,className:"absolute inset-0 z-0 flex flex-col items-center justify-center gap-2 pointer-events-none px-3 text-center",style:{background:"var(--gds-media-placeholder-bg)",color:"var(--gds-media-placeholder-fg)"},"aria-hidden":true},O?ge==="sm"?we?w__namespace.createElement("span",{className:"font-semibold text-sm tracking-tight"},we):w__namespace.createElement(v,{className:"h-1/2 w-1/2 max-h-6 max-w-6"}):ge==="md"?w__namespace.createElement(w__namespace.Fragment,null,g??w__namespace.createElement(v,{className:"h-1/3 w-1/3 max-h-10 max-w-10"})):w__namespace.createElement(w__namespace.Fragment,null,g??w__namespace.createElement(v,{className:"h-1/4 w-1/4 max-h-12 max-w-12"}),V&&w__namespace.createElement("span",{className:"text-xs leading-snug line-clamp-2 max-w-[80%]","data-gds-part":"media-surface-caption"},V)):ee),(ne||h)&&w__namespace.createElement("div",{"data-gds-part":"media-surface-content",className:"absolute inset-0 z-[1]"},ne&&w__namespace.createElement("img",{src:ne,alt:V??"",onError:()=>fe(true),className:"absolute inset-0 h-full w-full object-cover","data-gds-part":"media-surface-img"}),h),I&&w__namespace.createElement("div",{className:"absolute inset-0 z-[2] flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},d),u&&w__namespace.createElement("div",{"data-gds-part":"media-surface-overlay",className:"absolute inset-0 z-10"},u))});ot.displayName="MediaSurface";function Ft(){let[e,t]=w__namespace.useState(false);return w__namespace.useEffect(()=>{let o=window.matchMedia("(prefers-reduced-motion: reduce)");t(o.matches);let r=i=>t(i.matches);return o.addEventListener("change",r),()=>o.removeEventListener("change",r)},[]),e}var gl=w__namespace.forwardRef(({src:e,controls:t=true,autoPlay:o=false,loop:r=false,muted:i,pauseOffscreen:a=true,aspect:d="video",radius:m="lg",border:s=false,poster:c,label:l,className:p,style:g,playbackRate:u=1,objectFit:b="cover"},f)=>{let h=w__namespace.useRef(null),P=Ft(),[S,R]=w__namespace.useState(!!c);w__namespace.useImperativeHandle(f,()=>h.current);let C=i??o,k=o&&!P;w__namespace.useEffect(()=>{h.current&&(h.current.playbackRate=u);},[u]),w__namespace.useEffect(()=>{R(!!c);},[c]);let B=w__namespace.useCallback(H=>{!a||!h.current||(H&&k?h.current.play().catch(()=>{}):h.current.pause());},[a,k]);return w__namespace.createElement(ot,{aspect:d,radius:m,border:s,"aria-label":l,className:p,style:g,onVisibilityChange:a?B:void 0},w__namespace.createElement("video",{ref:h,src:e,controls:t,autoPlay:k,loop:r,muted:C,playsInline:true,preload:k?"auto":"metadata",onPlaying:()=>R(false),className:n("w-full h-full",b==="cover"&&"object-cover",b==="contain"&&"object-contain",b==="fill"&&"object-fill")},"Your browser does not support the video tag."),c&&S&&w__namespace.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",b==="cover"&&"object-cover",b==="contain"&&"object-contain",b==="fill"&&"object-fill")}))});gl.displayName="VideoPlayer";var fl=w__namespace.forwardRef(({src:e,controls:t=false,autoPlay:o=true,loop:r=true,pauseOffscreen:i=true,aspect:a="square",radius:d="lg",border:m=false,poster:s,label:c,className:l,style:p,stateMachines:g,artboard:u,fit:b="contain",stateMachineInputs:f},h)=>{let P=Ft(),[S,R]=w__namespace.useState(null),[C,k]=w__namespace.useState(null);return w__namespace.useEffect(()=>{let B=false;return import('@rive-app/react-canvas').then(H=>{B||R(H);}).catch(()=>{B||k("Rive runtime not installed. Run `npm install @rive-app/react-canvas`.");}),()=>{B=true;}},[]),w__namespace.createElement(ot,{ref:h,aspect:a,radius:d,border:m,"aria-label":c,className:l,style:p},C?w__namespace.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},C):S&&e?w__namespace.createElement(qp,{Mod:S,src:e,stateMachines:g,artboard:u,fit:b,stateMachineInputs:f,autoPlay:o&&!P,loop:r,pauseOffscreen:i,controls:t,poster:s}):s&&w__namespace.createElement("img",{src:s,alt:"",className:"w-full h-full object-contain"}))});fl.displayName="RivePlayer";function qp({Mod:e,src:t,stateMachines:o,artboard:r,fit:i,autoPlay:a,loop:d,pauseOffscreen:m,controls:s,poster:c}){let{useRive:l,Layout:p,Fit:g,Alignment:u,EventType:b}=e,f={contain:g.Contain,cover:g.Cover,fill:g.Fill,fitWidth:g.FitWidth,fitHeight:g.FitHeight,none:g.None},{rive:h,RiveComponent:P}=l({src:t,stateMachines:o,artboard:r,autoplay:a,layout:new p({fit:f[i],alignment:u.Center})}),[S,R]=w__namespace.useState(a);w__namespace.useEffect(()=>{if(!h||!d)return;let k=()=>{h.play();};return h.on(b.Stop,k),()=>{h.off(b.Stop,k);}},[h,d,b]),w__namespace.useEffect(()=>{if(!m||!h)return;let k=h.canvas;if(!k)return;let B=new IntersectionObserver(([H])=>{H.isIntersecting&&a?h.play():h.pause();},{threshold:.05});return B.observe(k),()=>B.disconnect()},[h,m,a]);let C=()=>{h&&(S?(h.pause(),R(false)):(h.play(),R(true)));};return w__namespace.createElement(w__namespace.Fragment,null,w__namespace.createElement(P,{className:"w-full h-full"}),!h&&c&&w__namespace.createElement("img",{src:c,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),s&&w__namespace.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")},w__namespace.createElement(xe,{size:"icon",variant:"secondary",onClick:C},S?w__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):w__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))}var bl=({renderer:e,scene:t,camera:o,preset:r,width:i,height:a})=>{let d=new postprocessing.EffectComposer(e);d.setSize(i,a),d.addPass(new postprocessing.RenderPass(t,o));let m=new postprocessing.BloomEffect({intensity:0,luminanceThreshold:.6,radius:.6,kernelSize:postprocessing.KernelSize.MEDIUM}),s=new postprocessing.NoiseEffect({blendFunction:postprocessing.BlendFunction.OVERLAY});s.blendMode.opacity.value=0;let c=new postprocessing.ScanlineEffect({blendFunction:postprocessing.BlendFunction.OVERLAY,density:1.25});c.blendMode.opacity.value=0;let l=new postprocessing.VignetteEffect({darkness:0,offset:.5}),p=new postprocessing.ChromaticAberrationEffect({offset:new Z__namespace.Vector2(0,0),radialModulation:false,modulationOffset:.15}),g=new postprocessing.GlitchEffect({chromaticAberrationOffset:new Z__namespace.Vector2(0,0),columns:.05});g.minStrength=0,g.maxStrength=0,d.addPass(new postprocessing.EffectPass(o,m)),d.addPass(new postprocessing.EffectPass(o,s,c,l)),d.addPass(new postprocessing.EffectPass(o,p)),d.addPass(new postprocessing.EffectPass(o,g));function u(b){let f=b.effects;m.intensity=f.bloom?.intensity??0,m.luminanceMaterial&&f.bloom?.luminanceThreshold!==void 0&&(m.luminanceMaterial.threshold=f.bloom.luminanceThreshold),s.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 h=f.chromatic?.offset??0;p.offset?.set(h,h),f.glitch?(g.minStrength=f.glitch.strength?.[0]??0,g.maxStrength=f.glitch.strength?.[1]??0):(g.minStrength=0,g.maxStrength=0);}return u(r),{composer:d,setPreset:u,resize:(b,f)=>d.setSize(b,f),dispose:()=>{d.dispose();}}};var Xt=3e3,ya=400,am=80,vl=({width:e,height:t,palette:o})=>{let r=new Z__namespace.Scene;r.background=new Z__namespace.Color(o.background);let i=new Z__namespace.PerspectiveCamera(70,e/t,.1,ya*2);i.position.z=0;let a=new Float32Array(Xt*6),d=new Float32Array(Xt*6),m=new Float32Array(Xt),s=new Z__namespace.Color(o.primary),c=new Z__namespace.Color(o.accent);function l(h,P){let S=Math.random()*Math.PI*2,R=am*Math.pow(Math.random(),.6),C=Math.cos(S)*R,k=Math.sin(S)*R,B=P?-Math.random()*ya:-ya;m[h]=B,a[h*6+0]=C,a[h*6+1]=k,a[h*6+2]=B,a[h*6+3]=C,a[h*6+4]=k,a[h*6+5]=B-2,d[h*6+0]=s.r,d[h*6+1]=s.g,d[h*6+2]=s.b,d[h*6+3]=c.r,d[h*6+4]=c.g,d[h*6+5]=c.b;}for(let h=0;h<Xt;h++)l(h,true);let p=new Z__namespace.BufferGeometry;p.setAttribute("position",new Z__namespace.BufferAttribute(a,3)),p.setAttribute("color",new Z__namespace.BufferAttribute(d,3));let g=new Z__namespace.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:Z__namespace.AdditiveBlending}),u=new Z__namespace.LineSegments(p,g);r.add(u);let b=60,f=6;return {scene:r,camera:i,update:(h,P)=>{let S=p.attributes.position.array;for(let R=0;R<Xt;R++){let C=R*6;S[C+2]+=b*P,S[C+5]=S[C+2]-f,S[C+2]>5&&l(R,false);}p.attributes.position.needsUpdate=true;},resize:(h,P)=>{let S=i;S.aspect=h/P,S.updateProjectionMatrix();},setPalette:h=>{r.background=new Z__namespace.Color(h.background);let P=new Z__namespace.Color(h.primary),S=new Z__namespace.Color(h.accent),R=p.attributes.color.array;for(let C=0;C<Xt;C++)R[C*6+0]=P.r,R[C*6+1]=P.g,R[C*6+2]=P.b,R[C*6+3]=S.r,R[C*6+4]=S.g,R[C*6+5]=S.b;p.attributes.color.needsUpdate=true;},dispose:()=>{p.dispose(),g.dispose();}}};var nm=`
|
|
231
293
|
precision highp float;
|
|
232
294
|
varying vec2 vUv;
|
|
233
295
|
uniform float uTime;
|
|
@@ -265,19 +327,19 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
265
327
|
|
|
266
328
|
gl_FragColor = vec4(col, 1.0);
|
|
267
329
|
}
|
|
268
|
-
`,
|
|
330
|
+
`,im=`
|
|
269
331
|
varying vec2 vUv;
|
|
270
332
|
void main() {
|
|
271
333
|
vUv = uv;
|
|
272
334
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
273
335
|
}
|
|
274
|
-
`,
|
|
336
|
+
`,yl=({width:e,height:t,palette:o})=>{let r=new Z__namespace.Scene,i=new Z__namespace.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new Z__namespace.Vector2(e,t)},uBackground:{value:new Z__namespace.Color(o.background)},uPrimary:{value:new Z__namespace.Color(o.primary)},uSecondary:{value:new Z__namespace.Color(o.secondary)},uAccent:{value:new Z__namespace.Color(o.accent)}},d=new Z__namespace.ShaderMaterial({uniforms:a,vertexShader:im,fragmentShader:nm,depthTest:false,depthWrite:false}),m=new Z__namespace.PlaneGeometry(2,2),s=new Z__namespace.Mesh(m,d);return r.add(s),{scene:r,camera:i,update:l=>{a.uTime.value=l;},resize:(l,p)=>{a.uResolution.value.set(l,p);},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:()=>{m.dispose(),d.dispose();}}};var sm=`
|
|
275
337
|
varying vec2 vUv;
|
|
276
338
|
void main() {
|
|
277
339
|
vUv = uv;
|
|
278
340
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
279
341
|
}
|
|
280
|
-
`,
|
|
342
|
+
`,lm=`
|
|
281
343
|
precision highp float;
|
|
282
344
|
varying vec2 vUv;
|
|
283
345
|
uniform float uTime;
|
|
@@ -334,13 +396,13 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
334
396
|
|
|
335
397
|
gl_FragColor = vec4(col, 1.0);
|
|
336
398
|
}
|
|
337
|
-
`,
|
|
399
|
+
`,wl=({width:e,height:t,palette:o})=>{let r=new Z__namespace.Scene,i=new Z__namespace.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new Z__namespace.Vector2(e,t)},uBackground:{value:new Z__namespace.Color(o.background)},uPrimary:{value:new Z__namespace.Color(o.primary)},uSecondary:{value:new Z__namespace.Color(o.secondary)},uAccent:{value:new Z__namespace.Color(o.accent)}},d=new Z__namespace.ShaderMaterial({uniforms:a,vertexShader:sm,fragmentShader:lm,depthTest:false,depthWrite:false}),m=new Z__namespace.PlaneGeometry(2,2),s=new Z__namespace.Mesh(m,d);return r.add(s),{scene:r,camera:i,update:l=>{a.uTime.value=l;},resize:(l,p)=>{a.uResolution.value.set(l,p);},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:()=>{m.dispose(),d.dispose();}}};var dm=`
|
|
338
400
|
varying vec2 vUv;
|
|
339
401
|
void main() {
|
|
340
402
|
vUv = uv;
|
|
341
403
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
342
404
|
}
|
|
343
|
-
`,
|
|
405
|
+
`,cm=`
|
|
344
406
|
precision highp float;
|
|
345
407
|
varying vec2 vUv;
|
|
346
408
|
uniform float uTime;
|
|
@@ -410,7 +472,7 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
410
472
|
|
|
411
473
|
gl_FragColor = vec4(col, 1.0);
|
|
412
474
|
}
|
|
413
|
-
`,
|
|
475
|
+
`,xl=({palette:e})=>{let t=new Z__namespace.Scene,o=new Z__namespace.OrthographicCamera(-1,1,1,-1,0,1),r={uTime:{value:0},uBackground:{value:new Z__namespace.Color(e.background)},uPrimary:{value:new Z__namespace.Color(e.primary)},uSecondary:{value:new Z__namespace.Color(e.secondary)},uAccent:{value:new Z__namespace.Color(e.accent)}},i=new Z__namespace.ShaderMaterial({uniforms:r,vertexShader:dm,fragmentShader:cm,depthTest:false,depthWrite:false}),a=new Z__namespace.PlaneGeometry(2,2),d=new Z__namespace.Mesh(a,i);return t.add(d),{scene:t,camera:o,update:s=>{r.uTime.value=s;},setPalette:s=>{r.uBackground.value.set(s.background),r.uPrimary.value.set(s.primary),r.uSecondary.value.set(s.secondary),r.uAccent.value.set(s.accent);},dispose:()=>{a.dispose(),i.dispose();}}};var Po={space:vl,plasma:yl,voronoi:wl,synthwave:xl},Mo=[{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"}],No=Object.fromEntries(Mo.map(e=>[e.id,e]));var Eo={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}}}},gr="vhs";var Rl=`
|
|
414
476
|
precision highp float;
|
|
415
477
|
varying vec2 vUv;
|
|
416
478
|
uniform float uTime;
|
|
@@ -420,13 +482,13 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
|
|
|
420
482
|
uniform vec3 uSecondary;
|
|
421
483
|
uniform vec3 uAccent;
|
|
422
484
|
uniform vec3 uBackground;
|
|
423
|
-
`,
|
|
485
|
+
`,pm=`
|
|
424
486
|
varying vec2 vUv;
|
|
425
487
|
void main() {
|
|
426
488
|
vUv = uv;
|
|
427
489
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
428
490
|
}
|
|
429
|
-
`,
|
|
430
|
-
${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=
|
|
431
|
-
${e}`;al(t,a);let d=new G__namespace.Scene,p=new G__namespace.OrthographicCamera(-1,1,1,-1,0,1),i={uTime:{value:0},uResolution:{value:new G__namespace.Vector2(r,o)},uMouse:{value:new G__namespace.Vector2(.5,.5)},uPrimary:{value:new G__namespace.Color(s.primary)},uSecondary:{value:new G__namespace.Color(s.secondary)},uAccent:{value:new G__namespace.Color(s.accent)},uBackground:{value:new G__namespace.Color(s.background)}},c=new G__namespace.ShaderMaterial({uniforms:i,vertexShader:ol,fragmentShader:a,depthTest:false,depthWrite:false}),l=new G__namespace.PlaneGeometry(2,2),m=new G__namespace.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__namespace.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__namespace.useRef(null),[k,S]=v__namespace.useState(p),[_,j]=v__namespace.useState(false),O=Ue(),se=v__namespace.useMemo(()=>({...kt,...s}),[s]),Se=v__namespace.useMemo(()=>a||(t?Gr(t):e&&wt[e]?wt[e]:null),[a,t,e]),Nt=v__namespace.useMemo(()=>{if(o)return o;if(e){let H=Ct[e];if(H?.defaultPostPreset)return H.defaultPostPreset}return tr},[o,e]);v__namespace.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__namespace.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__namespace.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__namespace.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__namespace.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__namespace.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__namespace.useRef(null),Et=()=>We.current?.toggle();return v__namespace.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__namespace.createElement("img",{src:u,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),d&&v__namespace.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__namespace.createElement(re,{size:"icon",variant:"secondary",onClick:Et},k?v__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):v__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))});or.displayName="ThreeScene";var ar=v__namespace.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__namespace.useState(false),y=t==="always"||t==="hover"&&u;return v__namespace.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__namespace.createElement(or,{preset:e,postPreset:r,palette:o,aspect:a,radius:d,autoPlay:true,controls:false,pauseOffscreen:true,poster:m?.poster,maxDpr:1}):v__namespace.createElement(we,{aspect:a,radius:d,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},m?.poster?v__namespace.createElement("img",{src:m.poster,alt:m.label,className:"w-full h-full object-cover"}):v__namespace.createElement("div",{className:"absolute inset-0 flex items-center justify-center text-xs text-muted-foreground"},m?.label??e)),!i&&v__namespace.createElement("div",{className:"flex items-baseline justify-between text-xs"},v__namespace.createElement("span",{className:"font-medium text-foreground","data-gds-part":"preset-label"},p??m?.label??e),m?.tags?.[0]&&v__namespace.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__namespace.useMemo(()=>r?.length?St.filter(l=>r.some(m=>l.tags.includes(m))):St,[r]);return v__namespace.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__namespace.createElement("div",{key:l.id,className:"relative",role:"radio","aria-checked":m},v__namespace.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__namespace.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__namespace.createElement(lucideReact.Check,{className:"h-3.5 w-3.5"})))}))}function gl({children:e}){let t=v.useRef(null);return v.useEffect(()=>{let r=new fl__default.default({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__namespace.createElement(Je,null,v__namespace.createElement(Qe,{asChild:true},v__namespace.createElement(re,{variant:"ghost",size:"sm",className:n("gap-2",e),"aria-label":"Switch theme"},v__namespace.createElement(lucideReact.Palette,{className:"h-4 w-4"}),v__namespace.createElement("span",{className:"hidden sm:inline"},r.name))),v__namespace.createElement(Ve,{className:"w-80 p-2",align:"end"},v__namespace.createElement("div",{className:"flex items-start justify-between gap-2 px-2 py-1.5 mb-1"},v__namespace.createElement("div",null,v__namespace.createElement("div",{className:"text-xs font-medium text-muted-foreground"},"Theme"),v__namespace.createElement("div",{className:"text-xs text-muted-foreground/80"},"Switch the skin applied site-wide.")),v__namespace.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__namespace.createElement(lucideReact.Download,{className:"h-3 w-3"}),".md")),v__namespace.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__namespace.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__namespace.createElement("button",{type:"button",onClick:()=>s(d.id),className:"flex items-start gap-3 flex-1 min-w-0 text-left"},v__namespace.createElement("div",{className:"mt-0.5 flex shrink-0 overflow-hidden rounded-md border border-border"},v__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${c})`},"aria-hidden":true}),v__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${l})`},"aria-hidden":true}),v__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${m})`},"aria-hidden":true})),v__namespace.createElement("div",{className:"min-w-0 flex-1"},v__namespace.createElement("div",{className:"flex items-center gap-2"},v__namespace.createElement("span",{className:"text-sm font-medium truncate text-foreground"},d.name),d.tagline&&v__namespace.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},d.tagline)),d.description&&v__namespace.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},d.description))),p&&v__namespace.createElement(lucideReact.Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!i&&!p&&v__namespace.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__namespace.createElement(lucideReact.Trash2,{className:"h-3.5 w-3.5"})))}))))}var An=[{mode:"superLight",label:"Super light",icon:lucideReact.SunDim,tooltip:"Super light \u2014 airy, low contrast"},{mode:"light",label:"Light",icon:lucideReact.Sun,tooltip:"Light"},{mode:"dark",label:"Dark",icon:lucideReact.Moon,tooltip:"Dark"},{mode:"superDark",label:"Super dark",icon:lucideReact.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__namespace.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__namespace.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__namespace.createElement(p,{className:"h-4 w-4"}),v__namespace.createElement("span",null,d))})):v__namespace.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__namespace.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__namespace.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(lucideReact.Sun,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Light")):React.createElement(React.Fragment,null,React.createElement(lucideReact.Moon,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Dark")))}exports.ALL_MODES=ln;exports.Accordion=Vn;exports.AccordionContent=Wr;exports.AccordionItem=Kr;exports.AccordionTrigger=Ur;exports.Alert=jr;exports.AlertDescription=qr;exports.AlertTitle=Zr;exports.AppShell=ro;exports.AppShellAside=no;exports.AppShellFooter=io;exports.AppShellHeader=oo;exports.AppShellMain=so;exports.AppShellNav=ao;exports.Avatar=lo;exports.AvatarFallback=po;exports.AvatarImage=co;exports.BUILT_IN_INPUTS=jt;exports.Badge=Kn;exports.Breadcrumb=Ta;exports.BreadcrumbEllipsis=ka;exports.BreadcrumbItem=wa;exports.BreadcrumbLink=Sa;exports.BreadcrumbList=Pa;exports.BreadcrumbPage=Ca;exports.BreadcrumbSeparator=Ma;exports.Button=re;exports.Calendar=At;exports.CalendarDayButton=go;exports.Card=ho;exports.CardContent=xo;exports.CardDescription=bo;exports.CardFooter=Ro;exports.CardHeader=yo;exports.CardTitle=vo;exports.Checkbox=To;exports.DatePicker=ts;exports.DateRangePicker=rs;exports.Dialog=as;exports.DialogClose=ss;exports.DialogContent=So;exports.DialogDescription=No;exports.DialogFooter=Mo;exports.DialogHeader=Co;exports.DialogOverlay=ir;exports.DialogPortal=wo;exports.DialogTitle=ko;exports.DialogTrigger=ns;exports.DropdownMenu=cs;exports.DropdownMenuCheckboxItem=Ao;exports.DropdownMenuContent=Lo;exports.DropdownMenuGroup=ms;exports.DropdownMenuItem=Do;exports.DropdownMenuLabel=Fo;exports.DropdownMenuPortal=us;exports.DropdownMenuRadioGroup=gs;exports.DropdownMenuRadioItem=Io;exports.DropdownMenuSeparator=Go;exports.DropdownMenuShortcut=Oo;exports.DropdownMenuSub=fs;exports.DropdownMenuSubContent=Ho;exports.DropdownMenuSubTrigger=Eo;exports.DropdownMenuTrigger=ps;exports.FRAGMENT_HEADER=Ln;exports.Flex=qo;exports.GRADE_PRE_HYDRATION_SCRIPT=xi;exports.GradeModeSwitcher=Sl;exports.GradeThemeProvider=Ri;exports.GradeThemeSwitcher=xl;exports.Grid=jo;exports.Input=Bo;exports.Label=Vo;exports.LenisProvider=gl;exports.Map=Dr;exports.MapMarker=Ar;exports.MediaSurface=we;exports.Popover=Je;exports.PopoverAnchor=Jn;exports.PopoverContent=Ve;exports.PopoverTrigger=Qe;exports.Progress=zo;exports.RadioGroup=_o;exports.RadioGroupItem=$o;exports.ResizableHandle=Ts;exports.ResizablePanel=Rs;exports.ResizablePanelGroup=xs;exports.RivePlayer=Sn;exports.Row=Uo;exports.ScrollArea=Yo;exports.ScrollBar=dr;exports.Select=Hs;exports.SelectContent=Qo;exports.SelectGroup=Ls;exports.SelectItem=ta;exports.SelectLabel=ea;exports.SelectScrollDownButton=pr;exports.SelectScrollUpButton=cr;exports.SelectSeparator=ra;exports.SelectTrigger=Jo;exports.SelectValue=Ds;exports.Separator=oa;exports.ShaderCompileError=st;exports.ShaderPresetPicker=pl;exports.ShaderPresetPreview=ar;exports.Sheet=Fs;exports.SheetClose=Os;exports.SheetContent=na;exports.SheetDescription=da;exports.SheetFooter=ia;exports.SheetHeader=sa;exports.SheetOverlay=ur;exports.SheetPortal=aa;exports.SheetTitle=la;exports.SheetTrigger=Gs;exports.SideMenu=Ka;exports.SimpleTabs=Ua;exports.SimpleTabsContent=Ya;exports.SimpleTabsList=Za;exports.SimpleTabsPanel=Wa;exports.SimpleTabsRoot=ja;exports.SimpleTabsTrigger=qa;exports.Skeleton=Vs;exports.Slider=ca;exports.Stack=ma;exports.Switch=ua;exports.Table=fa;exports.TableBody=ha;exports.TableCaption=Ra;exports.TableCell=xa;exports.TableFooter=ya;exports.TableHead=ba;exports.TableHeader=ga;exports.TableRow=va;exports.Tabs=Us;exports.TabsContent=Da;exports.TabsList=Ha;exports.TabsTrigger=La;exports.Textarea=Aa;exports.ThemeToggle=kl;exports.ThreeScene=or;exports.Toggle=Fa;exports.ToggleGroup=Ba;exports.ToggleGroupItem=Va;exports.Tooltip=vt;exports.TooltipContent=tt;exports.TooltipProvider=gr;exports.TooltipTrigger=bt;exports.VideoPlayer=wn;exports.appShellAsideVariants=Qr;exports.appShellFooterVariants=to;exports.appShellHeaderVariants=Xr;exports.appShellMainVariants=eo;exports.appShellNavVariants=Jr;exports.applyThemeToRoot=Zt;exports.badgeVariants=uo;exports.buildFragmentShaderScene=Gr;exports.builtInThemes=Pe;exports.buttonVariants=dt;exports.calmInput=Tt;exports.cn=n;exports.defaultPostPreset=tr;exports.defaultThemeId=at;exports.deleteUserTheme=kr;exports.duplicateTheme=bi;exports.energyInput=Rr;exports.flexVariants=Zo;exports.generateTheme=_e;exports.getTheme=$e;exports.gridVariants=Wo;exports.listThemes=Cr;exports.listUserThemes=nn;exports.loadUserThemeInput=Mr;exports.postPresets=Mt;exports.rowVariants=Ko;exports.saveUserTheme=Yt;exports.sceneRegistry=wt;exports.shaderPresetById=Ct;exports.shaderPresets=St;exports.shellVariants=Yr;exports.stackVariants=pa;exports.themeToCSSVars=Pr;exports.toggleVariants=Ia;exports.useGradeTheme=Hr;exports.useMaybeGradeTheme=Ke;exports.usePrefersReducedMotion=Ue;//# sourceMappingURL=index.js.map
|
|
491
|
+
`,Jt=class extends Error{log;source;constructor(t,o){super(`Fragment shader failed to compile:
|
|
492
|
+
${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=o;}};function mm(e,t){let o=e.getContext(),r=o.createShader(o.FRAGMENT_SHADER);if(!r)throw new Error("Unable to allocate fragment shader");o.shaderSource(r,t),o.compileShader(r);let i=o.getShaderParameter(r,o.COMPILE_STATUS),a=o.getShaderInfoLog(r)||"";if(o.deleteShader(r),!i)throw new Jt(a,t)}function wa(e){return ({renderer:t,width:o,height:r,palette:i})=>{let a=`${Rl}
|
|
493
|
+
${e}`;mm(t,a);let d=new Z__namespace.Scene,m=new Z__namespace.OrthographicCamera(-1,1,1,-1,0,1),s={uTime:{value:0},uResolution:{value:new Z__namespace.Vector2(o,r)},uMouse:{value:new Z__namespace.Vector2(.5,.5)},uPrimary:{value:new Z__namespace.Color(i.primary)},uSecondary:{value:new Z__namespace.Color(i.secondary)},uAccent:{value:new Z__namespace.Color(i.accent)},uBackground:{value:new Z__namespace.Color(i.background)}},c=new Z__namespace.ShaderMaterial({uniforms:s,vertexShader:pm,fragmentShader:a,depthTest:false,depthWrite:false}),l=new Z__namespace.PlaneGeometry(2,2),p=new Z__namespace.Mesh(l,c);return d.add(p),{scene:d,camera:m,update:u=>{s.uTime.value=u;},resize:(u,b)=>{s.uResolution.value.set(u,b);},setPalette:u=>{s.uPrimary.value.set(u.primary),s.uSecondary.value.set(u.secondary),s.uAccent.value.set(u.accent),s.uBackground.value.set(u.background);},setMouse:(u,b)=>{s.uMouse.value.set(u,b);},dispose:()=>{l.dispose(),c.dispose();}}}}var Lo={primary:"#ff5fb9",secondary:"#9fe8ff",accent:"#ffc857",background:"#0a0a14"},fm=/^[\d.]+\s+[\d.]+\s+[\d.]+(?:\s*\/\s*[\d.%]+)?$/,hm=/^[\d.]+\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.%]+)?$/,bm=/^\s*var\(\s*(--[^,)\s]+)(?:\s*,[^)]*)?\s*\)\s*$/;function fr(e,t,o){if(typeof document>"u")return o;let r=e,i=bm.exec(e);if(i){let m=getComputedStyle(t).getPropertyValue(i[1]).trim();m&&(fm.test(m)?r=`oklch(${m})`:hm.test(m)&&(r=`hsl(${m})`));}let a=document.createElement("span");if(a.style.color="",a.style.color=r,a.style.color==="")return o;a.style.display="none",t.appendChild(a);let d=getComputedStyle(a).color;if(t.removeChild(a),!d)return o;if(d.startsWith("rgb"))return d;try{let m=document.createElement("canvas");m.width=1,m.height=1;let s=m.getContext("2d");if(!s)return d;s.clearRect(0,0,1,1),s.fillStyle=d,s.fillRect(0,0,1,1);let[c,l,p]=s.getImageData(0,0,1,1).data;return `rgb(${c}, ${l}, ${p})`}catch{return d}}function Sl(e,t){return {primary:fr(e.primary,t,Lo.primary),secondary:fr(e.secondary,t,Lo.secondary),accent:fr(e.accent,t,Lo.accent),background:fr(e.background,t,Lo.background)}}var hr=w__namespace.forwardRef(({preset:e,fragmentShader:t,onShaderError:o,postPreset:r,palette:i,createScene:a,controls:d=false,autoPlay:m=true,pauseOffscreen:s=true,aspect:c="video",radius:l="lg",border:p=false,poster:g,label:u,className:b,style:f,maxDpr:h},P)=>{let S=w__namespace.useRef(null),[R,C]=w__namespace.useState(m),[k,B]=w__namespace.useState(false),H=Ft(),I=w__namespace.useMemo(()=>({...Lo,...i}),[i]),V=w__namespace.useMemo(()=>a||(t?wa(t):e&&Po[e]?Po[e]:null),[a,t,e]),Pe=w__namespace.useMemo(()=>{if(r)return r;if(e){let G=No[e];if(G?.defaultPostPreset)return G.defaultPostPreset}return gr},[r,e]);w__namespace.useEffect(()=>{let G=S.current;if(!G||!V)return;let ge=G.clientWidth||1,Ae=G.clientHeight||1,we=Sl(I,G),v=new Z__namespace.WebGLRenderer({antialias:true,alpha:false,powerPreference:"high-performance"}),O=h??Math.min(window.devicePixelRatio||1,2);v.setPixelRatio(O),v.setSize(ge,Ae),v.setClearColor(new Z__namespace.Color(we.background),1),v.domElement.dataset.gdsPart="shader-canvas",v.domElement.style.width="100%",v.domElement.style.height="100%",v.domElement.style.display="block",G.appendChild(v.domElement);let D;try{D=V({renderer:v,width:ge,height:Ae,palette:we});}catch(Y){if(Y instanceof Jt)o?.(Y),D=Po.space({renderer:v,width:ge,height:Ae,palette:we});else throw v.dispose(),v.domElement.parentElement===G&&G.removeChild(v.domElement),Y}let te=Eo[Pe]??Eo[gr],Me=bl({renderer:v,scene:D.scene,camera:D.camera,preset:te,width:ge,height:Ae}),fe=new Z__namespace.Clock,ne=0,he=m&&!H,lt=true,zt=()=>{if(ne=requestAnimationFrame(zt),!he||s&&!lt)return;let Y=fe.getDelta(),Ne=fe.getElapsedTime();D.update?.(Ne,Y),Me.composer.render(Y);};zt(),he&&B(true);let Ho=new ResizeObserver(([Y])=>{let Ne=Math.max(1,Math.floor(Y.contentRect.width)),Qt=Math.max(1,Math.floor(Y.contentRect.height));v.setSize(Ne,Qt),Me.resize(Ne,Qt),D.resize?.(Ne,Qt);});Ho.observe(G);let xa=new IntersectionObserver(([Y])=>{lt=Y.isIntersecting;},{threshold:.05});xa.observe(G);let Ra=new MutationObserver(()=>{if(!S.current)return;let Y=Sl(I,S.current);v.setClearColor(new Z__namespace.Color(Y.background),1),D.setPalette?.(Y);});Ra.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-theme","data-gds-theme","data-grade-mode"]});let Sa=D,Do=Sa.setMouse?Y=>{let Ne=G.getBoundingClientRect(),Qt=(Y.clientX-Ne.left)/Ne.width,kl=1-(Y.clientY-Ne.top)/Ne.height;Sa.setMouse(Qt,kl);}:null;return Do&&G.addEventListener("pointermove",Do),ee.current={toggle:()=>{he=!he,C(he);},setPalette:Y=>{v.setClearColor(new Z__namespace.Color(Y.background),1),D.setPalette?.(Y);},setPostPreset:Y=>{let Ne=Eo[Y];Ne&&Me.setPreset(Ne);}},()=>{cancelAnimationFrame(ne),Ho.disconnect(),xa.disconnect(),Ra.disconnect(),Do&&G.removeEventListener("pointermove",Do),Me.dispose(),D.dispose?.(),v.dispose(),v.domElement.parentElement===G&&G.removeChild(v.domElement),ee.current=null;}},[V,Pe,I,m,H,s,h,o]);let ee=w__namespace.useRef(null),ye=()=>ee.current?.toggle();return w__namespace.createElement(ot,{ref:G=>{S.current=G,typeof P=="function"?P(G):P&&(P.current=G);},aspect:c,radius:l,border:p,"aria-label":u,className:b,style:f,"data-gds-part":"three-scene"},!k&&g&&w__namespace.createElement("img",{src:g,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),d&&w__namespace.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")},w__namespace.createElement(xe,{size:"icon",variant:"secondary",onClick:ye},R?w__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):w__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))});hr.displayName="ThreeScene";var br=w__namespace.forwardRef(({preset:e,live:t="hover",postPreset:o,palette:r,className:i,aspect:a="video",radius:d="lg",label:m,hideLabel:s=false,onClick:c},l)=>{let p=No[e],[g,u]=w__namespace.useState(false),b=t==="always"||t==="hover"&&g;return w__namespace.createElement("div",{ref:l,"data-gds-part":"picker-card","data-gds-preset":e,onMouseEnter:()=>u(true),onMouseLeave:()=>u(false),onClick:c,className:n("group cursor-pointer flex flex-col gap-2",i)},b?w__namespace.createElement(hr,{preset:e,postPreset:o,palette:r,aspect:a,radius:d,autoPlay:true,controls:false,pauseOffscreen:true,poster:p?.poster,maxDpr:1}):w__namespace.createElement(ot,{aspect:a,radius:d,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},p?.poster?w__namespace.createElement("img",{src:p.poster,alt:p.label,className:"w-full h-full object-cover"}):w__namespace.createElement("div",{className:"absolute inset-0 flex items-center justify-center text-xs text-muted-foreground"},p?.label??e)),!s&&w__namespace.createElement("div",{className:"flex items-baseline justify-between text-xs"},w__namespace.createElement("span",{className:"font-medium text-foreground","data-gds-part":"preset-label"},m??p?.label??e),p?.tags?.[0]&&w__namespace.createElement("span",{className:"text-muted-foreground"},p.tags[0])))});br.displayName="ShaderPresetPreview";function ym({value:e,onChange:t,filterTags:o,live:r="hover",postPreset:i,palette:a,columns:d=3,className:m}){let s=w__namespace.useMemo(()=>o?.length?Mo.filter(l=>o.some(p=>l.tags.includes(p))):Mo,[o]);return w__namespace.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",m)},s.map(l=>{let p=e===l.id;return w__namespace.createElement("div",{key:l.id,className:"relative",role:"radio","aria-checked":p},w__namespace.createElement(br,{preset:l.id,postPreset:i,palette:a,live:r,onClick:()=>t?.(l.id),className:n("transition-all",p&&"ring-2 ring-primary ring-offset-2 ring-offset-background rounded-lg")}),p&&w__namespace.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"},w__namespace.createElement(lucideReact.Check,{className:"h-3.5 w-3.5"})))}))}function Sm({children:e}){let t=w.useRef(null);return w.useEffect(()=>{let o=new Rm__default.default({duration:1.2,easing:i=>Math.min(1,1.001-Math.pow(2,-10*i)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:true});t.current=o;function r(i){o.raf(i),requestAnimationFrame(r);}return requestAnimationFrame(r),()=>{o.destroy(),t.current=null;}},[]),React.createElement(React.Fragment,null,e)}function Mm({className:e}){let t=It();if(!t)return null;let{theme:o,themes:r,setThemeId:i,deleteTheme:a}=t;return w__namespace.createElement(Je,null,w__namespace.createElement(Qe,{asChild:true},w__namespace.createElement(xe,{variant:"ghost",size:"sm",className:n("gap-2",e),"aria-label":"Switch theme"},w__namespace.createElement(lucideReact.Palette,{className:"h-4 w-4"}),w__namespace.createElement("span",{className:"hidden sm:inline"},o.name))),w__namespace.createElement(je,{className:"w-80 p-2",align:"end"},w__namespace.createElement("div",{className:"flex items-start justify-between gap-2 px-2 py-1.5 mb-1"},w__namespace.createElement("div",null,w__namespace.createElement("div",{className:"text-xs font-medium text-muted-foreground"},"Theme"),w__namespace.createElement("div",{className:"text-xs text-muted-foreground/80"},"Switch the skin applied site-wide.")),w__namespace.createElement("button",{type:"button",onClick:()=>la(o),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"},w__namespace.createElement(lucideReact.Download,{className:"h-3 w-3"}),".md")),w__namespace.createElement("div",{className:"flex flex-col gap-0.5"},r.map(d=>{let m=d.id===o.id,s=d.id in tt,c=d.ramps.primary[500],l=d.ramps.accent[500],p=d.ramps.neutral[500];return w__namespace.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",m&&"bg-muted")},w__namespace.createElement("button",{type:"button",onClick:()=>i(d.id),className:"flex items-start gap-3 flex-1 min-w-0 text-left"},w__namespace.createElement("div",{className:"mt-0.5 flex shrink-0 overflow-hidden rounded-md border border-border"},w__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${c})`},"aria-hidden":true}),w__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${l})`},"aria-hidden":true}),w__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${p})`},"aria-hidden":true})),w__namespace.createElement("div",{className:"min-w-0 flex-1"},w__namespace.createElement("div",{className:"flex items-center gap-2"},w__namespace.createElement("span",{className:"text-sm font-medium truncate text-foreground"},d.name),d.tagline&&w__namespace.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},d.tagline)),d.description&&w__namespace.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},d.description))),m&&w__namespace.createElement(lucideReact.Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!s&&!m&&w__namespace.createElement("button",{type:"button",onClick:g=>{g.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}`},w__namespace.createElement(lucideReact.Trash2,{className:"h-3.5 w-3.5"})))}))))}var Cl=[{mode:"superLight",label:"Super light",icon:lucideReact.SunDim,tooltip:"Super light \u2014 airy, low contrast"},{mode:"light",label:"Light",icon:lucideReact.Sun,tooltip:"Light"},{mode:"dark",label:"Dark",icon:lucideReact.Moon,tooltip:"Dark"},{mode:"superDark",label:"Super dark",icon:lucideReact.MoonStar,tooltip:"Super dark \u2014 OLED, high contrast"}];function Dm({className:e,variant:t="icons"}){let o=It();if(!o)return null;let{mode:r,setMode:i}=o;return t==="labeled"?w__namespace.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)},Cl.map(({mode:a,label:d,icon:m})=>{let s=r===a;return w__namespace.createElement("button",{key:a,type:"button",role:"radio","aria-checked":s,onClick:()=>i(a),className:n("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")},w__namespace.createElement(m,{className:"h-4 w-4"}),w__namespace.createElement("span",null,d))})):w__namespace.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)},Cl.map(({mode:a,icon:d,tooltip:m})=>{let s=r===a;return w__namespace.createElement("button",{key:a,type:"button",role:"radio","aria-checked":s,"aria-label":m,title:m,onClick:()=>i(a),className:n("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")},w__namespace.createElement(d,{className:"h-3.5 w-3.5"}))}))}function Fm(){let{isDark:e,setMode:t}=ga();return React.createElement(xe,{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(lucideReact.Sun,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Light")):React.createElement(React.Fragment,null,React.createElement(lucideReact.Moon,{className:"h-4 w-4"}),React.createElement("span",{className:"hidden sm:inline"},"Dark")))}exports.ALL_MODES=Xs;exports.Accordion=od;exports.AccordionContent=En;exports.AccordionItem=Mn;exports.AccordionTrigger=Nn;exports.AppShell=Vn;exports.AppShellAside=$n;exports.AppShellFooter=jn;exports.AppShellHeader=_n;exports.AppShellMain=Un;exports.AppShellNav=Wn;exports.Avatar=Kn;exports.AvatarFallback=Yn;exports.AvatarImage=qn;exports.BUILT_IN_INPUTS=ir;exports.Badge=Vo;exports.Breadcrumb=hs;exports.BreadcrumbEllipsis=Rs;exports.BreadcrumbItem=vs;exports.BreadcrumbLink=ys;exports.BreadcrumbList=bs;exports.BreadcrumbMenuTrigger=Ss;exports.BreadcrumbPage=ws;exports.BreadcrumbSeparator=xs;exports.Button=xe;exports.COMPONENT_CONTRACTS=kr;exports.Calendar=Wo;exports.CalendarDayButton=Qn;exports.Callout=Hn;exports.CalloutDescription=An;exports.CalloutTitle=Dn;exports.Card=ei;exports.CardContent=ai;exports.CardDescription=ri;exports.CardFooter=ni;exports.CardHeader=ti;exports.CardTitle=oi;exports.Carousel=hd;exports.CarouselArrows=Nr;exports.CarouselDots=Mr;exports.CarouselNext=co;exports.CarouselPrev=lo;exports.CarouselSlide=$o;exports.CarouselVideoSlide=Pr;exports.Checkbox=ii;exports.DatePicker=Rd;exports.DateRangePicker=Sd;exports.Dialog=kd;exports.DialogClose=Pd;exports.DialogContent=di;exports.DialogDescription=ui;exports.DialogFooter=pi;exports.DialogHeader=ci;exports.DialogOverlay=Er;exports.DialogPortal=li;exports.DialogTitle=mi;exports.DialogTrigger=Td;exports.DropdownMenu=Ld;exports.DropdownMenuCheckboxItem=vi;exports.DropdownMenuContent=hi;exports.DropdownMenuGroup=Dd;exports.DropdownMenuItem=bi;exports.DropdownMenuLabel=wi;exports.DropdownMenuPortal=Ad;exports.DropdownMenuRadioGroup=Fd;exports.DropdownMenuRadioItem=yi;exports.DropdownMenuSeparator=xi;exports.DropdownMenuShortcut=Ri;exports.DropdownMenuSub=Id;exports.DropdownMenuSubContent=fi;exports.DropdownMenuSubTrigger=gi;exports.DropdownMenuTrigger=Hd;exports.FRAGMENT_HEADER=Rl;exports.Flex=Ai;exports.GRADE_PRE_HYDRATION_SCRIPT=pp;exports.GradeModeSwitcher=Dm;exports.GradeThemeProvider=mp;exports.GradeThemeSwitcher=Mm;exports.Grid=Hi;exports.Input=Si;exports.Label=Ci;exports.LenisProvider=Sm;exports.Map=ha;exports.MapMarker=ba;exports.MediaSurface=ot;exports.MediaSurfaceContract=xr;exports.MultiSelect=Ti;exports.Popover=Je;exports.PopoverAnchor=yd;exports.PopoverContent=je;exports.PopoverTrigger=Qe;exports.Progress=ki;exports.RadioGroup=Pi;exports.RadioGroupItem=Mi;exports.ResizableHandle=Jd;exports.ResizablePanel=Xd;exports.ResizablePanelGroup=Zd;exports.RivePlayer=fl;exports.Row=Ei;exports.ScrollArea=Ii;exports.ScrollBar=Br;exports.Select=lc;exports.SelectContent=Bi;exports.SelectGroup=dc;exports.SelectItem=Oi;exports.SelectLabel=Gi;exports.SelectScrollDownButton=Or;exports.SelectScrollUpButton=Gr;exports.SelectSeparator=Vi;exports.SelectTrigger=zi;exports.SelectValue=cc;exports.Separator=ho;exports.ShaderCompileError=Jt;exports.ShaderPresetPicker=ym;exports.ShaderPresetPreview=br;exports.Sheet=gc;exports.SheetClose=hc;exports.SheetContent=Wi;exports.SheetDescription=Ki;exports.SheetFooter=Ui;exports.SheetHeader=$i;exports.SheetOverlay=Vr;exports.SheetPortal=_i;exports.SheetTitle=ji;exports.SheetTrigger=fc;exports.Sidebar=vt;exports.SidebarContent=Jr;exports.SidebarFooter=Qr;exports.SidebarHeader=Xr;exports.SidebarItem=ta;exports.SidebarSection=ea;exports.SidebarTreeItem=oa;exports.Skeleton=vc;exports.Slider=qi;exports.Sortable=Ec;exports.SortableGroup=Wr;exports.SortableHandle=Ur;exports.SortableItem=$r;exports.Stack=ns;exports.Switch=is;exports.Table=ss;exports.TableBody=ds;exports.TableCaption=gs;exports.TableCell=us;exports.TableFooter=cs;exports.TableHead=ms;exports.TableHeader=ls;exports.TableRow=ps;exports.Tabs=Fc;exports.TabsContent=Ms;exports.TabsList=Ts;exports.TabsTrigger=Ps;exports.Textarea=Ns;exports.ThemeToggle=Fm;exports.ThreeScene=hr;exports.Toggle=Ls;exports.ToggleGroup=As;exports.ToggleGroupItem=Is;exports.Toolbar=Fs;exports.ToolbarSlot=zs;exports.Tooltip=Lt;exports.TooltipContent=bt;exports.TooltipProvider=Kr;exports.TooltipTrigger=Ht;exports.VideoPlayer=gl;exports.appShellAsideVariants=Bn;exports.appShellFooterVariants=On;exports.appShellHeaderVariants=Fn;exports.appShellMainVariants=Gn;exports.appShellNavVariants=zn;exports.applyThemeToRoot=sr;exports.badgeVariants=Xn;exports.buildFragmentShaderScene=wa;exports.builtInThemes=tt;exports.buttonVariants=so;exports.calloutVariants=Ln;exports.calmInput=ko;exports.cn=n;exports.defaultPostPreset=gr;exports.defaultThemeId=Zt;exports.deleteUserTheme=pa;exports.duplicateTheme=cp;exports.energyInput=aa;exports.flexVariants=Di;exports.generateTheme=Dt;exports.getComponentContract=Xl;exports.getTheme=At;exports.gridVariants=Li;exports.listContractedComponents=Jl;exports.listThemes=da;exports.listUserThemes=Ys;exports.loadUserThemeInput=ca;exports.postPresets=Eo;exports.rowVariants=Ni;exports.saveUserTheme=dr;exports.sceneRegistry=Po;exports.shaderPresetById=No;exports.shaderPresets=Mo;exports.shellVariants=In;exports.stackVariants=as;exports.themeToCSSVars=ia;exports.toggleVariants=Es;exports.useCarouselApi=bd;exports.useGradeTheme=ga;exports.useMaybeGradeTheme=It;exports.usePrefersReducedMotion=Ft;//# sourceMappingURL=index.js.map
|
|
432
494
|
//# sourceMappingURL=index.js.map
|