@gradeui/ui 3.0.0 → 3.2.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.
Files changed (49) hide show
  1. package/components/ui/button.md +11 -7
  2. package/components/ui/combobox.md +46 -0
  3. package/components/ui/data-view.md +59 -0
  4. package/components/ui/dropdown-menu.md +1 -0
  5. package/components/ui/logo.md +8 -6
  6. package/components/ui/map.md +9 -0
  7. package/components/ui/media-surface.md +1 -0
  8. package/components/ui/property-list.md +43 -0
  9. package/components/ui/sidebar.md +2 -1
  10. package/components/ui/swatch.md +88 -0
  11. package/dist/contracts.js +6 -6
  12. package/dist/contracts.js.map +1 -1
  13. package/dist/contracts.mjs +6 -6
  14. package/dist/contracts.mjs.map +1 -1
  15. package/dist/index.d.mts +902 -415
  16. package/dist/index.d.ts +902 -415
  17. package/dist/index.js +609 -72
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +609 -72
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/map/google.d.mts +1 -1
  22. package/dist/map/google.d.ts +1 -1
  23. package/dist/map/google.js +1 -1
  24. package/dist/map/google.js.map +1 -1
  25. package/dist/map/google.mjs +1 -1
  26. package/dist/map/google.mjs.map +1 -1
  27. package/dist/map/leaflet.d.mts +1 -1
  28. package/dist/map/leaflet.d.ts +1 -1
  29. package/dist/map/leaflet.js +2 -2
  30. package/dist/map/leaflet.js.map +1 -1
  31. package/dist/map/leaflet.mjs +2 -2
  32. package/dist/map/leaflet.mjs.map +1 -1
  33. package/dist/map/mapbox.d.mts +1 -1
  34. package/dist/map/mapbox.d.ts +1 -1
  35. package/dist/map/mapbox.js +2 -2
  36. package/dist/map/mapbox.js.map +1 -1
  37. package/dist/map/mapbox.mjs +2 -2
  38. package/dist/map/mapbox.mjs.map +1 -1
  39. package/dist/map/maplibre.d.mts +1 -1
  40. package/dist/map/maplibre.d.ts +1 -1
  41. package/dist/map/maplibre.js +1 -1
  42. package/dist/map/maplibre.js.map +1 -1
  43. package/dist/map/maplibre.mjs +1 -1
  44. package/dist/map/maplibre.mjs.map +1 -1
  45. package/dist/styles.css +1 -1
  46. package/dist/{types-BxywIwvG.d.mts → types-B45Uirkp.d.mts} +23 -0
  47. package/dist/{types-BxywIwvG.d.ts → types-B45Uirkp.d.ts} +23 -0
  48. package/package.json +2 -1
  49. package/styles/globals.css +306 -95
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- 'use strict';var zod=require('zod'),v=require('react'),kt=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'),Zt=require('@radix-ui/react-avatar'),reactDayPicker=require('react-day-picker'),zu=require('embla-carousel-react'),Mr=require('@radix-ui/react-checkbox'),vo=require('@radix-ui/react-radio-group'),Or=require('@radix-ui/react-switch'),prismReactRenderer=require('prism-react-renderer'),react=require('motion/react'),LexicalComposer=require('@lexical/react/LexicalComposer'),LexicalRichTextPlugin=require('@lexical/react/LexicalRichTextPlugin'),LexicalContentEditable=require('@lexical/react/LexicalContentEditable'),LexicalErrorBoundary=require('@lexical/react/LexicalErrorBoundary'),LexicalHistoryPlugin=require('@lexical/react/LexicalHistoryPlugin'),LexicalOnChangePlugin=require('@lexical/react/LexicalOnChangePlugin'),LexicalListPlugin=require('@lexical/react/LexicalListPlugin'),LexicalLinkPlugin=require('@lexical/react/LexicalLinkPlugin'),LexicalComposerContext=require('@lexical/react/LexicalComposerContext'),richText=require('@lexical/rich-text'),list=require('@lexical/list'),link=require('@lexical/link'),code=require('@lexical/code'),selection=require('@lexical/selection'),utils=require('@lexical/utils'),lexical=require('lexical'),lexicalBeautifulMentions=require('lexical-beautiful-mentions'),dateFns=require('date-fns'),It=require('@radix-ui/react-popover'),Ie=require('@radix-ui/react-dialog'),ne=require('@radix-ui/react-dropdown-menu'),vn=require('@radix-ui/react-label'),Hr=require('@radix-ui/react-progress'),cmdk=require('cmdk'),kn=require('@radix-ui/react-separator'),rr=require('react-resizable-panels'),Ct=require('@radix-ui/react-scroll-area'),de=require('@radix-ui/react-select'),ro=require('@radix-ui/react-slider'),core=require('@dnd-kit/core'),sortable=require('@dnd-kit/sortable'),utilities=require('@dnd-kit/utilities'),zt=require('@radix-ui/react-tabs'),Ft=require('@radix-ui/react-tooltip'),ar=require('recharts'),Bn=require('@radix-ui/react-toggle'),nr=require('@radix-ui/react-toggle-group'),core$1=require('@gradeui/core'),reactDom=require('react-dom'),De=require('three'),postprocessing=require('postprocessing'),Fv=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 kt__namespace=/*#__PURE__*/_interopNamespace(kt);var Zt__namespace=/*#__PURE__*/_interopNamespace(Zt);var zu__default=/*#__PURE__*/_interopDefault(zu);var Mr__namespace=/*#__PURE__*/_interopNamespace(Mr);var vo__namespace=/*#__PURE__*/_interopNamespace(vo);var Or__namespace=/*#__PURE__*/_interopNamespace(Or);var It__namespace=/*#__PURE__*/_interopNamespace(It);var Ie__namespace=/*#__PURE__*/_interopNamespace(Ie);var ne__namespace=/*#__PURE__*/_interopNamespace(ne);var vn__namespace=/*#__PURE__*/_interopNamespace(vn);var Hr__namespace=/*#__PURE__*/_interopNamespace(Hr);var kn__namespace=/*#__PURE__*/_interopNamespace(kn);var rr__namespace=/*#__PURE__*/_interopNamespace(rr);var Ct__namespace=/*#__PURE__*/_interopNamespace(Ct);var de__namespace=/*#__PURE__*/_interopNamespace(de);var ro__namespace=/*#__PURE__*/_interopNamespace(ro);var zt__namespace=/*#__PURE__*/_interopNamespace(zt);var Ft__namespace=/*#__PURE__*/_interopNamespace(Ft);var ar__namespace=/*#__PURE__*/_interopNamespace(ar);var Bn__namespace=/*#__PURE__*/_interopNamespace(Bn);var nr__namespace=/*#__PURE__*/_interopNamespace(nr);var De__namespace=/*#__PURE__*/_interopNamespace(De);var Fv__default=/*#__PURE__*/_interopDefault(Fv);var jp=Object.defineProperty;var fr=(e,t)=>()=>(e&&(t=e(e=0)),t);var Qr=(e,t)=>{for(var o in t)jp(e,o,{get:t[o],enumerable:true});};var Ka,_c,Bc=fr(()=>{Ka="2pMfyvhpuKonkf7h8HzH",_c=()=>Ka!=="YOUR_KEY_HERE"&&Ka.length>0;});var Gc={};Qr(Gc,{createMaplibreAdapter:()=>Ph});function Th(){if(typeof document>"u"||document.getElementById(Vc))return;let e=document.createElement("link");e.id=Vc,e.rel="stylesheet",e.href=Ch,document.head.appendChild(e);}var kh,Oc,Ch,Vc,Ph,Wc=fr(()=>{Bc();kh={light:"dataviz-light",dark:"dataviz-dark",satellite:"satellite"},Oc=(e,t)=>`https://api.maptiler.com/maps/${kh[e]}/style.json?key=${encodeURIComponent(t)}`,Ch="https://unpkg.com/maplibre-gl@4/dist/maplibre-gl.css",Vc="gds-maplibre-gl-css";Ph=async(e,t,o)=>{Th();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 n=t.tilerKey??Ka;process.env.NODE_ENV!=="production"&&!t.tilerKey&&!_c()&&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??Oc(t.appearance,n),i=new r.Map({container:e,style:a,center:t.center,zoom:t.zoom,interactive:t.interactive,attributionControl:{compact:true}});t.bounds&&i.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(c=>{i.once("load",()=>c());}),o.onLoad(),i.on("error",c=>{let l=String(c?.error?.message??c?.message??"MapLibre error"),g=l.toLowerCase().includes("style");o.onError({code:g?"style-load-failed":"tile-load-failed",message:l,cause:c?.error??c});});let p=new globalThis.Map;return {setCenter:c=>i.setCenter(c),setZoom:c=>i.setZoom(c),setBounds:(c,l)=>i.fitBounds([c,l],{animate:false}),setAppearance:c=>{let l=t.styleUrl??Oc(c,n);i.setStyle(l,{diff:false});},setInteractive:c=>{let l=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let g of l){let u=i[g];u&&(c?u.enable():u.disable());}},flyTo:(c,l)=>i.flyTo({center:c,zoom:l?.zoom,duration:l?.durationMs??800}),panTo:(c,l)=>i.panTo(c,{duration:l?.durationMs??600}),fitBounds:(c,l)=>{if(c.length===0)return;let g=1/0,u=1/0,m=-1/0,h=-1/0;for(let[f,b]of c)f<g&&(g=f),b<u&&(u=b),f>m&&(m=f),b>h&&(h=b);i.fitBounds([[g,u],[m,h]],{padding:l?.paddingPx??40,duration:l?.durationMs??800});},getCenter:()=>{let c=i.getCenter();return [c.lng,c.lat]},getZoom:()=>i.getZoom(),getBounds:()=>{let c=i.getBounds();return [[c.getWest(),c.getSouth()],[c.getEast(),c.getNorth()]]},addMarker:(c,l,g)=>{let u=document.createElement("div");u.dataset.gdsPart="map-marker",u.dataset.gdsState="idle",u.style.cursor="pointer",u.addEventListener("mouseenter",()=>o.onMarkerHover(c)),u.addEventListener("mouseleave",()=>o.onMarkerHover(null)),u.addEventListener("click",f=>{o.onMarkerClick(c,h.coords,f);});let m=new r.Marker({element:u,anchor:g==="center"?"center":"bottom"}).setLngLat(l).addTo(i),h={element:u,coords:l,setHovered:f=>{u.dataset.gdsState=f?"hovered":"idle",u.style.zIndex=f?"10":"1";},setPosition:f=>{h.coords=f,m.setLngLat(f);},remove:()=>{m.remove(),p.delete(c);}};return p.set(c,{marker:m,handle:h}),h},destroy:()=>{p.forEach(({marker:c})=>c.remove()),p.clear(),i.remove();},instance:i}};});var Uc={};Qr(Uc,{createMapboxAdapter:()=>Eh});function Nh(){if(typeof document>"u"||document.getElementById($c))return;let e=document.createElement("link");e.id=$c,e.rel="stylesheet",e.href=Mh,document.head.appendChild(e);}var jc,Mh,$c,Eh,Kc=fr(()=>{jc={light:"mapbox://styles/mapbox/light-v11",dark:"mapbox://styles/mapbox/dark-v11",satellite:"mapbox://styles/mapbox/satellite-streets-v12"},Mh="https://unpkg.com/mapbox-gl@3/dist/mapbox-gl.css",$c="gds-mapbox-gl-css";Eh=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");Nh();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 n=t.styleUrl??jc[t.appearance],a=new r.Map({container:e,style:n,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 i=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??jc[s];a.setStyle(c,{diff:false});},setInteractive:s=>{let c=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let l of c){let g=a[l];g&&(s?g.enable():g.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,g=1/0,u=-1/0,m=-1/0;for(let[h,f]of s)h<l&&(l=h),f<g&&(g=f),h>u&&(u=h),f>m&&(m=f);a.fitBounds([[l,g],[u,m]],{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 g=document.createElement("div");g.dataset.gdsPart="map-marker",g.dataset.gdsState="idle",g.style.cursor="pointer",g.addEventListener("mouseenter",()=>o.onMarkerHover(s)),g.addEventListener("mouseleave",()=>o.onMarkerHover(null)),g.addEventListener("click",h=>{o.onMarkerClick(s,m.coords,h);});let u=new r.Marker({element:g,anchor:l==="center"?"center":"bottom"}).setLngLat(c).addTo(a),m={element:g,coords:c,setHovered:h=>{g.dataset.gdsState=h?"hovered":"idle",g.style.zIndex=h?"10":"1";},setPosition:h=>{m.coords=h,u.setLngLat(h);},remove:()=>{u.remove(),i.delete(s);}};return i.set(s,{marker:u,handle:m}),m},destroy:()=>{i.forEach(({marker:s})=>s.remove()),i.clear(),a.remove();},instance:a}};});var Yc={};Qr(Yc,{createGoogleAdapter:()=>Ah});var Lh,Dh,qc,Ah,Zc=fr(()=>{Lh=[{featureType:"poi",stylers:[{visibility:"off"}]},{featureType:"transit",stylers:[{visibility:"simplified"}]}],Dh=[{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"}]}],qc=e=>e==="dark"?Dh:Lh,Ah=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 n=new r({apiKey:t.apiKey,version:"weekly",libraries:["maps","marker"]}),a;try{a=await n.load();}catch(l){throw o.onError({code:"provider-init-failed",message:"@gradeui/ui Map: Google Maps loader failed.",cause:l}),l}let i=t.appearance==="satellite",p=new a.maps.Map(e,{center:{lat:t.center[1],lng:t.center[0]},zoom:t.zoom,mapTypeId:i?a.maps.MapTypeId.HYBRID:a.maps.MapTypeId.ROADMAP,mapId:t.mapId,styles:i?void 0:qc(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());}),o.onLoad();let s=new globalThis.Map;return {setCenter:l=>p.setCenter({lat:l[1],lng:l[0]}),setZoom:l=>p.setZoom(l),setBounds:(l,g)=>{let u=new a.maps.LatLngBounds({lat:l[1],lng:l[0]},{lat:g[1],lng:g[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:qc(l)}));},setInteractive:l=>{p.setOptions({disableDefaultUI:!l,gestureHandling:l?"auto":"none",keyboardShortcuts:l});},flyTo:(l,g)=>{p.panTo({lat:l[1],lng:l[0]}),g?.zoom!=null&&p.setZoom(g.zoom);},panTo:l=>p.panTo({lat:l[1],lng:l[0]}),fitBounds:(l,g)=>{if(l.length===0)return;let u=new a.maps.LatLngBounds;for(let[m,h]of l)u.extend({lat:h,lng:m});p.fitBounds(u,g?.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 g=l.getSouthWest(),u=l.getNorthEast();return [[g.lng(),g.lat()],[u.lng(),u.lat()]]},addMarker:(l,g,u)=>{let m=document.createElement("div");m.dataset.gdsPart="map-marker",m.dataset.gdsState="idle",m.style.cursor="pointer",u==="center"&&(m.style.transform="translateY(50%)"),m.addEventListener("mouseenter",()=>o.onMarkerHover(l)),m.addEventListener("mouseleave",()=>o.onMarkerHover(null)),m.addEventListener("click",b=>{o.onMarkerClick(l,f.coords,b);});let h=new a.maps.marker.AdvancedMarkerElement({map:p,position:{lat:g[1],lng:g[0]},content:m}),f={element:m,coords:g,setHovered:b=>{m.dataset.gdsState=b?"hovered":"idle",h.zIndex=b?10:1;},setPosition:b=>{f.coords=b,h.position={lat:b[1],lng:b[0]};},remove:()=>{h.map=null,s.delete(l);}};return s.set(l,{marker:h,handle:f}),f},destroy:()=>{s.forEach(({marker:l})=>{l.map=null;}),s.clear();},instance:p}};});var Qc={};Qr(Qc,{createLeafletAdapter:()=>_h});function Hh(){if(typeof document>"u"||globalThis.__gradeLeafletCssBundled||document.getElementById(Xc))return;let e=document.createElement("link");e.id=Xc,e.rel="stylesheet",e.href=Ih,document.head.appendChild(e);}var Ih,Xc,Jc,Fh,zh,_h,ep=fr(()=>{Ih="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",Xc="gds-leaflet-css";Jc={light:"rastertiles/voyager",dark:"rastertiles/dark_all",satellite:"rastertiles/voyager"},Fh=e=>`https://{s}.basemaps.cartocdn.com/${e}/{z}/{x}/{y}{r}.png`,zh="\xA9 OpenStreetMap contributors \xA9 CARTO",_h=async(e,t,o)=>{Hh();let r;try{r=await import('leaflet'),r.default&&(r=r.default);}catch(u){throw o.onError({code:"sdk-missing",message:"@gradeui/ui Map: `leaflet` is not installed. Run `pnpm add leaflet` to use the worker-free Leaflet adapter.",cause:u}),u}let n=u=>[u[1],u[0]],a=r.map(e,{center:n(t.center),zoom:t.zoom,zoomControl:t.interactive,attributionControl:true,dragging:t.interactive,scrollWheelZoom:t.interactive,doubleClickZoom:t.interactive,boxZoom:t.interactive,keyboard:t.interactive,touchZoom:t.interactive}),i=u=>{let m=r.tileLayer(Fh(Jc[u]??Jc.light),{maxZoom:20,subdomains:"abcd",detectRetina:true,attribution:zh,crossOrigin:true});return m.on("tileerror",()=>o.onError({code:"tile-load-failed",message:"map tile failed to load (is the tile host allowed by CSP?)"})),m.addTo(a),m},p=i(t.appearance),s=u=>{p&&a.removeLayer(p),p=i(u);};t.bounds&&a.fitBounds([n(t.bounds[0]),n(t.bounds[1])],{animate:false}),o.onLoad();let c=typeof ResizeObserver<"u"?new ResizeObserver(()=>a.invalidateSize(false)):null;c?.observe(e),requestAnimationFrame(()=>a.invalidateSize(false)),window.setTimeout(()=>a.invalidateSize(false),200),window.setTimeout(()=>a.invalidateSize(false),600);let l=new globalThis.Map;return {setCenter:u=>a.panTo(n(u),{animate:false}),setZoom:u=>a.setZoom(u),setBounds:(u,m)=>a.fitBounds([n(u),n(m)],{animate:false}),setAppearance:u=>s(u),setInteractive:u=>{let m=["dragging","scrollWheelZoom","doubleClickZoom","boxZoom","keyboard","touchZoom"];for(let h of m){let f=a[h];f&&(u?f.enable():f.disable());}},flyTo:(u,m)=>a.flyTo(n(u),m?.zoom??a.getZoom(),{duration:(m?.durationMs??800)/1e3}),panTo:(u,m)=>a.panTo(n(u),{duration:(m?.durationMs??600)/1e3}),fitBounds:(u,m)=>{if(u.length===0)return;let h=m?.paddingPx??40;a.fitBounds(u.map(n),{padding:[h,h],duration:(m?.durationMs??800)/1e3});},getCenter:()=>{let u=a.getCenter();return [u.lng,u.lat]},getZoom:()=>a.getZoom(),getBounds:()=>{let u=a.getBounds(),m=u.getSouthWest(),h=u.getNorthEast();return [[m.lng,m.lat],[h.lng,h.lat]]},addMarker:(u,m,h)=>{let f=document.createElement("div");f.dataset.gdsPart="map-marker",f.dataset.gdsState="idle",f.style.position="absolute",f.style.cursor="pointer",f.style.transform=h==="center"?"translate(-50%, -50%)":"translate(-50%, -100%)",f.addEventListener("mouseenter",()=>o.onMarkerHover(u)),f.addEventListener("mouseleave",()=>o.onMarkerHover(null)),f.addEventListener("click",x=>o.onMarkerClick(u,w.coords,x));let b=r.divIcon({className:"gds-leaflet-marker",html:"",iconSize:[0,0],iconAnchor:[0,0]}),y=r.marker(n(m),{icon:b,interactive:true,keyboard:false}).addTo(a),R=y.getElement();R&&(R.style.pointerEvents="auto",R.appendChild(f));let w={element:f,coords:m,setHovered:x=>{f.dataset.gdsState=x?"hovered":"idle",R&&(R.style.zIndex=x?"1000":"");},setPosition:x=>{w.coords=x,y.setLatLng(n(x));},remove:()=>{a.removeLayer(y),l.delete(u);}};return l.set(u,{marker:y,handle:w}),w},destroy:()=>{c?.disconnect(),l.forEach(({marker:u})=>a.removeLayer(u)),l.clear(),a.remove();},instance:a}};});var Si={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"],styleDefaults:{AccordionItem:"border-b",AccordionTrigger:"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",AccordionContent:"pb-4 pt-0"},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.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",description:"initial open item(s)"},value:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",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 ki={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)"],styleDefaults:{MessageActions:"inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px]",ThinkingDisclosure:"w-3.5 h-3.5 text-gds-gray-500 dark:text-gds-gray-400 shrink-0",StepsDisclosure:"w-3.5 h-3.5 text-gds-gray-500 dark:text-gds-gray-400 transition-transform shrink-0",AIChat:"flex flex-col overflow-hidden"},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 Ci={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)"],styleDefaults:{AIChatComposer:"w-full"},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 Ti={name:"AppShell",description:`The top-level page scaffold for any app-like or marketing layout. Reach for AppShell
2
+ 'use strict';var zod=require('zod'),y=require('react'),Ft=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'),bo=require('@radix-ui/react-avatar'),reactDayPicker=require('react-day-picker'),Um=require('embla-carousel-react'),qa=require('@radix-ui/react-checkbox'),_o=require('@radix-ui/react-radio-group'),gr=require('@radix-ui/react-switch'),prismReactRenderer=require('prism-react-renderer'),react=require('motion/react'),LexicalComposer=require('@lexical/react/LexicalComposer'),LexicalRichTextPlugin=require('@lexical/react/LexicalRichTextPlugin'),LexicalContentEditable=require('@lexical/react/LexicalContentEditable'),LexicalErrorBoundary=require('@lexical/react/LexicalErrorBoundary'),LexicalHistoryPlugin=require('@lexical/react/LexicalHistoryPlugin'),LexicalOnChangePlugin=require('@lexical/react/LexicalOnChangePlugin'),LexicalListPlugin=require('@lexical/react/LexicalListPlugin'),LexicalLinkPlugin=require('@lexical/react/LexicalLinkPlugin'),LexicalComposerContext=require('@lexical/react/LexicalComposerContext'),richText=require('@lexical/rich-text'),list=require('@lexical/list'),link=require('@lexical/link'),code=require('@lexical/code'),selection=require('@lexical/selection'),utils=require('@lexical/utils'),lexical=require('lexical'),lexicalBeautifulMentions=require('lexical-beautiful-mentions'),dateFns=require('date-fns'),Yt=require('@radix-ui/react-popover'),Be=require('@radix-ui/react-dialog'),ce=require('@radix-ui/react-dropdown-menu'),ei=require('@radix-ui/react-label'),or=require('@radix-ui/react-progress'),cmdk=require('cmdk'),ti=require('@radix-ui/react-separator'),reactTable=require('@tanstack/react-table'),Pa=require('@radix-ui/react-toggle-group'),oi=require('@radix-ui/react-toggle'),Zt=require('@radix-ui/react-tooltip'),Ma=require('react-resizable-panels'),Vt=require('@radix-ui/react-scroll-area'),fe=require('@radix-ui/react-select'),Po=require('@radix-ui/react-slider'),core=require('@dnd-kit/core'),sortable=require('@dnd-kit/sortable'),utilities=require('@dnd-kit/utilities'),Xt=require('@radix-ui/react-tabs'),Na=require('recharts'),core$1=require('@gradeui/core'),reactDom=require('react-dom'),He=require('three'),postprocessing=require('postprocessing'),b0=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 y__namespace=/*#__PURE__*/_interopNamespace(y);var Ft__namespace=/*#__PURE__*/_interopNamespace(Ft);var bo__namespace=/*#__PURE__*/_interopNamespace(bo);var Um__default=/*#__PURE__*/_interopDefault(Um);var qa__namespace=/*#__PURE__*/_interopNamespace(qa);var _o__namespace=/*#__PURE__*/_interopNamespace(_o);var gr__namespace=/*#__PURE__*/_interopNamespace(gr);var Yt__namespace=/*#__PURE__*/_interopNamespace(Yt);var Be__namespace=/*#__PURE__*/_interopNamespace(Be);var ce__namespace=/*#__PURE__*/_interopNamespace(ce);var ei__namespace=/*#__PURE__*/_interopNamespace(ei);var or__namespace=/*#__PURE__*/_interopNamespace(or);var ti__namespace=/*#__PURE__*/_interopNamespace(ti);var Pa__namespace=/*#__PURE__*/_interopNamespace(Pa);var oi__namespace=/*#__PURE__*/_interopNamespace(oi);var Zt__namespace=/*#__PURE__*/_interopNamespace(Zt);var Ma__namespace=/*#__PURE__*/_interopNamespace(Ma);var Vt__namespace=/*#__PURE__*/_interopNamespace(Vt);var fe__namespace=/*#__PURE__*/_interopNamespace(fe);var Po__namespace=/*#__PURE__*/_interopNamespace(Po);var Xt__namespace=/*#__PURE__*/_interopNamespace(Xt);var Na__namespace=/*#__PURE__*/_interopNamespace(Na);var He__namespace=/*#__PURE__*/_interopNamespace(He);var b0__default=/*#__PURE__*/_interopDefault(b0);var Ju=Object.defineProperty;var Fa=(e,t)=>()=>(e&&(t=e(e=0)),t);var Pr=(e,t)=>{for(var o in t)Ju(e,o,{get:t[o],enumerable:true});};var Mn,Lp,Dp=Fa(()=>{Mn="2pMfyvhpuKonkf7h8HzH",Lp=()=>Mn!=="YOUR_KEY_HERE"&&Mn.length>0;});var Hp={};Pr(Hp,{createMaplibreAdapter:()=>av});function ov(){if(typeof document>"u"||document.getElementById(Ip))return;let e=document.createElement("link");e.id=Ip,e.rel="stylesheet",e.href=tv,document.head.appendChild(e);}var ev,Ap,tv,Ip,av,Fp=Fa(()=>{Dp();ev={light:"dataviz-light",dark:"dataviz-dark",satellite:"satellite"},Ap=(e,t)=>`https://api.maptiler.com/maps/${ev[e]}/style.json?key=${encodeURIComponent(t)}`,tv="https://unpkg.com/maplibre-gl@4/dist/maplibre-gl.css",Ip="gds-maplibre-gl-css";av=async(e,t,o)=>{ov();let a;try{a=await import('maplibre-gl'),a.default&&(a=a.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 n=t.tilerKey??Mn;process.env.NODE_ENV!=="production"&&!t.tilerKey&&!Lp()&&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 r=t.styleUrl??Ap(t.appearance,n),i=new a.Map({container:e,style:r,center:t.center,zoom:t.zoom,interactive:t.interactive,attributionControl:{compact:true}});(t.tools==="zoom"||t.tools==="auto"&&t.interactive)&&i.addControl(new a.NavigationControl({showCompass:false}),t.toolsPosition),t.bounds&&i.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(c=>{i.once("load",()=>c());}),o.onLoad(),i.on("error",c=>{let p=String(c?.error?.message??c?.message??"MapLibre error"),m=p.toLowerCase().includes("style");o.onError({code:m?"style-load-failed":"tile-load-failed",message:p,cause:c?.error??c});});let l=new globalThis.Map;return {setCenter:c=>i.setCenter(c),setZoom:c=>i.setZoom(c),setBounds:(c,p)=>i.fitBounds([c,p],{animate:false}),setAppearance:c=>{let p=t.styleUrl??Ap(c,n);i.setStyle(p,{diff:false});},setInteractive:c=>{let p=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let m of p){let u=i[m];u&&(c?u.enable():u.disable());}},flyTo:(c,p)=>i.flyTo({center:c,zoom:p?.zoom,duration:p?.durationMs??800}),panTo:(c,p)=>i.panTo(c,{duration:p?.durationMs??600}),fitBounds:(c,p)=>{if(c.length===0)return;let m=1/0,u=1/0,g=-1/0,h=-1/0;for(let[f,b]of c)f<m&&(m=f),b<u&&(u=b),f>g&&(g=f),b>h&&(h=b);i.fitBounds([[m,u],[g,h]],{padding:p?.paddingPx??40,duration:p?.durationMs??800});},getCenter:()=>{let c=i.getCenter();return [c.lng,c.lat]},getZoom:()=>i.getZoom(),getBounds:()=>{let c=i.getBounds();return [[c.getWest(),c.getSouth()],[c.getEast(),c.getNorth()]]},addMarker:(c,p,m)=>{let u=document.createElement("div");u.dataset.gdsPart="map-marker",u.dataset.gdsState="idle",u.style.cursor="pointer",u.addEventListener("mouseenter",()=>o.onMarkerHover(c)),u.addEventListener("mouseleave",()=>o.onMarkerHover(null)),u.addEventListener("click",f=>{o.onMarkerClick(c,h.coords,f);});let g=new a.Marker({element:u,anchor:m==="center"?"center":"bottom"}).setLngLat(p).addTo(i),h={element:u,coords:p,setHovered:f=>{u.dataset.gdsState=f?"hovered":"idle",u.style.zIndex=f?"10":"1";},setPosition:f=>{h.coords=f,g.setLngLat(f);},remove:()=>{g.remove(),l.delete(c);}};return l.set(c,{marker:g,handle:h}),h},destroy:()=>{l.forEach(({marker:c})=>c.remove()),l.clear(),i.remove();},instance:i}};});var Vp={};Pr(Vp,{createMapboxAdapter:()=>iv});function nv(){if(typeof document>"u"||document.getElementById(Bp))return;let e=document.createElement("link");e.id=Bp,e.rel="stylesheet",e.href=rv,document.head.appendChild(e);}var zp,rv,Bp,iv,_p=Fa(()=>{zp={light:"mapbox://styles/mapbox/light-v11",dark:"mapbox://styles/mapbox/dark-v11",satellite:"mapbox://styles/mapbox/satellite-streets-v12"},rv="https://unpkg.com/mapbox-gl@3/dist/mapbox-gl.css",Bp="gds-mapbox-gl-css";iv=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");nv();let a;try{a=await import('mapbox-gl'),a.default&&(a=a.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}a.accessToken=t.accessToken;let n=t.styleUrl??zp[t.appearance],r=new a.Map({container:e,style:n,center:t.center,zoom:t.zoom,interactive:t.interactive});(t.tools==="zoom"||t.tools==="auto"&&t.interactive)&&r.addControl(new a.NavigationControl({showCompass:false}),t.toolsPosition),t.bounds&&r.fitBounds([t.bounds[0],t.bounds[1]],{animate:false}),await new Promise(s=>{r.once("load",()=>s());}),o.onLoad(),r.on("error",s=>{let c=String(s?.error?.message??s?.message??"Mapbox error"),p=c.toLowerCase().includes("style");o.onError({code:p?"style-load-failed":"tile-load-failed",message:c,cause:s?.error??s});});let i=new globalThis.Map;return {setCenter:s=>r.setCenter(s),setZoom:s=>r.setZoom(s),setBounds:(s,c)=>r.fitBounds([s,c],{animate:false}),setAppearance:s=>{let c=t.styleUrl??zp[s];r.setStyle(c,{diff:false});},setInteractive:s=>{let c=["scrollZoom","boxZoom","dragRotate","dragPan","keyboard","doubleClickZoom","touchZoomRotate"];for(let p of c){let m=r[p];m&&(s?m.enable():m.disable());}},flyTo:(s,c)=>r.flyTo({center:s,zoom:c?.zoom,duration:c?.durationMs??800}),panTo:(s,c)=>r.panTo(s,{duration:c?.durationMs??600}),fitBounds:(s,c)=>{if(s.length===0)return;let p=1/0,m=1/0,u=-1/0,g=-1/0;for(let[h,f]of s)h<p&&(p=h),f<m&&(m=f),h>u&&(u=h),f>g&&(g=f);r.fitBounds([[p,m],[u,g]],{padding:c?.paddingPx??40,duration:c?.durationMs??800});},getCenter:()=>{let s=r.getCenter();return [s.lng,s.lat]},getZoom:()=>r.getZoom(),getBounds:()=>{let s=r.getBounds();return [[s.getWest(),s.getSouth()],[s.getEast(),s.getNorth()]]},addMarker:(s,c,p)=>{let m=document.createElement("div");m.dataset.gdsPart="map-marker",m.dataset.gdsState="idle",m.style.cursor="pointer",m.addEventListener("mouseenter",()=>o.onMarkerHover(s)),m.addEventListener("mouseleave",()=>o.onMarkerHover(null)),m.addEventListener("click",h=>{o.onMarkerClick(s,g.coords,h);});let u=new a.Marker({element:m,anchor:p==="center"?"center":"bottom"}).setLngLat(c).addTo(r),g={element:m,coords:c,setHovered:h=>{m.dataset.gdsState=h?"hovered":"idle",m.style.zIndex=h?"10":"1";},setPosition:h=>{g.coords=h,u.setLngLat(h);},remove:()=>{u.remove(),i.delete(s);}};return i.set(s,{marker:u,handle:g}),g},destroy:()=>{i.forEach(({marker:s})=>s.remove()),i.clear(),r.remove();},instance:r}};});var Gp={};Pr(Gp,{createGoogleAdapter:()=>cv});var sv,lv,Op,cv,Wp=Fa(()=>{sv=[{featureType:"poi",stylers:[{visibility:"off"}]},{featureType:"transit",stylers:[{visibility:"simplified"}]}],lv=[{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"}]}],Op=e=>e==="dark"?lv:sv,cv=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 a;try{let u=await import('@googlemaps/js-api-loader');a=u.Loader??u.default?.Loader;}catch(u){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:u}),u}let n=new a({apiKey:t.apiKey,version:"weekly",libraries:["maps","marker"]}),r;try{r=await n.load();}catch(u){throw o.onError({code:"provider-init-failed",message:"@gradeui/ui Map: Google Maps loader failed.",cause:u}),u}let i=t.appearance==="satellite",l=t.tools==="zoom"||t.tools==="auto"&&t.interactive,s={"top-left":r.maps.ControlPosition.LEFT_TOP,"top-right":r.maps.ControlPosition.RIGHT_TOP,"bottom-left":r.maps.ControlPosition.LEFT_BOTTOM,"bottom-right":r.maps.ControlPosition.RIGHT_BOTTOM},c=new r.maps.Map(e,{center:{lat:t.center[1],lng:t.center[0]},zoom:t.zoom,mapTypeId:i?r.maps.MapTypeId.HYBRID:r.maps.MapTypeId.ROADMAP,mapId:t.mapId,styles:i?void 0:Op(t.appearance==="dark"?"dark":"light"),disableDefaultUI:true,zoomControl:l,zoomControlOptions:{position:s[t.toolsPosition]},gestureHandling:t.interactive?"auto":"none",keyboardShortcuts:t.interactive});if(t.bounds){let u=new r.maps.LatLngBounds({lat:t.bounds[0][1],lng:t.bounds[0][0]},{lat:t.bounds[1][1],lng:t.bounds[1][0]});c.fitBounds(u);}await new Promise(u=>{r.maps.event.addListenerOnce(c,"idle",()=>u());}),o.onLoad();let p=new globalThis.Map;return {setCenter:u=>c.setCenter({lat:u[1],lng:u[0]}),setZoom:u=>c.setZoom(u),setBounds:(u,g)=>{let h=new r.maps.LatLngBounds({lat:u[1],lng:u[0]},{lat:g[1],lng:g[0]});c.fitBounds(h);},setAppearance:u=>{u==="satellite"?(c.setMapTypeId(r.maps.MapTypeId.HYBRID),c.setOptions({styles:void 0})):(c.setMapTypeId(r.maps.MapTypeId.ROADMAP),c.setOptions({styles:Op(u)}));},setInteractive:u=>{c.setOptions({zoomControl:t.tools==="zoom"||t.tools==="auto"&&u,gestureHandling:u?"auto":"none",keyboardShortcuts:u});},flyTo:(u,g)=>{c.panTo({lat:u[1],lng:u[0]}),g?.zoom!=null&&c.setZoom(g.zoom);},panTo:u=>c.panTo({lat:u[1],lng:u[0]}),fitBounds:(u,g)=>{if(u.length===0)return;let h=new r.maps.LatLngBounds;for(let[f,b]of u)h.extend({lat:b,lng:f});c.fitBounds(h,g?.paddingPx??40);},getCenter:()=>{let u=c.getCenter();return u?[u.lng(),u.lat()]:[0,0]},getZoom:()=>c.getZoom()??0,getBounds:()=>{let u=c.getBounds();if(!u)return [[0,0],[0,0]];let g=u.getSouthWest(),h=u.getNorthEast();return [[g.lng(),g.lat()],[h.lng(),h.lat()]]},addMarker:(u,g,h)=>{let f=document.createElement("div");f.dataset.gdsPart="map-marker",f.dataset.gdsState="idle",f.style.cursor="pointer",h==="center"&&(f.style.transform="translateY(50%)"),f.addEventListener("mouseenter",()=>o.onMarkerHover(u)),f.addEventListener("mouseleave",()=>o.onMarkerHover(null)),f.addEventListener("click",S=>{o.onMarkerClick(u,v.coords,S);});let b=new r.maps.marker.AdvancedMarkerElement({map:c,position:{lat:g[1],lng:g[0]},content:f}),v={element:f,coords:g,setHovered:S=>{f.dataset.gdsState=S?"hovered":"idle",b.zIndex=S?10:1;},setPosition:S=>{v.coords=S,b.position={lat:S[1],lng:S[0]};},remove:()=>{b.map=null,p.delete(u);}};return p.set(u,{marker:b,handle:v}),v},destroy:()=>{p.forEach(({marker:u})=>{u.map=null;}),p.clear();},instance:c}};});var jp={};Pr(jp,{createLeafletAdapter:()=>gv});function pv(){if(typeof document>"u"||globalThis.__gradeLeafletCssBundled||document.getElementById(Up))return;let e=document.createElement("link");e.id=Up,e.rel="stylesheet",e.href=dv,document.head.appendChild(e);}var dv,Up,$p,uv,mv,gv,Kp=Fa(()=>{dv="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",Up="gds-leaflet-css";$p={light:"rastertiles/voyager",dark:"rastertiles/dark_all",satellite:"rastertiles/voyager"},uv=e=>`https://{s}.basemaps.cartocdn.com/${e}/{z}/{x}/{y}{r}.png`,mv="\xA9 OpenStreetMap contributors \xA9 CARTO",gv=async(e,t,o)=>{pv();let a;try{a=await import('leaflet'),a.default&&(a=a.default);}catch(h){throw o.onError({code:"sdk-missing",message:"@gradeui/ui Map: `leaflet` is not installed. Run `pnpm add leaflet` to use the worker-free Leaflet adapter.",cause:h}),h}let n=h=>[h[1],h[0]],r=t.tools==="zoom"||t.tools==="auto"&&t.interactive,i={"top-left":"topleft","top-right":"topright","bottom-left":"bottomleft","bottom-right":"bottomright"},l=a.map(e,{center:n(t.center),zoom:t.zoom,zoomControl:false,attributionControl:true,dragging:t.interactive,scrollWheelZoom:t.interactive,doubleClickZoom:t.interactive,boxZoom:t.interactive,keyboard:t.interactive,touchZoom:t.interactive});r&&a.control.zoom({position:i[t.toolsPosition]??"topleft"}).addTo(l);let s=h=>{let f=a.tileLayer(uv($p[h]??$p.light),{maxZoom:20,subdomains:"abcd",detectRetina:true,attribution:mv,crossOrigin:true});return f.on("tileerror",()=>o.onError({code:"tile-load-failed",message:"map tile failed to load (is the tile host allowed by CSP?)"})),f.addTo(l),f},c=s(t.appearance),p=h=>{c&&l.removeLayer(c),c=s(h);};t.bounds&&l.fitBounds([n(t.bounds[0]),n(t.bounds[1])],{animate:false}),o.onLoad();let m=typeof ResizeObserver<"u"?new ResizeObserver(()=>l.invalidateSize(false)):null;m?.observe(e),requestAnimationFrame(()=>l.invalidateSize(false)),window.setTimeout(()=>l.invalidateSize(false),200),window.setTimeout(()=>l.invalidateSize(false),600);let u=new globalThis.Map;return {setCenter:h=>l.panTo(n(h),{animate:false}),setZoom:h=>l.setZoom(h),setBounds:(h,f)=>l.fitBounds([n(h),n(f)],{animate:false}),setAppearance:h=>p(h),setInteractive:h=>{let f=["dragging","scrollWheelZoom","doubleClickZoom","boxZoom","keyboard","touchZoom"];for(let b of f){let v=l[b];v&&(h?v.enable():v.disable());}},flyTo:(h,f)=>l.flyTo(n(h),f?.zoom??l.getZoom(),{duration:(f?.durationMs??800)/1e3}),panTo:(h,f)=>l.panTo(n(h),{duration:(f?.durationMs??600)/1e3}),fitBounds:(h,f)=>{if(h.length===0)return;let b=f?.paddingPx??40;l.fitBounds(h.map(n),{padding:[b,b],duration:(f?.durationMs??800)/1e3});},getCenter:()=>{let h=l.getCenter();return [h.lng,h.lat]},getZoom:()=>l.getZoom(),getBounds:()=>{let h=l.getBounds(),f=h.getSouthWest(),b=h.getNorthEast();return [[f.lng,f.lat],[b.lng,b.lat]]},addMarker:(h,f,b)=>{let v=document.createElement("div");v.dataset.gdsPart="map-marker",v.dataset.gdsState="idle",v.style.position="absolute",v.style.cursor="pointer",v.style.transform=b==="center"?"translate(-50%, -50%)":"translate(-50%, -100%)",v.addEventListener("mouseenter",()=>o.onMarkerHover(h)),v.addEventListener("mouseleave",()=>o.onMarkerHover(null)),v.addEventListener("click",C=>o.onMarkerClick(h,k.coords,C));let S=a.divIcon({className:"gds-leaflet-marker",html:"",iconSize:[0,0],iconAnchor:[0,0]}),x=a.marker(n(f),{icon:S,interactive:true,keyboard:false}).addTo(l),w=x.getElement();w&&(w.style.pointerEvents="auto",w.appendChild(v));let k={element:v,coords:f,setHovered:C=>{v.dataset.gdsState=C?"hovered":"idle",w&&(w.style.zIndex=C?"1000":"");},setPosition:C=>{k.coords=C,x.setLatLng(n(C));},remove:()=>{l.removeLayer(x),u.delete(h);}};return u.set(h,{marker:x,handle:k}),k},destroy:()=>{m?.disconnect(),u.forEach(({marker:h})=>l.removeLayer(h)),u.clear(),l.remove();},instance:l}};});var fs={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"],styleDefaults:{AccordionItem:"border-b",AccordionTrigger:"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",AccordionContent:"pb-4 pt-0"},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.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",description:"initial open item(s)"},value:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",description:"controlled"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"the row label users click to expand"}}};var hs={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)"],styleDefaults:{MessageActions:"inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px]",ThinkingDisclosure:"w-3.5 h-3.5 text-gds-gray-500 dark:text-gds-gray-400 shrink-0",StepsDisclosure:"w-3.5 h-3.5 text-gds-gray-500 dark:text-gds-gray-400 transition-transform shrink-0",AIChat:"flex flex-col overflow-hidden"},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 bs={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)"],styleDefaults:{AIChatComposer:"w-full"},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 vs={name:"AppShell",description:`The top-level page scaffold for any app-like or marketing layout. Reach for AppShell
3
3
  instead of hand-rolling \`grid grid-cols-[auto_1fr]\` so the layout shape (top nav,
4
4
  side nav, three-pane Slack/Mail/Notion shape, constrained vs full-width main) is a
5
5
  prop the settings panel can mutate. Don't compose top-level layouts from raw grid
@@ -14,7 +14,7 @@ Pick the \`nav\` variant from the source:
14
14
  shape. ANY time you see a vertical icon rail next to
15
15
  a separate list/sidebar, this is the answer \u2014 don't
16
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"],styleDefaults:{AppShell:"gds-app-shell min-h-screen w-full bg-background text-foreground grid",AppShellHeader:"gds-app-shell-header",AppShellNav:"gds-app-shell-nav border-b bg-background",AppShellAside:"gds-app-shell-aside min-w-0 border-r bg-background",AppShellMain:"gds-app-shell-main min-w-0 w-full",AppShellFooter:"gds-app-shell-footer border-t bg-background"},variantDefaults:{nav:"none"},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 Pi={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)","Message (in the avatar slot)"],styleDefaults:{AvatarImage:"aspect-square h-full w-full"},props:{size:{schema:zod.z.enum(["2xs","xs","sm","md","lg","xl"]).optional(),design:"knob",description:"t-shirt scale, 20px \u2192 80px; default md (40px). xs for chat message rows, sm for comments/dense threads, lg/xl for profile headers. Prefer this over h-*/w-* className utilities."},src:{schema:zod.z.unknown(),design:"plumbing"},tone:{schema:zod.z.enum(["muted","primary","violet","amber","emerald","sky","rose","plum","lime"]).optional(),design:"knob",description:"tinted bg/text pair. Reach for explicit tones when each author needs a stable colour mapping (chat avatars, comment threads, member lists); default muted."},children:{schema:zod.z.unknown(),design:"plumbing",description:"initials (or a small icon), rendered while the image loads or when it fails"}}};var Mi={name:"BackgroundFill",description:"The background *paint* of a frame \u2014 a generative shader, image, video, gradient, repeating texture, or solid token rendered as a layer BEHIND the frame's content. Use it as the first child of a `relative` frame; it paints an `absolute inset-0`, `z-0`, `pointer-events-none` layer, so content carrying `relative z-10` sits on top. This is the canonical way to give any container a rich background \u2014 never drop a full-bleed `<ThreeScene>` or `<img>` as a free-standing sibling. For a sized, in-flow media element (a hero card, a thumbnail), use ThreeScene / MediaSurface / VideoPlayer directly instead.",import:"@gradeui/ui",aliases:["background","fill","frame fill","backdrop","surface fill","background image","background video","background gradient","background shader","texture","paint"],composesWith:["AppShell","Card","Stack","Row","Grid (any relative container)","ThreeScene (shader fill)","MediaSurface"],styleDefaults:{BackgroundFill:"absolute inset-0 h-full w-full"},props:{type:{schema:zod.z.enum(["none","solid","gradient","image","video","shader"]),design:"knob",description:"which paint to render (required)"},color:{schema:zod.z.string().optional(),design:"content",description:"solid fill; a token name (`primary`, `card`, `muted`, `accent`, `secondary`, `destructive`, `background`, `transparent`) or any CSS colour"},gradient:{schema:zod.z.unknown().optional(),design:"plumbing",description:'stops are token names or CSS colours. shape: "linear" (default, uses `angle`, default 135\xB0) | "radial" (uses `at` \u2014 CSS position like "top" / "30% 20%", default "center" \u2014 and optional `size` like "45rem 50rem", default farthest-corner)'},src:{schema:zod.z.string().optional(),design:"content",description:"image or video URL"},fit:{schema:zod.z.enum(["cover","contain","fill","none"]).optional(),design:"knob",description:'object-fit for image/video (default "cover")'},position:{schema:zod.z.string().optional(),design:"content",description:'CSS object/background position (default "center")'},repeat:{schema:zod.z.boolean().optional(),design:"knob",description:"tile the image (background-repeat) instead of a single <img>"},tileSize:{schema:zod.z.string().optional(),design:"content",description:'CSS background-size when repeating (e.g. "120px")'},preset:{schema:zod.z.string().optional(),design:"content",description:"shader preset id (see ThreeScene)"},fragmentShader:{schema:zod.z.string().optional(),design:"content",description:"custom GLSL (takes precedence over preset)"},palette:{schema:zod.z.unknown().optional(),design:"plumbing",description:"shader palette overrides; wrap tokens as `oklch(var(--token))`"},postPreset:{schema:zod.z.string().optional(),design:"content",description:"shader post-FX"},opacity:{schema:zod.z.number().optional(),design:"knob",description:"layer opacity 0\u20131"},blendMode:{schema:zod.z.unknown().optional(),design:"plumbing",description:"blend against the frame behind it"},radius:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",description:"match the frame's radius so the paint clips cleanly"}}};var Ei={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"],styleDefaults:{Badge:"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 border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80 rounded-md"},variantDefaults:{variant:"default",rounded:"default"},props:{variant:{schema:zod.z.enum(["default","secondary","destructive","outline","highlight","success","warning","info","success-soft","warning-soft","destructive-soft","info-soft","highlight-soft","success-outline","warning-outline","destructive-outline","info-outline"]).optional(),design:"knob"},rounded:{schema:zod.z.enum(["default","full"]).optional(),design:"knob",description:'"full" gives a pill shape'}}};var Li={name:"Banner",description:`A full-width horizontal strip surfacing system-level state, announcements, or first-run guidance \u2014 "you're previewing a draft", "investigating incident", "new feature available", "send your design to Figma". Distinct from Callout (inline boxed message in the layout flow), Toast (transient floating notification), Dialog (modal interrupt). Banner is what lives at the TOP of an AppShellHeader, page, or panel.`,import:"@gradeui/ui",aliases:["banner","notification banner","system banner","header banner","announcement bar","top bar","status bar","promo banner","incident banner","draft banner","first run banner","glass banner","sticky banner"],composesWith:["AppShellHeader (most common host \u2014 banner sits ABOVE the header content)","Button (in the action slot)","Link (inside the content)","Lucide icons (in the icon slot)"],styleDefaults:{Banner:"relative flex items-center gap-3 px-4 py-2.5 text-sm leading-relaxed border-b bg-muted text-foreground border-border [&>svg]:text-muted-foreground justify-between"},variantDefaults:{variant:"default",align:"between"},props:{variant:{schema:zod.z.enum(["default","info","success","warning","destructive","announcement"]).optional(),design:"knob",description:'intent + tonal direction. `default` is a calm muted strip; `announcement` is a low-alpha brand tint for "new feature" messaging; status variants pick up the soft+deep token pairs.'},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"material applied over the variant tint. `glass` for banners that sit over imagery / generative backdrops."},align:{schema:zod.z.enum(["start","center","between"]).optional(),design:"knob",description:"justify behaviour of the inner flex row. Defaults to `between` so the action / dismiss button right-align."},sticky:{schema:zod.z.boolean().optional(),design:"knob",description:"stick to the top of the scroll container."},dismissible:{schema:zod.z.boolean().optional(),design:"knob",description:"render the trailing X close button. Pair with `onDismiss` to react."},onDismiss:{schema:zod.z.unknown().optional(),design:"event"},icon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"leading icon slot. NOT inferred from variant; pass what fits the message."},action:{schema:zod.z.unknown().optional(),design:"plumbing",description:'trailing slot before dismiss. Usually a `<Button size="sm">` or `<a>`.'},role:{schema:zod.z.string().optional(),design:"plumbing",description:"overrides the automatic role mapping (warning/destructive \u2192 alert, others \u2192 status)."}}};var Di={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"],styleDefaults:{BreadcrumbList:"flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",BreadcrumbItem:"inline-flex items-center gap-1.5",BreadcrumbPage:"inline-flex items-center gap-1.5 px-0.5 text-xs font-medium text-foreground",BreadcrumbSeparator:"[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",BreadcrumbEllipsis:"flex h-5 w-5 items-center justify-center",BreadcrumbMenuTrigger:"h-3 w-3 text-muted-foreground transition-transform"},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 Ai={name:"Button",description:'Any clickable action. Use size="icon" for square icon-only buttons, variant="link" for inline links that should look like Button, variant="raised" for high-commitment / weighty actions where the chrome can afford a tactile "physical key" treatment. 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","raised button","pill button","key button"],composesWith:["Dialog","DropdownMenu","Tooltip","Card (in CardFooter)","Row","Form controls"],styleDefaults:{Button:"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 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-8 gap-1.5 px-3 text-base [&_svg]:size-4"},variantDefaults:{variant:"default",size:"md"},props:{variant:{schema:zod.z.enum(["default","destructive","outline","secondary","ghost","link","raised"]).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 Ii={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)"],styleDefaults:{Calendar:"bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent"},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 Hi={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)"],styleDefaults:{CalloutTitle:"mb-1 font-medium leading-none tracking-tight",CalloutDescription:"text-sm [&_p]:leading-relaxed"},props:{variant:{schema:zod.z.enum(["default","destructive","success","warning","info"]).optional(),design:"knob",description:"semantic colouring; `default` is neutral"}}};var zi={name:"Card",description:'Grouped content with a distinct surface \u2014 settings panels, dashboard tiles, list-of-cards layouts, marketing hero containers, AI suggestion overlays. Pair CardHeader (title + description) with CardContent and optional CardFooter (actions). Reach for `surface="glass"` whenever the card sits over a busy backdrop (gradient mesh, dot grid, generative art, image hero).',import:"@gradeui/ui",aliases:["card","group box","groupbox","panel","tile","surface","glass card","frosted card","floating panel","hero card","ai suggestion card","dashboard tile","settings panel"],subcomponents:["CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],composesWith:["Button (in CardFooter)","Badge","Separator","Avatar","Code","MediaSurface","any form controls"],styleDefaults:{Card:"gds-card rounded-xl border text-card-foreground shadow",CardHeader:"flex flex-col space-y-1.5 p-6",CardTitle:"font-semibold leading-none tracking-tight",CardDescription:"text-sm text-muted-foreground",CardContent:"p-6 pt-0",CardFooter:"flex items-center p-6 pt-0"},props:{surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the card surface is *made of*. `solid` is the default opaque `bg-card`. `translucent` is ~82% opacity for menu sheets. `glass` is ~58% opacity + 14px blur + edge highlight for floating panels. `glass-strong` is ~42% + 24px blur for full-page overlays. Composes with `shadow-elevation-*` (depth) and `gds-aura-*` (state signal)."},Each:{schema:zod.z.unknown(),design:"plumbing"}}};var Up=zod.z.enum(["start","center","end"]),Kp=zod.z.object({delay:zod.z.number().int().positive().optional(),pauseOnHover:zod.z.boolean().optional(),pauseWhenOffscreen:zod.z.boolean().optional()}),qp=zod.z.union([zod.z.boolean(),Kp]),_i={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:Up.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:qp.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 Bi={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")'],styleDefaults:{ChartContainer:"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",ChartTooltipContent:"font-medium",ChartLegendContent:"flex items-center justify-center gap-4"},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 Oi={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. For a label + description row, wrap in Field. When each option should be a whole selectable card (label + description, selected state on the card surface), use CheckboxCard.",import:"@gradeui/ui",aliases:["checkbox","tickbox","tick box","check","multi-select item"],composesWith:["Label (via htmlFor)","Field (label + description row)","CheckboxCard (whole-card selectable option)","Card","Form rows","Table (for row selection)"],styleDefaults:{Checkbox:"flex items-center justify-center text-current"},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 Vi={name:"CheckboxCard",description:"Multi-select where each option is a whole selectable card (add-ons, feature toggles, opt-ins). The whole card is the control, so focus and the checked state live on the card surface. Standalone (not in a group). Static content only \u2014 never nest an interactive control inside. For a plain checkbox + label row use Field instead.",import:"@gradeui/ui",aliases:["checkbox card","selectable card","multi-select card","add-on card","feature card","opt-in card"],composesWith:["Badge (in aside)","MediaSurface (custom children)","Stack / Grid (laying out several)"],props:{checked:{schema:zod.z.unknown().optional(),design:"plumbing",description:"standard checkbox state"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the check; selection shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content instead of label/description"}}};var Gi={name:"Code",description:'Read-only code surface for marketing heroes, docs, changelog entries, AI-output displays. Use `diff` for the "diff hero" pattern (before/after side-by-side or stacked). Use `reveal="lines"` with `trigger="inView"` for scroll-driven marketing pages. Use `reveal="typewriter"` for AI-output / chat-style displays. Use `bare` for inline code inside prose. NOT a code editor \u2014 for editable code, reach for an external editor primitive (CodeMirror / Monaco).',import:"@gradeui/ui",aliases:["code block","code","code snippet","code surface","syntax highlighted code","diff hero","diff view","diff block","changelog code","before after code","scroll-triggered code","typewriter code"],composesWith:["SectionBlock","Card","Tabs (for multi-file examples)","Carousel (slide-to-slide code progression)"],styleDefaults:{Code:"gds-code relative w-full overflow-hidden"},props:{source:{schema:zod.z.string(),design:"content",description:"the code to render"},language:{schema:zod.z.enum(["tsx","jsx","ts","js","html","css","json","bash","md","py","go","rust"]).optional(),design:"knob",description:"Prism language id; defaults to `tsx`"},highlight:{schema:zod.z.unknown().optional(),design:"plumbing",description:"1-indexed line number, array of numbers, or array of `[start, end]` ranges to emphasise"},diff:{schema:zod.z.unknown().optional(),design:"plumbing",description:"`{ added?: number[]; removed?: number[] }` \u2014 1-indexed lines for diff hero / changelog mode"},reveal:{schema:zod.z.enum(["none","lines","typewriter","diff"]).optional(),design:"knob",description:"entrance animation; defaults to `none`"},trigger:{schema:zod.z.enum(["mount","inView","manual"]).optional(),design:"knob",description:"what kicks the reveal off; defaults to `mount`"},play:{schema:zod.z.boolean().optional(),design:"knob",description:'for `trigger="manual"`, set true to play'},speed:{schema:zod.z.enum(["slow","normal","fast"]).optional(),design:"knob",description:"animation feel preset. `normal` (default) maps to the canonical 50ms/22ms staggers + 180ms pre-delay. Pick a feel; don't tune individual numbers unless you have to."},delay:{schema:zod.z.number().optional(),design:"knob",description:"explicit delay before reveal starts (ms) \u2014 overrides the `speed` preset"},stagger:{schema:zod.z.number().optional(),design:"knob",description:"explicit per-line stagger for `lines`/`diff`, per-token for `typewriter` (ms) \u2014 overrides the `speed` preset"},prompt:{schema:zod.z.string().optional(),design:"content",description:'string prepended to each line. Use for terminal emulation: `prompt="$ "` for bash, `prompt="> "` for PowerShell, `prompt=">>> "` for Python REPL. Prompt characters render in muted token colour, don\'t pick up the typewriter stagger, and are hidden from screen readers.'},showLineNumbers:{schema:zod.z.boolean().optional(),design:"knob"},filename:{schema:zod.z.string().optional(),design:"content",description:"optional label rendered in the header chrome"},wrap:{schema:zod.z.boolean().optional(),design:"knob",description:"wrap long lines instead of horizontal scroll"},bare:{schema:zod.z.boolean().optional(),design:"knob",description:"drop chrome (border, header, padding) \u2014 for inline use"},size:{schema:zod.z.enum(["xs","sm","md"]).optional(),design:"knob",description:"type-scale preset. `xs` (12px) for dense changelog cards / inline blocks; `sm` (14px, default) for marketing heroes and docs; `md` (16px) for focal-point displays."},height:{schema:zod.z.enum(["auto","number","string"]).optional(),design:"knob",description:'container sizing. `auto` (default) grows with content. Number = pixels (`300` \u2192 `300px`). String passes through as CSS (`"20rem"`, `"50vh"`).'},maxLines:{schema:zod.z.number().optional(),design:"knob",description:"cap the visible line count at exactly N line-heights. Wins over `height`. Inherits the current size's line-height automatically."}}};var Wi={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 ji={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"],styleDefaults:{Command:"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",CommandInput:"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",CommandList:"max-h-[300px] overflow-y-auto overflow-x-hidden",CommandGroup:"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",CommandSeparator:"-mx-1 h-px bg-border",CommandItem:"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",CommandShortcut:"ml-auto text-xs tracking-widest text-muted-foreground"},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 $i={name:"Composer",description:`THE PRIMITIVE for any text composition surface \u2014 Slack / Discord /
17
+ column tracks.`,import:"@gradeui/ui",subcomponents:["AppShellHeader","AppShellNav","AppShellAside","AppShellMain","AppShellFooter"],composesWith:["Stack","Row","Card","Button","Separator","Sidebar","Toolbar","any page content"],styleDefaults:{AppShell:"gds-app-shell min-h-screen w-full bg-background text-foreground grid",AppShellHeader:"gds-app-shell-header",AppShellNav:"gds-app-shell-nav border-b bg-background",AppShellAside:"gds-app-shell-aside min-w-0 border-r bg-background",AppShellMain:"gds-app-shell-main min-w-0 w-full",AppShellFooter:"gds-app-shell-footer border-t bg-background"},variantDefaults:{nav:"none"},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 ys={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)","Message (in the avatar slot)"],styleDefaults:{AvatarImage:"aspect-square h-full w-full"},props:{size:{schema:zod.z.enum(["2xs","xs","sm","md","lg","xl"]).optional(),design:"knob",description:"t-shirt scale, 20px \u2192 80px; default md (40px). xs for chat message rows, sm for comments/dense threads, lg/xl for profile headers. Prefer this over h-*/w-* className utilities."},src:{schema:zod.z.unknown().optional(),design:"plumbing"},alt:{schema:zod.z.unknown().optional(),design:"plumbing"},tone:{schema:zod.z.enum(["muted","primary","violet","amber","emerald","sky","rose","plum","lime"]).optional(),design:"knob",description:"tinted bg/text pair. Reach for explicit tones when each author needs a stable colour mapping (chat avatars, comment threads, member lists); default muted."},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"initials (or a small icon), rendered while the image loads or when it fails"}}};var xs={name:"BackgroundFill",description:"The background *paint* of a frame \u2014 a generative shader, image, video, gradient, repeating texture, or solid token rendered as a layer BEHIND the frame's content. Use it as the first child of a `relative` frame; it paints an `absolute inset-0`, `z-0`, `pointer-events-none` layer, so content carrying `relative z-10` sits on top. This is the canonical way to give any container a rich background \u2014 never drop a full-bleed `<ThreeScene>` or `<img>` as a free-standing sibling. For a sized, in-flow media element (a hero card, a thumbnail), use ThreeScene / MediaSurface / VideoPlayer directly instead.",import:"@gradeui/ui",aliases:["background","fill","frame fill","backdrop","surface fill","background image","background video","background gradient","background shader","texture","paint"],composesWith:["AppShell","Card","Stack","Row","Grid (any relative container)","ThreeScene (shader fill)","MediaSurface"],styleDefaults:{BackgroundFill:"absolute inset-0 h-full w-full"},props:{type:{schema:zod.z.enum(["none","solid","gradient","image","video","shader"]),design:"knob",description:"which paint to render (required)"},color:{schema:zod.z.string().optional(),design:"content",description:"solid fill; a token name (`primary`, `card`, `muted`, `accent`, `secondary`, `destructive`, `background`, `transparent`) or any CSS colour"},gradient:{schema:zod.z.unknown().optional(),design:"plumbing",description:'stops are token names or CSS colours. shape: "linear" (default, uses `angle`, default 135\xB0) | "radial" (uses `at` \u2014 CSS position like "top" / "30% 20%", default "center" \u2014 and optional `size` like "45rem 50rem", default farthest-corner)'},src:{schema:zod.z.string().optional(),design:"content",description:"image or video URL"},fit:{schema:zod.z.enum(["cover","contain","fill","none"]).optional(),design:"knob",description:'object-fit for image/video (default "cover")'},position:{schema:zod.z.string().optional(),design:"content",description:'CSS object/background position (default "center")'},repeat:{schema:zod.z.boolean().optional(),design:"knob",description:"tile the image (background-repeat) instead of a single <img>"},tileSize:{schema:zod.z.string().optional(),design:"content",description:'CSS background-size when repeating (e.g. "120px")'},preset:{schema:zod.z.string().optional(),design:"content",description:"shader preset id (see ThreeScene)"},fragmentShader:{schema:zod.z.string().optional(),design:"content",description:"custom GLSL (takes precedence over preset)"},palette:{schema:zod.z.unknown().optional(),design:"plumbing",description:"shader palette overrides; wrap tokens as `oklch(var(--token))`"},postPreset:{schema:zod.z.string().optional(),design:"content",description:"shader post-FX"},opacity:{schema:zod.z.number().optional(),design:"knob",description:"layer opacity 0\u20131"},blendMode:{schema:zod.z.unknown().optional(),design:"plumbing",description:"blend against the frame behind it"},radius:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",description:"match the frame's radius so the paint clips cleanly"}}};var ks={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"],styleDefaults:{Badge:"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 border-transparent bg-primary text-primary-foreground hover:bg-primary/80 rounded-md"},variantDefaults:{variant:"default",rounded:"default"},props:{variant:{schema:zod.z.enum(["default","secondary","destructive","outline","highlight","success","warning","info","success-soft","warning-soft","destructive-soft","info-soft","highlight-soft","success-outline","warning-outline","destructive-outline","info-outline"]).optional(),design:"knob"},rounded:{schema:zod.z.enum(["default","full"]).optional(),design:"knob",description:'"full" gives a pill shape'}}};var Ss={name:"Banner",description:`A full-width horizontal strip surfacing system-level state, announcements, or first-run guidance \u2014 "you're previewing a draft", "investigating incident", "new feature available", "send your design to Figma". Distinct from Callout (inline boxed message in the layout flow), Toast (transient floating notification), Dialog (modal interrupt). Banner is what lives at the TOP of an AppShellHeader, page, or panel.`,import:"@gradeui/ui",aliases:["banner","notification banner","system banner","header banner","announcement bar","top bar","status bar","promo banner","incident banner","draft banner","first run banner","glass banner","sticky banner"],composesWith:["AppShellHeader (most common host \u2014 banner sits ABOVE the header content)","Button (in the action slot)","Link (inside the content)","Lucide icons (in the icon slot)"],styleDefaults:{Banner:"relative flex items-center gap-3 px-4 py-2.5 text-sm leading-relaxed border-b bg-muted text-foreground border-border [&>svg]:text-muted-foreground justify-between"},variantDefaults:{variant:"default",align:"between"},props:{variant:{schema:zod.z.enum(["default","info","success","warning","destructive","announcement"]).optional(),design:"knob",description:'intent + tonal direction. `default` is a calm muted strip; `announcement` is a low-alpha brand tint for "new feature" messaging; status variants pick up the soft+deep token pairs.'},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"material applied over the variant tint. `glass` for banners that sit over imagery / generative backdrops."},align:{schema:zod.z.enum(["start","center","between"]).optional(),design:"knob",description:"justify behaviour of the inner flex row. Defaults to `between` so the action / dismiss button right-align."},sticky:{schema:zod.z.boolean().optional(),design:"knob",description:"stick to the top of the scroll container."},dismissible:{schema:zod.z.boolean().optional(),design:"knob",description:"render the trailing X close button. Pair with `onDismiss` to react."},onDismiss:{schema:zod.z.unknown().optional(),design:"event"},icon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"leading icon slot. NOT inferred from variant; pass what fits the message."},action:{schema:zod.z.unknown().optional(),design:"plumbing",description:'trailing slot before dismiss. Usually a `<Button size="sm">` or `<a>`.'},role:{schema:zod.z.string().optional(),design:"plumbing",description:"overrides the automatic role mapping (warning/destructive \u2192 alert, others \u2192 status)."}}};var Rs={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"],styleDefaults:{BreadcrumbList:"flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",BreadcrumbItem:"inline-flex items-center gap-1.5",BreadcrumbPage:"inline-flex items-center gap-1.5 px-0.5 text-xs font-medium text-foreground",BreadcrumbSeparator:"[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",BreadcrumbEllipsis:"flex h-5 w-5 items-center justify-center",BreadcrumbMenuTrigger:"h-3 w-3 text-muted-foreground transition-transform"},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:{schema:zod.z.unknown().optional(),design:"plumbing"},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 Cs={name:"Button",description:'Any clickable action. Use size="icon" for square icon-only buttons, variant="link" for inline links that should look like Button, the `raised` prop for high-commitment / weighty actions where the chrome can afford a tactile "physical key" treatment (composes with any variant; variant="raised" remains the neutral-key alias). 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","raised button","pill button","key button"],composesWith:["Dialog","DropdownMenu","Tooltip","Card (in CardFooter)","Row","Form controls"],styleDefaults:{Button:"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 bg-primary text-primary-foreground hover:bg-primary/90 h-8 gap-1.5 px-3 text-base [&_svg]:size-4"},variantDefaults:{variant:"default",size:"md"},props:{variant:{schema:zod.z.enum(["default","destructive","outline","secondary","ghost","link","raised"]).optional(),design:"knob",description:"`raised` here is a back-compat alias (the raised TRAIT on a neutral key surface); prefer the `raised` prop"},raised:{schema:zod.z.boolean().optional(),design:"knob",description:'presence TRAIT: tactile elevation (bevel + drop + hover glow + pressed sink) layered onto ANY variant \u2014 raised primary, raised outline, etc. Glow tone reads --btn-glow \u2192 --accent-glow \u2192 --selected-glow; override per-button via style={{ "--btn-glow": "var(--warning)" }}'},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 Ts={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)"],styleDefaults:{Calendar:"bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent"},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 Ps={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)"],styleDefaults:{CalloutTitle:"mb-1 font-medium leading-none tracking-tight",CalloutDescription:"text-sm [&_p]:leading-relaxed"},props:{variant:{schema:zod.z.enum(["default","destructive","success","warning","info"]).optional(),design:"knob",description:"semantic colouring; `default` is neutral"}}};var Ns={name:"Card",description:'Grouped content with a distinct surface \u2014 settings panels, dashboard tiles, list-of-cards layouts, marketing hero containers, AI suggestion overlays. Pair CardHeader (title + description) with CardContent and optional CardFooter (actions). Reach for `surface="glass"` whenever the card sits over a busy backdrop (gradient mesh, dot grid, generative art, image hero).',import:"@gradeui/ui",aliases:["card","group box","groupbox","panel","tile","surface","glass card","frosted card","floating panel","hero card","ai suggestion card","dashboard tile","settings panel"],subcomponents:["CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],composesWith:["Button (in CardFooter)","Badge","Separator","Avatar","Code","MediaSurface","any form controls"],styleDefaults:{Card:"gds-card rounded-xl border text-card-foreground shadow",CardHeader:"flex flex-col space-y-1.5 p-6",CardTitle:"font-semibold leading-none tracking-tight",CardDescription:"text-sm text-muted-foreground",CardContent:"p-6 pt-0",CardFooter:"flex items-center p-6 pt-0"},props:{surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the card surface is *made of*. `solid` is the default opaque `bg-card`. `translucent` is ~82% opacity for menu sheets. `glass` is ~58% opacity + 14px blur + edge highlight for floating panels. `glass-strong` is ~42% + 24px blur for full-page overlays. Composes with `shadow-elevation-*` (depth) and `gds-aura-*` (state signal)."},Each:{schema:zod.z.unknown(),design:"plumbing"}}};var em=zod.z.enum(["start","center","end"]),tm=zod.z.object({delay:zod.z.number().int().positive().optional(),pauseOnHover:zod.z.boolean().optional(),pauseWhenOffscreen:zod.z.boolean().optional()}),om=zod.z.union([zod.z.boolean(),tm]),Es={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:em.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:om.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 Ls={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")'],styleDefaults:{ChartContainer:"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",ChartTooltipContent:"font-medium",ChartLegendContent:"flex items-center justify-center gap-4"},props:{config:{schema:zod.z.unknown().optional(),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().optional(),design:"plumbing",description:"typically a single Recharts ResponsiveContainer or chart"},passes:{schema:zod.z.unknown().optional(),design:"plumbing",description:"pair with `content={<ChartTooltipContent />}`"},indicator:{schema:zod.z.enum(["dot","line","dashed"]).optional(),design:"knob"},hideLabel:{schema:zod.z.unknown().optional(),design:"plumbing"},hideIndicator:{schema:zod.z.unknown().optional(),design:"plumbing"},nameKey:{schema:zod.z.unknown().optional(),design:"plumbing"},labelKey:{schema:zod.z.unknown().optional(),design:"plumbing"},ChartLegend:{schema:zod.z.unknown(),design:"plumbing"}}};var Ds={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. For a label + description row, wrap in Field. When each option should be a whole selectable card (label + description, selected state on the card surface), use CheckboxCard.",import:"@gradeui/ui",aliases:["checkbox","tickbox","tick box","check","multi-select item"],composesWith:["Label (via htmlFor)","Field (label + description row)","CheckboxCard (whole-card selectable option)","Card","Form rows","Table (for row selection)"],styleDefaults:{Checkbox:"flex items-center justify-center text-current"},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 As={name:"CheckboxCard",description:"Multi-select where each option is a whole selectable card (add-ons, feature toggles, opt-ins). The whole card is the control, so focus and the checked state live on the card surface. Standalone (not in a group). Static content only \u2014 never nest an interactive control inside. For a plain checkbox + label row use Field instead.",import:"@gradeui/ui",aliases:["checkbox card","selectable card","multi-select card","add-on card","feature card","opt-in card"],composesWith:["Badge (in aside)","MediaSurface (custom children)","Stack / Grid (laying out several)"],props:{checked:{schema:zod.z.unknown().optional(),design:"plumbing",description:"standard checkbox state"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the check; selection shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content instead of label/description"}}};var Is={name:"Code",description:'Read-only code surface for marketing heroes, docs, changelog entries, AI-output displays. Use `diff` for the "diff hero" pattern (before/after side-by-side or stacked). Use `reveal="lines"` with `trigger="inView"` for scroll-driven marketing pages. Use `reveal="typewriter"` for AI-output / chat-style displays. Use `bare` for inline code inside prose. NOT a code editor \u2014 for editable code, reach for an external editor primitive (CodeMirror / Monaco).',import:"@gradeui/ui",aliases:["code block","code","code snippet","code surface","syntax highlighted code","diff hero","diff view","diff block","changelog code","before after code","scroll-triggered code","typewriter code"],composesWith:["SectionBlock","Card","Tabs (for multi-file examples)","Carousel (slide-to-slide code progression)"],styleDefaults:{Code:"gds-code relative w-full overflow-hidden"},props:{source:{schema:zod.z.string(),design:"content",description:"the code to render"},language:{schema:zod.z.enum(["tsx","jsx","ts","js","html","css","json","bash","md","py","go","rust"]).optional(),design:"knob",description:"Prism language id; defaults to `tsx`"},highlight:{schema:zod.z.unknown().optional(),design:"plumbing",description:"1-indexed line number, array of numbers, or array of `[start, end]` ranges to emphasise"},diff:{schema:zod.z.unknown().optional(),design:"plumbing",description:"`{ added?: number[]; removed?: number[] }` \u2014 1-indexed lines for diff hero / changelog mode"},reveal:{schema:zod.z.enum(["none","lines","typewriter","diff"]).optional(),design:"knob",description:"entrance animation; defaults to `none`"},trigger:{schema:zod.z.enum(["mount","inView","manual"]).optional(),design:"knob",description:"what kicks the reveal off; defaults to `mount`"},play:{schema:zod.z.boolean().optional(),design:"knob",description:'for `trigger="manual"`, set true to play'},speed:{schema:zod.z.enum(["slow","normal","fast"]).optional(),design:"knob",description:"animation feel preset. `normal` (default) maps to the canonical 50ms/22ms staggers + 180ms pre-delay. Pick a feel; don't tune individual numbers unless you have to."},delay:{schema:zod.z.number().optional(),design:"knob",description:"explicit delay before reveal starts (ms) \u2014 overrides the `speed` preset"},stagger:{schema:zod.z.number().optional(),design:"knob",description:"explicit per-line stagger for `lines`/`diff`, per-token for `typewriter` (ms) \u2014 overrides the `speed` preset"},prompt:{schema:zod.z.string().optional(),design:"content",description:'string prepended to each line. Use for terminal emulation: `prompt="$ "` for bash, `prompt="> "` for PowerShell, `prompt=">>> "` for Python REPL. Prompt characters render in muted token colour, don\'t pick up the typewriter stagger, and are hidden from screen readers.'},showLineNumbers:{schema:zod.z.boolean().optional(),design:"knob"},filename:{schema:zod.z.string().optional(),design:"content",description:"optional label rendered in the header chrome"},wrap:{schema:zod.z.boolean().optional(),design:"knob",description:"wrap long lines instead of horizontal scroll"},bare:{schema:zod.z.boolean().optional(),design:"knob",description:"drop chrome (border, header, padding) \u2014 for inline use"},size:{schema:zod.z.enum(["xs","sm","md"]).optional(),design:"knob",description:"type-scale preset. `xs` (12px) for dense changelog cards / inline blocks; `sm` (14px, default) for marketing heroes and docs; `md` (16px) for focal-point displays."},height:{schema:zod.z.enum(["auto","number","string"]).optional(),design:"knob",description:'container sizing. `auto` (default) grows with content. Number = pixels (`300` \u2192 `300px`). String passes through as CSS (`"20rem"`, `"50vh"`).'},maxLines:{schema:zod.z.number().optional(),design:"knob",description:"cap the visible line count at exactly N line-heights. Wins over `height`. Inherits the current size's line-height automatically."}}};var Hs={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().optional(),design:"plumbing",description:"the clickable header (often a Button asChild)"}}};var Fs={name:"Combobox",description:'Single-pick searchable picker \u2014 the single-select sibling of MultiSelect and the Linear "selectable badge" pattern (status / priority / assignee). Use triggerVariant="inline" with renderValue returning a Badge to make a value read as a clickable token that opens a command menu. For multiple selection use MultiSelect; for a small fixed list with no search use Select; for free-form command palettes use Command directly. Pass disabled (driven by a permission check) to show the value without letting the user edit it.',import:"@gradeui/ui",aliases:["combobox","single select","searchable select","picker","status picker","priority picker","assignee picker","command select","autocomplete","dropdown select","selectable badge","inline select","token select","linear combobox"],composesWith:["Popover","Command","Badge","Avatar","PropertyList","Table","Field"],styleDefaults:{Combobox:"ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50"},props:{options:{schema:zod.z.unknown(),design:"plumbing",description:"the selectable pool"},value:{schema:zod.z.string().optional(),design:"content",description:"controlled selection (wire onValueChange)"},defaultValue:{schema:zod.z.string().optional(),design:"content",description:"uncontrolled initial selection"},onValueChange:{schema:zod.z.unknown().optional(),design:"event",description:"fired with the next value, or null when cleared"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"trigger text when nothing is selected"},searchPlaceholder:{schema:zod.z.string().optional(),design:"content",description:"search-input placeholder"},emptyMessage:{schema:zod.z.string().optional(),design:"content",description:"shown when search returns no rows"},searchable:{schema:zod.z.boolean().optional(),design:"knob",description:"show the search input (default true)"},clearable:{schema:zod.z.boolean().optional(),design:"knob",description:"add a Clear row so the value can return to unset"},triggerVariant:{schema:zod.z.enum(["default","inline"]).optional(),design:"knob",description:"default = form-control surface (like Select); inline = chrome-free token trigger"},renderValue:{schema:zod.z.unknown().optional(),design:"plumbing",description:"render the selected value yourself (e.g. a Badge); falls back to icon + label"},hideChevron:{schema:zod.z.boolean().optional(),design:"knob",description:"drop the trailing chevron (inline token look)"},disabled:{schema:zod.z.boolean().optional(),design:"knob",description:"lock to a read-only display of the current value"},align:{schema:zod.z.enum(["start","center","end"]).optional(),design:"knob",description:"popover alignment"}}};var zs={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"],styleDefaults:{Command:"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",CommandInput:"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",CommandList:"max-h-[300px] overflow-y-auto overflow-x-hidden",CommandGroup:"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",CommandSeparator:"-mx-1 h-px bg-border",CommandItem:"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",CommandShortcut:"ml-auto text-xs tracking-widest text-muted-foreground"},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().optional(),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().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event",description:"when you want the command palette mounted in a modal (cmd+k pattern)"}}};var Bs={name:"Composer",description:`THE PRIMITIVE for any text composition surface \u2014 Slack / Discord /
18
18
  Teams chat input, AI chat / copilot prompt box, comment thread input,
19
19
  GitHub / Linear / Jira comment box, Reddit / Twitter reply box,
20
20
  Notion / Linear document body, email composer, post body, anywhere
@@ -44,7 +44,7 @@ toolbar buttons render when \`toolbar\` is on.
44
44
 
45
45
  Shares the lib/demo step vocabulary with <Code> so scripted
46
46
  typing/format/mention demos animate in the same rhythm as your
47
- terminal demos.`,import:"@gradeui/ui",composesWith:["AIChatComposer (preset wrapping this with paperclip + send + attachments)","ComposerReply (preset for comment threads)","AIChat (uses AIChatComposer internally)","Card (host above for reply boxes)",'Avatar (in leftActions slot for "your" avatar next to the input)'],styleDefaults:{ComposerToolbar:"flex flex-wrap items-center gap-0.5",AttachmentChips:"absolute -top-1.5 -right-1.5 h-5 w-5 rounded-full",ComposerInner:"w-full"},props:{placeholder:{schema:zod.z.string().optional(),design:"content"},initialText:{schema:zod.z.string().optional(),design:"content",description:"plain text content to seed on mount"},initialJson:{schema:zod.z.string().optional(),design:"content",description:"Lexical state JSON (from a previous onSubmit round-trip)"},formats:{schema:zod.z.unknown().optional(),design:"plumbing",description:"available formats (defaults to bold/italic/underline/strikethrough/code/h1/h2/blockquote/ul/ol); pass false for plain text only"},toolbar:{schema:zod.z.boolean().optional(),design:"knob",description:"show the formatting toolbar above the editor; default false"},triggers:{schema:zod.z.unknown().optional(),design:"plumbing",description:'mention/slash configs, eg. `[{ char: "@", items: people }, { char: "/", items: commands }]`'},attachments:{schema:zod.z.boolean().optional(),design:"knob",description:"enable image paste + paperclip when true/object; default off"},onSubmit:{schema:zod.z.unknown().optional(),design:"event"},isLoading:{schema:zod.z.boolean().optional(),design:"knob",description:"disables editor, swaps default Send for Stop"},onStop:{schema:zod.z.unknown().optional(),design:"event"},maxLength:{schema:zod.z.number().optional(),design:"knob"},autoFocus:{schema:zod.z.boolean().optional(),design:"plumbing"},submitOnEnter:{schema:zod.z.boolean().optional(),design:"knob",description:"default true (Shift-Enter still inserts newline)"},leftActions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"override the default paperclip"},rightActions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"override the default Send/Stop"},hideSend:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the default Send without replacing it"},steps:{schema:zod.z.unknown().optional(),design:"plumbing",description:"scripted demo sequence"},trigger:{schema:zod.z.unknown().optional(),design:"plumbing",description:'"mount" | "inView" | "manual"; default "mount"'},play:{schema:zod.z.boolean().optional(),design:"knob",description:'for trigger="manual"'},speed:{schema:zod.z.unknown().optional(),design:"plumbing",description:'"slow" | "normal" | "fast"; default "normal"'},loop:{schema:zod.z.boolean().optional(),design:"knob"},loopDelay:{schema:zod.z.number().optional(),design:"knob",description:"ms between loop iterations, default 2000"},readOnly:{schema:zod.z.boolean().optional(),design:"knob",description:"disables editing AND focusability; programmatic playback still works; use for marketing demos so the script doesn't steal focus"},bare:{schema:zod.z.boolean().optional(),design:"knob",description:"strip the card chrome"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Ui={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)"],styleDefaults:{DatePicker:"w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",DateRangePicker:"w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground"},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 Ki={name:"Dialog",description:'Modal interruptions \u2014 confirmations, focused forms, detail views, AI suggestion sheets. 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","glass modal","frosted modal","ai suggestion modal"],subcomponents:["DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","DialogClose"],composesWith:["Button (as DialogTrigger asChild","and inside DialogFooter)","Input/Textarea/Select inside DialogContent","Code (for changelog / diff modals)","MediaSurface (for image / preview modals)"],styleDefaults:{DialogOverlay:"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",DialogContent:"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border 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",DialogHeader:"flex flex-col space-y-1.5 text-center sm:text-left",DialogFooter:"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",DialogTitle:"text-lg font-semibold leading-none tracking-tight",DialogDescription:"text-sm text-muted-foreground"},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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the modal panel is *made of*. Defaults to `solid` (opaque `bg-background`). `glass` lets the page show through softly \u2014 pairs with rich backdrops or AI-suggestion modals."},accepts:{schema:zod.z.unknown(),design:"plumbing"},used:{schema:zod.z.unknown(),design:"plumbing"}}};var qi={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","glass menu","frosted menu","ios menu","hig 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)"],styleDefaults:{DropdownMenuSubTrigger:"flex cursor-default select-none items-center gap-2 rounded-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:shrink-0",DropdownMenuSubContent:"z-50 min-w-[8rem] overflow-hidden rounded-md border 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]",DropdownMenuContent:"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border text-popover-foreground shadow-md",DropdownMenuItem:"relative flex cursor-default select-none items-center gap-2 rounded-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:shrink-0",DropdownMenuCheckboxItem:"relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",DropdownMenuRadioItem:"relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",DropdownMenuLabel:"font-semibold",DropdownMenuSeparator:"-mx-1 my-1 h-px bg-muted",DropdownMenuShortcut:"ml-auto text-xs tracking-widest opacity-60"},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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the menu surface is *made of*. `solid` (default) is `bg-popover`. `translucent` matches Apple HIG / iOS menu sheets. `glass` for menus floating over rich canvases."},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:'menu density; cascades to every item (Item, Checkbox, Radio, SubTrigger, Label) via context so a compact trigger gets a compact menu. Use "xs" in dense tool panels.'},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 Zi={name:"Field",description:'Pair a bare control with a label and optional description in a row, with id + aria-describedby wired automatically. Use layout="setting" for the classic settings row (label on the left, Switch on the right). For a selectable CARD where the whole surface is the control, use RadioCard / CheckboxCard / SwitchCard instead.',import:"@gradeui/ui",aliases:["field","form field","control row","label and description","two line checkbox","option row","setting row","toggle row"],composesWith:["Checkbox","RadioGroup","RadioGroupItem","Switch","Badge (inside Field.Trailing)"],styleDefaults:{FieldLabel:"text-sm font-medium leading-none text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70",FieldDescription:"text-sm text-muted-foreground",FieldTrailing:"flex shrink-0 items-center gap-2",FieldRoot:"flex gap-3"},props:{layout:{schema:zod.z.enum(["option","setting"]).optional(),design:"knob",description:"option (default): control leads, text beside it; setting: text leads, control pinned trailing"},children:{schema:zod.z.unknown(),design:"plumbing",description:"order does not matter"}}};var Ji={name:"FillPicker",description:"Grade's paint picker \u2014 the control for choosing a frame's background fill, modelled on Figma's fill popover. A fill-type icon row (solid \xB7 gradient \xB7 image \xB7 pattern \xB7 video \xB7 shader) switches the panel below; a global opacity sits at the foot. Emits a FillValue that maps 1:1 onto BackgroundFill props. This is a Studio/inspector chrome control \u2014 pair it with BackgroundFill, which renders the chosen paint. Not for app content.",import:"@gradeui/ui",aliases:["fill picker","paint picker","background picker","fill chooser","fill popover"],composesWith:["BackgroundFill (renders the FillValue)","Popover (host it in a popover)","ShaderPresetPicker (the shader tab)","the inspector Fill section"],styleDefaults:{Swatch:"h-7 w-7 rounded-md border border-border/60 transition-shadow",FillPicker:"flex flex-col gap-3"},props:{value:{schema:zod.z.unknown(),design:"plumbing",description:"current paint ({ type, color?, gradient?, src?, fit?, repeat?, tileSize?, preset?, palette?, postPreset?, opacity? }) (required)"},onChange:{schema:zod.z.unknown(),design:"event",description:"called on any change (required)"}}};var Qi={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 es={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"],styleDefaults:{Grid:"gds-grid grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 items-stretch"},variantDefaults:{cols:"3",gap:"md",align:"stretch"},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 ts={name:"HoverCard",description:"Rich preview content surfaced on hover \u2014 user profile mini-cards on @-mentions, link previews, definition popups, layer-thumbnail peeks. 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","glass preview","frosted preview"],subcomponents:["HoverCardTrigger","HoverCardContent"],composesWith:["Avatar (user preview)","Card (richer content)","Link (the trigger)","MediaSurface (link/layer previews)","Code (snippet previews)"],styleDefaults:{HoverCardContent:"z-50 w-64 rounded-md border 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-hover-card-content-transform-origin]"},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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the preview surface is *made of*. `solid` (default) is `bg-popover`. `glass` for hover previews over rich content (a media feed, a layout canvas)."}}};var os={name:"Input",description:'Any single-line text entry. Always pair with a Label for accessibility. Use startSlot/endSlot for icons, prefixes and units instead of hand-positioning absolute children; use size="sm"/"xs" in dense tool panels.',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","unit input","input with icon"],composesWith:["Label","Form","Card (in CardContent)","Button (form submit)"],styleDefaults:{Input:"pointer-events-none absolute inset-y-0 left-0 flex items-center text-muted-foreground [&_svg]:size-3.5"},props:{type:{schema:zod.z.string().optional(),design:"content"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"hint text shown while the input is empty. Model it explicitly (not just a native passthrough) so generated screens carry placeholders and the validator accepts them."},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density. `default` (h-9) for forms; `sm` (h-8) and `xs` (h-7) for dense tool panels like the inspector. NOTE: pre-unification scale \u2014 see Figma parity audit; due to migrate to the t-shirt scale (xs 24 | sm 28 | md 32 | lg 40, default\u2192md)."},startSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"adornment rendered inside the leading edge (icon, prefix, currency symbol). Non-interactive by default so clicks focus the input."},endSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:'adornment rendered inside the trailing edge (unit like "px", a clear button, a stepper). Same pointer rules as startSlot.'}}};var as={name:"Label",description:'Every Input / Textarea / Checkbox / Switch / RadioGroup. Always use htmlFor so clicking the label focuses the control. Match `size` to the field it labels (size="xs" label over a size="xs" input).',import:"@gradeui/ui",aliases:["label","form label","field label","caption"],composesWith:["Input","Textarea","Checkbox","Switch","RadioGroup","Select"],styleDefaults:{Label:"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-sm"},variantDefaults:{size:"default"},props:{htmlFor:{schema:zod.z.string().optional(),design:"content",description:"binds to the input's id"},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"text size, mirrors Input/Select/Textarea so a field and its label scale together. default = text-sm; xs = 11px for dense tool panels."}}};var ns={name:"Logo",description:"ALWAYS use <Logo> wherever a screen carries a brand mark \u2014",import:"@gradeui/ui",aliases:["logo","brand","brandmark","wordmark","lockup","brand logo","app logo","logotype","grade mark","g arrow"],composesWith:["AppShell","AppShellHeader","Sidebar","SidebarHeader","Toolbar","MotionOverlay","Row","Stack"],styleDefaults:{Logo:"gds-logo inline-flex shrink-0 select-none items-center"},props:{sources:{schema:zod.z.unknown().optional(),design:"plumbing",description:"artwork keyed by lockup then appearance:"}}};var is={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.unknown().optional(),design:"plumbing",description:'MapLibre only (provider="maplibre"). Optional everywhere: omit on `gradeui.com`/`localhost` and the referrer-locked demo key is used; set it only when embedding off-domain. The contract never requires it.'},accessToken:{schema:zod.z.unknown().optional(),design:"plumbing",description:'Mapbox only. Pass it whenever provider="mapbox" \u2014 the component itself enforces this at runtime (throws a clear `provider="mapbox" requires an accessToken prop` error via onError if missing). It is OPTIONAL in the contract on purpose, so the validator never demands it from maplibre/google maps.'},apiKey:{schema:zod.z.unknown().optional(),design:"plumbing",description:'Google only. Pass it whenever provider="google" \u2014 the component enforces it at runtime (throws `provider="google" requires an apiKey prop` via onError if missing). OPTIONAL in the contract on purpose, so it\'s never demanded from maplibre/mapbox.'},id:{schema:zod.z.unknown(),design:"plumbing",description:"string. Required. Stable marker id; pair with Map's `hoveredId` for list\u2194map hover sync."},at:{schema:zod.z.unknown(),design:"plumbing",description:"`[lng, lat]` tuple. Required. THE coordinate prop. ALWAYS lng first. The prop is literally named `at` \u2014 it is NOT `lngLat`, `coordinates`, `position`, `latLng`, `center`, or separate `lng`/`lat` props. Passing any other name leaves the marker coord `undefined`, and MapLibre throws on mount, crashing the WHOLE screen in every renderer. When in doubt, copy the `airbnb-listings` scaffold: `<MapMarker id={l.id} at={l.coords}>`."},anchor:{schema:zod.z.unknown(),design:"plumbing",description:'"center" | "bottom" (default "bottom", pin tip sits on the coord). Only these two values.'},onClick:{schema:zod.z.unknown(),design:"event",description:"handler called with `({ id, coords, native })` on marker click."},children:{schema:zod.z.unknown(),design:"plumbing",description:"DOM rendered as the marker (Badge, Card, Avatar, or any element). Inherits `--gds-*` tokens."}}};var Zp=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()}),Xp=zod.z.object({kind:zod.z.literal("tv-show"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Jp=zod.z.object({kind:zod.z.literal("movie"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),Qp=zod.z.object({kind:zod.z.literal("game"),title:zod.z.string(),description:zod.z.string().optional()}),eu=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()}),tu=zod.z.object({kind:zod.z.literal("poster"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),ou=zod.z.object({kind:zod.z.literal("portrait"),name:zod.z.string().optional(),role:zod.z.string().optional()}),ru=zod.z.object({kind:zod.z.literal("landscape"),location:zod.z.string().optional(),mood:zod.z.string().optional()}),au=zod.z.object({kind:zod.z.literal("product"),name:zod.z.string().optional(),brand:zod.z.string().optional()}),nu=zod.z.object({kind:zod.z.literal("food"),dish:zod.z.string().optional(),cuisine:zod.z.string().optional()}),iu=zod.z.object({kind:zod.z.literal("generic"),prompt:zod.z.string()}),su=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")})]),lu=zod.z.union([Zp,Xp,Jp,Qp,eu,tu,ou,ru,au,nu,iu,su]),du=zod.z.enum(["video","square","portrait","wide","auto"]),cu=zod.z.enum(["none","sm","md","lg","xl"]),pu=zod.z.enum(["album","tv-show","movie","game","book","portrait","landscape","poster","product","food","video","audio","embed","3d","generic"]),uu=zod.z.union([zod.z.literal("auto"),zod.z.literal("icon"),zod.z.literal("none")]),an={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:pu.optional(),design:"knob",group:"image",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:du.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:cu.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:uu.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",group:"image",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",group:"image",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:lu.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"}}}};var ss={name:"Message",description:`The canonical "avatar + author + timestamp + body" row. THE PRIMITIVE
47
+ terminal demos.`,import:"@gradeui/ui",composesWith:["AIChatComposer (preset wrapping this with paperclip + send + attachments)","ComposerReply (preset for comment threads)","AIChat (uses AIChatComposer internally)","Card (host above for reply boxes)",'Avatar (in leftActions slot for "your" avatar next to the input)'],styleDefaults:{ComposerToolbar:"flex flex-wrap items-center gap-0.5",AttachmentChips:"absolute -top-1.5 -right-1.5 h-5 w-5 rounded-full",ComposerInner:"w-full"},props:{placeholder:{schema:zod.z.string().optional(),design:"content"},initialText:{schema:zod.z.string().optional(),design:"content",description:"plain text content to seed on mount"},initialJson:{schema:zod.z.string().optional(),design:"content",description:"Lexical state JSON (from a previous onSubmit round-trip)"},formats:{schema:zod.z.unknown().optional(),design:"plumbing",description:"available formats (defaults to bold/italic/underline/strikethrough/code/h1/h2/blockquote/ul/ol); pass false for plain text only"},toolbar:{schema:zod.z.boolean().optional(),design:"knob",description:"show the formatting toolbar above the editor; default false"},triggers:{schema:zod.z.unknown().optional(),design:"plumbing",description:'mention/slash configs, eg. `[{ char: "@", items: people }, { char: "/", items: commands }]`'},attachments:{schema:zod.z.boolean().optional(),design:"knob",description:"enable image paste + paperclip when true/object; default off"},onSubmit:{schema:zod.z.unknown().optional(),design:"event"},isLoading:{schema:zod.z.boolean().optional(),design:"knob",description:"disables editor, swaps default Send for Stop"},onStop:{schema:zod.z.unknown().optional(),design:"event"},maxLength:{schema:zod.z.number().optional(),design:"knob"},autoFocus:{schema:zod.z.boolean().optional(),design:"plumbing"},submitOnEnter:{schema:zod.z.boolean().optional(),design:"knob",description:"default true (Shift-Enter still inserts newline)"},leftActions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"override the default paperclip"},rightActions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"override the default Send/Stop"},hideSend:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the default Send without replacing it"},steps:{schema:zod.z.unknown().optional(),design:"plumbing",description:"scripted demo sequence"},trigger:{schema:zod.z.unknown().optional(),design:"plumbing",description:'"mount" | "inView" | "manual"; default "mount"'},play:{schema:zod.z.boolean().optional(),design:"knob",description:'for trigger="manual"'},speed:{schema:zod.z.unknown().optional(),design:"plumbing",description:'"slow" | "normal" | "fast"; default "normal"'},loop:{schema:zod.z.boolean().optional(),design:"knob"},loopDelay:{schema:zod.z.number().optional(),design:"knob",description:"ms between loop iterations, default 2000"},readOnly:{schema:zod.z.boolean().optional(),design:"knob",description:"disables editing AND focusability; programmatic playback still works; use for marketing demos so the script doesn't steal focus"},bare:{schema:zod.z.boolean().optional(),design:"knob",description:"strip the card chrome"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var Vs={name:"DataView",description:'One dataset, drawn as a table, a list of cards, or a grid \u2014 without re-typing the TanStack boilerplate (sortable headers, flexRender, selection, view switch) on every page. Hand it data + a columns schema; columns declare a `type` (badge/tags/number/currency/percent/date/boolean/url/text) that DataView renders, with a `cell` override for bespoke cells (avatars, relations). The view toggle can live anywhere \u2014 `useDataView()` holds the state so a `<DataViewToggle>` or `<DataViewColumns>` in a page header drives a `<DataView>` lower down. Mark a column `pinned="left"` (with a `width`) for a fixed column and `stickyHeader` to freeze the header. For a single record\'s fields use PropertyList; for the raw table primitive use Table.',import:"@gradeui/ui",aliases:["data view","data table","datatable","data grid","dataview","table view","card view","grid view","list view","gallery","records list","master list","tanstack table","sortable table","column visibility","pinned column","frozen column","sticky header","view switcher"],composesWith:["Table","Card","Badge","Avatar","ToggleGroup","DropdownMenu","PropertyList","Combobox"],props:{data:{schema:zod.z.unknown(),design:"plumbing",description:"the rows"},columns:{schema:zod.z.unknown(),design:"plumbing",description:"the schema; one list drives table, cards, and grid"},getRowId:{schema:zod.z.unknown().optional(),design:"plumbing",description:"defaults to row.id"},view:{schema:zod.z.unknown().optional(),design:"plumbing",description:"controlled or uncontrolled view"},views:{schema:zod.z.unknown().optional(),design:"plumbing",description:"allowed views; one entry = single view, no toggle"},activeId:{schema:zod.z.unknown().optional(),design:"plumbing",description:"the selected row; click emits it"},sorting:{schema:zod.z.unknown().optional(),design:"plumbing",description:"TanStack SortingState"},columnVisibility:{schema:zod.z.unknown().optional(),design:"plumbing",description:"which fields show"},stickyHeader:{schema:zod.z.boolean().optional(),design:"knob",description:"freeze the header row on scroll"},toolbar:{schema:zod.z.boolean().optional(),design:"knob",description:"render the built-in columns menu + view toggle above the view"},renderCard:{schema:zod.z.unknown().optional(),design:"plumbing",description:"override card / grid tiles"},emptyMessage:{schema:zod.z.unknown().optional(),design:"plumbing"}}};var _s={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)"],styleDefaults:{DatePicker:"w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",DateRangePicker:"w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground"},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 Os={name:"Dialog",description:'Modal interruptions \u2014 confirmations, focused forms, detail views, AI suggestion sheets. 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","glass modal","frosted modal","ai suggestion modal"],subcomponents:["DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","DialogClose"],composesWith:["Button (as DialogTrigger asChild","and inside DialogFooter)","Input/Textarea/Select inside DialogContent","Code (for changelog / diff modals)","MediaSurface (for image / preview modals)"],styleDefaults:{DialogOverlay:"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",DialogContent:"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border 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",DialogHeader:"flex flex-col space-y-1.5 text-center sm:text-left",DialogFooter:"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",DialogTitle:"text-lg font-semibold leading-none tracking-tight",DialogDescription:"text-sm text-muted-foreground"},props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event",description:"Radix controlled/uncontrolled pattern"},asChild:{schema:zod.z.enum(["wrap a Button"]).optional(),design:"plumbing"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the modal panel is *made of*. Defaults to `solid` (opaque `bg-background`). `glass` lets the page show through softly \u2014 pairs with rich backdrops or AI-suggestion modals."},accepts:{schema:zod.z.unknown().optional(),design:"plumbing"},used:{schema:zod.z.unknown().optional(),design:"plumbing"}}};var Gs={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","glass menu","frosted menu","ios menu","hig 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)"],styleDefaults:{DropdownMenuSubContent:"z-50 min-w-[8rem] overflow-hidden rounded-md border 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]",DropdownMenuContent:"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border text-popover-foreground shadow-md",DropdownMenuItem:"relative flex cursor-default select-none items-center gap-2 rounded-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:shrink-0",DropdownMenuCheckboxItem:"relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",DropdownMenuRadioItem:"relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",DropdownMenuLabel:"font-semibold",DropdownMenuSeparator:"-mx-1 my-1 h-px bg-muted",DropdownMenuShortcut:"ml-auto text-xs tracking-widest opacity-60"},props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},defaultOpen:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},modal:{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"]).optional(),design:"knob"},side:{schema:zod.z.enum(["top","right","bottom","left"]).optional(),design:"knob"},sideOffset:{schema:zod.z.number().optional(),design:"knob"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the menu surface is *made of*. `solid` (default) is `bg-popover`. `translucent` matches Apple HIG / iOS menu sheets. `glass` for menus floating over rich canvases."},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:'menu density; cascades to every item (Item, Checkbox, Radio, SubTrigger, Label) via context so a compact trigger gets a compact menu. Use "xs" in dense tool panels.'},onSelect:{schema:zod.z.unknown().optional(),design:"event"},disabled:{schema:zod.z.unknown().optional(),design:"plumbing"},inset:{schema:zod.z.unknown().optional(),design:"plumbing"},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().optional(),design:"plumbing",description:"right-aligned kbd hint"}}};var Us={name:"Field",description:'Pair a bare control with a label and optional description in a row, with id + aria-describedby wired automatically. Use layout="setting" for the classic settings row (label on the left, Switch on the right). For a selectable CARD where the whole surface is the control, use RadioCard / CheckboxCard / SwitchCard instead.',import:"@gradeui/ui",aliases:["field","form field","control row","label and description","two line checkbox","option row","setting row","toggle row"],composesWith:["Checkbox","RadioGroup","RadioGroupItem","Switch","Badge (inside Field.Trailing)"],styleDefaults:{FieldLabel:"text-sm font-medium leading-none text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70",FieldDescription:"text-sm text-muted-foreground",FieldTrailing:"flex shrink-0 items-center gap-2",FieldRoot:"flex gap-3"},props:{layout:{schema:zod.z.enum(["option","setting"]).optional(),design:"knob",description:"option (default): control leads, text beside it; setting: text leads, control pinned trailing"},children:{schema:zod.z.unknown(),design:"plumbing",description:"order does not matter"}}};var js={name:"FillPicker",description:"Grade's paint picker \u2014 the control for choosing a frame's background fill, modelled on Figma's fill popover. A fill-type icon row (solid \xB7 gradient \xB7 image \xB7 pattern \xB7 video \xB7 shader) switches the panel below; a global opacity sits at the foot. Emits a FillValue that maps 1:1 onto BackgroundFill props. This is a Studio/inspector chrome control \u2014 pair it with BackgroundFill, which renders the chosen paint. Not for app content.",import:"@gradeui/ui",aliases:["fill picker","paint picker","background picker","fill chooser","fill popover"],composesWith:["BackgroundFill (renders the FillValue)","Popover (host it in a popover)","ShaderPresetPicker (the shader tab)","the inspector Fill section"],styleDefaults:{Swatch:"h-7 w-7 rounded-md border border-border/60 transition-shadow",FillPicker:"flex flex-col gap-3"},props:{value:{schema:zod.z.unknown(),design:"plumbing",description:"current paint ({ type, color?, gradient?, src?, fit?, repeat?, tileSize?, preset?, palette?, postPreset?, opacity? }) (required)"},onChange:{schema:zod.z.unknown(),design:"event",description:"called on any change (required)"}}};var Ks={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 qs={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"],styleDefaults:{Grid:"gds-grid grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 items-stretch"},variantDefaults:{cols:"3",gap:"md",align:"stretch"},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 Ys={name:"HoverCard",description:"Rich preview content surfaced on hover \u2014 user profile mini-cards on @-mentions, link previews, definition popups, layer-thumbnail peeks. 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","glass preview","frosted preview"],subcomponents:["HoverCardTrigger","HoverCardContent"],composesWith:["Avatar (user preview)","Card (richer content)","Link (the trigger)","MediaSurface (link/layer previews)","Code (snippet previews)"],styleDefaults:{HoverCardContent:"z-50 w-64 rounded-md border 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-hover-card-content-transform-origin]"},props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},defaultOpen:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},openDelay:{schema:zod.z.unknown().optional(),design:"plumbing"},closeDelay:{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"},align:{schema:zod.z.unknown().optional(),design:"plumbing"},sideOffset:{schema:zod.z.unknown().optional(),design:"plumbing"},alignOffset:{schema:zod.z.unknown().optional(),design:"plumbing"},className:{schema:zod.z.unknown().optional(),design:"plumbing"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the preview surface is *made of*. `solid` (default) is `bg-popover`. `glass` for hover previews over rich content (a media feed, a layout canvas)."}}};var Zs={name:"Input",description:'Any single-line text entry. Always pair with a Label for accessibility. Use startSlot/endSlot for icons, prefixes and units instead of hand-positioning absolute children; use size="sm"/"xs" in dense tool panels.',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","unit input","input with icon"],composesWith:["Label","Form","Card (in CardContent)","Button (form submit)"],styleDefaults:{Input:"pointer-events-none absolute inset-y-0 left-0 flex items-center text-muted-foreground [&_svg]:size-3.5"},props:{type:{schema:zod.z.string().optional(),design:"content"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"hint text shown while the input is empty. Model it explicitly (not just a native passthrough) so generated screens carry placeholders and the validator accepts them."},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density. `default` (h-9) for forms; `sm` (h-8) and `xs` (h-7) for dense tool panels like the inspector. NOTE: pre-unification scale \u2014 see Figma parity audit; due to migrate to the t-shirt scale (xs 24 | sm 28 | md 32 | lg 40, default\u2192md)."},startSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:"adornment rendered inside the leading edge (icon, prefix, currency symbol). Non-interactive by default so clicks focus the input."},endSlot:{schema:zod.z.unknown().optional(),design:"plumbing",description:'adornment rendered inside the trailing edge (unit like "px", a clear button, a stepper). Same pointer rules as startSlot.'}}};var Js={name:"Label",description:'Every Input / Textarea / Checkbox / Switch / RadioGroup. Always use htmlFor so clicking the label focuses the control. Match `size` to the field it labels (size="xs" label over a size="xs" input).',import:"@gradeui/ui",aliases:["label","form label","field label","caption"],composesWith:["Input","Textarea","Checkbox","Switch","RadioGroup","Select"],styleDefaults:{Label:"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-sm"},variantDefaults:{size:"default"},props:{htmlFor:{schema:zod.z.string().optional(),design:"content",description:"binds to the input's id"},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"text size, mirrors Input/Select/Textarea so a field and its label scale together. default = text-sm; xs = 11px for dense tool panels."}}};var Qs={name:"Logo",description:"ALWAYS use <Logo> wherever a screen carries a brand mark \u2014",import:"@gradeui/ui",aliases:["logo","brand","brandmark","wordmark","lockup","brand logo","app logo","logotype","grade mark","g arrow"],composesWith:["AppShell","AppShellHeader","Sidebar","SidebarHeader","Toolbar","MotionOverlay","Row","Stack"],styleDefaults:{Logo:"gds-logo inline-flex shrink-0 select-none items-center"},props:{sources:{schema:zod.z.unknown().optional(),design:"plumbing",description:"artwork keyed by lockup then appearance: { square?: { light?, dark?, mono? }, horizontal?: {...}, icon?: {...} }. Each slot is any node (inline <svg>, <img>, component). OMIT ENTIRELY and the GRADE MARK renders (the square G-arrow, painted with currentColor so it sits correctly on any surface). A bare <Logo /> is always correct branding."},size:{schema:zod.z.enum(["sm","md","lg","xl"]).optional(),design:"knob",description:'height of the mark: 20 / 28 / 40 / 56px (a raw pixel number also works). Width is intrinsic (square/icon 1:1, horizontal keeps its ratio). Default "md"; use "sm" in dense rails and toolbars.'},lockup:{schema:zod.z.enum(["square","horizontal","icon"]).optional(),design:"knob",description:'which shape to show; falls back to the next-best available artwork. Default "horizontal".'},mode:{schema:zod.z.enum(["light","dark"]).optional(),design:"knob",description:'the background the logo SITS ON, selecting light/dark artwork. Explicit, not theme-coupled. Default "light".'},mono:{schema:zod.z.boolean().optional(),design:"knob",description:"render the single-colour treatment; inherits currentColor from the parent. Default false."},label:{schema:zod.z.string().optional(),design:"content",description:'accessible name (aria-label + role="img"); pair with decorative when the brand name is already beside it.'},decorative:{schema:zod.z.boolean().optional(),design:"knob",description:"aria-hidden, no role; use when text nearby names the brand."},href:{schema:zod.z.string().optional(),design:"content",description:"renders the logo as a link (logo-links-home)."},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var el={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.'},onHoveredIdChange:{schema:zod.z.unknown(),design:"event",description:"`(id: string | null) => void`. The other half of the controlled hover pair: fires when the pointer enters/leaves a marker so the sibling list can highlight in step. Without this entry in the contract, screens using the documented two-way sync fail save validation."},interactive:{schema:zod.z.unknown(),design:"plumbing",description:"false freezes pan/zoom, useful for static cards."},tools:{schema:zod.z.unknown(),design:"plumbing",description:'"auto" (default, zoom buttons follow `interactive`) | "zoom" (force zoom buttons) | "none" (chrome-free map; attribution always stays \u2014 license). One vocabulary across all providers.'},toolsPosition:{schema:zod.z.unknown(),design:"plumbing",description:'"top-left" (default) | "top-right" | "bottom-left" | "bottom-right". Corner the tools dock to; use when a search bar or legend sits over the default corner.'},onLoad:{schema:zod.z.unknown(),design:"event",description:"handle exposes flyTo, panTo, fitBounds, getCenter, getZoom, getBounds, instance."},tilerKey:{schema:zod.z.unknown().optional(),design:"plumbing",description:'MapLibre only (provider="maplibre"). Optional everywhere: omit on `gradeui.com`/`localhost` and the referrer-locked demo key is used; set it only when embedding off-domain. The contract never requires it.'},accessToken:{schema:zod.z.unknown().optional(),design:"plumbing",description:'Mapbox only. Pass it whenever provider="mapbox" \u2014 the component itself enforces this at runtime (throws a clear `provider="mapbox" requires an accessToken prop` error via onError if missing). It is OPTIONAL in the contract on purpose, so the validator never demands it from maplibre/google maps.'},apiKey:{schema:zod.z.unknown().optional(),design:"plumbing",description:'Google only. Pass it whenever provider="google" \u2014 the component enforces it at runtime (throws `provider="google" requires an apiKey prop` via onError if missing). OPTIONAL in the contract on purpose, so it\'s never demanded from maplibre/mapbox.'},id:{schema:zod.z.unknown().optional(),design:"plumbing",description:"string. Required. Stable marker id; pair with Map's `hoveredId` for list\u2194map hover sync."},at:{schema:zod.z.unknown().optional(),design:"plumbing",description:"`[lng, lat]` tuple. Required. THE coordinate prop. ALWAYS lng first. The prop is literally named `at` \u2014 it is NOT `lngLat`, `coordinates`, `position`, `latLng`, `center`, or separate `lng`/`lat` props. Passing any other name leaves the marker coord `undefined`, and MapLibre throws on mount, crashing the WHOLE screen in every renderer. When in doubt, copy the `airbnb-listings` scaffold: `<MapMarker id={l.id} at={l.coords}>`."},anchor:{schema:zod.z.unknown().optional(),design:"plumbing",description:'"center" | "bottom" (default "bottom", pin tip sits on the coord). Only these two values.'},onClick:{schema:zod.z.unknown().optional(),design:"event",description:"handler called with `({ id, coords, native })` on marker click."},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"DOM rendered as the marker (Badge, Card, Avatar, or any element). Inherits `--gds-*` tokens."}}};var am=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()}),rm=zod.z.object({kind:zod.z.literal("tv-show"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),nm=zod.z.object({kind:zod.z.literal("movie"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),im=zod.z.object({kind:zod.z.literal("game"),title:zod.z.string(),description:zod.z.string().optional()}),sm=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()}),lm=zod.z.object({kind:zod.z.literal("poster"),title:zod.z.string(),year:zod.z.number().optional(),description:zod.z.string().optional()}),cm=zod.z.object({kind:zod.z.literal("portrait"),name:zod.z.string().optional(),role:zod.z.string().optional()}),dm=zod.z.object({kind:zod.z.literal("landscape"),location:zod.z.string().optional(),mood:zod.z.string().optional()}),pm=zod.z.object({kind:zod.z.literal("product"),name:zod.z.string().optional(),brand:zod.z.string().optional()}),um=zod.z.object({kind:zod.z.literal("food"),dish:zod.z.string().optional(),cuisine:zod.z.string().optional()}),mm=zod.z.object({kind:zod.z.literal("generic"),prompt:zod.z.string()}),gm=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")})]),fm=zod.z.union([am,rm,nm,im,sm,lm,cm,dm,pm,um,mm,gm]),hm=zod.z.enum(["video","square","portrait","wide","auto"]),bm=zod.z.enum(["none","sm","md","lg","xl"]),vm=zod.z.enum(["album","tv-show","movie","game","book","portrait","landscape","poster","product","food","video","audio","embed","3d","generic"]),ym=zod.z.union([zod.z.literal("auto"),zod.z.literal("icon"),zod.z.literal("none")]),Vn={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:vm.optional(),design:"knob",group:"image",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:hm.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:bm.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:ym.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",group:"image",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",group:"image",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."},instanceId:{schema:zod.z.string().optional(),design:"content",group:"image",control:"text",label:"Instance id",description:"Stable per-instance id stamped as `data-gds-instance-id`. Use when rendering MediaSurfaces from a data array (`.map(item => <MediaSurface instanceId={item.id} \u2026/>)`) \u2014 it's how Studio's selection + Fill flows tell one card apart from its siblings and patch only that entry. Was missing from this hand-authored contract while the component documented it, which made save validation reject the documented pattern (June 2026)."},source:{schema:fm.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"}}}};var tl={name:"Message",description:`The canonical "avatar + author + timestamp + body" row. THE PRIMITIVE
48
48
  for any chat surface, comment thread, post-reply, activity log, or
49
49
  notification feed that follows the people-and-text shape.
50
50
 
@@ -58,7 +58,7 @@ Notion comment sidebars, in-app activity logs, notification rows \u2014
58
58
  every one of these IS \`<Message>\`. Do not roll the layout inline.
59
59
 
60
60
  For non-people activity (system events, log lines, status pings) use
61
- Callout or a plain Row instead \u2014 Message implies a human author.`,import:"@gradeui/ui",composesWith:['Avatar (in the avatar slot \u2014 pair with AvatarFallback tone="..." for stable per-author colour)',"Badge (in the badge slot for role / OP / bot tags)","Button (in actions",'typically size="icon" + variant="ghost")',"Stack (host multiple Messages in a thread)","Card (wrap a Stack of Messages for a comment-thread block)"],styleDefaults:{Message:"flex items-start"},props:{author:{schema:zod.z.string(),design:"content",description:"display name of the message author"},timestamp:{schema:zod.z.unknown().optional(),design:"plumbing",description:'string ("11:24", "2 hours ago") or any node for custom formatting'},avatar:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot for any `<Avatar>` composition; omit for grouped messages from the same author"},badge:{schema:zod.z.unknown().optional(),design:"plumbing",description:"small chip(s) next to the author name (OP, Bot, Admin, role tag)"},edited:{schema:zod.z.union([zod.z.boolean(),zod.z.string()]).optional(),design:"knob",description:'renders "(edited)" hint next to timestamp; pass a string to customise ("(edited 2 minutes ago)")'},pinned:{schema:zod.z.boolean().optional(),design:"knob",description:'renders a pin glyph + "Pinned" label above the header row for sticky / pinned messages'},actions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"end-of-header slot, typically hover-revealed icon buttons (reply / react / more)"},reactions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot below the body, typically a Row of reaction chips (emoji + count)"},threadCount:{schema:zod.z.number().optional(),design:"knob",description:'renders a "N replies" link affordance below the body'},onThreadClick:{schema:zod.z.unknown().optional(),design:"event",description:"handler for the threadCount affordance"},align:{schema:zod.z.enum(["start","end"]).optional(),design:"knob",description:'`start` (default) puts the avatar on the left; `end` mirrors for "your messages" in DM threads'},density:{schema:zod.z.enum(["default","compact"]).optional(),design:"knob",description:'`default` is the canonical chat / channel-feed rhythm; `compact` tightens text sizes + gaps for dense side panels (Studio comments, activity feeds). Pair with `Avatar size="xs"` for the tightest stack.'},children:{schema:zod.z.unknown(),design:"plumbing",description:"body content (plain text or rich nodes)"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var ls={name:"Motion",description:"A directed sequence of scenes on one persistent stage \u2014 the",import:"@gradeui/ui",aliases:["motion","grade motion","scenes","sequence","demo reel","product video","launch video","title card","lower third","section break","multi-scene","storyboard"],subcomponents:["MotionScene","MotionScreen","MotionText"],composesWith:["ScreenAnimator","ThreeScene","VideoPlayer","AppShell","the whole component set (scenes hold screens)"],styleDefaults:{MotionScreen:"gds-motion-screen",MotionText:"gds-motion-text",MotionOverlay:"gds-motion-overlay",MotionSceneImpl:"gds-motion-scene",Motion:"gds-motion"},props:{view:{schema:zod.z.enum(["play","strip"]).optional(),design:"knob",description:"play runs the film; strip lays",default:"play"}}};var ds={name:"MultiSelect",description:`Picking multiple items from a finite list \u2014 tag selectors, filter chips,
61
+ Callout or a plain Row instead \u2014 Message implies a human author.`,import:"@gradeui/ui",composesWith:['Avatar (in the avatar slot \u2014 pair with AvatarFallback tone="..." for stable per-author colour)',"Badge (in the badge slot for role / OP / bot tags)","Button (in actions",'typically size="icon" + variant="ghost")',"Stack (host multiple Messages in a thread)","Card (wrap a Stack of Messages for a comment-thread block)"],styleDefaults:{Message:"flex items-start"},props:{author:{schema:zod.z.string(),design:"content",description:"display name of the message author"},timestamp:{schema:zod.z.unknown().optional(),design:"plumbing",description:'string ("11:24", "2 hours ago") or any node for custom formatting'},avatar:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot for any `<Avatar>` composition; omit for grouped messages from the same author"},badge:{schema:zod.z.unknown().optional(),design:"plumbing",description:"small chip(s) next to the author name (OP, Bot, Admin, role tag)"},edited:{schema:zod.z.union([zod.z.boolean(),zod.z.string()]).optional(),design:"knob",description:'renders "(edited)" hint next to timestamp; pass a string to customise ("(edited 2 minutes ago)")'},pinned:{schema:zod.z.boolean().optional(),design:"knob",description:'renders a pin glyph + "Pinned" label above the header row for sticky / pinned messages'},actions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"end-of-header slot, typically hover-revealed icon buttons (reply / react / more)"},reactions:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot below the body, typically a Row of reaction chips (emoji + count)"},threadCount:{schema:zod.z.number().optional(),design:"knob",description:'renders a "N replies" link affordance below the body'},onThreadClick:{schema:zod.z.unknown().optional(),design:"event",description:"handler for the threadCount affordance"},align:{schema:zod.z.enum(["start","end"]).optional(),design:"knob",description:'`start` (default) puts the avatar on the left; `end` mirrors for "your messages" in DM threads'},density:{schema:zod.z.enum(["default","compact"]).optional(),design:"knob",description:'`default` is the canonical chat / channel-feed rhythm; `compact` tightens text sizes + gaps for dense side panels (Studio comments, activity feeds). Pair with `Avatar size="xs"` for the tightest stack.'},children:{schema:zod.z.unknown(),design:"plumbing",description:"body content (plain text or rich nodes)"},className:{schema:zod.z.string().optional(),design:"plumbing"}}};var ol={name:"Motion",description:"A directed sequence of scenes on one persistent stage \u2014 the",import:"@gradeui/ui",aliases:["motion","grade motion","scenes","sequence","demo reel","product video","launch video","title card","lower third","section break","multi-scene","storyboard"],subcomponents:["MotionScene","MotionScreen","MotionText"],composesWith:["ScreenAnimator","ThreeScene","VideoPlayer","AppShell","the whole component set (scenes hold screens)"],styleDefaults:{MotionScreen:"gds-motion-screen",MotionText:"gds-motion-text",MotionOverlay:"gds-motion-overlay",MotionSceneImpl:"gds-motion-scene",Motion:"gds-motion"},props:{view:{schema:zod.z.enum(["play","strip"]).optional(),design:"knob",description:"play runs the film; strip lays",default:"play"}}};var al={name:"MultiSelect",description:`Picking multiple items from a finite list \u2014 tag selectors, filter chips,
62
62
  "share with N people", multi-region settings.
63
63
 
64
64
  **This is the answer for ANY "removable-chips-inside-an-input" pattern.**
@@ -76,7 +76,7 @@ already covers the trigger-with-badges shape.
76
76
 
77
77
  Use \`<Select>\` instead for SINGLE selection. Use \`<Command>\` directly
78
78
  (no MultiSelect wrapper) when the option set is unbounded or async
79
- (users to @-mention, email recipients, search-as-you-type API results).`,import:"@gradeui/ui",composesWith:["Popover","Command","Badge","Checkbox-style row indicator","Separator"],styleDefaults:{MultiSelect:"mr-2 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary"},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 cs={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","glass popover","frosted popover","inspector popover"],subcomponents:["PopoverTrigger","PopoverContent","PopoverAnchor"],composesWith:["Button (as trigger)","Calendar (date picker)","Command (combobox)","Form controls (inline edit popover)","Code (code-detail popovers)"],styleDefaults:{PopoverContent:"z-50 w-72 rounded-md border 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]"},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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the popover surface is *made of*. `solid` is the default opaque `bg-popover`. `translucent` is the Apple HIG menu-sheet feel. `glass` for floating panels over rich canvases (Studio inspector, image-tool palette)."}}};var ps={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)"],styleDefaults:{Progress:"relative h-4 w-full overflow-hidden rounded-full bg-secondary"},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 us={name:"RadioCard",description:"Single-select where each option is a whole selectable card (shipping options, plan picker, onboarding choices). The whole card is the control, so focus and the checked state live on the card surface and the entire card is clickable. MUST sit inside a RadioGroup (keeps roving focus + single-select). Static content only \u2014 never nest an interactive control (Slider/Input/Button/link) inside. For a plain radio + label row use Field instead.",import:"@gradeui/ui",aliases:["radio card","selectable card","option card","plan picker","choice card","pricing tier","segmented choice card"],composesWith:["RadioGroup (required parent)","Badge (in aside)","MediaSurface (custom children)"],props:{value:{schema:zod.z.string(),design:"content",description:"the radio value"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the dot; selection shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content (image, custom layout) instead of label/description"}}};var ms={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. When each option should be a whole clickable card (label + description, selected state on the card), use RadioCard inside the RadioGroup instead of a Card with a radio in the corner. For a plain label + description row, wrap RadioGroupItem in Field. 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)","Field (label + description row)","RadioCard (whole-card selectable option)","Stack (vertical list)"],styleDefaults:{RadioGroup:"grid gap-2",RadioGroupItem:"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"},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 gs={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"],styleDefaults:{ResizablePanelGroup:"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",ResizableHandle:"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"},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 fs={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"],styleDefaults:{RiveInner:"absolute inset-0 flex items-end justify-end p-2"},props:{src:{schema:zod.z.string(),design:"content",description:"URL or path to the .riv file"},stateMachines:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",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 hs={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"],styleDefaults:{Row:"gds-row flex flex-row gap-4 items-center justify-start"},variantDefaults:{gap:"md",align:"center",justify:"start"},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 bs={name:"ScreenAnimator",description:'Wrap ANY screen or section in a directed camera \u2014 a "live demo',import:"@gradeui/ui",aliases:["screen animator","camera","camera tour","director","demo","product demo","zoom pan","spotlight","ken burns","presenter"],composesWith:["AppShell","ThreeScene","Card","Grid","the whole component set (it wraps a screen)"],styleDefaults:{ScreenAnimator:"gds-screen-animator"},props:{shots:{schema:zod.z.unknown().optional(),design:"plumbing",description:"the tour. Each"}}};var vs={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)"],styleDefaults:{ScrollArea:"relative overflow-hidden",ScrollBar:"flex touch-none select-none transition-colors"},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 ys={name:"SectionBlock",description:'The top-level container for a marketing page section \u2014 hero, feature row, pricing table, testimonial strip, FAQ section. Always reach for SectionBlock over a hand-rolled `<section>` so vertical rhythm, container width, and tonal background stay consistent across the page. Pair `background="gradient"` + `surface="glass"` inner Cards for the "modern marketing hero" pattern.',import:"@gradeui/ui",aliases:["section","section block","hero section","marketing section","page section","content section","container section","feature section","hero","page hero","marketing hero","glass section","gradient section","mesh hero"],composesWith:['Card (the most common child \u2014 especially with surface="glass")',"Grid (feature rows)","Stack (hero column)","MediaSurface (hero imagery)","Code (developer hero)","Carousel (logo strips)"],styleDefaults:{SectionBlock:"relative w-full py-16 md:py-24 bg-transparent"},variantDefaults:{padding:"lg",background:"transparent"},props:{padding:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",description:"vertical rhythm. Defaults to `lg`."},background:{schema:zod.z.enum(["transparent","muted","card","primary","gradient"]).optional(),design:"knob",description:"tonal direction of the section bg."},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the section is *made of*. Orthogonal to `background`. Use `glass` for hero sections that float over a generative backdrop / image / dot grid."},container:{schema:zod.z.enum(["default","wide","narrow","full"]).optional(),design:"knob",description:"max-width of the inner content."},alignment:{schema:zod.z.enum(["left","center","right"]).optional(),design:"knob",description:"header / CTA alignment."},titleSize:{schema:zod.z.enum(["sm","md","lg","xl"]).optional(),design:"knob"},title:{schema:zod.z.string().optional(),design:"plumbing"},subtitle:{schema:zod.z.string().optional(),design:"content"},cta1:{schema:zod.z.unknown().optional(),design:"plumbing",description:"string or `{ text, variant, href, onClick }` config"},backgroundImage:{schema:zod.z.string().optional(),design:"content",description:"direct CSS background image url"},as:{schema:zod.z.enum(["section","div","article"]).optional(),design:"knob",description:"semantic root"},fullBleed:{schema:zod.z.boolean().optional(),design:"knob"}}};var xs={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. In dense tool panels, set size="xs" on BOTH the trigger and the content so the closed control and open menu match.',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"],styleDefaults:{SelectTrigger:"flex w-full items-center justify-between rounded-md border border-input bg-background ring-offset-background data-[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 h-10 px-3 py-2 text-sm",SelectScrollUpButton:"flex cursor-default items-center justify-center py-1",SelectScrollDownButton:"flex cursor-default items-center justify-center py-1",SelectContent:"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",SelectItem:"relative flex w-full cursor-default select-none items-center rounded-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 py-1.5 pl-8 pr-2 text-sm",SelectSeparator:"-mx-1 my-1 h-px bg-muted"},props:{value:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Radix root"},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density; wraps the clickable control, nest SelectValue inside"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"text when nothing is selected"}}};var ws={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"],styleDefaults:{Separator:"shrink-0 bg-border"},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 Rs={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)"],styleDefaults:{ShaderPresetPicker:"grid grid-cols-2 gap-3"},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 Ss={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)"],styleDefaults:{ShaderPresetPreview:"group cursor-pointer flex flex-col gap-2"},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 ks={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, Studio-style inspector panels. 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","inspector panel","glass sheet","frosted drawer"],subcomponents:["SheetTrigger","SheetContent","SheetHeader","SheetTitle","SheetDescription","SheetFooter","SheetClose"],composesWith:["Form controls (an inline edit sheet)","Button (trigger + close)","AppShellNav (mobile-only swap)","Code (changelog drawers)","MediaSurface (image-detail sheets)"],styleDefaults:{SheetOverlay:"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",SheetContent:"fixed z-50 gap-4 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 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",SheetHeader:"flex flex-col space-y-2 text-center sm:text-left",SheetFooter:"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",SheetTitle:"text-lg font-semibold text-foreground",SheetDescription:"text-sm text-muted-foreground"},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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the sheet panel is *made of*. `solid` is the default opaque `bg-background`. Reach for `glass` whenever the canvas behind the sheet (a layout in progress, a media gallery, a dashboard) should remain visible."},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 Cs={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)"],styleDefaults:{Sidebar:"relative flex h-full flex-col bg-card text-card-foreground",SidebarHeader:"flex shrink-0 items-center border-b border-border",SidebarContent:"flex-1 overflow-y-auto overflow-x-hidden",SidebarFooter:"shrink-0 border-t border-border",SidebarSection:"px-[var(--gds-sidebar-section-px,0.5rem)] space-y-[var(--gds-sidebar-section-gap,0.125rem)]",SidebarItem:"group flex items-center gap-2.5 rounded-md transition-colors",SidebarTreeItem:"group flex w-full items-center gap-1.5 rounded-md py-1 text-sm font-medium transition-colors"},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 treatment. `rail` (default) is the classic nav rail with a single right-border + tracked width via `--gds-sidebar-width`; drops cleanly into `<AppShellNav placement="side">`. `panel` is a card-style floating sidebar with full border + rounded corners + parent-controlled width; use when the sidebar is one of several adjacent panes in a body row (e.g. Projects | Canvas | Settings). The compound children (Header/Content/Footer/Section/Item) are identical in both treatments.'},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:`**action(s) on the right edge of the header** \u2014 the canonical "+" / "..." slot (Notion's "+ Add page" next to Pages, Linear's "+" next to Favorites, Slack's "+" next to Channels). Pointer events isolated so a Button here doesn't toggle collapse.`},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. `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 under a project, sub-pages under a section). Active state still wins on color + weight so the current row pops at either size."},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line beneath the label (metadata like 'Edited 2m ago', '12 items', a brief description). Row layout adapts: label + description stacked vertically; icon vertically-centered against the stack; badge stays on trailing edge. Hidden when sidebar collapsed."}}};var Ts={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"],styleDefaults:{Skeleton:"animate-pulse rounded-md bg-muted"},props:{className:{schema:zod.z.string().optional(),design:"plumbing",description:"required in practice; supply width/height utilities"}}};var Ps={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)"],styleDefaults:{Slider:"relative flex w-full touch-none select-none items-center"},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 Ms={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)"],styleDefaults:{SortableHandle:"cursor-grab touch-none select-none"},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 Ns={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 Es={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. For a settings row (label + description on the left, Switch on the right) use Field layout="setting". For a prominent on/off presented as a whole selectable card, use SwitchCard.',import:"@gradeui/ui",aliases:["toggle","switch","on/off switch","ios toggle","toggle switch","switch control","react native switch"],composesWith:["Label (via htmlFor)",'Field (layout="setting" settings row)',"SwitchCard (whole-card toggle)","Card (settings rows)"],styleDefaults:{Switch:"peer inline-flex 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 h-6 w-11"},variantDefaults:{size:"default"},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 Ls={name:"SwitchCard",description:'A prominent on/off setting presented as a whole selectable card. The whole card is the switch, so the toggled state lives on the card surface. Standalone. For a row of compact settings (label left, small Switch right) use Field layout="setting" instead \u2014 SwitchCard is for the heavier, card-sized toggle.',import:"@gradeui/ui",aliases:["switch card","toggle card","setting card","feature toggle card"],composesWith:["Badge (in aside)","Stack (stacking several)"],props:{checked:{schema:zod.z.unknown().optional(),design:"plumbing",description:"standard switch state"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the switch glyph; state shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content instead of label/description"}}};var As={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)"],styleDefaults:{Table:"w-full caption-bottom text-sm",TableHeader:"[&_tr]:border-b",TableBody:"[&_tr:last-child]:border-0",TableFooter:"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",TableRow:"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",TableHead:"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",TableCell:"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",TableCaption:"mt-4 text-sm text-muted-foreground"},props:{Each:{schema:zod.z.unknown(),design:"plumbing"},No:{schema:zod.z.unknown(),design:"plumbing",description:"styling follows the active theme tokens"}}};var Is={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)"],styleDefaults:{TabsList:"inline-flex items-center text-muted-foreground justify-center rounded-lg bg-muted",TabsContent:"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"},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 Hs={name:"Textarea",description:'Multi-line text entry (descriptions, messages, comments). Pair with a Label. Single-line input \u2192 use Input instead. Use size="sm"/"xs" in dense tool panels.',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)"],styleDefaults:{Textarea:"flex w-full rounded-md border border-input bg-background 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 min-h-[80px] px-3 py-2 text-sm"},variantDefaults:{size:"default"},props:{size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density, mirrors Input. default = min-h-80 / text-sm; sm and xs shrink the min-height + padding for dense panels."}}};var Fs={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`"],styleDefaults:{ThreeScene:"absolute inset-0 flex items-end justify-end p-2"},props:{preset:{schema:zod.z.enum(["mesh","waves","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 zs={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 _s={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)"],styleDefaults:{Toggle:"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 bg-transparent h-9 px-2 min-w-9"},variantDefaults:{variant:"default",size:"default"},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 Bs={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"],styleDefaults:{ToggleGroup:"inline-flex items-center justify-center rounded-lg bg-muted text-muted-foreground h-8 p-0.5",ToggleGroupItem:"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 h-7 px-2 text-xs gap-1.5 [&_svg]:size-3.5"},variantDefaults:{size:"md"},props:{type:{schema:zod.z.enum(["single","multiple"]),design:"knob",description:"single picks one, multiple picks any number"},value:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",description:"controlled; matches `type` (string for single, string[] for multiple)"},defaultValue:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",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 Os={name:"Toolbar",description:`ANY three-region chrome bar \u2014 the leading/center/trailing pattern Apple HIG
79
+ (users to @-mention, email recipients, search-as-you-type API results).`,import:"@gradeui/ui",composesWith:["Popover","Command","Badge","Checkbox-style row indicator","Separator"],styleDefaults:{MultiSelect:"mr-2 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary"},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 rl={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","glass popover","frosted popover","inspector popover"],subcomponents:["PopoverTrigger","PopoverContent","PopoverAnchor"],composesWith:["Button (as trigger)","Calendar (date picker)","Command (combobox)","Form controls (inline edit popover)","Code (code-detail popovers)"],styleDefaults:{PopoverContent:"z-50 w-72 rounded-md border 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]"},props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},defaultOpen:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},modal:{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"]).optional(),design:"knob"},align:{schema:zod.z.enum(["start","center","end"]).optional(),design:"knob"},sideOffset:{schema:zod.z.unknown().optional(),design:"plumbing"},alignOffset:{schema:zod.z.unknown().optional(),design:"plumbing"},collisionPadding:{schema:zod.z.unknown().optional(),design:"plumbing"},className:{schema:zod.z.unknown().optional(),design:"plumbing"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the popover surface is *made of*. `solid` is the default opaque `bg-popover`. `translucent` is the Apple HIG menu-sheet feel. `glass` for floating panels over rich canvases (Studio inspector, image-tool palette)."}}};var nl={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)"],styleDefaults:{Progress:"relative h-4 w-full overflow-hidden rounded-full bg-secondary"},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 il={name:"PropertyList",description:'Read-only display of the properties of a SINGLE item \u2014 detail panels, inspectors, "about this" cards, order/record summaries. It is a Table row transposed (schema vertical, one record). The value side is a polymorphic slot, so the same renderers that fill a Table cell (text, Badge, tag group, Avatar stack, date, link) drop straight into a row. For an EDITABLE field (label + control) use Field instead; a panel that flips between read and edit swaps a PropertyList for a stack of Fields.',import:"@gradeui/ui",aliases:["property list","properties","property panel","description list","definition list","detail list","key value","key-value","data list","field list","attributes","metadata list","record summary","detail panel","inspector fields","spec list"],composesWith:["Badge","Avatar","Table","Field","Separator","Card"],styleDefaults:{PropertyListRoot:"flex min-w-0 flex-col",PropertyListRow:"grid"},props:{layout:{schema:zod.z.enum(["row","stack"]).optional(),design:"knob",description:"row (default): label column beside value; stack: label above value for narrow panels"},density:{schema:zod.z.enum(["compact","default","relaxed"]).optional(),design:"knob",description:"row rhythm"},align:{schema:zod.z.enum(["start","center"]).optional(),design:"knob",description:"default vertical alignment of label vs value; use start when values wrap (tag groups, multi-line)"},divider:{schema:zod.z.boolean().optional(),design:"knob",description:"hairline rule between rows"},labelWidth:{schema:zod.z.string().optional(),design:"content",description:"override the label column width (any CSS length); sets --gds-property-list-label-width"},children:{schema:zod.z.unknown(),design:"plumbing"}}};var sl={name:"RadioCard",description:"Single-select where each option is a whole selectable card (shipping options, plan picker, onboarding choices). The whole card is the control, so focus and the checked state live on the card surface and the entire card is clickable. MUST sit inside a RadioGroup (keeps roving focus + single-select). Static content only \u2014 never nest an interactive control (Slider/Input/Button/link) inside. For a plain radio + label row use Field instead.",import:"@gradeui/ui",aliases:["radio card","selectable card","option card","plan picker","choice card","pricing tier","segmented choice card"],composesWith:["RadioGroup (required parent)","Badge (in aside)","MediaSurface (custom children)"],props:{value:{schema:zod.z.string(),design:"content",description:"the radio value"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the dot; selection shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content (image, custom layout) instead of label/description"}}};var ll={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. When each option should be a whole clickable card (label + description, selected state on the card), use RadioCard inside the RadioGroup instead of a Card with a radio in the corner. For a plain label + description row, wrap RadioGroupItem in Field. 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)","Field (label + description row)","RadioCard (whole-card selectable option)","Stack (vertical list)"],styleDefaults:{RadioGroup:"grid gap-2",RadioGroupItem:"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"},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 cl={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"],styleDefaults:{ResizablePanelGroup:"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",ResizableHandle:"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"},props:{direction:{schema:zod.z.enum(["horizontal","vertical"]).optional(),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"},maxSize:{schema:zod.z.number().optional(),design:"knob",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"},onCollapse:{schema:zod.z.unknown().optional(),design:"event"},onExpand:{schema:zod.z.unknown().optional(),design:"event",description:"collapse behaviour controls"},withHandle:{schema:zod.z.boolean().optional(),design:"knob",description:"show a visible drag affordance (default just a hit-zone)"}}};var dl={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"],styleDefaults:{RiveInner:"absolute inset-0 flex items-end justify-end p-2"},props:{src:{schema:zod.z.string(),design:"content",description:"URL or path to the .riv file"},stateMachines:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",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 pl={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"],styleDefaults:{Row:"gds-row flex flex-row gap-4 items-center justify-start"},variantDefaults:{gap:"md",align:"center",justify:"start"},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 ul={name:"ScreenAnimator",description:'Wrap ANY screen or section in a directed camera \u2014 a "live demo',import:"@gradeui/ui",aliases:["screen animator","camera","camera tour","director","demo","product demo","zoom pan","spotlight","ken burns","presenter"],composesWith:["AppShell","ThreeScene","Card","Grid","the whole component set (it wraps a screen)"],styleDefaults:{ScreenAnimator:"gds-screen-animator"},props:{shots:{schema:zod.z.unknown().optional(),design:"plumbing",description:"the tour. Each"}}};var ml={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)"],styleDefaults:{ScrollArea:"relative overflow-hidden",ScrollBar:"flex touch-none select-none transition-colors"},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 gl={name:"SectionBlock",description:'The top-level container for a marketing page section \u2014 hero, feature row, pricing table, testimonial strip, FAQ section. Always reach for SectionBlock over a hand-rolled `<section>` so vertical rhythm, container width, and tonal background stay consistent across the page. Pair `background="gradient"` + `surface="glass"` inner Cards for the "modern marketing hero" pattern.',import:"@gradeui/ui",aliases:["section","section block","hero section","marketing section","page section","content section","container section","feature section","hero","page hero","marketing hero","glass section","gradient section","mesh hero"],composesWith:['Card (the most common child \u2014 especially with surface="glass")',"Grid (feature rows)","Stack (hero column)","MediaSurface (hero imagery)","Code (developer hero)","Carousel (logo strips)"],styleDefaults:{SectionBlock:"relative w-full py-16 md:py-24 bg-transparent"},variantDefaults:{padding:"lg",background:"transparent"},props:{padding:{schema:zod.z.enum(["none","sm","md","lg","xl"]).optional(),design:"knob",description:"vertical rhythm. Defaults to `lg`."},background:{schema:zod.z.enum(["transparent","muted","card","primary","gradient"]).optional(),design:"knob",description:"tonal direction of the section bg."},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the section is *made of*. Orthogonal to `background`. Use `glass` for hero sections that float over a generative backdrop / image / dot grid."},container:{schema:zod.z.enum(["default","wide","narrow","full"]).optional(),design:"knob",description:"max-width of the inner content."},alignment:{schema:zod.z.enum(["left","center","right"]).optional(),design:"knob",description:"header / CTA alignment."},titleSize:{schema:zod.z.enum(["sm","md","lg","xl"]).optional(),design:"knob"},title:{schema:zod.z.string().optional(),design:"plumbing"},subtitle:{schema:zod.z.string().optional(),design:"content"},cta1:{schema:zod.z.unknown().optional(),design:"plumbing",description:"string or `{ text, variant, href, onClick }` config"},backgroundImage:{schema:zod.z.string().optional(),design:"content",description:"direct CSS background image url"},as:{schema:zod.z.enum(["section","div","article"]).optional(),design:"knob",description:"semantic root"},fullBleed:{schema:zod.z.boolean().optional(),design:"knob"}}};var fl={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. In dense tool panels, set size="xs" on BOTH the trigger and the content so the closed control and open menu match.',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"],styleDefaults:{SelectTrigger:"flex w-full items-center justify-between rounded-md border border-input bg-background ring-offset-background data-[placeholder]:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 h-10 px-3 py-2 text-sm",SelectScrollUpButton:"flex cursor-default items-center justify-center py-1",SelectScrollDownButton:"flex cursor-default items-center justify-center py-1",SelectContent:"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",SelectItem:"relative flex w-full cursor-default select-none items-center rounded-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 py-1.5 pl-8 pr-2 text-sm",SelectSeparator:"-mx-1 my-1 h-px bg-muted"},props:{value:{schema:zod.z.unknown().optional(),design:"plumbing"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},defaultValue:{schema:zod.z.unknown().optional(),design:"plumbing"},disabled:{schema:zod.z.unknown().optional(),design:"plumbing",description:"Radix root"},size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density; wraps the clickable control, nest SelectValue inside"},placeholder:{schema:zod.z.string().optional(),design:"content",description:"text when nothing is selected"}}};var hl={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"],styleDefaults:{Separator:"shrink-0 bg-border"},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 bl={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)"],styleDefaults:{ShaderPresetPicker:"grid grid-cols-2 gap-3"},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 vl={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)"],styleDefaults:{ShaderPresetPreview:"group cursor-pointer flex flex-col gap-2"},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 yl={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, Studio-style inspector panels. 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","inspector panel","glass sheet","frosted drawer"],subcomponents:["SheetTrigger","SheetContent","SheetHeader","SheetTitle","SheetDescription","SheetFooter","SheetClose"],composesWith:["Form controls (an inline edit sheet)","Button (trigger + close)","AppShellNav (mobile-only swap)","Code (changelog drawers)","MediaSurface (image-detail sheets)"],styleDefaults:{SheetOverlay:"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",SheetContent:"fixed z-50 gap-4 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 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",SheetHeader:"flex flex-col space-y-2 text-center sm:text-left",SheetFooter:"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",SheetTitle:"text-lg font-semibold text-foreground",SheetDescription:"text-sm text-muted-foreground"},props:{open:{schema:zod.z.unknown().optional(),design:"plumbing"},defaultOpen:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},modal:{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"},surface:{schema:zod.z.enum(["solid","translucent","glass","glass-strong"]).optional(),design:"knob",description:"what the sheet panel is *made of*. `solid` is the default opaque `bg-background`. Reach for `glass` whenever the canvas behind the sheet (a layout in progress, a media gallery, a dashboard) should remain visible."},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 xl={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)"],styleDefaults:{Sidebar:"relative flex h-full flex-col bg-card text-card-foreground",SidebarHeader:"flex shrink-0 items-center border-b border-border",SidebarContent:"flex-1 overflow-y-auto overflow-x-hidden",SidebarFooter:"shrink-0 border-t border-border",SidebarSection:"px-[var(--gds-sidebar-section-px,0.5rem)] space-y-[var(--gds-sidebar-section-gap,0.125rem)]",SidebarItem:"group flex items-center gap-2.5 rounded-md transition-colors",SidebarTreeItem:"group flex w-full items-center gap-1.5 rounded-md py-1 text-sm font-medium transition-colors"},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 treatment. `rail` (default) is the classic nav rail with a single right-border + tracked width via `--gds-sidebar-width`; drops cleanly into `<AppShellNav placement="side">`. `panel` is a card-style floating sidebar with full border + rounded corners + parent-controlled width; use when the sidebar is one of several adjacent panes in a body row (e.g. Projects | Canvas | Settings). The compound children (Header/Content/Footer/Section/Item) are identical in both treatments.'},any:{schema:zod.z.unknown().optional(),design:"plumbing",description:"brand / logo / org switcher; hides nothing when collapsed (centred)"},title:{schema:zod.z.unknown().optional(),design:"plumbing",description:'group label, tracking-wide muted styling; hidden when sidebar is collapsed. CASE: static (non-collapsible) headers historically render UPPERCASE (Notion / Linear / Slack-style "GAMES", "FAVORITES"); collapsible headers render the authored case. Control it explicitly with titleTransform.'},titleTransform:{schema:zod.z.enum(["uppercase","none"]).optional(),design:"knob",description:'title casing for BOTH header variants. "none" renders the authored case (sentence-case headers like a "Recents" list); "uppercase" forces the shouty group label. Unset = the per-variant legacy default above.'},icon:{schema:zod.z.unknown().optional(),design:"plumbing",description:"optional icon beside the title"},trailing:{schema:zod.z.unknown().optional(),design:"plumbing",description:`**action(s) on the right edge of the header** \u2014 the canonical "+" / "..." slot (Notion's "+ Add page" next to Pages, Linear's "+" next to Favorites, Slack's "+" next to Channels). Pointer events isolated so a Button here doesn't toggle collapse.`},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. `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 under a project, sub-pages under a section). Active state still wins on color + weight so the current row pops at either size."},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line beneath the label (metadata like 'Edited 2m ago', '12 items', a brief description). Row layout adapts: label + description stacked vertically; icon vertically-centered against the stack; badge stays on trailing edge. Hidden when sidebar collapsed."}}};var wl={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"],styleDefaults:{Skeleton:"animate-pulse rounded-md bg-muted"},props:{className:{schema:zod.z.string().optional(),design:"plumbing",description:"required in practice; supply width/height utilities"}}};var kl={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)"],styleDefaults:{Slider:"relative w-full grow overflow-hidden rounded-full"},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 Sl={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)"],styleDefaults:{SortableHandle:"cursor-grab touch-none select-none"},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 Rl={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 Cl={name:"Swatch",description:'Showing a colour as a small chip \u2014 brand-pop strips, palette / accent pickers, theme previews, token galleries, "pick a colour" rows. Reach for `token` to bind to a live theme variable; `color` for raw values. A transparency checkerboard sits behind the fill so semi-transparent values read honestly.',import:"@gradeui/ui",aliases:["colour swatch","color swatch","colour chip","color chip","palette swatch","token swatch","brand pop","accent swatch","colour tile","color tile","paint chip","react native colour swatch"],subcomponents:["SwatchGroup"],composesWith:["Row (strip of swatches)","Stack","Grid (palette wall)","Field (as a colour-picker trailing slot)","Card (in a theme-preview)","RadioGroup (selectable accent set)","Label"],styleDefaults:{Swatch:"relative inline-block shrink-0 overflow-hidden shadow-elevation-1 size-8 rounded-[var(--radius)]",SwatchGroup:"inline-flex flex-wrap items-center"},variantDefaults:{size:"md",shape:"rounded"},props:{color:{schema:zod.z.string().optional(),design:"content",description:"any raw CSS colour (`#1f6feb`, `oklch(...)`, `rgb(...)`, or `var(--x)`). Takes precedence over `token`. Use for one-off or external colours."},token:{schema:zod.z.string().optional(),design:"content",description:'a Grade colour token NAME with no `--` and no `oklch()` wrap; resolved internally to `oklch(var(--<token>))`. THE design-system path \u2014 e.g. `token="brand-3"`, `token="primary"`, `token="chart-2"`. Re-voices live when the theme changes.'},size:{schema:zod.z.enum(["xs","sm","md","lg","xl"]).optional(),design:"knob",description:"t-shirt scale, 20px \u2192 56px; default md (32px). Prefer over h-*/w-* utilities."},shape:{schema:zod.z.enum(["square","rounded","circle"]).optional(),design:"knob",description:"default rounded (rides `--radius`); circle for dot pickers; square for a hard tile."},selected:{schema:zod.z.boolean().optional(),design:"knob",description:"draws the shared selection ring (`--selected`). For palette / accent pickers."},onSelect:{schema:zod.z.unknown().optional(),design:"event",description:"makes the swatch a pickable <button> (adds aria-pressed, focus ring, hover lift). Omit for a static display chip."},onColorChange:{schema:zod.z.unknown().optional(),design:"event",description:'makes the swatch an editable colour well: hosts a native `<input type="color">` (the OS picker) behind the DS chip and fires with the new `#rrggbb`. Presentation stays the chip, interaction stays native. Use for inspector / control-panel colour fields instead of styling a raw colour input. Takes precedence over `onSelect`.'},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"caption rendered beneath the chip; also becomes the accessible name + tooltip."},layout:{schema:zod.z.enum(["row","stack"]).optional(),design:"knob",description:'`row` (default) spaces chips out; `stack` overlaps them into a coin-stack (the theme-picker / "key colours" treatment, where each chip\'s ring reads as the separating edge).'},gap:{schema:zod.z.enum(["xs","sm","md","lg"]).optional(),design:"knob",description:"spacing between chips in `row` layout; default sm."}}};var Tl={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. For a settings row (label + description on the left, Switch on the right) use Field layout="setting". For a prominent on/off presented as a whole selectable card, use SwitchCard.',import:"@gradeui/ui",aliases:["toggle","switch","on/off switch","ios toggle","toggle switch","switch control","react native switch"],composesWith:["Label (via htmlFor)",'Field (layout="setting" settings row)',"SwitchCard (whole-card toggle)","Card (settings rows)"],styleDefaults:{Switch:"peer inline-flex 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 h-6 w-11"},variantDefaults:{size:"default"},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 Pl={name:"SwitchCard",description:'A prominent on/off setting presented as a whole selectable card. The whole card is the switch, so the toggled state lives on the card surface. Standalone. For a row of compact settings (label left, small Switch right) use Field layout="setting" instead \u2014 SwitchCard is for the heavier, card-sized toggle.',import:"@gradeui/ui",aliases:["switch card","toggle card","setting card","feature toggle card"],composesWith:["Badge (in aside)","Stack (stacking several)"],props:{checked:{schema:zod.z.unknown().optional(),design:"plumbing",description:"standard switch state"},label:{schema:zod.z.unknown().optional(),design:"plumbing",description:"title line"},description:{schema:zod.z.unknown().optional(),design:"plumbing",description:"secondary line"},aside:{schema:zod.z.unknown().optional(),design:"plumbing",description:"slot before the indicator (a Badge, price, hint)"},hideIndicator:{schema:zod.z.boolean().optional(),design:"knob",description:"hide the switch glyph; state shown by the card border + background"},indicatorPosition:{schema:zod.z.enum(["leading","trailing"]).optional(),design:"knob",description:"default trailing"},children:{schema:zod.z.unknown().optional(),design:"plumbing",description:"arbitrary static content instead of label/description"}}};var Nl={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)"],styleDefaults:{Table:"w-full caption-bottom text-sm",TableHeader:"[&_tr]:border-b",TableBody:"[&_tr:last-child]:border-0",TableFooter:"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",TableRow:"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",TableHead:"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",TableCell:"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",TableCaption:"mt-4 text-sm text-muted-foreground"},props:{Each:{schema:zod.z.unknown(),design:"plumbing"},No:{schema:zod.z.unknown(),design:"plumbing",description:"styling follows the active theme tokens"}}};var El={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)"],styleDefaults:{TabsList:"inline-flex items-center text-muted-foreground justify-center rounded-lg bg-muted",TabsContent:"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"},props:{defaultValue:{schema:zod.z.unknown().optional(),design:"plumbing"},value:{schema:zod.z.unknown().optional(),design:"plumbing"},onValueChange:{schema:zod.z.unknown().optional(),design:"event"},orientation:{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."},tooltip:{schema:zod.z.string().optional(),design:"content",description:"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 Ll={name:"Textarea",description:'Multi-line text entry (descriptions, messages, comments). Pair with a Label. Single-line input \u2192 use Input instead. Use size="sm"/"xs" in dense tool panels.',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)"],styleDefaults:{Textarea:"flex w-full rounded-md border border-input bg-background 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 min-h-[80px] px-3 py-2 text-sm"},variantDefaults:{size:"default"},props:{size:{schema:zod.z.enum(["default","sm","xs"]).optional(),design:"knob",description:"control density, mirrors Input. default = min-h-80 / text-sm; sm and xs shrink the min-height + padding for dense panels."}}};var Dl={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`"],styleDefaults:{ThreeScene:"absolute inset-0 flex items-end justify-end p-2"},props:{preset:{schema:zod.z.enum(["mesh","waves","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 Al={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 Il={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)"],styleDefaults:{Toggle:"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 bg-transparent h-9 px-2 min-w-9"},variantDefaults:{variant:"default",size:"default"},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 Hl={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"],styleDefaults:{ToggleGroup:"flex items-center justify-center gap-1"},props:{type:{schema:zod.z.enum(["single","multiple"]),design:"knob",description:"single picks one, multiple picks any number"},value:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",description:"controlled; matches `type` (string for single, string[] for multiple)"},defaultValue:{schema:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),design:"knob",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 Fl={name:"Toolbar",description:`ANY three-region chrome bar \u2014 the leading/center/trailing pattern Apple HIG
80
80
  describes as a "Toolbar." App window chrome (Reddit, Twitter, GitHub, Linear,
81
81
  most desktop apps), section toolbars inside Cards or panels, bottom action
82
82
  bars on mobile layouts, persistent footer toolbars.
@@ -104,24 +104,26 @@ Use directly inside a Card or page section for section-scoped toolbars:
104
104
  <Card>
105
105
  <Toolbar size="sm" variant="subtle" leading={...} trailing={...} />
106
106
  {content}
107
- </Card>`,import:"@gradeui/ui",subcomponents:["ToolbarSlot"],composesWith:["Button","Avatar","Input","Logo","Badge","AppShellHeader","Card","Row","Stack"],styleDefaults:{ToolbarSlot:"flex items-center min-w-0"},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 Vs={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)"],styleDefaults:{TooltipContent:"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]"},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 Gs={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)"],styleDefaults:{VideoPlayer:"w-full h-full"},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 dn={Accordion:Si,AiChat:ki,AiChatComposer:Ci,AppShell:Ti,Avatar:Pi,BackgroundFill:Mi,Badge:Ei,Banner:Li,Breadcrumb:Di,Button:Ai,Calendar:Ii,Callout:Hi,Card:zi,Carousel:_i,Chart:Bi,Checkbox:Oi,CheckboxCard:Vi,Code:Gi,Collapsible:Wi,Command:ji,Composer:$i,DatePicker:Ui,Dialog:Ki,DropdownMenu:qi,Field:Zi,FillPicker:Ji,Flex:Qi,Grid:es,HoverCard:ts,Input:os,Label:as,Logo:ns,Map:is,MediaSurface:an,Message:ss,Motion:ls,MultiSelect:ds,Popover:cs,Progress:ps,RadioCard:us,RadioGroup:ms,Resizable:gs,RivePlayer:fs,Row:hs,ScreenAnimator:bs,ScrollArea:vs,SectionBlock:ys,Select:xs,Separator:ws,ShaderPresetPicker:Rs,ShaderPresetPreview:Ss,Sheet:ks,Sidebar:Cs,Skeleton:Ts,Slider:Ps,Sortable:Ms,Stack:Ns,Switch:Es,SwitchCard:Ls,Table:As,Tabs:Is,Textarea:Hs,ThreeScene:Fs,Toast:zs,Toggle:_s,ToggleGroup:Bs,Toolbar:Os,Tooltip:Vs,VideoPlayer:Gs};function bu(e){return e?dn[e]??null:null}function vu(){return Object.keys(dn)}function d(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var Ru=kt__namespace.Root,Ws=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(kt__namespace.Item,{ref:o,className:d("border-b",e),...t}));Ws.displayName="AccordionItem";var js=v__namespace.forwardRef(({className:e,children:t,...o},r)=>v__namespace.createElement(kt__namespace.Header,{className:"flex"},v__namespace.createElement(kt__namespace.Trigger,{ref:r,className:d("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...o},t,v__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));js.displayName=kt__namespace.Trigger.displayName;var $s=v__namespace.forwardRef(({className:e,children:t,...o},r)=>v__namespace.createElement(kt__namespace.Content,{ref:r,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...o},v__namespace.createElement("div",{className:d("pb-4 pt-0",e)},t)));$s.displayName=kt__namespace.Content.displayName;var Us=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"}}),ku={destructive:"alert",warning:"alert",info:"status",success:"status",default:"status"},Ks=v__namespace.forwardRef(({className:e,variant:t,role:o,...r},n)=>v__namespace.createElement("div",{ref:n,role:o??ku[t??"default"],"data-gds-part":"callout",className:d(Us({variant:t}),e),...r}));Ks.displayName="Callout";var qs=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("h5",{ref:o,"data-gds-part":"callout-title",className:d("mb-1 font-medium leading-none tracking-tight",e),...t}));qs.displayName="CalloutTitle";var Ys=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"callout-description",className:d("text-sm [&_p]:leading-relaxed",e),...t}));Ys.displayName="CalloutDescription";var Zs=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"}}),Xs=classVarianceAuthority.cva("gds-app-shell-header",{variants:{sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{sticky:false}}),Js=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}}),Qs=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}}),el=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"}}),tl=classVarianceAuthority.cva("gds-app-shell-footer border-t bg-background"),ol=v__namespace.forwardRef(({className:e,nav:t,asChild:o=false,...r},n)=>v__namespace.createElement(o?reactSlot.Slot:"div",{ref:n,"data-gds-part":"app-shell","data-nav":t??"none",className:d(Zs({nav:t,className:e})),...r}));ol.displayName="AppShell";var rl=v__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...r},n)=>v__namespace.createElement(o?reactSlot.Slot:"header",{ref:n,"data-gds-part":"app-shell-header",className:d(Xs({sticky:t,className:e})),...r}));rl.displayName="AppShellHeader";var al=v__namespace.forwardRef(({className:e,placement:t,sticky:o,asChild:r=false,...n},a)=>v__namespace.createElement(r?reactSlot.Slot:"nav",{ref:a,"data-gds-part":"app-shell-nav","data-placement":t??"top",className:d(Js({placement:t,sticky:o,className:e})),...n}));al.displayName="AppShellNav";var nl=v__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...r},n)=>v__namespace.createElement(o?reactSlot.Slot:"aside",{ref:n,"data-gds-part":"app-shell-aside",className:d(Qs({sticky:t,className:e})),...r}));nl.displayName="AppShellAside";var il=v__namespace.forwardRef(({className:e,maxWidth:t,asChild:o=false,...r},n)=>v__namespace.createElement(o?reactSlot.Slot:"main",{ref:n,"data-gds-part":"app-shell-main",className:d(el({maxWidth:t,className:e})),...r}));il.displayName="AppShellMain";var sl=v__namespace.forwardRef(({className:e,asChild:t=false,...o},r)=>v__namespace.createElement(t?reactSlot.Slot:"footer",{ref:r,"data-gds-part":"app-shell-footer",className:d(tl({className:e})),...o}));sl.displayName="AppShellFooter";var Cu=classVarianceAuthority.cva("relative flex shrink-0 overflow-hidden rounded-full",{variants:{size:{"2xs":"h-5 w-5",xs:"h-6 w-6",sm:"h-7 w-7",md:"h-10 w-10",lg:"h-14 w-14",xl:"h-20 w-20"}},defaultVariants:{size:"md"}}),dl=v__namespace.forwardRef(({className:e,size:t,...o},r)=>v__namespace.createElement(Zt__namespace.Root,{ref:r,"data-gds-part":"avatar","data-gds-size":t??"md",className:d(Cu({size:t}),e),...o}));dl.displayName=Zt__namespace.Root.displayName;var cl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Zt__namespace.Image,{ref:o,"data-gds-part":"avatar-image",className:d("aspect-square h-full w-full",e),...t}));cl.displayName=Zt__namespace.Image.displayName;var Tu=classVarianceAuthority.cva("flex h-full w-full items-center justify-center rounded-full font-semibold",{variants:{tone:{muted:"bg-muted text-foreground",primary:"bg-primary/15 text-primary",violet:"bg-violet-500/20 text-violet-600 dark:text-violet-400",amber:"bg-amber-500/20 text-amber-600 dark:text-amber-400",emerald:"bg-emerald-500/20 text-emerald-600 dark:text-emerald-400",sky:"bg-sky-500/20 text-sky-600 dark:text-sky-400",rose:"bg-rose-500/20 text-rose-600 dark:text-rose-400",plum:"bg-fuchsia-500/20 text-fuchsia-600 dark:text-fuchsia-400",lime:"bg-lime-500/20 text-lime-600 dark:text-lime-400"}},defaultVariants:{tone:"muted"}}),pl=v__namespace.forwardRef(({className:e,tone:t,...o},r)=>v__namespace.createElement(Zt__namespace.Fallback,{ref:r,"data-gds-part":"avatar-fallback","data-gds-tone":t??"muted",className:d(Tu({tone:t}),e),...o}));pl.displayName=Zt__namespace.Fallback.displayName;var ml=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 sa({className:e,variant:t,rounded:o,...r}){return v__namespace.createElement("div",{className:d(ml({variant:t,rounded:o}),e),...r})}var ht={solid:"",translucent:"gds-surface-translucent",glass:"gds-surface-glass","glass-strong":"gds-surface-glass-strong"};function At(e,t){return e==="solid"?t:""}var gl=classVarianceAuthority.cva("relative flex items-center gap-3 px-4 py-2.5 text-sm leading-relaxed border-b",{variants:{variant:{default:"bg-muted text-foreground border-border [&>svg]:text-muted-foreground",info:"bg-info-soft text-info-deep border-info/30 [&>svg]:text-info-deep",success:"bg-success-soft text-success-deep border-success/30 [&>svg]:text-success-deep",warning:"bg-warning-soft text-warning-deep border-warning/30 [&>svg]:text-warning-deep",destructive:"bg-destructive-soft text-destructive-deep border-destructive/30 [&>svg]:text-destructive-deep",announcement:"bg-[oklch(var(--primary)_/_0.06)] text-foreground border-[oklch(var(--primary)_/_0.18)] [&>svg]:text-primary"},align:{start:"justify-start",center:"justify-center",between:"justify-between"},sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{variant:"default",align:"between",sticky:false}}),Eu={destructive:"alert",warning:"alert",info:"status",success:"status",default:"status",announcement:"status"},fl=v__namespace.forwardRef(({className:e,variant:t="default",align:o,sticky:r,surface:n="solid",dismissible:a,onDismiss:i,icon:p,action:s,role:c,children:l,...g},u)=>{let m=t??"default",h=c??Eu[m];return v__namespace.createElement("div",{ref:u,role:h,"data-gds-part":"banner","data-variant":m,"data-surface":n,className:d(gl({variant:t,align:o,sticky:r}),ht[n],e),...g},p?v__namespace.createElement("span",{"data-gds-part":"banner-icon","aria-hidden":true,className:"shrink-0"},p):null,v__namespace.createElement("div",{"data-gds-part":"banner-content",className:"flex-1 min-w-0"},l),s?v__namespace.createElement("span",{"data-gds-part":"banner-action",className:"shrink-0"},s):null,a?v__namespace.createElement("button",{type:"button","data-gds-part":"banner-dismiss",onClick:i,"aria-label":"Dismiss",className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md opacity-70 hover:opacity-100 hover:bg-black/5 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-opacity"},v__namespace.createElement(lucideReact.X,{className:"h-4 w-4"})):null)});fl.displayName="Banner";var kr=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:{"2xs":"h-6 gap-1 px-1.5 text-2xs [&_svg]:size-3",xs:"h-6 gap-1 px-2 text-xs [&_svg]:size-3",sm:"h-7 gap-1.5 px-2.5 text-sm [&_svg]:size-3.5",md:"h-8 gap-1.5 px-3 text-base [&_svg]:size-4",default:"h-8 gap-1.5 px-3 text-base [&_svg]:size-4",lg:"h-10 gap-2 px-4 text-lg [&_svg]:size-5",icon:"h-8 w-8 [&_svg]:size-4"}},defaultVariants:{variant:"default",size:"md"}}),dt=v__namespace.forwardRef(({className:e,variant:t,size:o,asChild:r=false,...n},a)=>v__namespace.createElement(r?reactSlot.Slot:"button",{"data-gds-part":"button",className:d("gds-button",kr({variant:t,size:o,className:e})),ref:a,...n}));dt.displayName="Button";function da({className:e,classNames:t,showOutsideDays:o=true,captionLayout:r="label",buttonVariant:n="ghost",formatters:a,components:i,...p}){let s=reactDayPicker.getDefaultClassNames();return v__namespace.createElement(reactDayPicker.DayPicker,{showOutsideDays:o,className:d("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:d("w-fit",s.root),months:d("relative flex flex-col gap-4 md:flex-row",s.months),month:d("flex w-full flex-col gap-4",s.month),nav:d("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",s.nav),button_previous:d(kr({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_previous),button_next:d(kr({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_next),month_caption:d("flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",s.month_caption),dropdowns:d("flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",s.dropdowns),dropdown_root:d("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:d("bg-popover absolute inset-0 opacity-0",s.dropdown),caption_label:d("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:d("flex",s.weekdays),weekday:d("text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",s.weekday),week:d("mt-2 flex w-full",s.week),week_number_header:d("w-[--cell-size] select-none",s.week_number_header),week_number:d("text-muted-foreground select-none text-[0.8rem]",s.week_number),day:d("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:d("bg-accent rounded-l-md",s.range_start),range_middle:d("rounded-none",s.range_middle),range_end:d("bg-accent rounded-r-md",s.range_end),today:d("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",s.today),outside:d("text-muted-foreground aria-selected:text-muted-foreground",s.outside),disabled:d("text-muted-foreground opacity-50",s.disabled),hidden:d("invisible",s.hidden),...t},components:{Root:({className:c,rootRef:l,...g})=>v__namespace.createElement("div",{"data-slot":"calendar",ref:l,className:d(c),...g}),Chevron:({className:c,orientation:l,...g})=>l==="left"?v__namespace.createElement(lucideReact.ChevronLeftIcon,{className:d("size-4",c),...g}):l==="right"?v__namespace.createElement(lucideReact.ChevronRightIcon,{className:d("size-4",c),...g}):v__namespace.createElement(lucideReact.ChevronDownIcon,{className:d("size-4",c),...g}),DayButton:bl,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)),...i},...p})}function bl({className:e,day:t,modifiers:o,...r}){let n=reactDayPicker.getDefaultClassNames(),a=v__namespace.useRef(null);return v__namespace.useEffect(()=>{o.focused&&a.current?.focus();},[o.focused]),v__namespace.createElement(dt,{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:d("hover:bg-accent/40 hover:text-foreground","data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",n.day,e),...r})}var cn=v__namespace.createContext(null);function Pr(e){let t=v__namespace.useContext(cn);if(!t)throw new Error(`<${e}> must be rendered inside a <Carousel> root.`);return t}var Ou=5e3,mo=v__namespace.forwardRef(({loop:e=true,align:t="start",slidesPerView:o=1,autoplay:r=false,draggable:n=true,onSlideChange:a,className:i,style:p,children:s,...c},l)=>{let g=v__namespace.useMemo(()=>({loop:e,align:t,slidesToScroll:1,watchDrag:n,containScroll:e?false:"trimSnaps"}),[e,t,n]),[u,m]=zu__default.default(g),[h,f]=v__namespace.useState(0),[b,y]=v__namespace.useState(0),[R,w]=v__namespace.useState(false),[x,S]=v__namespace.useState(false),M=v__namespace.useRef(new Map),A=v__namespace.useRef(a);A.current=a;let H=v__namespace.useMemo(()=>r?r===true?{}:r:null,[r]);v__namespace.useEffect(()=>{if(!m)return;let k=()=>{f(m.selectedScrollSnap()),y(m.scrollSnapList().length),w(m.canScrollPrev()),S(m.canScrollNext()),A.current?.(m.selectedScrollSnap());};return k(),m.on("select",k),m.on("reInit",k),()=>{m.off("select",k),m.off("reInit",k);}},[m]);let W=v__namespace.useCallback(k=>{m&&m.selectedScrollSnap()===k&&m.scrollNext();},[m]),z=v__namespace.useRef(false),F=v__namespace.useRef(true),B=v__namespace.useRef(null);v__namespace.useImperativeHandle(l,()=>B.current),v__namespace.useEffect(()=>{if(!H?.pauseWhenOffscreen){F.current=true;return}let k=B.current;if(!k||typeof IntersectionObserver>"u")return;let G=new IntersectionObserver(he=>{F.current=he.some(I=>I.isIntersecting);},{threshold:.25});return G.observe(k),()=>G.disconnect()},[H?.pauseWhenOffscreen]),v__namespace.useEffect(()=>{if(!m||!H)return;let k=null,G=()=>{k&&clearTimeout(k);let Z=m.selectedScrollSnap(),ae=M.current.get(Z)??H.delay??Ou;k=setTimeout(()=>{if(z.current||!F.current){G();return}m.scrollNext();},ae);},he=()=>G(),I=()=>{k&&clearTimeout(k);},j=()=>G();return m.on("select",he),m.on("pointerDown",I),m.on("settle",j),G(),()=>{k&&clearTimeout(k),m.off("select",he),m.off("pointerDown",I),m.off("settle",j);}},[m,H]);let q=()=>{H?.pauseOnHover!==false&&(z.current=true);},ie=()=>{z.current=false;},N=v__namespace.useMemo(()=>({api:m,selectedIndex:h,slideCount:b,canScrollPrev:R,canScrollNext:x,durationsRef:M,advanceFromSlide:W}),[m,h,b,R,x,W]),ue=`calc(100% / ${o})`;return v__namespace.createElement(cn.Provider,{value:N},v__namespace.createElement("div",{ref:B,"data-gds-part":"carousel",className:d("relative",i),style:{"--gds-carousel-slide-basis":ue,...p},onMouseEnter:q,onMouseLeave:ie,...c},v__namespace.createElement("div",{ref:u,"data-gds-part":"carousel-viewport",className:"overflow-hidden",style:{borderRadius:"var(--gds-carousel-radius, var(--gds-media-radius, 0.5rem))"}},v__namespace.createElement("div",{"data-gds-part":"carousel-track",className:"flex",style:{gap:"var(--gds-carousel-gap, 0)",touchAction:"pan-y pinch-zoom"}},s))))});mo.displayName="Carousel";var ca=v__namespace.forwardRef(({duration:e,className:t,style:o,children:r,...n},a)=>{let{durationsRef:i}=Pr("Carousel.Slide"),p=v__namespace.useRef(null);return v__namespace.useImperativeHandle(a,()=>p.current),v__namespace.useEffect(()=>{if(e==null)return;let s=p.current;if(!s?.parentElement)return;let c=Array.from(s.parentElement.children).indexOf(s);if(c<0)return;let l=i.current;return l.set(c,e),()=>{l.delete(c);}},[e,i]),v__namespace.createElement("div",{ref:p,"data-gds-part":"carousel-slide",className:d("min-w-0 shrink-0 grow-0",t),style:{flexBasis:"var(--gds-carousel-slide-basis, 100%)",...o},...n},r)});ca.displayName="Carousel.Slide";var pn=v__namespace.forwardRef(({src:e,poster:t,alt:o,controls:r=false,loop:n=true,fit:a="cover",duration:i,className:p,style:s,...c},l)=>{let{api:g,selectedIndex:u,advanceFromSlide:m}=Pr("Carousel.VideoSlide"),h=v__namespace.useRef(null),f=v__namespace.useRef(null);v__namespace.useImperativeHandle(l,()=>h.current);let[b,y]=v__namespace.useState(null);v__namespace.useEffect(()=>{let w=h.current;w?.parentElement&&y(Array.from(w.parentElement.children).indexOf(w));},[g]);let R=b!=null&&b===u;return v__namespace.useEffect(()=>{let w=f.current;if(w)if(R){let x=w.play();x&&typeof x.catch=="function"&&x.catch(()=>{});}else w.pause(),w.currentTime=0;},[R]),v__namespace.createElement(ca,{ref:h,duration:i,className:d("relative overflow-hidden bg-[var(--gds-media-placeholder-bg)]",p),style:s,"data-gds-part":"carousel-video-slide",...c},t&&v__namespace.createElement("img",{src:t,alt:o??"","aria-hidden":R,className:"absolute inset-0 h-full w-full",style:{objectFit:a,opacity:R?0:1,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"}}),v__namespace.createElement("video",{ref:f,src:e,muted:true,playsInline:true,loop:n,controls:r,preload:"metadata","aria-label":o,className:"block h-full w-full",style:{objectFit:a,opacity:R?1:0,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"},onEnded:()=>{n||b!=null&&m(b);}}))});pn.displayName="Carousel.VideoSlide";var un=v__namespace.forwardRef(({position:e="below",renderDot:t,className:o,style:r,...n},a)=>{let{api:i,selectedIndex:p,slideCount:s}=Pr("Carousel.Dots");if(s<=1)return null;let c=Array.from({length:s},(g,u)=>u),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 v__namespace.createElement("div",{ref:a,"data-gds-part":"carousel-dots",className:d("flex items-center justify-center",o),style:{gap:"var(--gds-carousel-dots-spacing, 0.5rem)",...l,...r},...n},c.map(g=>{let u=g===p,m=()=>i?.scrollTo(g);return t?t({index:g,active:u,onClick:m}):v__namespace.createElement("button",{key:g,type:"button",onClick:m,"aria-label":`Go to slide ${g+1}`,"aria-current":u?"true":void 0,"data-active":u||void 0,className:"rounded-full transition-all",style:{width:u?"var(--gds-carousel-dot-active-width, 1.25rem)":"var(--gds-carousel-dot-size, 0.5rem)",height:"var(--gds-carousel-dot-size, 0.5rem)",background:u?"var(--gds-carousel-dot-active-color, oklch(var(--primary)))":"var(--gds-carousel-dot-color, oklch(var(--muted-foreground) / 0.4))"}})}))});un.displayName="Carousel.Dots";var mn=v__namespace.forwardRef(({position:e="overlay",className:t,style:o,...r},n)=>e==="outside"?v__namespace.createElement("div",{ref:n,"data-gds-part":"carousel-arrows",className:d("flex items-center justify-end gap-2 pt-2",t),style:o,...r},v__namespace.createElement(Cr,null),v__namespace.createElement(Tr,null)):v__namespace.createElement("div",{ref:n,"data-gds-part":"carousel-arrows",className:d("pointer-events-none absolute inset-0 z-[1]",t),style:o,...r},v__namespace.createElement(Cr,{className:"pointer-events-auto absolute left-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"}),v__namespace.createElement(Tr,{className:"pointer-events-auto absolute right-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"})));mn.displayName="Carousel.Arrows";var Cr=v__namespace.forwardRef(({className:e,style:t,children:o,...r},n)=>{let{api:a,canScrollPrev:i}=Pr("Carousel.Prev");return v__namespace.createElement("button",{ref:n,type:"button","data-gds-part":"carousel-prev","aria-label":"Previous slide",disabled:!i,onClick:()=>a?.scrollPrev(),className:d("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??v__namespace.createElement(lucideReact.ChevronLeft,{className:"h-4 w-4","aria-hidden":true}))});Cr.displayName="Carousel.Prev";var Tr=v__namespace.forwardRef(({className:e,style:t,children:o,...r},n)=>{let{api:a,canScrollNext:i}=Pr("Carousel.Next");return v__namespace.createElement("button",{ref:n,type:"button","data-gds-part":"carousel-next","aria-label":"Next slide",disabled:!i,onClick:()=>a?.scrollNext(),className:d("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??v__namespace.createElement(lucideReact.ChevronRight,{className:"h-4 w-4","aria-hidden":true}))});Tr.displayName="Carousel.Next";mo.Slide=ca;mo.VideoSlide=pn;mo.Dots=un;mo.Arrows=mn;mo.Prev=Cr;mo.Next=Tr;var Vu=mo;function Gu(){return v__namespace.useContext(cn)?.api}var vl=v__namespace.forwardRef(({className:e,surface:t="solid",...o},r)=>v__namespace.createElement("div",{ref:r,"data-gds-part":"card","data-surface":t,className:d("gds-card rounded-xl border text-card-foreground shadow",At(t,"bg-card"),ht[t],e),...o}));vl.displayName="Card";var yl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"card-header",className:d("flex flex-col space-y-1.5 p-6",e),...t}));yl.displayName="CardHeader";var xl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"card-title",className:d("font-semibold leading-none tracking-tight",e),...t}));xl.displayName="CardTitle";var wl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"card-description",className:d("text-sm text-muted-foreground",e),...t}));wl.displayName="CardDescription";var Rl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"card-content",className:d("p-6 pt-0",e),...t}));Rl.displayName="CardContent";var Sl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,"data-gds-part":"card-footer",className:d("flex items-center p-6 pt-0",e),...t}));Sl.displayName="CardFooter";var kl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Mr__namespace.Root,{ref:o,className:d("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},v__namespace.createElement(Mr__namespace.Indicator,{className:d("flex items-center justify-center text-current")},v__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))));kl.displayName=Mr__namespace.Root.displayName;var gn=v__namespace.createContext(null),pa=v__namespace.forwardRef(({className:e,...t},o)=>{let r=v__namespace.useContext(gn);return v__namespace.createElement("label",{ref:o,htmlFor:r?.controlId,className:d("text-sm font-medium leading-none text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70",e),...t})});pa.displayName="Field.Label";var ua=v__namespace.forwardRef(({className:e,...t},o)=>{let r=v__namespace.useContext(gn);return v__namespace.createElement("p",{ref:o,id:r?.descriptionId,className:d("text-sm text-muted-foreground",e),...t})});ua.displayName="Field.Description";var ma=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{ref:o,className:d("flex shrink-0 items-center gap-2",e),...t}));ma.displayName="Field.Trailing";var Cl=v__namespace.forwardRef(({layout:e="option",className:t,children:o,...r},n)=>{let a=v__namespace.useId(),i=null,p=null,s=null,c=null;v__namespace.Children.forEach(o,y=>{v__namespace.isValidElement(y)&&(y.type===pa?i=y:y.type===ua?p=y:y.type===ma?s=y:c||(c=y));});let l=c,g=l?.props??{},u=g.id??`${a}-control`,m=p?`${a}-description`:void 0,h=[g["aria-describedby"],m].filter(Boolean).join(" ")||void 0,f=l?v__namespace.cloneElement(l,{id:u,"aria-describedby":h}):null,b=v__namespace.createElement("div",{className:"flex min-w-0 flex-col gap-0.5"},i,p);return v__namespace.createElement(gn.Provider,{value:{controlId:u,descriptionId:m}},v__namespace.createElement("div",{ref:n,"data-gds-part":"field","data-layout":e,className:d("flex gap-3",e==="setting"?"items-center justify-between":p?"items-start":"items-center",t),...r},e==="setting"?v__namespace.createElement(v__namespace.Fragment,null,b,v__namespace.createElement("div",{className:"flex shrink-0 items-center gap-2"},s,f)):v__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement("div",{className:d("shrink-0",p?"mt-0.5":void 0)},f),v__namespace.createElement("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5"},i,p),s)))});Cl.displayName="Field";var ju=Object.assign(Cl,{Label:pa,Description:ua,Trailing:ma});function fn({label:e,description:t,aside:o,hideIndicator:r,indicatorPosition:n="trailing",titleId:a,descriptionId:i,indicator:p,children:s}){let c=s!=null?v__namespace.createElement("div",{className:"gds-selection-card__slot"},s):v__namespace.createElement("div",{className:"gds-selection-card__content"},e!=null&&v__namespace.createElement("span",{id:a,className:"gds-selection-card__title"},e),t!=null&&v__namespace.createElement("span",{id:i,className:"gds-selection-card__desc"},t)),l=r?null:p;return n==="leading"?v__namespace.createElement(v__namespace.Fragment,null,l,c,o):v__namespace.createElement(v__namespace.Fragment,null,c,o,l)}var Uu=v__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--radio","aria-hidden":true},v__namespace.createElement(vo__namespace.Indicator,{className:"gds-selection-indicator__dot"})),Ku=v__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--checkbox","aria-hidden":true},v__namespace.createElement(Mr__namespace.Indicator,{className:"gds-selection-indicator__check"},v__namespace.createElement(lucideReact.Check,{className:"h-3.5 w-3.5",strokeWidth:3}))),qu=v__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--switch","aria-hidden":true},v__namespace.createElement(Or__namespace.Thumb,{className:"gds-selection-indicator__thumb"})),Tl=v__namespace.forwardRef(({className:e,label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a="trailing",children:i,...p},s)=>{let c=v__namespace.useId(),l=t!=null?`${c}-t`:void 0,g=o!=null?`${c}-d`:void 0;return v__namespace.createElement(vo__namespace.Item,{ref:s,"data-gds-part":"radio-card","data-indicator":a,"aria-labelledby":l,"aria-describedby":g,className:d("gds-selection-card",e),...p},v__namespace.createElement(fn,{label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a,titleId:l,descriptionId:g,indicator:Uu},i))});Tl.displayName="RadioCard";var Pl=v__namespace.forwardRef(({className:e,label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a="trailing",children:i,...p},s)=>{let c=v__namespace.useId(),l=t!=null?`${c}-t`:void 0,g=o!=null?`${c}-d`:void 0;return v__namespace.createElement(Mr__namespace.Root,{ref:s,"data-gds-part":"checkbox-card","data-indicator":a,"aria-labelledby":l,"aria-describedby":g,className:d("gds-selection-card",e),...p},v__namespace.createElement(fn,{label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a,titleId:l,descriptionId:g,indicator:Ku},i))});Pl.displayName="CheckboxCard";var Ml=v__namespace.forwardRef(({className:e,label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a="trailing",children:i,...p},s)=>{let c=v__namespace.useId(),l=t!=null?`${c}-t`:void 0,g=o!=null?`${c}-d`:void 0;return v__namespace.createElement(Or__namespace.Root,{ref:s,"data-gds-part":"switch-card","data-indicator":a,"aria-labelledby":l,"aria-describedby":g,className:d("gds-selection-card",e),...p},v__namespace.createElement(fn,{label:t,description:o,aside:r,hideIndicator:n,indicatorPosition:a,titleId:l,descriptionId:g,indicator:qu},i))});Ml.displayName="SwitchCard";var er={slow:{tokenStagger:70,lineStagger:200,preDelay:500,fadeMs:480},normal:{tokenStagger:22,lineStagger:55,preDelay:200,fadeMs:280},fast:{tokenStagger:8,lineStagger:18,preDelay:60,fadeMs:160}},ba=.55;function we(e,t){return e<=0?Promise.resolve():new Promise((o,r)=>{if(t?.aborted){r(new DOMException("Aborted","AbortError"));return}let n=window.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=()=>{window.clearTimeout(n),r(new DOMException("Aborted","AbortError"));};t?.addEventListener("abort",a,{once:true});})}async function va(e,t,o=22,r){if(o<=0){t(e);return}for(let n=1;n<=e.length;n++)t(e.slice(0,n)),n<e.length&&await we(o,r);}function hn(e){return e instanceof DOMException&&e.name==="AbortError"}var Nr="data-motion",Nl="off",El="(prefers-reduced-motion: reduce)";function Yu(){if(typeof window>"u"||typeof document>"u")return false;let e=window.matchMedia(El).matches,t=document.documentElement.getAttribute(Nr)===Nl;return e||t}function Jt(){let[e,t]=v__namespace.useState(false);return v__namespace.useEffect(()=>{let o=()=>t(Yu());o();let r=window.matchMedia(El);r.addEventListener("change",o);let n=new MutationObserver(o);return n.observe(document.documentElement,{attributes:true,attributeFilter:[Nr]}),()=>{r.removeEventListener("change",o),n.disconnect();}},[]),e}var go=Jt;function Er(){let[e,t]=v__namespace.useState(true);return v__namespace.useEffect(()=>{let o=window.self!==window.top,r=()=>document.visibilityState!=="hidden"&&(o||document.hasFocus()),n=()=>t(r());return n(),document.addEventListener("visibilitychange",n),window.addEventListener("focus",n),window.addEventListener("blur",n),window.addEventListener("pageshow",n),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("focus",n),window.removeEventListener("blur",n),window.removeEventListener("pageshow",n);}},[]),e}function Zu(e){if(typeof document>"u")return;let t=document.documentElement;e?t.removeAttribute(Nr):t.setAttribute(Nr,Nl);}var Xu=2e3,Ju={tokenStagger:0,lineStagger:0,preDelay:0,fadeMs:0};function fo(e){let{steps:t,interpret:o,speed:r="normal",trigger:n="mount",play:a,loop:i=false,loopDelay:p=Xu,maxLoops:s=1/0,containerRef:c,onComplete:l,onLoopReset:g}=e,u=Jt(),m=u?Ju:er[r],h=u?false:i,f=Er(),[b,y]=v__namespace.useState(false),[R,w]=v__namespace.useState(false),[x,S]=v__namespace.useState(-1),M=v__namespace.useRef(null),A=react.useInView(c??M,{once:true,amount:ba}),H=react.useInView(c??M,{amount:ba}),W=f&&(c?H:true),[z,F]=v__namespace.useState(0),B=v__namespace.useMemo(()=>n==="mount"?true:n==="inView"?A:!!a||z>0,[n,A,a,z]),q=v__namespace.useRef(o);q.current=o;let ie=v__namespace.useRef(l);ie.current=l;let N=v__namespace.useRef(g);N.current=g;let ue=v__namespace.useRef(null),k=v__namespace.useRef(null),G=v__namespace.useCallback(()=>{ue.current?.abort(),ue.current=null,k.current!==null&&(window.clearTimeout(k.current),k.current=null),y(false);},[]),he=v__namespace.useCallback(()=>{F(j=>j+1);},[]),I=v__namespace.useCallback((j=0)=>{if(ue.current?.abort(),ue.current=null,k.current!==null&&(window.clearTimeout(k.current),k.current=null),j>0){k.current=window.setTimeout(()=>{k.current=null,F(Z=>Z+1);},j);return}F(Z=>Z+1);},[]);return v__namespace.useEffect(()=>()=>{k.current!==null&&(window.clearTimeout(k.current),k.current=null);},[]),v__namespace.useEffect(()=>{if(!t||t.length===0||!u&&(!B||!W))return;let j=new AbortController;ue.current=j;let{signal:Z}=j,U={speed:m,signal:Z,cancelled:()=>Z.aborted,reduced:u},xe=true,E=0;return (async()=>{do{y(true),w(false),S(-1);try{await we(n==="inView"?m.preDelay:0,Z);for(let X=0;X<t.length;X++){if(Z.aborted)return;S(X),await q.current(t[X],U);}if(Z.aborted)return;if(S(-1),w(!0),ie.current?.(),E+=1,!h||E>=s){y(!1);return}if(await we(p,Z),Z.aborted)return;N.current?.();}catch(X){if(hn(X))return;process.env.NODE_ENV!=="production"&&console.error("[useScriptedDemo] step error:",X),y(false);return}}while(xe&&h&&!Z.aborted)})(),()=>{xe=false,j.abort(),ue.current===j&&(ue.current=null);}},[t,B,W,h,p,m,n,z,u]),{isPlaying:b,isComplete:R,currentIndex:x,play:he,stop:G,restart:I}}var xa=v__namespace.forwardRef(function({variant:t="inline",className:o,...r},n){return v__namespace.createElement("span",{ref:n,"data-gds-part":"demo-cursor","data-gds-variant":t,"aria-hidden":true,className:d("gds-demo-cursor",o),...r})});var Dl=v__namespace.createContext({visible:new Set,hasStage:false,reducedMotion:false,defaultAnimation:"fade-up"});function Al({steps:e,speed:t="normal",trigger:o="mount",play:r,loop:n=false,defaultAnimation:a="fade-up",visibleWhenIdle:i=true,className:p,children:s}){let c=react.useReducedMotion()??false,l=v__namespace.useRef(null),[g,u]=v__namespace.useState(()=>new Set),m=!!(e&&e.length);fo({steps:m?e:void 0,speed:t,trigger:o,play:r,loop:n,containerRef:l,onLoopReset:()=>u(new Set),interpret:async(b,y)=>{if(b.type==="wait")return we(b.ms,y.signal);if(b.type==="reset")return u(new Set),we(y.speed.preDelay,y.signal);if(b.type==="reveal")return u(R=>{if(R.has(b.target))return R;let w=new Set(R);return w.add(b.target),w}),we(y.speed.lineStagger,y.signal);if(b.type==="reveal-all")return u(R=>{let w=new Set(R);return w.add("__all__"),w}),we(y.speed.lineStagger,y.signal);if(b.type==="hide")return u(R=>{if(!R.has(b.target))return R;let w=new Set(R);return w.delete(b.target),w}),we(y.speed.fadeMs,y.signal)}});let h=v__namespace.useMemo(()=>({visible:m?g:new Set(["__all__"]),hasStage:true,reducedMotion:c,defaultAnimation:a}),[m,g,c,a]),f=!m&&!i?{...h,visible:new Set}:h;return v__namespace.createElement("div",{ref:l,"data-gds-part":"demo-stage","data-gds-stage-playing":m?"true":"false",className:p},v__namespace.createElement(Dl.Provider,{value:f},s))}var tm={fade:{initial:{opacity:0},animate:{opacity:1}},"fade-up":{initial:{opacity:0,y:12},animate:{opacity:1,y:0}},"fade-down":{initial:{opacity:0,y:-12},animate:{opacity:1,y:0}},"fade-left":{initial:{opacity:0,x:12},animate:{opacity:1,x:0}},"fade-right":{initial:{opacity:0,x:-12},animate:{opacity:1,x:0}},scale:{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1}},none:{initial:{opacity:1},animate:{opacity:1}}};function Il({id:e,animation:t,durationMs:o,hideOutsideStage:r=false,onReveal:n,onHide:a,className:i,children:p}){let s=v__namespace.useContext(Dl),c=s.hasStage?s.visible.has("__all__")||s.visible.has(e):!r,l=v__namespace.useRef(c),g=v__namespace.useRef(n),u=v__namespace.useRef(a);g.current=n,u.current=a,v__namespace.useEffect(()=>{c!==l.current&&(l.current=c,c?g.current?.():u.current?.());},[c]);let m=t??s.defaultAnimation,h=tm[m],f=(o??280)/1e3;return s.reducedMotion?v__namespace.createElement("div",{"data-gds-part":"reveal","data-gds-reveal-id":e,"data-gds-revealed":c?"true":"false",className:i,style:{opacity:c?1:0}},p):v__namespace.createElement(react.motion.div,{"data-gds-part":"reveal","data-gds-reveal-id":e,"data-gds-revealed":c?"true":"false",className:i,initial:h.initial,animate:c?h.animate:h.initial,transition:{duration:f,ease:[.22,1,.36,1]}},p)}var am={xs:"text-xs",sm:"text-sm",md:"text-base"},nm={slow:{lineStagger:200,tokenStagger:70,preDelay:500,fadeMs:480},normal:{lineStagger:55,tokenStagger:22,preDelay:200,fadeMs:280},fast:{lineStagger:18,tokenStagger:8,preDelay:60,fadeMs:160}},im={plain:{color:"var(--gds-code-fg)",backgroundColor:"transparent"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"var(--gds-code-comment)",fontStyle:"normal"}},{types:["punctuation"],style:{color:"var(--gds-code-punctuation)"}},{types:["property","constant","symbol","deleted"],style:{color:"var(--gds-code-property)"}},{types:["boolean","number"],style:{color:"var(--gds-code-number)"}},{types:["selector","attr-name","string","char","builtin","inserted"],style:{color:"var(--gds-code-string)"}},{types:["operator","entity","url"],style:{color:"var(--gds-code-operator)"}},{types:["atrule","keyword"],style:{color:"var(--gds-code-keyword)"}},{types:["function","class-name"],style:{color:"var(--gds-code-function)"}},{types:["regex","important","variable"],style:{color:"var(--gds-code-variable)"}},{types:["tag"],style:{color:"var(--gds-code-tag)"}},{types:["attr-name"],style:{color:"var(--gds-code-attr-name)"}},{types:["attr-value"],style:{color:"var(--gds-code-attr-value)"}}]};function sm(e){let t=new Set;if(e==null)return t;let o=Array.isArray(e)?e:[e];for(let r of o)if(typeof r=="number")t.add(r);else if(Array.isArray(r)&&r.length===2){let[n,a]=r;for(let i=n;i<=a;i++)t.add(i);}return t}function lm(e,t,o){return t?.added?.includes(e)?"added":t?.removed?.includes(e)?"removed":o.has(e)?"highlight":"default"}var Fl=v__namespace.forwardRef(function({source:t,language:o="tsx",highlight:r,diff:n,reveal:a="none",trigger:i="mount",play:p,speed:s="normal",delay:c,stagger:l,showLineNumbers:g=false,filename:u,wrap:m=false,bare:h=false,prompt:f,cursor:b,steps:y,loop:R=false,size:w="sm",height:x,maxLines:S,className:M,style:A,...H},W){let z=nm[s],F=c??0,B=l??(a==="typewriter"?z.tokenStagger:z.lineStagger),q=!!(y&&y.length),[ie,N]=v__namespace.useState(""),[ue,k]=v__namespace.useState(()=>new Set),G=q?ie:t??"",he=v__namespace.useMemo(()=>G.replace(/\n$/,""),[G]),I=v__namespace.useMemo(()=>sm(r),[r]),j=!!(n?.added?.length||n?.removed?.length),Z=g||j,ae=v__namespace.useRef(null);v__namespace.useImperativeHandle(W,()=>ae.current);let[U,xe]=v__namespace.useState(a==="none"),E=react.useInView(ae,{once:true,amount:.55}),me=i==="inView"?z.preDelay:0,X=i==="mount"?true:i==="inView"?E:!!p,Ke=B,ve=he.split(`
108
- `).length,ke=a==="typewriter"?he.replace(/\s+/g," ").split(" ").length:ve,qe=me+F+ke*Ke+280;v__namespace.useEffect(()=>{if(q)return;if(!X||a==="none"){xe(a==="none");return}xe(false);let _=window.setTimeout(()=>xe(true),qe);return ()=>window.clearTimeout(_)},[X,a,qe,q]);let Ge=v__namespace.useRef(""),O=v__namespace.useRef(new Set),K=v__namespace.useCallback(_=>{Ge.current=_,N(_);},[]),V=v__namespace.useCallback(_=>{O.current=_,k(_);},[]),{isComplete:ge}=fo({steps:q?y:void 0,speed:s,trigger:"manual",play:X,loop:R,containerRef:ae,onLoopReset:()=>{K(""),V(new Set),xe(false);},interpret:async(_,Le)=>{let Ne=Le.signal;if(_.type==="wait")return we(_.ms,Ne);if(_.type==="clear"){K(""),V(new Set);return}if(_.type==="output"){let tt=Ge.current,Nt=tt.length>0&&!tt.endsWith(`
109
- `)?tt+`
110
- `:tt,ur=Nt+_.text,mr=Nt.split(`
111
- `).length,rn=_.text.split(`
112
- `).length,gr=new Set(O.current);for(let $o=0;$o<rn;$o++)gr.add(mr+$o);return K(ur),V(gr),K(ur+(ur.endsWith(`
107
+ </Card>`,import:"@gradeui/ui",subcomponents:["ToolbarSlot"],composesWith:["Button","Avatar","Input","Logo","Badge","AppShellHeader","Card","Row","Stack"],styleDefaults:{ToolbarSlot:"flex items-center min-w-0"},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 zl={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)"],styleDefaults:{TooltipContent:"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]"},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"},defaultOpen:{schema:zod.z.unknown().optional(),design:"plumbing"},onOpenChange:{schema:zod.z.unknown().optional(),design:"event"},asChild:{schema:zod.z.boolean().optional(),design:"plumbing",description:"usually wraps a Button or icon"},side:{schema:zod.z.enum(["top","right","bottom","left"]).optional(),design:"knob",default:"top"},align:{schema:zod.z.enum(["start","center","end"]).optional(),design:"knob"},sideOffset:{schema:zod.z.number().optional(),design:"knob"}}};var Bl={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)"],styleDefaults:{VideoPlayer:"w-full h-full"},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 Gn={Accordion:fs,AiChat:hs,AiChatComposer:bs,AppShell:vs,Avatar:ys,BackgroundFill:xs,Badge:ks,Banner:Ss,Breadcrumb:Rs,Button:Cs,Calendar:Ts,Callout:Ps,Card:Ns,Carousel:Es,Chart:Ls,Checkbox:Ds,CheckboxCard:As,Code:Is,Collapsible:Hs,Combobox:Fs,Command:zs,Composer:Bs,DataView:Vs,DatePicker:_s,Dialog:Os,DropdownMenu:Gs,Field:Us,FillPicker:js,Flex:Ks,Grid:qs,HoverCard:Ys,Input:Zs,Label:Js,Logo:Qs,Map:el,MediaSurface:Vn,Message:tl,Motion:ol,MultiSelect:al,Popover:rl,Progress:nl,PropertyList:il,RadioCard:sl,RadioGroup:ll,Resizable:cl,RivePlayer:dl,Row:pl,ScreenAnimator:ul,ScrollArea:ml,SectionBlock:gl,Select:fl,Separator:hl,ShaderPresetPicker:bl,ShaderPresetPreview:vl,Sheet:yl,Sidebar:xl,Skeleton:wl,Slider:kl,Sortable:Sl,Stack:Rl,Swatch:Cl,Switch:Tl,SwitchCard:Pl,Table:Nl,Tabs:El,Textarea:Ll,ThreeScene:Dl,Toast:Al,Toggle:Il,ToggleGroup:Hl,Toolbar:Fl,Tooltip:zl,VideoPlayer:Bl};function Rm(e){return e?Gn[e]??null:null}function Cm(){return Object.keys(Gn)}function d(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var Nm=Ft__namespace.Root,Vl=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Ft__namespace.Item,{ref:o,className:d("border-b",e),...t}));Vl.displayName="AccordionItem";var _l=y__namespace.forwardRef(({className:e,children:t,...o},a)=>y__namespace.createElement(Ft__namespace.Header,{className:"flex"},y__namespace.createElement(Ft__namespace.Trigger,{ref:a,className:d("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...o},t,y__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 transition-transform duration-200"}))));_l.displayName=Ft__namespace.Trigger.displayName;var Ol=y__namespace.forwardRef(({className:e,children:t,...o},a)=>y__namespace.createElement(Ft__namespace.Content,{ref:a,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...o},y__namespace.createElement("div",{className:d("pb-4 pt-0",e)},t)));Ol.displayName=Ft__namespace.Content.displayName;var Gl=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"}}),Lm={destructive:"alert",warning:"alert",info:"status",success:"status",default:"status"},Wl=y__namespace.forwardRef(({className:e,variant:t,role:o,...a},n)=>y__namespace.createElement("div",{ref:n,role:o??Lm[t??"default"],"data-gds-part":"callout",className:d(Gl({variant:t}),e),...a}));Wl.displayName="Callout";var Ul=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("h5",{ref:o,"data-gds-part":"callout-title",className:d("mb-1 font-medium leading-none tracking-tight",e),...t}));Ul.displayName="CalloutTitle";var $l=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"callout-description",className:d("text-sm [&_p]:leading-relaxed",e),...t}));$l.displayName="CalloutDescription";var jl=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"}}),Kl=classVarianceAuthority.cva("gds-app-shell-header",{variants:{sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{sticky:false}}),ql=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}}),Yl=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}}),Zl=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"}}),Xl=classVarianceAuthority.cva("gds-app-shell-footer border-t bg-background"),Jl=y__namespace.forwardRef(({className:e,nav:t,asChild:o=false,...a},n)=>y__namespace.createElement(o?reactSlot.Slot:"div",{ref:n,"data-gds-part":"app-shell","data-nav":t??"none",className:d(jl({nav:t,className:e})),...a}));Jl.displayName="AppShell";var Ql=y__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...a},n)=>y__namespace.createElement(o?reactSlot.Slot:"header",{ref:n,"data-gds-part":"app-shell-header",className:d(Kl({sticky:t,className:e})),...a}));Ql.displayName="AppShellHeader";var ec=y__namespace.forwardRef(({className:e,placement:t,sticky:o,asChild:a=false,...n},r)=>y__namespace.createElement(a?reactSlot.Slot:"nav",{ref:r,"data-gds-part":"app-shell-nav","data-placement":t??"top",className:d(ql({placement:t,sticky:o,className:e})),...n}));ec.displayName="AppShellNav";var tc=y__namespace.forwardRef(({className:e,sticky:t,asChild:o=false,...a},n)=>y__namespace.createElement(o?reactSlot.Slot:"aside",{ref:n,"data-gds-part":"app-shell-aside",className:d(Yl({sticky:t,className:e})),...a}));tc.displayName="AppShellAside";var oc=y__namespace.forwardRef(({className:e,maxWidth:t,asChild:o=false,...a},n)=>y__namespace.createElement(o?reactSlot.Slot:"main",{ref:n,"data-gds-part":"app-shell-main",className:d(Zl({maxWidth:t,className:e})),...a}));oc.displayName="AppShellMain";var ac=y__namespace.forwardRef(({className:e,asChild:t=false,...o},a)=>y__namespace.createElement(t?reactSlot.Slot:"footer",{ref:a,"data-gds-part":"app-shell-footer",className:d(Xl({className:e})),...o}));ac.displayName="AppShellFooter";var Dm=classVarianceAuthority.cva("relative flex shrink-0 overflow-hidden rounded-full",{variants:{size:{"2xs":"h-5 w-5",xs:"h-6 w-6",sm:"h-7 w-7",md:"h-10 w-10",lg:"h-14 w-14",xl:"h-20 w-20"}},defaultVariants:{size:"md"}}),nc=y__namespace.forwardRef(({className:e,size:t,...o},a)=>y__namespace.createElement(bo__namespace.Root,{ref:a,"data-gds-part":"avatar","data-gds-size":t??"md",className:d(Dm({size:t}),e),...o}));nc.displayName=bo__namespace.Root.displayName;var ic=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(bo__namespace.Image,{ref:o,"data-gds-part":"avatar-image",className:d("aspect-square h-full w-full",e),...t}));ic.displayName=bo__namespace.Image.displayName;var Am=classVarianceAuthority.cva("flex h-full w-full items-center justify-center rounded-full font-semibold",{variants:{tone:{muted:"bg-muted text-foreground",primary:"bg-primary/15 text-primary",violet:"bg-violet-500/20 text-violet-600 dark:text-violet-400",amber:"bg-amber-500/20 text-amber-600 dark:text-amber-400",emerald:"bg-emerald-500/20 text-emerald-600 dark:text-emerald-400",sky:"bg-sky-500/20 text-sky-600 dark:text-sky-400",rose:"bg-rose-500/20 text-rose-600 dark:text-rose-400",plum:"bg-fuchsia-500/20 text-fuchsia-600 dark:text-fuchsia-400",lime:"bg-lime-500/20 text-lime-600 dark:text-lime-400"}},defaultVariants:{tone:"muted"}}),sc=y__namespace.forwardRef(({className:e,tone:t,...o},a)=>y__namespace.createElement(bo__namespace.Fallback,{ref:a,"data-gds-part":"avatar-fallback","data-gds-tone":t??"muted",className:d(Am({tone:t}),e),...o}));sc.displayName=bo__namespace.Fallback.displayName;var cc=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 hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",highlight:"border-transparent bg-gds-yellow-400 text-gds-gray-900 hover:bg-gds-yellow-500",success:"border-transparent bg-gds-green-500 text-gds-gray-900 hover:bg-gds-green-600",warning:"border-transparent bg-orange-500 text-white hover:bg-orange-600",info:"border-transparent bg-blue-500 text-white 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 Do({className:e,variant:t,rounded:o,...a}){return y__namespace.createElement("div",{className:d(cc({variant:t,rounded:o}),e),...a})}var St={solid:"",translucent:"gds-surface-translucent",glass:"gds-surface-glass","glass-strong":"gds-surface-glass-strong"};function qt(e,t){return e==="solid"?t:""}var dc=classVarianceAuthority.cva("relative flex items-center gap-3 px-4 py-2.5 text-sm leading-relaxed border-b",{variants:{variant:{default:"bg-muted text-foreground border-border [&>svg]:text-muted-foreground",info:"bg-info-soft text-info-deep border-info/30 [&>svg]:text-info-deep",success:"bg-success-soft text-success-deep border-success/30 [&>svg]:text-success-deep",warning:"bg-warning-soft text-warning-deep border-warning/30 [&>svg]:text-warning-deep",destructive:"bg-destructive-soft text-destructive-deep border-destructive/30 [&>svg]:text-destructive-deep",announcement:"bg-[oklch(var(--primary)_/_0.06)] text-foreground border-[oklch(var(--primary)_/_0.18)] [&>svg]:text-primary"},align:{start:"justify-start",center:"justify-center",between:"justify-between"},sticky:{true:"sticky top-0 z-30",false:""}},defaultVariants:{variant:"default",align:"between",sticky:false}}),zm={destructive:"alert",warning:"alert",info:"status",success:"status",default:"status",announcement:"status"},pc=y__namespace.forwardRef(({className:e,variant:t="default",align:o,sticky:a,surface:n="solid",dismissible:r,onDismiss:i,icon:l,action:s,role:c,children:p,...m},u)=>{let g=t??"default",h=c??zm[g];return y__namespace.createElement("div",{ref:u,role:h,"data-gds-part":"banner","data-variant":g,"data-surface":n,className:d(dc({variant:t,align:o,sticky:a}),St[n],e),...m},l?y__namespace.createElement("span",{"data-gds-part":"banner-icon","aria-hidden":true,className:"shrink-0"},l):null,y__namespace.createElement("div",{"data-gds-part":"banner-content",className:"flex-1 min-w-0"},p),s?y__namespace.createElement("span",{"data-gds-part":"banner-action",className:"shrink-0"},s):null,r?y__namespace.createElement("button",{type:"button","data-gds-part":"banner-dismiss",onClick:i,"aria-label":"Dismiss",className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md opacity-70 hover:opacity-100 hover:bg-black/5 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-opacity"},y__namespace.createElement(lucideReact.X,{className:"h-4 w-4"})):null)});pc.displayName="Banner";var Ua=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 hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline",raised:"gds-button-raised gds-button-raised-surface"},size:{"2xs":"h-6 gap-1 px-1.5 text-2xs [&_svg]:size-3",xs:"h-6 gap-1 px-2 text-xs [&_svg]:size-3",sm:"h-7 gap-1.5 px-2.5 text-sm [&_svg]:size-3.5",md:"h-8 gap-1.5 px-3 text-base [&_svg]:size-4",default:"h-8 gap-1.5 px-3 text-base [&_svg]:size-4",lg:"h-10 gap-2 px-4 text-lg [&_svg]:size-5",icon:"h-8 w-8 [&_svg]:size-4"}},defaultVariants:{variant:"default",size:"md"}}),et=y__namespace.forwardRef(({className:e,variant:t,size:o,asChild:a=false,raised:n=false,...r},i)=>y__namespace.createElement(a?reactSlot.Slot:"button",{"data-gds-part":"button",className:d("gds-button",Ua({variant:t,size:o}),n&&"gds-button-raised",e),ref:i,...r}));et.displayName="Button";function Lr({className:e,classNames:t,showOutsideDays:o=true,captionLayout:a="label",buttonVariant:n="ghost",formatters:r,components:i,...l}){let s=reactDayPicker.getDefaultClassNames();return y__namespace.createElement(reactDayPicker.DayPicker,{showOutsideDays:o,className:d("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:a,formatters:{formatMonthDropdown:c=>c.toLocaleString("default",{month:"short"}),...r},classNames:{root:d("w-fit",s.root),months:d("relative flex flex-col gap-4 md:flex-row",s.months),month:d("flex w-full flex-col gap-4",s.month),nav:d("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",s.nav),button_previous:d(Ua({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_previous),button_next:d(Ua({variant:n}),"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",s.button_next),month_caption:d("flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",s.month_caption),dropdowns:d("flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",s.dropdowns),dropdown_root:d("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:d("bg-popover absolute inset-0 opacity-0",s.dropdown),caption_label:d("select-none font-medium",a==="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:d("flex",s.weekdays),weekday:d("text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",s.weekday),week:d("mt-2 flex w-full",s.week),week_number_header:d("w-[--cell-size] select-none",s.week_number_header),week_number:d("text-muted-foreground select-none text-[0.8rem]",s.week_number),day:d("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:d("bg-accent rounded-l-md",s.range_start),range_middle:d("rounded-none",s.range_middle),range_end:d("bg-accent rounded-r-md",s.range_end),today:d("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",s.today),outside:d("text-muted-foreground aria-selected:text-muted-foreground",s.outside),disabled:d("text-muted-foreground opacity-50",s.disabled),hidden:d("invisible",s.hidden),...t},components:{Root:({className:c,rootRef:p,...m})=>y__namespace.createElement("div",{"data-slot":"calendar",ref:p,className:d(c),...m}),Chevron:({className:c,orientation:p,...m})=>p==="left"?y__namespace.createElement(lucideReact.ChevronLeftIcon,{className:d("size-4",c),...m}):p==="right"?y__namespace.createElement(lucideReact.ChevronRightIcon,{className:d("size-4",c),...m}):y__namespace.createElement(lucideReact.ChevronDownIcon,{className:d("size-4",c),...m}),DayButton:mc,WeekNumber:({children:c,...p})=>y__namespace.createElement("td",{...p},y__namespace.createElement("div",{className:"flex size-[--cell-size] items-center justify-center text-center"},c)),...i},...l})}function mc({className:e,day:t,modifiers:o,...a}){let n=reactDayPicker.getDefaultClassNames(),r=y__namespace.useRef(null);return y__namespace.useEffect(()=>{o.focused&&r.current?.focus();},[o.focused]),y__namespace.createElement(et,{ref:r,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:d("hover:bg-accent/40 hover:text-foreground","data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",n.day,e),...a})}var Wn=y__namespace.createContext(null);function Ka(e){let t=y__namespace.useContext(Wn);if(!t)throw new Error(`<${e}> must be rendered inside a <Carousel> root.`);return t}var Km=5e3,Ao=y__namespace.forwardRef(({loop:e=true,align:t="start",slidesPerView:o=1,autoplay:a=false,draggable:n=true,onSlideChange:r,className:i,style:l,children:s,...c},p)=>{let m=y__namespace.useMemo(()=>({loop:e,align:t,slidesToScroll:1,watchDrag:n,containScroll:e?false:"trimSnaps"}),[e,t,n]),[u,g]=Um__default.default(m),[h,f]=y__namespace.useState(0),[b,v]=y__namespace.useState(0),[S,x]=y__namespace.useState(false),[w,k]=y__namespace.useState(false),C=y__namespace.useRef(new Map),E=y__namespace.useRef(r);E.current=r;let F=y__namespace.useMemo(()=>a?a===true?{}:a:null,[a]);y__namespace.useEffect(()=>{if(!g)return;let R=()=>{f(g.selectedScrollSnap()),v(g.scrollSnapList().length),x(g.canScrollPrev()),k(g.canScrollNext()),E.current?.(g.selectedScrollSnap());};return R(),g.on("select",R),g.on("reInit",R),()=>{g.off("select",R),g.off("reInit",R);}},[g]);let O=y__namespace.useCallback(R=>{g&&g.selectedScrollSnap()===R&&g.scrollNext();},[g]),M=y__namespace.useRef(false),N=y__namespace.useRef(true),H=y__namespace.useRef(null);y__namespace.useImperativeHandle(p,()=>H.current),y__namespace.useEffect(()=>{if(!F?.pauseWhenOffscreen){N.current=true;return}let R=H.current;if(!R||typeof IntersectionObserver>"u")return;let _=new IntersectionObserver(le=>{N.current=le.some(X=>X.isIntersecting);},{threshold:.25});return _.observe(R),()=>_.disconnect()},[F?.pauseWhenOffscreen]),y__namespace.useEffect(()=>{if(!g||!F)return;let R=null,_=()=>{R&&clearTimeout(R);let J=g.selectedScrollSnap(),ke=C.current.get(J)??F.delay??Km;R=setTimeout(()=>{if(M.current||!N.current){_();return}g.scrollNext();},ke);},le=()=>_(),X=()=>{R&&clearTimeout(R);},U=()=>_();return g.on("select",le),g.on("pointerDown",X),g.on("settle",U),_(),()=>{R&&clearTimeout(R),g.off("select",le),g.off("pointerDown",X),g.off("settle",U);}},[g,F]);let Y=()=>{F?.pauseOnHover!==false&&(M.current=true);},se=()=>{M.current=false;},D=y__namespace.useMemo(()=>({api:g,selectedIndex:h,slideCount:b,canScrollPrev:S,canScrollNext:w,durationsRef:C,advanceFromSlide:O}),[g,h,b,S,w,O]),V=`calc(100% / ${o})`;return y__namespace.createElement(Wn.Provider,{value:D},y__namespace.createElement("div",{ref:H,"data-gds-part":"carousel",className:d("relative",i),style:{"--gds-carousel-slide-basis":V,...l},onMouseEnter:Y,onMouseLeave:se,...c},y__namespace.createElement("div",{ref:u,"data-gds-part":"carousel-viewport",className:"overflow-hidden",style:{borderRadius:"var(--gds-carousel-radius, var(--gds-media-radius, 0.5rem))"}},y__namespace.createElement("div",{"data-gds-part":"carousel-track",className:"flex",style:{gap:"var(--gds-carousel-gap, 0)",touchAction:"pan-y pinch-zoom"}},s))))});Ao.displayName="Carousel";var Dr=y__namespace.forwardRef(({duration:e,className:t,style:o,children:a,...n},r)=>{let{durationsRef:i}=Ka("Carousel.Slide"),l=y__namespace.useRef(null);return y__namespace.useImperativeHandle(r,()=>l.current),y__namespace.useEffect(()=>{if(e==null)return;let s=l.current;if(!s?.parentElement)return;let c=Array.from(s.parentElement.children).indexOf(s);if(c<0)return;let p=i.current;return p.set(c,e),()=>{p.delete(c);}},[e,i]),y__namespace.createElement("div",{ref:l,"data-gds-part":"carousel-slide",className:d("min-w-0 shrink-0 grow-0",t),style:{flexBasis:"var(--gds-carousel-slide-basis, 100%)",...o},...n},a)});Dr.displayName="Carousel.Slide";var Un=y__namespace.forwardRef(({src:e,poster:t,alt:o,controls:a=false,loop:n=true,fit:r="cover",duration:i,className:l,style:s,...c},p)=>{let{api:m,selectedIndex:u,advanceFromSlide:g}=Ka("Carousel.VideoSlide"),h=y__namespace.useRef(null),f=y__namespace.useRef(null);y__namespace.useImperativeHandle(p,()=>h.current);let[b,v]=y__namespace.useState(null);y__namespace.useEffect(()=>{let x=h.current;x?.parentElement&&v(Array.from(x.parentElement.children).indexOf(x));},[m]);let S=b!=null&&b===u;return y__namespace.useEffect(()=>{let x=f.current;if(x)if(S){let w=x.play();w&&typeof w.catch=="function"&&w.catch(()=>{});}else x.pause(),x.currentTime=0;},[S]),y__namespace.createElement(Dr,{ref:h,duration:i,className:d("relative overflow-hidden bg-[var(--gds-media-placeholder-bg)]",l),style:s,"data-gds-part":"carousel-video-slide",...c},t&&y__namespace.createElement("img",{src:t,alt:o??"","aria-hidden":S,className:"absolute inset-0 h-full w-full",style:{objectFit:r,opacity:S?0:1,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"}}),y__namespace.createElement("video",{ref:f,src:e,muted:true,playsInline:true,loop:n,controls:a,preload:"metadata","aria-label":o,className:"block h-full w-full",style:{objectFit:r,opacity:S?1:0,transition:"opacity var(--gds-carousel-fade-ms, 200ms) ease-out"},onEnded:()=>{n||b!=null&&g(b);}}))});Un.displayName="Carousel.VideoSlide";var $n=y__namespace.forwardRef(({position:e="below",renderDot:t,className:o,style:a,...n},r)=>{let{api:i,selectedIndex:l,slideCount:s}=Ka("Carousel.Dots");if(s<=1)return null;let c=Array.from({length:s},(m,u)=>u),p=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 y__namespace.createElement("div",{ref:r,"data-gds-part":"carousel-dots",className:d("flex items-center justify-center",o),style:{gap:"var(--gds-carousel-dots-spacing, 0.5rem)",...p,...a},...n},c.map(m=>{let u=m===l,g=()=>i?.scrollTo(m);return t?t({index:m,active:u,onClick:g}):y__namespace.createElement("button",{key:m,type:"button",onClick:g,"aria-label":`Go to slide ${m+1}`,"aria-current":u?"true":void 0,"data-active":u||void 0,className:"rounded-full transition-all",style:{width:u?"var(--gds-carousel-dot-active-width, 1.25rem)":"var(--gds-carousel-dot-size, 0.5rem)",height:"var(--gds-carousel-dot-size, 0.5rem)",background:u?"var(--gds-carousel-dot-active-color, oklch(var(--primary)))":"var(--gds-carousel-dot-color, oklch(var(--muted-foreground) / 0.4))"}})}))});$n.displayName="Carousel.Dots";var jn=y__namespace.forwardRef(({position:e="overlay",className:t,style:o,...a},n)=>e==="outside"?y__namespace.createElement("div",{ref:n,"data-gds-part":"carousel-arrows",className:d("flex items-center justify-end gap-2 pt-2",t),style:o,...a},y__namespace.createElement($a,null),y__namespace.createElement(ja,null)):y__namespace.createElement("div",{ref:n,"data-gds-part":"carousel-arrows",className:d("pointer-events-none absolute inset-0 z-[1]",t),style:o,...a},y__namespace.createElement($a,{className:"pointer-events-auto absolute left-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"}),y__namespace.createElement(ja,{className:"pointer-events-auto absolute right-[var(--gds-carousel-arrow-inset,0.75rem)] top-1/2 -translate-y-1/2"})));jn.displayName="Carousel.Arrows";var $a=y__namespace.forwardRef(({className:e,style:t,children:o,...a},n)=>{let{api:r,canScrollPrev:i}=Ka("Carousel.Prev");return y__namespace.createElement("button",{ref:n,type:"button","data-gds-part":"carousel-prev","aria-label":"Previous slide",disabled:!i,onClick:()=>r?.scrollPrev(),className:d("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},...a},o??y__namespace.createElement(lucideReact.ChevronLeft,{className:"h-4 w-4","aria-hidden":true}))});$a.displayName="Carousel.Prev";var ja=y__namespace.forwardRef(({className:e,style:t,children:o,...a},n)=>{let{api:r,canScrollNext:i}=Ka("Carousel.Next");return y__namespace.createElement("button",{ref:n,type:"button","data-gds-part":"carousel-next","aria-label":"Next slide",disabled:!i,onClick:()=>r?.scrollNext(),className:d("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},...a},o??y__namespace.createElement(lucideReact.ChevronRight,{className:"h-4 w-4","aria-hidden":true}))});ja.displayName="Carousel.Next";Ao.Slide=Dr;Ao.VideoSlide=Un;Ao.Dots=$n;Ao.Arrows=jn;Ao.Prev=$a;Ao.Next=ja;var qm=Ao;function Ym(){return y__namespace.useContext(Wn)?.api}var Ar=y__namespace.forwardRef(({className:e,surface:t="solid",...o},a)=>y__namespace.createElement("div",{ref:a,"data-gds-part":"card","data-surface":t,className:d("gds-card rounded-xl border text-card-foreground shadow",qt(t,"bg-card"),St[t],e),...o}));Ar.displayName="Card";var gc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"card-header",className:d("flex flex-col space-y-1.5 p-6",e),...t}));gc.displayName="CardHeader";var fc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"card-title",className:d("font-semibold leading-none tracking-tight",e),...t}));fc.displayName="CardTitle";var hc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"card-description",className:d("text-sm text-muted-foreground",e),...t}));hc.displayName="CardDescription";var bc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"card-content",className:d("p-6 pt-0",e),...t}));bc.displayName="CardContent";var vc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,"data-gds-part":"card-footer",className:d("flex items-center p-6 pt-0",e),...t}));vc.displayName="CardFooter";var yc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(qa__namespace.Root,{ref:o,className:d("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},y__namespace.createElement(qa__namespace.Indicator,{className:d("flex items-center justify-center text-current")},y__namespace.createElement(lucideReact.Check,{className:"h-4 w-4"}))));yc.displayName=qa__namespace.Root.displayName;var Kn=y__namespace.createContext(null),Ir=y__namespace.forwardRef(({className:e,...t},o)=>{let a=y__namespace.useContext(Kn);return y__namespace.createElement("label",{ref:o,htmlFor:a?.controlId,className:d("text-sm font-medium leading-none text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70",e),...t})});Ir.displayName="Field.Label";var Hr=y__namespace.forwardRef(({className:e,...t},o)=>{let a=y__namespace.useContext(Kn);return y__namespace.createElement("p",{ref:o,id:a?.descriptionId,className:d("text-sm text-muted-foreground",e),...t})});Hr.displayName="Field.Description";var Fr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{ref:o,className:d("flex shrink-0 items-center gap-2",e),...t}));Fr.displayName="Field.Trailing";var xc=y__namespace.forwardRef(({layout:e="option",className:t,children:o,...a},n)=>{let r=y__namespace.useId(),i=null,l=null,s=null,c=null;y__namespace.Children.forEach(o,v=>{y__namespace.isValidElement(v)&&(v.type===Ir?i=v:v.type===Hr?l=v:v.type===Fr?s=v:c||(c=v));});let p=c,m=p?.props??{},u=m.id??`${r}-control`,g=l?`${r}-description`:void 0,h=[m["aria-describedby"],g].filter(Boolean).join(" ")||void 0,f=p?y__namespace.cloneElement(p,{id:u,"aria-describedby":h}):null,b=y__namespace.createElement("div",{className:"flex min-w-0 flex-col gap-0.5"},i,l);return y__namespace.createElement(Kn.Provider,{value:{controlId:u,descriptionId:g}},y__namespace.createElement("div",{ref:n,"data-gds-part":"field","data-layout":e,className:d("flex gap-3",e==="setting"?"items-center justify-between":l?"items-start":"items-center",t),...a},e==="setting"?y__namespace.createElement(y__namespace.Fragment,null,b,y__namespace.createElement("div",{className:"flex shrink-0 items-center gap-2"},s,f)):y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement("div",{className:d("shrink-0",l?"mt-0.5":void 0)},f),y__namespace.createElement("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5"},i,l),s)))});xc.displayName="Field";var Xm=Object.assign(xc,{Label:Ir,Description:Hr,Trailing:Fr});var wc=y__namespace.createContext({layout:"row",align:"center",divider:false}),Jm={compact:"var(--gds-property-list-row-gap-compact, 0.375rem)",default:"var(--gds-property-list-row-gap, 0.625rem)",relaxed:"var(--gds-property-list-row-gap-relaxed, 1rem)"},kc=y__namespace.forwardRef(({layout:e="row",density:t="default",align:o="center",divider:a=false,labelWidth:n,className:r,style:i,children:l,...s},c)=>y__namespace.createElement(wc.Provider,{value:{layout:e,align:o,divider:a}},y__namespace.createElement("dl",{ref:c,"data-gds-part":"property-list","data-layout":e,"data-density":t,className:d("flex min-w-0 flex-col",r),style:{rowGap:Jm[t],...n?{"--gds-property-list-label-width":n}:{},...i},...s},l)));kc.displayName="PropertyList";var qn=y__namespace.forwardRef(({label:e,icon:t,value:o,align:a,className:n,children:r,...i},l)=>{let{layout:s,align:c,divider:p}=y__namespace.useContext(wc),m=a??c,u=o??r;return y__namespace.createElement("div",{ref:l,"data-gds-part":"property",className:d("grid",p&&"border-t border-[color:var(--gds-property-list-divider-color,oklch(var(--border)))] pt-[var(--gds-property-list-row-gap,0.625rem)] first:border-t-0 first:pt-0",n),style:{gridTemplateColumns:s==="stack"?"minmax(0, 1fr)":"var(--gds-property-list-label-width, 8.5rem) minmax(0, 1fr)",columnGap:"var(--gds-property-list-col-gap, 1rem)",rowGap:s==="stack"?"0.25rem":void 0,alignItems:m==="start"?"start":"center"},...i},y__namespace.createElement("dt",{"data-gds-part":"property-label",className:d("flex min-w-0 items-center gap-1.5 text-sm text-[color:var(--gds-property-list-label-color,oklch(var(--muted-foreground)))]",m==="start"&&"pt-px")},t?y__namespace.createElement("span",{"data-gds-part":"property-icon","aria-hidden":true,className:"flex shrink-0 items-center justify-center text-current [&_svg]:h-[var(--gds-property-list-icon-size,0.875rem)] [&_svg]:w-[var(--gds-property-list-icon-size,0.875rem)]"},t):null,y__namespace.createElement("span",{className:"truncate"},e)),y__namespace.createElement("dd",{"data-gds-part":"property-value",className:"m-0 min-w-0 text-sm text-foreground"},u))});qn.displayName="PropertyList.Row";var Qm=Object.assign(kc,{Row:qn});function Yn({label:e,description:t,aside:o,hideIndicator:a,indicatorPosition:n="trailing",titleId:r,descriptionId:i,indicator:l,children:s}){let c=s!=null?y__namespace.createElement("div",{className:"gds-selection-card__slot"},s):y__namespace.createElement("div",{className:"gds-selection-card__content"},e!=null&&y__namespace.createElement("span",{id:r,className:"gds-selection-card__title"},e),t!=null&&y__namespace.createElement("span",{id:i,className:"gds-selection-card__desc"},t)),p=a?null:l;return n==="leading"?y__namespace.createElement(y__namespace.Fragment,null,p,c,o):y__namespace.createElement(y__namespace.Fragment,null,c,o,p)}var tg=y__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--radio","aria-hidden":true},y__namespace.createElement(_o__namespace.Indicator,{className:"gds-selection-indicator__dot"})),og=y__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--checkbox","aria-hidden":true},y__namespace.createElement(qa__namespace.Indicator,{className:"gds-selection-indicator__check"},y__namespace.createElement(lucideReact.Check,{className:"h-3.5 w-3.5",strokeWidth:3}))),ag=y__namespace.createElement("span",{className:"gds-selection-indicator gds-selection-indicator--switch","aria-hidden":true},y__namespace.createElement(gr__namespace.Thumb,{className:"gds-selection-indicator__thumb"})),Sc=y__namespace.forwardRef(({className:e,label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r="trailing",children:i,...l},s)=>{let c=y__namespace.useId(),p=t!=null?`${c}-t`:void 0,m=o!=null?`${c}-d`:void 0;return y__namespace.createElement(_o__namespace.Item,{ref:s,"data-gds-part":"radio-card","data-indicator":r,"aria-labelledby":p,"aria-describedby":m,className:d("gds-selection-card",e),...l},y__namespace.createElement(Yn,{label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r,titleId:p,descriptionId:m,indicator:tg},i))});Sc.displayName="RadioCard";var Rc=y__namespace.forwardRef(({className:e,label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r="trailing",children:i,...l},s)=>{let c=y__namespace.useId(),p=t!=null?`${c}-t`:void 0,m=o!=null?`${c}-d`:void 0;return y__namespace.createElement(qa__namespace.Root,{ref:s,"data-gds-part":"checkbox-card","data-indicator":r,"aria-labelledby":p,"aria-describedby":m,className:d("gds-selection-card",e),...l},y__namespace.createElement(Yn,{label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r,titleId:p,descriptionId:m,indicator:og},i))});Rc.displayName="CheckboxCard";var Cc=y__namespace.forwardRef(({className:e,label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r="trailing",children:i,...l},s)=>{let c=y__namespace.useId(),p=t!=null?`${c}-t`:void 0,m=o!=null?`${c}-d`:void 0;return y__namespace.createElement(gr__namespace.Root,{ref:s,"data-gds-part":"switch-card","data-indicator":r,"aria-labelledby":p,"aria-describedby":m,className:d("gds-selection-card",e),...l},y__namespace.createElement(Yn,{label:t,description:o,aside:a,hideIndicator:n,indicatorPosition:r,titleId:p,descriptionId:m,indicator:ag},i))});Cc.displayName="SwitchCard";var Sa={slow:{tokenStagger:70,lineStagger:200,preDelay:500,fadeMs:480},normal:{tokenStagger:22,lineStagger:55,preDelay:200,fadeMs:280},fast:{tokenStagger:8,lineStagger:18,preDelay:60,fadeMs:160}},_r=.55;function Pe(e,t){return e<=0?Promise.resolve():new Promise((o,a)=>{if(t?.aborted){a(new DOMException("Aborted","AbortError"));return}let n=window.setTimeout(()=>{t?.removeEventListener("abort",r),o();},e),r=()=>{window.clearTimeout(n),a(new DOMException("Aborted","AbortError"));};t?.addEventListener("abort",r,{once:true});})}async function Or(e,t,o=22,a){if(o<=0){t(e);return}for(let n=1;n<=e.length;n++)t(e.slice(0,n)),n<e.length&&await Pe(o,a);}function Zn(e){return e instanceof DOMException&&e.name==="AbortError"}var Ya="data-motion",Tc="off",Pc="(prefers-reduced-motion: reduce)";function rg(){if(typeof window>"u"||typeof document>"u")return false;let e=window.matchMedia(Pc).matches,t=document.documentElement.getAttribute(Ya)===Tc;return e||t}function yo(){let[e,t]=y__namespace.useState(false);return y__namespace.useEffect(()=>{let o=()=>t(rg());o();let a=window.matchMedia(Pc);a.addEventListener("change",o);let n=new MutationObserver(o);return n.observe(document.documentElement,{attributes:true,attributeFilter:[Ya]}),()=>{a.removeEventListener("change",o),n.disconnect();}},[]),e}var Io=yo;function Za(){let[e,t]=y__namespace.useState(true);return y__namespace.useEffect(()=>{let o=window.self!==window.top,a=()=>document.visibilityState!=="hidden"&&(o||document.hasFocus()),n=()=>t(a());return n(),document.addEventListener("visibilitychange",n),window.addEventListener("focus",n),window.addEventListener("blur",n),window.addEventListener("pageshow",n),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("focus",n),window.removeEventListener("blur",n),window.removeEventListener("pageshow",n);}},[]),e}function ng(e){if(typeof document>"u")return;let t=document.documentElement;e?t.removeAttribute(Ya):t.setAttribute(Ya,Tc);}var ig=2e3,sg={tokenStagger:0,lineStagger:0,preDelay:0,fadeMs:0};function Ho(e){let{steps:t,interpret:o,speed:a="normal",trigger:n="mount",play:r,loop:i=false,loopDelay:l=ig,maxLoops:s=1/0,containerRef:c,onComplete:p,onLoopReset:m}=e,u=yo(),g=u?sg:Sa[a],h=u?false:i,f=Za(),[b,v]=y__namespace.useState(false),[S,x]=y__namespace.useState(false),[w,k]=y__namespace.useState(-1),C=y__namespace.useRef(null),E=react.useInView(c??C,{once:true,amount:_r}),F=react.useInView(c??C,{amount:_r}),O=f&&(c?F:true),[M,N]=y__namespace.useState(0),H=y__namespace.useMemo(()=>n==="mount"?true:n==="inView"?E:!!r||M>0,[n,E,r,M]),Y=y__namespace.useRef(o);Y.current=o;let se=y__namespace.useRef(p);se.current=p;let D=y__namespace.useRef(m);D.current=m;let V=y__namespace.useRef(null),R=y__namespace.useRef(null),_=y__namespace.useCallback(()=>{V.current?.abort(),V.current=null,R.current!==null&&(window.clearTimeout(R.current),R.current=null),v(false);},[]),le=y__namespace.useCallback(()=>{N(U=>U+1);},[]),X=y__namespace.useCallback((U=0)=>{if(V.current?.abort(),V.current=null,R.current!==null&&(window.clearTimeout(R.current),R.current=null),U>0){R.current=window.setTimeout(()=>{R.current=null,N(J=>J+1);},U);return}N(J=>J+1);},[]);return y__namespace.useEffect(()=>()=>{R.current!==null&&(window.clearTimeout(R.current),R.current=null);},[]),y__namespace.useEffect(()=>{if(!t||t.length===0||!u&&(!H||!O))return;let U=new AbortController;V.current=U;let{signal:J}=U,De={speed:g,signal:J,cancelled:()=>J.aborted,reduced:u},de=true,T=0;return (async()=>{do{v(true),x(false),k(-1);try{await Pe(n==="inView"?g.preDelay:0,J);for(let $=0;$<t.length;$++){if(J.aborted)return;k($),await Y.current(t[$],De);}if(J.aborted)return;if(k(-1),x(!0),se.current?.(),T+=1,!h||T>=s){v(!1);return}if(await Pe(l,J),J.aborted)return;D.current?.();}catch($){if(Zn($))return;process.env.NODE_ENV!=="production"&&console.error("[useScriptedDemo] step error:",$),v(false);return}}while(de&&h&&!J.aborted)})(),()=>{de=false,U.abort(),V.current===U&&(V.current=null);}},[t,H,O,h,l,g,n,M,u]),{isPlaying:b,isComplete:S,currentIndex:w,play:le,stop:_,restart:X}}var Wr=y__namespace.forwardRef(function({variant:t="inline",className:o,...a},n){return y__namespace.createElement("span",{ref:n,"data-gds-part":"demo-cursor","data-gds-variant":t,"aria-hidden":true,className:d("gds-demo-cursor",o),...a})});var Nc=y__namespace.createContext({visible:new Set,hasStage:false,reducedMotion:false,defaultAnimation:"fade-up"});function Ec({steps:e,speed:t="normal",trigger:o="mount",play:a,loop:n=false,defaultAnimation:r="fade-up",visibleWhenIdle:i=true,className:l,children:s}){let c=react.useReducedMotion()??false,p=y__namespace.useRef(null),[m,u]=y__namespace.useState(()=>new Set),g=!!(e&&e.length);Ho({steps:g?e:void 0,speed:t,trigger:o,play:a,loop:n,containerRef:p,onLoopReset:()=>u(new Set),interpret:async(b,v)=>{if(b.type==="wait")return Pe(b.ms,v.signal);if(b.type==="reset")return u(new Set),Pe(v.speed.preDelay,v.signal);if(b.type==="reveal")return u(S=>{if(S.has(b.target))return S;let x=new Set(S);return x.add(b.target),x}),Pe(v.speed.lineStagger,v.signal);if(b.type==="reveal-all")return u(S=>{let x=new Set(S);return x.add("__all__"),x}),Pe(v.speed.lineStagger,v.signal);if(b.type==="hide")return u(S=>{if(!S.has(b.target))return S;let x=new Set(S);return x.delete(b.target),x}),Pe(v.speed.fadeMs,v.signal)}});let h=y__namespace.useMemo(()=>({visible:g?m:new Set(["__all__"]),hasStage:true,reducedMotion:c,defaultAnimation:r}),[g,m,c,r]),f=!g&&!i?{...h,visible:new Set}:h;return y__namespace.createElement("div",{ref:p,"data-gds-part":"demo-stage","data-gds-stage-playing":g?"true":"false",className:l},y__namespace.createElement(Nc.Provider,{value:f},s))}var dg={fade:{initial:{opacity:0},animate:{opacity:1}},"fade-up":{initial:{opacity:0,y:12},animate:{opacity:1,y:0}},"fade-down":{initial:{opacity:0,y:-12},animate:{opacity:1,y:0}},"fade-left":{initial:{opacity:0,x:12},animate:{opacity:1,x:0}},"fade-right":{initial:{opacity:0,x:-12},animate:{opacity:1,x:0}},scale:{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1}},none:{initial:{opacity:1},animate:{opacity:1}}};function Lc({id:e,animation:t,durationMs:o,hideOutsideStage:a=false,onReveal:n,onHide:r,className:i,children:l}){let s=y__namespace.useContext(Nc),c=s.hasStage?s.visible.has("__all__")||s.visible.has(e):!a,p=y__namespace.useRef(c),m=y__namespace.useRef(n),u=y__namespace.useRef(r);m.current=n,u.current=r,y__namespace.useEffect(()=>{c!==p.current&&(p.current=c,c?m.current?.():u.current?.());},[c]);let g=t??s.defaultAnimation,h=dg[g],f=(o??280)/1e3;return s.reducedMotion?y__namespace.createElement("div",{"data-gds-part":"reveal","data-gds-reveal-id":e,"data-gds-revealed":c?"true":"false",className:i,style:{opacity:c?1:0}},l):y__namespace.createElement(react.motion.div,{"data-gds-part":"reveal","data-gds-reveal-id":e,"data-gds-revealed":c?"true":"false",className:i,initial:h.initial,animate:c?h.animate:h.initial,transition:{duration:f,ease:[.22,1,.36,1]}},l)}var mg={xs:"text-xs",sm:"text-sm",md:"text-base"},gg={slow:{lineStagger:200,tokenStagger:70,preDelay:500,fadeMs:480},normal:{lineStagger:55,tokenStagger:22,preDelay:200,fadeMs:280},fast:{lineStagger:18,tokenStagger:8,preDelay:60,fadeMs:160}},fg={plain:{color:"var(--gds-code-fg)",backgroundColor:"transparent"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"var(--gds-code-comment)",fontStyle:"normal"}},{types:["punctuation"],style:{color:"var(--gds-code-punctuation)"}},{types:["property","constant","symbol","deleted"],style:{color:"var(--gds-code-property)"}},{types:["boolean","number"],style:{color:"var(--gds-code-number)"}},{types:["selector","attr-name","string","char","builtin","inserted"],style:{color:"var(--gds-code-string)"}},{types:["operator","entity","url"],style:{color:"var(--gds-code-operator)"}},{types:["atrule","keyword"],style:{color:"var(--gds-code-keyword)"}},{types:["function","class-name"],style:{color:"var(--gds-code-function)"}},{types:["regex","important","variable"],style:{color:"var(--gds-code-variable)"}},{types:["tag"],style:{color:"var(--gds-code-tag)"}},{types:["attr-name"],style:{color:"var(--gds-code-attr-name)"}},{types:["attr-value"],style:{color:"var(--gds-code-attr-value)"}}]};function hg(e){let t=new Set;if(e==null)return t;let o=Array.isArray(e)?e:[e];for(let a of o)if(typeof a=="number")t.add(a);else if(Array.isArray(a)&&a.length===2){let[n,r]=a;for(let i=n;i<=r;i++)t.add(i);}return t}function bg(e,t,o){return t?.added?.includes(e)?"added":t?.removed?.includes(e)?"removed":o.has(e)?"highlight":"default"}var Ac=y__namespace.forwardRef(function({source:t,language:o="tsx",highlight:a,diff:n,reveal:r="none",trigger:i="mount",play:l,speed:s="normal",delay:c,stagger:p,showLineNumbers:m=false,filename:u,wrap:g=false,bare:h=false,prompt:f,cursor:b,steps:v,loop:S=false,size:x="sm",height:w,maxLines:k,className:C,style:E,...F},O){let M=gg[s],N=c??0,H=p??(r==="typewriter"?M.tokenStagger:M.lineStagger),Y=!!(v&&v.length),[se,D]=y__namespace.useState(""),[V,R]=y__namespace.useState(()=>new Set),_=Y?se:t??"",le=y__namespace.useMemo(()=>_.replace(/\n$/,""),[_]),X=y__namespace.useMemo(()=>hg(a),[a]),U=!!(n?.added?.length||n?.removed?.length),J=m||U,ke=y__namespace.useRef(null);y__namespace.useImperativeHandle(O,()=>ke.current);let[De,de]=y__namespace.useState(r==="none"),T=react.useInView(ke,{once:true,amount:.55}),Z=i==="inView"?M.preDelay:0,$=i==="mount"?true:i==="inView"?T:!!l,Se=H,j=le.split(`
108
+ `).length,je=r==="typewriter"?le.replace(/\s+/g," ").split(" ").length:j,Te=Z+N+je*Se+280;y__namespace.useEffect(()=>{if(Y)return;if(!$||r==="none"){de(r==="none");return}de(false);let he=window.setTimeout(()=>de(true),Te);return ()=>window.clearTimeout(he)},[$,r,Te,Y]);let Qe=y__namespace.useRef(""),G=y__namespace.useRef(new Set),K=y__namespace.useCallback(he=>{Qe.current=he,D(he);},[]),W=y__namespace.useCallback(he=>{G.current=he,R(he);},[]),{isComplete:pe}=Ho({steps:Y?v:void 0,speed:s,trigger:"manual",play:$,loop:S,containerRef:ke,onLoopReset:()=>{K(""),W(new Set),de(false);},interpret:async(he,Gt)=>{let _e=Gt.signal;if(he.type==="wait")return Pe(he.ms,_e);if(he.type==="clear"){K(""),W(new Set);return}if(he.type==="output"){let re=Qe.current,Me=re.length>0&&!re.endsWith(`
109
+ `)?re+`
110
+ `:re,Wt=Me+he.text,jo=Me.split(`
111
+ `).length,Bn=he.text.split(`
112
+ `).length,Ha=new Set(G.current);for(let ua=0;ua<Bn;ua++)Ha.add(jo+ua);return K(Wt),W(Ha),K(Wt+(Wt.endsWith(`
113
113
  `)?"":`
114
- `)),we(240,Ne)}let Mt=_.speed?er[_.speed].tokenStagger:Le.speed.tokenStagger,We=Ge.current,pr=We.length>0&&!We.endsWith(`
115
- `)?We+`
116
- `:We;await we(60,Ne);for(let tt=0;tt<_.text.length;tt++){if(Ne.aborted)return;let Nt=pr+_.text.slice(0,tt+1);K(Nt),tt<_.text.length-1&&await we(Mt,Ne);}}});v__namespace.useEffect(()=>{q&&xe(ge);},[q,ge]);let Te=b??(a==="typewriter"||q);return v__namespace.createElement("div",{ref:ae,"data-gds-part":"code","data-gds-reveal":a,"data-gds-trigger":i,"data-gds-size":w,className:d("gds-code relative w-full overflow-hidden",am[w],!h&&["rounded-lg border bg-[var(--gds-code-bg)] text-[var(--gds-code-fg)]","border-border/60"],M),style:A,...H},u&&!h?v__namespace.createElement("div",{"data-gds-part":"code-header",className:"flex items-center justify-between border-b border-border/60 px-4 py-2 text-xs text-muted-foreground"},v__namespace.createElement("span",{className:"font-mono"},u),o?v__namespace.createElement("span",{className:"uppercase tracking-wider opacity-60"},o):null):null,v__namespace.createElement(prismReactRenderer.Highlight,{code:he,language:o,theme:im},({tokens:_,getLineProps:Le,getTokenProps:Ne})=>v__namespace.createElement("pre",{"data-gds-part":"code-pre",className:d("font-mono leading-relaxed",h?"p-0":"px-0 py-3",m?"whitespace-pre-wrap break-words":"overflow-x-auto whitespace-pre",(x!==void 0||S!==void 0)&&"overflow-y-auto"),style:{background:"transparent",margin:0,...S!==void 0?{height:`calc(${S} * 1lh + 0.5rem)`}:x!==void 0&&x!=="auto"?{height:typeof x=="number"?`${x}px`:x}:null}},_.map((Mt,We)=>{let pr=We+1,tt=lm(pr,n,I),Nt=Le({line:Mt}),ur=We===_.length-1,mr=q&&ue.has(pr),rn=Te&&ur&&(!U||b===true),gr=d("flex w-full pr-4",h?"pl-0":"pl-4",tt==="added"&&"bg-[var(--gds-code-diff-added-bg)] text-[var(--gds-code-diff-added-fg)]",tt==="removed"&&"bg-[var(--gds-code-diff-removed-bg)] text-[var(--gds-code-diff-removed-fg)]",tt==="highlight"&&"bg-[var(--gds-code-line-highlight-bg)] shadow-[inset_2px_0_0_0_var(--gds-code-line-highlight-marker)]"),$o=v__namespace.createElement(v__namespace.Fragment,null,Z?v__namespace.createElement("span",{"data-gds-part":"code-gutter",className:d("select-none pr-3 text-right font-mono text-xs leading-relaxed opacity-60",j?"w-10":"w-8"),"aria-hidden":true},j?v__namespace.createElement("span",{className:"inline-block w-3 text-center"},tt==="added"?"+":tt==="removed"?"-":" "):null,g?v__namespace.createElement("span",{className:"ml-1 tabular-nums"},pr):null):null,v__namespace.createElement("span",{className:"flex-1",style:mr?{color:"var(--gds-code-comment)"}:void 0},f&&!mr?v__namespace.createElement("span",{"data-gds-part":"code-prompt","aria-hidden":true,className:"select-none opacity-60",style:{color:"var(--gds-code-comment)"}},f):null,a==="typewriter"&&X&&!q?v__namespace.createElement(dm,{line:Mt,getTokenProps:Ne,delay:me+F+We*Ke,stagger:Ke}):Mt.map((Gp,Wp)=>v__namespace.createElement("span",{key:Wp,...Ne({token:Gp})})),rn&&!mr?v__namespace.createElement(xa,{"data-gds-part":"code-cursor"}):null));return a==="none"||a==="typewriter"||q||!X?v__namespace.createElement("div",{key:We,...Nt,className:d(Nt.className,gr),style:{...Nt.style,opacity:i!=="mount"&&!X&&a!=="none"?0:void 0}},$o):v__namespace.createElement(react.motion.div,{key:We,...Nt,className:d(Nt.className,gr),initial:{opacity:0,y:a==="diff"?tt==="removed"?-4:6:4},animate:{opacity:1,y:0},transition:{delay:(me+F+We*Ke)/1e3,duration:z.fadeMs/1e3,ease:[.22,1,.36,1]},style:Nt.style},$o)}))))});Fl.displayName="Code";function dm({line:e,getTokenProps:t,delay:o,stagger:r}){let n=0;return v__namespace.createElement(v__namespace.Fragment,null,e.map((a,i)=>{let p=/^\s*$/.test(a.content),s=t({token:a});if(p)return v__namespace.createElement("span",{key:i,...s});let c=n++;return v__namespace.createElement(react.motion.span,{key:i,...s,initial:{opacity:0},animate:{opacity:1},transition:{delay:(o+c*r)/1e3,duration:.12}})}))}var cm={default:{row:"gap-3",content:"space-y-1",author:"text-sm font-semibold",meta:"text-xs",body:"text-sm leading-relaxed",thread:"text-xs"},compact:{row:"gap-2",content:"space-y-0.5",author:"text-xs font-semibold",meta:"text-[10px]",body:"text-xs leading-relaxed",thread:"text-[11px]"}},pm=v__namespace.forwardRef(function({author:t,timestamp:o,avatar:r,badge:n,edited:a,pinned:i,actions:p,reactions:s,threadCount:c,onThreadClick:l,align:g="start",density:u="default",className:m,children:h,...f},b){let y=g==="end",R=a===true?"(edited)":a||void 0,w=cm[u];return v__namespace.createElement("div",{ref:b,"data-gds-part":"message","data-gds-align":g,"data-gds-density":u,"data-gds-pinned":i?"true":void 0,className:d("flex items-start",w.row,y&&"flex-row-reverse",m),...f},r&&v__namespace.createElement("div",{"data-gds-part":"message-avatar",className:"flex-shrink-0"},r),v__namespace.createElement("div",{"data-gds-part":"message-content",className:d("flex-1 min-w-0",w.content,y&&"text-right")},i&&v__namespace.createElement("div",{"data-gds-part":"message-pinned",className:d("flex items-center gap-1 text-[10px] uppercase tracking-wider text-muted-foreground",y&&"flex-row-reverse")},v__namespace.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 16 16",className:"h-3 w-3",fill:"currentColor"},v__namespace.createElement("path",{d:"M9.828.722a.5.5 0 0 1 .707 0l4.743 4.743a.5.5 0 0 1 0 .707l-2.121 2.121a.5.5 0 0 1-.354.146h-1.792l-3.586 3.586v2.293a.5.5 0 0 1-.854.354L4.146 12.39 1 15.535V14.12l3.146-3.146-1.293-1.293a.5.5 0 0 1 .354-.854h2.293l3.586-3.586V3.45a.5.5 0 0 1 .146-.354L9.828.722Z"})),"Pinned"),v__namespace.createElement("div",{"data-gds-part":"message-header",className:d("flex items-baseline gap-2 flex-wrap",y&&"flex-row-reverse")},v__namespace.createElement("span",{"data-gds-part":"message-author",className:w.author},t),n&&v__namespace.createElement("div",{"data-gds-part":"message-badge"},n),o&&v__namespace.createElement("span",{"data-gds-part":"message-timestamp",className:d(w.meta,"text-muted-foreground")},o),R&&v__namespace.createElement("span",{"data-gds-part":"message-edited",className:d(w.meta,"text-muted-foreground")},R),p&&v__namespace.createElement("div",{"data-gds-part":"message-actions",className:d(y?"mr-auto":"ml-auto")},p)),v__namespace.createElement("div",{"data-gds-part":"message-body",className:w.body},h),s&&v__namespace.createElement("div",{"data-gds-part":"message-reactions",className:d("flex flex-wrap gap-1 pt-1",y&&"justify-end")},s),typeof c=="number"&&c>0&&v__namespace.createElement("button",{type:"button","data-gds-part":"message-thread",onClick:l,className:d("inline-flex items-center gap-1 font-medium",w.thread,"text-primary hover:underline","focus:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded",y&&"flex-row-reverse")},v__namespace.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 16 16",className:"h-3 w-3",fill:"currentColor"},v__namespace.createElement("path",{d:"M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H6.414l-2.707 2.707A1 1 0 0 1 2 12V3Z"})),c," ",c===1?"reply":"replies")))});function og({onSubmit:e,enabled:t}){let[o]=LexicalComposerContext.useLexicalComposerContext();return v__namespace.useEffect(()=>{if(t)return o.registerCommand(lexical.KEY_ENTER_COMMAND,r=>r&&r.shiftKey?false:(r?.preventDefault(),e(),true),lexical.COMMAND_PRIORITY_HIGH)},[o,t,e]),null}function rg({onImageFiles:e,enabled:t}){let[o]=LexicalComposerContext.useLexicalComposerContext();return v__namespace.useEffect(()=>{if(!t)return;let r=o.getRootElement();if(!r)return;let n=a=>{let p=Array.from(a.clipboardData?.items??[]).filter(s=>s.kind==="file"&&s.type.startsWith("image/")).map(s=>s.getAsFile()).filter(s=>s!==null);p.length>0&&(a.preventDefault(),e(p));};return r.addEventListener("paste",n),()=>r.removeEventListener("paste",n)},[o,t,e]),null}function ag({enabled:e}){let[t]=LexicalComposerContext.useLexicalComposerContext();return v__namespace.useEffect(()=>{e&&t.focus();},[t,e]),null}var _l={bold:"bold",italic:"italic",underline:"underline",strikethrough:"strikethrough",code:"code"};function Bl(e,t){let o=_l[t];if(o){e.dispatchCommand(lexical.FORMAT_TEXT_COMMAND,o);return}if(t==="ul"){e.dispatchCommand(list.INSERT_UNORDERED_LIST_COMMAND,void 0);return}if(t==="ol"){e.dispatchCommand(list.INSERT_ORDERED_LIST_COMMAND,void 0);return}e.update(()=>{let r=lexical.$getSelection();if(lexical.$isRangeSelection(r)){if(t==="h1"||t==="h2"||t==="h3"){let n=t;selection.$setBlocksType(r,()=>richText.$createHeadingNode(n));return}(t==="blockquote"||t==="pullquote")&&selection.$setBlocksType(r,()=>{let n=richText.$createQuoteNode();return t==="pullquote"&&(n.__pullquote=true),n});}});}function ng(e,t,o,r){e.update(()=>{let n=lexical.$getSelection();if(!lexical.$isRangeSelection(n))return;let a=lexicalBeautifulMentions.$createBeautifulMentionNode(t,o,r);n.insertNodes([a]),n.insertText(" ");});}function ig(e,t){let o=false;return e.update(()=>{let r=lexical.$getRoot(),a=r.getTextContent().indexOf(t);if(a===-1)return;let i=0,p=null,s=0,c=null,l=0,g=u=>{if(!(p&&c)){if(u.getType()==="text"){let m=u,h=m.getTextContentSize(),f=i,b=i+h;!p&&a>=f&&a<b&&(p=m,s=a-f);let y=a+t.length;!c&&y>f&&y<=b&&(c=m,l=y-f),i=b;return}if("getChildren"in u)for(let m of u.getChildren())g(m);else i+=u.getTextContentSize();}};if(g(r),p&&c){let u=p,m=c;u.select(s,0).focus.set(m.getKey(),l,"text"),o=true;}}),o}function Lr(e){e.update(()=>{let t=lexical.$getRoot();t.clear();let o=lexical.$createParagraphNode();t.append(o),o.select();});}function Ol(e){let t="",o="",r=[];return e.getEditorState().read(()=>{t=lexical.$getRoot().getTextContent(),o=JSON.stringify(e.getEditorState().toJSON());let n=a=>{if(a.getType()==="beautifulMention"){let i=a;r.push({trigger:i.getTrigger(),value:i.getValue(),data:i.getData()});}if("getChildren"in a)for(let i of a.getChildren())n(i);};n(lexical.$getRoot());}),{text:t,json:o,mentions:r}}var sg=[{format:"bold",icon:lucideReact.Bold,label:"Bold"},{format:"italic",icon:lucideReact.Italic,label:"Italic"},{format:"underline",icon:lucideReact.Underline,label:"Underline"},{format:"strikethrough",icon:lucideReact.Strikethrough,label:"Strikethrough"},{format:"code",icon:lucideReact.Code,label:"Inline code"},{format:"h1",icon:lucideReact.Heading1,label:"Heading 1"},{format:"h2",icon:lucideReact.Heading2,label:"Heading 2"},{format:"h3",icon:lucideReact.Heading3,label:"Heading 3"},{format:"blockquote",icon:lucideReact.Quote,label:"Blockquote"},{format:"ul",icon:lucideReact.List,label:"Bulleted list"},{format:"ol",icon:lucideReact.ListOrdered,label:"Numbered list"}];function lg({formats:e}){let[t]=LexicalComposerContext.useLexicalComposerContext(),[o,r]=v__namespace.useState(()=>new Set);v__namespace.useEffect(()=>utils.mergeRegister(t.registerUpdateListener(({editorState:a})=>{a.read(()=>{let i=lexical.$getSelection();if(!lexical.$isRangeSelection(i))return;let p=new Set;for(let s of ["bold","italic","underline","strikethrough","code"])i.hasFormat(s)&&p.add(s);r(p);});})),[t]);let n=sg.filter(a=>e.includes(a.format));return v__namespace.createElement("div",{"data-gds-part":"composer-toolbar",className:d("flex flex-wrap items-center gap-0.5","px-2 py-1")},n.map(({format:a,icon:i,label:p})=>{let s=_l[a],c=s?o.has(s):false;return v__namespace.createElement("button",{key:a,type:"button","aria-label":p,title:p,"data-gds-part":"composer-toolbar-button","data-gds-active":c?"true":"false",onClick:()=>Bl(t,a),className:d("h-7 w-7 inline-flex items-center justify-center rounded","text-[var(--gds-composer-toolbar-fg)]","hover:bg-[var(--gds-composer-toolbar-hover-bg)]","focus:outline-none focus:ring-2 focus:ring-primary",c&&"bg-[var(--gds-composer-toolbar-active-bg)] text-[var(--gds-composer-toolbar-active-fg)]")},v__namespace.createElement(i,{className:"h-3.5 w-3.5"}))}))}function dg({attachments:e,onRemove:t}){return v__namespace.createElement(react.AnimatePresence,{initial:false},e.length>0&&v__namespace.createElement(react.motion.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},transition:{duration:.18},className:"overflow-hidden"},v__namespace.createElement("div",{"data-gds-part":"composer-attachments",className:"flex flex-wrap gap-2 px-2 py-2"},e.map(o=>v__namespace.createElement("div",{key:o.id,className:"relative group"},o.file.type.startsWith("image/")?v__namespace.createElement("img",{src:o.previewUrl,alt:o.name,className:"h-14 w-14 rounded-md object-cover border border-[var(--gds-composer-border)]"}):v__namespace.createElement("div",{className:"h-14 w-14 rounded-md border border-[var(--gds-composer-border)] flex items-center justify-center text-xs px-1 text-center text-[var(--gds-composer-muted-fg)]"},o.name.slice(0,18)),v__namespace.createElement("button",{type:"button",onClick:()=>t(o.id),"aria-label":`Remove ${o.name}`,className:d("absolute -top-1.5 -right-1.5 h-5 w-5 rounded-full","bg-[var(--gds-composer-chip-remove-bg)]","text-[var(--gds-composer-chip-remove-fg)]","flex items-center justify-center","opacity-0 group-hover:opacity-100 focus:opacity-100","focus:outline-none focus:ring-2 focus:ring-primary","transition-opacity")},v__namespace.createElement(lucideReact.X,{className:"w-3 h-3"})))))))}function cg({placeholder:e,triggers:t,attachmentsCfg:o,formatList:r,showToolbar:n,isLoading:a,onStop:i,maxLength:p,autoFocus:s,submitOnEnter:c=true,leftActions:l,rightActions:g,hideSend:u,steps:m,trigger:h="mount",play:f,speed:b="normal",loop:y=false,loopDelay:R,onLoopReset:w,bare:x,className:S,onSubmit:M,onChange:A,readOnly:H,handleEditorReady:W,submitRef:z,restartRef:F,attachments:B,setAttachments:q,ingestImages:ie}){let[N]=LexicalComposerContext.useLexicalComposerContext(),ue=v__namespace.useRef(null),k=v__namespace.useRef(null),[G,he]=v__namespace.useState(false);v__namespace.useEffect(()=>{W(N);},[N,W]),v__namespace.useEffect(()=>{N.setEditable(!H);},[N,H]);let I=v__namespace.useRef(A);I.current=A,v__namespace.useEffect(()=>N.registerUpdateListener(({editorState:E})=>{E.read(()=>{let me=lexical.$getRoot().getTextContent();he(me.trim().length>0),I.current?.(me);});}),[N]);let j=v__namespace.useCallback(()=>{if(a)return;let E=Ol(N),me=E.text.trim().length>0,X=B.length>0;!me&&!X||(M?.(E,X?B:void 0),Lr(N),B.forEach(Ke=>URL.revokeObjectURL(Ke.previewUrl)),q([]));},[N,a,B,M,q]);z.current=j;let{restart:Z}=fo({steps:m,speed:b,trigger:h,play:f,loop:y,loopDelay:R,containerRef:ue,onLoopReset:()=>{Lr(N),w?.();},interpret:async(E,me)=>{let X=me.signal;if(E.type==="wait")return we(E.ms,X);if(E.type==="clear")return Lr(N),we(120,X);if(E.type==="newline")return N.update(()=>{let ve=lexical.$getSelection();lexical.$isRangeSelection(ve)&&ve.insertParagraph();}),we(60,X);if(E.type==="submit")return j(),we(120,X);if(E.type==="format")return Bl(N,E.format),N.update(()=>{let ve=lexical.$getSelection();if(!lexical.$isRangeSelection(ve)||ve.isCollapsed())return;let ke=ve.focus;ve.anchor.set(ke.key,ke.offset,ke.type);}),we(80,X);if(E.type==="select")return ig(N,E.text),we(120,X);if(E.type==="mention")return E.query&&(N.update(()=>{let ve=lexical.$getSelection();lexical.$isRangeSelection(ve)&&ve.insertText(E.trigger);}),await va(E.query,ve=>{N.update(()=>{let ke=lexical.$getRoot(),qe=ke.getTextContent(),Ge=qe.slice(0,qe.length-E.trigger.length-(ve.length-1));ke.clear();let O=lexical.$createParagraphNode();Ge&&O.append(lexical.$createTextNode(Ge)),O.append(lexical.$createTextNode(E.trigger+ve)),ke.append(O);});},me.speed.tokenStagger,X),await we(180,X),N.update(()=>{let ve=lexical.$getRoot(),ke=ve.getTextContent(),qe=E.trigger.length+E.query.length,Ge=ke.slice(0,ke.length-qe);ve.clear();let O=lexical.$createParagraphNode();Ge&&O.append(lexical.$createTextNode(Ge)),ve.append(O),O.select();})),ng(N,E.trigger,E.value),we(120,X);let Ke=E.speed?{slow:70,normal:22,fast:8}[E.speed]:me.speed.tokenStagger;for(let ve=0;ve<E.text.length;ve++){if(X.aborted)return;let ke=E.text[ve];N.update(()=>{let qe=lexical.$getSelection();if(!lexical.$isRangeSelection(qe)){lexical.$getRoot().selectEnd();let Ge=lexical.$getSelection();lexical.$isRangeSelection(Ge)&&Ge.insertText(ke);return}qe.insertText(ke);}),ve<E.text.length-1&&await we(Ke,X);}}});v__namespace.useEffect(()=>{F.current=E=>{Lr(N),Z(E);};},[N,Z,F]);let ae=!H&&!g&&!u,U=!H&&!l&&o!==null,xe=!H&&(U||l||ae||g);return v__namespace.createElement("div",{ref:ue,"data-gds-part":"composer","data-gds-loading":a?"true":"false",className:d("w-full",!x&&["rounded-md","bg-transparent","border border-input","shadow-sm","focus-within:outline-none focus-within:ring-1 focus-within:ring-ring","transition-colors"],S)},n&&v__namespace.createElement(lg,{formats:r}),o&&v__namespace.createElement(dg,{attachments:B,onRemove:E=>{q(me=>{let X=me.find(Ke=>Ke.id===E);return X&&URL.revokeObjectURL(X.previewUrl),me.filter(Ke=>Ke.id!==E)});}}),v__namespace.createElement("div",{className:"relative"},v__namespace.createElement(LexicalRichTextPlugin.RichTextPlugin,{contentEditable:v__namespace.createElement(LexicalContentEditable.ContentEditable,{"data-gds-part":"composer-editor",className:d("outline-none","px-3 sm:px-4 py-3","text-sm text-[var(--gds-composer-fg)]","min-h-[44px] max-h-[300px] overflow-y-auto","[&_p]:m-0 [&_p+p]:mt-2","[&_h1]:text-xl [&_h1]:font-semibold [&_h1]:mt-2","[&_h2]:text-lg [&_h2]:font-semibold [&_h2]:mt-2","[&_h3]:text-base [&_h3]:font-semibold [&_h3]:mt-2","[&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5","[&_blockquote]:border-l-2 [&_blockquote]:border-[var(--gds-composer-border)] [&_blockquote]:pl-3 [&_blockquote]:italic","[&_code]:bg-[var(--gds-composer-toolbar-active-bg)] [&_code]:px-1 [&_code]:py-0.5 [&_code]:rounded [&_code]:text-xs [&_code]:font-mono",a&&"opacity-60 pointer-events-none"),"aria-placeholder":e??"",placeholder:v__namespace.createElement("div",{"data-gds-part":"composer-placeholder",className:"absolute top-3 left-3 sm:left-4 text-sm text-muted-foreground pointer-events-none select-none"},e),spellCheck:true}),ErrorBoundary:LexicalErrorBoundary.LexicalErrorBoundary}),v__namespace.createElement(LexicalHistoryPlugin.HistoryPlugin,null),v__namespace.createElement(LexicalListPlugin.ListPlugin,null),v__namespace.createElement(LexicalLinkPlugin.LinkPlugin,null),v__namespace.createElement(LexicalOnChangePlugin.OnChangePlugin,{onChange:()=>{}}),v__namespace.createElement(ag,{enabled:!!s}),v__namespace.createElement(og,{onSubmit:j,enabled:c}),o&&v__namespace.createElement(rg,{onImageFiles:ie,enabled:true}),t.length>0&&v__namespace.createElement(lexicalBeautifulMentions.BeautifulMentionsPlugin,{items:t.reduce((E,me)=>(typeof me.items=="function"||(E[me.char]=me.items.map(X=>({value:X.value}))),E),{})})),xe&&v__namespace.createElement("div",{"data-gds-part":"composer-actions",className:"flex items-center justify-between gap-2 px-2 pb-2 pt-1"},v__namespace.createElement("div",{className:"flex items-center gap-1"},l??(U&&v__namespace.createElement("button",{type:"button",onClick:()=>k.current?.click(),disabled:a,"aria-label":"Attach image",title:"Attach image",className:d("h-8 w-8 rounded-lg flex items-center justify-center","text-[var(--gds-composer-action-fg)]","hover:text-[var(--gds-composer-fg)]","hover:bg-[var(--gds-composer-toolbar-hover-bg)]","focus:outline-none focus:ring-2 focus:ring-primary","transition-colors","disabled:opacity-50 disabled:cursor-not-allowed")},v__namespace.createElement(lucideReact.Paperclip,{className:"w-4 h-4"})))),g??(ae&&v__namespace.createElement("button",{type:"button",onClick:a?i:j,disabled:a?!i:!G&&B.length===0,"aria-label":a?"Stop":"Send",className:d("h-8 w-8 rounded-lg flex items-center justify-center transition-colors flex-shrink-0","focus:outline-none focus:ring-2 focus:ring-primary",a?"bg-red-500 hover:bg-red-600 text-white disabled:opacity-50":G||B.length>0?"bg-primary hover:bg-primary/90 text-primary-foreground":"bg-[var(--gds-composer-toolbar-active-bg)] text-[var(--gds-composer-muted-fg)] cursor-not-allowed")},a?v__namespace.createElement(lucideReact.Square,{className:"w-3.5 h-3.5"}):v__namespace.createElement(lucideReact.Send,{className:"w-3.5 h-3.5"}))),o&&v__namespace.createElement("input",{ref:k,type:"file",accept:o.accept,multiple:o.multiple,onChange:E=>{E.target.files&&ie(Array.from(E.target.files)),E.target.value="";},className:"sr-only",tabIndex:-1,"aria-hidden":"true"})))}var Vl=v__namespace.forwardRef(function(t,o){let{initialText:r,initialJson:n,formats:a,toolbar:i,triggers:p,attachments:s,...c}=t,l=v__namespace.useMemo(()=>a===false?[]:a??["bold","italic","underline","strikethrough","code","h1","h2","blockquote","ul","ol"],[a]),g=i===true||i==="top",u=v__namespace.useMemo(()=>{if(!s)return null;let z=s===true?{}:s;return z.enabled===false?null:{enabled:true,accept:z.accept??"image/*",maxItems:z.maxItems??10,multiple:z.multiple??true}},[s]),[m,h]=v__namespace.useState([]),f=v__namespace.useRef(m);f.current=m,v__namespace.useEffect(()=>()=>{f.current.forEach(z=>URL.revokeObjectURL(z.previewUrl));},[]);let b=v__namespace.useCallback(z=>{if(!u)return;let F=z.filter(B=>u.accept?u.accept==="image/*"?B.type.startsWith("image/"):u.accept.split(",").some(q=>{let ie=q.trim();return ie.endsWith("/*")?B.type.startsWith(ie.slice(0,-1)):B.type===ie||B.name.toLowerCase().endsWith(ie)}):true);F.length!==0&&h(B=>{let q=u.maxItems-B.length;if(q<=0)return B;let ie=F.slice(0,q).map(N=>({id:`${N.name}-${N.size}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,file:N,previewUrl:URL.createObjectURL(N),name:N.name}));return [...B,...ie]});},[u]),y=v__namespace.useRef(null),R=v__namespace.useRef(()=>{}),w=v__namespace.useRef(()=>{}),x=v__namespace.useCallback(z=>{y.current=z;},[]);v__namespace.useImperativeHandle(o,()=>({play:z=>{console.warn('[Composer] handle.play(steps) is not wired in v1 \u2014 pass `steps` + `trigger="manual"` and toggle `play` instead.');},stop:()=>{},restart:z=>w.current(z),focus:()=>y.current?.focus(),clear:()=>{let z=y.current;z&&Lr(z);},insert:z=>{y.current?.update(()=>{let F=lexical.$getSelection();lexical.$isRangeSelection(F)&&F.insertText(z);});},getContent:()=>y.current?Ol(y.current):{text:"",json:"",mentions:[]},getEditor:()=>y.current}),[]);let S=v__namespace.useMemo(()=>({paragraph:"gds-composer-paragraph",quote:"gds-composer-quote",heading:{h1:"gds-composer-h1",h2:"gds-composer-h2",h3:"gds-composer-h3"},list:{ul:"gds-composer-ul",ol:"gds-composer-ol",listitem:"gds-composer-li"},text:{bold:"font-semibold",italic:"italic",underline:"underline",strikethrough:"line-through",code:"gds-composer-code"},beautifulMentions:{"@":"gds-composer-mention px-1.5 py-0.5 mx-0.5 rounded bg-primary/10 text-primary font-medium","/":"gds-composer-mention px-1.5 py-0.5 mx-0.5 rounded bg-violet-500/15 text-violet-600 dark:text-violet-400 font-medium"}}),[]),M=v__namespace.useMemo(()=>({namespace:"gds-composer",theme:S,onError:z=>{console.error("[Composer]",z);},nodes:[richText.HeadingNode,richText.QuoteNode,list.ListNode,list.ListItemNode,link.LinkNode,link.AutoLinkNode,code.CodeNode,code.CodeHighlightNode,lexicalBeautifulMentions.BeautifulMentionNode],editorState:n||(r?z=>{let F=lexical.$getRoot(),B=lexical.$createParagraphNode();B.append(lexical.$createTextNode(r)),F.append(B);}:void 0)}),[S,n,r]),A=l.length>0,{readOnly:H=false,...W}=c;return v__namespace.createElement(LexicalComposer.LexicalComposer,{initialConfig:{...M,editable:!H}},v__namespace.createElement(cg,{...W,readOnly:H,triggers:p??[],attachmentsCfg:H?null:u,formatList:l,showToolbar:g&&A&&!H,handleEditorReady:x,submitRef:R,restartRef:w,attachments:m,setAttachments:h,ingestImages:b}))}),pg=v__namespace.forwardRef(function(t,o){return v__namespace.createElement(Vl,{ref:o,placeholder:"Write a reply\u2026",formats:false,submitOnEnter:false,...t})});var Ot=It__namespace.Root,Vt=It__namespace.Trigger,ug=It__namespace.Anchor,Ht=v__namespace.forwardRef(({className:e,align:t="center",sideOffset:o=4,surface:r="solid",...n},a)=>v__namespace.createElement(It__namespace.Portal,null,v__namespace.createElement(It__namespace.Content,{ref:a,align:t,sideOffset:o,"data-surface":r,className:d("z-50 w-72 rounded-md border 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]",At(r,"bg-popover"),ht[r],e),...n})));Ht.displayName=It__namespace.Content.displayName;var mg="PPP",gg="LLL dd, y";function fg({value:e,onChange:t,placeholder:o="Pick a date",disabled:r,className:n,contentClassName:a,align:i="start",side:p,format:s=mg,captionLayout:c,icon:l,"aria-label":g}){return v__namespace.createElement(Ot,null,v__namespace.createElement(Vt,{asChild:true},v__namespace.createElement(dt,{type:"button",variant:"outline",disabled:r,"aria-label":g??(e?void 0:o),"data-empty":!e,className:d("w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},l??v__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?dateFns.format(e,s):v__namespace.createElement("span",null,o))),v__namespace.createElement(Ht,{className:d("w-auto p-0",a),align:i,side:p},v__namespace.createElement(da,{mode:"single",selected:e,onSelect:t,captionLayout:c,initialFocus:true})))}function hg({value:e,onChange:t,placeholder:o="Pick a date range",disabled:r,className:n,contentClassName:a,align:i="start",side:p,format:s=gg,captionLayout:c,icon:l,numberOfMonths:g=2,"aria-label":u}){let m=!!e?.from;return v__namespace.createElement(Ot,null,v__namespace.createElement(Vt,{asChild:true},v__namespace.createElement(dt,{type:"button",variant:"outline",disabled:r,"aria-label":u??(m?void 0:o),"data-empty":!m,className:d("w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},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,s)," \u2013"," ",dateFns.format(e.to,s)):dateFns.format(e.from,s):v__namespace.createElement("span",null,o))),v__namespace.createElement(Ht,{className:d("w-auto p-0",a),align:i,side:p},v__namespace.createElement(da,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:g,captionLayout:c,initialFocus:true})))}var vg=Ie__namespace.Root,yg=Ie__namespace.Trigger,Wl=Ie__namespace.Portal,xg=Ie__namespace.Close,bn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Overlay,{ref:o,className:d("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}));bn.displayName=Ie__namespace.Overlay.displayName;var jl=v__namespace.forwardRef(({className:e,children:t,surface:o="solid",...r},n)=>v__namespace.createElement(Wl,null,v__namespace.createElement(bn,null),v__namespace.createElement(Ie__namespace.Content,{ref:n,"data-surface":o,className:d("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border 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",At(o,"bg-background"),ht[o],e),...r},t,v__namespace.createElement(Ie__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")))));jl.displayName=Ie__namespace.Content.displayName;var $l=({className:e,...t})=>v__namespace.createElement("div",{className:d("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});$l.displayName="DialogHeader";var Ul=({className:e,...t})=>v__namespace.createElement("div",{className:d("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Ul.displayName="DialogFooter";var Kl=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Title,{ref:o,className:d("text-lg font-semibold leading-none tracking-tight",e),...t}));Kl.displayName=Ie__namespace.Title.displayName;var ql=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Description,{ref:o,className:d("text-sm text-muted-foreground",e),...t}));ql.displayName=Ie__namespace.Description.displayName;var kg=ne__namespace.Root,Cg=ne__namespace.Trigger,Ao=v__namespace.createContext("default"),Yl=e=>e==="default"?"px-2 py-1.5 text-sm":"px-2 py-1 text-xs",Tg=ne__namespace.Group,Pg=ne__namespace.Portal,Mg=ne__namespace.Sub,Ng=ne__namespace.RadioGroup,Zl=v__namespace.forwardRef(({className:e,inset:t,children:o,...r},n)=>{let a=v__namespace.useContext(Ao);return v__namespace.createElement(ne__namespace.SubTrigger,{ref:n,className:d("flex cursor-default select-none items-center gap-2 rounded-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:shrink-0",Yl(a),a==="default"?"[&_svg]:size-4":"[&_svg]:size-3.5",t&&(a==="default"?"pl-8":"pl-7"),e),...r},o,v__namespace.createElement(lucideReact.ChevronRight,{className:"ml-auto"}))});Zl.displayName=ne__namespace.SubTrigger.displayName;var Xl=v__namespace.forwardRef(({className:e,surface:t="solid",size:o="default",children:r,...n},a)=>v__namespace.createElement(ne__namespace.SubContent,{ref:a,"data-surface":t,className:d("z-50 min-w-[8rem] overflow-hidden rounded-md border 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]",o==="default"?"p-1":"p-0.5",At(t,"bg-popover"),ht[t],e),...n},v__namespace.createElement(Ao.Provider,{value:o},r)));Xl.displayName=ne__namespace.SubContent.displayName;var Jl=v__namespace.forwardRef(({className:e,sideOffset:t=4,surface:o="solid",size:r="default",children:n,...a},i)=>v__namespace.createElement(ne__namespace.Portal,null,v__namespace.createElement(ne__namespace.Content,{ref:i,sideOffset:t,"data-surface":o,className:d("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border text-popover-foreground shadow-md",r==="default"?"p-1":"p-0.5","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]",At(o,"bg-popover"),ht[o],e),...a},v__namespace.createElement(Ao.Provider,{value:r},n))));Jl.displayName=ne__namespace.Content.displayName;var Ql=v__namespace.forwardRef(({className:e,inset:t,...o},r)=>{let n=v__namespace.useContext(Ao);return v__namespace.createElement(ne__namespace.Item,{ref:r,className:d("relative flex cursor-default select-none items-center gap-2 rounded-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:shrink-0",Yl(n),n==="default"?"[&>svg]:size-4":"[&>svg]:size-3.5",t&&(n==="default"?"pl-8":"pl-7"),e),...o})});Ql.displayName=ne__namespace.Item.displayName;var ed=v__namespace.forwardRef(({className:e,children:t,checked:o,...r},n)=>{let i=v__namespace.useContext(Ao)!=="default";return v__namespace.createElement(ne__namespace.CheckboxItem,{ref:n,className:d("relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",i?"py-1 pl-7 text-xs":"py-1.5 pl-8 text-sm",e),checked:o,...r},v__namespace.createElement("span",{className:d("absolute flex items-center justify-center",i?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},v__namespace.createElement(ne__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Check,{className:i?"h-3 w-3":"h-4 w-4"}))),t)});ed.displayName=ne__namespace.CheckboxItem.displayName;var td=v__namespace.forwardRef(({className:e,children:t,...o},r)=>{let a=v__namespace.useContext(Ao)!=="default";return v__namespace.createElement(ne__namespace.RadioItem,{ref:r,className:d("relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a?"py-1 pl-7 text-xs":"py-1.5 pl-8 text-sm",e),...o},v__namespace.createElement("span",{className:d("absolute flex items-center justify-center",a?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},v__namespace.createElement(ne__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Circle,{className:"h-2 w-2 fill-current"}))),t)});td.displayName=ne__namespace.RadioItem.displayName;var od=v__namespace.forwardRef(({className:e,inset:t,...o},r)=>{let n=v__namespace.useContext(Ao);return v__namespace.createElement(ne__namespace.Label,{ref:r,className:d("font-semibold",n==="default"?"px-2 py-1.5 text-sm":"px-2 py-1 text-xs",t&&(n==="default"?"pl-8":"pl-7"),e),...o})});od.displayName=ne__namespace.Label.displayName;var rd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(ne__namespace.Separator,{ref:o,className:d("-mx-1 my-1 h-px bg-muted",e),...t}));rd.displayName=ne__namespace.Separator.displayName;var ad=({className:e,...t})=>v__namespace.createElement("span",{className:d("ml-auto text-xs tracking-widest opacity-60",e),...t});ad.displayName="DropdownMenuShortcut";var nd=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-sm file:text-xs",xs:"h-7 pl-2 pr-2 py-0 text-xs file:text-xs shadow-none","2xs":"h-6 rounded-lg pl-1.5 pr-2 py-0 text-2xs file:text-2xs shadow-none"}},defaultVariants:{size:"default"}}),Lg={default:{startPad:"pl-9",endPad:"pr-9",startInset:"pl-3",endInset:"pr-3"},sm:{startPad:"pl-7",endPad:"pr-6",startInset:"pl-2",endInset:"pr-2"},xs:{startPad:"pl-6",endPad:"pr-5",startInset:"pl-2",endInset:"pr-2"},"2xs":{startPad:"pl-6",endPad:"pr-5",startInset:"pl-1.5",endInset:"pr-2"}},oo=v__namespace.forwardRef(({className:e,type:t,size:o="default",startSlot:r,endSlot:n,...a},i)=>{if(!r&&!n)return v__namespace.createElement("input",{type:t,className:d(nd({size:o}),e),ref:i,...a});let p=Lg[o];return v__namespace.createElement("div",{className:"relative flex w-full items-center"},r?v__namespace.createElement("span",{className:d("pointer-events-none absolute inset-y-0 left-0 flex items-center text-muted-foreground [&_svg]:size-3.5",p.startInset)},r):null,v__namespace.createElement("input",{type:t,ref:i,className:d(nd({size:o}),r&&p.startPad,n&&p.endPad,e),...a}),n?v__namespace.createElement("span",{className:d("pointer-events-none absolute inset-y-0 right-0 flex items-center text-muted-foreground [&_svg]:size-3.5",p.endInset)},n):null)});oo.displayName="Input";var Ag=classVarianceAuthority.cva("font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{size:{default:"text-sm",sm:"text-sm",xs:"text-xs","2xs":"text-2xs"}},defaultVariants:{size:"default"}}),Io=v__namespace.forwardRef(({className:e,size:t,...o},r)=>v__namespace.createElement(vn__namespace.Root,{ref:r,className:d(Ag({size:t}),e),...o}));Io.displayName=vn__namespace.Root.displayName;var id=v__namespace.forwardRef(({className:e,value:t,...o},r)=>v__namespace.createElement(Hr__namespace.Root,{ref:r,className:d("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...o},v__namespace.createElement(Hr__namespace.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));id.displayName=Hr__namespace.Root.displayName;var yn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(cmdk.Command,{ref:o,className:d("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...t}));yn.displayName=cmdk.Command.displayName;var xn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{className:"flex items-center border-b px-3","cmdk-input-wrapper":""},v__namespace.createElement(lucideReact.Search,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),v__namespace.createElement(cmdk.Command.Input,{ref:o,className:d("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})));xn.displayName=cmdk.Command.Input.displayName;var wn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(cmdk.Command.List,{ref:o,className:d("max-h-[300px] overflow-y-auto overflow-x-hidden",e),...t}));wn.displayName=cmdk.Command.List.displayName;var Rn=v__namespace.forwardRef((e,t)=>v__namespace.createElement(cmdk.Command.Empty,{ref:t,className:"py-6 text-center text-sm",...e}));Rn.displayName=cmdk.Command.Empty.displayName;var Ca=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(cmdk.Command.Group,{ref:o,className:d("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}));Ca.displayName=cmdk.Command.Group.displayName;var Sn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(cmdk.Command.Separator,{ref:o,className:d("-mx-1 h-px bg-border",e),...t}));Sn.displayName=cmdk.Command.Separator.displayName;var or=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(cmdk.Command.Item,{ref:o,className:d("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}));or.displayName=cmdk.Command.Item.displayName;var Fr=v__namespace.forwardRef(({className:e,orientation:t="horizontal",decorative:o=true,...r},n)=>v__namespace.createElement(kn__namespace.Root,{ref:n,decorative:o,orientation:t,className:d("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...r}));Fr.displayName=kn__namespace.Root.displayName;var Og=3,sd=v__namespace.forwardRef(function({options:t,value:o,defaultValue:r,onValueChange:n,placeholder:a="Select\u2026",searchPlaceholder:i="Search\u2026",emptyMessage:p="Nothing matches.",maxCount:s=Og,searchable:c=true,badgeDismissible:l=true,disabled:g=false,modalPopover:u=false,className:m,id:h,"aria-label":f,...b},y){let R=o!==void 0,[w,x]=v__namespace.useState(r??[]),S=R?o:w,[M,A]=v__namespace.useState(false),H=v__namespace.useMemo(()=>{let k=new Map;for(let G of t)k.set(G.value,G);return k},[t]),W=v__namespace.useCallback(k=>{R||x(k),n?.(k);},[R,n]),z=k=>{S.includes(k)?W(S.filter(G=>G!==k)):W([...S,k]);},F=(k,G)=>{k.preventDefault(),k.stopPropagation(),W(S.filter(he=>he!==G));},B=k=>{k?.preventDefault(),k?.stopPropagation(),W([]);},q=()=>{let k=t.filter(G=>!G.disabled).map(G=>G.value);W(k);},ie=t.length>0&&t.filter(k=>!k.disabled).every(k=>S.includes(k.value)),N=S.slice(0,s),ue=Math.max(0,S.length-s);return v__namespace.createElement(Ot,{open:M,onOpenChange:A,modal:u},v__namespace.createElement(Vt,{asChild:true},v__namespace.createElement("button",{ref:y,type:"button",id:h,role:"combobox","aria-expanded":M,"aria-haspopup":"listbox","aria-label":f,disabled:g,"data-gds-part":"multi-select",className:d("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",m)},S.length===0?v__namespace.createElement("span",{className:"text-muted-foreground px-1"},a):v__namespace.createElement("div",{className:"flex flex-1 flex-wrap items-center gap-1 py-1","data-gds-part":"multi-select-badges"},N.map(k=>{let G=H.get(k);if(!G)return null;let he=G.icon;return v__namespace.createElement(sa,{key:k,variant:"secondary",className:"gap-1 pr-1","data-gds-part":"multi-select-badge"},he?v__namespace.createElement(he,{className:"h-3 w-3"}):null,v__namespace.createElement("span",{className:"truncate max-w-[12rem]"},G.label),l&&!g&&v__namespace.createElement("span",{role:"button","aria-label":`Remove ${G.label}`,tabIndex:0,onClick:I=>F(I,k),onKeyDown:I=>{(I.key==="Enter"||I.key===" ")&&F(I,k);},className:"ml-0.5 inline-flex h-4 w-4 cursor-pointer items-center justify-center rounded-sm hover:bg-muted-foreground/20"},v__namespace.createElement(lucideReact.X,{className:"h-3 w-3","aria-hidden":true})))}),ue>0&&v__namespace.createElement(sa,{variant:"outline",className:"text-muted-foreground","data-gds-part":"multi-select-overflow",title:S.slice(s).map(k=>H.get(k)?.label??k).join(", ")},"+",ue," more")),v__namespace.createElement("div",{className:"flex shrink-0 items-center gap-1"},S.length>0&&!g&&v__namespace.createElement("span",{role:"button","aria-label":"Clear all",tabIndex:0,onClick:k=>B(k),onKeyDown:k=>{(k.key==="Enter"||k.key===" ")&&B(k);},className:"inline-flex h-5 w-5 cursor-pointer items-center justify-center rounded-sm text-muted-foreground hover:text-foreground hover:bg-muted"},v__namespace.createElement(lucideReact.XCircle,{className:"h-3.5 w-3.5","aria-hidden":true})),v__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":true})))),v__namespace.createElement(Ht,{align:"start",className:"w-[var(--radix-popover-trigger-width)] p-0","data-gds-part":"multi-select-content"},v__namespace.createElement(yn,null,c&&v__namespace.createElement(xn,{placeholder:i}),v__namespace.createElement(wn,null,v__namespace.createElement(Rn,null,p),v__namespace.createElement(Ca,null,t.map(k=>{let G=k.icon,he=S.includes(k.value);return v__namespace.createElement(or,{key:k.value,value:k.label,onSelect:()=>z(k.value),disabled:k.disabled,"data-gds-part":"multi-select-item","data-selected":he||void 0},v__namespace.createElement("div",{className:d("mr-2 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary",he?"bg-primary text-primary-foreground":"opacity-50 [&_svg]:invisible"),"aria-hidden":true},v__namespace.createElement(lucideReact.Check,{className:"h-3 w-3"})),G?v__namespace.createElement(G,{className:"mr-2 h-4 w-4 text-muted-foreground"}):null,v__namespace.createElement("span",{className:"truncate"},k.label))})),v__namespace.createElement(Sn,null),v__namespace.createElement(Ca,null,v__namespace.createElement("div",{className:"flex items-center justify-between gap-1 p-1"},v__namespace.createElement(or,{onSelect:q,className:"flex-1 justify-center text-xs",disabled:ie},"Select all"),v__namespace.createElement(Fr,{orientation:"vertical",className:"h-5"}),v__namespace.createElement(or,{onSelect:()=>B(),className:"flex-1 justify-center text-xs",disabled:S.length===0},"Clear"),v__namespace.createElement(Fr,{orientation:"vertical",className:"h-5"}),v__namespace.createElement(or,{onSelect:()=>A(false),className:"flex-1 justify-center text-xs"},"Close")))))))});sd.displayName="MultiSelect";var ld=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(vo__namespace.Root,{className:d("grid gap-2",e),...t,ref:o}));ld.displayName=vo__namespace.Root.displayName;var dd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(vo__namespace.Item,{ref:o,className:d("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(vo__namespace.Indicator,{className:"flex items-center justify-center"},v__namespace.createElement(lucideReact.Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));dd.displayName=vo__namespace.Item.displayName;var Wg=({className:e,...t})=>v__namespace.createElement(rr__namespace.PanelGroup,{"data-gds-part":"resizable-panel-group",className:d("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...t}),jg=rr__namespace.Panel,$g=({withHandle:e,className:t,...o})=>v__namespace.createElement(rr__namespace.PanelResizeHandle,{"data-gds-part":"resizable-handle",className:d("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&&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 cd=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}}),pd=v__namespace.forwardRef(({className:e,gap:t,align:o,justify:r,wrap:n,asChild:a=false,...i},p)=>v__namespace.createElement(a?reactSlot.Slot:"div",{ref:p,"data-gds-part":"row",className:d(cd({gap:t,align:o,justify:r,wrap:n,className:e})),...i}));pd.displayName="Row";var ud=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"}}),md=v__namespace.forwardRef(({className:e,cols:t,gap:o,align:r,asChild:n=false,...a},i)=>v__namespace.createElement(n?reactSlot.Slot:"div",{ref:i,"data-gds-part":"grid",className:d(ud({cols:t,gap:o,align:r,className:e})),...a}));md.displayName="Grid";var gd=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"}}),fd=v__namespace.forwardRef(({className:e,direction:t,gap:o,align:r,justify:n,wrap:a,asChild:i=false,...p},s)=>v__namespace.createElement(i?reactSlot.Slot:"div",{ref:s,"data-gds-part":"flex",className:d(gd({direction:t,gap:o,align:r,justify:n,wrap:a,className:e})),...p}));fd.displayName="Flex";var hd=v__namespace.forwardRef(({className:e,children:t,...o},r)=>v__namespace.createElement(Ct__namespace.Root,{ref:r,className:d("relative overflow-hidden",e),...o},v__namespace.createElement(Ct__namespace.Viewport,{className:"h-full w-full rounded-[inherit]"},t),v__namespace.createElement(Cn,null),v__namespace.createElement(Ct__namespace.Corner,null)));hd.displayName=Ct__namespace.Root.displayName;var Cn=v__namespace.forwardRef(({className:e,orientation:t="vertical",...o},r)=>v__namespace.createElement(Ct__namespace.ScrollAreaScrollbar,{ref:r,orientation:t,className:d("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},v__namespace.createElement(Ct__namespace.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));Cn.displayName=Ct__namespace.ScrollAreaScrollbar.displayName;var Tn=de__namespace.Root,ef=de__namespace.Group,Pn=de__namespace.Value,Mn=v__namespace.createContext("default"),tf=classVarianceAuthority.cva("flex w-full items-center justify-between rounded-md border border-input bg-background ring-offset-background data-[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-sm",xs:"h-7 px-2 py-0 text-xs","2xs":"h-6 rounded-lg pl-1.5 pr-2 py-0 text-2xs"}},defaultVariants:{size:"default"}}),Ea=v__namespace.forwardRef(({className:e,children:t,size:o="default",startSlot:r,chevron:n=true,...a},i)=>v__namespace.createElement(de__namespace.Trigger,{ref:i,className:d(tf({size:o}),e),...a},r?v__namespace.createElement("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 [&>span]:truncate"},v__namespace.createElement("span",{className:"pointer-events-none flex shrink-0 items-center text-muted-foreground/70 [&_svg]:size-4"},r),t):t,n?v__namespace.createElement(de__namespace.Icon,{asChild:true},v__namespace.createElement(lucideReact.ChevronDown,{className:d("opacity-50",o==="sm"?"h-3.5 w-3.5":"h-4 w-4")})):null));Ea.displayName=de__namespace.Trigger.displayName;var Nn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(de__namespace.ScrollUpButton,{ref:o,className:d("flex cursor-default items-center justify-center py-1",e),...t},v__namespace.createElement(lucideReact.ChevronUp,{className:"h-4 w-4"})));Nn.displayName=de__namespace.ScrollUpButton.displayName;var En=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(de__namespace.ScrollDownButton,{ref:o,className:d("flex cursor-default items-center justify-center py-1",e),...t},v__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4"})));En.displayName=de__namespace.ScrollDownButton.displayName;var La=v__namespace.forwardRef(({className:e,children:t,position:o="popper",size:r="default",...n},a)=>v__namespace.createElement(de__namespace.Portal,null,v__namespace.createElement(de__namespace.Content,{ref:a,className:d("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,...n},v__namespace.createElement(Nn,null),v__namespace.createElement(de__namespace.Viewport,{className:d(r==="default"?"p-1":"p-0.5",o==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},v__namespace.createElement(Mn.Provider,{value:r},t)),v__namespace.createElement(En,null))));La.displayName=de__namespace.Content.displayName;var of={default:"py-1.5 pl-8 pr-2 text-sm font-semibold",sm:"py-1 pl-7 pr-2 text-xs font-semibold",xs:"py-1 pl-6 pr-2 text-2xs font-medium text-muted-foreground uppercase tracking-wide","2xs":"py-0.5 pl-6 pr-2 text-2xs font-medium text-muted-foreground uppercase tracking-wide"},yd=v__namespace.forwardRef(({className:e,...t},o)=>{let r=v__namespace.useContext(Mn);return v__namespace.createElement(de__namespace.Label,{ref:o,className:d(of[r],e),...t})});yd.displayName=de__namespace.Label.displayName;var rf=classVarianceAuthority.cva("relative flex w-full cursor-default select-none items-center rounded-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",{variants:{size:{default:"py-1.5 pl-8 pr-2 text-sm",sm:"py-1 pl-7 pr-2 text-sm",xs:"py-1 pl-6 pr-2 text-xs","2xs":"py-0.5 pl-6 pr-2 text-2xs"}},defaultVariants:{size:"default"}}),Da=v__namespace.forwardRef(({className:e,children:t,hint:o,...r},n)=>{let a=v__namespace.useContext(Mn),i=a!=="default";return v__namespace.createElement(de__namespace.Item,{ref:n,className:d("group",rf({size:a}),e),...r},v__namespace.createElement("span",{className:d("absolute flex items-center justify-center",i?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},v__namespace.createElement(de__namespace.ItemIndicator,null,v__namespace.createElement(lucideReact.Check,{className:i?"h-3 w-3":"h-4 w-4"}))),v__namespace.createElement(de__namespace.ItemText,null,t),o!=null?v__namespace.createElement("span",{className:"ml-auto pl-3 tabular-nums text-muted-foreground/60 group-focus:text-accent-foreground/80 group-data-[highlighted]:text-accent-foreground/80"},o):null)});Da.displayName=de__namespace.Item.displayName;var xd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(de__namespace.Separator,{ref:o,className:d("-mx-1 my-1 h-px bg-muted",e),...t}));xd.displayName=de__namespace.Separator.displayName;var sf=Ie__namespace.Root,lf=Ie__namespace.Trigger,df=Ie__namespace.Close,wd=Ie__namespace.Portal,Ln=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Overlay,{className:d("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}));Ln.displayName=Ie__namespace.Overlay.displayName;var cf=classVarianceAuthority.cva("fixed z-50 gap-4 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"}}),Rd=v__namespace.forwardRef(({side:e="right",surface:t="solid",className:o,children:r,...n},a)=>v__namespace.createElement(wd,null,v__namespace.createElement(Ln,null),v__namespace.createElement(Ie__namespace.Content,{ref:a,"data-surface":t,className:d(cf({side:e}),At(t,"bg-background"),ht[t],o),...n},r,v__namespace.createElement(Ie__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")))));Rd.displayName=Ie__namespace.Content.displayName;var Sd=({className:e,...t})=>v__namespace.createElement("div",{className:d("flex flex-col space-y-2 text-center sm:text-left",e),...t});Sd.displayName="SheetHeader";var kd=({className:e,...t})=>v__namespace.createElement("div",{className:d("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});kd.displayName="SheetFooter";var Cd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Title,{ref:o,className:d("text-lg font-semibold text-foreground",e),...t}));Cd.displayName=Ie__namespace.Title.displayName;var Td=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(Ie__namespace.Description,{ref:o,className:d("text-sm text-muted-foreground",e),...t}));Td.displayName=Ie__namespace.Description.displayName;function pf({className:e,...t}){return React.createElement("div",{className:d("animate-pulse rounded-md bg-muted",e),...t})}var Fo=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(ro__namespace.Root,{ref:o,className:d("relative flex w-full touch-none select-none items-center",e),...t},v__namespace.createElement(ro__namespace.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary"},v__namespace.createElement(ro__namespace.Range,{className:"absolute h-full bg-primary"})),v__namespace.createElement(ro__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"})));Fo.displayName=ro__namespace.Root.displayName;var wf={vertical:sortable.verticalListSortingStrategy,horizontal:sortable.horizontalListSortingStrategy,grid:sortable.rectSortingStrategy},Dn=v__namespace.createContext(null),Id=v__namespace.createContext(null),An=v__namespace.forwardRef(function({disabled:t=false,className:o,children:r,...n},a){let i=v__namespace.useRef(new Map),p=v__namespace.useCallback(g=>(i.current.set(g.id,g),()=>{i.current.delete(g.id);}),[]),s=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),c=g=>{let u=i.current,m=u.get(String(g));if(m)return m;for(let h of u.values())if(h.values.some(f=>f===g))return h;return null},l=v__namespace.useCallback(g=>{if(t)return;let{active:u,over:m}=g;if(!m)return;let h=c(u.id),f=c(m.id);if(!h||!f)return;if(h.id===f.id){if(u.id===m.id)return;let w=h.values.findIndex(S=>S===u.id),x=h.values.findIndex(S=>S===m.id);if(w===-1||x===-1)return;h.onReorder?.(sortable.arrayMove(h.values,w,x));return}let b=h.values.filter(w=>w!==u.id),y=m.id===f.id?f.values.length:Math.max(0,f.values.findIndex(w=>w===m.id)),R=[...f.values.slice(0,y),u.id,...f.values.slice(y)];h.onReorder?.(b),f.onReorder?.(R);},[t]);return v__namespace.createElement(Id.Provider,{value:{registerContainer:p}},v__namespace.createElement(core.DndContext,{sensors:s,collisionDetection:core.closestCorners,onDragEnd:l},v__namespace.createElement("div",{ref:a,"data-gds-part":"sortable-group","data-disabled":t||void 0,className:d(o),...n},r)))});An.displayName="Sortable.Group";var _r=v__namespace.forwardRef(function({values:t,onReorder:o,strategy:r="vertical",disabled:n=false,id:a,className:i,children:p,...s},c){let l=v__namespace.useContext(Id),g=l!==null,u=v__namespace.useId(),m=a??u;v__namespace.useEffect(()=>{if(g)return l.registerContainer({id:m,values:t,onReorder:o})},[g,l,m,t,o]);let h=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),f=v__namespace.useCallback(R=>{let{active:w,over:x}=R;if(!x||w.id===x.id)return;let S=t.findIndex(A=>A===w.id),M=t.findIndex(A=>A===x.id);S===-1||M===-1||o?.(sortable.arrayMove(t,S,M));},[t,o]),b=v__namespace.useMemo(()=>({disabled:n}),[n]),y=v__namespace.createElement(sortable.SortableContext,{items:t,strategy:wf[r]},v__namespace.createElement(Rf,{id:m,enabled:g,forwardedRef:c,strategy:r,disabled:n,className:i,...s},p));return g?v__namespace.createElement(Dn.Provider,{value:b},y):v__namespace.createElement(Dn.Provider,{value:b},v__namespace.createElement(core.DndContext,{sensors:h,collisionDetection:core.closestCenter,onDragEnd:f},y))});_r.displayName="Sortable";function Rf({id:e,enabled:t,forwardedRef:o,strategy:r,disabled:n,className:a,children:i,...p}){let s=core.useDroppable({id:e,disabled:!t}),c=v__namespace.useCallback(l=>{t&&s.setNodeRef(l),typeof o=="function"?o(l):o&&(o.current=l);},[t,s,o]);return v__namespace.createElement("div",{ref:c,"data-gds-part":"sortable","data-strategy":r,"data-disabled":n||void 0,className:d(a),...p},i)}var Hd=v__namespace.createContext(null),In=v__namespace.forwardRef(function({value:t,asChild:o=false,disabled:r,className:n,style:a,children:i,...p},s){let c=v__namespace.useContext(Dn);if(!c)throw new Error("<Sortable.Item> must be rendered inside <Sortable>.");let l=c.disabled||r||false,{attributes:g,listeners:u,setNodeRef:m,setActivatorNodeRef:h,transform:f,transition:b,isDragging:y}=sortable.useSortable({id:t,disabled:l}),R=v__namespace.useRef(false),w=v__namespace.useCallback(A=>{m(A),typeof s=="function"?s(A):s&&(s.current=A);},[m,s]),x=v__namespace.useMemo(()=>({listeners:u,setActivatorNodeRef:h,hasHandle:R,disabled:l}),[u,h,l]),S={transform:utilities.CSS.Transform.toString(f),transition:b,zIndex:y?1:void 0,cursor:l?"default":R.current?void 0:"grab",...a},M=o?reactSlot.Slot:"div";return v__namespace.createElement(Hd.Provider,{value:x},v__namespace.createElement(M,{ref:w,"data-gds-part":"sortable-item","data-value":String(t),"data-dragging":y||void 0,className:d(n),style:S,...g,...R.current?{}:u,...p},i))});In.displayName="Sortable.Item";var Hn=v__namespace.forwardRef(function({asChild:t=false,className:o,children:r,...n},a){let i=v__namespace.useContext(Hd);if(!i)throw new Error("<Sortable.Handle> must be rendered inside <Sortable.Item>.");v__namespace.useLayoutEffect(()=>(i.hasHandle.current=true,()=>{i.hasHandle.current=false;}),[i.hasHandle]);let p=v__namespace.useCallback(c=>{i.setActivatorNodeRef(c),typeof a=="function"?a(c):a&&(a.current=c);},[i,a]),s={"data-gds-part":"sortable-handle","aria-label":"Drag to reorder",className:d("cursor-grab touch-none select-none",i.disabled&&"cursor-default opacity-50",o),...i.disabled?{}:i.listeners,...n};return t?v__namespace.createElement(reactSlot.Slot,{ref:p,...s},r):v__namespace.createElement("button",{type:"button",ref:p,...s},r)});Hn.displayName="Sortable.Handle";_r.Item=In;_r.Handle=Hn;_r.Group=An;var Sf=_r;var Fd=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"}}),zd=v__namespace.forwardRef(({className:e,gap:t,align:o,justify:r,asChild:n=false,...a},i)=>v__namespace.createElement(n?reactSlot.Slot:"div",{ref:i,"data-gds-part":"stack",className:d(Fd({gap:t,align:o,justify:r,className:e})),...a}));zd.displayName="Stack";var Tf=classVarianceAuthority.cva("peer inline-flex 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",{variants:{size:{default:"h-6 w-11",sm:"h-5 w-9",xs:"h-4 w-7","2xs":"h-3 w-5"}},defaultVariants:{size:"default"}}),Pf=classVarianceAuthority.cva("pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=unchecked]:translate-x-0",{variants:{size:{default:"h-5 w-5 data-[state=checked]:translate-x-5",sm:"h-4 w-4 data-[state=checked]:translate-x-4",xs:"h-3 w-3 data-[state=checked]:translate-x-3","2xs":"h-2 w-2 data-[state=checked]:translate-x-2"}},defaultVariants:{size:"default"}}),Ha=v__namespace.forwardRef(({className:e,size:t="default",...o},r)=>v__namespace.createElement(Or__namespace.Root,{className:d(Tf({size:t}),e),...o,ref:r},v__namespace.createElement(Or__namespace.Thumb,{className:d(Pf({size:t}))})));Ha.displayName=Or__namespace.Root.displayName;var Bd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("div",{className:"relative w-full overflow-auto"},v__namespace.createElement("table",{ref:o,className:d("w-full caption-bottom text-sm",e),...t})));Bd.displayName="Table";var Od=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("thead",{ref:o,className:d("[&_tr]:border-b",e),...t}));Od.displayName="TableHeader";var Vd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("tbody",{ref:o,className:d("[&_tr:last-child]:border-0",e),...t}));Vd.displayName="TableBody";var Gd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("tfoot",{ref:o,className:d("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));Gd.displayName="TableFooter";var Wd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("tr",{ref:o,className:d("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));Wd.displayName="TableRow";var jd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("th",{ref:o,className:d("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}));jd.displayName="TableHead";var $d=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("td",{ref:o,className:d("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));$d.displayName="TableCell";var Ud=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("caption",{ref:o,className:d("mt-4 text-sm text-muted-foreground",e),...t}));Ud.displayName="TableCaption";var Kd=v__namespace.createContext(v__namespace.createElement(lucideReact.ChevronRight,null)),qd=v__namespace.forwardRef(({separator:e,children:t,...o},r)=>v__namespace.createElement(Kd.Provider,{value:e??v__namespace.createElement(lucideReact.ChevronRight,null)},v__namespace.createElement("nav",{ref:r,"aria-label":"breadcrumb",...o},t)));qd.displayName="Breadcrumb";var Yd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("ol",{ref:o,className:d("flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",e),...t}));Yd.displayName="BreadcrumbList";var Zd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("li",{ref:o,className:d("inline-flex items-center gap-1.5",e),...t}));Zd.displayName="BreadcrumbItem";var Fa=d("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"),Xd=v__namespace.forwardRef(({asChild:e,className:t,href:o,...r},n)=>e?v__namespace.createElement("span",{ref:n,className:d(Fa,t),...r}):o?v__namespace.createElement("a",{ref:n,href:o,className:d(Fa,t),...r}):v__namespace.createElement("button",{ref:n,type:"button",className:d(Fa,t),...r}));Xd.displayName="BreadcrumbLink";var Jd=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("span",{ref:o,role:"link","aria-disabled":"true","aria-current":"page",className:d("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}));Jd.displayName="BreadcrumbPage";var Qd=({children:e,className:t,...o})=>{let r=v__namespace.useContext(Kd);return v__namespace.createElement("li",{role:"presentation","aria-hidden":"true",className:d("[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",t),...o},e??r)};Qd.displayName="BreadcrumbSeparator";var ec=({className:e,...t})=>v__namespace.createElement("span",{role:"presentation","aria-hidden":"true",className:d("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"));ec.displayName="BreadcrumbEllipsis";var tc=v__namespace.forwardRef(({label:e,items:t,onSelect:o,onSelectLabel:r,current:n,className:a},i)=>{let[p,s]=v__namespace.useState(false);return v__namespace.createElement(Ot,{open:p,onOpenChange:s},v__namespace.createElement(Vt,{asChild:true},v__namespace.createElement("button",{ref:i,type:"button",className:d(Fa,n&&"font-medium text-foreground",a),onClick:()=>{r?r():s(c=>!c);}},v__namespace.createElement("span",null,e),v__namespace.createElement(lucideReact.ChevronDown,{className:d("h-3 w-3 text-muted-foreground transition-transform",p&&"rotate-180"),onClick:c=>{c.stopPropagation(),s(l=>!l);},role:"button","aria-label":`Show ${e} children`}))),v__namespace.createElement(Ht,{align:"start",className:"w-64 p-1 max-h-80 overflow-y-auto"},t.length===0?v__namespace.createElement("p",{className:"px-2 py-1.5 text-xs text-muted-foreground"},"No items here yet."):v__namespace.createElement("ul",{className:"flex flex-col gap-0.5"},t.map(c=>v__namespace.createElement("li",{key:c.id},v__namespace.createElement("button",{type:"button",onClick:()=>{o(c.id),s(false);},className:d("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")},v__namespace.createElement("span",{className:"flex-1 min-w-0"},v__namespace.createElement("span",{className:"flex items-center gap-1.5"},v__namespace.createElement("span",{className:"text-xs font-medium text-foreground truncate"},c.label),c.active&&v__namespace.createElement(lucideReact.Check,{className:"h-3 w-3 text-primary shrink-0"})),c.summary&&v__namespace.createElement("span",{className:"block text-[10px] text-muted-foreground leading-snug truncate"},c.summary)),c.hasChildren&&v__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 text-muted-foreground/70 shrink-0 mt-0.5"})))))))});tc.displayName="BreadcrumbMenuTrigger";var zn=Ft__namespace.Provider,zo=Ft__namespace.Root,_o=Ft__namespace.Trigger,yo=v__namespace.forwardRef(({className:e,sideOffset:t=4,...o},r)=>v__namespace.createElement(Ft__namespace.Portal,null,v__namespace.createElement(Ft__namespace.Content,{ref:r,sideOffset:t,className:d("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})));yo.displayName=Ft__namespace.Content.displayName;var rc=v__namespace.createContext({size:"md",variant:"pill"}),Lf=zt__namespace.Root,Df=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"}}),Af=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-2xs 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"}}),ac=v__namespace.forwardRef(({className:e,size:t="md",variant:o="pill",children:r,...n},a)=>v__namespace.createElement(rc.Provider,{value:{size:t??"md",variant:o??"pill"}},v__namespace.createElement(zt__namespace.List,{ref:a,className:d(Df({size:t,variant:o}),e),...n},r)));ac.displayName=zt__namespace.List.displayName;var nc=v__namespace.forwardRef(({className:e,size:t,variant:o,tooltip:r,...n},a)=>{let i=v__namespace.useContext(rc),p=t??i.size,s=o??i.variant,c=n["aria-label"]??(typeof r=="string"?r:void 0),l=v__namespace.createElement(zt__namespace.Trigger,{ref:a,className:d(Af({size:p,variant:s}),e),"aria-label":c,...n});return r?v__namespace.createElement(zo,null,v__namespace.createElement(_o,{asChild:true},l),v__namespace.createElement(yo,null,r)):l});nc.displayName=zt__namespace.Trigger.displayName;var ic=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement(zt__namespace.Content,{ref:o,className:d("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));ic.displayName=zt__namespace.Content.displayName;var If={light:"",dark:".dark"},sc=v__namespace.createContext(null);function lc(){let e=v__namespace.useContext(sc);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}var dc=v__namespace.forwardRef(({id:e,className:t,children:o,config:r,...n},a)=>{let i=v__namespace.useId(),p=`chart-${e||i.replace(/:/g,"")}`;return v__namespace.createElement(sc.Provider,{value:{config:r}},v__namespace.createElement("div",{"data-chart":p,ref:a,className:d("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...n},v__namespace.createElement(cc,{id:p,config:r}),v__namespace.createElement(ar__namespace.ResponsiveContainer,null,o)))});dc.displayName="Chart";var cc=({id:e,config:t})=>{let o=Object.entries(t).filter(([,r])=>r.theme||r.color);return o.length?v__namespace.createElement("style",{dangerouslySetInnerHTML:{__html:Object.entries(If).map(([r,n])=>`
114
+ `)),Pe(240,_e)}let Mt=he.speed?Sa[he.speed].tokenStagger:Gt.speed.tokenStagger,Fe=Qe.current,Qt=Fe.length>0&&!Fe.endsWith(`
115
+ `)?Fe+`
116
+ `:Fe;await Pe(60,_e);for(let re=0;re<he.text.length;re++){if(_e.aborted)return;let Me=Qt+he.text.slice(0,re+1);K(Me),re<he.text.length-1&&await Pe(Mt,_e);}}});y__namespace.useEffect(()=>{Y&&de(pe);},[Y,pe]);let Ie=b??(r==="typewriter"||Y);return y__namespace.createElement("div",{ref:ke,"data-gds-part":"code","data-gds-reveal":r,"data-gds-trigger":i,"data-gds-size":x,className:d("gds-code relative w-full overflow-hidden",mg[x],!h&&["rounded-lg border bg-[var(--gds-code-bg)] text-[var(--gds-code-fg)]","border-border/60"],C),style:E,...F},u&&!h?y__namespace.createElement("div",{"data-gds-part":"code-header",className:"flex items-center justify-between border-b border-border/60 px-4 py-2 text-xs text-muted-foreground"},y__namespace.createElement("span",{className:"font-mono"},u),o?y__namespace.createElement("span",{className:"uppercase tracking-wider opacity-60"},o):null):null,y__namespace.createElement(prismReactRenderer.Highlight,{code:le,language:o,theme:fg},({tokens:he,getLineProps:Gt,getTokenProps:_e})=>y__namespace.createElement("pre",{"data-gds-part":"code-pre",className:d("font-mono leading-relaxed",h?"p-0":"px-0 py-3",g?"whitespace-pre-wrap break-words":"overflow-x-auto whitespace-pre",(w!==void 0||k!==void 0)&&"overflow-y-auto"),style:{background:"transparent",margin:0,...k!==void 0?{height:`calc(${k} * 1lh + 0.5rem)`}:w!==void 0&&w!=="auto"?{height:typeof w=="number"?`${w}px`:w}:null}},he.map((Mt,Fe)=>{let Qt=Fe+1,re=bg(Qt,n,X),Me=Gt({line:Mt}),Wt=Fe===he.length-1,jo=Y&&V.has(Qt),Bn=Ie&&Wt&&(!De||b===true),Ha=d("flex w-full pr-4",h?"pl-0":"pl-4",re==="added"&&"bg-[var(--gds-code-diff-added-bg)] text-[var(--gds-code-diff-added-fg)]",re==="removed"&&"bg-[var(--gds-code-diff-removed-bg)] text-[var(--gds-code-diff-removed-fg)]",re==="highlight"&&"bg-[var(--gds-code-line-highlight-bg)] shadow-[inset_2px_0_0_0_var(--gds-code-line-highlight-marker)]"),ua=y__namespace.createElement(y__namespace.Fragment,null,J?y__namespace.createElement("span",{"data-gds-part":"code-gutter",className:d("select-none pr-3 text-right font-mono text-xs leading-relaxed opacity-60",U?"w-10":"w-8"),"aria-hidden":true},U?y__namespace.createElement("span",{className:"inline-block w-3 text-center"},re==="added"?"+":re==="removed"?"-":" "):null,m?y__namespace.createElement("span",{className:"ml-1 tabular-nums"},Qt):null):null,y__namespace.createElement("span",{className:"flex-1",style:jo?{color:"var(--gds-code-comment)"}:void 0},f&&!jo?y__namespace.createElement("span",{"data-gds-part":"code-prompt","aria-hidden":true,className:"select-none opacity-60",style:{color:"var(--gds-code-comment)"}},f):null,r==="typewriter"&&$&&!Y?y__namespace.createElement(vg,{line:Mt,getTokenProps:_e,delay:Z+N+Fe*Se,stagger:Se}):Mt.map((Zu,Xu)=>y__namespace.createElement("span",{key:Xu,..._e({token:Zu})})),Bn&&!jo?y__namespace.createElement(Wr,{"data-gds-part":"code-cursor"}):null));return r==="none"||r==="typewriter"||Y||!$?y__namespace.createElement("div",{key:Fe,...Me,className:d(Me.className,Ha),style:{...Me.style,opacity:i!=="mount"&&!$&&r!=="none"?0:void 0}},ua):y__namespace.createElement(react.motion.div,{key:Fe,...Me,className:d(Me.className,Ha),initial:{opacity:0,y:r==="diff"?re==="removed"?-4:6:4},animate:{opacity:1,y:0},transition:{delay:(Z+N+Fe*Se)/1e3,duration:M.fadeMs/1e3,ease:[.22,1,.36,1]},style:Me.style},ua)}))))});Ac.displayName="Code";function vg({line:e,getTokenProps:t,delay:o,stagger:a}){let n=0;return y__namespace.createElement(y__namespace.Fragment,null,e.map((r,i)=>{let l=/^\s*$/.test(r.content),s=t({token:r});if(l)return y__namespace.createElement("span",{key:i,...s});let c=n++;return y__namespace.createElement(react.motion.span,{key:i,...s,initial:{opacity:0},animate:{opacity:1},transition:{delay:(o+c*a)/1e3,duration:.12}})}))}var yg={default:{row:"gap-3",content:"space-y-1",author:"text-sm font-semibold",meta:"text-xs",body:"text-sm leading-relaxed",thread:"text-xs"},compact:{row:"gap-2",content:"space-y-0.5",author:"text-xs font-semibold",meta:"text-[10px]",body:"text-xs leading-relaxed",thread:"text-[11px]"}},xg=y__namespace.forwardRef(function({author:t,timestamp:o,avatar:a,badge:n,edited:r,pinned:i,actions:l,reactions:s,threadCount:c,onThreadClick:p,align:m="start",density:u="default",className:g,children:h,...f},b){let v=m==="end",S=r===true?"(edited)":r||void 0,x=yg[u];return y__namespace.createElement("div",{ref:b,"data-gds-part":"message","data-gds-align":m,"data-gds-density":u,"data-gds-pinned":i?"true":void 0,className:d("flex items-start",x.row,v&&"flex-row-reverse",g),...f},a&&y__namespace.createElement("div",{"data-gds-part":"message-avatar",className:"flex-shrink-0"},a),y__namespace.createElement("div",{"data-gds-part":"message-content",className:d("flex-1 min-w-0",x.content,v&&"text-right")},i&&y__namespace.createElement("div",{"data-gds-part":"message-pinned",className:d("flex items-center gap-1 text-[10px] uppercase tracking-wider text-muted-foreground",v&&"flex-row-reverse")},y__namespace.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 16 16",className:"h-3 w-3",fill:"currentColor"},y__namespace.createElement("path",{d:"M9.828.722a.5.5 0 0 1 .707 0l4.743 4.743a.5.5 0 0 1 0 .707l-2.121 2.121a.5.5 0 0 1-.354.146h-1.792l-3.586 3.586v2.293a.5.5 0 0 1-.854.354L4.146 12.39 1 15.535V14.12l3.146-3.146-1.293-1.293a.5.5 0 0 1 .354-.854h2.293l3.586-3.586V3.45a.5.5 0 0 1 .146-.354L9.828.722Z"})),"Pinned"),y__namespace.createElement("div",{"data-gds-part":"message-header",className:d("flex items-baseline gap-2 flex-wrap",v&&"flex-row-reverse")},y__namespace.createElement("span",{"data-gds-part":"message-author",className:x.author},t),n&&y__namespace.createElement("div",{"data-gds-part":"message-badge"},n),o&&y__namespace.createElement("span",{"data-gds-part":"message-timestamp",className:d(x.meta,"text-muted-foreground")},o),S&&y__namespace.createElement("span",{"data-gds-part":"message-edited",className:d(x.meta,"text-muted-foreground")},S),l&&y__namespace.createElement("div",{"data-gds-part":"message-actions",className:d(v?"mr-auto":"ml-auto")},l)),y__namespace.createElement("div",{"data-gds-part":"message-body",className:x.body},h),s&&y__namespace.createElement("div",{"data-gds-part":"message-reactions",className:d("flex flex-wrap gap-1 pt-1",v&&"justify-end")},s),typeof c=="number"&&c>0&&y__namespace.createElement("button",{type:"button","data-gds-part":"message-thread",onClick:p,className:d("inline-flex items-center gap-1 font-medium",x.thread,"text-primary hover:underline","focus:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded",v&&"flex-row-reverse")},y__namespace.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 16 16",className:"h-3 w-3",fill:"currentColor"},y__namespace.createElement("path",{d:"M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H6.414l-2.707 2.707A1 1 0 0 1 2 12V3Z"})),c," ",c===1?"reply":"replies")))});function uf({onSubmit:e,enabled:t}){let[o]=LexicalComposerContext.useLexicalComposerContext();return y__namespace.useEffect(()=>{if(t)return o.registerCommand(lexical.KEY_ENTER_COMMAND,a=>a&&a.shiftKey?false:(a?.preventDefault(),e(),true),lexical.COMMAND_PRIORITY_HIGH)},[o,t,e]),null}function mf({onImageFiles:e,enabled:t}){let[o]=LexicalComposerContext.useLexicalComposerContext();return y__namespace.useEffect(()=>{if(!t)return;let a=o.getRootElement();if(!a)return;let n=r=>{let l=Array.from(r.clipboardData?.items??[]).filter(s=>s.kind==="file"&&s.type.startsWith("image/")).map(s=>s.getAsFile()).filter(s=>s!==null);l.length>0&&(r.preventDefault(),e(l));};return a.addEventListener("paste",n),()=>a.removeEventListener("paste",n)},[o,t,e]),null}function gf({enabled:e}){let[t]=LexicalComposerContext.useLexicalComposerContext();return y__namespace.useEffect(()=>{e&&t.focus();},[t,e]),null}var Hc={bold:"bold",italic:"italic",underline:"underline",strikethrough:"strikethrough",code:"code"};function Fc(e,t){let o=Hc[t];if(o){e.dispatchCommand(lexical.FORMAT_TEXT_COMMAND,o);return}if(t==="ul"){e.dispatchCommand(list.INSERT_UNORDERED_LIST_COMMAND,void 0);return}if(t==="ol"){e.dispatchCommand(list.INSERT_ORDERED_LIST_COMMAND,void 0);return}e.update(()=>{let a=lexical.$getSelection();if(lexical.$isRangeSelection(a)){if(t==="h1"||t==="h2"||t==="h3"){let n=t;selection.$setBlocksType(a,()=>richText.$createHeadingNode(n));return}(t==="blockquote"||t==="pullquote")&&selection.$setBlocksType(a,()=>{let n=richText.$createQuoteNode();return t==="pullquote"&&(n.__pullquote=true),n});}});}function ff(e,t,o,a){e.update(()=>{let n=lexical.$getSelection();if(!lexical.$isRangeSelection(n))return;let r=lexicalBeautifulMentions.$createBeautifulMentionNode(t,o,a);n.insertNodes([r]),n.insertText(" ");});}function hf(e,t){let o=false;return e.update(()=>{let a=lexical.$getRoot(),r=a.getTextContent().indexOf(t);if(r===-1)return;let i=0,l=null,s=0,c=null,p=0,m=u=>{if(!(l&&c)){if(u.getType()==="text"){let g=u,h=g.getTextContentSize(),f=i,b=i+h;!l&&r>=f&&r<b&&(l=g,s=r-f);let v=r+t.length;!c&&v>f&&v<=b&&(c=g,p=v-f),i=b;return}if("getChildren"in u)for(let g of u.getChildren())m(g);else i+=u.getTextContentSize();}};if(m(a),l&&c){let u=l,g=c;u.select(s,0).focus.set(g.getKey(),p,"text"),o=true;}}),o}function Xa(e){e.update(()=>{let t=lexical.$getRoot();t.clear();let o=lexical.$createParagraphNode();t.append(o),o.select();});}function zc(e){let t="",o="",a=[];return e.getEditorState().read(()=>{t=lexical.$getRoot().getTextContent(),o=JSON.stringify(e.getEditorState().toJSON());let n=r=>{if(r.getType()==="beautifulMention"){let i=r;a.push({trigger:i.getTrigger(),value:i.getValue(),data:i.getData()});}if("getChildren"in r)for(let i of r.getChildren())n(i);};n(lexical.$getRoot());}),{text:t,json:o,mentions:a}}var bf=[{format:"bold",icon:lucideReact.Bold,label:"Bold"},{format:"italic",icon:lucideReact.Italic,label:"Italic"},{format:"underline",icon:lucideReact.Underline,label:"Underline"},{format:"strikethrough",icon:lucideReact.Strikethrough,label:"Strikethrough"},{format:"code",icon:lucideReact.Code,label:"Inline code"},{format:"h1",icon:lucideReact.Heading1,label:"Heading 1"},{format:"h2",icon:lucideReact.Heading2,label:"Heading 2"},{format:"h3",icon:lucideReact.Heading3,label:"Heading 3"},{format:"blockquote",icon:lucideReact.Quote,label:"Blockquote"},{format:"ul",icon:lucideReact.List,label:"Bulleted list"},{format:"ol",icon:lucideReact.ListOrdered,label:"Numbered list"}];function vf({formats:e}){let[t]=LexicalComposerContext.useLexicalComposerContext(),[o,a]=y__namespace.useState(()=>new Set);y__namespace.useEffect(()=>utils.mergeRegister(t.registerUpdateListener(({editorState:r})=>{r.read(()=>{let i=lexical.$getSelection();if(!lexical.$isRangeSelection(i))return;let l=new Set;for(let s of ["bold","italic","underline","strikethrough","code"])i.hasFormat(s)&&l.add(s);a(l);});})),[t]);let n=bf.filter(r=>e.includes(r.format));return y__namespace.createElement("div",{"data-gds-part":"composer-toolbar",className:d("flex flex-wrap items-center gap-0.5","px-2 py-1")},n.map(({format:r,icon:i,label:l})=>{let s=Hc[r],c=s?o.has(s):false;return y__namespace.createElement("button",{key:r,type:"button","aria-label":l,title:l,"data-gds-part":"composer-toolbar-button","data-gds-active":c?"true":"false",onClick:()=>Fc(t,r),className:d("h-7 w-7 inline-flex items-center justify-center rounded","text-[var(--gds-composer-toolbar-fg)]","hover:bg-[var(--gds-composer-toolbar-hover-bg)]","focus:outline-none focus:ring-2 focus:ring-primary",c&&"bg-[var(--gds-composer-toolbar-active-bg)] text-[var(--gds-composer-toolbar-active-fg)]")},y__namespace.createElement(i,{className:"h-3.5 w-3.5"}))}))}function yf({attachments:e,onRemove:t}){return y__namespace.createElement(react.AnimatePresence,{initial:false},e.length>0&&y__namespace.createElement(react.motion.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},transition:{duration:.18},className:"overflow-hidden"},y__namespace.createElement("div",{"data-gds-part":"composer-attachments",className:"flex flex-wrap gap-2 px-2 py-2"},e.map(o=>y__namespace.createElement("div",{key:o.id,className:"relative group"},o.file.type.startsWith("image/")?y__namespace.createElement("img",{src:o.previewUrl,alt:o.name,className:"h-14 w-14 rounded-md object-cover border border-[var(--gds-composer-border)]"}):y__namespace.createElement("div",{className:"h-14 w-14 rounded-md border border-[var(--gds-composer-border)] flex items-center justify-center text-xs px-1 text-center text-[var(--gds-composer-muted-fg)]"},o.name.slice(0,18)),y__namespace.createElement("button",{type:"button",onClick:()=>t(o.id),"aria-label":`Remove ${o.name}`,className:d("absolute -top-1.5 -right-1.5 h-5 w-5 rounded-full","bg-[var(--gds-composer-chip-remove-bg)]","text-[var(--gds-composer-chip-remove-fg)]","flex items-center justify-center","opacity-0 group-hover:opacity-100 focus:opacity-100","focus:outline-none focus:ring-2 focus:ring-primary","transition-opacity")},y__namespace.createElement(lucideReact.X,{className:"w-3 h-3"})))))))}function xf({placeholder:e,triggers:t,attachmentsCfg:o,formatList:a,showToolbar:n,isLoading:r,onStop:i,maxLength:l,autoFocus:s,submitOnEnter:c=true,leftActions:p,rightActions:m,hideSend:u,steps:g,trigger:h="mount",play:f,speed:b="normal",loop:v=false,loopDelay:S,onLoopReset:x,bare:w,className:k,onSubmit:C,onChange:E,readOnly:F,handleEditorReady:O,submitRef:M,restartRef:N,attachments:H,setAttachments:Y,ingestImages:se}){let[D]=LexicalComposerContext.useLexicalComposerContext(),V=y__namespace.useRef(null),R=y__namespace.useRef(null),[_,le]=y__namespace.useState(false);y__namespace.useEffect(()=>{O(D);},[D,O]),y__namespace.useEffect(()=>{D.setEditable(!F);},[D,F]);let X=y__namespace.useRef(E);X.current=E,y__namespace.useEffect(()=>D.registerUpdateListener(({editorState:T})=>{T.read(()=>{let Z=lexical.$getRoot().getTextContent();le(Z.trim().length>0),X.current?.(Z);});}),[D]);let U=y__namespace.useCallback(()=>{if(r)return;let T=zc(D),Z=T.text.trim().length>0,$=H.length>0;!Z&&!$||(C?.(T,$?H:void 0),Xa(D),H.forEach(Se=>URL.revokeObjectURL(Se.previewUrl)),Y([]));},[D,r,H,C,Y]);M.current=U;let{restart:J}=Ho({steps:g,speed:b,trigger:h,play:f,loop:v,loopDelay:S,containerRef:V,onLoopReset:()=>{Xa(D),x?.();},interpret:async(T,Z)=>{let $=Z.signal;if(T.type==="wait")return Pe(T.ms,$);if(T.type==="clear")return Xa(D),Pe(120,$);if(T.type==="newline")return D.update(()=>{let j=lexical.$getSelection();lexical.$isRangeSelection(j)&&j.insertParagraph();}),Pe(60,$);if(T.type==="submit")return U(),Pe(120,$);if(T.type==="format")return Fc(D,T.format),D.update(()=>{let j=lexical.$getSelection();if(!lexical.$isRangeSelection(j)||j.isCollapsed())return;let je=j.focus;j.anchor.set(je.key,je.offset,je.type);}),Pe(80,$);if(T.type==="select")return hf(D,T.text),Pe(120,$);if(T.type==="mention")return T.query&&(D.update(()=>{let j=lexical.$getSelection();lexical.$isRangeSelection(j)&&j.insertText(T.trigger);}),await Or(T.query,j=>{D.update(()=>{let je=lexical.$getRoot(),Te=je.getTextContent(),Qe=Te.slice(0,Te.length-T.trigger.length-(j.length-1));je.clear();let G=lexical.$createParagraphNode();Qe&&G.append(lexical.$createTextNode(Qe)),G.append(lexical.$createTextNode(T.trigger+j)),je.append(G);});},Z.speed.tokenStagger,$),await Pe(180,$),D.update(()=>{let j=lexical.$getRoot(),je=j.getTextContent(),Te=T.trigger.length+T.query.length,Qe=je.slice(0,je.length-Te);j.clear();let G=lexical.$createParagraphNode();Qe&&G.append(lexical.$createTextNode(Qe)),j.append(G),G.select();})),ff(D,T.trigger,T.value),Pe(120,$);let Se=T.speed?{slow:70,normal:22,fast:8}[T.speed]:Z.speed.tokenStagger;for(let j=0;j<T.text.length;j++){if($.aborted)return;let je=T.text[j];D.update(()=>{let Te=lexical.$getSelection();if(!lexical.$isRangeSelection(Te)){lexical.$getRoot().selectEnd();let Qe=lexical.$getSelection();lexical.$isRangeSelection(Qe)&&Qe.insertText(je);return}Te.insertText(je);}),j<T.text.length-1&&await Pe(Se,$);}}});y__namespace.useEffect(()=>{N.current=T=>{Xa(D),J(T);};},[D,J,N]);let ke=!F&&!m&&!u,De=!F&&!p&&o!==null,de=!F&&(De||p||ke||m);return y__namespace.createElement("div",{ref:V,"data-gds-part":"composer","data-gds-loading":r?"true":"false",className:d("w-full",!w&&["rounded-md","bg-transparent","border border-input","shadow-sm","focus-within:outline-none focus-within:ring-1 focus-within:ring-ring","transition-colors"],k)},n&&y__namespace.createElement(vf,{formats:a}),o&&y__namespace.createElement(yf,{attachments:H,onRemove:T=>{Y(Z=>{let $=Z.find(Se=>Se.id===T);return $&&URL.revokeObjectURL($.previewUrl),Z.filter(Se=>Se.id!==T)});}}),y__namespace.createElement("div",{className:"relative"},y__namespace.createElement(LexicalRichTextPlugin.RichTextPlugin,{contentEditable:y__namespace.createElement(LexicalContentEditable.ContentEditable,{"data-gds-part":"composer-editor",className:d("outline-none","px-3 sm:px-4 py-3","text-sm text-[var(--gds-composer-fg)]","min-h-[44px] max-h-[300px] overflow-y-auto","[&_p]:m-0 [&_p+p]:mt-2","[&_h1]:text-xl [&_h1]:font-semibold [&_h1]:mt-2","[&_h2]:text-lg [&_h2]:font-semibold [&_h2]:mt-2","[&_h3]:text-base [&_h3]:font-semibold [&_h3]:mt-2","[&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5","[&_blockquote]:border-l-2 [&_blockquote]:border-[var(--gds-composer-border)] [&_blockquote]:pl-3 [&_blockquote]:italic","[&_code]:bg-[var(--gds-composer-toolbar-active-bg)] [&_code]:px-1 [&_code]:py-0.5 [&_code]:rounded [&_code]:text-xs [&_code]:font-mono",r&&"opacity-60 pointer-events-none"),"aria-placeholder":e??"",placeholder:y__namespace.createElement("div",{"data-gds-part":"composer-placeholder",className:"absolute top-3 left-3 sm:left-4 text-sm text-muted-foreground pointer-events-none select-none"},e),spellCheck:true}),ErrorBoundary:LexicalErrorBoundary.LexicalErrorBoundary}),y__namespace.createElement(LexicalHistoryPlugin.HistoryPlugin,null),y__namespace.createElement(LexicalListPlugin.ListPlugin,null),y__namespace.createElement(LexicalLinkPlugin.LinkPlugin,null),y__namespace.createElement(LexicalOnChangePlugin.OnChangePlugin,{onChange:()=>{}}),y__namespace.createElement(gf,{enabled:!!s}),y__namespace.createElement(uf,{onSubmit:U,enabled:c}),o&&y__namespace.createElement(mf,{onImageFiles:se,enabled:true}),t.length>0&&y__namespace.createElement(lexicalBeautifulMentions.BeautifulMentionsPlugin,{items:t.reduce((T,Z)=>(typeof Z.items=="function"||(T[Z.char]=Z.items.map($=>({value:$.value}))),T),{})})),de&&y__namespace.createElement("div",{"data-gds-part":"composer-actions",className:"flex items-center justify-between gap-2 px-2 pb-2 pt-1"},y__namespace.createElement("div",{className:"flex items-center gap-1"},p??(De&&y__namespace.createElement("button",{type:"button",onClick:()=>R.current?.click(),disabled:r,"aria-label":"Attach image",title:"Attach image",className:d("h-8 w-8 rounded-lg flex items-center justify-center","text-[var(--gds-composer-action-fg)]","hover:text-[var(--gds-composer-fg)]","hover:bg-[var(--gds-composer-toolbar-hover-bg)]","focus:outline-none focus:ring-2 focus:ring-primary","transition-colors","disabled:opacity-50 disabled:cursor-not-allowed")},y__namespace.createElement(lucideReact.Paperclip,{className:"w-4 h-4"})))),m??(ke&&y__namespace.createElement("button",{type:"button",onClick:r?i:U,disabled:r?!i:!_&&H.length===0,"aria-label":r?"Stop":"Send",className:d("h-8 w-8 rounded-lg flex items-center justify-center transition-colors flex-shrink-0","focus:outline-none focus:ring-2 focus:ring-primary",r?"bg-red-500 hover:bg-red-600 text-white disabled:opacity-50":_||H.length>0?"bg-primary hover:bg-primary/90 text-primary-foreground":"bg-[var(--gds-composer-toolbar-active-bg)] text-[var(--gds-composer-muted-fg)] cursor-not-allowed")},r?y__namespace.createElement(lucideReact.Square,{className:"w-3.5 h-3.5"}):y__namespace.createElement(lucideReact.Send,{className:"w-3.5 h-3.5"}))),o&&y__namespace.createElement("input",{ref:R,type:"file",accept:o.accept,multiple:o.multiple,onChange:T=>{T.target.files&&se(Array.from(T.target.files)),T.target.value="";},className:"sr-only",tabIndex:-1,"aria-hidden":"true"})))}var Bc=y__namespace.forwardRef(function(t,o){let{initialText:a,initialJson:n,formats:r,toolbar:i,triggers:l,attachments:s,...c}=t,p=y__namespace.useMemo(()=>r===false?[]:r??["bold","italic","underline","strikethrough","code","h1","h2","blockquote","ul","ol"],[r]),m=i===true||i==="top",u=y__namespace.useMemo(()=>{if(!s)return null;let M=s===true?{}:s;return M.enabled===false?null:{enabled:true,accept:M.accept??"image/*",maxItems:M.maxItems??10,multiple:M.multiple??true}},[s]),[g,h]=y__namespace.useState([]),f=y__namespace.useRef(g);f.current=g,y__namespace.useEffect(()=>()=>{f.current.forEach(M=>URL.revokeObjectURL(M.previewUrl));},[]);let b=y__namespace.useCallback(M=>{if(!u)return;let N=M.filter(H=>u.accept?u.accept==="image/*"?H.type.startsWith("image/"):u.accept.split(",").some(Y=>{let se=Y.trim();return se.endsWith("/*")?H.type.startsWith(se.slice(0,-1)):H.type===se||H.name.toLowerCase().endsWith(se)}):true);N.length!==0&&h(H=>{let Y=u.maxItems-H.length;if(Y<=0)return H;let se=N.slice(0,Y).map(D=>({id:`${D.name}-${D.size}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,file:D,previewUrl:URL.createObjectURL(D),name:D.name}));return [...H,...se]});},[u]),v=y__namespace.useRef(null),S=y__namespace.useRef(()=>{}),x=y__namespace.useRef(()=>{}),w=y__namespace.useCallback(M=>{v.current=M;},[]);y__namespace.useImperativeHandle(o,()=>({play:M=>{console.warn('[Composer] handle.play(steps) is not wired in v1 \u2014 pass `steps` + `trigger="manual"` and toggle `play` instead.');},stop:()=>{},restart:M=>x.current(M),focus:()=>v.current?.focus(),clear:()=>{let M=v.current;M&&Xa(M);},insert:M=>{v.current?.update(()=>{let N=lexical.$getSelection();lexical.$isRangeSelection(N)&&N.insertText(M);});},getContent:()=>v.current?zc(v.current):{text:"",json:"",mentions:[]},getEditor:()=>v.current}),[]);let k=y__namespace.useMemo(()=>({paragraph:"gds-composer-paragraph",quote:"gds-composer-quote",heading:{h1:"gds-composer-h1",h2:"gds-composer-h2",h3:"gds-composer-h3"},list:{ul:"gds-composer-ul",ol:"gds-composer-ol",listitem:"gds-composer-li"},text:{bold:"font-semibold",italic:"italic",underline:"underline",strikethrough:"line-through",code:"gds-composer-code"},beautifulMentions:{"@":"gds-composer-mention px-1.5 py-0.5 mx-0.5 rounded bg-primary/10 text-primary font-medium","/":"gds-composer-mention px-1.5 py-0.5 mx-0.5 rounded bg-violet-500/15 text-violet-600 dark:text-violet-400 font-medium"}}),[]),C=y__namespace.useMemo(()=>({namespace:"gds-composer",theme:k,onError:M=>{console.error("[Composer]",M);},nodes:[richText.HeadingNode,richText.QuoteNode,list.ListNode,list.ListItemNode,link.LinkNode,link.AutoLinkNode,code.CodeNode,code.CodeHighlightNode,lexicalBeautifulMentions.BeautifulMentionNode],editorState:n||(a?M=>{let N=lexical.$getRoot(),H=lexical.$createParagraphNode();H.append(lexical.$createTextNode(a)),N.append(H);}:void 0)}),[k,n,a]),E=p.length>0,{readOnly:F=false,...O}=c;return y__namespace.createElement(LexicalComposer.LexicalComposer,{initialConfig:{...C,editable:!F}},y__namespace.createElement(xf,{...O,readOnly:F,triggers:l??[],attachmentsCfg:F?null:u,formatList:p,showToolbar:m&&E&&!F,handleEditorReady:w,submitRef:S,restartRef:x,attachments:g,setAttachments:h,ingestImages:b}))}),wf=y__namespace.forwardRef(function(t,o){return y__namespace.createElement(Bc,{ref:o,placeholder:"Write a reply\u2026",formats:false,submitOnEnter:false,...t})});var zt=Yt__namespace.Root,Bt=Yt__namespace.Trigger,kf=Yt__namespace.Anchor,Ct=y__namespace.forwardRef(({className:e,align:t="center",sideOffset:o=4,surface:a="solid",...n},r)=>y__namespace.createElement(Yt__namespace.Portal,null,y__namespace.createElement(Yt__namespace.Content,{ref:r,align:t,sideOffset:o,"data-surface":a,className:d("z-50 w-72 rounded-md border 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]",qt(a,"bg-popover"),St[a],e),...n})));Ct.displayName=Yt__namespace.Content.displayName;var Sf="PPP",Rf="LLL dd, y";function Cf({value:e,onChange:t,placeholder:o="Pick a date",disabled:a,className:n,contentClassName:r,align:i="start",side:l,format:s=Sf,captionLayout:c,icon:p,"aria-label":m}){return y__namespace.createElement(zt,null,y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement(et,{type:"button",variant:"outline",disabled:a,"aria-label":m??(e?void 0:o),"data-empty":!e,className:d("w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},p??y__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?dateFns.format(e,s):y__namespace.createElement("span",null,o))),y__namespace.createElement(Ct,{className:d("w-auto p-0",r),align:i,side:l},y__namespace.createElement(Lr,{mode:"single",selected:e,onSelect:t,captionLayout:c,initialFocus:true})))}function Tf({value:e,onChange:t,placeholder:o="Pick a date range",disabled:a,className:n,contentClassName:r,align:i="start",side:l,format:s=Rf,captionLayout:c,icon:p,numberOfMonths:m=2,"aria-label":u}){let g=!!e?.from;return y__namespace.createElement(zt,null,y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement(et,{type:"button",variant:"outline",disabled:a,"aria-label":u??(g?void 0:o),"data-empty":!g,className:d("w-[300px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",n)},p??y__namespace.createElement(lucideReact.CalendarIcon,{className:"mr-2 h-4 w-4","aria-hidden":true}),e?.from?e.to?y__namespace.createElement(y__namespace.Fragment,null,dateFns.format(e.from,s)," \u2013"," ",dateFns.format(e.to,s)):dateFns.format(e.from,s):y__namespace.createElement("span",null,o))),y__namespace.createElement(Ct,{className:d("w-auto p-0",r),align:i,side:l},y__namespace.createElement(Lr,{mode:"range",selected:e,onSelect:t,defaultMonth:e?.from,numberOfMonths:m,captionLayout:c,initialFocus:true})))}var Mf=Be__namespace.Root,Nf=Be__namespace.Trigger,_c=Be__namespace.Portal,Ef=Be__namespace.Close,Xn=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Overlay,{ref:o,className:d("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}));Xn.displayName=Be__namespace.Overlay.displayName;var Oc=y__namespace.forwardRef(({className:e,children:t,surface:o="solid",...a},n)=>y__namespace.createElement(_c,null,y__namespace.createElement(Xn,null),y__namespace.createElement(Be__namespace.Content,{ref:n,"data-surface":o,className:d("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border 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",qt(o,"bg-background"),St[o],e),...a},t,y__namespace.createElement(Be__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"},y__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),y__namespace.createElement("span",{className:"sr-only"},"Close")))));Oc.displayName=Be__namespace.Content.displayName;var Gc=({className:e,...t})=>y__namespace.createElement("div",{className:d("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});Gc.displayName="DialogHeader";var Wc=({className:e,...t})=>y__namespace.createElement("div",{className:d("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Wc.displayName="DialogFooter";var Uc=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Title,{ref:o,className:d("text-lg font-semibold leading-none tracking-tight",e),...t}));Uc.displayName=Be__namespace.Title.displayName;var $c=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Description,{ref:o,className:d("text-sm text-muted-foreground",e),...t}));$c.displayName=Be__namespace.Description.displayName;var Jn=ce__namespace.Root,Qn=ce__namespace.Trigger,oa=y__namespace.createContext("default"),jc=e=>e==="default"?"px-2 py-1.5 text-sm":"px-2 py-1 text-xs",If=ce__namespace.Group,Hf=ce__namespace.Portal,Ff=ce__namespace.Sub,zf=ce__namespace.RadioGroup,Kc=y__namespace.forwardRef(({className:e,inset:t,children:o,...a},n)=>{let r=y__namespace.useContext(oa);return y__namespace.createElement(ce__namespace.SubTrigger,{ref:n,className:d("flex cursor-default select-none items-center gap-2 rounded-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",jc(r),r==="default"?"[&_svg]:size-4":"[&_svg]:size-3.5",t&&(r==="default"?"pl-8":"pl-7"),e),...a},o,y__namespace.createElement(lucideReact.ChevronRight,{className:"ml-auto"}))});Kc.displayName=ce__namespace.SubTrigger.displayName;var qc=y__namespace.forwardRef(({className:e,surface:t="solid",size:o="default",children:a,...n},r)=>y__namespace.createElement(ce__namespace.SubContent,{ref:r,"data-surface":t,className:d("z-50 min-w-[8rem] overflow-hidden rounded-md border 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]",o==="default"?"p-1":"p-0.5",qt(t,"bg-popover"),St[t],e),...n},y__namespace.createElement(oa.Provider,{value:o},a)));qc.displayName=ce__namespace.SubContent.displayName;var Kr=y__namespace.forwardRef(({className:e,sideOffset:t=4,surface:o="solid",size:a="default",children:n,...r},i)=>y__namespace.createElement(ce__namespace.Portal,null,y__namespace.createElement(ce__namespace.Content,{ref:i,sideOffset:t,"data-surface":o,className:d("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border text-popover-foreground shadow-md",a==="default"?"p-1":"p-0.5","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]",qt(o,"bg-popover"),St[o],e),...r},y__namespace.createElement(oa.Provider,{value:a},n))));Kr.displayName=ce__namespace.Content.displayName;var Yc=y__namespace.forwardRef(({className:e,inset:t,...o},a)=>{let n=y__namespace.useContext(oa);return y__namespace.createElement(ce__namespace.Item,{ref:a,className:d("relative flex cursor-default select-none items-center gap-2 rounded-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:shrink-0",jc(n),n==="default"?"[&>svg]:size-4":"[&>svg]:size-3.5",t&&(n==="default"?"pl-8":"pl-7"),e),...o})});Yc.displayName=ce__namespace.Item.displayName;var qr=y__namespace.forwardRef(({className:e,children:t,checked:o,...a},n)=>{let i=y__namespace.useContext(oa)!=="default";return y__namespace.createElement(ce__namespace.CheckboxItem,{ref:n,className:d("relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",i?"py-1 pl-7 text-xs":"py-1.5 pl-8 text-sm",e),checked:o,...a},y__namespace.createElement("span",{className:d("absolute flex items-center justify-center",i?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},y__namespace.createElement(ce__namespace.ItemIndicator,null,y__namespace.createElement(lucideReact.Check,{className:i?"h-3 w-3":"h-4 w-4"}))),t)});qr.displayName=ce__namespace.CheckboxItem.displayName;var Zc=y__namespace.forwardRef(({className:e,children:t,...o},a)=>{let r=y__namespace.useContext(oa)!=="default";return y__namespace.createElement(ce__namespace.RadioItem,{ref:a,className:d("relative flex cursor-default select-none items-center rounded-sm pr-2 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",r?"py-1 pl-7 text-xs":"py-1.5 pl-8 text-sm",e),...o},y__namespace.createElement("span",{className:d("absolute flex items-center justify-center",r?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},y__namespace.createElement(ce__namespace.ItemIndicator,null,y__namespace.createElement(lucideReact.Circle,{className:"h-2 w-2 fill-current"}))),t)});Zc.displayName=ce__namespace.RadioItem.displayName;var Yr=y__namespace.forwardRef(({className:e,inset:t,...o},a)=>{let n=y__namespace.useContext(oa);return y__namespace.createElement(ce__namespace.Label,{ref:a,className:d("font-semibold",n==="default"?"px-2 py-1.5 text-sm":"px-2 py-1 text-xs",t&&(n==="default"?"pl-8":"pl-7"),e),...o})});Yr.displayName=ce__namespace.Label.displayName;var Zr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(ce__namespace.Separator,{ref:o,className:d("-mx-1 my-1 h-px bg-muted",e),...t}));Zr.displayName=ce__namespace.Separator.displayName;var Xc=({className:e,...t})=>y__namespace.createElement("span",{className:d("ml-auto text-xs tracking-widest opacity-60",e),...t});Xc.displayName="DropdownMenuShortcut";var Jc=classVarianceAuthority.cva("flex w-full rounded-md bg-transparent 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-sm file:text-xs",xs:"h-7 pl-2 pr-2 py-0 text-xs file:text-xs shadow-none","2xs":"h-6 rounded-lg pl-1.5 pr-2 py-0 text-2xs file:text-2xs shadow-none"},variant:{default:"border border-input",ghost:"border border-transparent bg-transparent shadow-none"}},defaultVariants:{size:"default",variant:"default"}}),Vf={default:{startPad:"pl-9",endPad:"pr-9",startInset:"pl-3",endInset:"pr-3"},sm:{startPad:"pl-7",endPad:"pr-6",startInset:"pl-2",endInset:"pr-2"},xs:{startPad:"pl-6",endPad:"pr-5",startInset:"pl-2",endInset:"pr-2"},"2xs":{startPad:"pl-6",endPad:"pr-5",startInset:"pl-1.5",endInset:"pr-2"}},So=y__namespace.forwardRef(({className:e,type:t,size:o="default",variant:a="default",startSlot:n,endSlot:r,...i},l)=>{if(!n&&!r)return y__namespace.createElement("input",{type:t,className:d(Jc({size:o,variant:a}),e),ref:l,...i});let s=Vf[o];return y__namespace.createElement("div",{className:"relative flex w-full items-center"},n?y__namespace.createElement("span",{className:d("pointer-events-none absolute inset-y-0 left-0 flex items-center text-muted-foreground [&_svg]:size-3.5",s.startInset)},n):null,y__namespace.createElement("input",{type:t,ref:l,className:d(Jc({size:o,variant:a}),n&&s.startPad,r&&s.endPad,e),...i}),r?y__namespace.createElement("span",{className:d("pointer-events-none absolute inset-y-0 right-0 flex items-center text-muted-foreground [&_svg]:size-3.5",s.endInset)},r):null)});So.displayName="Input";var Of=classVarianceAuthority.cva("font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{size:{default:"text-sm",sm:"text-sm",xs:"text-xs","2xs":"text-2xs"}},defaultVariants:{size:"default"}}),er=y__namespace.forwardRef(({className:e,size:t,...o},a)=>y__namespace.createElement(ei__namespace.Root,{ref:a,className:d(Of({size:t}),e),...o}));er.displayName=ei__namespace.Root.displayName;var Qc=y__namespace.forwardRef(({className:e,value:t,...o},a)=>y__namespace.createElement(or__namespace.Root,{ref:a,className:d("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...o},y__namespace.createElement(or__namespace.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})));Qc.displayName=or__namespace.Root.displayName;var ar=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(cmdk.Command,{ref:o,className:d("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",e),...t}));ar.displayName=cmdk.Command.displayName;var rr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{className:"flex items-center border-b px-3","cmdk-input-wrapper":""},y__namespace.createElement(lucideReact.Search,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),y__namespace.createElement(cmdk.Command.Input,{ref:o,className:d("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})));rr.displayName=cmdk.Command.Input.displayName;var nr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(cmdk.Command.List,{ref:o,className:d("max-h-[300px] overflow-y-auto overflow-x-hidden",e),...t}));nr.displayName=cmdk.Command.List.displayName;var ir=y__namespace.forwardRef((e,t)=>y__namespace.createElement(cmdk.Command.Empty,{ref:t,className:"py-6 text-center text-sm",...e}));ir.displayName=cmdk.Command.Empty.displayName;var aa=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(cmdk.Command.Group,{ref:o,className:d("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}));aa.displayName=cmdk.Command.Group.displayName;var sr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(cmdk.Command.Separator,{ref:o,className:d("-mx-1 h-px bg-border",e),...t}));sr.displayName=cmdk.Command.Separator.displayName;var Ro=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(cmdk.Command.Item,{ref:o,className:d("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}));Ro.displayName=cmdk.Command.Item.displayName;var lr=y__namespace.forwardRef(({className:e,orientation:t="horizontal",decorative:o=true,...a},n)=>y__namespace.createElement(ti__namespace.Root,{ref:n,decorative:o,orientation:t,className:d("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...a}));lr.displayName=ti__namespace.Root.displayName;var qf=3,ed=y__namespace.forwardRef(function({options:t,value:o,defaultValue:a,onValueChange:n,placeholder:r="Select\u2026",searchPlaceholder:i="Search\u2026",emptyMessage:l="Nothing matches.",maxCount:s=qf,searchable:c=true,badgeDismissible:p=true,disabled:m=false,modalPopover:u=false,className:g,id:h,"aria-label":f,...b},v){let S=o!==void 0,[x,w]=y__namespace.useState(a??[]),k=S?o:x,[C,E]=y__namespace.useState(false),F=y__namespace.useMemo(()=>{let R=new Map;for(let _ of t)R.set(_.value,_);return R},[t]),O=y__namespace.useCallback(R=>{S||w(R),n?.(R);},[S,n]),M=R=>{k.includes(R)?O(k.filter(_=>_!==R)):O([...k,R]);},N=(R,_)=>{R.preventDefault(),R.stopPropagation(),O(k.filter(le=>le!==_));},H=R=>{R?.preventDefault(),R?.stopPropagation(),O([]);},Y=()=>{let R=t.filter(_=>!_.disabled).map(_=>_.value);O(R);},se=t.length>0&&t.filter(R=>!R.disabled).every(R=>k.includes(R.value)),D=k.slice(0,s),V=Math.max(0,k.length-s);return y__namespace.createElement(zt,{open:C,onOpenChange:E,modal:u},y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement("button",{ref:v,type:"button",id:h,role:"combobox","aria-expanded":C,"aria-haspopup":"listbox","aria-label":f,disabled:m,"data-gds-part":"multi-select",className:d("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",g)},k.length===0?y__namespace.createElement("span",{className:"text-muted-foreground px-1"},r):y__namespace.createElement("div",{className:"flex flex-1 flex-wrap items-center gap-1 py-1","data-gds-part":"multi-select-badges"},D.map(R=>{let _=F.get(R);if(!_)return null;let le=_.icon;return y__namespace.createElement(Do,{key:R,variant:"secondary",className:"gap-1 pr-1","data-gds-part":"multi-select-badge"},le?y__namespace.createElement(le,{className:"h-3 w-3"}):null,y__namespace.createElement("span",{className:"truncate max-w-[12rem]"},_.label),p&&!m&&y__namespace.createElement("span",{role:"button","aria-label":`Remove ${_.label}`,tabIndex:0,onClick:X=>N(X,R),onKeyDown:X=>{(X.key==="Enter"||X.key===" ")&&N(X,R);},className:"ml-0.5 inline-flex h-4 w-4 cursor-pointer items-center justify-center rounded-sm hover:bg-muted-foreground/20"},y__namespace.createElement(lucideReact.X,{className:"h-3 w-3","aria-hidden":true})))}),V>0&&y__namespace.createElement(Do,{variant:"outline",className:"text-muted-foreground","data-gds-part":"multi-select-overflow",title:k.slice(s).map(R=>F.get(R)?.label??R).join(", ")},"+",V," more")),y__namespace.createElement("div",{className:"flex shrink-0 items-center gap-1"},k.length>0&&!m&&y__namespace.createElement("span",{role:"button","aria-label":"Clear all",tabIndex:0,onClick:R=>H(R),onKeyDown:R=>{(R.key==="Enter"||R.key===" ")&&H(R);},className:"inline-flex h-5 w-5 cursor-pointer items-center justify-center rounded-sm text-muted-foreground hover:text-foreground hover:bg-muted"},y__namespace.createElement(lucideReact.XCircle,{className:"h-3.5 w-3.5","aria-hidden":true})),y__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":true})))),y__namespace.createElement(Ct,{align:"start",className:"w-[var(--radix-popover-trigger-width)] p-0","data-gds-part":"multi-select-content"},y__namespace.createElement(ar,null,c&&y__namespace.createElement(rr,{placeholder:i}),y__namespace.createElement(nr,null,y__namespace.createElement(ir,null,l),y__namespace.createElement(aa,null,t.map(R=>{let _=R.icon,le=k.includes(R.value);return y__namespace.createElement(Ro,{key:R.value,value:R.label,onSelect:()=>M(R.value),disabled:R.disabled,"data-gds-part":"multi-select-item","data-selected":le||void 0},y__namespace.createElement("div",{className:d("mr-2 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-primary",le?"bg-primary text-primary-foreground":"opacity-50 [&_svg]:invisible"),"aria-hidden":true},y__namespace.createElement(lucideReact.Check,{className:"h-3 w-3"})),_?y__namespace.createElement(_,{className:"mr-2 h-4 w-4 text-muted-foreground"}):null,y__namespace.createElement("span",{className:"truncate"},R.label))})),y__namespace.createElement(sr,null),y__namespace.createElement(aa,null,y__namespace.createElement("div",{className:"flex items-center justify-between gap-1 p-1"},y__namespace.createElement(Ro,{onSelect:Y,className:"flex-1 justify-center text-xs",disabled:se},"Select all"),y__namespace.createElement(lr,{orientation:"vertical",className:"h-5"}),y__namespace.createElement(Ro,{onSelect:()=>H(),className:"flex-1 justify-center text-xs",disabled:k.length===0},"Clear"),y__namespace.createElement(lr,{orientation:"vertical",className:"h-5"}),y__namespace.createElement(Ro,{onSelect:()=>E(false),className:"flex-1 justify-center text-xs"},"Close")))))))});ed.displayName="MultiSelect";var td=y__namespace.forwardRef(function({options:t,value:o,defaultValue:a=null,onValueChange:n,placeholder:r="Select\u2026",searchPlaceholder:i="Search\u2026",emptyMessage:l="Nothing matches.",searchable:s=true,clearable:c=false,triggerVariant:p="default",renderValue:m,hideChevron:u=false,disabled:g=false,modalPopover:h=false,align:f="start",className:b,id:v,"aria-label":S,...x},w){let k=o!==void 0,[C,E]=y__namespace.useState(a),F=k?o:C,[O,M]=y__namespace.useState(false),N=y__namespace.useMemo(()=>t.find(V=>V.value===F)??null,[t,F]),H=y__namespace.useCallback(V=>{k||E(V),n?.(V);},[k,n]),Y=V=>{H(c&&V===F?null:V),M(false);},se=p==="inline",D=N?.icon;return y__namespace.createElement(zt,{open:O,onOpenChange:M,modal:h},y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement("button",{ref:w,type:"button",id:v,role:"combobox","aria-expanded":O,"aria-haspopup":"listbox","aria-label":S,disabled:g,"data-gds-part":"combobox","data-variant":p,className:d("ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",se?"inline-flex max-w-full items-center gap-1 rounded-md px-1 py-0.5 text-sm hover:bg-muted data-[state=open]:bg-muted":"flex min-h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 text-sm shadow-sm data-[state=open]:ring-1 data-[state=open]:ring-ring",b),...x},y__namespace.createElement("span",{className:d("flex min-w-0 items-center gap-1.5",!N&&"text-muted-foreground"),"data-gds-part":"combobox-value"},N?m?m(N):y__namespace.createElement(y__namespace.Fragment,null,D?y__namespace.createElement(D,{className:"h-4 w-4 shrink-0 text-muted-foreground"}):null,y__namespace.createElement("span",{className:"truncate"},N.label)):r),!u&&y__namespace.createElement(lucideReact.ChevronsUpDown,{className:d("h-4 w-4 shrink-0 text-muted-foreground",se&&"opacity-60"),"aria-hidden":true}))),y__namespace.createElement(Ct,{align:f,className:"w-[var(--radix-popover-trigger-width)] min-w-[12rem] p-0","data-gds-part":"combobox-content"},y__namespace.createElement(ar,{filter:(V,R,_)=>`${V} ${(_??[]).join(" ")}`.toLowerCase().includes(R.toLowerCase())?1:0},s&&y__namespace.createElement(rr,{placeholder:i}),y__namespace.createElement(nr,null,y__namespace.createElement(ir,null,l),y__namespace.createElement(aa,null,t.map(V=>{let R=V.icon,_=V.value===F;return y__namespace.createElement(Ro,{key:V.value,value:V.label,keywords:V.keywords,onSelect:()=>Y(V.value),disabled:V.disabled,"data-gds-part":"combobox-item","data-selected":_||void 0},R?y__namespace.createElement(R,{className:"mr-2 h-4 w-4 text-muted-foreground"}):null,y__namespace.createElement("span",{className:"truncate"},V.label),y__namespace.createElement(lucideReact.Check,{className:d("ml-auto h-4 w-4",_?"opacity-100":"opacity-0"),"aria-hidden":true}))})),c&&F!==null&&y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement(sr,null),y__namespace.createElement(aa,null,y__namespace.createElement(Ro,{onSelect:()=>{H(null),M(false);},"data-gds-part":"combobox-clear"},y__namespace.createElement(lucideReact.X,{className:"mr-2 h-4 w-4 text-muted-foreground"}),y__namespace.createElement("span",null,"Clear"))))))))});td.displayName="Combobox";var od=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}}),zo=y__namespace.forwardRef(({className:e,gap:t,align:o,justify:a,wrap:n,asChild:r=false,...i},l)=>y__namespace.createElement(r?reactSlot.Slot:"div",{ref:l,"data-gds-part":"row",className:d(od({gap:t,align:o,justify:a,wrap:n,className:e})),...i}));zo.displayName="Row";var ad=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"}}),Ca=y__namespace.forwardRef(({className:e,gap:t,align:o,justify:a,asChild:n=false,...r},i)=>y__namespace.createElement(n?reactSlot.Slot:"div",{ref:i,"data-gds-part":"stack",className:d(ad({gap:t,align:o,justify:a,className:e})),...r}));Ca.displayName="Stack";var tn=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("div",{className:"relative w-full overflow-auto"},y__namespace.createElement("table",{ref:o,className:d("w-full caption-bottom text-sm",e),...t})));tn.displayName="Table";var on=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("thead",{ref:o,className:d("[&_tr]:border-b",e),...t}));on.displayName="TableHeader";var an=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("tbody",{ref:o,className:d("[&_tr:last-child]:border-0",e),...t}));an.displayName="TableBody";var rd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("tfoot",{ref:o,className:d("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));rd.displayName="TableFooter";var Ta=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("tr",{ref:o,className:d("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));Ta.displayName="TableRow";var rn=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("th",{ref:o,className:d("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}));rn.displayName="TableHead";var cr=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("td",{ref:o,className:d("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));cr.displayName="TableCell";var nd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("caption",{ref:o,className:d("mt-4 text-sm text-muted-foreground",e),...t}));nd.displayName="TableCaption";var sn=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",segmented:"rounded-md bg-transparent text-muted-foreground hover:bg-transparent hover:text-foreground data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-1.5 min-w-8",xs:"h-7 px-1 min-w-7","2xs":"h-6 px-1 min-w-6",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),id=y__namespace.forwardRef(({className:e,variant:t,size:o,...a},n)=>y__namespace.createElement(oi__namespace.Root,{ref:n,className:d(sn({variant:t,size:o,className:e})),...a}));id.displayName=oi__namespace.Root.displayName;var ai=Zt__namespace.Provider,ra=Zt__namespace.Root,na=Zt__namespace.Trigger,Bo=y__namespace.forwardRef(({className:e,sideOffset:t=4,...o},a)=>y__namespace.createElement(Zt__namespace.Portal,null,y__namespace.createElement(Zt__namespace.Content,{ref:a,sideOffset:t,className:d("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})));Bo.displayName=Zt__namespace.Content.displayName;var sd=y__namespace.createContext({size:"default",variant:"default"}),Co=y__namespace.forwardRef(({className:e,variant:t,size:o,children:a,...n},r)=>y__namespace.createElement(Pa__namespace.Root,{ref:r,className:d("flex items-center justify-center gap-1",t==="segmented"&&"inline-flex gap-0 rounded-lg bg-muted/70 p-0.5",e),...n},y__namespace.createElement(sd.Provider,{value:{variant:t,size:o}},a)));Co.displayName=Pa__namespace.Root.displayName;var To=y__namespace.forwardRef(({className:e,children:t,variant:o,size:a,tooltip:n,tooltipSide:r="top",tooltipDelay:i,"aria-label":l,...s},c)=>{let p=y__namespace.useContext(sd),m=l??(typeof n=="string"?n:void 0),u=y__namespace.createElement(Pa__namespace.Item,{ref:c,className:d(sn({variant:p.variant||o,size:p.size||a}),e),"aria-label":m,...s},t);return n==null?u:y__namespace.createElement(ra,{delayDuration:i},y__namespace.createElement(na,{asChild:true},y__namespace.createElement("span",{className:"inline-flex"},u)),y__namespace.createElement(Bo,{side:r},n))});To.displayName=Pa__namespace.Item.displayName;function ln(e,t,o){let[a,n]=y__namespace.useState(t),r=e!==void 0?e:a,i=y__namespace.useCallback(l=>{let s=typeof l=="function"?l(r):l;e===void 0&&n(s),o?.(s);},[e,o,r]);return [r,i]}function mh(e={}){let{defaultView:t="table",views:o=["table","cards","grid"],defaultActiveId:a=null,defaultSorting:n=[],defaultColumnVisibility:r={}}=e,[i,l]=y__namespace.useState(t),[s,c]=y__namespace.useState(a),[p,m]=y__namespace.useState(n),[u,g]=y__namespace.useState(r);return {view:i,setView:l,views:o,activeId:s,setActiveId:c,sorting:p,setSorting:m,columnVisibility:u,setColumnVisibility:g}}var gh=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})};function cn(e,t){if(e.cell)return e.cell(t);let o=t[e.key];switch(e.type){case "badge":{let a=e.options?.find(n=>n.value===o);return y__namespace.createElement(Do,{variant:a?.variant??"secondary"},a?.label??o)}case "tags":return Array.isArray(o)?y__namespace.createElement(zo,{gap:"xs",wrap:true},o.map(a=>y__namespace.createElement(Do,{key:String(a),variant:"secondary"},a))):null;case "number":return y__namespace.createElement("span",{className:"tabular-nums"},o);case "currency":return y__namespace.createElement("span",{className:"tabular-nums"},"$"+Number(o).toLocaleString("en-US"));case "percent":return y__namespace.createElement("span",{className:"tabular-nums"},Math.round(Number(o)*100)+"%");case "date":return y__namespace.createElement("span",{className:"tabular-nums text-muted-foreground"},gh(o));case "boolean":return y__namespace.createElement(Do,{variant:o?"success-soft":"outline"},o?"Yes":"No");case "url":return y__namespace.createElement("a",{href:String(o),className:"text-primary underline-offset-2 hover:underline"},String(o).replace(/^https?:\/\//,""));default:return y__namespace.createElement("span",null,o)}}var fh={table:lucideReact.Rows3,cards:lucideReact.LayoutGrid,grid:lucideReact.Grid3x3},hh={table:"Table view",cards:"Card view",grid:"Grid view"};function ri({value:e,onChange:t,views:o=["table","cards","grid"],className:a}){return o.length<2?null:y__namespace.createElement(Co,{type:"single",value:e,onValueChange:n=>n&&t(n),className:a,"data-gds-part":"data-view-toggle"},o.map(n=>{let r=fh[n];return y__namespace.createElement(To,{key:n,value:n,"aria-label":hh[n]},y__namespace.createElement(r,{className:"h-4 w-4"}))}))}function ni({columns:e,visibility:t,onVisibilityChange:o,label:a="Display",className:n}){let r=e.filter(s=>s.hideable!==false),i=s=>t[s]!==false,l=s=>o({...t,[s]:!i(s)});return y__namespace.createElement(Jn,null,y__namespace.createElement(Qn,{asChild:true},y__namespace.createElement(et,{variant:"outline",size:"sm",className:n,"data-gds-part":"data-view-columns"},y__namespace.createElement(lucideReact.SlidersHorizontal,{className:"mr-1.5 h-3.5 w-3.5"}),a)),y__namespace.createElement(Kr,{align:"end",className:"w-48"},y__namespace.createElement(Yr,null,"Show fields"),y__namespace.createElement(Zr,null),r.map(s=>y__namespace.createElement(qr,{key:s.key,checked:i(s.key),onCheckedChange:()=>l(s.key),onSelect:c=>c.preventDefault()},typeof s.header=="string"?s.header:s.key))))}function dn(e){let{data:t,columns:o,getRowId:a=X=>String(X.id),view:n,defaultView:r="table",onViewChange:i,views:l=["table","cards","grid"],activeId:s,defaultActiveId:c=null,onActiveChange:p,sorting:m,defaultSorting:u=[],onSortingChange:g,columnVisibility:h,defaultColumnVisibility:f,onColumnVisibilityChange:b,stickyHeader:v=false,toolbar:S=false,renderCard:x,emptyMessage:w="Nothing to show.",className:k}=e,[C,E]=ln(n,r,i),[F,O]=ln(s,c,p),[M,N]=ln(m,u,g),H=y__namespace.useMemo(()=>{let X={...f??{}};for(let U of o)U.defaultHidden&&(X[U.key]??=false);return X},[]),[Y,se]=ln(h,H,b),D=y__namespace.useMemo(()=>o.map(X=>({id:X.key,accessorKey:X.key,header:()=>X.header,enableSorting:!!X.sortable,enableHiding:X.hideable!==false,meta:X})),[o]),V=reactTable.useReactTable({data:t,columns:D,getRowId:a,state:{sorting:M,columnVisibility:Y},onSortingChange:N,onColumnVisibilityChange:se,getCoreRowModel:reactTable.getCoreRowModel(),getSortedRowModel:reactTable.getSortedRowModel()}),R=y__namespace.useMemo(()=>{let X={},U=0;for(let J of o)J.pinned==="left"&&(X[J.key]=U,U+=J.width??0);return X},[o]),le=V.getRowModel().rows.length===0;return y__namespace.createElement(Ca,{gap:"md",className:k,"data-gds-part":"data-view","data-view":C},S&&y__namespace.createElement(zo,{justify:"end",align:"center",gap:"sm"},y__namespace.createElement(ni,{columns:o,visibility:Y,onVisibilityChange:X=>se(X)}),y__namespace.createElement(ri,{value:C,onChange:E,views:l})),C==="table"?y__namespace.createElement(bh,{table:V,activeId:F,onActivate:O,pinnedOffset:R,stickyHeader:v,emptyMessage:w,isEmpty:le}):y__namespace.createElement(vh,{table:V,mode:C,activeId:F,onActivate:O,renderCard:x,emptyMessage:w,isEmpty:le}))}dn.displayName="DataView";dn.Toggle=ri;dn.Columns=ni;function bh({table:e,activeId:t,onActivate:o,pinnedOffset:a,stickyHeader:n,emptyMessage:r,isEmpty:i}){let l=e.getVisibleLeafColumns(),s=(c,p)=>{if(c in a)return {position:"sticky",left:a[c],zIndex:p?30:10,background:"var(--gds-data-view-pinned-bg, oklch(var(--background)))"}};return y__namespace.createElement("div",{className:"rounded-lg border border-border overflow-auto","data-gds-part":"data-view-table",style:n?{maxHeight:"var(--gds-data-view-table-max-h, 28rem)"}:void 0},y__namespace.createElement(tn,null,y__namespace.createElement(on,null,e.getHeaderGroups().map(c=>y__namespace.createElement(Ta,{key:c.id},c.headers.map(p=>{let m=p.column.columnDef.meta,u=p.column.getCanSort(),g=p.column.getIsSorted(),h=g==="asc"?lucideReact.ArrowUp:g==="desc"?lucideReact.ArrowDown:lucideReact.ArrowUpDown,f=s(p.column.id,true);return y__namespace.createElement(rn,{key:p.id,style:{...m?.width?{width:m.width,minWidth:m.width}:{},...n?{position:"sticky",top:0,zIndex:f?30:20,background:"var(--gds-data-view-header-bg, oklch(var(--background)))"}:{},...f},className:d(m?.align==="end"&&"text-right",p.column.id in a&&"border-r border-border")},u?y__namespace.createElement("button",{type:"button",className:"inline-flex items-center gap-1 text-left font-medium hover:text-foreground",onClick:p.column.getToggleSortingHandler()},typeof m?.header<"u"?m.header:null,y__namespace.createElement(h,{className:g?"h-3 w-3 text-foreground":"h-3 w-3 text-muted-foreground"})):m?.header??null)})))),y__namespace.createElement(an,null,i?y__namespace.createElement(Ta,null,y__namespace.createElement(cr,{colSpan:l.length,className:"py-12 text-center text-sm text-muted-foreground"},r)):e.getRowModel().rows.map(c=>{let p=c.id===t;return y__namespace.createElement(Ta,{key:c.id,"data-state":p?"selected":void 0,className:p?"cursor-pointer bg-muted":"cursor-pointer",onClick:()=>o(c.id)},c.getVisibleCells().map(m=>{let u=m.column.columnDef.meta,g=s(m.column.id,false);return y__namespace.createElement(cr,{key:m.id,style:{...u?.width?{width:u.width,minWidth:u.width}:{},...g?{...g,background:p?"var(--muted, oklch(var(--background)))":g.background}:{}},className:d(u?.align==="end"&&"text-right",m.column.id in a&&"border-r border-border")},cn(u,c.original))}))}))))}function vh({table:e,mode:t,activeId:o,onActivate:a,renderCard:n,emptyMessage:r,isEmpty:i}){let l=e.getVisibleLeafColumns().map(g=>g.columnDef.meta),s=l.find(g=>g?.role==="title")??l[0],c=l.filter(g=>g&&g!==s&&(g.type==="badge"||g.type==="tags")),p=l.filter(g=>g&&g!==s&&g.type!=="badge"&&g.type!=="tags"),m=t==="grid",u=m?"var(--gds-data-view-grid-min, 11rem)":"var(--gds-data-view-card-min, 18rem)";return i?y__namespace.createElement("div",{className:"rounded-lg border border-border py-12 text-center text-sm text-muted-foreground"},r):y__namespace.createElement("div",{"data-gds-part":m?"data-view-grid":"data-view-cards",style:{display:"grid",gap:"var(--gds-data-view-gap, 0.75rem)",gridTemplateColumns:`repeat(auto-fill, minmax(${u}, 1fr))`}},e.getRowModel().rows.map(g=>{let h=g.id===o;return n?y__namespace.createElement("div",{key:g.id,onClick:()=>a(g.id)},n(g.original,{active:h})):y__namespace.createElement(Ar,{key:g.id,onClick:()=>a(g.id),className:h?"cursor-pointer ring-2 ring-primary":"cursor-pointer hover:bg-muted/40"},y__namespace.createElement(Ca,{gap:"sm",className:m?"p-3":"p-4"},y__namespace.createElement(zo,{justify:"between",align:"start",gap:"sm"},s?y__namespace.createElement("span",{className:"min-w-0 truncate font-medium"},cn(s,g.original)):null),c.length>0&&y__namespace.createElement(zo,{gap:"xs",wrap:true},c.map(f=>y__namespace.createElement(y__namespace.Fragment,{key:f.key},cn(f,g.original)))),!m&&p.length>0&&y__namespace.createElement(Ca,{gap:"xs"},p.slice(0,3).map(f=>y__namespace.createElement(zo,{key:f.key,justify:"between",gap:"sm",align:"center"},y__namespace.createElement("span",{className:"text-xs text-muted-foreground"},typeof f.header=="string"?f.header:f.key),y__namespace.createElement("span",{className:"text-sm"},cn(f,g.original)))))))}))}var ld=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(_o__namespace.Root,{className:d("grid gap-2",e),...t,ref:o}));ld.displayName=_o__namespace.Root.displayName;var cd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(_o__namespace.Item,{ref:o,className:d("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),...t},y__namespace.createElement(_o__namespace.Indicator,{className:"flex items-center justify-center"},y__namespace.createElement(lucideReact.Circle,{className:"h-2.5 w-2.5 fill-current text-current"}))));cd.displayName=_o__namespace.Item.displayName;var wh=({className:e,...t})=>y__namespace.createElement(Ma__namespace.PanelGroup,{"data-gds-part":"resizable-panel-group",className:d("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...t}),kh=Ma__namespace.Panel,Sh=({withHandle:e,className:t,...o})=>y__namespace.createElement(Ma__namespace.PanelResizeHandle,{"data-gds-part":"resizable-handle",className:d("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&&y__namespace.createElement("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border"},y__namespace.createElement(lucideReact.GripVertical,{className:"h-2.5 w-2.5"})));var dd=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"}}),pd=y__namespace.forwardRef(({className:e,cols:t,gap:o,align:a,asChild:n=false,...r},i)=>y__namespace.createElement(n?reactSlot.Slot:"div",{ref:i,"data-gds-part":"grid",className:d(dd({cols:t,gap:o,align:a,className:e})),...r}));pd.displayName="Grid";var ud=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"}}),md=y__namespace.forwardRef(({className:e,direction:t,gap:o,align:a,justify:n,wrap:r,asChild:i=false,...l},s)=>y__namespace.createElement(i?reactSlot.Slot:"div",{ref:s,"data-gds-part":"flex",className:d(ud({direction:t,gap:o,align:a,justify:n,wrap:r,className:e})),...l}));md.displayName="Flex";var gd=y__namespace.forwardRef(({className:e,children:t,...o},a)=>y__namespace.createElement(Vt__namespace.Root,{ref:a,className:d("relative overflow-hidden",e),...o},y__namespace.createElement(Vt__namespace.Viewport,{className:"h-full w-full rounded-[inherit]"},t),y__namespace.createElement(ii,null),y__namespace.createElement(Vt__namespace.Corner,null)));gd.displayName=Vt__namespace.Root.displayName;var ii=y__namespace.forwardRef(({className:e,orientation:t="vertical",...o},a)=>y__namespace.createElement(Vt__namespace.ScrollAreaScrollbar,{ref:a,orientation:t,className:d("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},y__namespace.createElement(Vt__namespace.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));ii.displayName=Vt__namespace.ScrollAreaScrollbar.displayName;var si=fe__namespace.Root,Eh=fe__namespace.Group,li=fe__namespace.Value,ci=y__namespace.createContext("default"),Lh=classVarianceAuthority.cva("flex w-full items-center justify-between rounded-md border border-input bg-background ring-offset-background data-[placeholder]:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring 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-sm",xs:"h-7 px-2 py-0 text-xs","2xs":"h-6 rounded-lg pl-1.5 pr-2 py-0 text-2xs"}},defaultVariants:{size:"default"}}),mn=y__namespace.forwardRef(({className:e,children:t,size:o="default",startSlot:a,chevron:n=true,...r},i)=>y__namespace.createElement(fe__namespace.Trigger,{ref:i,className:d(Lh({size:o}),e),...r},a?y__namespace.createElement("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 [&>span]:truncate"},y__namespace.createElement("span",{className:"pointer-events-none flex shrink-0 items-center text-muted-foreground/70 [&_svg]:size-4"},a),t):t,n?y__namespace.createElement(fe__namespace.Icon,{asChild:true},y__namespace.createElement(lucideReact.ChevronDown,{className:d("opacity-50",o==="sm"?"h-3.5 w-3.5":"h-4 w-4")})):null));mn.displayName=fe__namespace.Trigger.displayName;var di=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(fe__namespace.ScrollUpButton,{ref:o,className:d("flex cursor-default items-center justify-center py-1",e),...t},y__namespace.createElement(lucideReact.ChevronUp,{className:"h-4 w-4"})));di.displayName=fe__namespace.ScrollUpButton.displayName;var pi=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(fe__namespace.ScrollDownButton,{ref:o,className:d("flex cursor-default items-center justify-center py-1",e),...t},y__namespace.createElement(lucideReact.ChevronDown,{className:"h-4 w-4"})));pi.displayName=fe__namespace.ScrollDownButton.displayName;var gn=y__namespace.forwardRef(({className:e,children:t,position:o="popper",size:a="default",container:n,...r},i)=>y__namespace.createElement(fe__namespace.Portal,{container:n??void 0},y__namespace.createElement(fe__namespace.Content,{ref:i,className:d("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},y__namespace.createElement(di,null),y__namespace.createElement(fe__namespace.Viewport,{className:d(a==="default"?"p-1":"p-0.5",o==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]")},y__namespace.createElement(ci.Provider,{value:a},t)),y__namespace.createElement(pi,null))));gn.displayName=fe__namespace.Content.displayName;var Dh={default:"py-1.5 pl-8 pr-2 text-sm font-semibold",sm:"py-1 pl-7 pr-2 text-xs font-semibold",xs:"py-1 pl-6 pr-2 text-2xs font-medium text-muted-foreground uppercase tracking-wide","2xs":"py-0.5 pl-6 pr-2 text-2xs font-medium text-muted-foreground uppercase tracking-wide"},bd=y__namespace.forwardRef(({className:e,...t},o)=>{let a=y__namespace.useContext(ci);return y__namespace.createElement(fe__namespace.Label,{ref:o,className:d(Dh[a],e),...t})});bd.displayName=fe__namespace.Label.displayName;var Ah=classVarianceAuthority.cva("relative flex w-full cursor-default select-none items-center rounded-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",{variants:{size:{default:"py-1.5 pl-8 pr-2 text-sm",sm:"py-1 pl-7 pr-2 text-sm",xs:"py-1 pl-6 pr-2 text-xs","2xs":"py-0.5 pl-6 pr-2 text-2xs"}},defaultVariants:{size:"default"}}),fn=y__namespace.forwardRef(({className:e,children:t,hint:o,...a},n)=>{let r=y__namespace.useContext(ci),i=r!=="default";return y__namespace.createElement(fe__namespace.Item,{ref:n,className:d("group",Ah({size:r}),e),...a},y__namespace.createElement("span",{className:d("absolute flex items-center justify-center",i?"left-1.5 h-3 w-3":"left-2 h-3.5 w-3.5")},y__namespace.createElement(fe__namespace.ItemIndicator,null,y__namespace.createElement(lucideReact.Check,{className:i?"h-3 w-3":"h-4 w-4"}))),y__namespace.createElement(fe__namespace.ItemText,null,t),o!=null?y__namespace.createElement("span",{className:"ml-auto pl-3 tabular-nums text-muted-foreground/60 group-focus:text-accent-foreground/80 group-data-[highlighted]:text-accent-foreground/80"},o):null)});fn.displayName=fe__namespace.Item.displayName;var vd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(fe__namespace.Separator,{ref:o,className:d("-mx-1 my-1 h-px bg-muted",e),...t}));vd.displayName=fe__namespace.Separator.displayName;var yd=classVarianceAuthority.cva("relative inline-block shrink-0 overflow-hidden shadow-elevation-1",{variants:{size:{xs:"size-5",sm:"size-6",md:"size-8",lg:"size-10",xl:"size-14"},shape:{square:"rounded-none",rounded:"rounded-[var(--radius)]",circle:"rounded-full"}},defaultVariants:{size:"md",shape:"rounded"}});function Hh(e,t){return e||(t?`oklch(var(--${t.replace(/^--/,"")}))`:"transparent")}var Fh=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i,xd=y__namespace.createContext({}),hn=y__namespace.forwardRef(function({color:t,token:o,size:a,shape:n,label:r,selected:i,onSelect:l,onColorChange:s,className:c,style:p,title:m,"aria-label":u,...g},h){let f=y__namespace.useContext(xd),b=a??f.size,v=n??f.shape,S=Hh(t,o),x=typeof s=="function",w=!x&&typeof l=="function",k=Fh.test(t??"")?t:"#000000",C=(typeof r=="string"?r:void 0)??o??t??"colour swatch",E={backgroundImage:"repeating-conic-gradient(var(--gds-media-checker-color) 0% 25%, transparent 0% 50%)",backgroundSize:"var(--gds-media-checker-size) var(--gds-media-checker-size)"},O=y__namespace.createElement(x?"label":w?"button":"div",{ref:h,"data-gds-part":"swatch","data-selected":i?"":void 0,title:m??C,"aria-label":u??(w?C:void 0),"aria-pressed":w?!!i:void 0,type:w?"button":void 0,onClick:w?l:void 0,className:d(yd({size:b,shape:v}),i&&"ring-2 ring-selected ring-offset-2 ring-offset-background",(w||x)&&"cursor-pointer outline-none transition-transform hover:scale-[1.06] focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",!r&&c),style:{...E,...r?void 0:p},...r?{}:g},y__namespace.createElement("span",{className:"absolute inset-0",style:{background:S}}),y__namespace.createElement("span",{"aria-hidden":true,className:"pointer-events-none absolute inset-0 rounded-[inherit] ring-1 ring-inset ring-foreground/40"}),x&&y__namespace.createElement("input",{type:"color",value:k,onChange:M=>s(M.currentTarget.value),"aria-label":u??C,className:"absolute inset-0 cursor-pointer opacity-0"}));return r?y__namespace.createElement("div",{className:d("inline-flex flex-col items-start gap-1.5",c),style:p,...g},O,y__namespace.createElement("span",{className:"text-xs leading-none text-muted-foreground"},r)):O});hn.displayName="Swatch";var zh={xs:"-space-x-1.5",sm:"-space-x-2",md:"-space-x-2.5",lg:"-space-x-3",xl:"-space-x-4"},Bh={xs:"gap-1",sm:"gap-2",md:"gap-3",lg:"gap-4"},wd=y__namespace.forwardRef(function({layout:t="row",size:o,shape:a,gap:n="sm",className:r,children:i,...l},s){let c=t==="stack";return y__namespace.createElement(xd.Provider,{value:{size:o,shape:a}},y__namespace.createElement("div",{ref:s,"data-gds-part":"swatch-group","data-layout":t,className:d("inline-flex flex-wrap items-center",c?d(zh[o??"md"],"[&_[data-gds-part=swatch]]:ring-2 [&_[data-gds-part=swatch]]:ring-background"):Bh[n],r),...l},i))});wd.displayName="SwatchGroup";var Oh=Be__namespace.Root,Gh=Be__namespace.Trigger,Wh=Be__namespace.Close,kd=Be__namespace.Portal,ui=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Overlay,{className:d("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}));ui.displayName=Be__namespace.Overlay.displayName;var Uh=classVarianceAuthority.cva("fixed z-50 gap-4 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"}}),Sd=y__namespace.forwardRef(({side:e="right",surface:t="solid",className:o,overlayClassName:a,closeClassName:n,children:r,...i},l)=>y__namespace.createElement(kd,null,y__namespace.createElement(ui,{className:a}),y__namespace.createElement(Be__namespace.Content,{ref:l,"data-surface":t,className:d(Uh({side:e}),qt(t,"bg-background"),St[t],o),...i},r,y__namespace.createElement(Be__namespace.Close,{className:d("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",n)},y__namespace.createElement(lucideReact.X,{className:"h-4 w-4"}),y__namespace.createElement("span",{className:"sr-only"},"Close")))));Sd.displayName=Be__namespace.Content.displayName;var Rd=({className:e,...t})=>y__namespace.createElement("div",{className:d("flex flex-col space-y-2 text-center sm:text-left",e),...t});Rd.displayName="SheetHeader";var Cd=({className:e,...t})=>y__namespace.createElement("div",{className:d("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Cd.displayName="SheetFooter";var Td=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Title,{ref:o,className:d("text-lg font-semibold text-foreground",e),...t}));Td.displayName=Be__namespace.Title.displayName;var Pd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Be__namespace.Description,{ref:o,className:d("text-sm text-muted-foreground",e),...t}));Pd.displayName=Be__namespace.Description.displayName;function $h({className:e,...t}){return y__namespace.createElement("div",{className:d("animate-pulse rounded-md bg-muted",e),...t})}var jh={default:{track:"h-2 bg-secondary",range:"bg-primary",thumb:"h-5 w-5 border-2 border-primary focus-visible:ring-2 focus-visible:ring-offset-2"},sm:{track:"h-[3px] bg-border",range:"bg-foreground/40",thumb:"h-3 w-3 border border-border hover:border-foreground/40 focus-visible:ring-2"}},sa=y__namespace.forwardRef(({className:e,size:t="default",...o},a)=>{let n=jh[t];return y__namespace.createElement(Po__namespace.Root,{ref:a,className:d("relative flex w-full cursor-pointer touch-none select-none items-center py-2 -my-1",e),...o},y__namespace.createElement(Po__namespace.Track,{className:d("relative w-full grow overflow-hidden rounded-full",n.track)},y__namespace.createElement(Po__namespace.Range,{className:d("absolute h-full rounded-full",n.range)})),y__namespace.createElement(Po__namespace.Thumb,{className:d("block rounded-full bg-background shadow-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",n.thumb)}))});sa.displayName=Po__namespace.Root.displayName;var ob={vertical:sortable.verticalListSortingStrategy,horizontal:sortable.horizontalListSortingStrategy,grid:sortable.rectSortingStrategy},mi=y__namespace.createContext(null),Fd=y__namespace.createContext(null),gi=y__namespace.forwardRef(function({disabled:t=false,className:o,children:a,...n},r){let i=y__namespace.useRef(new Map),l=y__namespace.useCallback(m=>(i.current.set(m.id,m),()=>{i.current.delete(m.id);}),[]),s=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),c=m=>{let u=i.current,g=u.get(String(m));if(g)return g;for(let h of u.values())if(h.values.some(f=>f===m))return h;return null},p=y__namespace.useCallback(m=>{if(t)return;let{active:u,over:g}=m;if(!g)return;let h=c(u.id),f=c(g.id);if(!h||!f)return;if(h.id===f.id){if(u.id===g.id)return;let x=h.values.findIndex(k=>k===u.id),w=h.values.findIndex(k=>k===g.id);if(x===-1||w===-1)return;h.onReorder?.(sortable.arrayMove(h.values,x,w));return}let b=h.values.filter(x=>x!==u.id),v=g.id===f.id?f.values.length:Math.max(0,f.values.findIndex(x=>x===g.id)),S=[...f.values.slice(0,v),u.id,...f.values.slice(v)];h.onReorder?.(b),f.onReorder?.(S);},[t]);return y__namespace.createElement(Fd.Provider,{value:{registerContainer:l}},y__namespace.createElement(core.DndContext,{sensors:s,collisionDetection:core.closestCorners,onDragEnd:p},y__namespace.createElement("div",{ref:r,"data-gds-part":"sortable-group","data-disabled":t||void 0,className:d(o),...n},a)))});gi.displayName="Sortable.Group";var ur=y__namespace.forwardRef(function({values:t,onReorder:o,strategy:a="vertical",disabled:n=false,id:r,className:i,children:l,...s},c){let p=y__namespace.useContext(Fd),m=p!==null,u=y__namespace.useId(),g=r??u;y__namespace.useEffect(()=>{if(m)return p.registerContainer({id:g,values:t,onReorder:o})},[m,p,g,t,o]);let h=core.useSensors(core.useSensor(core.PointerSensor,{activationConstraint:{distance:4}}),core.useSensor(core.KeyboardSensor,{coordinateGetter:sortable.sortableKeyboardCoordinates})),f=y__namespace.useCallback(S=>{let{active:x,over:w}=S;if(!w||x.id===w.id)return;let k=t.findIndex(E=>E===x.id),C=t.findIndex(E=>E===w.id);k===-1||C===-1||o?.(sortable.arrayMove(t,k,C));},[t,o]),b=y__namespace.useMemo(()=>({disabled:n}),[n]),v=y__namespace.createElement(sortable.SortableContext,{items:t,strategy:ob[a]},y__namespace.createElement(ab,{id:g,enabled:m,forwardedRef:c,strategy:a,disabled:n,className:i,...s},l));return m?y__namespace.createElement(mi.Provider,{value:b},v):y__namespace.createElement(mi.Provider,{value:b},y__namespace.createElement(core.DndContext,{sensors:h,collisionDetection:core.closestCenter,onDragEnd:f},v))});ur.displayName="Sortable";function ab({id:e,enabled:t,forwardedRef:o,strategy:a,disabled:n,className:r,children:i,...l}){let s=core.useDroppable({id:e,disabled:!t}),c=y__namespace.useCallback(p=>{t&&s.setNodeRef(p),typeof o=="function"?o(p):o&&(o.current=p);},[t,s,o]);return y__namespace.createElement("div",{ref:c,"data-gds-part":"sortable","data-strategy":a,"data-disabled":n||void 0,className:d(r),...l},i)}var zd=y__namespace.createContext(null),fi=y__namespace.forwardRef(function({value:t,asChild:o=false,disabled:a,className:n,style:r,children:i,...l},s){let c=y__namespace.useContext(mi);if(!c)throw new Error("<Sortable.Item> must be rendered inside <Sortable>.");let p=c.disabled||a||false,{attributes:m,listeners:u,setNodeRef:g,setActivatorNodeRef:h,transform:f,transition:b,isDragging:v}=sortable.useSortable({id:t,disabled:p}),S=y__namespace.useRef(false),x=y__namespace.useCallback(E=>{g(E),typeof s=="function"?s(E):s&&(s.current=E);},[g,s]),w=y__namespace.useMemo(()=>({listeners:u,setActivatorNodeRef:h,hasHandle:S,disabled:p}),[u,h,p]),k={transform:utilities.CSS.Transform.toString(f),transition:b,zIndex:v?1:void 0,cursor:p?"default":S.current?void 0:"grab",...r},C=o?reactSlot.Slot:"div";return y__namespace.createElement(zd.Provider,{value:w},y__namespace.createElement(C,{ref:x,"data-gds-part":"sortable-item","data-value":String(t),"data-dragging":v||void 0,className:d(n),style:k,...m,...S.current?{}:u,...l},i))});fi.displayName="Sortable.Item";var hi=y__namespace.forwardRef(function({asChild:t=false,className:o,children:a,...n},r){let i=y__namespace.useContext(zd);if(!i)throw new Error("<Sortable.Handle> must be rendered inside <Sortable.Item>.");y__namespace.useLayoutEffect(()=>(i.hasHandle.current=true,()=>{i.hasHandle.current=false;}),[i.hasHandle]);let l=y__namespace.useCallback(c=>{i.setActivatorNodeRef(c),typeof r=="function"?r(c):r&&(r.current=c);},[i,r]),s={"data-gds-part":"sortable-handle","aria-label":"Drag to reorder",className:d("cursor-grab touch-none select-none",i.disabled&&"cursor-default opacity-50",o),...i.disabled?{}:i.listeners,...n};return t?y__namespace.createElement(reactSlot.Slot,{ref:l,...s},a):y__namespace.createElement("button",{type:"button",ref:l,...s},a)});hi.displayName="Sortable.Handle";ur.Item=fi;ur.Handle=hi;ur.Group=gi;var rb=ur;var nb=classVarianceAuthority.cva("peer inline-flex 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",{variants:{size:{default:"h-6 w-11",sm:"h-5 w-9",xs:"h-4 w-7","2xs":"h-3 w-5"}},defaultVariants:{size:"default"}}),ib=classVarianceAuthority.cva("pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=unchecked]:translate-x-0",{variants:{size:{default:"h-5 w-5 data-[state=checked]:translate-x-5",sm:"h-4 w-4 data-[state=checked]:translate-x-4",xs:"h-3 w-3 data-[state=checked]:translate-x-3","2xs":"h-2 w-2 data-[state=checked]:translate-x-2"}},defaultVariants:{size:"default"}}),vn=y__namespace.forwardRef(({className:e,size:t="default",...o},a)=>y__namespace.createElement(gr__namespace.Root,{className:d(nb({size:t}),e),...o,ref:a},y__namespace.createElement(gr__namespace.Thumb,{className:d(ib({size:t}))})));vn.displayName=gr__namespace.Root.displayName;var Vd=y__namespace.createContext(y__namespace.createElement(lucideReact.ChevronRight,null)),_d=y__namespace.forwardRef(({separator:e,children:t,...o},a)=>y__namespace.createElement(Vd.Provider,{value:e??y__namespace.createElement(lucideReact.ChevronRight,null)},y__namespace.createElement("nav",{ref:a,"aria-label":"breadcrumb",...o},t)));_d.displayName="Breadcrumb";var Od=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("ol",{ref:o,className:d("flex flex-wrap items-center gap-1.5 break-words text-xs text-muted-foreground",e),...t}));Od.displayName="BreadcrumbList";var Gd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("li",{ref:o,className:d("inline-flex items-center gap-1.5",e),...t}));Gd.displayName="BreadcrumbItem";var yn=d("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"),Wd=y__namespace.forwardRef(({asChild:e,className:t,href:o,...a},n)=>e?y__namespace.createElement("span",{ref:n,className:d(yn,t),...a}):o?y__namespace.createElement("a",{ref:n,href:o,className:d(yn,t),...a}):y__namespace.createElement("button",{ref:n,type:"button",className:d(yn,t),...a}));Wd.displayName="BreadcrumbLink";var Ud=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("span",{ref:o,role:"link","aria-disabled":"true","aria-current":"page",className:d("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}));Ud.displayName="BreadcrumbPage";var $d=({children:e,className:t,...o})=>{let a=y__namespace.useContext(Vd);return y__namespace.createElement("li",{role:"presentation","aria-hidden":"true",className:d("[&_svg]:size-3 [&_svg]:shrink-0 text-muted-foreground/60",t),...o},e??a)};$d.displayName="BreadcrumbSeparator";var jd=({className:e,...t})=>y__namespace.createElement("span",{role:"presentation","aria-hidden":"true",className:d("flex h-5 w-5 items-center justify-center",e),...t},y__namespace.createElement(lucideReact.MoreHorizontal,{className:"h-3.5 w-3.5"}),y__namespace.createElement("span",{className:"sr-only"},"More"));jd.displayName="BreadcrumbEllipsis";var Kd=y__namespace.forwardRef(({label:e,items:t,onSelect:o,onSelectLabel:a,current:n,className:r},i)=>{let[l,s]=y__namespace.useState(false);return y__namespace.createElement(zt,{open:l,onOpenChange:s},y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement("button",{ref:i,type:"button",className:d(yn,n&&"font-medium text-foreground",r),onClick:()=>{a?a():s(c=>!c);}},y__namespace.createElement("span",null,e),y__namespace.createElement(lucideReact.ChevronDown,{className:d("h-3 w-3 text-muted-foreground transition-transform",l&&"rotate-180"),onClick:c=>{c.stopPropagation(),s(p=>!p);},role:"button","aria-label":`Show ${e} children`}))),y__namespace.createElement(Ct,{align:"start",className:"w-64 p-1 max-h-80 overflow-y-auto"},t.length===0?y__namespace.createElement("p",{className:"px-2 py-1.5 text-xs text-muted-foreground"},"No items here yet."):y__namespace.createElement("ul",{className:"flex flex-col gap-0.5"},t.map(c=>y__namespace.createElement("li",{key:c.id},y__namespace.createElement("button",{type:"button",onClick:()=>{o(c.id),s(false);},className:d("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")},y__namespace.createElement("span",{className:"flex-1 min-w-0"},y__namespace.createElement("span",{className:"flex items-center gap-1.5"},y__namespace.createElement("span",{className:"text-xs font-medium text-foreground truncate"},c.label),c.active&&y__namespace.createElement(lucideReact.Check,{className:"h-3 w-3 text-primary shrink-0"})),c.summary&&y__namespace.createElement("span",{className:"block text-[10px] text-muted-foreground leading-snug truncate"},c.summary)),c.hasChildren&&y__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 text-muted-foreground/70 shrink-0 mt-0.5"})))))))});Kd.displayName="BreadcrumbMenuTrigger";var Yd=y__namespace.createContext({size:"md",variant:"pill"}),db=Xt__namespace.Root,pb=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"}}),ub=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-2xs 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"}}),Zd=y__namespace.forwardRef(({className:e,size:t="md",variant:o="pill",children:a,...n},r)=>y__namespace.createElement(Yd.Provider,{value:{size:t??"md",variant:o??"pill"}},y__namespace.createElement(Xt__namespace.List,{ref:r,className:d(pb({size:t,variant:o}),e),...n},a)));Zd.displayName=Xt__namespace.List.displayName;var Xd=y__namespace.forwardRef(({className:e,size:t,variant:o,tooltip:a,...n},r)=>{let i=y__namespace.useContext(Yd),l=t??i.size,s=o??i.variant,c=n["aria-label"]??(typeof a=="string"?a:void 0),p=y__namespace.createElement(Xt__namespace.Trigger,{ref:r,className:d(ub({size:l,variant:s}),e),"aria-label":c,...n});return a?y__namespace.createElement(ra,null,y__namespace.createElement(na,{asChild:true},p),y__namespace.createElement(Bo,null,a)):p});Xd.displayName=Xt__namespace.Trigger.displayName;var Jd=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement(Xt__namespace.Content,{ref:o,className:d("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Jd.displayName=Xt__namespace.Content.displayName;var mb={light:"",dark:".dark"},Qd=y__namespace.createContext(null);function ep(){let e=y__namespace.useContext(Qd);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}var tp=y__namespace.forwardRef(({id:e,className:t,children:o,config:a,...n},r)=>{let i=y__namespace.useId(),l=`chart-${e||i.replace(/:/g,"")}`;return y__namespace.createElement(Qd.Provider,{value:{config:a}},y__namespace.createElement("div",{"data-chart":l,ref:r,className:d("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...n},y__namespace.createElement(op,{id:l,config:a}),y__namespace.createElement(Na__namespace.ResponsiveContainer,null,o)))});tp.displayName="Chart";var op=({id:e,config:t})=>{let o=Object.entries(t).filter(([,a])=>a.theme||a.color);return o.length?y__namespace.createElement("style",{dangerouslySetInnerHTML:{__html:Object.entries(mb).map(([a,n])=>`
117
117
  ${n} [data-chart=${e}] {
118
- ${o.map(([a,i])=>{let p=i.theme?.[r]||i.color;return p?` --color-${a}: ${p};`:null}).join(`
118
+ ${o.map(([r,i])=>{let l=i.theme?.[a]||i.color;return l?` --color-${r}: ${l};`:null}).join(`
119
119
  `)}
120
120
  }
121
121
  `).join(`
122
- `)}}):null},Hf=ar__namespace.Tooltip,pc=v__namespace.forwardRef(({active:e,payload:t,className:o,indicator:r="dot",hideLabel:n=false,hideIndicator:a=false,label:i,labelFormatter:p,labelClassName:s,formatter:c,color:l,nameKey:g,labelKey:u},m)=>{let{config:h}=lc(),f=v__namespace.useMemo(()=>{if(n||!t?.length)return null;let[y]=t,R=`${u||y?.dataKey||y?.name||"value"}`,w=_n(h,y,R),x=!u&&typeof i=="string"?h[i]?.label||i:w?.label;return p?v__namespace.createElement("div",{className:d("font-medium",s)},p(x,t)):x?v__namespace.createElement("div",{className:d("font-medium",s)},x):null},[i,p,t,n,s,h,u]);if(!e||!t?.length)return null;let b=t.length===1&&r!=="dot";return v__namespace.createElement("div",{ref:m,className:d("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",o)},b?null:f,v__namespace.createElement("div",{className:"grid gap-1.5"},t.filter(y=>y.type!=="none").map((y,R)=>{let w=`${g||y.name||y.dataKey||"value"}`,x=_n(h,y,w),S=l||y.payload.fill||y.color;return v__namespace.createElement("div",{key:y.dataKey,className:d("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center")},c&&y?.value!==void 0&&y.name?c(y.value,y.name,y,R,y.payload):v__namespace.createElement(v__namespace.Fragment,null,x?.icon?v__namespace.createElement(x.icon,null):!a&&v__namespace.createElement("div",{className:d("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":b&&r==="dashed"}),style:{"--color-bg":S,"--color-border":S}}),v__namespace.createElement("div",{className:d("flex flex-1 justify-between leading-none",b?"items-end":"items-center")},v__namespace.createElement("div",{className:"grid gap-1.5"},b?f:null,v__namespace.createElement("span",{className:"text-muted-foreground"},x?.label||y.name)),y.value&&v__namespace.createElement("span",{className:"font-mono font-medium tabular-nums text-foreground"},y.value.toLocaleString()))))})))});pc.displayName="ChartTooltip";var Ff=ar__namespace.Legend,uc=v__namespace.forwardRef(({className:e,hideIcon:t=false,payload:o,verticalAlign:r="bottom",nameKey:n},a)=>{let{config:i}=lc();return o?.length?v__namespace.createElement("div",{ref:a,className:d("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e)},o.filter(p=>p.type!=="none").map(p=>{let s=`${n||p.dataKey||"value"}`,c=_n(i,p,s);return v__namespace.createElement("div",{key:p.value,className:d("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground")},c?.icon&&!t?v__namespace.createElement(c.icon,null):v__namespace.createElement("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:p.color}}),c?.label)})):null});uc.displayName="ChartLegend";function _n(e,t,o){if(typeof t!="object"||t===null)return;let r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0,n=o;return o in t&&typeof t[o]=="string"?n=t[o]:r&&o in r&&typeof r[o]=="string"&&(n=r[o]),n in e?e[n]:e[o]}var _f=classVarianceAuthority.cva("flex w-full rounded-md border border-input bg-background 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",{variants:{size:{default:"min-h-[80px] px-3 py-2 text-sm",sm:"min-h-[64px] px-2 py-1.5 text-sm",xs:"min-h-[52px] px-2 py-1 text-xs","2xs":"min-h-[44px] px-2 py-1 text-2xs"}},defaultVariants:{size:"default"}}),mc=v__namespace.forwardRef(({className:e,size:t="default",...o},r)=>v__namespace.createElement("textarea",{className:d(_f({size:t}),e),ref:r,...o}));mc.displayName="Textarea";var gc=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",xs:"h-7 px-1 min-w-7","2xs":"h-6 px-1 min-w-6",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),fc=v__namespace.forwardRef(({className:e,variant:t,size:o,...r},n)=>v__namespace.createElement(Bn__namespace.Root,{ref:n,className:d(gc({variant:t,size:o,className:e})),...r}));fc.displayName=Bn__namespace.Root.displayName;var bc=v__namespace.createContext("md"),Of=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"}}),Vf=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-2xs 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"}}),Bo=v__namespace.forwardRef(({className:e,size:t="md",children:o,...r},n)=>v__namespace.createElement(bc.Provider,{value:t??"md"},v__namespace.createElement(nr__namespace.Root,{ref:n,className:d(Of({size:t}),e),...r},o)));Bo.displayName=nr__namespace.Root.displayName;var Oo=v__namespace.forwardRef(({className:e,size:t,tooltip:o,tooltipSide:r="top",tooltipDelay:n,"aria-label":a,...i},p)=>{let s=v__namespace.useContext(bc),c=t??s,l=a??(typeof o=="string"?o:void 0),g=v__namespace.createElement(nr__namespace.Item,{ref:p,className:d(Vf({size:c}),e),"aria-label":l,...i});return o==null?g:v__namespace.createElement(zo,{delayDuration:n},v__namespace.createElement(_o,{asChild:true},v__namespace.createElement("span",{className:"inline-flex"},g)),v__namespace.createElement(yo,{side:r},o))});Oo.displayName=nr__namespace.Item.displayName;var Wf=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}}),vc=v__namespace.forwardRef(({className:e,position:t,variant:o,size:r,sticky:n,leading:a,center:i,trailing:p,children:s,"aria-label":c,...l},g)=>{let u=s==null;return v__namespace.createElement("div",{ref:g,role:"toolbar","aria-label":c??"Toolbar","data-gds-part":"toolbar","data-position":t??"top",className:d(Wf({position:t,variant:o,size:r,sticky:n}),e),...l},u?v__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement("div",{"data-gds-part":"toolbar-leading",className:"flex items-center min-w-0"},a),v__namespace.createElement("div",{"data-gds-part":"toolbar-center",className:"flex items-center min-w-0 justify-center"},i),v__namespace.createElement("div",{"data-gds-part":"toolbar-trailing",className:"flex items-center min-w-0 justify-end"},p)):s)});vc.displayName="Toolbar";var yc=v__namespace.forwardRef(({className:e,align:t="leading",...o},r)=>v__namespace.createElement("div",{ref:r,"data-gds-part":`toolbar-${t}`,className:d("flex items-center min-w-0",t==="center"&&"justify-center",t==="trailing"&&"justify-end",e),...o}));yc.displayName="ToolbarSlot";var wc=v__namespace.createContext(null),On=v__namespace.createContext(0);function Rc(){return v__namespace.useContext(On)}function Gr(e){let t=v__namespace.useContext(wc);if(!t)throw new Error(`<${e}> must be rendered inside a <Sidebar> root.`);return t}var xo=v__namespace.forwardRef(({collapsed:e,defaultCollapsed:t=false,onCollapsedChange:o,collapsible:r=true,variant:n="rail",className:a,style:i,children:p,...s},c)=>{let l=e!==void 0,[g,u]=v__namespace.useState(t),m=l?e:g,h=n==="panel",f=()=>{let b=!m;l||u(b),o?.(b);};return v__namespace.createElement(zn,{delayDuration:0},v__namespace.createElement(wc.Provider,{value:{collapsed:m}},v__namespace.createElement("aside",{ref:c,"data-gds-part":"sidebar","data-collapsed":m||void 0,"data-variant":n,className:d("relative flex h-full flex-col bg-card text-card-foreground",h?"w-full border border-border rounded-lg overflow-hidden":"border-r border-border transition-[width] duration-200 ease-out",a),style:h?i:{width:m?"var(--gds-sidebar-collapsed-width, 4rem)":"var(--gds-sidebar-width, 16rem)",...i},...s},p,r&&!h&&v__namespace.createElement("button",{type:"button",onClick:f,"aria-label":m?"Expand sidebar":"Collapse sidebar","data-gds-part":"sidebar-collapse-toggle",className:d("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")},m?v__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"}):v__namespace.createElement(lucideReact.ChevronLeft,{className:"h-3 w-3"})))))});xo.displayName="Sidebar";var Gn=v__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:r}=Gr("SidebarHeader");return v__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-header","data-collapsed":r||void 0,className:d("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})});Gn.displayName="SidebarHeader";var Wn=v__namespace.forwardRef(({className:e,...t},o)=>v__namespace.createElement("nav",{ref:o,"data-gds-part":"sidebar-content",className:d("flex-1 overflow-y-auto overflow-x-hidden","py-[var(--gds-sidebar-content-py,0.5rem)]",e),...t}));Wn.displayName="SidebarContent";var jn=v__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:r}=Gr("SidebarFooter");return v__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-footer","data-collapsed":r||void 0,className:d("shrink-0 border-t border-border",r?"px-2 py-2":"px-3 py-2",e),...t})});jn.displayName="SidebarFooter";var $n=v__namespace.forwardRef(({title:e,icon:t,trailing:o,collapsible:r=true,defaultExpanded:n=true,className:a,children:i,...p},s)=>{let{collapsed:c}=Gr("SidebarSection"),[l,g]=v__namespace.useState(n),u=!!e&&r;return c?v__namespace.createElement("div",{ref:s,"data-gds-part":"sidebar-section",className:d("px-[var(--gds-sidebar-section-px,0.5rem)] space-y-[var(--gds-sidebar-section-gap,0.125rem)]",a),...p},i):v__namespace.createElement("div",{ref:s,"data-gds-part":"sidebar-section",className:d("px-[var(--gds-sidebar-section-px,0.5rem)] pb-1",a),...p},e&&(u?v__namespace.createElement("div",{className:d("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")},v__namespace.createElement("button",{type:"button",onClick:()=>g(m=>!m),"aria-expanded":l,className:"flex flex-1 items-center gap-2 text-left min-w-0"},t,v__namespace.createElement("span",{className:"flex-1 text-left normal-case truncate"},e),l?v__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3 shrink-0",strokeWidth:1.5}):v__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 shrink-0",strokeWidth:1.5})),o&&v__namespace.createElement("span",{className:"flex items-center shrink-0",onClick:m=>m.stopPropagation(),onKeyDown:m=>m.stopPropagation()},o)):v__namespace.createElement("div",{className:d("flex items-center gap-2 px-2 py-1.5 text-xs font-medium uppercase tracking-wide","text-muted-foreground")},t,v__namespace.createElement("span",{className:"flex-1 truncate"},e),o&&v__namespace.createElement("span",{className:"shrink-0"},o))),l&&v__namespace.createElement("div",{className:d("mt-[var(--gds-sidebar-section-gap,0.125rem)]","space-y-[var(--gds-sidebar-section-gap,0.125rem)]")},i))});$n.displayName="SidebarSection";var Un=v__namespace.forwardRef(({icon:e,badge:t,active:o=false,asButton:r=false,asChild:n=false,disabled:a=false,collapsedLabel:i,size:p="md",description:s,className:c,children:l,...g},u)=>{let{collapsed:m}=Gr("SidebarItem"),h=Rc(),f=!m&&h>0?{paddingLeft:`calc(0.5rem + ${h} * var(--gds-sidebar-tree-indent, 1.5rem))`}:void 0,b=p==="sm",y=b?"text-xs px-2 py-1":"text-sm px-2 py-1.5",R=b&&!o?"font-normal":"font-medium",w=o?"bg-primary/10 text-primary":b?"text-muted-foreground hover:bg-muted hover:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground",x=!m&&s!=null,S=d("group flex items-center gap-2.5 rounded-md transition-colors",y,R,x&&(b?"py-1.5":"py-2"),m?"justify-center px-2 py-2":null,w,a&&"opacity-50 pointer-events-none",c),M=x?v__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},v__namespace.createElement("span",{className:"truncate"},l),v__namespace.createElement("span",{className:d("truncate font-normal text-muted-foreground",b?"text-[10px]":"text-[11px]")},s)):v__namespace.createElement("span",{className:"flex-1 truncate text-left"},l),A=v__namespace.createElement(v__namespace.Fragment,null,e&&v__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},e),!m&&M,!m&&t!==void 0&&t!==null&&v__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)),H;if(n)H=v__namespace.createElement(reactSlot.Slot,{"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,className:S,style:f},l);else if(r){let{href:z,target:F,rel:B,download:q,hrefLang:ie,ping:N,referrerPolicy:ue,type:k,...G}=g;H=v__namespace.createElement("button",{type:"button","data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,disabled:a,className:d(S,"w-full text-left"),style:f,...G},A);}else H=v__namespace.createElement("a",{ref:u,"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,"aria-disabled":a||void 0,className:S,style:f,...g},A);if(!m)return H;let W=i??(typeof l=="string"?l:null);return W?v__namespace.createElement(zo,null,v__namespace.createElement(_o,{asChild:true},H),v__namespace.createElement(yo,{side:"right",sideOffset:8},W,t!=null&&v__namespace.createElement("span",{className:"ml-2 inline-flex items-center justify-center rounded bg-foreground/10 px-1.5 py-0 text-[10px]"},t))):H});Un.displayName="SidebarItem";var Kn=v__namespace.forwardRef(function({label:t,icon:o,badge:r,active:n=false,defaultExpanded:a=true,expanded:i,onExpandedChange:p,disabled:s,description:c,trailing:l,className:g,style:u,children:m,...h},f){let{collapsed:b}=Gr("SidebarTreeItem"),y=Rc(),R=i!==void 0,[w,x]=v__namespace.useState(a),S=R?i:w,M=()=>{let H=!S;R||x(H),p?.(H);};if(b)return v__namespace.createElement(On.Provider,{value:y},m);let A=y*1.5;return v__namespace.createElement("div",{"data-gds-part":"sidebar-tree-item"},v__namespace.createElement("div",{className:"group/row relative"},v__namespace.createElement("button",{ref:f,type:"button",onClick:M,"aria-expanded":S,"aria-current":n?"page":void 0,"data-active":n||void 0,disabled:s,className:d("group flex w-full items-center gap-1.5 rounded-md py-1 text-sm font-medium transition-colors",n?"bg-primary/10 text-primary":"text-foreground/80 hover:bg-muted hover:text-foreground",s&&"opacity-50 pointer-events-none",l!=null&&"pr-12",g),style:{paddingLeft:`calc(0.25rem + ${A}rem)`,paddingRight:l!=null?"3rem":"0.5rem",...u},...h},v__namespace.createElement("span",{className:"inline-flex h-4 w-4 items-center justify-center text-muted-foreground shrink-0","aria-hidden":true},S?v__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3"}):v__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"})),o&&v__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},o),c!=null?v__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},v__namespace.createElement("span",{className:"truncate"},t),v__namespace.createElement("span",{className:"truncate text-[11px] font-normal text-muted-foreground"},c)):v__namespace.createElement("span",{className:"flex-1 truncate text-left"},t),r!=null&&v__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&&v__namespace.createElement("div",{onClick:H=>H.stopPropagation(),className:"pointer-events-auto absolute inset-y-0 right-1.5 flex items-center gap-0.5"},l)),S&&m&&v__namespace.createElement(On.Provider,{value:y+1},v__namespace.createElement("div",{className:"space-y-[var(--gds-sidebar-section-gap,0.125rem)]"},m)))});Kn.displayName="SidebarTreeItem";xo.Header=Gn;xo.Content=Wn;xo.Footer=jn;xo.Section=$n;xo.Item=Un;xo.TreeItem=Kn;var ao=[50,100,200,300,400,500,600,700,800,900,950],Sc=[.985,.955,.895,.82,.72,.61,.51,.415,.325,.245,.17],Uf=[.015,.04,.075,.11,.14,.17,.17,.15,.12,.08,.04];function no({hue:e,chromaScale:t=1}){let o=(e%360+360)%360,r={};for(let n=0;n<ao.length;n++){let a=Sc[n],i=Uf[n]*t;r[ao[n]]=`${a.toFixed(4)} ${i.toFixed(4)} ${o.toFixed(2)}`;}return r}function kc(){let e={};for(let t=0;t<ao.length;t++){let o=Sc[t];e[ao[t]]=`${o.toFixed(4)} 0 0`;}return e}var Ba={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"}},Wr="1 0 0",Cc="0 0 0";function ir(e,t){let[,o,r]=e.split(/\s+/).map(l=>l.trim()),n=Number(o),a=r;if(t==="light"){let g=Math.min(n*.22,.045),u=.38,m=n;return {soft:`${.965.toFixed(3)} ${g.toFixed(3)} ${a}`,deep:`${u.toFixed(3)} ${m.toFixed(3)} ${a}`}}let i=.22,p=Math.min(n*.45,.075),s=.82,c=n*.9;return {soft:`${i.toFixed(3)} ${p.toFixed(3)} ${a}`,deep:`${s.toFixed(3)} ${c.toFixed(3)} ${a}`}}var Oa={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",poppins:"var(--font-poppins), 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 Zf=["superLight","light","dark","superDark"],Xf={muted:.6,default:1,vibrant:1.3};function Jf(e,t,o){let r=t.primary*o,n=t.accent*o,a=(r+n)/2*.8,i=p=>(p%360+360)%360;return {1:`0.600 ${(.17*r).toFixed(4)} ${e.primary.toFixed(2)}`,2:`0.640 ${(.17*a).toFixed(4)} ${i(e.primary+140).toFixed(2)}`,3:`0.580 ${(.17*a).toFixed(4)} ${i(e.primary+220).toFixed(2)}`,4:`0.510 0.0250 ${e.neutral.toFixed(2)}`,5:`0.620 ${(.17*n).toFixed(4)} ${e.accent.toFixed(2)}`}}var oe=e=>({source:"neutral",step:e}),Pt=e=>({source:"primary",step:e}),wo=e=>({source:"accent",step:e}),jr=e=>({source:"pure",value:e}),Qf={superLight:{background:oe(50),foreground:oe(800),card:jr(Wr),cardForeground:oe(800),popover:jr(Wr),popoverForeground:oe(800),primary:Pt(600),primaryForeground:Pt(50),secondary:oe(100),secondaryForeground:oe(700),muted:oe(100),mutedForeground:oe(500),accent:wo(600),accentForeground:wo(50),border:oe(200),input:oe(200),ring:Pt(500)},light:{background:oe(50),foreground:oe(950),card:jr(Wr),cardForeground:oe(950),popover:jr(Wr),popoverForeground:oe(950),primary:Pt(500),primaryForeground:Pt(50),secondary:oe(100),secondaryForeground:oe(700),muted:oe(100),mutedForeground:oe(500),accent:wo(500),accentForeground:wo(50),border:oe(200),input:oe(200),ring:Pt(500)},dark:{background:oe(950),foreground:oe(50),card:oe(900),cardForeground:oe(50),popover:oe(900),popoverForeground:oe(50),primary:Pt(400),primaryForeground:Pt(950),secondary:oe(800),secondaryForeground:oe(200),muted:oe(800),mutedForeground:oe(400),accent:wo(400),accentForeground:wo(950),border:oe(800),input:oe(800),ring:Pt(400)},superDark:{background:jr(Cc),foreground:oe(100),card:oe(950),cardForeground:oe(100),popover:oe(950),popoverForeground:oe(100),primary:Pt(300),primaryForeground:Pt(950),secondary:oe(900),secondaryForeground:oe(300),muted:oe(900),mutedForeground:oe(500),accent:wo(300),accentForeground:wo(950),border:oe(900),input:oe(900),ring:Pt(300)}};function Xe(e,t){return e.source==="pure"?e.value:t[e.source][e.step]}function eh(e,t){let o=Qf[t],r=t==="superLight"||t==="light",n=r?Ba.light:Ba.dark;return {background:Xe(o.background,e),foreground:Xe(o.foreground,e),card:Xe(o.card,e),cardForeground:Xe(o.cardForeground,e),popover:Xe(o.popover,e),popoverForeground:Xe(o.popoverForeground,e),primary:Xe(o.primary,e),primaryForeground:Xe(o.primaryForeground,e),secondary:Xe(o.secondary,e),secondaryForeground:Xe(o.secondaryForeground,e),muted:Xe(o.muted,e),mutedForeground:Xe(o.mutedForeground,e),accent:Xe(o.accent,e),accentForeground:Xe(o.accentForeground,e),border:Xe(o.border,e),input:Xe(o.input,e),ring:Xe(o.ring,e),destructive:n.destructive,destructiveForeground:n.destructiveFg,success:n.success,warning:n.warning,info:n.info,highlight:n.highlight,...(()=>{let a=r?"light":"dark",i=ir(n.destructive,a),p=ir(n.success,a),s=ir(n.warning,a),c=ir(n.info,a),l=ir(n.highlight,a);return {destructiveSoft:i.soft,destructiveDeep:i.deep,successSoft:p.soft,successDeep:p.deep,warningSoft:s.soft,warningDeep:s.deep,infoSoft:c.soft,infoDeep:c.deep,highlightSoft:l.soft,highlightDeep:l.deep}})()}}var th={display:3.75,h1:2.5,h2:2,h3:1.5,h4:1.25,h5:1.125,h6:1,body:1,bodySm:.875},qn={compact:.85,default:1,spacious:1.18},oh=Object.fromEntries(core$1.GDS_MODULAR_SCALES.map(e=>[e.id,e.ratio])),rh=.625,ah=1.02,nh=1.8,Pc=(e,t,o)=>Math.min(o,Math.max(t,e)),ih={"2xs":1.455,xs:1.333,sm:1.429,base:1.5,lg:1.556,xl:1.4,"2xl":1.333,"3xl":1.2,"4xl":1.111,"5xl":1,"6xl":1,"7xl":1};function sh(e){if(e in qn){let o=qn[e];return Object.fromEntries(Object.entries(th).map(([r,n])=>[r,n*o]))}let t=Mc(e);return {display:t["6xl"],h1:t["4xl"],h2:t["3xl"],h3:t["2xl"],h4:t.xl,h5:t.lg,h6:t.base,body:t.base,bodySm:t.sm}}function Mc(e){let t=Pc(oh[e],ah,nh);return core$1.modularTypeSizes(1,t,rh)}function lh(e){let t=sh(e.scale),o=n=>`${n.toFixed(3)}rem`,r;if(!(e.scale in qn)){let n=Mc(e.scale);r=Object.fromEntries(core$1.GDS_TYPE_SIZE_NAMES.map(a=>[a,{size:o(n[a]),lineHeight:String(ih[a])}]));}return {fontSans:Oa[e.body],fontMono:Oa[e.mono],fontDisplay:Oa[e.display],headingWeight:e.headingWeight??600,bodyWeight:e.bodyWeight??400,headingTracking:e.headingTracking??"-0.01em",scale:{display:o(t.display),h1:o(t.h1),h2:o(t.h2),h3:o(t.h3),h4:o(t.h4),h5:o(t.h5),h6:o(t.h6),body:o(t.body),bodySm:o(t.bodySm)},namedScale:r}}var dh={sharp:0,subtle:.25,soft:.5,round:.875,pill:1.25};function ch(e){let t=dh[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 Tc={tight:.85,default:1,roomy:1.2},ph=.25,uh=.125;function mh(e){let t=Pc(Tc[e.density],.6,1.6),o=Math.max(uh,Math.round(ph*t*1e4)/1e4);return {baseUnit:"1rem",densityFactor:Tc[e.density],unit:`${o}rem`}}var gh={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 fh(e){let t=e?.shadows??"default",o=e?.motionIntensity??1,r=n=>`${Math.round(n*o)}ms`;return {shadows:gh[t],motion:{fast:r(150),base:r(200),slow:r(300),slower:r(500)},borderWidth:e?.borderWidth??"1px"}}function Vo(e){let t=Xf[e.intensity??"default"],o=e.neutralPureGray??false,r=(e.chroma?.neutral??.08)*t,n=(e.chroma?.primary??1)*t,a=(e.chroma?.accent??1)*t,i=o?kc():no({hue:e.hues.neutral,chromaScale:r}),p=no({hue:e.hues.primary,chromaScale:n}),s=no({hue:e.hues.accent,chromaScale:a}),c={neutral:i,primary:p,accent:s},l=Jf(e.hues,{primary:n,accent:a},t),g=Object.fromEntries(Zf.map(x=>[x,eh(c,x)])),u=x=>parseFloat(x.trim().split(/\s+/)[2]??"0"),m=Ba.light,h={success:no({hue:u(m.success)}),warning:no({hue:u(m.warning)}),info:no({hue:u(m.info)}),highlight:no({hue:u(m.highlight)}),destructive:no({hue:u(m.destructive)})},f=lh(e.typography),b=ch(e.radius),y=mh(e.spacing),R=fh(e.effects),w={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,roleRamps:h,colors:g,chart:l,typography:f,radius:b,spacing:y,effects:R,components:w}}var $r={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"}},Yn={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"}},Va=[$r,Yn];function hh(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 Xn(e,t){let o=e.colors[t],r={...hh(o),...Zn("neutral",e.ramps.neutral),...Zn("primary",e.ramps.primary),...Zn("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],...bh(e),"--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),"--spacing":e.spacing.unit??"0.25rem","--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};if(e.typography.namedScale)for(let[a,i]of Object.entries(e.typography.namedScale))r[`--text-${a}`]=i.size,r[`--text-${a}--line-height`]=i.lineHeight;let n=[["primary",e.ramps.primary],["accent",e.ramps.accent],["neutral",e.ramps.neutral],["success",e.roleRamps?.success],["warning",e.roleRamps?.warning],["info",e.roleRamps?.info],["highlight",e.roleRamps?.highlight],["destructive",e.roleRamps?.destructive]];for(let[a,i]of n)if(i)for(let p of ao)r[`--gds-${a}-${p}`]=i[p];return r}function bh(e){let t=e.chart,o=e.ramps.primary,r=e.ramps.accent,n=[t[1],t[2],t[3],t[4],t[5],o[400]??o[500],r[400]??r[500],o[600]??o[500]],a={};return n.forEach((i,p)=>{a[`--brand-${p+1}`]=i;}),a}function Zn(e,t){let o={};for(let r of ao)o[`--ramp-${e}-${r}`]=t[r];return o}function Ga(e,t){if(typeof document>"u")return;let o=document.documentElement,r=Xn(e,t);for(let[n,a]of Object.entries(r))o.style.setProperty(n,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 Ur(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[n,a,i]=r.slice(0,3).map(Number);return "#"+[n,a,i].map(p=>Math.max(0,Math.min(255,p)).toString(16).padStart(2,"0")).join("").toUpperCase()}function vh(e){let t=e.trim().split(/\s+/);if(t.length<3)return {oklch:e,hex:""};let[o,r,n]=t.map(Number),a=`${o.toFixed(3)} ${r.toFixed(3)} ${Math.round(n)}`,i=Ur(e);return {oklch:a,hex:i}}function Jn(e,t,o){let r=[`### ${e} ramp (hue ${Math.round(o)}\xB0)`,"","| Step | OKLCH | Hex |","|------|-------|-----|"];for(let n of ao){let{oklch:a,hex:i}=vh(t[n]);r.push(`| ${n} | \`${a}\` | \`${i||"\u2014"}\` |`);}return r.join(`
123
- `)}function Nc(e,t){let o=[`### ${e}`,"","| Token | Usage | Light (hex) | Dark (hex) |","|-------|-------|-------------|------------|"];for(let r of t){let n=Ur(r.light)||"\u2014",a=Ur(r.dark)||"\u2014";o.push(`| \`--${r.token}\` | ${r.usage} | \`${n}\` (\`${r.light}\`) | \`${a}\` (\`${r.dark}\`) |`);}return o.join(`
124
- `)}function Ec(e){return !e||e.input==null?"{}":JSON.stringify(e.input,null,2)??"{}"}function Lc(e){let{input:t,ramps:o,colors:r,chart:n,typography:a,radius:i,spacing:p,effects:s,components:c}=e,l=t.intensity??"default",g=f=>({token:f,usage:yh[f]??"",light:r.light[f],dark:r.dark[f]}),u=["background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","border","input","ring"].map(g),m=["destructive","destructiveForeground","success","warning","info","highlight"].map(g),h=[1,2,3,4,5].map(f=>{let b=n[f];return {slot:f,triplet:b,hex:Ur(b)||"\u2014"}});return `# ${e.name} \u2014 Grade Design System Theme
122
+ `)}}):null},gb=Na__namespace.Tooltip,ap=y__namespace.forwardRef(({active:e,payload:t,className:o,indicator:a="dot",hideLabel:n=false,hideIndicator:r=false,label:i,labelFormatter:l,labelClassName:s,formatter:c,color:p,nameKey:m,labelKey:u},g)=>{let{config:h}=ep(),f=y__namespace.useMemo(()=>{if(n||!t?.length)return null;let[v]=t,S=`${u||v?.dataKey||v?.name||"value"}`,x=vi(h,v,S),w=!u&&typeof i=="string"?h[i]?.label||i:x?.label;return l?y__namespace.createElement("div",{className:d("font-medium",s)},l(w,t)):w?y__namespace.createElement("div",{className:d("font-medium",s)},w):null},[i,l,t,n,s,h,u]);if(!e||!t?.length)return null;let b=t.length===1&&a!=="dot";return y__namespace.createElement("div",{ref:g,className:d("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",o)},b?null:f,y__namespace.createElement("div",{className:"grid gap-1.5"},t.filter(v=>v.type!=="none").map((v,S)=>{let x=`${m||v.name||v.dataKey||"value"}`,w=vi(h,v,x),k=p||v.payload.fill||v.color;return y__namespace.createElement("div",{key:v.dataKey,className:d("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",a==="dot"&&"items-center")},c&&v?.value!==void 0&&v.name?c(v.value,v.name,v,S,v.payload):y__namespace.createElement(y__namespace.Fragment,null,w?.icon?y__namespace.createElement(w.icon,null):!r&&y__namespace.createElement("div",{className:d("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":a==="dot","w-1":a==="line","w-0 border-[1.5px] border-dashed bg-transparent":a==="dashed","my-0.5":b&&a==="dashed"}),style:{"--color-bg":k,"--color-border":k}}),y__namespace.createElement("div",{className:d("flex flex-1 justify-between leading-none",b?"items-end":"items-center")},y__namespace.createElement("div",{className:"grid gap-1.5"},b?f:null,y__namespace.createElement("span",{className:"text-muted-foreground"},w?.label||v.name)),v.value&&y__namespace.createElement("span",{className:"font-mono font-medium tabular-nums text-foreground"},v.value.toLocaleString()))))})))});ap.displayName="ChartTooltip";var fb=Na__namespace.Legend,rp=y__namespace.forwardRef(({className:e,hideIcon:t=false,payload:o,verticalAlign:a="bottom",nameKey:n},r)=>{let{config:i}=ep();return o?.length?y__namespace.createElement("div",{ref:r,className:d("flex items-center justify-center gap-4",a==="top"?"pb-3":"pt-3",e)},o.filter(l=>l.type!=="none").map(l=>{let s=`${n||l.dataKey||"value"}`,c=vi(i,l,s);return y__namespace.createElement("div",{key:l.value,className:d("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground")},c?.icon&&!t?y__namespace.createElement(c.icon,null):y__namespace.createElement("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:l.color}}),c?.label)})):null});rp.displayName="ChartLegend";function vi(e,t,o){if(typeof t!="object"||t===null)return;let a="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0,n=o;return o in t&&typeof t[o]=="string"?n=t[o]:a&&o in a&&typeof a[o]=="string"&&(n=a[o]),n in e?e[n]:e[o]}var bb=classVarianceAuthority.cva("flex w-full rounded-md border border-input bg-background 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",{variants:{size:{default:"min-h-[80px] px-3 py-2 text-sm",sm:"min-h-[64px] px-2 py-1.5 text-sm",xs:"min-h-[52px] px-2 py-1 text-xs","2xs":"min-h-[44px] px-2 py-1 text-2xs"}},defaultVariants:{size:"default"}}),np=y__namespace.forwardRef(({className:e,size:t="default",...o},a)=>y__namespace.createElement("textarea",{className:d(bb({size:t}),e),ref:a,...o}));np.displayName="Textarea";var yb=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}}),ip=y__namespace.forwardRef(({className:e,position:t,variant:o,size:a,sticky:n,leading:r,center:i,trailing:l,children:s,"aria-label":c,...p},m)=>{let u=s==null;return y__namespace.createElement("div",{ref:m,role:"toolbar","aria-label":c??"Toolbar","data-gds-part":"toolbar","data-position":t??"top",className:d(yb({position:t,variant:o,size:a,sticky:n}),e),...p},u?y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement("div",{"data-gds-part":"toolbar-leading",className:"flex items-center min-w-0"},r),y__namespace.createElement("div",{"data-gds-part":"toolbar-center",className:"flex items-center min-w-0 justify-center"},i),y__namespace.createElement("div",{"data-gds-part":"toolbar-trailing",className:"flex items-center min-w-0 justify-end"},l)):s)});ip.displayName="Toolbar";var sp=y__namespace.forwardRef(({className:e,align:t="leading",...o},a)=>y__namespace.createElement("div",{ref:a,"data-gds-part":`toolbar-${t}`,className:d("flex items-center min-w-0",t==="center"&&"justify-center",t==="trailing"&&"justify-end",e),...o}));sp.displayName="ToolbarSlot";var cp=y__namespace.createContext(null),yi=y__namespace.createContext(0);function dp(){return y__namespace.useContext(yi)}function fr(e){let t=y__namespace.useContext(cp);if(!t)throw new Error(`<${e}> must be rendered inside a <Sidebar> root.`);return t}var Oo=y__namespace.forwardRef(({collapsed:e,defaultCollapsed:t=false,onCollapsedChange:o,collapsible:a=true,variant:n="rail",className:r,style:i,children:l,...s},c)=>{let p=e!==void 0,[m,u]=y__namespace.useState(t),g=p?e:m,h=n==="panel",f=()=>{let b=!g;p||u(b),o?.(b);};return y__namespace.createElement(ai,{delayDuration:0},y__namespace.createElement(cp.Provider,{value:{collapsed:g}},y__namespace.createElement("aside",{ref:c,"data-gds-part":"sidebar","data-collapsed":g||void 0,"data-variant":n,className:d("relative flex h-full flex-col bg-card text-card-foreground",h?"w-full border border-border rounded-lg overflow-hidden":"border-r border-border transition-[width] duration-200 ease-out",r),style:h?i:{width:g?"var(--gds-sidebar-collapsed-width, 4rem)":"var(--gds-sidebar-width, 16rem)",...i},...s},l,a&&!h&&y__namespace.createElement("button",{type:"button",onClick:f,"aria-label":g?"Expand sidebar":"Collapse sidebar","data-gds-part":"sidebar-collapse-toggle",className:d("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")},g?y__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"}):y__namespace.createElement(lucideReact.ChevronLeft,{className:"h-3 w-3"})))))});Oo.displayName="Sidebar";var wi=y__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:a}=fr("SidebarHeader");return y__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-header","data-collapsed":a||void 0,className:d("flex shrink-0 items-center border-b border-border",a?"justify-center px-2":"px-3","h-[var(--gds-sidebar-header-height,3.25rem)]",e),...t})});wi.displayName="SidebarHeader";var ki=y__namespace.forwardRef(({className:e,...t},o)=>y__namespace.createElement("nav",{ref:o,"data-gds-part":"sidebar-content",className:d("flex-1 overflow-y-auto overflow-x-hidden","py-[var(--gds-sidebar-content-py,0.5rem)]",e),...t}));ki.displayName="SidebarContent";var Si=y__namespace.forwardRef(({className:e,...t},o)=>{let{collapsed:a}=fr("SidebarFooter");return y__namespace.createElement("div",{ref:o,"data-gds-part":"sidebar-footer","data-collapsed":a||void 0,className:d("shrink-0 border-t border-border",a?"px-2 py-2":"px-3 py-2",e),...t})});Si.displayName="SidebarFooter";var Ri=y__namespace.forwardRef(({title:e,icon:t,trailing:o,collapsible:a=true,defaultExpanded:n=true,titleTransform:r,className:i,children:l,...s},c)=>{let{collapsed:p}=fr("SidebarSection"),[m,u]=y__namespace.useState(n),g=!!e&&a;return p?y__namespace.createElement("div",{ref:c,"data-gds-part":"sidebar-section",className:d("px-[var(--gds-sidebar-section-px,0.5rem)] space-y-[var(--gds-sidebar-section-gap,0.125rem)]",i),...s},l):y__namespace.createElement("div",{ref:c,"data-gds-part":"sidebar-section",className:d("px-[var(--gds-sidebar-section-px,0.5rem)] pb-1",i),...s},e&&(g?y__namespace.createElement("div",{className:d("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")},y__namespace.createElement("button",{type:"button",onClick:()=>u(h=>!h),"aria-expanded":m,className:"flex flex-1 items-center gap-2 text-left min-w-0"},t,y__namespace.createElement("span",{className:d("flex-1 text-left truncate",r==="uppercase"?"uppercase":"normal-case")},e),m?y__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3 shrink-0",strokeWidth:1.5}):y__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3 shrink-0",strokeWidth:1.5})),o&&y__namespace.createElement("span",{className:"flex items-center shrink-0",onClick:h=>h.stopPropagation(),onKeyDown:h=>h.stopPropagation()},o)):y__namespace.createElement("div",{className:d("flex items-center gap-2 px-2 py-1.5 text-xs font-medium tracking-wide",r==="none"?"":"uppercase","text-muted-foreground")},t,y__namespace.createElement("span",{className:"flex-1 truncate"},e),o&&y__namespace.createElement("span",{className:"shrink-0"},o))),m&&y__namespace.createElement("div",{className:d("mt-[var(--gds-sidebar-section-gap,0.125rem)]","space-y-[var(--gds-sidebar-section-gap,0.125rem)]")},l))});Ri.displayName="SidebarSection";var Ci=y__namespace.forwardRef(({icon:e,badge:t,active:o=false,asButton:a=false,asChild:n=false,disabled:r=false,collapsedLabel:i,size:l="md",description:s,className:c,children:p,...m},u)=>{let{collapsed:g}=fr("SidebarItem"),h=dp(),f=!g&&h>0?{paddingLeft:`calc(0.5rem + ${h} * var(--gds-sidebar-tree-indent, 1.5rem))`}:void 0,b=l==="sm",v=b?"text-xs px-2 py-1":"text-sm px-2 py-1.5",S=b&&!o?"font-normal":"font-medium",x=o?"bg-primary/10 text-primary":b?"text-muted-foreground hover:bg-muted hover:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground",w=!g&&s!=null,k=d("group flex items-center gap-2.5 rounded-md transition-colors",v,S,w&&(b?"py-1.5":"py-2"),g?"justify-center px-2 py-2":null,x,r&&"opacity-50 pointer-events-none",c),C=w?y__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},y__namespace.createElement("span",{className:"truncate"},p),y__namespace.createElement("span",{className:d("truncate font-normal text-muted-foreground",b?"text-[10px]":"text-[11px]")},s)):y__namespace.createElement("span",{className:"flex-1 truncate text-left"},p),E=y__namespace.createElement(y__namespace.Fragment,null,e&&y__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},e),!g&&C,!g&&t!==void 0&&t!==null&&y__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)),F;if(n)F=y__namespace.createElement(reactSlot.Slot,{"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,className:k,style:f},p);else if(a){let{href:M,target:N,rel:H,download:Y,hrefLang:se,ping:D,referrerPolicy:V,type:R,..._}=m;F=y__namespace.createElement("button",{type:"button","data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,disabled:r,className:d(k,"w-full text-left"),style:f,..._},E);}else F=y__namespace.createElement("a",{ref:u,"data-gds-part":"sidebar-item","data-active":o||void 0,"aria-current":o?"page":void 0,"aria-disabled":r||void 0,className:k,style:f,...m},E);if(!g)return F;let O=i??(typeof p=="string"?p:null);return O?y__namespace.createElement(ra,null,y__namespace.createElement(na,{asChild:true},F),y__namespace.createElement(Bo,{side:"right",sideOffset:8},O,t!=null&&y__namespace.createElement("span",{className:"ml-2 inline-flex items-center justify-center rounded bg-foreground/10 px-1.5 py-0 text-[10px]"},t))):F});Ci.displayName="SidebarItem";var Ti=y__namespace.forwardRef(function({label:t,icon:o,badge:a,active:n=false,defaultExpanded:r=true,expanded:i,onExpandedChange:l,disabled:s,description:c,trailing:p,className:m,style:u,children:g,...h},f){let{collapsed:b}=fr("SidebarTreeItem"),v=dp(),S=i!==void 0,[x,w]=y__namespace.useState(r),k=S?i:x,C=()=>{let F=!k;S||w(F),l?.(F);};if(b)return y__namespace.createElement(yi.Provider,{value:v},g);let E=v*1.5;return y__namespace.createElement("div",{"data-gds-part":"sidebar-tree-item"},y__namespace.createElement("div",{className:"group/row relative"},y__namespace.createElement("button",{ref:f,type:"button",onClick:C,"aria-expanded":k,"aria-current":n?"page":void 0,"data-active":n||void 0,disabled:s,className:d("group flex w-full items-center gap-1.5 rounded-md py-1 text-sm font-medium transition-colors",n?"bg-primary/10 text-primary":"text-foreground/80 hover:bg-muted hover:text-foreground",s&&"opacity-50 pointer-events-none",p!=null&&"pr-12",m),style:{paddingLeft:`calc(0.25rem + ${E}rem)`,paddingRight:p!=null?"3rem":"0.5rem",...u},...h},y__namespace.createElement("span",{className:"inline-flex h-4 w-4 items-center justify-center text-muted-foreground shrink-0","aria-hidden":true},k?y__namespace.createElement(lucideReact.ChevronDown,{className:"h-3 w-3"}):y__namespace.createElement(lucideReact.ChevronRight,{className:"h-3 w-3"})),o&&y__namespace.createElement("span",{className:"shrink-0 [&>svg]:h-4 [&>svg]:w-4","aria-hidden":true},o),c!=null?y__namespace.createElement("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5 text-left leading-tight"},y__namespace.createElement("span",{className:"truncate"},t),y__namespace.createElement("span",{className:"truncate text-[11px] font-normal text-muted-foreground"},c)):y__namespace.createElement("span",{className:"flex-1 truncate text-left"},t),a!=null&&y__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"},a)),p!=null&&y__namespace.createElement("div",{onClick:F=>F.stopPropagation(),className:"pointer-events-auto absolute inset-y-0 right-1.5 flex items-center gap-0.5"},p)),k&&g&&y__namespace.createElement(yi.Provider,{value:v+1},y__namespace.createElement("div",{className:"space-y-[var(--gds-sidebar-section-gap,0.125rem)]"},g)))});Ti.displayName="SidebarTreeItem";Oo.Header=wi;Oo.Content=ki;Oo.Footer=Si;Oo.Section=Ri;Oo.Item=Ci;Oo.TreeItem=Ti;var Mo=[50,100,200,300,400,500,600,700,800,900,950],pp=[.985,.955,.895,.82,.72,.61,.51,.415,.325,.245,.17],kb=[.015,.04,.075,.11,.14,.17,.17,.15,.12,.08,.04];function no({hue:e,chromaScale:t=1}){let o=(e%360+360)%360,a={};for(let n=0;n<Mo.length;n++){let r=pp[n],i=kb[n]*t;a[Mo[n]]=`${r.toFixed(4)} ${i.toFixed(4)} ${o.toFixed(2)}`;}return a}function up(){let e={};for(let t=0;t<Mo.length;t++){let o=pp[t];e[Mo[t]]=`${o.toFixed(4)} 0 0`;}return e}var wn={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"}},hr="1 0 0",mp="0 0 0";function Ea(e,t){let[,o,a]=e.split(/\s+/).map(p=>p.trim()),n=Number(o),r=a;if(t==="light"){let m=Math.min(n*.22,.045),u=.38,g=n;return {soft:`${.965.toFixed(3)} ${m.toFixed(3)} ${r}`,deep:`${u.toFixed(3)} ${g.toFixed(3)} ${r}`}}let i=.22,l=Math.min(n*.45,.075),s=.82,c=n*.9;return {soft:`${i.toFixed(3)} ${l.toFixed(3)} ${r}`,deep:`${s.toFixed(3)} ${c.toFixed(3)} ${r}`}}var Pi={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",poppins:"var(--font-poppins), 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 gp="custom:";function fp(e){return e.startsWith(gp)?e.slice(gp.length):null}var hp={sans:"system-ui, sans-serif",serif:"Georgia, serif",mono:"ui-monospace, monospace"};var Tb=["superLight","light","dark","superDark"],Pb={muted:.6,default:1,vibrant:1.3};function Mb(e,t,o){let a=t.primary*o,n=t.accent*o,r=(a+n)/2*.8,i=l=>(l%360+360)%360;return {1:`0.600 ${(.17*a).toFixed(4)} ${e.primary.toFixed(2)}`,2:`0.640 ${(.17*r).toFixed(4)} ${i(e.primary+140).toFixed(2)}`,3:`0.580 ${(.17*r).toFixed(4)} ${i(e.primary+220).toFixed(2)}`,4:`0.510 0.0250 ${e.neutral.toFixed(2)}`,5:`0.620 ${(.17*n).toFixed(4)} ${e.accent.toFixed(2)}`}}var ne=e=>({source:"neutral",step:e}),Ot=e=>({source:"primary",step:e}),Go=e=>({source:"accent",step:e}),br=e=>({source:"pure",value:e}),Nb={superLight:{background:ne(50),foreground:ne(800),card:br(hr),cardForeground:ne(800),popover:br(hr),popoverForeground:ne(800),primary:Ot(600),primaryForeground:Ot(50),secondary:ne(100),secondaryForeground:ne(700),muted:ne(100),mutedForeground:ne(500),accent:Go(600),accentForeground:Go(50),border:ne(200),input:ne(200),ring:Ot(500)},light:{background:ne(50),foreground:ne(950),card:br(hr),cardForeground:ne(950),popover:br(hr),popoverForeground:ne(950),primary:Ot(500),primaryForeground:Ot(50),secondary:ne(100),secondaryForeground:ne(700),muted:ne(100),mutedForeground:ne(500),accent:Go(500),accentForeground:Go(50),border:ne(200),input:ne(200),ring:Ot(500)},dark:{background:ne(950),foreground:ne(50),card:ne(900),cardForeground:ne(50),popover:ne(900),popoverForeground:ne(50),primary:Ot(400),primaryForeground:Ot(950),secondary:ne(800),secondaryForeground:ne(200),muted:ne(800),mutedForeground:ne(400),accent:Go(400),accentForeground:Go(950),border:ne(800),input:ne(800),ring:Ot(400)},superDark:{background:br(mp),foreground:ne(100),card:ne(950),cardForeground:ne(100),popover:ne(950),popoverForeground:ne(100),primary:Ot(300),primaryForeground:Ot(950),secondary:ne(900),secondaryForeground:ne(300),muted:ne(900),mutedForeground:ne(500),accent:Go(300),accentForeground:Go(950),border:ne(900),input:ne(900),ring:Ot(300)}};function at(e,t){return e.source==="pure"?e.value:t[e.source][e.step]}function Eb(e,t,o){let a=Nb[t],n=t==="superLight"||t==="light",r=n?wn.light:wn.dark;return {background:at(a.background,e),foreground:at(a.foreground,e),card:at(a.card,e),cardForeground:at(a.cardForeground,e),popover:at(a.popover,e),popoverForeground:at(a.popoverForeground,e),primary:at(a.primary,e),primaryForeground:at(a.primaryForeground,e),secondary:at(a.secondary,e),secondaryForeground:at(a.secondaryForeground,e),muted:at(a.muted,e),mutedForeground:at(a.mutedForeground,e),accent:at(a.accent,e),accentForeground:at(a.accentForeground,e),border:at(a.border,e),input:at(a.input,e),ring:o&&a.ring.source!=="pure"?o[a.ring.step]:at(a.ring,e),destructive:r.destructive,destructiveForeground:r.destructiveFg,success:r.success,warning:r.warning,info:r.info,highlight:r.highlight,...(()=>{let i=n?"light":"dark",l=Ea(r.destructive,i),s=Ea(r.success,i),c=Ea(r.warning,i),p=Ea(r.info,i),m=Ea(r.highlight,i);return {destructiveSoft:l.soft,destructiveDeep:l.deep,successSoft:s.soft,successDeep:s.deep,warningSoft:c.soft,warningDeep:c.deep,infoSoft:p.soft,infoDeep:p.deep,highlightSoft:m.soft,highlightDeep:m.deep}})()}}var Lb={display:3.75,h1:2.5,h2:2,h3:1.5,h4:1.25,h5:1.125,h6:1,body:1,bodySm:.875},Ni={compact:.85,default:1,spacious:1.18},Db=Object.fromEntries(core$1.GDS_MODULAR_SCALES.map(e=>[e.id,e.ratio])),Ab=.625,Ib=1.02,Hb=1.8,vp=(e,t,o)=>Math.min(o,Math.max(t,e)),Fb={"2xs":1.455,xs:1.333,sm:1.429,base:1.5,lg:1.556,xl:1.4,"2xl":1.333,"3xl":1.2,"4xl":1.111,"5xl":1,"6xl":1,"7xl":1};function zb(e){if(e in Ni){let o=Ni[e];return Object.fromEntries(Object.entries(Lb).map(([a,n])=>[a,n*o]))}let t=yp(e);return {display:t["6xl"],h1:t["4xl"],h2:t["3xl"],h3:t["2xl"],h4:t.xl,h5:t.lg,h6:t.base,body:t.base,bodySm:t.sm}}function yp(e){let t=vp(Db[e],Ib,Hb);return core$1.modularTypeSizes(1,t,Ab)}function Mi(e,t,o){let a=fp(e);if(a===null)return Pi[e]??Pi.system;let r=t?.find(i=>i.family===a)?.category??o;return `"${a}", ${hp[r]}`}function Bb(e){let t=zb(e.scale),o=n=>`${n.toFixed(3)}rem`,a;if(!(e.scale in Ni)){let n=yp(e.scale);a=Object.fromEntries(core$1.GDS_TYPE_SIZE_NAMES.map(r=>[r,{size:o(n[r]),lineHeight:String(Fb[r])}]));}return {fontSans:Mi(e.body,e.customFonts,"sans"),fontMono:Mi(e.mono,e.customFonts,"mono"),fontDisplay:Mi(e.display,e.customFonts,"sans"),fontFaces:e.customFonts,headingWeight:e.headingWeight??600,bodyWeight:e.bodyWeight??400,headingTracking:e.headingTracking??"-0.01em",bodyStretch:e.bodyStretch??"normal",displayStretch:e.displayStretch??e.bodyStretch??"normal",scale:{display:o(t.display),h1:o(t.h1),h2:o(t.h2),h3:o(t.h3),h4:o(t.h4),h5:o(t.h5),h6:o(t.h6),body:o(t.body),bodySm:o(t.bodySm)},namedScale:a}}var Vb={sharp:0,subtle:.25,soft:.5,round:.875,pill:1.25};function _b(e){let t=Vb[e.style],o=a=>`${a.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 bp={tight:.85,default:1,roomy:1.2},Ob=.25,Gb=.125;function Wb(e){let t=vp(bp[e.density],.6,1.6),o=Math.max(Gb,Math.round(Ob*t*1e4)/1e4);return {baseUnit:"1rem",densityFactor:bp[e.density],unit:`${o}rem`}}var Ub={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 $b(e){let t=e?.shadows??"default",o=e?.motionIntensity??1,a=n=>`${Math.round(n*o)}ms`;return {shadows:Ub[t],motion:{fast:a(150),base:a(200),slow:a(300),slower:a(500)},borderWidth:e?.borderWidth??"1px"}}function la(e){let t=Pb[e.intensity??"default"],o=e.neutralPureGray??false,a=(e.chroma?.neutral??.08)*t,n=(e.chroma?.primary??1)*t,r=(e.chroma?.accent??1)*t,i=o?up():no({hue:e.hues.neutral,chromaScale:a}),l=no({hue:e.hues.primary,chromaScale:n}),s=no({hue:e.hues.accent,chromaScale:r}),c={neutral:i,primary:l,accent:s},p=Mb(e.hues,{primary:n,accent:r},t),m=e.ring?.hue!=null?no({hue:e.ring.hue,chromaScale:n}):e.ring?.source&&e.ring.source!=="primary"?c[e.ring.source]:void 0,u=Object.fromEntries(Tb.map(k=>[k,Eb(c,k,m)])),g=k=>parseFloat(k.trim().split(/\s+/)[2]??"0"),h=wn.light,f={success:no({hue:g(h.success)}),warning:no({hue:g(h.warning)}),info:no({hue:g(h.info)}),highlight:no({hue:g(h.highlight)}),destructive:no({hue:g(h.destructive)})},b=Bb(e.typography),v=_b(e.radius),S=Wb(e.spacing),x=$b(e.effects),w={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,roleRamps:f,colors:u,chart:p,typography:b,radius:v,spacing:S,effects:x,components:w}}var vr={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"}},Ei={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"}},kn=[vr,Ei];function jb(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 Ai(e,t){let o=e.colors[t],a={...jb(o),...Li("neutral",e.ramps.neutral),...Li("primary",e.ramps.primary),...Li("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],...Kb(e),"--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,"--font-body-stretch":e.typography.bodyStretch??"normal","--font-display-stretch":e.typography.displayStretch??"normal","--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),"--spacing":e.spacing.unit??"0.25rem","--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};if(e.typography.namedScale)for(let[r,i]of Object.entries(e.typography.namedScale))a[`--text-${r}`]=i.size,a[`--text-${r}--line-height`]=i.lineHeight;let n=[["primary",e.ramps.primary],["accent",e.ramps.accent],["neutral",e.ramps.neutral],["success",e.roleRamps?.success],["warning",e.roleRamps?.warning],["info",e.roleRamps?.info],["highlight",e.roleRamps?.highlight],["destructive",e.roleRamps?.destructive]];for(let[r,i]of n)if(i)for(let l of Mo)a[`--gds-${r}-${l}`]=i[l];return a}function Kb(e){let t=l=>parseFloat(l.trim().split(/\s+/)[2]??"0"),o=l=>(l%360+360)%360,a=t(e.ramps.primary[500]),n=t(e.ramps.accent[500]),r=[a,n,a+45,n+60,a+150,n-75,a+210,n+165].map(o),i={};return r.forEach((l,s)=>{let c=(.68+s%3*.02).toFixed(3);i[`--brand-${s+1}`]=`${c} 0.200 ${l.toFixed(2)}`;}),i}function Li(e,t){let o={};for(let a of Mo)o[`--ramp-${e}-${a}`]=t[a];return o}var Di="gds-theme-fonts";function xp(e){return !e||e.length===0?"":e.map(t=>{let o=t.format?`url("${t.url}") format("${t.format}")`:`url("${t.url}")`;return ["@font-face {",` font-family: "${t.family.replace(/"/g,"")}";`,` src: ${o};`,` font-weight: ${t.weight??"100 900"};`,` font-stretch: ${t.stretch??"50% 200%"};`,` font-style: ${t.style??"normal"};`," font-display: swap;","}"].join(`
123
+ `)}).join(`
124
+ `)}function wp(e,t=typeof document>"u"?void 0:document){if(!t)return;let o=xp(e),a=t.getElementById(Di);if(!o){a?.remove();return}a||(a=t.createElement("style"),a.id=Di,t.head.appendChild(a)),a.textContent!==o&&(a.textContent=o);}function Sn(e,t){if(typeof document>"u")return;let o=document.documentElement,a=Ai(e,t);for(let[n,r]of Object.entries(a))o.style.setProperty(n,r);wp(e.typography.fontFaces,document),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 yr(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 a=o.match(/\d+/g);if(!a||a.length<3)return "";let[n,r,i]=a.slice(0,3).map(Number);return "#"+[n,r,i].map(l=>Math.max(0,Math.min(255,l)).toString(16).padStart(2,"0")).join("").toUpperCase()}function qb(e){let t=e.trim().split(/\s+/);if(t.length<3)return {oklch:e,hex:""};let[o,a,n]=t.map(Number),r=`${o.toFixed(3)} ${a.toFixed(3)} ${Math.round(n)}`,i=yr(e);return {oklch:r,hex:i}}function Ii(e,t,o){let a=[`### ${e} ramp (hue ${Math.round(o)}\xB0)`,"","| Step | OKLCH | Hex |","|------|-------|-----|"];for(let n of Mo){let{oklch:r,hex:i}=qb(t[n]);a.push(`| ${n} | \`${r}\` | \`${i||"\u2014"}\` |`);}return a.join(`
125
+ `)}function kp(e,t){let o=[`### ${e}`,"","| Token | Usage | Light (hex) | Dark (hex) |","|-------|-------|-------------|------------|"];for(let a of t){let n=yr(a.light)||"\u2014",r=yr(a.dark)||"\u2014";o.push(`| \`--${a.token}\` | ${a.usage} | \`${n}\` (\`${a.light}\`) | \`${r}\` (\`${a.dark}\`) |`);}return o.join(`
126
+ `)}function Sp(e){return !e||e.input==null?"{}":JSON.stringify(e.input,null,2)??"{}"}function Rp(e){let{input:t,ramps:o,colors:a,chart:n,typography:r,radius:i,spacing:l,effects:s,components:c}=e,p=t.intensity??"default",m=f=>({token:f,usage:Yb[f]??"",light:a.light[f],dark:a.dark[f]}),u=["background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","border","input","ring"].map(m),g=["destructive","destructiveForeground","success","warning","info","highlight"].map(m),h=[1,2,3,4,5].map(f=>{let b=n[f];return {slot:f,triplet:b,hex:yr(b)||"\u2014"}});return `# ${e.name} \u2014 Grade Design System Theme
125
127
 
126
128
  > **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.
127
129
 
@@ -131,7 +133,7 @@ ${o.map(([a,i])=>{let p=i.theme?.[r]||i.color;return p?` --color-${a}: ${p};`:n
131
133
  - **ID**: \`${t.id}\`
132
134
  ${t.description?`- **Description**: ${t.description}
133
135
  `:""}- **Hues**: neutral \`${t.hues.neutral}\xB0\` \xB7 primary \`${t.hues.primary}\xB0\` \xB7 accent \`${t.hues.accent}\xB0\`
134
- - **Intensity**: \`${l}\` ${l==="muted"?"(quieter chroma across the board)":l==="vibrant"?"(punchier chroma across the board)":"(balanced)"}
136
+ - **Intensity**: \`${p}\` ${p==="muted"?"(quieter chroma across the board)":p==="vibrant"?"(punchier chroma across the board)":"(balanced)"}
135
137
  - **Typography**: ${t.typography.display} display \xB7 ${t.typography.body} body \xB7 ${t.typography.mono} mono \xB7 scale \`${t.typography.scale}\`
136
138
  - **Spacing density**: \`${t.spacing.density}\`
137
139
  - **Radius style**: \`${t.radius.style}\` (base \`${i.base}\`)
@@ -151,30 +153,30 @@ A \`ThemeInput\` is a small object (three hues plus a handful of presets). The g
151
153
  ## Full ThemeInput (round-trippable)
152
154
 
153
155
  \`\`\`json
154
- ${Ec(e)}
156
+ ${Sp(e)}
155
157
  \`\`\`
156
158
 
157
159
  ## Color ramps
158
160
 
159
161
  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.
160
162
 
161
- ${Jn("Neutral",o.neutral,t.hues.neutral)}
163
+ ${Ii("Neutral",o.neutral,t.hues.neutral)}
162
164
 
163
- ${Jn("Primary",o.primary,t.hues.primary)}
165
+ ${Ii("Primary",o.primary,t.hues.primary)}
164
166
 
165
- ${Jn("Accent",o.accent,t.hues.accent)}
167
+ ${Ii("Accent",o.accent,t.hues.accent)}
166
168
 
167
169
  ## Semantic tokens (hue-derived)
168
170
 
169
171
  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.
170
172
 
171
- ${Nc("Core semantic tokens",u)}
173
+ ${kp("Core semantic tokens",u)}
172
174
 
173
175
  ## Fixed semantic tokens (not hue-derived)
174
176
 
175
177
  Status colors stay consistent across themes so users always read green as success, red as destructive, etc. Accessibility wins over brand cohesion.
176
178
 
177
- ${Nc("Status colors",m)}
179
+ ${kp("Status colors",g)}
178
180
 
179
181
  ## Chart palette
180
182
 
@@ -187,26 +189,26 @@ ${h.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
187
189
 
188
190
  ## Typography
189
191
 
190
- - **Display font**: \`${a.fontDisplay}\`
191
- - **Body font**: \`${a.fontSans}\`
192
- - **Mono font**: \`${a.fontMono}\`
193
- - **Heading weight**: \`${a.headingWeight}\`
194
- - **Body weight**: \`${a.bodyWeight}\`
195
- - **Heading letter-spacing**: \`${a.headingTracking}\`
192
+ - **Display font**: \`${r.fontDisplay}\`
193
+ - **Body font**: \`${r.fontSans}\`
194
+ - **Mono font**: \`${r.fontMono}\`
195
+ - **Heading weight**: \`${r.headingWeight}\`
196
+ - **Body weight**: \`${r.bodyWeight}\`
197
+ - **Heading letter-spacing**: \`${r.headingTracking}\`
196
198
 
197
199
  ### Type scale
198
200
 
199
201
  | Step | Size |
200
202
  |------|------|
201
- | \`text-display\` | \`${a.scale.display}\` |
202
- | \`text-h1\` | \`${a.scale.h1}\` |
203
- | \`text-h2\` | \`${a.scale.h2}\` |
204
- | \`text-h3\` | \`${a.scale.h3}\` |
205
- | \`text-h4\` | \`${a.scale.h4}\` |
206
- | \`text-h5\` | \`${a.scale.h5}\` |
207
- | \`text-h6\` | \`${a.scale.h6}\` |
208
- | body | \`${a.scale.body}\` |
209
- | body-sm | \`${a.scale.bodySm}\` |
203
+ | \`text-display\` | \`${r.scale.display}\` |
204
+ | \`text-h1\` | \`${r.scale.h1}\` |
205
+ | \`text-h2\` | \`${r.scale.h2}\` |
206
+ | \`text-h3\` | \`${r.scale.h3}\` |
207
+ | \`text-h4\` | \`${r.scale.h4}\` |
208
+ | \`text-h5\` | \`${r.scale.h5}\` |
209
+ | \`text-h6\` | \`${r.scale.h6}\` |
210
+ | body | \`${r.scale.body}\` |
211
+ | body-sm | \`${r.scale.bodySm}\` |
210
212
 
211
213
  ## Radius, spacing, effects
212
214
 
@@ -224,8 +226,8 @@ ${h.map(f=>`| \`--chart-${f.slot}\` | \`${f.triplet}\` | \`${f.hex}\` |`).join(`
224
226
 
225
227
  ### Spacing
226
228
 
227
- - **Density factor**: \`${p.densityFactor}\` (applied as \`var(--gds-density)\` on components that opt in)
228
- - **Base unit**: \`${p.baseUnit}\`
229
+ - **Density factor**: \`${l.densityFactor}\` (applied as \`var(--gds-density)\` on components that opt in)
230
+ - **Base unit**: \`${l.baseUnit}\`
229
231
 
230
232
  ### Motion
231
233
 
@@ -253,8 +255,8 @@ Every color is stored as a bare \`L C H\` OKLCH triplet and wrapped at call time
253
255
 
254
256
  \`\`\`css
255
257
  :root {
256
- --primary: ${r.light.primary};
257
- --background: ${r.light.background};
258
+ --primary: ${a.light.primary};
259
+ --background: ${a.light.background};
258
260
  }
259
261
  \`\`\`
260
262
 
@@ -303,7 +305,7 @@ Every component accepts a \`className\` for layout tweaks. Variants are passed v
303
305
 
304
306
  When generating UI in the ${e.name} theme, match this character:
305
307
 
306
- ${xh(e)}
308
+ ${Zb(e)}
307
309
 
308
310
  ## Instructions for the generating LLM
309
311
 
@@ -322,7 +324,7 @@ To recreate this theme in code:
322
324
  \`\`\`ts
323
325
  import { generateTheme, applyThemeToRoot, type ThemeInput } from "@gradeui/ui";
324
326
 
325
- const input: ThemeInput = ${Ec(e).replace(/\n/g,`
327
+ const input: ThemeInput = ${Sp(e).replace(/\n/g,`
326
328
  `)};
327
329
 
328
330
  const theme = generateTheme(input);
@@ -331,11 +333,11 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
331
333
 
332
334
  ---
333
335
  *Generated from Grade Design System v1 \xB7 ${new Date().toISOString()}*
334
- `}var yh={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 xh(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 n=o.typography.display;return n==="fraunces"||n==="instrumentSerif"||n==="sourceSerif"?t.push("- **Editorial serif headings.** Treat headings like magazine titles \u2014 give them space and weight. Serifs reward larger sizes."):(n==="geist"||n==="inter")&&t.push("- **Modern technical sans.** Clean, functional, neutral. Good for product UIs."),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(`
335
- `)}function Qn(e){if(typeof window>"u"||typeof document>"u")return;let t=Lc(e),o=new Blob([t],{type:"text/markdown;charset=utf-8"}),r=URL.createObjectURL(o),n=document.createElement("a");n.href=r,n.download=`grade-theme-${e.input.id}.md`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(r);}var Wt=Object.fromEntries(Va.map(e=>[e.id,Vo(e)])),sr=$r.id;function Go(e){if(e in Wt)return Wt[e];let t=ti(e);if(t)return Vo(t)}function ei(){return [...Object.values(Wt),...Ic()]}var Dc="grade-user-themes";function Wa(){if(typeof localStorage>"u")return {};try{let e=localStorage.getItem(Dc);if(!e)return {};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function Ac(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(Dc,JSON.stringify(e));}catch{}}function Ic(){return Object.values(Wa()).map(Vo)}function ti(e){return Wa()[e]}function ja(e){let t=Wa();return t[e.id]=e,Ac(t),Vo(e)}function oi(e){if(e in Wt)return;let t=Wa();delete t[e],Ac(t);}function wh(e,t,o){let r=Wt[e]?.input??ti(e);if(!r)return;let n={...r,id:t,name:o};return ja(n),n}var ri="grade-theme",$a="grade-mode",Fc=["superLight","light","dark","superDark"],Hc=new Set(["dark","superDark"]),Rh=`
336
+ `}var Yb={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 Zb(e){let t=[],{input:o,components:a}=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 n=o.typography.display;return n==="fraunces"||n==="instrumentSerif"||n==="sourceSerif"?t.push("- **Editorial serif headings.** Treat headings like magazine titles \u2014 give them space and weight. Serifs reward larger sizes."):(n==="geist"||n==="inter")&&t.push("- **Modern technical sans.** Clean, functional, neutral. Good for product UIs."),a.cardStyle==="outlined"?t.push("- **Cards are outlined**, not shadowed. Rely on borders + spacing for hierarchy."):a.cardStyle==="elevated"?t.push("- **Cards have real elevation.** Use shadows to stack content visually."):a.cardStyle==="glass"&&t.push("- **Glass / frosted cards.** Use translucent surfaces over background imagery or gradients."),a.buttonShape==="pill"&&t.push("- **Buttons are pills** \u2014 don't override with square corners."),t.join(`
337
+ `)}function Hi(e){if(typeof window>"u"||typeof document>"u")return;let t=Rp(e),o=new Blob([t],{type:"text/markdown;charset=utf-8"}),a=URL.createObjectURL(o),n=document.createElement("a");n.href=a,n.download=`grade-theme-${e.input.id}.md`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(a);}var io=Object.fromEntries(kn.map(e=>[e.id,la(e)])),La=vr.id;function ca(e){if(e in io)return io[e];let t=zi(e);if(t)return la(t)}function Fi(){return [...Object.values(io),...Pp()]}var Cp="grade-user-themes";function Rn(){if(typeof localStorage>"u")return {};try{let e=localStorage.getItem(Cp);if(!e)return {};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function Tp(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(Cp,JSON.stringify(e));}catch{}}function Pp(){return Object.values(Rn()).map(la)}function zi(e){return Rn()[e]}function Cn(e){let t=Rn();return t[e.id]=e,Tp(t),la(e)}function Bi(e){if(e in io)return;let t=Rn();delete t[e],Tp(t);}function Xb(e,t,o){let a=io[e]?.input??zi(e);if(!a)return;let n={...a,id:t,name:o};return Cn(n),n}var Vi="grade-theme",Tn="grade-mode",Np=["superLight","light","dark","superDark"],Mp=new Set(["dark","superDark"]),Jb=`
336
338
  (function() {
337
339
  try {
338
- var mode = localStorage.getItem('${$a}');
340
+ var mode = localStorage.getItem('${Tn}');
339
341
  var valid = ['superLight','light','dark','superDark'];
340
342
  if (!mode || valid.indexOf(mode) === -1) {
341
343
  mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
@@ -344,28 +346,28 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
344
346
  document.documentElement.classList.add('dark');
345
347
  }
346
348
  document.documentElement.setAttribute('data-mode', mode);
347
- var themeId = localStorage.getItem('${ri}');
349
+ var themeId = localStorage.getItem('${Vi}');
348
350
  if (themeId) document.documentElement.setAttribute('data-grade-theme', themeId);
349
351
  } catch(e) {}
350
352
  })();
351
- `,ai=v__namespace.createContext(null);function Sh({children:e,defaultTheme:t=sr,defaultMode:o="light"}){let[r,n]=v__namespace.useState(t),[a,i]=v__namespace.useState(o),[p,s]=v__namespace.useState(0);v__namespace.useEffect(()=>{try{let f=localStorage.getItem(ri);f&&Go(f)&&n(f);let b=localStorage.getItem($a);if(b&&Fc.includes(b))i(b);else if(typeof window<"u"){let y=window.matchMedia("(prefers-color-scheme: dark)").matches;i(y?"dark":"light");}}catch{}},[]),v__namespace.useEffect(()=>{let f=Go(r)??Go(sr);f&&(Ga(f,a),typeof document<"u"&&document.documentElement.classList.toggle("dark",Hc.has(a)));},[r,a,p]),v__namespace.useEffect(()=>{if(typeof window>"u")return;let f=window.matchMedia("(prefers-color-scheme: dark)"),b=y=>{try{if(localStorage.getItem($a))return}catch{return}i(y.matches?"dark":"light");};return f.addEventListener("change",b),()=>f.removeEventListener("change",b)},[]);let c=v__namespace.useCallback(f=>{n(f);try{localStorage.setItem(ri,f);}catch{}},[]),l=v__namespace.useCallback(f=>{i(f);try{localStorage.setItem($a,f);}catch{}},[]),g=v__namespace.useCallback(f=>{ja(f),s(b=>b+1),c(f.id);},[c]),u=v__namespace.useCallback(f=>{f in Wt||(oi(f),s(b=>b+1),n(b=>b===f?sr:b));},[]),m=v__namespace.useCallback(()=>{s(f=>f+1);},[]),h=v__namespace.useMemo(()=>{let f=Go(r)??Go(sr);return {theme:f,themeId:f.id,mode:a,isDark:Hc.has(a),setThemeId:c,setMode:l,themes:ei(),saveAndActivate:g,deleteTheme:u,refresh:m}},[r,a,p,c,l,g,u,m]);return v__namespace.createElement(ai.Provider,{value:h},e)}function ni(){let e=v__namespace.useContext(ai);if(!e)throw new Error("useGradeTheme must be used inside <GradeThemeProvider>. Wrap your app (typically in app/layout.tsx).");return e}function Wo(){return v__namespace.useContext(ai)}var ii=v__namespace.createContext(null);function zc(){return v__namespace.useContext(ii)}var Bh={maplibre:()=>Promise.resolve().then(()=>(Wc(),Gc)).then(e=>e.createMaplibreAdapter),mapbox:()=>Promise.resolve().then(()=>(Kc(),Uc)).then(e=>e.createMapboxAdapter),google:()=>Promise.resolve().then(()=>(Zc(),Yc)).then(e=>e.createGoogleAdapter),leaflet:()=>Promise.resolve().then(()=>(ep(),Qc)).then(e=>e.createLeafletAdapter)},Oh=500,si=v__namespace.forwardRef(function(t,o){let{center:r,zoom:n,bounds:a,appearance:i="auto",interactive:p=true,hoveredId:s,onHoveredIdChange:c,onLoad:l,onError:g,className:u,style:m,children:h,...f}=t,y=globalThis.__gradeMapProvider??f.provider??"leaflet",R=f.styleUrl,w=f.tilerKey,x=f.accessToken,S=f.apiKey,M=f.mapId,A=v__namespace.useRef(null),H=v__namespace.useRef(null),W=v__namespace.useRef(new globalThis.Map),z=v__namespace.useRef(null),[F,B]=v__namespace.useState(false),q=v__namespace.useRef(c),ie=v__namespace.useRef(g),N=v__namespace.useRef(l);v__namespace.useEffect(()=>{q.current=c,ie.current=g,N.current=l;});let k=Wo()?.isDark??false,G=i==="auto"?k?"dark":"light":i;v__namespace.useEffect(()=>{let I=false,j=A.current;if(!j)return;let Z=i==="auto"?k?"dark":"light":i;return (async()=>{try{let ae=await Bh[y]();if(I)return;let U=await ae(j,{center:r,zoom:n,bounds:a,appearance:Z,interactive:p,styleUrl:R,tilerKey:w,accessToken:x,apiKey:S,mapId:M},{onLoad:()=>{},onError:xe=>ie.current?.(xe),onMarkerHover:xe=>q.current?.(xe),onMarkerClick:()=>{}});if(I){U.destroy();return}H.current=U,B(!0),N.current?.(tp(H,W));}catch(ae){if(I)return;ae?.code||ie.current?.({code:"provider-init-failed",message:ae?.message??"Map init failed",cause:ae});}})(),()=>{I=true,H.current?.destroy(),H.current=null,B(false),W.current.clear(),z.current=null;}},[y,R,x,S,M,w]),v__namespace.useEffect(()=>{H.current?.setAppearance(G);},[G]),v__namespace.useEffect(()=>{H.current?.setInteractive(p);},[p]),v__namespace.useEffect(()=>{H.current&&(a?H.current.setBounds(a[0],a[1]):(H.current.setCenter(r),H.current.setZoom(n)));},[r[0],r[1],n,a?.[0]?.[0],a?.[0]?.[1],a?.[1]?.[0],a?.[1]?.[1]]),v__namespace.useEffect(()=>{let I=z.current;I&&I!==s&&W.current.get(I)?.setHovered(false),s&&W.current.get(s)?.setHovered(true),z.current=s??null;},[s]),v__namespace.useImperativeHandle(o,()=>tp(H,W),[]);let he=v__namespace.useMemo(()=>({registerMarker:(I,j,Z)=>{let ae=H.current;if(!ae)return null;let U=ae.addMarker(I,j,Z);W.current.set(I,U),process.env.NODE_ENV!=="production"&&W.current.size===Oh+1&&console.warn(`@gradeui/ui Map: rendering ${W.current.size} markers. DOM markers degrade past ~1k. Consider clustering via the .instance escape hatch.`);let xe=U.remove;return U.remove=()=>{xe(),W.current.delete(I),z.current===I&&(z.current=null);},s===I&&U.setHovered(true),U}}),[F]);return v__namespace.createElement("div",{ref:A,"data-gds-part":"map",className:d("gds-map relative isolate overflow-hidden",u),style:{borderRadius:"var(--gds-map-radius, var(--radius, 0.5rem))",border:"var(--gds-map-border, 1px solid var(--border, transparent))",...m}},v__namespace.createElement(ii.Provider,{value:he},h))});si.displayName="Map";function tp(e,t){let o=()=>{};return {flyTo:(r,n)=>{let a=e.current;if(!a)return;let i;if(typeof r=="string"){if(i=t.current.get(r)?.coords??null,!i){console.warn(`@gradeui/ui Map.flyTo: no marker registered with id "${r}".`);return}}else i=r;a.flyTo(i,n);},panTo:(r,n)=>e.current?.panTo(r,n)??o(),fitBounds:(r,n)=>e.current?.fitBounds(r,n)??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 li=v__namespace.memo(function({id:t,at:o,anchor:r="bottom",className:n,children:a,onClick:i}){let p=zc(),[s,c]=v__namespace.useState(null),l=v__namespace.useRef(null),g=v__namespace.useRef(i);return v__namespace.useEffect(()=>{g.current=i;}),v__namespace.useEffect(()=>{if(!p)return;let u=p.registerMarker(t,o,r);if(u){l.current=u,c(u.element);let m=h=>{g.current?.({id:t,coords:u.coords,native:h});};return u.element.addEventListener("click",m),()=>{u.element.removeEventListener("click",m),u.remove(),l.current=null,c(null);}}},[p,t]),v__namespace.useEffect(()=>{l.current?.setPosition(o);},[o[0],o[1]]),s?reactDom.createPortal(v__namespace.createElement("div",{"data-gds-part":"map-marker-content",className:d("pointer-events-auto",n)},a),s):null});li.displayName="MapMarker";var ob={video:"aspect-video",standard:"aspect-[4/3]",square:"aspect-square",portrait:"aspect-[3/4]",wide:"aspect-[21/9]",auto:""},rb={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)"},ab={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},nb={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 ib(e){if(!e)return null;switch(e.kind){case "album":return `album:${e.artist}|${e.title}|${e.year??""}`;case "tv-show":return `tv-show:${e.title}|${e.year??""}`;case "movie":return `movie:${e.title}|${e.year??""}`;case "game":return `game:${e.title}`;case "book":return `book:${e.isbn??""}|${e.title??""}|${e.author??""}`;case "poster":return `poster:${e.title}|${e.year??""}`;case "portrait":return `portrait:${e.name??""}|${e.role??""}`;case "landscape":return `landscape:${e.location??""}|${e.mood??""}`;case "product":return `product:${e.brand??""}|${e.name??""}`;case "food":return `food:${e.dish??""}|${e.cuisine??""}`;case "generic":return `generic:${e.prompt}`;default:return `${e.kind}:`}}function sb(e){let t=ib(e),[o,r]=v__namespace.useState(0);return v__namespace.useEffect(()=>{if(typeof window>"u")return;let n=()=>r(a=>a+1);return window.addEventListener("grade:media-pending-updated",n),()=>window.removeEventListener("grade:media-pending-updated",n)},[]),v__namespace.useEffect(()=>{},[o]),!t||typeof window>"u"?false:!!window.__gradeMediaPending?.[t]}function lb(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 db(e){return e<64?"sm":e>=160?"lg":"md"}var jt=v__namespace.forwardRef(({className:e,aspect:t,radius:o="lg",border:r=false,loading:n=false,onVisibilityChange:a,fallback:i,emptyState:p="auto",hint:s="generic",alt:c,source:l,src:g,glyph:u,overlay:m,instanceId:h,style:f,children:b,...y},R)=>{let w=v__namespace.useRef(null);v__namespace.useImperativeHandle(R,()=>w.current);let x=s,S=t,M=o,A=r,H=n,W=c,z=g,F=p,B=S??nb[x];v__namespace.useEffect(()=>{if(!a||!w.current)return;let xe=w.current,E=new IntersectionObserver(([me])=>a(me.isIntersecting),{threshold:.05});return E.observe(xe),()=>E.disconnect()},[a]);let q=!b&&F!=="none",[ie,N]=v__namespace.useState("md");v__namespace.useEffect(()=>{if(!q)return;let xe=w.current;if(!xe)return;let E=new ResizeObserver(([me])=>{let X=me.contentRect.width;N(db(X));});return E.observe(xe),()=>E.disconnect()},[q]);let ue=v__namespace.useMemo(()=>lb(W),[W]),k=ab[x]??lucideReact.Image,G=F==="auto"||F==="icon",he=z,I=v__namespace.useMemo(()=>l?JSON.stringify(l):void 0,[l]),[j,Z]=v__namespace.useState(false);v__namespace.useEffect(()=>{Z(false);},[he]);let ae=j?void 0:he,U=sb(l)&&!ae;return v__namespace.createElement("div",{ref:w,"data-gds-part":"media-surface","data-media-hint":x,"data-media-source-kind":l?.kind,"data-media-source":I,"data-media-alt":W,"data-gds-instance-id":h,className:d("gds-media-surface relative w-full overflow-hidden",ob[B],A&&"border border-border",e),style:{borderRadius:`var(--gds-media-radius, ${rb[M]})`,...f},...y},q&&v__namespace.createElement("div",{"data-gds-part":"media-surface-placeholder","data-tier":ie,"data-fill-pending":U||void 0,className:d("absolute inset-0 z-0 flex flex-col items-center justify-center gap-2 pointer-events-none px-3 text-center",U&&"gds-aura-shimmer"),style:{position:"absolute",background:"var(--gds-media-placeholder-bg)",color:"var(--gds-media-placeholder-fg)",...U?{"--aura-shimmer-duration":"1400ms","--aura-shimmer-delay-between":"400ms"}:null},"aria-hidden":true},G?ie==="sm"?ue?v__namespace.createElement("span",{className:"font-semibold text-sm tracking-tight"},ue):v__namespace.createElement(k,{className:"h-1/2 w-1/2 max-h-6 max-w-6"}):ie==="md"?v__namespace.createElement(v__namespace.Fragment,null,u??v__namespace.createElement(k,{className:"h-1/3 w-1/3 max-h-10 max-w-10"})):v__namespace.createElement(v__namespace.Fragment,null,u??v__namespace.createElement(k,{className:"h-1/4 w-1/4 max-h-12 max-w-12"}),W&&v__namespace.createElement("span",{className:"text-xs leading-snug line-clamp-2 max-w-[80%]","data-gds-part":"media-surface-caption"},W)):F),(ae||b)&&v__namespace.createElement("div",{"data-gds-part":"media-surface-content",className:"absolute inset-0 z-[1]"},ae&&v__namespace.createElement("img",{src:ae,alt:W??"",onError:()=>Z(true),className:"absolute inset-0 h-full w-full object-cover","data-gds-part":"media-surface-img"}),b),H&&v__namespace.createElement("div",{className:"absolute inset-0 z-[2] flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},i),m&&v__namespace.createElement("div",{"data-gds-part":"media-surface-overlay",className:"absolute inset-0 z-10"},m))});jt.displayName="MediaSurface";var rp=v__namespace.forwardRef(({src:e,controls:t=true,autoPlay:o=false,loop:r=false,muted:n,pauseOffscreen:a=true,aspect:i="video",radius:p="lg",border:s=false,poster:c,label:l,className:g,style:u,playbackRate:m=1,objectFit:h="cover"},f)=>{let b=v__namespace.useRef(null),y=go(),[R,w]=v__namespace.useState(!!c);v__namespace.useImperativeHandle(f,()=>b.current);let x=n??o,S=o&&!y;v__namespace.useEffect(()=>{b.current&&(b.current.playbackRate=m);},[m]),v__namespace.useEffect(()=>{w(!!c);},[c]);let M=v__namespace.useCallback(A=>{!a||!b.current||(A&&S?b.current.play().catch(()=>{}):b.current.pause());},[a,S]);return v__namespace.createElement(jt,{aspect:i,radius:p,border:s,"aria-label":l,className:g,style:u,onVisibilityChange:a?M:void 0},v__namespace.createElement("video",{ref:b,src:e,controls:t,autoPlay:S,loop:r,muted:x,playsInline:true,preload:S?"auto":"metadata",onPlaying:()=>w(false),className:d("w-full h-full",h==="cover"&&"object-cover",h==="contain"&&"object-contain",h==="fill"&&"object-fill")},"Your browser does not support the video tag."),c&&R&&v__namespace.createElement("img",{src:c,alt:"","aria-hidden":"true",loading:"lazy",decoding:"async","data-gds-part":"video-poster",className:d("absolute inset-0 w-full h-full pointer-events-none transition-opacity duration-200",h==="cover"&&"object-cover",h==="contain"&&"object-contain",h==="fill"&&"object-fill")}))});rp.displayName="VideoPlayer";var ap=v__namespace.forwardRef(({src:e,controls:t=false,autoPlay:o=true,loop:r=true,pauseOffscreen:n=true,aspect:a="square",radius:i="lg",border:p=false,poster:s,label:c,className:l,style:g,stateMachines:u,artboard:m,fit:h="contain",stateMachineInputs:f},b)=>{let y=go(),[R,w]=v__namespace.useState(null),[x,S]=v__namespace.useState(null);return v__namespace.useEffect(()=>{let M=false;return import('@rive-app/react-canvas').then(A=>{M||w(A);}).catch(()=>{M||S("Rive runtime not installed. Run `npm install @rive-app/react-canvas`.");}),()=>{M=true;}},[]),v__namespace.createElement(jt,{ref:b,aspect:a,radius:i,border:p,"aria-label":c,className:l,style:g},x?v__namespace.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},x):R&&e?v__namespace.createElement(ub,{Mod:R,src:e,stateMachines:u,artboard:m,fit:h,stateMachineInputs:f,autoPlay:o&&!y,loop:r,pauseOffscreen:n,controls:t,poster:s}):s&&v__namespace.createElement("img",{src:s,alt:"",className:"w-full h-full object-contain"}))});ap.displayName="RivePlayer";function ub({Mod:e,src:t,stateMachines:o,artboard:r,fit:n,autoPlay:a,loop:i,pauseOffscreen:p,controls:s,poster:c}){let{useRive:l,Layout:g,Fit:u,Alignment:m,EventType:h}=e,f={contain:u.Contain,cover:u.Cover,fill:u.Fill,fitWidth:u.FitWidth,fitHeight:u.FitHeight,none:u.None},{rive:b,RiveComponent:y}=l({src:t,stateMachines:o,artboard:r,autoplay:a,layout:new g({fit:f[n],alignment:m.Center})}),[R,w]=v__namespace.useState(a);v__namespace.useEffect(()=>{if(!b||!i)return;let S=()=>{b.play();};return b.on(h.Stop,S),()=>{b.off(h.Stop,S);}},[b,i,h]),v__namespace.useEffect(()=>{if(!p||!b)return;let S=b.canvas;if(!S)return;let M=new IntersectionObserver(([A])=>{A.isIntersecting&&a?b.play():b.pause();},{threshold:.05});return M.observe(S),()=>M.disconnect()},[b,p,a]);let x=()=>{b&&(R?(b.pause(),w(false)):(b.play(),w(true)));};return v__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement(y,{className:"w-full h-full"}),!b&&c&&v__namespace.createElement("img",{src:c,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),s&&v__namespace.createElement("div",{className:d("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(dt,{size:"icon",variant:"secondary",onClick:x},R?v__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):v__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))}var mb={sm:20,md:28,lg:40,xl:56},gb={horizontal:["horizontal","square","icon"],square:["square","icon","horizontal"],icon:["icon","square","horizontal"]};function fb(e,t,o,r){for(let n of gb[t]){let a=e[n];if(!a)continue;let i=o==="dark"?a.dark??a.light:a.light??a.dark,p=r?a.mono??i:i??a.mono;if(p!=null)return p}return null}var hb=v__namespace.forwardRef(function({sources:t={},lockup:o="horizontal",mode:r="light",mono:n=false,size:a="md",label:i,decorative:p=false,href:s,className:c,style:l,...g},u){let m=typeof a=="number"?a:mb[a],h=fb(t,o,r,n),f=p?{"aria-hidden":true}:i?s?{}:{role:"img","aria-label":i}:{},b=h??v__namespace.createElement(bb,{label:i}),y=v__namespace.createElement("span",{className:d("gds-logo inline-flex shrink-0 select-none items-center","[&_img]:h-full [&_img]:w-auto [&_svg]:h-full [&_svg]:w-auto",c),style:{height:m,...l},"data-gds-part":"logo","data-gds-lockup":o,"data-gds-mode":r,...s?{}:f,...s?{}:g},b);return s?v__namespace.createElement("a",{ref:u,href:s,"aria-label":p?void 0:i,className:"inline-flex",...p?{"aria-hidden":true}:{},...g},y):v__namespace.cloneElement(y,{ref:u})});function bb({label:e}){return v__namespace.createElement("svg",{viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e?{}:{"aria-hidden":true}},v__namespace.createElement("path",{d:"M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",fill:"currentColor"}))}var np="M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",vb={sm:16,md:24,lg:32,xl:48},ip=v__namespace.forwardRef(({size:e="md",label:t="Loading\u2026",showLabel:o=false,className:r,style:n,...a},i)=>{let p=typeof e=="number"?e:vb[e],s=v__namespace.useId().replace(/[^a-zA-Z0-9-]/g,"");return v__namespace.createElement("div",{ref:i,"data-gds-part":"grade-loader",role:"status","aria-label":t||void 0,className:d("gds-grade-loader inline-flex flex-col items-center gap-2",r),style:n,...a},v__namespace.createElement("style",null,`
353
+ `,_i=y__namespace.createContext(null);function Qb({children:e,defaultTheme:t=La,defaultMode:o="light"}){let[a,n]=y__namespace.useState(t),[r,i]=y__namespace.useState(o),[l,s]=y__namespace.useState(0);y__namespace.useEffect(()=>{try{let f=localStorage.getItem(Vi);f&&ca(f)&&n(f);let b=localStorage.getItem(Tn);if(b&&Np.includes(b))i(b);else if(typeof window<"u"){let v=window.matchMedia("(prefers-color-scheme: dark)").matches;i(v?"dark":"light");}}catch{}},[]),y__namespace.useEffect(()=>{let f=ca(a)??ca(La);f&&(Sn(f,r),typeof document<"u"&&document.documentElement.classList.toggle("dark",Mp.has(r)));},[a,r,l]),y__namespace.useEffect(()=>{if(typeof window>"u")return;let f=window.matchMedia("(prefers-color-scheme: dark)"),b=v=>{try{if(localStorage.getItem(Tn))return}catch{return}i(v.matches?"dark":"light");};return f.addEventListener("change",b),()=>f.removeEventListener("change",b)},[]);let c=y__namespace.useCallback(f=>{n(f);try{localStorage.setItem(Vi,f);}catch{}},[]),p=y__namespace.useCallback(f=>{i(f);try{localStorage.setItem(Tn,f);}catch{}},[]),m=y__namespace.useCallback(f=>{Cn(f),s(b=>b+1),c(f.id);},[c]),u=y__namespace.useCallback(f=>{f in io||(Bi(f),s(b=>b+1),n(b=>b===f?La:b));},[]),g=y__namespace.useCallback(()=>{s(f=>f+1);},[]),h=y__namespace.useMemo(()=>{let f=ca(a)??ca(La);return {theme:f,themeId:f.id,mode:r,isDark:Mp.has(r),setThemeId:c,setMode:p,themes:Fi(),saveAndActivate:m,deleteTheme:u,refresh:g}},[a,r,l,c,p,m,u,g]);return y__namespace.createElement(_i.Provider,{value:h},e)}function Oi(){let e=y__namespace.useContext(_i);if(!e)throw new Error("useGradeTheme must be used inside <GradeThemeProvider>. Wrap your app (typically in app/layout.tsx).");return e}function da(){return y__namespace.useContext(_i)}var Gi=y__namespace.createContext(null);function Ep(){return y__namespace.useContext(Gi)}var fv={maplibre:()=>Promise.resolve().then(()=>(Fp(),Hp)).then(e=>e.createMaplibreAdapter),mapbox:()=>Promise.resolve().then(()=>(_p(),Vp)).then(e=>e.createMapboxAdapter),google:()=>Promise.resolve().then(()=>(Wp(),Gp)).then(e=>e.createGoogleAdapter),leaflet:()=>Promise.resolve().then(()=>(Kp(),jp)).then(e=>e.createLeafletAdapter)},hv=500,Wi=y__namespace.forwardRef(function(t,o){let{center:a,zoom:n,bounds:r,appearance:i="auto",interactive:l=true,tools:s="auto",toolsPosition:c="top-left",hoveredId:p,onHoveredIdChange:m,onLoad:u,onError:g,className:h,style:f,children:b,...v}=t,x=globalThis.__gradeMapProvider??v.provider??"leaflet",w=v.styleUrl,k=v.tilerKey,C=v.accessToken,E=v.apiKey,F=v.mapId,O=y__namespace.useRef(null),M=y__namespace.useRef(null),N=y__namespace.useRef(new globalThis.Map),H=y__namespace.useRef(null),[Y,se]=y__namespace.useState(false),D=y__namespace.useRef(m),V=y__namespace.useRef(g),R=y__namespace.useRef(u);y__namespace.useEffect(()=>{D.current=m,V.current=g,R.current=u;});let _=da(),le=_!=null,[X,U]=y__namespace.useState(false);y__namespace.useEffect(()=>{if(le||typeof document>"u")return;let de=document.documentElement,T=()=>U(de.classList.contains("dark"));T();let Z=new MutationObserver(T);return Z.observe(de,{attributes:true,attributeFilter:["class"]}),()=>Z.disconnect()},[le]);let J=_?.isDark??X,ke=i==="auto"?J?"dark":"light":i;y__namespace.useEffect(()=>{let de=false,T=O.current;if(!T)return;let Z=i==="auto"?J?"dark":"light":i;return (async()=>{try{let $=await fv[x]();if(de)return;let Se=await $(T,{center:a,zoom:n,bounds:r,appearance:Z,interactive:l,tools:s,toolsPosition:c,styleUrl:w,tilerKey:k,accessToken:C,apiKey:E,mapId:F},{onLoad:()=>{},onError:j=>V.current?.(j),onMarkerHover:j=>D.current?.(j),onMarkerClick:()=>{}});if(de){Se.destroy();return}M.current=Se,se(!0),R.current?.(qp(M,N));}catch($){if(de)return;$?.code||V.current?.({code:"provider-init-failed",message:$?.message??"Map init failed",cause:$});}})(),()=>{de=true,M.current?.destroy(),M.current=null,se(false),N.current.clear(),H.current=null;}},[x,w,C,E,F,k,s,c]),y__namespace.useEffect(()=>{M.current?.setAppearance(ke);},[ke]),y__namespace.useEffect(()=>{M.current?.setInteractive(l);},[l]),y__namespace.useEffect(()=>{M.current&&(r?M.current.setBounds(r[0],r[1]):(M.current.setCenter(a),M.current.setZoom(n)));},[a[0],a[1],n,r?.[0]?.[0],r?.[0]?.[1],r?.[1]?.[0],r?.[1]?.[1]]),y__namespace.useEffect(()=>{let de=H.current;de&&de!==p&&N.current.get(de)?.setHovered(false),p&&N.current.get(p)?.setHovered(true),H.current=p??null;},[p]),y__namespace.useImperativeHandle(o,()=>qp(M,N),[]);let De=y__namespace.useMemo(()=>({registerMarker:(de,T,Z)=>{let $=M.current;if(!$)return null;let Se=$.addMarker(de,T,Z);N.current.set(de,Se),process.env.NODE_ENV!=="production"&&N.current.size===hv+1&&console.warn(`@gradeui/ui Map: rendering ${N.current.size} markers. DOM markers degrade past ~1k. Consider clustering via the .instance escape hatch.`);let j=Se.remove;return Se.remove=()=>{j(),N.current.delete(de),H.current===de&&(H.current=null);},p===de&&Se.setHovered(true),Se}}),[Y]);return y__namespace.createElement("div",{ref:O,"data-gds-part":"map",className:d("gds-map relative isolate overflow-hidden",h),style:f},y__namespace.createElement(Gi.Provider,{value:De},b))});Wi.displayName="Map";function qp(e,t){let o=()=>{};return {flyTo:(a,n)=>{let r=e.current;if(!r)return;let i;if(typeof a=="string"){if(i=t.current.get(a)?.coords??null,!i){console.warn(`@gradeui/ui Map.flyTo: no marker registered with id "${a}".`);return}}else i=a;r.flyTo(i,n);},panTo:(a,n)=>e.current?.panTo(a,n)??o(),fitBounds:(a,n)=>e.current?.fitBounds(a,n)??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 Ui=y__namespace.memo(function({id:t,at:o,anchor:a="bottom",className:n,children:r,onClick:i}){let l=Ep(),[s,c]=y__namespace.useState(null),p=y__namespace.useRef(null),m=y__namespace.useRef(i);return y__namespace.useEffect(()=>{m.current=i;}),y__namespace.useEffect(()=>{if(!l)return;let u=l.registerMarker(t,o,a);if(u){p.current=u,c(u.element);let g=h=>{m.current?.({id:t,coords:u.coords,native:h});};return u.element.addEventListener("click",g),()=>{u.element.removeEventListener("click",g),u.remove(),p.current=null,c(null);}}},[l,t]),y__namespace.useEffect(()=>{p.current?.setPosition(o);},[o[0],o[1]]),s?reactDom.createPortal(y__namespace.createElement("div",{"data-gds-part":"map-marker-content",className:d("pointer-events-auto",n)},r),s):null});Ui.displayName="MapMarker";var Dv={video:"aspect-video",standard:"aspect-[4/3]",square:"aspect-square",portrait:"aspect-[3/4]",wide:"aspect-[21/9]",auto:""},Av={video:"16 / 9",standard:"4 / 3",square:"1 / 1",portrait:"3 / 4",wide:"21 / 9",auto:"auto"},Iv={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)"},Hv={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},Fv={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 zv(e){if(!e)return null;switch(e.kind){case "album":return `album:${e.artist}|${e.title}|${e.year??""}`;case "tv-show":return `tv-show:${e.title}|${e.year??""}`;case "movie":return `movie:${e.title}|${e.year??""}`;case "game":return `game:${e.title}`;case "book":return `book:${e.isbn??""}|${e.title??""}|${e.author??""}`;case "poster":return `poster:${e.title}|${e.year??""}`;case "portrait":return `portrait:${e.name??""}|${e.role??""}`;case "landscape":return `landscape:${e.location??""}|${e.mood??""}`;case "product":return `product:${e.brand??""}|${e.name??""}`;case "food":return `food:${e.dish??""}|${e.cuisine??""}`;case "generic":return `generic:${e.prompt}`;default:return `${e.kind}:`}}function Bv(e){let t=zv(e),[o,a]=y__namespace.useState(0);return y__namespace.useEffect(()=>{if(typeof window>"u")return;let n=()=>a(r=>r+1);return window.addEventListener("grade:media-pending-updated",n),()=>window.removeEventListener("grade:media-pending-updated",n)},[]),y__namespace.useEffect(()=>{},[o]),!t||typeof window>"u"?false:!!window.__gradeMediaPending?.[t]}function Vv(e){if(!e)return "";let t=/^(the|a|an|and|for|by|of|in|on|at|to)$/i,o=e.trim().split(/\s+/).filter(a=>a&&!t.test(a));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 _v(e){return e<64?"sm":e>=160?"lg":"md"}var so=y__namespace.forwardRef(({className:e,aspect:t,radius:o="lg",border:a=false,loading:n=false,onVisibilityChange:r,fallback:i,emptyState:l="auto",hint:s="generic",alt:c,source:p,src:m,glyph:u,overlay:g,instanceId:h,style:f,children:b,...v},S)=>{let x=y__namespace.useRef(null);y__namespace.useImperativeHandle(S,()=>x.current);let w=s,k=t,C=o,E=a,F=n,O=c,M=m,N=l,H=k??Fv[w],Y=k!=null;y__namespace.useEffect(()=>{if(!r||!x.current)return;let T=x.current,Z=new IntersectionObserver(([$])=>r($.isIntersecting),{threshold:.05});return Z.observe(T),()=>Z.disconnect()},[r]);let se=M,[D,V]=y__namespace.useState(false);y__namespace.useEffect(()=>{V(false);},[se]);let R=D?void 0:se,_=!b&&N!=="none",[le,X]=y__namespace.useState("md");y__namespace.useEffect(()=>{if(!_)return;let T=x.current;if(!T)return;let Z=new ResizeObserver(([$])=>{let Se=$.contentRect.width;X(_v(Se));});return Z.observe(T),()=>Z.disconnect()},[_]);let U=y__namespace.useMemo(()=>Vv(O),[O]),J=Hv[w]??lucideReact.Image,ke=N==="auto"||N==="icon",De=y__namespace.useMemo(()=>p?JSON.stringify(p):void 0,[p]),de=Bv(p)&&!R;return y__namespace.createElement("div",{ref:x,"data-gds-part":"media-surface","data-media-hint":w,"data-media-source-kind":p?.kind,"data-media-source":De,"data-media-alt":O,"data-gds-instance-id":h,className:d("gds-media-surface relative w-full overflow-hidden",!Y&&Dv[H],E&&"border border-border",e),style:{...Y?{aspectRatio:Av[H]}:{},borderRadius:`var(--gds-media-radius, ${Iv[C]})`,...f},...v},_&&y__namespace.createElement("div",{"data-gds-part":"media-surface-placeholder","data-tier":le,"data-filled":R?"":void 0,"data-fill-pending":de||void 0,className:d("absolute inset-0 z-0 flex flex-col items-center justify-center gap-2 pointer-events-none px-3 text-center",de&&"gds-aura-shimmer"),style:{position:"absolute",background:"var(--gds-media-placeholder-bg)",color:"var(--gds-media-placeholder-fg)",...de?{"--aura-shimmer-duration":"1400ms","--aura-shimmer-delay-between":"400ms"}:null},"aria-hidden":true},ke?le==="sm"?U?y__namespace.createElement("span",{className:"font-semibold text-sm tracking-tight"},U):y__namespace.createElement(J,{className:"h-1/2 w-1/2 max-h-6 max-w-6"}):le==="md"?y__namespace.createElement(y__namespace.Fragment,null,u??y__namespace.createElement(J,{className:"h-1/3 w-1/3 max-h-10 max-w-10"})):y__namespace.createElement(y__namespace.Fragment,null,u??y__namespace.createElement(J,{className:"h-1/4 w-1/4 max-h-12 max-w-12"}),O&&y__namespace.createElement("span",{className:"text-xs leading-snug line-clamp-2 max-w-[80%]","data-gds-part":"media-surface-caption"},O)):N),(R||b)&&y__namespace.createElement("div",{"data-gds-part":"media-surface-content",className:"absolute inset-0 z-[1]"},R&&y__namespace.createElement("img",{src:R,alt:O??"",onError:()=>V(true),className:"absolute inset-0 h-full w-full object-cover","data-gds-part":"media-surface-img"}),b),F&&y__namespace.createElement("div",{className:"absolute inset-0 z-[2] flex items-center justify-center bg-muted animate-pulse","aria-hidden":true},i),g&&y__namespace.createElement("div",{"data-gds-part":"media-surface-overlay",className:"absolute inset-0 z-10"},g))});so.displayName="MediaSurface";var Zp=y__namespace.forwardRef(({src:e,controls:t=true,autoPlay:o=false,loop:a=false,muted:n,pauseOffscreen:r=true,aspect:i="video",radius:l="lg",border:s=false,poster:c,label:p,className:m,style:u,playbackRate:g=1,objectFit:h="cover"},f)=>{let b=y__namespace.useRef(null),v=Io(),[S,x]=y__namespace.useState(!!c);y__namespace.useImperativeHandle(f,()=>b.current);let w=n??o,k=o&&!v;y__namespace.useEffect(()=>{b.current&&(b.current.playbackRate=g);},[g]),y__namespace.useEffect(()=>{x(!!c);},[c]);let C=y__namespace.useCallback(E=>{!r||!b.current||(E&&k?b.current.play().catch(()=>{}):b.current.pause());},[r,k]);return y__namespace.createElement(so,{aspect:i,radius:l,border:s,"aria-label":p,className:m,style:u,onVisibilityChange:r?C:void 0},y__namespace.createElement("video",{ref:b,src:e,controls:t,autoPlay:k,loop:a,muted:w,playsInline:true,preload:k?"auto":"metadata",onPlaying:()=>x(false),className:d("w-full h-full",h==="cover"&&"object-cover",h==="contain"&&"object-contain",h==="fill"&&"object-fill")},"Your browser does not support the video tag."),c&&S&&y__namespace.createElement("img",{src:c,alt:"","aria-hidden":"true",loading:"lazy",decoding:"async","data-gds-part":"video-poster",className:d("absolute inset-0 w-full h-full pointer-events-none transition-opacity duration-200",h==="cover"&&"object-cover",h==="contain"&&"object-contain",h==="fill"&&"object-fill")}))});Zp.displayName="VideoPlayer";var Xp=y__namespace.forwardRef(({src:e,controls:t=false,autoPlay:o=true,loop:a=true,pauseOffscreen:n=true,aspect:r="square",radius:i="lg",border:l=false,poster:s,label:c,className:p,style:m,stateMachines:u,artboard:g,fit:h="contain",stateMachineInputs:f},b)=>{let v=Io(),[S,x]=y__namespace.useState(null),[w,k]=y__namespace.useState(null);return y__namespace.useEffect(()=>{let C=false;return import('@rive-app/react-canvas').then(E=>{C||x(E);}).catch(()=>{C||k("Rive runtime not installed. Run `npm install @rive-app/react-canvas`.");}),()=>{C=true;}},[]),y__namespace.createElement(so,{ref:b,aspect:r,radius:i,border:l,"aria-label":c,className:p,style:m},w?y__namespace.createElement("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4 text-center"},w):S&&e?y__namespace.createElement(Wv,{Mod:S,src:e,stateMachines:u,artboard:g,fit:h,stateMachineInputs:f,autoPlay:o&&!v,loop:a,pauseOffscreen:n,controls:t,poster:s}):s&&y__namespace.createElement("img",{src:s,alt:"",className:"w-full h-full object-contain"}))});Xp.displayName="RivePlayer";function Wv({Mod:e,src:t,stateMachines:o,artboard:a,fit:n,autoPlay:r,loop:i,pauseOffscreen:l,controls:s,poster:c}){let{useRive:p,Layout:m,Fit:u,Alignment:g,EventType:h}=e,f={contain:u.Contain,cover:u.Cover,fill:u.Fill,fitWidth:u.FitWidth,fitHeight:u.FitHeight,none:u.None},{rive:b,RiveComponent:v}=p({src:t,stateMachines:o,artboard:a,autoplay:r,layout:new m({fit:f[n],alignment:g.Center})}),[S,x]=y__namespace.useState(r);y__namespace.useEffect(()=>{if(!b||!i)return;let k=()=>{b.play();};return b.on(h.Stop,k),()=>{b.off(h.Stop,k);}},[b,i,h]),y__namespace.useEffect(()=>{if(!l||!b)return;let k=b.canvas;if(!k)return;let C=new IntersectionObserver(([E])=>{E.isIntersecting&&r?b.play():b.pause();},{threshold:.05});return C.observe(k),()=>C.disconnect()},[b,l,r]);let w=()=>{b&&(S?(b.pause(),x(false)):(b.play(),x(true)));};return y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement(v,{className:"w-full h-full"}),!b&&c&&y__namespace.createElement("img",{src:c,alt:"",className:"absolute inset-0 w-full h-full object-contain pointer-events-none"}),s&&y__namespace.createElement("div",{className:d("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/40 to-transparent")},y__namespace.createElement(et,{size:"icon",variant:"secondary",onClick:w},S?y__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):y__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))}var Uv={sm:20,md:28,lg:40,xl:56},$v={horizontal:["horizontal","square","icon"],square:["square","icon","horizontal"],icon:["icon","square","horizontal"]};function jv(e,t,o,a){for(let n of $v[t]){let r=e[n];if(!r)continue;let i=o==="dark"?r.dark??r.light:r.light??r.dark,l=a?r.mono??i:i??r.mono;if(l!=null)return l}return null}var Kv=y__namespace.forwardRef(function({sources:t={},lockup:o="horizontal",mode:a="light",mono:n=false,size:r="md",label:i,decorative:l=false,href:s,className:c,style:p,...m},u){let g=typeof r=="number"?r:Uv[r],h=jv(t,o,a,n),f=l?{"aria-hidden":true}:i?s?{}:{role:"img","aria-label":i}:{},b=h??y__namespace.createElement(qv,{label:i}),v=y__namespace.createElement("span",{className:d("gds-logo inline-flex shrink-0 select-none items-center","[&_img]:h-full [&_img]:w-auto [&_svg]:h-full [&_svg]:w-auto",c),style:{height:g,...p},"data-gds-part":"logo","data-gds-lockup":o,"data-gds-mode":a,...s?{}:f,...s?{}:m},b);return s?y__namespace.createElement("a",{ref:u,href:s,"aria-label":l?void 0:i,className:"inline-flex",...l?{"aria-hidden":true}:{},...m},v):y__namespace.cloneElement(v,{ref:u})});function qv({label:e}){return y__namespace.createElement("svg",{viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e?{}:{"aria-hidden":true}},y__namespace.createElement("path",{d:"M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",fill:"currentColor"}))}var Jp="M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",Yv={sm:16,md:24,lg:32,xl:48},Qp=y__namespace.forwardRef(({size:e="md",label:t="Loading\u2026",showLabel:o=false,className:a,style:n,...r},i)=>{let l=typeof e=="number"?e:Yv[e],s=y__namespace.useId().replace(/[^a-zA-Z0-9-]/g,"");return y__namespace.createElement("div",{ref:i,"data-gds-part":"grade-loader",role:"status","aria-label":t||void 0,className:d("gds-grade-loader inline-flex flex-col items-center gap-2",a),style:n,...r},y__namespace.createElement("style",null,`
352
354
  @keyframes gdsLoaderSweep { from { transform: translate(-48px, 48px) } to { transform: translate(48px, -48px) } }
353
355
  @keyframes gdsLoaderPulse { 0%, 100% { opacity: 0.35 } 50% { opacity: 0.9 } }
354
356
  @media (prefers-reduced-motion: reduce) {
355
357
  .gds-grade-loader [data-sweep] { display: none }
356
358
  .gds-grade-loader [data-mark] { animation: gdsLoaderPulse 2.2s ease-in-out infinite }
357
359
  }
358
- `),v__namespace.createElement("svg",{width:p,height:p,viewBox:"0 0 32 32",fill:"none","aria-hidden":true,style:{display:"block"}},v__namespace.createElement("defs",null,v__namespace.createElement("clipPath",{id:`${s}-clip`},v__namespace.createElement("path",{d:np})),v__namespace.createElement("linearGradient",{id:`${s}-shine`,x1:"0",y1:"1",x2:"1",y2:"0"},v__namespace.createElement("stop",{offset:"0.35",stopColor:"currentColor",stopOpacity:"0"}),v__namespace.createElement("stop",{offset:"0.5",stopColor:"oklch(var(--brand-1, 0.7 0 0))",stopOpacity:"0.95"}),v__namespace.createElement("stop",{offset:"0.65",stopColor:"currentColor",stopOpacity:"0"}))),v__namespace.createElement("path",{d:np,fill:"currentColor",opacity:.28,"data-mark":true}),v__namespace.createElement("g",{clipPath:`url(#${s}-clip)`},v__namespace.createElement("rect",{"data-sweep":true,x:-16,y:-16,width:64,height:64,fill:`url(#${s}-shine)`,style:{animation:"gdsLoaderSweep 1.4s cubic-bezier(0.45, 0, 0.55, 1) infinite"}}))),o&&t?v__namespace.createElement("span",{className:"text-xs text-muted-foreground"},t):null,!o&&t?v__namespace.createElement("span",{className:"sr-only"},t):null)});ip.displayName="GradeLoader";var di=1150,ci=1500,xb="translate(101%, 95%) scale(0.18)",wb="translate(122%, 36%) scale(0.2)",Rb="var(--gds-canvas-fill, radial-gradient(circle at 50% 38%, #1b1b22, #0b0b0e))",Sb="cubic-bezier(0.34, 1.16, 0.64, 1)",kb="cubic-bezier(0.65, 0, 0.35, 1)";function pi(e,t){let o=e.zoom??1,r=e.cx??.5,n=e.cy??.5;return {transform:`translate(${(.5-r*o)*100}%, ${(.5-n*o)*100}%) scale(${o})`,zoom:o,label:e.label??null,opacity:1,hold:e.hold??2400,trans:t}}var sp={display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:999,border:"none",background:"transparent",color:"#fff",cursor:"pointer"};function Cb(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},v__namespace.createElement("path",{d:"M8 5v14l11-7z"}))}function Tb(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},v__namespace.createElement("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),v__namespace.createElement("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"}))}function lp(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},v__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),v__namespace.createElement("path",{d:"M3 3v5h5"}))}function ui({shots:e,autoplay:t=true,loop:o=true,maxLoops:r=1/0,controls:n=true,paused:a,onEnded:i,spotlight:p=false,cursor:s=true,enter:c=true,captionPosition:l="bottom",stage:g=Rb,backdrop:u,className:m,style:h,children:f}){let b=Jt(),y=v__namespace.useRef(null),R=Er(),w=react.useInView(y,{amount:.25}),x=R&&w,S=v__namespace.useMemo(()=>{let j=e&&e.length>0?e:[{zoom:1}],Z=[];c&&Z.push({transform:xb,zoom:.18,label:null,opacity:0,hold:360,trans:0}),Z.push(pi(j[0],c?ci:0));for(let ae=1;ae<j.length;ae++)Z.push(pi(j[ae],di));return o&&(Z.push(pi(j[0],ci)),Z.push({transform:wb,zoom:.2,label:null,opacity:0,hold:520,trans:ci})),Z},[e,c,o]),M=c&&S.length>1?1:0,[A,H]=v__namespace.useState(t?0:M),[W,z]=v__namespace.useState(t),[F,B]=v__namespace.useState(false),q=v__namespace.useRef(0),ie=v__namespace.useCallback(()=>{q.current=0,B(false),H(0),z(true);},[]);v__namespace.useEffect(()=>{a!==void 0&&(a?z(false):F||z(true));},[a,F]);let N=v__namespace.useRef(i);v__namespace.useEffect(()=>{N.current=i;}),v__namespace.useEffect(()=>{F&&N.current?.();},[F]),v__namespace.useEffect(()=>{if(b||!W||!x||S.length<=1)return;let j=setTimeout(()=>{H(Z=>{let ae=Z+1;return ae>=S.length?o&&q.current+1<r?(q.current+=1,0):(z(false),B(true),M):ae});},S[A].hold);return ()=>clearTimeout(j)},[A,W,x,b,S,o,r,M]);let ue=b?M:Math.min(A,S.length-1),k=S[ue]??S[0],G=k.opacity===1&&k.zoom>1.05,he=b?0:k.trans,I=k.zoom<=1.05?Sb:kb;return v__namespace.createElement("div",{ref:y,className:d("gds-screen-animator",m),"data-gds-part":"screen-animator",style:{position:"absolute",inset:0,overflow:"hidden",background:g,...h}},v__namespace.createElement("style",null,`
360
+ `),y__namespace.createElement("svg",{width:l,height:l,viewBox:"0 0 32 32",fill:"none","aria-hidden":true,style:{display:"block"}},y__namespace.createElement("defs",null,y__namespace.createElement("clipPath",{id:`${s}-clip`},y__namespace.createElement("path",{d:Jp})),y__namespace.createElement("linearGradient",{id:`${s}-shine`,x1:"0",y1:"1",x2:"1",y2:"0"},y__namespace.createElement("stop",{offset:"0.35",stopColor:"currentColor",stopOpacity:"0"}),y__namespace.createElement("stop",{offset:"0.5",stopColor:"oklch(var(--brand-1, 0.7 0 0))",stopOpacity:"0.95"}),y__namespace.createElement("stop",{offset:"0.65",stopColor:"currentColor",stopOpacity:"0"}))),y__namespace.createElement("path",{d:Jp,fill:"currentColor",opacity:.28,"data-mark":true}),y__namespace.createElement("g",{clipPath:`url(#${s}-clip)`},y__namespace.createElement("rect",{"data-sweep":true,x:-16,y:-16,width:64,height:64,fill:`url(#${s}-shine)`,style:{animation:"gdsLoaderSweep 1.4s cubic-bezier(0.45, 0, 0.55, 1) infinite"}}))),o&&t?y__namespace.createElement("span",{className:"text-xs text-muted-foreground"},t):null,!o&&t?y__namespace.createElement("span",{className:"sr-only"},t):null)});Qp.displayName="GradeLoader";var $i=1150,ji=1500,Xv="translate(101%, 95%) scale(0.18)",Jv="translate(122%, 36%) scale(0.2)",Qv="var(--gds-canvas-fill, radial-gradient(circle at 50% 38%, #1b1b22, #0b0b0e))",ey="cubic-bezier(0.34, 1.16, 0.64, 1)",ty="cubic-bezier(0.65, 0, 0.35, 1)";function Ki(e,t){let o=e.zoom??1,a=e.cx??.5,n=e.cy??.5;return {transform:`translate(${(.5-a*o)*100}%, ${(.5-n*o)*100}%) scale(${o})`,zoom:o,label:e.label??null,opacity:1,hold:e.hold??2400,trans:t}}var eu={display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:999,border:"none",background:"transparent",color:"#fff",cursor:"pointer"};function oy(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},y__namespace.createElement("path",{d:"M8 5v14l11-7z"}))}function ay(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},y__namespace.createElement("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),y__namespace.createElement("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"}))}function tu(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},y__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),y__namespace.createElement("path",{d:"M3 3v5h5"}))}function qi({shots:e,autoplay:t=true,loop:o=true,maxLoops:a=1/0,controls:n=true,paused:r,onEnded:i,spotlight:l=false,cursor:s=true,enter:c=true,captionPosition:p="bottom",stage:m=Qv,backdrop:u,className:g,style:h,children:f}){let b=yo(),v=y__namespace.useRef(null),S=Za(),x=react.useInView(v,{amount:.25}),w=S&&x,k=y__namespace.useMemo(()=>{let U=e&&e.length>0?e:[{zoom:1}],J=[];c&&J.push({transform:Xv,zoom:.18,label:null,opacity:0,hold:360,trans:0}),J.push(Ki(U[0],c?ji:0));for(let ke=1;ke<U.length;ke++)J.push(Ki(U[ke],$i));return o&&(J.push(Ki(U[0],ji)),J.push({transform:Jv,zoom:.2,label:null,opacity:0,hold:520,trans:ji})),J},[e,c,o]),C=c&&k.length>1?1:0,[E,F]=y__namespace.useState(t?0:C),[O,M]=y__namespace.useState(t),[N,H]=y__namespace.useState(false),Y=y__namespace.useRef(0),se=y__namespace.useCallback(()=>{Y.current=0,H(false),F(0),M(true);},[]);y__namespace.useEffect(()=>{r!==void 0&&(r?M(false):N||M(true));},[r,N]);let D=y__namespace.useRef(i);y__namespace.useEffect(()=>{D.current=i;}),y__namespace.useEffect(()=>{N&&D.current?.();},[N]),y__namespace.useEffect(()=>{if(b||!O||!w||k.length<=1)return;let U=setTimeout(()=>{F(J=>{let ke=J+1;return ke>=k.length?o&&Y.current+1<a?(Y.current+=1,0):(M(false),H(true),C):ke});},k[E].hold);return ()=>clearTimeout(U)},[E,O,w,b,k,o,a,C]);let V=b?C:Math.min(E,k.length-1),R=k[V]??k[0],_=R.opacity===1&&R.zoom>1.05,le=b?0:R.trans,X=R.zoom<=1.05?ey:ty;return y__namespace.createElement("div",{ref:v,className:d("gds-screen-animator",g),"data-gds-part":"screen-animator",style:{position:"absolute",inset:0,overflow:"hidden",background:m,...h}},y__namespace.createElement("style",null,`
359
361
  @keyframes gdsSaPing { from { transform: scale(0.4); opacity: 0.9 } to { transform: scale(1.8); opacity: 0 } }
360
362
  @keyframes gdsSaPulse { 0%,100% { opacity: 1 } 50% { opacity: 0.5 } }
361
- `),u&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},u),v__namespace.createElement("div",{style:{position:"absolute",inset:0,transform:k.transform,transformOrigin:"0 0",opacity:k.opacity,transition:`transform ${he}ms ${I}, opacity 700ms ease`}},f),p&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none",background:"radial-gradient(circle at 50% 50%, transparent 26%, rgba(0,0,0,0.46) 80%)",opacity:G?1:0,transition:`opacity ${di}ms ease`}}),s&&v__namespace.createElement("div",{key:ue,"aria-hidden":true,style:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",opacity:G?1:0,transition:`opacity ${di}ms ease`}},v__namespace.createElement("span",{style:{position:"absolute",left:-19,top:-19,width:38,height:38,borderRadius:999,border:"2px solid rgba(59,130,246,0.75)",animation:"gdsSaPing 1100ms ease-out 0.4s 1"}}),v__namespace.createElement("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none"},v__namespace.createElement("path",{d:"M5 3l14 7-6 1.5L10 18 5 3z",fill:"#fff",stroke:"#111",strokeWidth:"1.5",strokeLinejoin:"round"}))),v__namespace.createElement("div",{role:"status","aria-live":"polite","aria-atomic":"true",style:{position:"absolute",left:"50%",[l==="top"?"top":"bottom"]:22,transform:"translateX(-50%)",pointerEvents:"none"}},k.label&&v__namespace.createElement("span",{style:{display:"inline-flex",alignItems:"center",gap:9,padding:"8px 14px",borderRadius:999,background:"rgba(15,15,17,0.62)",color:"#fff",fontSize:13.5,fontWeight:600,backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},v__namespace.createElement("span",{"aria-hidden":true,style:{width:7,height:7,borderRadius:999,background:"#34d399",animation:"gdsSaPulse 1600ms ease-in-out infinite"}}),k.label)),n&&S.length>1&&!b&&v__namespace.createElement("div",{role:"group","aria-label":"Demo playback controls",style:{position:"absolute",right:16,bottom:16,display:"flex",gap:4,alignItems:"center",padding:"4px 6px",borderRadius:999,background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},v__namespace.createElement("button",{type:"button",onClick:()=>F?ie():z(j=>!j),"aria-label":F?"Replay":W?"Pause":"Play",style:sp},F?v__namespace.createElement(lp,null):W?v__namespace.createElement(Tb,null):v__namespace.createElement(Cb,null)),v__namespace.createElement("button",{type:"button",onClick:ie,"aria-label":"Restart",style:sp},v__namespace.createElement(lp,null))),F&&!b&&v__namespace.createElement("button",{type:"button",onClick:ie,"aria-label":"Replay",style:{position:"absolute",inset:0,margin:"auto",width:64,height:64,display:"grid",placeItems:"center",borderRadius:999,border:"none",color:"#fff",background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 8px 30px rgba(0,0,0,0.35)",cursor:"pointer"}},v__namespace.createElement("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},v__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),v__namespace.createElement("path",{d:"M3 3v5h5"}))))}var mp=v__namespace.createContext(null),Pb={mode:"play",active:true,paused:false,register:()=>({done:()=>{},cancel:()=>{}})};function fi(){return v__namespace.useContext(mp)??Pb}var Mb="var(--gds-canvas-fill, radial-gradient(circle at 50% 38%, #1b1b22, #0b0b0e))";function Nb({label:e,onSkip:t}){return v__namespace.useEffect(()=>{if(!t)return;let o=setTimeout(t,1400);return ()=>clearTimeout(o)},[t]),v__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",pointerEvents:"none"}},v__namespace.createElement("span",{style:{padding:"8px 14px",borderRadius:999,background:"rgba(15,15,17,0.6)",border:"1px solid rgba(255,255,255,0.16)",color:"rgba(255,255,255,0.75)",fontSize:12.5,backdropFilter:"blur(10px)"}},e?`Scene \u201C${e}\u201D hit an error`:"This scene hit an error",t?" \u2014 skipping":""))}var Kr=class extends v__namespace.Component{state={failed:false};static getDerivedStateFromError(){return {failed:true}}componentDidCatch(){}render(){return this.state.failed?v__namespace.createElement(Nb,{label:this.props.label,onSkip:this.props.onSkip}):this.props.children}};function dp({virtualWidth:e,children:t}){let o=v__namespace.useRef(null),[r,n]=v__namespace.useState(null);v__namespace.useEffect(()=>{let i=o.current;if(!i)return;let p=()=>n({w:i.clientWidth||1,h:i.clientHeight||1});p();let s=new ResizeObserver(p);return s.observe(i),()=>s.disconnect()},[]);let a=r?r.w/e:0;return v__namespace.createElement("div",{ref:o,style:{position:"absolute",inset:0,overflow:"hidden"}},r&&a>0&&v__namespace.createElement("div",{style:{width:e,height:r.h/a,transform:`scale(${a})`,transformOrigin:"0 0"}},t))}function Eb(e){let t=e.match(/^\s*([0-9.]+)\s*\/\s*([0-9.]+)\s*$/);if(!t)return null;let o=Number(t[1])/Number(t[2]);return Number.isFinite(o)&&o>0?o:null}function Lb({ratio:e,children:t}){let o=v__namespace.useRef(null),[r,n]=v__namespace.useState(null);return v__namespace.useEffect(()=>{let a=o.current;if(!a)return;let i=()=>{let s=a.clientWidth||1,c=a.clientHeight||1,l=Math.min(s,c*e);n({w:l,h:l/e});};i();let p=new ResizeObserver(i);return p.observe(a),()=>p.disconnect()},[e]),v__namespace.createElement("div",{ref:o,style:{position:"absolute",inset:0}},r&&v__namespace.createElement("div",{style:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",width:r.w,height:r.h,overflow:"hidden"}},t))}function gp({device:e="desktop",shots:t,virtualWidth:o,spotlight:r=false,cursor:n=true,enter:a=false,animate:i="none",screenId:p,className:s,style:c,children:l}){let g=fi(),u=o??(e==="mobile"?390:1100),m=v__namespace.useRef(null),h=g.mode==="play"&&g.active,{register:f}=g;v__namespace.useEffect(()=>{if(!h)return;let y=f();return m.current=y,()=>{m.current=null,y.cancel();}},[h,f]);let b=e==="mobile"?{position:"relative",height:"76%",aspectRatio:"390 / 800",borderRadius:22,flex:"0 0 auto"}:{position:"relative",flex:"1 1 0%",maxWidth:"82%",aspectRatio:"16 / 10",minWidth:0,borderRadius:12};return v__namespace.createElement("div",{"data-gds-part":"motion-screen",className:d("gds-motion-screen",s),style:{...b,overflow:"hidden",background:"var(--gds-background, #fff)",boxShadow:"0 18px 60px rgba(0,0,0,0.38), 0 2px 10px rgba(0,0,0,0.22)",...h&&cp[i]?{animation:cp[i]}:{},...c}},h?v__namespace.createElement(ui,{shots:t,loop:false,controls:false,enter:a,spotlight:r,cursor:n,stage:"transparent",paused:g.paused,onEnded:()=>m.current?.done()},v__namespace.createElement(dp,{virtualWidth:u},l)):v__namespace.createElement(dp,{virtualWidth:u},l))}var fp={title:3800,"lower-third":3200,"section-break":4200,broadcast:4200,ticker:6e3,stat:4200,quote:5200};function hp({template:e="title",heading:t,text:o,durationMs:r,tone:n="light",lift:a="none",className:i,style:p}){let s=fi(),c=Jt(),l=r??fp[e],g=s.mode==="play"&&s.active,u=g&&!c,m=v__namespace.useRef(null),h=v__namespace.useRef(l),{register:f,paused:b}=s;v__namespace.useEffect(()=>{if(!g)return;h.current=l;let S=f();return m.current=S,()=>{m.current=null,S.cancel();}},[g,l,f]),v__namespace.useEffect(()=>{if(!g||b)return;let S=Date.now(),M=setTimeout(()=>{h.current=0,m.current?.done();},h.current);return ()=>{clearTimeout(M),h.current=Math.max(0,h.current-(Date.now()-S));}},[g,b]);let y=n==="dark"?"#16161a":"#fff",R=a==="none"?void 0:n==="dark"?"0 1px 2px rgba(255,255,255,0.55), 0 2px 24px rgba(255,255,255,0.45)":"0 1px 2px rgba(0,0,0,0.35), 0 2px 28px rgba(0,0,0,0.30)",w=b?"paused":"running",x=(S,M,A=0)=>u?{animation:`${S} ${M}ms cubic-bezier(0.22, 1, 0.36, 1) ${A}ms both`,animationPlayState:w}:{};return v__namespace.createElement("div",{"data-gds-part":"motion-text",className:d("gds-motion-text",i),style:{position:e==="lower-third"||e==="broadcast"||e==="ticker"?"absolute":"relative",...e==="lower-third"?{left:"6%",bottom:"9%"}:e==="broadcast"?{left:0,right:0,bottom:"6%"}:e==="ticker"?{left:0,right:0,bottom:0}:e==="quote"?{textAlign:"center",maxWidth:"64%"}:{textAlign:"center",maxWidth:"72%"},color:y,textShadow:R,isolation:a==="scrim"?"isolate":void 0,pointerEvents:"none",...p}},a==="scrim"&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:"-30% -20%",zIndex:-1,pointerEvents:"none",background:n==="dark"?"radial-gradient(ellipse at center, rgba(255,255,255,0.45), transparent 70%)":"radial-gradient(ellipse at center, rgba(0,0,0,0.34), transparent 70%)",filter:"blur(2px)"}}),v__namespace.createElement("style",null,`
363
+ `),u&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},u),y__namespace.createElement("div",{style:{position:"absolute",inset:0,transform:R.transform,transformOrigin:"0 0",opacity:R.opacity,transition:`transform ${le}ms ${X}, opacity 700ms ease`}},f),l&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none",background:"radial-gradient(circle at 50% 50%, transparent 26%, rgba(0,0,0,0.46) 80%)",opacity:_?1:0,transition:`opacity ${$i}ms ease`}}),s&&y__namespace.createElement("div",{key:V,"aria-hidden":true,style:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",opacity:_?1:0,transition:`opacity ${$i}ms ease`}},y__namespace.createElement("span",{style:{position:"absolute",left:-19,top:-19,width:38,height:38,borderRadius:999,border:"2px solid rgba(59,130,246,0.75)",animation:"gdsSaPing 1100ms ease-out 0.4s 1"}}),y__namespace.createElement("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none"},y__namespace.createElement("path",{d:"M5 3l14 7-6 1.5L10 18 5 3z",fill:"#fff",stroke:"#111",strokeWidth:"1.5",strokeLinejoin:"round"}))),y__namespace.createElement("div",{role:"status","aria-live":"polite","aria-atomic":"true",style:{position:"absolute",left:"50%",[p==="top"?"top":"bottom"]:22,transform:"translateX(-50%)",pointerEvents:"none"}},R.label&&y__namespace.createElement("span",{style:{display:"inline-flex",alignItems:"center",gap:9,padding:"8px 14px",borderRadius:999,background:"rgba(15,15,17,0.62)",color:"#fff",fontSize:13.5,fontWeight:600,backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},y__namespace.createElement("span",{"aria-hidden":true,style:{width:7,height:7,borderRadius:999,background:"#34d399",animation:"gdsSaPulse 1600ms ease-in-out infinite"}}),R.label)),n&&k.length>1&&!b&&y__namespace.createElement("div",{role:"group","aria-label":"Demo playback controls",style:{position:"absolute",right:16,bottom:16,display:"flex",gap:4,alignItems:"center",padding:"4px 6px",borderRadius:999,background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},y__namespace.createElement("button",{type:"button",onClick:()=>N?se():M(U=>!U),"aria-label":N?"Replay":O?"Pause":"Play",style:eu},N?y__namespace.createElement(tu,null):O?y__namespace.createElement(ay,null):y__namespace.createElement(oy,null)),y__namespace.createElement("button",{type:"button",onClick:se,"aria-label":"Restart",style:eu},y__namespace.createElement(tu,null))),N&&!b&&y__namespace.createElement("button",{type:"button",onClick:se,"aria-label":"Replay",style:{position:"absolute",inset:0,margin:"auto",width:64,height:64,display:"grid",placeItems:"center",borderRadius:999,border:"none",color:"#fff",background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 8px 30px rgba(0,0,0,0.35)",cursor:"pointer"}},y__namespace.createElement("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},y__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),y__namespace.createElement("path",{d:"M3 3v5h5"}))))}var iu=y__namespace.createContext(null),ry={mode:"play",active:true,paused:false,register:()=>({done:()=>{},cancel:()=>{}})};function Xi(){return y__namespace.useContext(iu)??ry}var ny="var(--gds-canvas-fill, radial-gradient(circle at 50% 38%, #1b1b22, #0b0b0e))";function iy({label:e,onSkip:t}){return y__namespace.useEffect(()=>{if(!t)return;let o=setTimeout(t,1400);return ()=>clearTimeout(o)},[t]),y__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",pointerEvents:"none"}},y__namespace.createElement("span",{style:{padding:"8px 14px",borderRadius:999,background:"rgba(15,15,17,0.6)",border:"1px solid rgba(255,255,255,0.16)",color:"rgba(255,255,255,0.75)",fontSize:12.5,backdropFilter:"blur(10px)"}},e?`Scene \u201C${e}\u201D hit an error`:"This scene hit an error",t?" \u2014 skipping":""))}var xr=class extends y__namespace.Component{state={failed:false};static getDerivedStateFromError(){return {failed:true}}componentDidCatch(){}render(){return this.state.failed?y__namespace.createElement(iy,{label:this.props.label,onSkip:this.props.onSkip}):this.props.children}};function ou({virtualWidth:e,children:t}){let o=y__namespace.useRef(null),[a,n]=y__namespace.useState(null);y__namespace.useEffect(()=>{let i=o.current;if(!i)return;let l=()=>n({w:i.clientWidth||1,h:i.clientHeight||1});l();let s=new ResizeObserver(l);return s.observe(i),()=>s.disconnect()},[]);let r=a?a.w/e:0;return y__namespace.createElement("div",{ref:o,style:{position:"absolute",inset:0,overflow:"hidden"}},a&&r>0&&y__namespace.createElement("div",{style:{width:e,height:a.h/r,transform:`scale(${r})`,transformOrigin:"0 0"}},t))}function sy(e){let t=e.match(/^\s*([0-9.]+)\s*\/\s*([0-9.]+)\s*$/);if(!t)return null;let o=Number(t[1])/Number(t[2]);return Number.isFinite(o)&&o>0?o:null}function ly({ratio:e,children:t}){let o=y__namespace.useRef(null),[a,n]=y__namespace.useState(null);return y__namespace.useEffect(()=>{let r=o.current;if(!r)return;let i=()=>{let s=r.clientWidth||1,c=r.clientHeight||1,p=Math.min(s,c*e);n({w:p,h:p/e});};i();let l=new ResizeObserver(i);return l.observe(r),()=>l.disconnect()},[e]),y__namespace.createElement("div",{ref:o,style:{position:"absolute",inset:0}},a&&y__namespace.createElement("div",{style:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",width:a.w,height:a.h,overflow:"hidden"}},t))}function su({device:e="desktop",shots:t,virtualWidth:o,spotlight:a=false,cursor:n=true,enter:r=false,animate:i="none",screenId:l,className:s,style:c,children:p}){let m=Xi(),u=o??(e==="mobile"?390:1100),g=y__namespace.useRef(null),h=m.mode==="play"&&m.active,{register:f}=m;y__namespace.useEffect(()=>{if(!h)return;let v=f();return g.current=v,()=>{g.current=null,v.cancel();}},[h,f]);let b=e==="mobile"?{position:"relative",height:"76%",aspectRatio:"390 / 800",borderRadius:22,flex:"0 0 auto"}:{position:"relative",flex:"1 1 0%",maxWidth:"82%",aspectRatio:"16 / 10",minWidth:0,borderRadius:12};return y__namespace.createElement("div",{"data-gds-part":"motion-screen",className:d("gds-motion-screen",s),style:{...b,overflow:"hidden",background:"var(--gds-background, #fff)",boxShadow:"0 18px 60px rgba(0,0,0,0.38), 0 2px 10px rgba(0,0,0,0.22)",...h&&au[i]?{animation:au[i]}:{},...c}},h?y__namespace.createElement(qi,{shots:t,loop:false,controls:false,enter:r,spotlight:a,cursor:n,stage:"transparent",paused:m.paused,onEnded:()=>g.current?.done()},y__namespace.createElement(ou,{virtualWidth:u},p)):y__namespace.createElement(ou,{virtualWidth:u},p))}var lu={title:3800,"lower-third":3200,"section-break":4200,broadcast:4200,ticker:6e3,stat:4200,quote:5200};function cu({template:e="title",heading:t,text:o,durationMs:a,tone:n="light",lift:r="none",className:i,style:l}){let s=Xi(),c=yo(),p=a??lu[e],m=s.mode==="play"&&s.active,u=m&&!c,g=y__namespace.useRef(null),h=y__namespace.useRef(p),{register:f,paused:b}=s;y__namespace.useEffect(()=>{if(!m)return;h.current=p;let k=f();return g.current=k,()=>{g.current=null,k.cancel();}},[m,p,f]),y__namespace.useEffect(()=>{if(!m||b)return;let k=Date.now(),C=setTimeout(()=>{h.current=0,g.current?.done();},h.current);return ()=>{clearTimeout(C),h.current=Math.max(0,h.current-(Date.now()-k));}},[m,b]);let v=n==="dark"?"#16161a":"#fff",S=r==="none"?void 0:n==="dark"?"0 1px 2px rgba(255,255,255,0.55), 0 2px 24px rgba(255,255,255,0.45)":"0 1px 2px rgba(0,0,0,0.35), 0 2px 28px rgba(0,0,0,0.30)",x=b?"paused":"running",w=(k,C,E=0)=>u?{animation:`${k} ${C}ms cubic-bezier(0.22, 1, 0.36, 1) ${E}ms both`,animationPlayState:x}:{};return y__namespace.createElement("div",{"data-gds-part":"motion-text",className:d("gds-motion-text",i),style:{position:e==="lower-third"||e==="broadcast"||e==="ticker"?"absolute":"relative",...e==="lower-third"?{left:"6%",bottom:"9%"}:e==="broadcast"?{left:0,right:0,bottom:"6%"}:e==="ticker"?{left:0,right:0,bottom:0}:e==="quote"?{textAlign:"center",maxWidth:"64%"}:{textAlign:"center",maxWidth:"72%"},color:v,textShadow:S,isolation:r==="scrim"?"isolate":void 0,pointerEvents:"none",...l}},r==="scrim"&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:"-30% -20%",zIndex:-1,pointerEvents:"none",background:n==="dark"?"radial-gradient(ellipse at center, rgba(255,255,255,0.45), transparent 70%)":"radial-gradient(ellipse at center, rgba(0,0,0,0.34), transparent 70%)",filter:"blur(2px)"}}),y__namespace.createElement("style",null,`
362
364
  @keyframes gdsMotionFadeUp { from { opacity: 0; transform: translateY(18px) } to { opacity: 1; transform: translateY(0) } }
363
365
  @keyframes gdsMotionSlideIn { from { opacity: 0; transform: translateX(-28px) } to { opacity: 1; transform: translateX(0) } }
364
366
  @keyframes gdsMotionPush { from { opacity: 0; transform: scale(1.05) } to { opacity: 1; transform: scale(1) } }
365
367
  @keyframes gdsMotionMarquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }
366
368
  @keyframes gdsMotionStatSlam { 0% { opacity: 0; transform: scale(2.2) } 60% { opacity: 1; transform: scale(0.96) } 80% { transform: scale(1.02) } 100% { opacity: 1; transform: scale(1) } }
367
369
  @keyframes gdsMotionQuoteMark { from { opacity: 0; transform: translateY(10px) scale(0.9) } to { opacity: 0.14; transform: translateY(0) scale(1) } }
368
- `),e==="title"&&v__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement("div",{style:{fontSize:"clamp(26px, 5.2vw, 60px)",fontWeight:700,letterSpacing:"-0.02em",lineHeight:1.06,...x("gdsMotionFadeUp",700)}},t),o&&v__namespace.createElement("div",{style:{marginTop:14,fontSize:"clamp(14px, 1.8vw, 20px)",opacity:.72,...x("gdsMotionFadeUp",700,160)}},o)),e==="lower-third"&&v__namespace.createElement("div",{style:{display:"inline-flex",flexDirection:"column",gap:3,padding:"10px 16px",borderRadius:12,background:n==="dark"?"rgba(255,255,255,0.78)":"rgba(15,15,17,0.62)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)",...x("gdsMotionSlideIn",500)}},v__namespace.createElement("span",{style:{fontSize:15,fontWeight:650}},t),o&&v__namespace.createElement("span",{style:{fontSize:12.5,opacity:.72}},o)),e==="broadcast"&&v__namespace.createElement("div",{style:{overflow:"hidden",...x("gdsMotionSlideIn",600)}},o&&v__namespace.createElement("div",{style:{display:"inline-block",marginLeft:"6%",padding:"5px 14px",fontSize:12.5,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",color:"#fff",background:"oklch(var(--primary, 0.45 0.18 264) / 0.85)"}},o),v__namespace.createElement("div",{style:{padding:"12px 6% 14px",background:"linear-gradient(90deg, oklch(var(--primary, 0.45 0.18 264)) 0%, oklch(var(--primary, 0.45 0.18 264) / 0.92) 70%, oklch(var(--primary, 0.45 0.18 264) / 0) 100%)",color:"#fff"}},v__namespace.createElement("span",{style:{fontSize:22,fontWeight:800,letterSpacing:"-0.01em"}},t))),e==="section-break"&&v__namespace.createElement("div",{style:{fontSize:"clamp(30px, 6vw, 72px)",fontWeight:700,letterSpacing:"-0.025em",lineHeight:1.04,...x("gdsMotionPush",1400)}},t),e==="ticker"&&v__namespace.createElement("div",{style:{display:"flex",alignItems:"stretch",background:n==="dark"?"rgba(255,255,255,0.78)":"rgba(15,15,17,0.62)",backdropFilter:"blur(10px)",overflow:"hidden",...x("gdsMotionFadeUp",500)}},v__namespace.createElement("span",{style:{flex:"0 0 auto",display:"inline-flex",alignItems:"center",padding:"7px 14px",fontSize:11.5,fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",color:"#fff",background:"oklch(var(--primary, 0.45 0.18 264))"}},t),o&&v__namespace.createElement("div",{style:{flex:"1 1 0%",minWidth:0,display:"flex",alignItems:"center",overflow:"hidden",maskImage:"linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%)"}},v__namespace.createElement("div",{style:{display:"inline-flex",whiteSpace:"nowrap",fontSize:13,...u?{animation:"gdsMotionMarquee 24000ms linear infinite",animationPlayState:w}:{}}},v__namespace.createElement("span",{style:{padding:"0 0 0 16px"}},o," \xB7 "),v__namespace.createElement("span",{style:{padding:"0 0 0 4px"}},o," \xB7 ")))),e==="stat"&&v__namespace.createElement(v__namespace.Fragment,null,v__namespace.createElement("div",{style:{fontSize:"clamp(48px, 16vw, 180px)",fontWeight:900,letterSpacing:"-0.04em",lineHeight:1,...x("gdsMotionStatSlam",800)}},t),o&&v__namespace.createElement("div",{style:{marginTop:16,fontSize:"clamp(14px, 1.8vw, 20px)",opacity:.72,...x("gdsMotionFadeUp",700,420)}},o)),e==="quote"&&v__namespace.createElement("div",{style:{position:"relative"}},v__namespace.createElement("span",{"aria-hidden":true,style:{position:"absolute",top:"-0.45em",left:"-0.18em",fontSize:"clamp(80px, 12vw, 160px)",fontWeight:800,lineHeight:1,opacity:u?void 0:.14,pointerEvents:"none",...x("gdsMotionQuoteMark",900)}},"\u201C"),v__namespace.createElement("div",{style:{position:"relative",fontSize:"clamp(22px, 3.6vw, 44px)",fontWeight:600,letterSpacing:"-0.015em",lineHeight:1.25,...x("gdsMotionFadeUp",700)}},t),o&&v__namespace.createElement("div",{style:{marginTop:18,fontSize:"clamp(13px, 1.6vw, 17px)",opacity:.65,...x("gdsMotionFadeUp",700,240)}},"\u2014 ",o)))}var Db={"top-left":{top:18,left:20},top:{top:18,left:0,right:0,display:"grid",placeItems:"center"},"top-right":{top:18,right:20},center:{inset:0,display:"grid",placeItems:"center"},"bottom-left":{bottom:18,left:20},bottom:{bottom:18,left:0,right:0,display:"grid",placeItems:"center"},"bottom-right":{bottom:52,right:20},"lower-third":{left:"6%",right:"6%",bottom:"8%"}};function hi({zone:e="top-right",fromScene:t,toScene:o,interactive:r=false,className:n,style:a,children:i}){return v__namespace.createElement("div",{"data-gds-part":"motion-overlay",className:d("gds-motion-overlay",n),style:{position:"absolute",zIndex:20,pointerEvents:r?"auto":"none",...Db[e],...a}},i)}var bp={fade:420,"slide-up":520,"slide-down":520,"slide-left":520,"slide-right":520,pop:420,zoom:650,"wipe-circle":750,none:0};function Ab(e,t){switch(e){case "fade":return `gdsMotionSceneIn ${t}ms ease both`;case "slide-up":return `gdsMotionSceneUp ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-down":return `gdsMotionSceneDown ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-left":return `gdsMotionSceneLeft ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-right":return `gdsMotionSceneRight ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "pop":return `gdsMotionScenePop ${t}ms cubic-bezier(0.34, 1.56, 0.64, 1) both`;case "zoom":return `gdsMotionSceneZoom ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "wipe-circle":return `gdsMotionSceneWipe ${t}ms cubic-bezier(0.65, 0, 0.35, 1) both`;case "none":return null}}var Ib=`
370
+ `),e==="title"&&y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement("div",{style:{fontSize:"clamp(26px, 5.2vw, 60px)",fontWeight:700,letterSpacing:"-0.02em",lineHeight:1.06,...w("gdsMotionFadeUp",700)}},t),o&&y__namespace.createElement("div",{style:{marginTop:14,fontSize:"clamp(14px, 1.8vw, 20px)",opacity:.72,...w("gdsMotionFadeUp",700,160)}},o)),e==="lower-third"&&y__namespace.createElement("div",{style:{display:"inline-flex",flexDirection:"column",gap:3,padding:"10px 16px",borderRadius:12,background:n==="dark"?"rgba(255,255,255,0.78)":"rgba(15,15,17,0.62)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)",...w("gdsMotionSlideIn",500)}},y__namespace.createElement("span",{style:{fontSize:15,fontWeight:650}},t),o&&y__namespace.createElement("span",{style:{fontSize:12.5,opacity:.72}},o)),e==="broadcast"&&y__namespace.createElement("div",{style:{overflow:"hidden",...w("gdsMotionSlideIn",600)}},o&&y__namespace.createElement("div",{style:{display:"inline-block",marginLeft:"6%",padding:"5px 14px",fontSize:12.5,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",color:"#fff",background:"oklch(var(--primary, 0.45 0.18 264) / 0.85)"}},o),y__namespace.createElement("div",{style:{padding:"12px 6% 14px",background:"linear-gradient(90deg, oklch(var(--primary, 0.45 0.18 264)) 0%, oklch(var(--primary, 0.45 0.18 264) / 0.92) 70%, oklch(var(--primary, 0.45 0.18 264) / 0) 100%)",color:"#fff"}},y__namespace.createElement("span",{style:{fontSize:22,fontWeight:800,letterSpacing:"-0.01em"}},t))),e==="section-break"&&y__namespace.createElement("div",{style:{fontSize:"clamp(30px, 6vw, 72px)",fontWeight:700,letterSpacing:"-0.025em",lineHeight:1.04,...w("gdsMotionPush",1400)}},t),e==="ticker"&&y__namespace.createElement("div",{style:{display:"flex",alignItems:"stretch",background:n==="dark"?"rgba(255,255,255,0.78)":"rgba(15,15,17,0.62)",backdropFilter:"blur(10px)",overflow:"hidden",...w("gdsMotionFadeUp",500)}},y__namespace.createElement("span",{style:{flex:"0 0 auto",display:"inline-flex",alignItems:"center",padding:"7px 14px",fontSize:11.5,fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",color:"#fff",background:"oklch(var(--primary, 0.45 0.18 264))"}},t),o&&y__namespace.createElement("div",{style:{flex:"1 1 0%",minWidth:0,display:"flex",alignItems:"center",overflow:"hidden",maskImage:"linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%)"}},y__namespace.createElement("div",{style:{display:"inline-flex",whiteSpace:"nowrap",fontSize:13,...u?{animation:"gdsMotionMarquee 24000ms linear infinite",animationPlayState:x}:{}}},y__namespace.createElement("span",{style:{padding:"0 0 0 16px"}},o," \xB7 "),y__namespace.createElement("span",{style:{padding:"0 0 0 4px"}},o," \xB7 ")))),e==="stat"&&y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement("div",{style:{fontSize:"clamp(48px, 16vw, 180px)",fontWeight:900,letterSpacing:"-0.04em",lineHeight:1,...w("gdsMotionStatSlam",800)}},t),o&&y__namespace.createElement("div",{style:{marginTop:16,fontSize:"clamp(14px, 1.8vw, 20px)",opacity:.72,...w("gdsMotionFadeUp",700,420)}},o)),e==="quote"&&y__namespace.createElement("div",{style:{position:"relative"}},y__namespace.createElement("span",{"aria-hidden":true,style:{position:"absolute",top:"-0.45em",left:"-0.18em",fontSize:"clamp(80px, 12vw, 160px)",fontWeight:800,lineHeight:1,opacity:u?void 0:.14,pointerEvents:"none",...w("gdsMotionQuoteMark",900)}},"\u201C"),y__namespace.createElement("div",{style:{position:"relative",fontSize:"clamp(22px, 3.6vw, 44px)",fontWeight:600,letterSpacing:"-0.015em",lineHeight:1.25,...w("gdsMotionFadeUp",700)}},t),o&&y__namespace.createElement("div",{style:{marginTop:18,fontSize:"clamp(13px, 1.6vw, 17px)",opacity:.65,...w("gdsMotionFadeUp",700,240)}},"\u2014 ",o)))}var cy={"top-left":{top:18,left:20},top:{top:18,left:0,right:0,display:"grid",placeItems:"center"},"top-right":{top:18,right:20},center:{inset:0,display:"grid",placeItems:"center"},"bottom-left":{bottom:18,left:20},bottom:{bottom:18,left:0,right:0,display:"grid",placeItems:"center"},"bottom-right":{bottom:52,right:20},"lower-third":{left:"6%",right:"6%",bottom:"8%"}};function Ji({zone:e="top-right",fromScene:t,toScene:o,interactive:a=false,className:n,style:r,children:i}){return y__namespace.createElement("div",{"data-gds-part":"motion-overlay",className:d("gds-motion-overlay",n),style:{position:"absolute",zIndex:20,pointerEvents:a?"auto":"none",...cy[e],...r}},i)}var du={fade:420,"slide-up":520,"slide-down":520,"slide-left":520,"slide-right":520,pop:420,zoom:650,"wipe-circle":750,none:0};function dy(e,t){switch(e){case "fade":return `gdsMotionSceneIn ${t}ms ease both`;case "slide-up":return `gdsMotionSceneUp ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-down":return `gdsMotionSceneDown ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-left":return `gdsMotionSceneLeft ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "slide-right":return `gdsMotionSceneRight ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "pop":return `gdsMotionScenePop ${t}ms cubic-bezier(0.34, 1.56, 0.64, 1) both`;case "zoom":return `gdsMotionSceneZoom ${t}ms cubic-bezier(0.22, 1, 0.36, 1) both`;case "wipe-circle":return `gdsMotionSceneWipe ${t}ms cubic-bezier(0.65, 0, 0.35, 1) both`;case "none":return null}}var py=`
369
371
  @keyframes gdsMotionSceneIn { from { opacity: 0 } to { opacity: 1 } }
370
372
  @keyframes gdsMotionSceneUp { from { opacity: 0; transform: translateY(7%) } to { opacity: 1; transform: translateY(0) } }
371
373
  @keyframes gdsMotionSceneDown { from { opacity: 0; transform: translateY(-7%) } to { opacity: 1; transform: translateY(0) } }
@@ -378,7 +380,7 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
378
380
  @keyframes gdsMotionScreenFloat { from { transform: translateY(-1.2%) } to { transform: translateY(1.2%) } }
379
381
  @keyframes gdsMotionScreenTilt { from { transform: perspective(1100px) rotateX(12deg) rotateY(-16deg) } to { transform: perspective(1100px) rotateX(0deg) rotateY(0deg) } }
380
382
  @keyframes gdsMotionScreenDrift { from { transform: translateX(-1.5%) } to { transform: translateX(1.5%) } }
381
- `,cp={rise:"gdsMotionScreenRise 900ms cubic-bezier(0.22, 1, 0.36, 1) both",float:"gdsMotionScreenFloat 6s ease-in-out infinite alternate","tilt-settle":"gdsMotionScreenTilt 1800ms cubic-bezier(0.22, 1, 0.36, 1) both",drift:"gdsMotionScreenDrift 9s ease-in-out infinite alternate",none:null},gi=4e3,vp=420;function qa({label:e,durationMs:t,fill:o,transition:r="fade",transitionMs:n,className:a,style:i,children:p,internal:s}){let{active:c,paused:l,mode:g,onSceneEnd:u}=s,m=g==="play"&&c,h=t!=null,f=v__namespace.useRef(0),b=v__namespace.useRef(0),y=v__namespace.useRef(false),R=v__namespace.useRef(!h),w=v__namespace.useCallback(()=>{y.current||(y.current=true,u());},[u]),x=v__namespace.useRef(null),S=v__namespace.useRef(l);S.current=l;let M=v__namespace.useRef(false),A=v__namespace.useCallback(()=>{if(R.current&&!(f.current>0&&b.current<f.current)){if(S.current){M.current=true;return}x.current||(x.current=setTimeout(w,vp));}},[w]);v__namespace.useEffect(()=>{if(l){x.current&&(clearTimeout(x.current),x.current=null,M.current=true);return}M.current&&(M.current=false,A());},[l,A]);let H=v__namespace.useCallback(()=>{f.current+=1;let F=false;return {done:()=>{F||(F=true,b.current+=1,A());},cancel:()=>{f.current-=1,F?b.current-=1:A();}}},[A]),W=v__namespace.useRef(t??gi);v__namespace.useEffect(()=>{if(m)return W.current=t??gi,y.current=false,R.current=!h,()=>{x.current&&(clearTimeout(x.current),x.current=null);}},[m,t,h]),v__namespace.useEffect(()=>{if(!m||l||!h&&f.current>0)return;let F=Date.now(),B=setTimeout(()=>{R.current=true,A();},W.current);return ()=>{clearTimeout(B),W.current=Math.max(0,W.current-(Date.now()-F));}},[m,l,h,A]);let z=v__namespace.useMemo(()=>({mode:g,active:c,paused:l,register:H}),[g,c,l,H]);return v__namespace.createElement(mp.Provider,{value:z},v__namespace.createElement("div",{"data-gds-part":"motion-scene",className:d("gds-motion-scene",a),style:{position:"absolute",inset:0,background:o,isolation:"isolate",...m?(()=>{let F=n??bp[r],B=Ab(r,F);return B?{animation:B}:{}})():{},...i}},v__namespace.createElement("style",null,Ib),v__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",gap:"4%",padding:"6%"}},p)))}function Hb(e){return v__namespace.createElement(qa,{...e,internal:{active:true,paused:false,mode:"play",onSceneEnd:()=>{}}})}var mi={display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:999,border:"none",background:"transparent",color:"#fff",cursor:"pointer"};function Fb(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},v__namespace.createElement("path",{d:"M8 5v14l11-7z"}))}function zb(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},v__namespace.createElement("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),v__namespace.createElement("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"}))}function pp(){return v__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},v__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),v__namespace.createElement("path",{d:"M3 3v5h5"}))}function _b(e){return v__namespace.isValidElement(e)&&e.type===hi}function Bb(e){return v__namespace.isValidElement(e)&&e.type!==hi}var Ob=1500,Vb=2400,Gb=1150;function Wb(e){let t=e.shots&&e.shots.length>0?e.shots:[{}],o=e.enter===true?Ob:0;return t.forEach((r,n)=>{o+=(r.hold??Vb)+(n>0?r.trans??Gb:0);}),o}function yp(e,t,o){t>7||v__namespace.Children.forEach(e,r=>{if(!v__namespace.isValidElement(r))return;if(r.type===gp){o.push(Wb(r.props));return}if(r.type===hp){let a=r.props;o.push(a.durationMs??fp[a.template??"title"]);return}let n=r.props.children;n&&yp(n,t+1,o);});}function jb(e){let t=[];yp(e.props.children,0,t);let o=t.length>0?Math.max(...t):0,r=e.props.durationMs??0;return (Math.max(o,r)||(e.props.durationMs??gi))+vp}function up(e,t,o){if(!(!e||typeof e.getAnimations!="function"))try{for(let r of e.getAnimations({subtree:!0}))try{r.currentTime=t,o?r.pause():r.play();}catch{}}catch{}}function $b({view:e="play",aspect:t="auto",stage:o=Mb,backdrop:r,autoplay:n=true,loop:a=false,controls:i=true,className:p,style:s,children:c}){let l=Jt(),g=v__namespace.Children.toArray(c),u=g.filter(Bb),m=g.filter(_b),h=u.length,f=t!=="auto"?Eb(t):null,b=f?t:"16 / 9",y=f&&f<1?"clamp(150px, 17%, 250px)":"clamp(260px, 30%, 440px)",[R,w]=v__namespace.useState(0),[x,S]=v__namespace.useState(!n),[M,A]=v__namespace.useState(false),[H,W]=v__namespace.useState(0),[z,F]=v__namespace.useState(null),B=z??e,[q,ie]=v__namespace.useState(false),N=v__namespace.useMemo(()=>{let O=u.map(ge=>jb(ge)),K=[],V=0;for(let ge of O)K.push(V),V+=ge;return {durations:O,starts:K,totalMs:Math.max(V,1)}},[u]),ue=v__namespace.useRef(0),k=v__namespace.useRef(null),G=v__namespace.useRef(0);G.current=R;let he=v__namespace.useCallback(O=>{let{starts:K,durations:V}=N;for(let ge=K.length-1;ge>=0;ge--)if(O>=K[ge])return Math.min(ge,K.length-1);return 0},[N]),I=v__namespace.useCallback(()=>{let O=k.current?.querySelectorAll('[data-gds-part="motion-scene"]');return O&&O.length>0?O[O.length-1]:null},[]),j=v__namespace.useCallback((O,K)=>{let V=Math.max(0,Math.min(O,N.totalMs-1));ue.current=V,A(false),K?.resume&&S(false);let ge=he(V);if(ge===G.current&&!K?.resume){let Ne=V-N.starts[ge];up(I(),Ne,Z.current);try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(V),totalMs:N.totalMs,durations:N.durations},"*");}catch{}return}try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(V),totalMs:N.totalMs,durations:N.durations},"*");}catch{}let Te=ge;w(Te),W(Ne=>Ne+1);let _=V-N.starts[Te],Le=!K?.resume&&Z.current;requestAnimationFrame(()=>requestAnimationFrame(()=>{up(I(),_,Le);}));},[N,he,I]),Z=v__namespace.useRef(x);Z.current=x;let ae=v__namespace.useRef(N);ae.current=N,v__namespace.useEffect(()=>{if(x||M||l||B!=="play"||h===0)return;let O=0,K=performance.now(),V=0,ge=Te=>{let _=ae.current,Le=Math.min(Te-K,120);if(K=Te,ue.current+=Le,ue.current>=_.totalMs)if(a)ue.current=0,w(0),W(Ne=>Ne+1);else {ue.current=_.totalMs,A(true),S(true);return}else {let{starts:Ne}=_,Mt=0;for(let We=Ne.length-1;We>=0;We--)if(ue.current>=Ne[We]){Mt=We;break}Mt!==G.current&&(w(Mt),W(We=>We+1));}if(Te-V>150){V=Te;try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(ue.current),totalMs:_.totalMs,durations:_.durations},"*");}catch{}}O=requestAnimationFrame(ge);};return O=requestAnimationFrame(ge),()=>cancelAnimationFrame(O)},[x,M,l,B,h,a]),v__namespace.useEffect(()=>{if(l||B!=="play")return;let O=k.current?.querySelectorAll('[data-gds-part="motion-scene"]'),K=O?.[O.length-1]??null;if(!(!K||typeof K.getAnimations!="function"))try{for(let V of K.getAnimations({subtree:!0}))try{x?V.pause():V.play();}catch{}}catch{}},[x,l,B,R,H]);let[U,xe]=v__namespace.useState(null),E=v__namespace.useRef(null);v__namespace.useEffect(()=>{let O=E.current;if(E.current=R,O===null||O===R)return;let K=u[R];if(!K)return;let V=K.props.transition??"fade",ge=K.props.transitionMs??bp[V]??0;if(ge<=0||Z.current){xe(null);return}xe(O);let Te=setTimeout(()=>xe(null),ge+60);return ()=>clearTimeout(Te)},[R,H]);let me=v__namespace.useCallback(O=>{j(N.starts[Math.max(0,Math.min(O,h-1))]??0,{resume:true});},[j,N,h]),X=v__namespace.useCallback(()=>{let O=G.current+1;O<h?j(N.starts[O],{resume:true}):a&&h>0?j(0,{resume:true}):(A(true),S(true));},[h,a,j,N]);v__namespace.useEffect(()=>{if(l||typeof window>"u")return;let O=K=>{let V=K.data;if(!(!V||V.type!=="grade:motion-control")){if(V.action==="set-view"){(V.view==="play"||V.view==="strip")&&F(V.view);return}if(V.action==="export-mode"){ie(!!V.enabled);return}if(V.action==="seek"&&typeof V.ms=="number"){F("play"),j(V.ms);return}typeof V.scene=="number"?(F("play"),j(N.starts[Math.max(0,Math.min(h-1,Math.round(V.scene)))]??0)):V.action==="pause"?S(true):V.action==="play"?(F("play"),A(false),S(false)):V.action==="restart"&&(F("play"),me(0));}};return window.addEventListener("message",O),()=>window.removeEventListener("message",O)},[l,me,h,j,N]);let ve=v__namespace.useRef(j);ve.current=j,v__namespace.useEffect(()=>{if(typeof window>"u")return;let O=window;return O.__gradeMotion={ready:true,meta:()=>({totalMs:ae.current.totalMs,durations:ae.current.durations,count:h}),enterRenderMode:()=>{S(true),F("play"),ie(true);},renderFrame:K=>new Promise(V=>{S(true),ve.current(Math.max(0,K));let ge=false,Te=()=>{ge||(ge=true,V());};requestAnimationFrame(()=>requestAnimationFrame(Te)),setTimeout(Te,4e3);})},()=>{delete window.__gradeMotion;}},[h]),v__namespace.useEffect(()=>{if(l||typeof window>"u")return;let O=K=>{if(K.code!=="Space")return;let V=K.target;V&&(V.tagName==="INPUT"||V.tagName==="TEXTAREA"||V.tagName==="BUTTON"||V.isContentEditable)||(K.preventDefault(),F("play"),A(false),S(ge=>!ge));};return window.addEventListener("keydown",O),()=>window.removeEventListener("keydown",O)},[l]),v__namespace.useEffect(()=>{if(!(l||typeof window>"u"))try{window.parent?.postMessage({type:"grade:motion-state",scene:R,paused:x,done:M,count:h,view:B},"*");}catch{}},[l,R,x,M,h,B]);let ke=e==="strip"||z==="strip";if(B==="strip"||l){let K=!ke&&u.length>2,V=K?u.slice(0,2):u,ge=u.length-V.length;return v__namespace.createElement("div",{"data-gds-part":"motion",className:d("gds-motion",p),style:{position:"absolute",inset:0,overflow:"hidden",background:o,...s}},r&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},r),v__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",gap:28,padding:"0 48px",overflowX:"auto"}},V.map((Te,_)=>v__namespace.createElement("figure",{key:_,style:{margin:0,flex:"0 0 auto",width:y}},v__namespace.createElement("figcaption",{style:{marginBottom:8,fontSize:12,fontWeight:500,color:"rgba(255,255,255,0.66)"}},Te.props.label??`Scene ${_+1}`),v__namespace.createElement("div",{style:{position:"relative",aspectRatio:b,borderRadius:10,overflow:"hidden",background:Te.props.fill??"rgba(127,127,127,0.10)",border:"1px solid rgba(127,127,127,0.22)",boxShadow:"0 10px 34px rgba(0,0,0,0.28)"}},v__namespace.createElement(Kr,{label:Te.props.label},v__namespace.createElement(qa,{...Te.props,fill:void 0,internal:{active:false,paused:true,mode:"strip",onSceneEnd:()=>{}}}))))),K&&ge>0&&v__namespace.createElement("figure",{style:{margin:0,flex:"0 0 auto",width:y}},v__namespace.createElement("figcaption",{style:{marginBottom:8,fontSize:12,fontWeight:500,color:"rgba(255,255,255,0.66)"}},"\u2026"),v__namespace.createElement("div",{style:{aspectRatio:b,borderRadius:10,display:"grid",placeItems:"center",border:"1px dashed rgba(127,127,127,0.4)",color:"rgba(255,255,255,0.55)",fontSize:14,fontWeight:600}},"+",ge," scene",ge===1?"":"s"))))}let qe=u[Math.min(R,Math.max(0,h-1))],Ge=v__namespace.createElement("div",{ref:k,style:{position:"absolute",inset:0,overflow:"hidden",background:o}},r&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},r),U!==null&&U!==R&&u[U]&&v__namespace.createElement(Kr,{key:`out:${U}`,label:u[U].props.label},v__namespace.createElement(qa,{...u[U].props,transition:"none",internal:{active:false,paused:true,mode:"play",onSceneEnd:()=>{}}})),qe&&v__namespace.createElement(Kr,{key:`${R}:${H}`,label:qe.props.label,onSkip:h>1?X:void 0},v__namespace.createElement(qa,{...qe.props,internal:{active:true,paused:x,mode:"play",onSceneEnd:()=>{}}})),m.filter(O=>{let K=O.props.fromScene??0,V=O.props.toScene??1/0;return R>=K&&R<=V}),q&&v__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",left:14,bottom:14,zIndex:30,width:16,height:16,opacity:.55,color:"#fff",mixBlendMode:"difference",pointerEvents:"none"}},v__namespace.createElement("svg",{viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},v__namespace.createElement("path",{d:"M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",fill:"currentColor"}))),i&&h>0&&!q&&v__namespace.createElement("div",{role:"group","aria-label":"Motion playback controls",className:"gds-motion-transport",style:{position:"absolute",right:16,bottom:16,display:"flex",gap:4,alignItems:"center",padding:"4px 6px",borderRadius:999,background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},v__namespace.createElement("style",null,`
383
+ `,au={rise:"gdsMotionScreenRise 900ms cubic-bezier(0.22, 1, 0.36, 1) both",float:"gdsMotionScreenFloat 6s ease-in-out infinite alternate","tilt-settle":"gdsMotionScreenTilt 1800ms cubic-bezier(0.22, 1, 0.36, 1) both",drift:"gdsMotionScreenDrift 9s ease-in-out infinite alternate",none:null},Zi=4e3,pu=420;function Nn({label:e,durationMs:t,fill:o,transition:a="fade",transitionMs:n,className:r,style:i,children:l,internal:s}){let{active:c,paused:p,mode:m,onSceneEnd:u}=s,g=m==="play"&&c,h=t!=null,f=y__namespace.useRef(0),b=y__namespace.useRef(0),v=y__namespace.useRef(false),S=y__namespace.useRef(!h),x=y__namespace.useCallback(()=>{v.current||(v.current=true,u());},[u]),w=y__namespace.useRef(null),k=y__namespace.useRef(p);k.current=p;let C=y__namespace.useRef(false),E=y__namespace.useCallback(()=>{if(S.current&&!(f.current>0&&b.current<f.current)){if(k.current){C.current=true;return}w.current||(w.current=setTimeout(x,pu));}},[x]);y__namespace.useEffect(()=>{if(p){w.current&&(clearTimeout(w.current),w.current=null,C.current=true);return}C.current&&(C.current=false,E());},[p,E]);let F=y__namespace.useCallback(()=>{f.current+=1;let N=false;return {done:()=>{N||(N=true,b.current+=1,E());},cancel:()=>{f.current-=1,N?b.current-=1:E();}}},[E]),O=y__namespace.useRef(t??Zi);y__namespace.useEffect(()=>{if(g)return O.current=t??Zi,v.current=false,S.current=!h,()=>{w.current&&(clearTimeout(w.current),w.current=null);}},[g,t,h]),y__namespace.useEffect(()=>{if(!g||p||!h&&f.current>0)return;let N=Date.now(),H=setTimeout(()=>{S.current=true,E();},O.current);return ()=>{clearTimeout(H),O.current=Math.max(0,O.current-(Date.now()-N));}},[g,p,h,E]);let M=y__namespace.useMemo(()=>({mode:m,active:c,paused:p,register:F}),[m,c,p,F]);return y__namespace.createElement(iu.Provider,{value:M},y__namespace.createElement("div",{"data-gds-part":"motion-scene",className:d("gds-motion-scene",r),style:{position:"absolute",inset:0,background:o,isolation:"isolate",...g?(()=>{let N=n??du[a],H=dy(a,N);return H?{animation:H}:{}})():{},...i}},y__namespace.createElement("style",null,py),y__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",gap:"4%",padding:"6%"}},l)))}function uy(e){return y__namespace.createElement(Nn,{...e,internal:{active:true,paused:false,mode:"play",onSceneEnd:()=>{}}})}var Yi={display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:999,border:"none",background:"transparent",color:"#fff",cursor:"pointer"};function my(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},y__namespace.createElement("path",{d:"M8 5v14l11-7z"}))}function gy(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":true},y__namespace.createElement("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),y__namespace.createElement("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"}))}function ru(){return y__namespace.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},y__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),y__namespace.createElement("path",{d:"M3 3v5h5"}))}function fy(e){return y__namespace.isValidElement(e)&&e.type===Ji}function hy(e){return y__namespace.isValidElement(e)&&e.type!==Ji}var by=1500,vy=2400,yy=1150;function xy(e){let t=e.shots&&e.shots.length>0?e.shots:[{}],o=e.enter===true?by:0;return t.forEach((a,n)=>{o+=(a.hold??vy)+(n>0?a.trans??yy:0);}),o}function uu(e,t,o){t>7||y__namespace.Children.forEach(e,a=>{if(!y__namespace.isValidElement(a))return;if(a.type===su){o.push(xy(a.props));return}if(a.type===cu){let r=a.props;o.push(r.durationMs??lu[r.template??"title"]);return}let n=a.props.children;n&&uu(n,t+1,o);});}function wy(e){let t=[];uu(e.props.children,0,t);let o=t.length>0?Math.max(...t):0,a=e.props.durationMs??0;return (Math.max(o,a)||(e.props.durationMs??Zi))+pu}function nu(e,t,o){if(!(!e||typeof e.getAnimations!="function"))try{for(let a of e.getAnimations({subtree:!0}))try{a.currentTime=t,o?a.pause():a.play();}catch{}}catch{}}function ky({view:e="play",aspect:t="auto",stage:o=ny,backdrop:a,autoplay:n=true,loop:r=false,controls:i=true,className:l,style:s,children:c}){let p=yo(),m=y__namespace.Children.toArray(c),u=m.filter(hy),g=m.filter(fy),h=u.length,f=t!=="auto"?sy(t):null,b=f?t:"16 / 9",v=f&&f<1?"clamp(150px, 17%, 250px)":"clamp(260px, 30%, 440px)",[S,x]=y__namespace.useState(0),[w,k]=y__namespace.useState(!n),[C,E]=y__namespace.useState(false),[F,O]=y__namespace.useState(0),[M,N]=y__namespace.useState(null),H=M??e,[Y,se]=y__namespace.useState(false),D=y__namespace.useMemo(()=>{let G=u.map(pe=>wy(pe)),K=[],W=0;for(let pe of G)K.push(W),W+=pe;return {durations:G,starts:K,totalMs:Math.max(W,1)}},[u]),V=y__namespace.useRef(0),R=y__namespace.useRef(null),_=y__namespace.useRef(0);_.current=S;let le=y__namespace.useCallback(G=>{let{starts:K,durations:W}=D;for(let pe=K.length-1;pe>=0;pe--)if(G>=K[pe])return Math.min(pe,K.length-1);return 0},[D]),X=y__namespace.useCallback(()=>{let G=R.current?.querySelectorAll('[data-gds-part="motion-scene"]');return G&&G.length>0?G[G.length-1]:null},[]),U=y__namespace.useCallback((G,K)=>{let W=Math.max(0,Math.min(G,D.totalMs-1));V.current=W,E(false),K?.resume&&k(false);let pe=le(W);if(pe===_.current&&!K?.resume){let _e=W-D.starts[pe];nu(X(),_e,J.current);try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(W),totalMs:D.totalMs,durations:D.durations},"*");}catch{}return}try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(W),totalMs:D.totalMs,durations:D.durations},"*");}catch{}let Ie=pe;x(Ie),O(_e=>_e+1);let he=W-D.starts[Ie],Gt=!K?.resume&&J.current;requestAnimationFrame(()=>requestAnimationFrame(()=>{nu(X(),he,Gt);}));},[D,le,X]),J=y__namespace.useRef(w);J.current=w;let ke=y__namespace.useRef(D);ke.current=D,y__namespace.useEffect(()=>{if(w||C||p||H!=="play"||h===0)return;let G=0,K=performance.now(),W=0,pe=Ie=>{let he=ke.current,Gt=Math.min(Ie-K,120);if(K=Ie,V.current+=Gt,V.current>=he.totalMs)if(r)V.current=0,x(0),O(_e=>_e+1);else {V.current=he.totalMs,E(true),k(true);return}else {let{starts:_e}=he,Mt=0;for(let Fe=_e.length-1;Fe>=0;Fe--)if(V.current>=_e[Fe]){Mt=Fe;break}Mt!==_.current&&(x(Mt),O(Fe=>Fe+1));}if(Ie-W>150){W=Ie;try{window.parent?.postMessage({type:"grade:motion-time",timeMs:Math.round(V.current),totalMs:he.totalMs,durations:he.durations},"*");}catch{}}G=requestAnimationFrame(pe);};return G=requestAnimationFrame(pe),()=>cancelAnimationFrame(G)},[w,C,p,H,h,r]),y__namespace.useEffect(()=>{if(p||H!=="play")return;let G=R.current?.querySelectorAll('[data-gds-part="motion-scene"]'),K=G?.[G.length-1]??null;if(!(!K||typeof K.getAnimations!="function"))try{for(let W of K.getAnimations({subtree:!0}))try{w?W.pause():W.play();}catch{}}catch{}},[w,p,H,S,F]);let[De,de]=y__namespace.useState(null),T=y__namespace.useRef(null);y__namespace.useEffect(()=>{let G=T.current;if(T.current=S,G===null||G===S)return;let K=u[S];if(!K)return;let W=K.props.transition??"fade",pe=K.props.transitionMs??du[W]??0;if(pe<=0||J.current){de(null);return}de(G);let Ie=setTimeout(()=>de(null),pe+60);return ()=>clearTimeout(Ie)},[S,F]);let Z=y__namespace.useCallback(G=>{U(D.starts[Math.max(0,Math.min(G,h-1))]??0,{resume:true});},[U,D,h]),$=y__namespace.useCallback(()=>{let G=_.current+1;G<h?U(D.starts[G],{resume:true}):r&&h>0?U(0,{resume:true}):(E(true),k(true));},[h,r,U,D]);y__namespace.useEffect(()=>{if(p||typeof window>"u")return;let G=K=>{let W=K.data;if(!(!W||W.type!=="grade:motion-control")){if(W.action==="set-view"){(W.view==="play"||W.view==="strip")&&N(W.view);return}if(W.action==="export-mode"){se(!!W.enabled);return}if(W.action==="seek"&&typeof W.ms=="number"){N("play"),U(W.ms);return}typeof W.scene=="number"?(N("play"),U(D.starts[Math.max(0,Math.min(h-1,Math.round(W.scene)))]??0)):W.action==="pause"?k(true):W.action==="play"?(N("play"),E(false),k(false)):W.action==="restart"&&(N("play"),Z(0));}};return window.addEventListener("message",G),()=>window.removeEventListener("message",G)},[p,Z,h,U,D]);let j=y__namespace.useRef(U);j.current=U,y__namespace.useEffect(()=>{if(typeof window>"u")return;let G=window;return G.__gradeMotion={ready:true,meta:()=>({totalMs:ke.current.totalMs,durations:ke.current.durations,count:h}),enterRenderMode:()=>{k(true),N("play"),se(true);},renderFrame:K=>new Promise(W=>{k(true),j.current(Math.max(0,K));let pe=false,Ie=()=>{pe||(pe=true,W());};requestAnimationFrame(()=>requestAnimationFrame(Ie)),setTimeout(Ie,4e3);})},()=>{delete window.__gradeMotion;}},[h]),y__namespace.useEffect(()=>{if(p||typeof window>"u")return;let G=K=>{if(K.code!=="Space")return;let W=K.target;W&&(W.tagName==="INPUT"||W.tagName==="TEXTAREA"||W.tagName==="BUTTON"||W.isContentEditable)||(K.preventDefault(),N("play"),E(false),k(pe=>!pe));};return window.addEventListener("keydown",G),()=>window.removeEventListener("keydown",G)},[p]),y__namespace.useEffect(()=>{if(!(p||typeof window>"u"))try{window.parent?.postMessage({type:"grade:motion-state",scene:S,paused:w,done:C,count:h,view:H},"*");}catch{}},[p,S,w,C,h,H]);let je=e==="strip"||M==="strip";if(H==="strip"||p){let K=!je&&u.length>2,W=K?u.slice(0,2):u,pe=u.length-W.length;return y__namespace.createElement("div",{"data-gds-part":"motion",className:d("gds-motion",l),style:{position:"absolute",inset:0,overflow:"hidden",background:o,...s}},a&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},a),y__namespace.createElement("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",gap:28,padding:"0 48px",overflowX:"auto"}},W.map((Ie,he)=>y__namespace.createElement("figure",{key:he,style:{margin:0,flex:"0 0 auto",width:v}},y__namespace.createElement("figcaption",{style:{marginBottom:8,fontSize:12,fontWeight:500,color:"rgba(255,255,255,0.66)"}},Ie.props.label??`Scene ${he+1}`),y__namespace.createElement("div",{style:{position:"relative",aspectRatio:b,borderRadius:10,overflow:"hidden",background:Ie.props.fill??"rgba(127,127,127,0.10)",border:"1px solid rgba(127,127,127,0.22)",boxShadow:"0 10px 34px rgba(0,0,0,0.28)"}},y__namespace.createElement(xr,{label:Ie.props.label},y__namespace.createElement(Nn,{...Ie.props,fill:void 0,internal:{active:false,paused:true,mode:"strip",onSceneEnd:()=>{}}}))))),K&&pe>0&&y__namespace.createElement("figure",{style:{margin:0,flex:"0 0 auto",width:v}},y__namespace.createElement("figcaption",{style:{marginBottom:8,fontSize:12,fontWeight:500,color:"rgba(255,255,255,0.66)"}},"\u2026"),y__namespace.createElement("div",{style:{aspectRatio:b,borderRadius:10,display:"grid",placeItems:"center",border:"1px dashed rgba(127,127,127,0.4)",color:"rgba(255,255,255,0.55)",fontSize:14,fontWeight:600}},"+",pe," scene",pe===1?"":"s"))))}let Te=u[Math.min(S,Math.max(0,h-1))],Qe=y__namespace.createElement("div",{ref:R,style:{position:"absolute",inset:0,overflow:"hidden",background:o}},a&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",inset:0,pointerEvents:"none"}},a),De!==null&&De!==S&&u[De]&&y__namespace.createElement(xr,{key:`out:${De}`,label:u[De].props.label},y__namespace.createElement(Nn,{...u[De].props,transition:"none",internal:{active:false,paused:true,mode:"play",onSceneEnd:()=>{}}})),Te&&y__namespace.createElement(xr,{key:`${S}:${F}`,label:Te.props.label,onSkip:h>1?$:void 0},y__namespace.createElement(Nn,{...Te.props,internal:{active:true,paused:w,mode:"play",onSceneEnd:()=>{}}})),g.filter(G=>{let K=G.props.fromScene??0,W=G.props.toScene??1/0;return S>=K&&S<=W}),Y&&y__namespace.createElement("div",{"aria-hidden":true,style:{position:"absolute",left:14,bottom:14,zIndex:30,width:16,height:16,opacity:.55,color:"#fff",mixBlendMode:"difference",pointerEvents:"none"}},y__namespace.createElement("svg",{viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},y__namespace.createElement("path",{d:"M28 0L32 4V10L26 4H6L4 6V26L6 28H16L26 18V24L18 32H4L0 28V4L4 0H28ZM32 32H28V18H16V14H32V32Z",fill:"currentColor"}))),i&&h>0&&!Y&&y__namespace.createElement("div",{role:"group","aria-label":"Motion playback controls",className:"gds-motion-transport",style:{position:"absolute",right:16,bottom:16,display:"flex",gap:4,alignItems:"center",padding:"4px 6px",borderRadius:999,background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 6px 22px rgba(0,0,0,0.25)"}},y__namespace.createElement("style",null,`
382
384
  .gds-motion-transport [data-gds-transport-extras] {
383
385
  display: flex; align-items: center; gap: 4px;
384
386
  max-width: 0; opacity: 0; overflow: hidden;
@@ -388,7 +390,7 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
388
390
  .gds-motion-transport:focus-within [data-gds-transport-extras] {
389
391
  max-width: 360px; opacity: 1;
390
392
  }
391
- `),v__namespace.createElement("button",{type:"button",onClick:()=>M?me(0):S(O=>!O),"aria-label":M?"Replay":x?"Play":"Pause",style:mi},M?v__namespace.createElement(pp,null):x?v__namespace.createElement(Fb,null):v__namespace.createElement(zb,null)),v__namespace.createElement("div",{"data-gds-transport-extras":true},v__namespace.createElement("button",{type:"button",onClick:()=>me(0),"aria-label":"Restart",style:mi},v__namespace.createElement(pp,null)),v__namespace.createElement("div",{style:{display:"flex",gap:5,padding:"0 6px"},"aria-hidden":true},u.map((O,K)=>v__namespace.createElement("button",{key:K,type:"button",onClick:()=>me(K),"aria-label":`Go to ${O.props.label??`scene ${K+1}`}`,tabIndex:-1,style:{...mi,width:14,height:14}},v__namespace.createElement("span",{style:{width:6,height:6,borderRadius:999,background:K===R?"#fff":"rgba(255,255,255,0.35)",transition:"background 200ms ease"}})))))),M&&v__namespace.createElement("button",{type:"button",onClick:()=>me(0),"aria-label":"Replay",style:{position:"absolute",inset:0,margin:"auto",width:64,height:64,display:"grid",placeItems:"center",borderRadius:999,border:"none",color:"#fff",background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 8px 30px rgba(0,0,0,0.35)",cursor:"pointer"}},v__namespace.createElement("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},v__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),v__namespace.createElement("path",{d:"M3 3v5h5"}))));return v__namespace.createElement("div",{"data-gds-part":"motion",className:d("gds-motion",p),style:{position:"absolute",inset:0,overflow:"hidden",background:f?q?"#000":"transparent":o,...s}},f?v__namespace.createElement(Lb,{ratio:f},Ge):Ge)}var wp=({renderer:e,scene:t,camera:o,preset:r,width:n,height:a})=>{let i=new postprocessing.EffectComposer(e);i.setSize(n,a),i.addPass(new postprocessing.RenderPass(t,o));let p=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}),g=new postprocessing.ChromaticAberrationEffect({offset:new De__namespace.Vector2(0,0),radialModulation:false,modulationOffset:.15}),u=new postprocessing.GlitchEffect({chromaticAberrationOffset:new De__namespace.Vector2(0,0),columns:.05});u.minStrength=0,u.maxStrength=0,u.mode=postprocessing.GlitchMode.DISABLED,u.blendMode.opacity.value=0,i.addPass(new postprocessing.EffectPass(o,p)),i.addPass(new postprocessing.EffectPass(o,s,c,l)),i.addPass(new postprocessing.EffectPass(o,g)),i.addPass(new postprocessing.EffectPass(o,u));function m(h){let f=h.effects;p.intensity=f.bloom?.intensity??0,p.luminanceMaterial&&f.bloom?.luminanceThreshold!==void 0&&(p.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 b=f.chromatic?.offset??0;g.offset?.set(b,b);let y=f.glitch?.strength?.[1]??0;f.glitch&&y>0?(u.mode=postprocessing.GlitchMode.SPORADIC,u.blendMode.opacity.value=1,u.minStrength=f.glitch.strength?.[0]??0,u.maxStrength=y):(u.mode=postprocessing.GlitchMode.DISABLED,u.blendMode.opacity.value=0,u.minStrength=0,u.maxStrength=0);}return m(r),{composer:i,setPreset:m,resize:(h,f)=>i.setSize(h,f),dispose:()=>{i.dispose();}}};var lr=3e3,yi=400,tv=80,Rp=({width:e,height:t,palette:o})=>{let r=new De__namespace.Scene;r.background=new De__namespace.Color(o.background);let n=new De__namespace.PerspectiveCamera(70,e/t,.1,yi*2);n.position.z=0;let a=new Float32Array(lr*6),i=new Float32Array(lr*6),p=new Float32Array(lr),s=new De__namespace.Color(o.primary),c=new De__namespace.Color(o.accent);function l(b,y){let R=Math.random()*Math.PI*2,w=tv*Math.pow(Math.random(),.6),x=Math.cos(R)*w,S=Math.sin(R)*w,M=y?-Math.random()*yi:-yi;p[b]=M,a[b*6+0]=x,a[b*6+1]=S,a[b*6+2]=M,a[b*6+3]=x,a[b*6+4]=S,a[b*6+5]=M-2,i[b*6+0]=s.r,i[b*6+1]=s.g,i[b*6+2]=s.b,i[b*6+3]=c.r,i[b*6+4]=c.g,i[b*6+5]=c.b;}for(let b=0;b<lr;b++)l(b,true);let g=new De__namespace.BufferGeometry;g.setAttribute("position",new De__namespace.BufferAttribute(a,3)),g.setAttribute("color",new De__namespace.BufferAttribute(i,3));let u=new De__namespace.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:De__namespace.AdditiveBlending}),m=new De__namespace.LineSegments(g,u);r.add(m);let h=60,f=6;return {scene:r,camera:n,update:(b,y)=>{let R=g.attributes.position.array;for(let w=0;w<lr;w++){let x=w*6;R[x+2]+=h*y,R[x+5]=R[x+2]-f,R[x+2]>5&&l(w,false);}g.attributes.position.needsUpdate=true;},resize:(b,y)=>{let R=n;R.aspect=b/y,R.updateProjectionMatrix();},setPalette:b=>{r.background=new De__namespace.Color(b.background);let y=new De__namespace.Color(b.primary),R=new De__namespace.Color(b.accent),w=g.attributes.color.array;for(let x=0;x<lr;x++)w[x*6+0]=y.r,w[x*6+1]=y.g,w[x*6+2]=y.b,w[x*6+3]=R.r,w[x*6+4]=R.g,w[x*6+5]=R.b;g.attributes.color.needsUpdate=true;},dispose:()=>{g.dispose(),u.dispose();}}};var ov=`
393
+ `),y__namespace.createElement("button",{type:"button",onClick:()=>C?Z(0):k(G=>!G),"aria-label":C?"Replay":w?"Play":"Pause",style:Yi},C?y__namespace.createElement(ru,null):w?y__namespace.createElement(my,null):y__namespace.createElement(gy,null)),y__namespace.createElement("div",{"data-gds-transport-extras":true},y__namespace.createElement("button",{type:"button",onClick:()=>Z(0),"aria-label":"Restart",style:Yi},y__namespace.createElement(ru,null)),y__namespace.createElement("div",{style:{display:"flex",gap:5,padding:"0 6px"},"aria-hidden":true},u.map((G,K)=>y__namespace.createElement("button",{key:K,type:"button",onClick:()=>Z(K),"aria-label":`Go to ${G.props.label??`scene ${K+1}`}`,tabIndex:-1,style:{...Yi,width:14,height:14}},y__namespace.createElement("span",{style:{width:6,height:6,borderRadius:999,background:K===S?"#fff":"rgba(255,255,255,0.35)",transition:"background 200ms ease"}})))))),C&&y__namespace.createElement("button",{type:"button",onClick:()=>Z(0),"aria-label":"Replay",style:{position:"absolute",inset:0,margin:"auto",width:64,height:64,display:"grid",placeItems:"center",borderRadius:999,border:"none",color:"#fff",background:"rgba(15,15,17,0.55)",backdropFilter:"blur(10px)",boxShadow:"0 8px 30px rgba(0,0,0,0.35)",cursor:"pointer"}},y__namespace.createElement("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":true},y__namespace.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),y__namespace.createElement("path",{d:"M3 3v5h5"}))));return y__namespace.createElement("div",{"data-gds-part":"motion",className:d("gds-motion",l),style:{position:"absolute",inset:0,overflow:"hidden",background:f?Y?"#000":"transparent":o,...s}},f?y__namespace.createElement(ly,{ratio:f},Qe):Qe)}var gu=({renderer:e,scene:t,camera:o,preset:a,width:n,height:r})=>{let i=new postprocessing.EffectComposer(e);i.setSize(n,r),i.addPass(new postprocessing.RenderPass(t,o));let l=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 p=new postprocessing.VignetteEffect({darkness:0,offset:.5}),m=new postprocessing.ChromaticAberrationEffect({offset:new He__namespace.Vector2(0,0),radialModulation:false,modulationOffset:.15}),u=new postprocessing.GlitchEffect({chromaticAberrationOffset:new He__namespace.Vector2(0,0),columns:.05});u.minStrength=0,u.maxStrength=0,u.mode=postprocessing.GlitchMode.DISABLED,u.blendMode.opacity.value=0,i.addPass(new postprocessing.EffectPass(o,l)),i.addPass(new postprocessing.EffectPass(o,s,c,p)),i.addPass(new postprocessing.EffectPass(o,m)),i.addPass(new postprocessing.EffectPass(o,u));function g(h){let f=h.effects;l.intensity=f.bloom?.intensity??0,l.luminanceMaterial&&f.bloom?.luminanceThreshold!==void 0&&(l.luminanceMaterial.threshold=f.bloom.luminanceThreshold),s.blendMode.opacity.value=f.noise?.intensity??0,c.density=f.scanlines?.density??1.25,c.blendMode.opacity.value=f.scanlines?.opacity??0,p.darkness=f.vignette?.darkness??0,p.offset=f.vignette?.offset??.5;let b=f.chromatic?.offset??0;m.offset?.set(b,b);let v=f.glitch?.strength?.[1]??0;f.glitch&&v>0?(u.mode=postprocessing.GlitchMode.SPORADIC,u.blendMode.opacity.value=1,u.minStrength=f.glitch.strength?.[0]??0,u.maxStrength=v):(u.mode=postprocessing.GlitchMode.DISABLED,u.blendMode.opacity.value=0,u.minStrength=0,u.maxStrength=0);}return g(a),{composer:i,setPreset:g,resize:(h,f)=>i.setSize(h,f),dispose:()=>{i.dispose();}}};var Da=3e3,ts=400,Dy=80,fu=({width:e,height:t,palette:o})=>{let a=new He__namespace.Scene;a.background=new He__namespace.Color(o.background);let n=new He__namespace.PerspectiveCamera(70,e/t,.1,ts*2);n.position.z=0;let r=new Float32Array(Da*6),i=new Float32Array(Da*6),l=new Float32Array(Da),s=new He__namespace.Color(o.primary),c=new He__namespace.Color(o.accent);function p(b,v){let S=Math.random()*Math.PI*2,x=Dy*Math.pow(Math.random(),.6),w=Math.cos(S)*x,k=Math.sin(S)*x,C=v?-Math.random()*ts:-ts;l[b]=C,r[b*6+0]=w,r[b*6+1]=k,r[b*6+2]=C,r[b*6+3]=w,r[b*6+4]=k,r[b*6+5]=C-2,i[b*6+0]=s.r,i[b*6+1]=s.g,i[b*6+2]=s.b,i[b*6+3]=c.r,i[b*6+4]=c.g,i[b*6+5]=c.b;}for(let b=0;b<Da;b++)p(b,true);let m=new He__namespace.BufferGeometry;m.setAttribute("position",new He__namespace.BufferAttribute(r,3)),m.setAttribute("color",new He__namespace.BufferAttribute(i,3));let u=new He__namespace.LineBasicMaterial({vertexColors:true,transparent:true,opacity:.95,blending:He__namespace.AdditiveBlending}),g=new He__namespace.LineSegments(m,u);a.add(g);let h=60,f=6;return {scene:a,camera:n,update:(b,v)=>{let S=m.attributes.position.array;for(let x=0;x<Da;x++){let w=x*6;S[w+2]+=h*v,S[w+5]=S[w+2]-f,S[w+2]>5&&p(x,false);}m.attributes.position.needsUpdate=true;},resize:(b,v)=>{let S=n;S.aspect=b/v,S.updateProjectionMatrix();},setPalette:b=>{a.background=new He__namespace.Color(b.background);let v=new He__namespace.Color(b.primary),S=new He__namespace.Color(b.accent),x=m.attributes.color.array;for(let w=0;w<Da;w++)x[w*6+0]=v.r,x[w*6+1]=v.g,x[w*6+2]=v.b,x[w*6+3]=S.r,x[w*6+4]=S.g,x[w*6+5]=S.b;m.attributes.color.needsUpdate=true;},dispose:()=>{m.dispose(),u.dispose();}}};var Ay=`
392
394
  precision highp float;
393
395
  varying vec2 vUv;
394
396
  uniform float uTime;
@@ -426,19 +428,19 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
426
428
 
427
429
  gl_FragColor = vec4(col, 1.0);
428
430
  }
429
- `,rv=`
431
+ `,Iy=`
430
432
  varying vec2 vUv;
431
433
  void main() {
432
434
  vUv = uv;
433
435
  gl_Position = vec4(position.xy, 0.0, 1.0);
434
436
  }
435
- `,Sp=({width:e,height:t,palette:o})=>{let r=new De__namespace.Scene,n=new De__namespace.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new De__namespace.Vector2(e,t)},uBackground:{value:new De__namespace.Color(o.background)},uPrimary:{value:new De__namespace.Color(o.primary)},uSecondary:{value:new De__namespace.Color(o.secondary)},uAccent:{value:new De__namespace.Color(o.accent)}},i=new De__namespace.ShaderMaterial({uniforms:a,vertexShader:rv,fragmentShader:ov,depthTest:false,depthWrite:false}),p=new De__namespace.PlaneGeometry(2,2),s=new De__namespace.Mesh(p,i);return r.add(s),{scene:r,camera:n,update:l=>{a.uTime.value=l;},resize:(l,g)=>{a.uResolution.value.set(l,g);},setPalette:l=>{a.uBackground.value.set(l.background),a.uPrimary.value.set(l.primary),a.uSecondary.value.set(l.secondary),a.uAccent.value.set(l.accent);},dispose:()=>{p.dispose(),i.dispose();}}};var av=`
437
+ `,hu=({width:e,height:t,palette:o})=>{let a=new He__namespace.Scene,n=new He__namespace.OrthographicCamera(-1,1,1,-1,0,1),r={uTime:{value:0},uResolution:{value:new He__namespace.Vector2(e,t)},uBackground:{value:new He__namespace.Color(o.background)},uPrimary:{value:new He__namespace.Color(o.primary)},uSecondary:{value:new He__namespace.Color(o.secondary)},uAccent:{value:new He__namespace.Color(o.accent)}},i=new He__namespace.ShaderMaterial({uniforms:r,vertexShader:Iy,fragmentShader:Ay,depthTest:false,depthWrite:false}),l=new He__namespace.PlaneGeometry(2,2),s=new He__namespace.Mesh(l,i);return a.add(s),{scene:a,camera:n,update:p=>{r.uTime.value=p;},resize:(p,m)=>{r.uResolution.value.set(p,m);},setPalette:p=>{r.uBackground.value.set(p.background),r.uPrimary.value.set(p.primary),r.uSecondary.value.set(p.secondary),r.uAccent.value.set(p.accent);},dispose:()=>{l.dispose(),i.dispose();}}};var Hy=`
436
438
  varying vec2 vUv;
437
439
  void main() {
438
440
  vUv = uv;
439
441
  gl_Position = vec4(position.xy, 0.0, 1.0);
440
442
  }
441
- `,nv=`
443
+ `,Fy=`
442
444
  precision highp float;
443
445
  varying vec2 vUv;
444
446
  uniform float uTime;
@@ -495,13 +497,13 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
495
497
 
496
498
  gl_FragColor = vec4(col, 1.0);
497
499
  }
498
- `,kp=({width:e,height:t,palette:o})=>{let r=new De__namespace.Scene,n=new De__namespace.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uResolution:{value:new De__namespace.Vector2(e,t)},uBackground:{value:new De__namespace.Color(o.background)},uPrimary:{value:new De__namespace.Color(o.primary)},uSecondary:{value:new De__namespace.Color(o.secondary)},uAccent:{value:new De__namespace.Color(o.accent)}},i=new De__namespace.ShaderMaterial({uniforms:a,vertexShader:av,fragmentShader:nv,depthTest:false,depthWrite:false}),p=new De__namespace.PlaneGeometry(2,2),s=new De__namespace.Mesh(p,i);return r.add(s),{scene:r,camera:n,update:l=>{a.uTime.value=l;},resize:(l,g)=>{a.uResolution.value.set(l,g);},setPalette:l=>{a.uBackground.value.set(l.background),a.uPrimary.value.set(l.primary),a.uSecondary.value.set(l.secondary),a.uAccent.value.set(l.accent);},dispose:()=>{p.dispose(),i.dispose();}}};var iv=`
500
+ `,bu=({width:e,height:t,palette:o})=>{let a=new He__namespace.Scene,n=new He__namespace.OrthographicCamera(-1,1,1,-1,0,1),r={uTime:{value:0},uResolution:{value:new He__namespace.Vector2(e,t)},uBackground:{value:new He__namespace.Color(o.background)},uPrimary:{value:new He__namespace.Color(o.primary)},uSecondary:{value:new He__namespace.Color(o.secondary)},uAccent:{value:new He__namespace.Color(o.accent)}},i=new He__namespace.ShaderMaterial({uniforms:r,vertexShader:Hy,fragmentShader:Fy,depthTest:false,depthWrite:false}),l=new He__namespace.PlaneGeometry(2,2),s=new He__namespace.Mesh(l,i);return a.add(s),{scene:a,camera:n,update:p=>{r.uTime.value=p;},resize:(p,m)=>{r.uResolution.value.set(p,m);},setPalette:p=>{r.uBackground.value.set(p.background),r.uPrimary.value.set(p.primary),r.uSecondary.value.set(p.secondary),r.uAccent.value.set(p.accent);},dispose:()=>{l.dispose(),i.dispose();}}};var zy=`
499
501
  varying vec2 vUv;
500
502
  void main() {
501
503
  vUv = uv;
502
504
  gl_Position = vec4(position.xy, 0.0, 1.0);
503
505
  }
504
- `,sv=`
506
+ `,By=`
505
507
  precision highp float;
506
508
  varying vec2 vUv;
507
509
  uniform float uTime;
@@ -571,7 +573,8 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
571
573
 
572
574
  gl_FragColor = vec4(col, 1.0);
573
575
  }
574
- `,Cp=({palette:e})=>{let t=new De__namespace.Scene,o=new De__namespace.OrthographicCamera(-1,1,1,-1,0,1),r={uTime:{value:0},uBackground:{value:new De__namespace.Color(e.background)},uPrimary:{value:new De__namespace.Color(e.primary)},uSecondary:{value:new De__namespace.Color(e.secondary)},uAccent:{value:new De__namespace.Color(e.accent)}},n=new De__namespace.ShaderMaterial({uniforms:r,vertexShader:iv,fragmentShader:sv,depthTest:false,depthWrite:false}),a=new De__namespace.PlaneGeometry(2,2),i=new De__namespace.Mesh(a,n);return t.add(i),{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(),n.dispose();}}};var Tp=`
576
+ `,vu=({palette:e})=>{let t=new He__namespace.Scene,o=new He__namespace.OrthographicCamera(-1,1,1,-1,0,1),a={uTime:{value:0},uBackground:{value:new He__namespace.Color(e.background)},uPrimary:{value:new He__namespace.Color(e.primary)},uSecondary:{value:new He__namespace.Color(e.secondary)},uAccent:{value:new He__namespace.Color(e.accent)}},n=new He__namespace.ShaderMaterial({uniforms:a,vertexShader:zy,fragmentShader:By,depthTest:false,depthWrite:false}),r=new He__namespace.PlaneGeometry(2,2),i=new He__namespace.Mesh(r,n);return t.add(i),{scene:t,camera:o,update:s=>{a.uTime.value=s;},setPalette:s=>{a.uBackground.value.set(s.background),a.uPrimary.value.set(s.primary),a.uSecondary.value.set(s.secondary),a.uAccent.value.set(s.accent);},dispose:()=>{r.dispose(),n.dispose();}}};function os(e){return "u"+e.charAt(0).toUpperCase()+e.slice(1)}var xu=8;function Vy(e){let t=[];for(let o of e){if(o.type==="divider")continue;let a=os(o.key);if(o.type==="color")t.push(`uniform vec3 ${a};`);else if(o.type==="colorList"){let n=Math.min(o.max??o.default.length,xu);t.push(`uniform vec3 ${a}[${n}];`,`uniform int ${a}Count;`);}else t.push(`uniform float ${a};`);}return t.join(`
577
+ `)}function yu(e){let t=new He__namespace.Color;try{t.set(e);}catch{t.setRGB(.5,.5,.5);}return t}var wu=`
575
578
  precision highp float;
576
579
  varying vec2 vUv;
577
580
  uniform float uTime;
@@ -581,15 +584,16 @@ applyThemeToRoot(theme, "light"); // or "dark" / "superLight" / "superDark"
581
584
  uniform vec3 uSecondary;
582
585
  uniform vec3 uAccent;
583
586
  uniform vec3 uBackground;
584
- `,lv=`
587
+ `,_y=`
585
588
  varying vec2 vUv;
586
589
  void main() {
587
590
  vUv = uv;
588
591
  gl_Position = vec4(position.xy, 0.0, 1.0);
589
592
  }
590
- `,dr=class extends Error{log;source;constructor(t,o){super(`Fragment shader failed to compile:
591
- ${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=o;}};function dv(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 n=o.getShaderParameter(r,o.COMPILE_STATUS),a=o.getShaderInfoLog(r)||"";if(o.deleteShader(r),!n)throw new dr(a,t)}function io(e){return ({renderer:t,width:o,height:r,palette:n})=>{let a=`${Tp}
592
- ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCamera(-1,1,1,-1,0,1),s={uTime:{value:0},uResolution:{value:new De__namespace.Vector2(o,r)},uMouse:{value:new De__namespace.Vector2(.5,.5)},uPrimary:{value:new De__namespace.Color(n.primary)},uSecondary:{value:new De__namespace.Color(n.secondary)},uAccent:{value:new De__namespace.Color(n.accent)},uBackground:{value:new De__namespace.Color(n.background)}},c=new De__namespace.ShaderMaterial({uniforms:s,vertexShader:lv,fragmentShader:a,depthTest:false,depthWrite:false}),l=new De__namespace.PlaneGeometry(2,2),g=new De__namespace.Mesh(l,c);return i.add(g),{scene:i,camera:p,update:m=>{s.uTime.value=m;},resize:(m,h)=>{s.uResolution.value.set(m,h);},setPalette:m=>{s.uPrimary.value.set(m.primary),s.uSecondary.value.set(m.secondary),s.uAccent.value.set(m.accent),s.uBackground.value.set(m.background);},setMouse:(m,h)=>{s.uMouse.value.set(m,h);},dispose:()=>{l.dispose(),c.dispose();}}}}var Pp=io(`
593
+ `,Aa=class extends Error{log;source;constructor(t,o){super(`Fragment shader failed to compile:
594
+ ${t.trim()}`),this.name="ShaderCompileError",this.log=t,this.source=o;}};function Oy(e,t){let o=e.getContext(),a=o.createShader(o.FRAGMENT_SHADER);if(!a)throw new Error("Unable to allocate fragment shader");o.shaderSource(a,t),o.compileShader(a);let n=o.getShaderParameter(a,o.COMPILE_STATUS),r=o.getShaderInfoLog(a)||"";if(o.deleteShader(a),!n)throw new Aa(r,t)}function $e(e,t){return ({renderer:o,width:a,height:n,palette:r})=>{let i=t?.length?Vy(t):"",l=`${wu}
595
+ ${i}
596
+ ${e}`;Oy(o,l);let s=new He__namespace.Scene,c=new He__namespace.OrthographicCamera(-1,1,1,-1,0,1),p={uTime:{value:0},uResolution:{value:new He__namespace.Vector2(a,n)},uMouse:{value:new He__namespace.Vector2(.5,.5)},uPrimary:{value:new He__namespace.Color(r.primary)},uSecondary:{value:new He__namespace.Color(r.secondary)},uAccent:{value:new He__namespace.Color(r.accent)},uBackground:{value:new He__namespace.Color(r.background)}};if(t?.length)for(let b of t){if(b.type==="divider")continue;let v=os(b.key);if(b.type==="color")p[v]={value:yu(b.default)};else if(b.type==="colorList"){let S=Math.min(b.max??b.default.length,xu),x=Array.from({length:S},(w,k)=>yu(b.default[Math.min(k,b.default.length-1)]??"#888"));p[v]={value:x},p[`${v}Count`]={value:Math.min(b.default.length,S)};}else if(b.type==="select"||b.type==="segmented"){let S=b.options.findIndex(x=>x.value===b.default);p[v]={value:Math.max(0,S)};}else b.type==="toggle"?p[v]={value:b.default?1:0}:p[v]={value:b.default};}let m=new Map;for(let b of t??[])b.type!=="divider"&&m.set(b.key,b);let u=new He__namespace.ShaderMaterial({uniforms:p,vertexShader:_y,fragmentShader:l,depthTest:false,depthWrite:false}),g=new He__namespace.PlaneGeometry(2,2),h=new He__namespace.Mesh(g,u);return s.add(h),{scene:s,camera:c,update:b=>{p.uTime.value=b;},resize:(b,v)=>{p.uResolution.value.set(b,v);},setPalette:b=>{p.uPrimary.value.set(b.primary),p.uSecondary.value.set(b.secondary),p.uAccent.value.set(b.accent),p.uBackground.value.set(b.background);},setMouse:(b,v)=>{p.uMouse.value.set(b,v);},setParams:b=>{for(let[v,S]of Object.entries(b)){let x=m.get(v);if(!x)continue;let w=os(v),k=p[w];if(k)if(x.type==="color")k.value.set(String(S));else if(x.type==="colorList"){let C=Array.isArray(S)?S:[],E=k.value;for(let O=0;O<E.length;O++){let M=C[Math.min(O,C.length-1)];M&&E[O].set(M);}let F=p[`${w}Count`];F&&(F.value=Math.min(C.length,E.length));}else if(x.type==="select"||x.type==="segmented"){let C=x.options.findIndex(E=>E.value===S);k.value=Math.max(0,C);}else x.type==="toggle"?k.value=S?1:0:k.value=Number(S);}},dispose:()=>{g.dispose(),u.dispose();}}}}var ku=$e(`
593
597
  void main() {
594
598
  vec2 uv = vUv;
595
599
  float t = uTime * 0.15;
@@ -608,7 +612,7 @@ ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCame
608
612
  col = mix(col, uAccent, w3 * 0.85);
609
613
  gl_FragColor = vec4(col, 1.0);
610
614
  }
611
- `),Mp=io(`
615
+ `),Su=$e(`
612
616
  float uHash(vec2 p) {
613
617
  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
614
618
  }
@@ -660,7 +664,7 @@ ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCame
660
664
 
661
665
  gl_FragColor = vec4(col, 1.0);
662
666
  }
663
- `),Np=io(`
667
+ `),Ru=$e(`
664
668
  float dHash(vec2 p) {
665
669
  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
666
670
  }
@@ -704,7 +708,7 @@ ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCame
704
708
  vec3 col = mix(uBackground, dotCol, dot_ * (0.78 + 0.22 * flow));
705
709
  gl_FragColor = vec4(col, 1.0);
706
710
  }
707
- `),Ep=io(`
711
+ `),Cu=$e(`
708
712
  float gHash(vec2 p) {
709
713
  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
710
714
  }
@@ -742,7 +746,7 @@ ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCame
742
746
 
743
747
  gl_FragColor = vec4(col, 1.0);
744
748
  }
745
- `),Lp=io(`
749
+ `),Tu=$e(`
746
750
  void main() {
747
751
  vec2 uv = vUv;
748
752
  float t = uTime * 0.4;
@@ -753,6 +757,539 @@ ${e}`;dv(t,a);let i=new De__namespace.Scene,p=new De__namespace.OrthographicCame
753
757
  col = mix(col, uAccent, smoothstep(0.85, 1.0, m));
754
758
  gl_FragColor = vec4(col, 1.0);
755
759
  }
756
- `);var qr={space:Rp,plasma:Sp,voronoi:kp,synthwave:Cp,mesh:Pp,waves:Lp,undertones:Mp,"flowing-dots":Np,grain:Ep},Yr=[{id:"mesh",label:"Mesh gradient",description:"Smooth moving blobs of the primary / secondary / accent colours over the background \u2014 the go-to soft, theme-reactive background.",tags:["gradient","mesh","abstract","hero","background"],scene:"mesh",defaultPostPreset:"none"},{id:"waves",label:"Waves",description:"Flowing banded ribbons that ripple across the surface. Clean motion for headers and hero backdrops.",tags:["waves","motion","abstract","hero"],scene:"waves",defaultPostPreset:"none"},{id:"undertones",label:"Undertones",description:"Soft low-saturation tonal washes drifting like weather \u2014 the field bends gently toward the cursor and a faint light follows it. The calm, expensive-feeling backdrop.",tags:["gradient","soft","subtle","mouse","hero","background","calm"],scene:"undertones",defaultPostPreset:"none"},{id:"flowing-dots",label:"Flowing dots",description:"A dot-matrix grid where waves of dots swell and tint as a flow field passes through \u2014 and swell toward the cursor. Playful, technical, great behind type.",tags:["dots","grid","halftone","mouse","motion","background","playful"],scene:"flowing-dots",defaultPostPreset:"none"},{id:"grain",label:"Grain",description:"A glacial tonal wash under heavy animated film grain \u2014 fine print grain plus a coarser fleck, with a gentle vignette. The editorial, print-feeling backdrop; lovely in light AND dark tones.",tags:["grain","film","texture","editorial","print","subtle","hero","background"],scene:"grain",defaultPostPreset:"none"},{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"}],Zr=Object.fromEntries(Yr.map(e=>[e.id,e]));var Xr={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}}}},Za="vhs";var Jr={primary:"oklch(var(--brand-1, 0.62 0.20 20))",secondary:"oklch(var(--brand-2, 0.70 0.16 200))",accent:"oklch(var(--brand-3, 0.78 0.17 90))",background:"oklch(var(--background, 0.12 0.01 265))"},uv={dark:"oklch(0.13 0.015 265)",light:"oklch(0.97 0.005 265)"},mv=/^[\d.]+\s+[\d.]+\s+[\d.]+(?:\s*\/\s*[\d.%]+)?$/,gv=/^[\d.]+\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.%]+)?$/,fv=/^\s*var\(\s*(--[^,)\s]+)(?:\s*,[^)]*)?\s*\)\s*$/;function Xa(e,t,o){if(typeof document>"u")return o;let r=e,n=fv.exec(e);if(n){let p=getComputedStyle(t).getPropertyValue(n[1]).trim();p&&(mv.test(p)?r=`oklch(${p})`:gv.test(p)&&(r=`hsl(${p})`));}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 i=getComputedStyle(a).color;if(t.removeChild(a),!i)return o;if(i.startsWith("rgb"))return i;try{let p=document.createElement("canvas");p.width=1,p.height=1;let s=p.getContext("2d");if(!s)return i;s.clearRect(0,0,1,1),s.fillStyle=i,s.fillRect(0,0,1,1);let[c,l,g]=s.getImageData(0,0,1,1).data;return `rgb(${c}, ${l}, ${g})`}catch{return i}}function Dp(e,t){return {primary:Xa(e.primary,t,Jr.primary),secondary:Xa(e.secondary,t,Jr.secondary),accent:Xa(e.accent,t,Jr.accent),background:Xa(e.background,t,Jr.background)}}var cr=v__namespace.forwardRef(({preset:e,fragmentShader:t,onShaderError:o,postPreset:r,palette:n,tone:a="auto",createScene:i,controls:p=false,autoPlay:s=true,play:c,pauseOffscreen:l=true,aspect:g="video",radius:u="lg",border:m=false,poster:h,label:f,className:b,style:y,maxDpr:R,...w},x)=>{let S=v__namespace.useRef(null),[M,A]=v__namespace.useState(c??s),[H,W]=v__namespace.useState(false),z=go(),F=v__namespace.useMemo(()=>{let I={...Jr,...n};return a!=="auto"&&!n?.background&&(I.background=uv[a]),I},[n,a]),B=v__namespace.useMemo(()=>i||(t?io(t):e&&qr[e]?qr[e]:null),[i,t,e]),q=v__namespace.useMemo(()=>{if(r&&typeof r=="object")return r;let I=typeof r=="string"?r:(e?Zr[e]?.defaultPostPreset:void 0)??Za;return Xr[I]??Xr[Za]},[r,e]),ie=v__namespace.useRef(q);ie.current=q;let N=v__namespace.useRef(F);N.current=F;let ue=v__namespace.useMemo(()=>JSON.stringify(F??null),[F]),k=v__namespace.useRef(o);k.current=o,v__namespace.useEffect(()=>{let I=S.current;if(!I||!B)return;let j=I.clientWidth||1,Z=I.clientHeight||1,ae=Dp(N.current,I),U=new De__namespace.WebGLRenderer({antialias:true,alpha:false,powerPreference:"high-performance"}),xe=R??Math.min(window.devicePixelRatio||1,2);U.setPixelRatio(xe),U.setSize(j,Z),U.setClearColor(new De__namespace.Color(ae.background),1),U.domElement.dataset.gdsPart="shader-canvas",U.domElement.style.width="100%",U.domElement.style.height="100%",U.domElement.style.display="block",I.appendChild(U.domElement);let E;try{E=B({renderer:U,width:j,height:Z,palette:ae});}catch(_){if(_ instanceof dr)k.current?.(_),E=qr.space({renderer:U,width:j,height:Z,palette:ae});else throw U.dispose(),U.domElement.parentElement===I&&I.removeChild(U.domElement),_}let me=ie.current,X=wp({renderer:U,scene:E.scene,camera:E.camera,preset:me,width:j,height:Z}),Ke=new De__namespace.Clock,ve=0,ke=(c??s)&&!z,qe=true,Ge=()=>{if(ve=requestAnimationFrame(Ge),!ke||l&&!qe)return;let _=Ke.getDelta(),Le=Ke.getElapsedTime();E.update?.(Le,_),X.composer.render(_);};E.update?.(0,0),X.composer.render(0),W(true),Ge();let O=new ResizeObserver(([_])=>{let Le=Math.max(1,Math.floor(_.contentRect.width)),Ne=Math.max(1,Math.floor(_.contentRect.height));U.setSize(Le,Ne),X.resize(Le,Ne),E.resize?.(Le,Ne),ke||(E.update?.(Ke.getElapsedTime(),0),X.composer.render(0));});O.observe(I);let K=new IntersectionObserver(([_])=>{qe=_.isIntersecting;},{threshold:.05});K.observe(I);let V=new MutationObserver(()=>{if(!S.current)return;let _=Dp(N.current,S.current);U.setClearColor(new De__namespace.Color(_.background),1),E.setPalette?.(_);});V.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-theme","data-gds-theme","data-grade-mode"]});let ge=E,Te=ge.setMouse?_=>{let Le=I.getBoundingClientRect(),Ne=(_.clientX-Le.left)/Le.width,Mt=1-(_.clientY-Le.top)/Le.height;ge.setMouse(Ne,Mt);}:null;return Te&&I.addEventListener("pointermove",Te),G.current={toggle:()=>{ke=!ke,A(ke);},setRunning:_=>{ke=_&&!z,A(ke);},setPalette:_=>{U.setClearColor(new De__namespace.Color(_.background),1),E.setPalette?.(_);},setPostPreset:_=>{let Le=typeof _=="string"?Xr[_]:_;Le&&X.setPreset(Le);}},()=>{cancelAnimationFrame(ve),O.disconnect(),K.disconnect(),V.disconnect(),Te&&I.removeEventListener("pointermove",Te),X.dispose(),E.dispose?.(),U.dispose(),U.domElement.parentElement===I&&I.removeChild(U.domElement),G.current=null;}},[B,ue,s,z,l,R]);let G=v__namespace.useRef(null);v__namespace.useEffect(()=>{G.current?.setPostPreset(q);},[q]),v__namespace.useEffect(()=>{c!==void 0&&G.current?.setRunning(c);},[c]);let he=()=>G.current?.toggle();return v__namespace.createElement(jt,{...w,ref:I=>{S.current=I,typeof x=="function"?x(I):x&&(x.current=I);},aspect:g,radius:u,border:m,"aria-label":f,className:b,style:y,"data-gds-part":"three-scene"},!H&&h&&v__namespace.createElement("img",{src:h,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),p&&v__namespace.createElement("div",{"data-gds-part":"scene-controls",className:d("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(dt,{size:"icon",variant:"secondary",onClick:he},M?v__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):v__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))});cr.displayName="ThreeScene";function Ap(e,t,o){let r=e[t];return typeof r=="number"?r:o}function Ja(e,t,o){let r=e[t];return typeof r=="string"?r:o}function Ip(e,t,o){let r=e[t];return typeof r=="boolean"?r:o}function Hp(e,t,o){let r=e[t];return Array.isArray(r)?r:o}var Qa="text-[11px] font-medium text-foreground";function vv({controls:e,state:t,onChange:o,disabled:r,className:n}){return v__namespace.createElement("div",{className:d("flex flex-col",n)},e.map(a=>{if(a.type==="divider")return v__namespace.createElement("div",{key:a.key,className:"mt-3 mb-1 border-t border-border/60 pt-2 first:mt-0 first:border-t-0 first:pt-0"},a.label?v__namespace.createElement("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-foreground/80"},a.label):null);if(a.type==="slider")return v__namespace.createElement(yv,{key:a.key,spec:a,value:Ap(t,a.key,a.default),disabled:r,onChange:p=>o(a.key,p)});if(a.type==="segmented"){let p=Ja(t,a.key,a.default);return v__namespace.createElement(xi,{key:a.key,label:a.label},v__namespace.createElement(Bo,{type:"single",size:"sm",value:p,onValueChange:s=>s&&o(a.key,s),disabled:r,className:"w-full justify-start"},a.options.map(s=>v__namespace.createElement(Oo,{key:s.value,value:s.value,className:"flex-1"},s.label))))}if(a.type==="select"){let p=Ja(t,a.key,a.default);return v__namespace.createElement(xi,{key:a.key,label:a.label},v__namespace.createElement(Tn,{value:p,onValueChange:s=>o(a.key,s),disabled:r},v__namespace.createElement(Ea,{size:"xs",className:"w-full"},v__namespace.createElement(Pn,null)),v__namespace.createElement(La,{size:"xs"},a.options.map(s=>v__namespace.createElement(Da,{key:s.value,value:s.value},s.label)))))}if(a.type==="toggle"){let p=Ip(t,a.key,a.default);return v__namespace.createElement("div",{key:a.key,className:"flex items-center justify-between gap-2 py-1"},v__namespace.createElement(Io,{className:Qa},a.label),v__namespace.createElement(Ha,{checked:p,onCheckedChange:s=>o(a.key,s),disabled:r}))}if(a.type==="color"){let p=Ja(t,a.key,a.default);return v__namespace.createElement(xi,{key:a.key,label:a.label,hint:a.slot?`\u2192 ${a.slot}`:void 0},v__namespace.createElement(Fp,{value:p,disabled:r,onChange:s=>o(a.key,s)}))}let i=Hp(t,a.key,a.default);return v__namespace.createElement(wv,{key:a.key,spec:a,value:i,disabled:r,onChange:p=>o(a.key,p)})}))}function xi({label:e,hint:t,children:o}){return v__namespace.createElement("div",{className:"space-y-1 py-1"},v__namespace.createElement("div",{className:"flex items-baseline justify-between gap-2"},v__namespace.createElement(Io,{className:Qa},e),t?v__namespace.createElement("span",{className:"text-[10px] text-muted-foreground/70"},t):null),o)}function yv({spec:e,value:t,disabled:o,onChange:r}){let n=e.step<1?e.step<.1?3:2:0,a=l=>Math.min(e.max,Math.max(e.min,l)),[i,p]=v__namespace.useState(null),s=i??t.toFixed(n),c=l=>{let g=Number(l);Number.isFinite(g)&&r(a(g)),p(null);};return v__namespace.createElement("div",{className:"space-y-1 py-1"},v__namespace.createElement("div",{className:"flex items-center justify-between gap-2"},v__namespace.createElement(Io,{className:Qa},e.label),v__namespace.createElement(oo,{size:"xs",type:"text",inputMode:"decimal","aria-label":e.label,value:s,disabled:o,endSlot:e.unit?v__namespace.createElement("span",{className:"text-[9px] text-muted-foreground/60"},e.unit):void 0,className:"w-16 tabular-nums",onChange:l=>p(l.currentTarget.value),onBlur:l=>c(l.currentTarget.value),onKeyDown:l=>{l.key==="Enter"&&c(l.currentTarget.value);}})),v__namespace.createElement(Fo,{value:[t],min:e.min,max:e.max,step:e.step,disabled:o,onValueChange:l=>r(a(l[0]??e.default))}))}var xv=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i;function Fp({value:e,disabled:t,onChange:o}){let r=xv.test(e)?e:"#000000";return v__namespace.createElement("div",{className:"flex items-center gap-1.5"},v__namespace.createElement("input",{type:"color",value:r,disabled:t,onChange:n=>o(n.currentTarget.value),"aria-label":"Colour swatch",className:"h-7 w-9 shrink-0 cursor-pointer rounded-md border border-input bg-transparent disabled:opacity-50"}),v__namespace.createElement(oo,{size:"xs",value:e,disabled:t,onChange:n=>o(n.currentTarget.value),className:"font-mono"}))}function wv({spec:e,value:t,disabled:o,onChange:r}){let n=e.min??1,a=e.max??8,i=(c,l)=>r(t.map((g,u)=>u===c?l:g)),p=()=>t.length<a&&r([...t,t[t.length-1]??"#ffffff"]),s=c=>t.length>n&&r(t.filter((l,g)=>g!==c));return v__namespace.createElement("div",{className:"space-y-1 py-1"},v__namespace.createElement("div",{className:"flex items-baseline justify-between gap-2"},v__namespace.createElement(Io,{className:Qa},e.label),v__namespace.createElement("button",{type:"button",onClick:p,disabled:o||t.length>=a,"aria-label":"Add colour",className:"inline-flex h-5 w-5 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40 [&_svg]:size-3.5"},v__namespace.createElement(lucideReact.Plus,null))),v__namespace.createElement("div",{className:"space-y-1.5"},t.map((c,l)=>v__namespace.createElement("div",{key:l,className:"flex items-center gap-1.5"},v__namespace.createElement(Fp,{value:c,disabled:o,onChange:g=>i(l,g)}),v__namespace.createElement("button",{type:"button",onClick:()=>s(l),disabled:o||t.length<=n,"aria-label":"Remove colour",className:"inline-flex h-7 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40 [&_svg]:size-3.5"},v__namespace.createElement(lucideReact.Minus,null))))))}var Rv={background:"oklch(var(--background))",card:"oklch(var(--card))",muted:"oklch(var(--muted))",secondary:"oklch(var(--secondary))",accent:"oklch(var(--accent))",primary:"oklch(var(--primary))",destructive:"oklch(var(--destructive))",transparent:"transparent"};function en(e){if(e)return Rv[e]??e}var Sv={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl"},zp={cover:"object-cover",contain:"object-contain",fill:"object-fill",none:"object-none"},_p=v__namespace.forwardRef(({type:e,color:t,gradient:o,src:r,fit:n="cover",position:a="center",repeat:i=false,tileSize:p,preset:s,fragmentShader:c,palette:l,tone:g,postPreset:u,opacity:m,blendMode:h,radius:f="none",className:b,style:y},R)=>{if(e==="none")return null;let w={opacity:m,mixBlendMode:h,...y},x=null;if(e==="solid")w.background=en(t)??"oklch(var(--background))";else if(e==="gradient"){let S=[en(o?.from)??"oklch(var(--primary))",en(o?.via),en(o?.to)??"oklch(var(--accent))"].filter(Boolean);if(o?.shape==="radial"){let M=o.at??"center",A=o.size?`${o.size} `:"";w.backgroundImage=`radial-gradient(${A}at ${M}, ${S.join(", ")})`;}else {let M=o?.angle??135;w.backgroundImage=`linear-gradient(${M}deg, ${S.join(", ")})`;}}else e==="image"?i&&r?(w.backgroundImage=`url(${r})`,w.backgroundRepeat="repeat",w.backgroundPosition=a,p&&(w.backgroundSize=p)):r&&(x=v__namespace.createElement("img",{src:r,alt:"",className:d("absolute inset-0 h-full w-full",zp[n]),style:{objectPosition:a}})):e==="video"?r&&(x=v__namespace.createElement("video",{src:r,autoPlay:true,muted:true,loop:true,playsInline:true,className:d("absolute inset-0 h-full w-full",zp[n]),style:{objectPosition:a}})):e==="shader"&&(x=v__namespace.createElement(cr,{preset:s,fragmentShader:c,palette:l,tone:g,postPreset:u,aspect:"auto",radius:"none",className:"absolute inset-0"}));return v__namespace.createElement("div",{ref:R,"data-gds-part":"frame-fill","data-gds-fill-type":e,"aria-hidden":"true",className:d("absolute inset-0 z-0 overflow-hidden pointer-events-none",f!=="none"&&Sv[f],b),style:w},x)});_p.displayName="BackgroundFill";var Bp={primary:"oklch(var(--primary))",secondary:"oklch(var(--accent))",accent:"oklch(var(--primary))",background:"oklch(var(--foreground))"};var tn=v__namespace.forwardRef(({preset:e,live:t="hover",postPreset:o,palette:r,className:n,aspect:a="video",radius:i="lg",label:p,hideLabel:s=false,onClick:c},l)=>{let g=Zr[e],[u,m]=v__namespace.useState(false),h=t!=="never",f=t==="always"||t==="hover"&&u;return v__namespace.createElement("div",{ref:l,"data-gds-part":"picker-card","data-gds-preset":e,onMouseEnter:()=>m(true),onMouseLeave:()=>m(false),onClick:c,className:d("group cursor-pointer flex flex-col gap-2",n)},h?v__namespace.createElement(cr,{key:e,preset:e,postPreset:o,palette:r??Bp,aspect:a,radius:i,autoPlay:false,play:f,controls:false,pauseOffscreen:true,poster:g?.poster,maxDpr:1}):v__namespace.createElement(jt,{aspect:a,radius:i,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},g?.poster?v__namespace.createElement("img",{src:g.poster,alt:g.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"},g?.label??e)),!s&&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??g?.label??e),g?.tags?.[0]&&v__namespace.createElement("span",{className:"text-muted-foreground"},g.tags[0])))});tn.displayName="ShaderPresetPreview";function wi({value:e,onChange:t,filterTags:o,live:r="hover",postPreset:n,palette:a,columns:i=3,className:p}){let s=v__namespace.useMemo(()=>o?.length?Yr.filter(l=>o.some(g=>l.tags.includes(g))):Yr,[o]);return v__namespace.createElement("div",{"data-gds-part":"preset-grid",role:"radiogroup",className:d("grid grid-cols-2 gap-3",i===2?"md:grid-cols-2":i===4?"md:grid-cols-4":"md:grid-cols-3",p)},s.map(l=>{let g=e===l.id;return v__namespace.createElement("div",{key:l.id,className:"relative",role:"radio","aria-checked":g},v__namespace.createElement(tn,{preset:l.id,postPreset:n,palette:a,live:r,onClick:()=>t?.(l.id),className:d("transition-all",g&&"ring-2 ring-primary ring-offset-2 ring-offset-background rounded-lg")}),g&&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"})))}))}var on=["primary","accent","secondary","muted","card","background","destructive","transparent"];function Lv(e){return e==="transparent"?"transparent":`oklch(var(--${e}))`}var Dv=[{tab:"solid",icon:lucideReact.Square,label:"Solid"},{tab:"gradient",icon:lucideReact.Blend,label:"Gradient"},{tab:"image",icon:lucideReact.Image,label:"Image"},{tab:"pattern",icon:lucideReact.Grid3x3,label:"Pattern"},{tab:"video",icon:lucideReact.Video,label:"Video"},{tab:"shader",icon:lucideReact.Sparkles,label:"Shader"}];function Av(e){return e.type==="image"&&e.repeat?"pattern":e.type==="image"?"image":e.type}var Ut="text-[11px] font-medium text-muted-foreground";function Ri({token:e,active:t,onClick:o}){return v__namespace.createElement("button",{type:"button",title:e,onClick:o,className:d("h-7 w-7 rounded-md border border-border/60 transition-shadow",e==="transparent"&&"bg-[linear-gradient(45deg,#bbb_25%,transparent_25%,transparent_75%,#bbb_75%),linear-gradient(45deg,#bbb_25%,transparent_25%,transparent_75%,#bbb_75%)] bg-[length:8px_8px] bg-[position:0_0,4px_4px]",t&&"ring-2 ring-primary ring-offset-1 ring-offset-background"),style:e==="transparent"?void 0:{background:Lv(e)}})}function Op({value:e,onChange:t,className:o}){let r=Av(e),n=i=>t({...e,...i}),a=i=>{i&&n(i==="pattern"?{type:"image",repeat:true}:i==="image"?{type:"image",repeat:false}:{type:i});};return v__namespace.createElement("div",{className:d("flex flex-col gap-3",o)},v__namespace.createElement(Bo,{type:"single",size:"sm",value:r,onValueChange:i=>a(i),className:"justify-start gap-0.5"},Dv.map(({tab:i,icon:p,label:s})=>v__namespace.createElement(Oo,{key:i,value:i,"aria-label":s,title:s},v__namespace.createElement(p,{className:"h-4 w-4"})))),r==="solid"&&v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Token"),v__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},on.map(i=>v__namespace.createElement(Ri,{key:i,token:i,active:e.color===i,onClick:()=>n({color:i})})))),r==="gradient"&&v__namespace.createElement("div",{className:"flex flex-col gap-2"},v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"From"),v__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},on.map(i=>v__namespace.createElement(Ri,{key:i,token:i,active:e.gradient?.from===i,onClick:()=>n({gradient:{...e.gradient,from:i}})})))),v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"To"),v__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},on.map(i=>v__namespace.createElement(Ri,{key:i,token:i,active:e.gradient?.to===i,onClick:()=>n({gradient:{...e.gradient,to:i}})})))),v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Angle \u2014 ",e.gradient?.angle??135,"\xB0"),v__namespace.createElement(Fo,{value:[e.gradient?.angle??135],min:0,max:360,step:5,onValueChange:([i])=>n({gradient:{...e.gradient,angle:i}})}))),(r==="image"||r==="pattern")&&v__namespace.createElement("div",{className:"flex flex-col gap-2"},v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Image URL"),v__namespace.createElement(oo,{size:"sm",value:e.src??"",placeholder:"https://\u2026 or /asset.png",onChange:i=>n({src:i.target.value})})),r==="image"&&v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Fit"),v__namespace.createElement(Bo,{type:"single",size:"sm",value:e.fit??"cover",onValueChange:i=>i&&n({fit:i}),className:"justify-start gap-0.5"},["cover","contain","fill","none"].map(i=>v__namespace.createElement(Oo,{key:i,value:i,className:"px-2 text-[11px] capitalize"},i)))),r==="pattern"&&v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Tile size"),v__namespace.createElement(oo,{size:"sm",value:e.tileSize??"",placeholder:"120px",onChange:i=>n({tileSize:i.target.value})}))),r==="video"&&v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Video URL"),v__namespace.createElement(oo,{size:"sm",value:e.src??"",placeholder:"https://\u2026.mp4",onChange:i=>n({src:i.target.value})})),r==="shader"&&v__namespace.createElement("div",{className:"flex flex-col gap-1.5"},v__namespace.createElement("span",{className:Ut},"Shader"),v__namespace.createElement(wi,{value:e.preset,onChange:i=>n({preset:i}),live:"hover",columns:3})),e.type!=="none"&&v__namespace.createElement("div",{className:"flex items-center gap-2 border-t border-border/50 pt-2.5"},v__namespace.createElement("span",{className:d(Ut,"shrink-0")},"Opacity"),v__namespace.createElement(Fo,{value:[e.opacity??1],min:0,max:1,step:.05,onValueChange:([i])=>n({opacity:i}),className:"flex-1"}),v__namespace.createElement("span",{className:"w-9 shrink-0 text-right text-[11px] tabular-nums text-foreground"},Math.round((e.opacity??1)*100),"%")))}Op.displayName="FillPicker";function zv({children:e}){let t=v.useRef(null);return v.useEffect(()=>{let o=new Fv__default.default({duration:1.2,easing:n=>Math.min(1,1.001-Math.pow(2,-10*n)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:true});t.current=o;function r(n){o.raf(n),requestAnimationFrame(r);}return requestAnimationFrame(r),()=>{o.destroy(),t.current=null;}},[]),React.createElement(React.Fragment,null,e)}function Gv({className:e}){let t=Wo();if(!t)return null;let{theme:o,themes:r,setThemeId:n,deleteTheme:a}=t;return v__namespace.createElement(Ot,null,v__namespace.createElement(Vt,{asChild:true},v__namespace.createElement(dt,{variant:"ghost",size:"sm",className:d("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"},o.name))),v__namespace.createElement(Ht,{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:()=>Qn(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"},v__namespace.createElement(lucideReact.Download,{className:"h-3 w-3"}),".md")),v__namespace.createElement("div",{className:"flex flex-col gap-0.5"},r.map(i=>{let p=i.id===o.id,s=i.id in Wt,c=i.ramps.primary[500],l=i.ramps.accent[500],g=i.ramps.neutral[500];return v__namespace.createElement("div",{key:i.id,className:d("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:()=>n(i.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(${g})`},"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"},i.name),i.tagline&&v__namespace.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},i.tagline)),i.description&&v__namespace.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},i.description))),p&&v__namespace.createElement(lucideReact.Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!s&&!p&&v__namespace.createElement("button",{type:"button",onClick:u=>{u.stopPropagation(),a(i.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 ${i.name}`},v__namespace.createElement(lucideReact.Trash2,{className:"h-3.5 w-3.5"})))}))))}var Vp=[{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 Kv({className:e,variant:t="icons"}){let o=Wo();if(!o)return null;let{mode:r,setMode:n}=o;return t==="labeled"?v__namespace.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:d("inline-flex flex-wrap gap-1 rounded-md border border-border bg-background p-1",e)},Vp.map(({mode:a,label:i,icon:p})=>{let s=r===a;return v__namespace.createElement("button",{key:a,type:"button",role:"radio","aria-checked":s,onClick:()=>n(a),className:d("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")},v__namespace.createElement(p,{className:"h-4 w-4"}),v__namespace.createElement("span",null,i))})):v__namespace.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:d("inline-flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5",e)},Vp.map(({mode:a,icon:i,tooltip:p})=>{let s=r===a;return v__namespace.createElement("button",{key:a,type:"button",role:"radio","aria-checked":s,"aria-label":p,title:p,onClick:()=>n(a),className:d("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")},v__namespace.createElement(i,{className:"h-3.5 w-3.5"}))}))}function Zv(){let{isDark:e,setMode:t}=ni();return React.createElement(dt,{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")))}
757
- exports.ALL_MODES=Fc;exports.Accordion=Ru;exports.AccordionContent=$s;exports.AccordionItem=Ws;exports.AccordionTrigger=js;exports.AppShell=ol;exports.AppShellAside=nl;exports.AppShellFooter=sl;exports.AppShellHeader=rl;exports.AppShellMain=il;exports.AppShellNav=al;exports.Avatar=dl;exports.AvatarFallback=pl;exports.AvatarImage=cl;exports.BUILT_IN_INPUTS=Va;exports.BackgroundFill=_p;exports.Badge=sa;exports.Banner=fl;exports.BlinkingCursor=xa;exports.Breadcrumb=qd;exports.BreadcrumbEllipsis=ec;exports.BreadcrumbItem=Zd;exports.BreadcrumbLink=Xd;exports.BreadcrumbList=Yd;exports.BreadcrumbMenuTrigger=tc;exports.BreadcrumbPage=Jd;exports.BreadcrumbSeparator=Qd;exports.Button=dt;exports.COMPONENT_CONTRACTS=dn;exports.Calendar=da;exports.CalendarDayButton=bl;exports.Callout=Ks;exports.CalloutDescription=Ys;exports.CalloutTitle=qs;exports.Card=vl;exports.CardContent=Rl;exports.CardDescription=wl;exports.CardFooter=Sl;exports.CardHeader=yl;exports.CardTitle=xl;exports.Carousel=Vu;exports.CarouselArrows=mn;exports.CarouselDots=un;exports.CarouselNext=Tr;exports.CarouselPrev=Cr;exports.CarouselSlide=ca;exports.CarouselVideoSlide=pn;exports.ChartContainer=dc;exports.ChartLegend=Ff;exports.ChartLegendContent=uc;exports.ChartStyle=cc;exports.ChartTooltip=Hf;exports.ChartTooltipContent=pc;exports.Checkbox=kl;exports.CheckboxCard=Pl;exports.Code=Fl;exports.Composer=Vl;exports.ComposerReply=pg;exports.DEMO_SPEED_PRESETS=er;exports.DatePicker=fg;exports.DateRangePicker=hg;exports.DemoStage=Al;exports.Dialog=vg;exports.DialogClose=xg;exports.DialogContent=jl;exports.DialogDescription=ql;exports.DialogFooter=Ul;exports.DialogHeader=$l;exports.DialogOverlay=bn;exports.DialogPortal=Wl;exports.DialogTitle=Kl;exports.DialogTrigger=yg;exports.DropdownMenu=kg;exports.DropdownMenuCheckboxItem=ed;exports.DropdownMenuContent=Jl;exports.DropdownMenuGroup=Tg;exports.DropdownMenuItem=Ql;exports.DropdownMenuLabel=od;exports.DropdownMenuPortal=Pg;exports.DropdownMenuRadioGroup=Ng;exports.DropdownMenuRadioItem=td;exports.DropdownMenuSeparator=rd;exports.DropdownMenuShortcut=ad;exports.DropdownMenuSub=Mg;exports.DropdownMenuSubContent=Xl;exports.DropdownMenuSubTrigger=Zl;exports.DropdownMenuTrigger=Cg;exports.FILL_TOKENS=on;exports.FRAGMENT_HEADER=Tp;exports.Field=ju;exports.FieldDescription=ua;exports.FieldLabel=pa;exports.FieldTrailing=ma;exports.FillPicker=Op;exports.Flex=fd;exports.GRADE_PRE_HYDRATION_SCRIPT=Rh;exports.GradeLoader=ip;exports.GradeModeSwitcher=Kv;exports.GradeThemeProvider=Sh;exports.GradeThemeSwitcher=Gv;exports.Grid=md;exports.Input=oo;exports.Label=Io;exports.LenisProvider=zv;exports.Logo=hb;exports.MOTION_ATTR=Nr;exports.Map=si;exports.MapMarker=li;exports.MediaSurface=jt;exports.MediaSurfaceContract=an;exports.Message=pm;exports.Motion=$b;exports.MotionOverlay=hi;exports.MotionScene=Hb;exports.MotionScreen=gp;exports.MotionText=hp;exports.MultiSelect=sd;exports.Popover=Ot;exports.PopoverAnchor=ug;exports.PopoverContent=Ht;exports.PopoverTrigger=Vt;exports.Progress=id;exports.RadioCard=Tl;exports.RadioGroup=ld;exports.RadioGroupItem=dd;exports.ResizableHandle=$g;exports.ResizablePanel=jg;exports.ResizablePanelGroup=Wg;exports.Reveal=Il;exports.RivePlayer=ap;exports.Row=pd;exports.ScreenAnimator=ui;exports.ScrollArea=hd;exports.ScrollBar=Cn;exports.Select=Tn;exports.SelectContent=La;exports.SelectGroup=ef;exports.SelectItem=Da;exports.SelectLabel=yd;exports.SelectScrollDownButton=En;exports.SelectScrollUpButton=Nn;exports.SelectSeparator=xd;exports.SelectTrigger=Ea;exports.SelectValue=Pn;exports.Separator=Fr;exports.ShaderCompileError=dr;exports.ShaderControls=vv;exports.ShaderPresetPicker=wi;exports.ShaderPresetPreview=tn;exports.Sheet=sf;exports.SheetClose=df;exports.SheetContent=Rd;exports.SheetDescription=Td;exports.SheetFooter=kd;exports.SheetHeader=Sd;exports.SheetOverlay=Ln;exports.SheetPortal=wd;exports.SheetTitle=Cd;exports.SheetTrigger=lf;exports.Sidebar=xo;exports.SidebarContent=Wn;exports.SidebarFooter=jn;exports.SidebarHeader=Gn;exports.SidebarItem=Un;exports.SidebarSection=$n;exports.SidebarTreeItem=Kn;exports.Skeleton=pf;exports.Slider=Fo;exports.Sortable=Sf;exports.SortableGroup=An;exports.SortableHandle=Hn;exports.SortableItem=In;exports.Stack=zd;exports.Switch=Ha;exports.SwitchCard=Ml;exports.Table=Bd;exports.TableBody=Vd;exports.TableCaption=Ud;exports.TableCell=$d;exports.TableFooter=Gd;exports.TableHead=jd;exports.TableHeader=Od;exports.TableRow=Wd;exports.Tabs=Lf;exports.TabsContent=ic;exports.TabsList=ac;exports.TabsTrigger=nc;exports.Textarea=mc;exports.ThemeToggle=Zv;exports.ThreeScene=cr;exports.Toggle=fc;exports.ToggleGroup=Bo;exports.ToggleGroupItem=Oo;exports.Toolbar=vc;exports.ToolbarSlot=yc;exports.Tooltip=zo;exports.TooltipContent=yo;exports.TooltipProvider=zn;exports.TooltipTrigger=_o;exports.VideoPlayer=rp;exports.appShellAsideVariants=Qs;exports.appShellFooterVariants=tl;exports.appShellHeaderVariants=Xs;exports.appShellMainVariants=el;exports.appShellNavVariants=Js;exports.applyThemeToRoot=Ga;exports.badgeVariants=ml;exports.bannerVariants=gl;exports.buildFragmentShaderScene=io;exports.builtInThemes=Wt;exports.buttonVariants=kr;exports.calloutVariants=Us;exports.calmInput=$r;exports.cn=d;exports.defaultPostPreset=Za;exports.defaultThemeId=sr;exports.deleteUserTheme=oi;exports.demoSleep=we;exports.demoTypeText=va;exports.duplicateTheme=wh;exports.energyInput=Yn;exports.flexVariants=gd;exports.generateTheme=Vo;exports.getComponentContract=bu;exports.getTheme=Go;exports.gridVariants=ud;exports.listContractedComponents=vu;exports.listThemes=ei;exports.listUserThemes=Ic;exports.loadUserThemeInput=ti;exports.postPresets=Xr;exports.rowVariants=cd;exports.saveUserTheme=ja;exports.sceneRegistry=qr;exports.setMotion=Zu;exports.shaderPresetById=Zr;exports.shaderPresets=Yr;exports.shellVariants=Zs;exports.stackVariants=Fd;exports.themeToCSSVars=Xn;exports.toggleVariants=gc;exports.useCarouselApi=Gu;exports.useGradeTheme=ni;exports.useMaybeGradeTheme=Wo;exports.useMotionScene=fi;exports.usePageActive=Er;exports.usePrefersReducedMotion=go;exports.useReducedMotion=Jt;exports.useScriptedDemo=fo;//# sourceMappingURL=index.js.map
760
+ `),Pu=$e(`
761
+ float gHash(vec2 p) {
762
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
763
+ }
764
+ float gNoise(vec2 p) {
765
+ vec2 i = floor(p);
766
+ vec2 f = fract(p);
767
+ f = f * f * (3.0 - 2.0 * f);
768
+ float a = gHash(i);
769
+ float b = gHash(i + vec2(1.0, 0.0));
770
+ float c = gHash(i + vec2(0.0, 1.0));
771
+ float d = gHash(i + vec2(1.0, 1.0));
772
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
773
+ }
774
+ float gFbm(vec2 p) {
775
+ float v = 0.0;
776
+ float amp = 0.5;
777
+ for (int i = 0; i < 5; i++) {
778
+ v += amp * gNoise(p);
779
+ p = p * 2.02 + 11.3;
780
+ amp *= 0.5;
781
+ }
782
+ return v;
783
+ }
784
+
785
+ // The backdrop seen through the glass \u2014 a slow brand-tinted wash. This is
786
+ // what the glass refracts, so it's sampled at the displaced coordinate.
787
+ vec3 backdrop(vec2 uv, float t) {
788
+ float w1 = gFbm(uv * 1.7 + vec2(t, -t * 0.6));
789
+ float w2 = gFbm(uv * 1.2 - vec2(t * 0.7, t * 0.35) + 4.2);
790
+ float diag = uv.x * 0.55 + uv.y * 0.45;
791
+ vec3 col = uBackground;
792
+ col = mix(col, uPrimary, smoothstep(0.20, 0.95, w1) * 0.60);
793
+ col = mix(col, uSecondary, smoothstep(0.30, 1.00, w2) * 0.48);
794
+ col = mix(col, uAccent, smoothstep(0.45, 1.00, w1 * w2 + diag * 0.2) * 0.40);
795
+ return col;
796
+ }
797
+
798
+ void main() {
799
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
800
+ vec2 uv = vUv;
801
+ float t = uTime * 0.05; // slumped glass moves like weather, slowly
802
+
803
+ // Glass height-field \u2014 large slow ripples (the slump) over finer ridges.
804
+ vec2 hp = vec2(uv.x * aspect, uv.y);
805
+ float h = gFbm(hp * 2.4 + vec2(t * 1.2, -t))
806
+ + 0.5 * gFbm(hp * 5.5 - vec2(t * 0.6, t * 0.9) + 9.0);
807
+
808
+ // Cursor lens \u2014 the sheet bulges toward the pointer.
809
+ vec2 m = vec2(uMouse.x * aspect, uMouse.y);
810
+ vec2 toM = vec2(uv.x * aspect, uv.y) - m;
811
+ float md = length(toM);
812
+ float bulge = exp(-md * md * 6.0);
813
+ h += bulge * 1.1;
814
+
815
+ // Surface normal from the height-field gradient \u2192 refraction vector.
816
+ float e = 0.0018;
817
+ float hx = gFbm((hp + vec2(e, 0.0)) * 2.4 + vec2(t * 1.2, -t))
818
+ - gFbm((hp - vec2(e, 0.0)) * 2.4 + vec2(t * 1.2, -t));
819
+ float hy = gFbm((hp + vec2(0.0, e)) * 2.4 + vec2(t * 1.2, -t))
820
+ - gFbm((hp - vec2(0.0, e)) * 2.4 + vec2(t * 1.2, -t));
821
+ vec2 grad = vec2(hx, hy) / (2.0 * e);
822
+ vec2 refr = grad * 0.045 - normalize(toM + 1e-4) * bulge * 0.06;
823
+
824
+ // Chromatic refraction \u2014 sample the backdrop per-channel at offset
825
+ // coordinates so the glass fringes red\u2194blue at steep slopes.
826
+ float disp = 0.012 + bulge * 0.02;
827
+ vec3 col;
828
+ col.r = backdrop(uv + refr * (1.0 + disp), t).r;
829
+ col.g = backdrop(uv + refr, t).g;
830
+ col.b = backdrop(uv + refr * (1.0 - disp), t).b;
831
+
832
+ // Caustic shimmer \u2014 bright thin lines where the height-field folds.
833
+ float caustic = pow(1.0 - abs(fract(h) - 0.5) * 2.0, 8.0);
834
+ col += (uAccent * 0.6 + 0.4) * caustic * 0.10;
835
+
836
+ // Anisotropic specular \u2014 a soft key light streaks across the ridges and
837
+ // pools under the cursor. Brightens toward white, tinted by primary.
838
+ vec2 lightDir = normalize(vec2(0.6, 1.0));
839
+ float spec = pow(max(dot(normalize(grad + 1e-4), lightDir) * 0.5 + 0.5, 0.0), 6.0);
840
+ spec *= 0.18 + 0.5 * bulge;
841
+ col += mix(vec3(1.0), uPrimary, 0.35) * spec;
842
+
843
+ // Fresnel rim \u2014 edges of the sheet read brighter, the glassy lift.
844
+ float rim = pow(smoothstep(0.0, 1.0, length(uv - 0.5) * 1.4), 2.0);
845
+ col += (uPrimary - uBackground) * rim * 0.06;
846
+
847
+ // Frost \u2014 fine grain reads as the etched surface and kills banding.
848
+ col += (gNoise(uv * uResolution.xy * 0.8) - 0.5) * 0.022;
849
+
850
+ gl_FragColor = vec4(col, 1.0);
851
+ }
852
+ `),Mu=$e(`
853
+ float hHash(vec2 p) {
854
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
855
+ }
856
+ float hNoise(vec2 p) {
857
+ vec2 i = floor(p);
858
+ vec2 f = fract(p);
859
+ f = f * f * (3.0 - 2.0 * f);
860
+ float a = hHash(i);
861
+ float b = hHash(i + vec2(1.0, 0.0));
862
+ float c = hHash(i + vec2(0.0, 1.0));
863
+ float d = hHash(i + vec2(1.0, 1.0));
864
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
865
+ }
866
+ float hFbm(vec2 p) {
867
+ float v = 0.0;
868
+ float amp = 0.5;
869
+ for (int i = 0; i < 4; i++) {
870
+ v += amp * hNoise(p);
871
+ p = p * 2.03 + 7.1;
872
+ amp *= 0.5;
873
+ }
874
+ return v;
875
+ }
876
+ // Cyclic iridescent ramp through the brand colours \u2014 the spectrum is
877
+ // theme-reactive (mirrors the reference's cool/warm/blob colour stops).
878
+ vec3 hRamp(float t) {
879
+ t = fract(t) * 3.0;
880
+ if (t < 1.0) return mix(uSecondary, uPrimary, smoothstep(0.0, 1.0, t));
881
+ if (t < 2.0) return mix(uPrimary, uAccent, smoothstep(0.0, 1.0, t - 1.0));
882
+ return mix(uAccent, uSecondary, smoothstep(0.0, 1.0, t - 2.0));
883
+ }
884
+ void main() {
885
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
886
+ vec2 uv = vec2(vUv.x * aspect, vUv.y);
887
+ float t = uTime * 0.05;
888
+
889
+ // Cursor = view angle: tilting the foil slides the whole spectrum.
890
+ vec2 m = vec2(uMouse.x * aspect, uMouse.y);
891
+ float view = ((uv.x - m.x) - (uv.y - m.y)) * 0.5;
892
+
893
+ // Slow flow so the sheet ripples like bent foil.
894
+ float flow = hFbm(uv * 1.3 + vec2(t, -t * 0.6));
895
+
896
+ // Diagonal axes \u2014 colour runs ALONG, the grain runs ACROSS.
897
+ float along = (uv.x + uv.y) * 0.5 + flow * 0.30;
898
+ float across = (uv.x - uv.y);
899
+
900
+ // Dense anisotropic grain \u2014 the brushed-foil striping / diffraction grating.
901
+ float gph = across * 90.0 + flow * 7.0 + t * 2.0;
902
+ float grain = 0.5 + 0.5 * sin(gph);
903
+
904
+ // Diffraction: the spectrum advances with position, grain phase, flow, view.
905
+ float phase = along * 1.6 + grain * 0.5 + flow * 0.5 + view * 1.2 + t * 0.35;
906
+ vec3 col = hRamp(phase);
907
+
908
+ // Brushed anisotropy \u2014 brightness rides the grain stripes.
909
+ col *= 0.62 + 0.45 * grain;
910
+
911
+ // Sharp glints where stripe peaks align \u2014 the metallic-foil sparkle.
912
+ col += pow(grain, 14.0) * 0.28;
913
+
914
+ // Fine surface grain reads as the foil texture + kills banding.
915
+ col += (hNoise(uv * uResolution.xy * 0.7) - 0.5) * 0.03;
916
+
917
+ gl_FragColor = vec4(col, 1.0);
918
+ }
919
+ `),as=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:1},{type:"slider",key:"scale",label:"Scale",min:.4,max:2.5,step:.01,default:1},{type:"slider",key:"viscosity",label:"Viscosity",min:0,max:1,step:.01,default:.55},{type:"slider",key:"contrast",label:"Contrast",min:0,max:1,step:.01,default:.45},{type:"divider",key:"palette",label:"Colours"},{type:"color",key:"colorA",label:"Liquid A",slot:"secondary",default:"#6d5cff"},{type:"color",key:"colorB",label:"Liquid B",slot:"primary",default:"#22d3ee"},{type:"color",key:"colorC",label:"Core",slot:"accent",default:"#f0abfc"},{type:"divider",key:"interact",label:"Interaction"},{type:"slider",key:"mouseWarp",label:"Pointer warp",min:0,max:2,step:.01,default:.8},{type:"slider",key:"grain",label:"Grain",min:0,max:1.5,step:.01,default:1}],Nu=$e(`
920
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
921
+ float noise(vec2 p){
922
+ vec2 i=floor(p), f=fract(p); f=f*f*(3.0-2.0*f);
923
+ float a=hash(i), b=hash(i+vec2(1,0)), c=hash(i+vec2(0,1)), d=hash(i+vec2(1,1));
924
+ return mix(mix(a,b,f.x), mix(c,d,f.x), f.y);
925
+ }
926
+ float ball(vec2 p, vec2 c, float r){ float d=length(p-c); return r/max(d*d,1e-4); }
927
+ void main(){
928
+ vec2 uv = vUv;
929
+ float asp = uResolution.x / max(uResolution.y, 1.0);
930
+ vec2 p = (uv - 0.5) * vec2(asp, 1.0);
931
+ p *= (3.5 / max(uScale, 0.2));
932
+ float t = uTime * uSpeed * 0.4;
933
+ vec2 mp = (uMouse - 0.5) * vec2(asp, 1.0) * (3.5 / max(uScale, 0.2));
934
+ vec2 toM = p - mp;
935
+ float md = length(toM);
936
+ float warp = uMouseWarp * exp(-md*md*0.6);
937
+ p += normalize(toM + 1e-4) * warp;
938
+ float field = 0.0;
939
+ const int N = 6;
940
+ for(int i=0;i<N;i++){
941
+ float fi = float(i);
942
+ float a = fi * 2.39996;
943
+ float sp = 0.6 + fract(fi*0.41)*0.9;
944
+ vec2 c = vec2(
945
+ sin(t*sp + a*1.7) * 1.3 + cos(t*0.7 + fi)*0.4,
946
+ cos(t*sp*0.9 + a) * 1.1 + sin(t*0.5 + fi*1.3)*0.4
947
+ );
948
+ float r = mix(0.22, 0.5, fract(fi*0.73));
949
+ field += ball(p, c, r);
950
+ }
951
+ float thresh = mix(2.2, 5.5, clamp(uViscosity,0.0,1.0));
952
+ float m = smoothstep(thresh*0.55, thresh, field);
953
+ float inner = smoothstep(thresh*0.9, thresh*1.8, field);
954
+ float swirl = noise(p*0.8 + t*0.3);
955
+ vec3 liquid = mix(uColorA, uColorB, smoothstep(0.2,0.8,m + swirl*0.25 - 0.1));
956
+ liquid = mix(liquid, uColorC, inner*0.85);
957
+ liquid = (liquid - 0.5) * mix(0.85, 1.6, clamp(uContrast,0.0,1.0)) + 0.5;
958
+ vec3 col = mix(uBackground, liquid, m);
959
+ col += vec3(0.06) * pow(inner, 2.0);
960
+ col += (hash(uv*uResolution.xy + t) - 0.5) * 0.02 * uGrain;
961
+ col = clamp(col, 0.0, 1.0);
962
+ gl_FragColor = vec4(col, 1.0);
963
+ }
964
+ `,as),rs=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:1},{type:"slider",key:"bandCount",label:"Curtains",min:1,max:5,step:1,default:3},{type:"slider",key:"waviness",label:"Waviness",min:0,max:2,step:.01,default:1},{type:"slider",key:"height",label:"Height",min:.2,max:.9,step:.01,default:.5},{type:"slider",key:"glow",label:"Glow",min:.2,max:2.5,step:.01,default:1.2},{type:"divider",key:"palette",label:"Aurora colours"},{type:"color",key:"colorLow",label:"Low (ground)",slot:"primary",default:"#22e0a3"},{type:"color",key:"colorMid",label:"Mid",slot:"secondary",default:"#19c2d6"},{type:"color",key:"colorHigh",label:"High (sky)",slot:"accent",default:"#9b5cff"},{type:"divider",key:"interact",label:"Interaction"},{type:"slider",key:"mouseSway",label:"Pointer sway",min:0,max:1,step:.01,default:.35},{type:"slider",key:"grain",label:"Grain",min:0,max:1.5,step:.01,default:1}],Eu=$e(`
965
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
966
+ float noise(vec2 p){
967
+ vec2 i=floor(p), f=fract(p); f=f*f*(3.0-2.0*f);
968
+ float a=hash(i), b=hash(i+vec2(1,0)), c=hash(i+vec2(0,1)), d=hash(i+vec2(1,1));
969
+ return mix(mix(a,b,f.x), mix(c,d,f.x), f.y);
970
+ }
971
+ float fbm(vec2 p){ float v=0.0,a=0.5; for(int i=0;i<5;i++){ v+=a*noise(p); p=p*2.03+7.1; a*=0.5; } return v; }
972
+ void main(){
973
+ vec2 uv = vUv;
974
+ float t = uTime * uSpeed * 0.25;
975
+ float sway = (uMouse.x - 0.5) * uMouseSway;
976
+ vec3 col = uBackground * (0.5 + 0.5*uv.y);
977
+ float stars = pow(hash(floor(uv*vec2(220.0,360.0))), 60.0);
978
+ col += stars * smoothstep(0.45, 1.0, uv.y) * 0.6;
979
+ float bands = clamp(uBandCount, 1.0, 5.0);
980
+ vec3 auroraAccum = vec3(0.0);
981
+ for(int i=0;i<5;i++){
982
+ if(float(i) >= bands) break;
983
+ float fi = float(i);
984
+ float turb = fbm(vec2(uv.x*3.0 + fi*5.1, t + fi*1.7)) * uWaviness;
985
+ float ridge = uv.x + sway + turb*0.35 + 0.12*sin(uv.y*4.0 + t*2.0 + fi*2.1);
986
+ float centre = 0.5 + 0.32*sin(t*0.7 + fi*1.9);
987
+ float dd = (ridge - centre) / 0.14;
988
+ float sheet = exp(-dd*dd);
989
+ float base = 0.05 + 0.18*fi/bands;
990
+ float h = smoothstep(base, base + uHeight, uv.y) * (1.0 - smoothstep(base + uHeight, base + uHeight + 0.5, uv.y));
991
+ float shimmer = 0.6 + 0.4*sin(uv.y*22.0 - t*6.0 + turb*4.0 + fi*3.0);
992
+ float intensity = sheet * h * shimmer;
993
+ vec3 lo = mix(uColorLow, uColorMid, smoothstep(base, base+uHeight*0.6, uv.y));
994
+ vec3 ribbon = mix(lo, uColorHigh, smoothstep(base+uHeight*0.4, base+uHeight, uv.y));
995
+ auroraAccum += ribbon * intensity;
996
+ }
997
+ col += auroraAccum * uGlow;
998
+ col += auroraAccum * auroraAccum * uGlow * 0.4;
999
+ col += (hash(uv*uResolution.xy + t) - 0.5) * 0.02 * uGrain;
1000
+ col = clamp(col, 0.0, 1.0);
1001
+ gl_FragColor = vec4(col, 1.0);
1002
+ }
1003
+ `,rs),ns=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:1},{type:"slider",key:"scale",label:"Scale",min:.4,max:3,step:.01,default:1},{type:"slider",key:"sharpness",label:"Sharpness",min:0,max:1,step:.01,default:.5},{type:"slider",key:"brightness",label:"Brightness",min:.2,max:2.5,step:.01,default:1.1},{type:"divider",key:"palette",label:"Water tint"},{type:"color",key:"deep",label:"Deep",slot:"secondary",default:"#0b2a4a"},{type:"color",key:"shallow",label:"Shallow",slot:"primary",default:"#2bb0c9"},{type:"divider",key:"interact",label:"Interaction"},{type:"slider",key:"chroma",label:"Chromatic split",min:0,max:2,step:.01,default:.6},{type:"slider",key:"mouseRipple",label:"Pointer ripple",min:0,max:2,step:.01,default:.8},{type:"slider",key:"grain",label:"Grain",min:0,max:1.5,step:.01,default:1}],Lu=$e(`
1004
+ vec2 hash2(vec2 p){
1005
+ p = vec2(dot(p, vec2(127.1,311.7)), dot(p, vec2(269.5,183.3)));
1006
+ return fract(sin(p)*43758.5453);
1007
+ }
1008
+ float worley(vec2 p, float t){
1009
+ vec2 ip = floor(p), fp = fract(p);
1010
+ float d = 1.0;
1011
+ for(int y=-1;y<=1;y++){
1012
+ for(int x=-1;x<=1;x++){
1013
+ vec2 g = vec2(float(x), float(y));
1014
+ vec2 o = hash2(ip + g);
1015
+ o = 0.5 + 0.5*sin(t + 6.2831*o);
1016
+ vec2 r = g + o - fp;
1017
+ d = min(d, dot(r, r));
1018
+ }
1019
+ }
1020
+ return sqrt(d);
1021
+ }
1022
+ float causticAt(vec2 p, float t, float sharp){
1023
+ float w1 = worley(p, t);
1024
+ float w2 = worley(p*1.9 + 4.3, t*1.3);
1025
+ float veins = w1*0.65 + w2*0.35;
1026
+ float c = 1.0 - veins;
1027
+ c = pow(clamp(c,0.0,1.0), mix(2.0, 9.0, clamp(sharp,0.0,1.0)));
1028
+ return c;
1029
+ }
1030
+ void main(){
1031
+ vec2 uv = vUv;
1032
+ float asp = uResolution.x / max(uResolution.y, 1.0);
1033
+ vec2 p = vec2(uv.x*asp, uv.y) * (4.0 * uScale);
1034
+ float t = uTime * uSpeed * 0.5;
1035
+ vec2 m = vec2(uMouse.x*asp, uMouse.y) * (4.0 * uScale);
1036
+ vec2 toM = p - m;
1037
+ float md = length(toM);
1038
+ float ripple = sin(md*3.0 - uTime*4.0) * exp(-md*0.8) * uMouseRipple;
1039
+ p += normalize(toM + 1e-4) * ripple;
1040
+ p += vec2(t*0.15, t*0.1);
1041
+ float off = uChroma * 0.06;
1042
+ float cr = causticAt(p + vec2( off, 0.0), t, uSharpness);
1043
+ float cg = causticAt(p, t, uSharpness);
1044
+ float cb = causticAt(p + vec2(-off, 0.0), t, uSharpness);
1045
+ vec3 water = mix(uDeep, uShallow, smoothstep(0.0, 1.0, uv.y));
1046
+ vec3 light = vec3(cr, cg, cb) * uBrightness;
1047
+ vec3 col = water + light * (0.6 + 0.4*uv.y);
1048
+ col += uShallow * pow(uv.y, 3.0) * 0.15;
1049
+ col += (hash2(uv*uResolution.xy + t).x - 0.5) * 0.02 * uGrain;
1050
+ col = clamp(col, 0.0, 1.0);
1051
+ gl_FragColor = vec4(col, 1.0);
1052
+ }
1053
+ `,ns),is=[{type:"divider",key:"motion",label:"Motion"},{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.6},{type:"slider",key:"mouseSway",label:"Mouse sway",min:0,max:1,step:.01,default:.3},{type:"divider",key:"form",label:"Ribbon"},{type:"slider",key:"ribbonWidth",label:"Ribbon width",min:.08,max:.6,step:.01,default:.26},{type:"slider",key:"twist",label:"Twist",min:0,max:2.5,step:.01,default:1},{type:"slider",key:"sheen",label:"Sheen",min:0,max:1,step:.01,default:.7},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"ribbonA",label:"Ribbon A",default:"#f7a8c4",slot:"primary"},{type:"color",key:"ribbonB",label:"Ribbon B",default:"#8fe3d8",slot:"secondary"},{type:"color",key:"ribbonC",label:"Ribbon C",default:"#c9b8ff",slot:"accent"},{type:"color",key:"bg",label:"Background",default:"#f4f1ec",slot:"background"},{type:"divider",key:"finish",label:"Finish"},{type:"slider",key:"grain",label:"Grain",min:0,max:.08,step:.001,default:.02}],Du=$e(`
1054
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1055
+ float vnoise(vec2 p){
1056
+ vec2 i=floor(p), f=fract(p); f=f*f*(3.0-2.0*f);
1057
+ float a=hash(i), b=hash(i+vec2(1.0,0.0));
1058
+ float c=hash(i+vec2(0.0,1.0)), d=hash(i+vec2(1.0,1.0));
1059
+ return mix(mix(a,b,f.x), mix(c,d,f.x), f.y);
1060
+ }
1061
+ float fbm(vec2 p){ float v=0.0,a=0.5; for(int i=0;i<5;i++){ v+=a*vnoise(p); p*=2.02; a*=0.5; } return v; }
1062
+ void main(){
1063
+ vec2 uv = vUv;
1064
+ float t = uTime * uSpeed;
1065
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1066
+ vec2 p = uv - 0.5;
1067
+ p.x *= aspect;
1068
+ float mouseY = (uMouse.y - 0.5) * uMouseSway;
1069
+ float curve = sin(p.x*2.3 + t*0.9)*0.18*uTwist + sin(p.x*4.7 - t*1.3)*0.07*uTwist + sin(p.x*1.1 + t*0.5)*0.10;
1070
+ float centre = curve + mouseY;
1071
+ float d = p.y - centre;
1072
+ float taper = mix(0.55, 1.0, 0.5 + 0.5*sin(p.x*1.7 - t*0.7));
1073
+ float halfW = uRibbonWidth * 0.5 * taper;
1074
+ float edge = 0.06 + 0.02*uRibbonWidth;
1075
+ float mask = smoothstep(halfW + edge, halfW - edge, abs(d));
1076
+ float slope = cos(p.x*2.3 + t*0.9)*2.3*0.18*uTwist + cos(p.x*4.7 - t*1.3)*4.7*0.07*uTwist + cos(p.x*1.1 + t*0.5)*1.1*0.10;
1077
+ float across = clamp(d / max(halfW, 0.001) * 0.5 + 0.5, 0.0, 1.0);
1078
+ float folds = fbm(vec2(p.x*3.0 - t*0.6, across*2.5));
1079
+ float fold = sin(across*6.2831*2.0 + slope*2.5 + folds*3.0 - t);
1080
+ float shade = 0.5 + 0.5*fold;
1081
+ float irid = fract(across + fold*0.25 + p.x*0.4 + t*0.05);
1082
+ vec3 col3a = mix(uRibbonA, uRibbonB, smoothstep(0.0, 0.5, irid));
1083
+ vec3 ribCol = mix(col3a, uRibbonC, smoothstep(0.5, 1.0, irid));
1084
+ vec3 ribbon = ribCol * mix(0.55, 1.15, shade);
1085
+ float spec = pow(clamp(shade, 0.0, 1.0), mix(40.0, 4.0, 1.0 - uSheen));
1086
+ float specBand = smoothstep(0.0, 0.4, across) * smoothstep(1.0, 0.6, across);
1087
+ ribbon += vec3(1.0) * spec * specBand * uSheen * 0.9;
1088
+ float rim = smoothstep(halfW, halfW - edge*1.5, abs(d)) - smoothstep(halfW - edge*1.5, halfW - edge*3.0, abs(d));
1089
+ ribbon += uRibbonC * max(rim, 0.0) * 0.6 * uSheen;
1090
+ vec3 ground = mix(uBg, mix(uBg, uRibbonA, 0.06), smoothstep(0.0, 1.0, uv.y));
1091
+ float bloom = smoothstep(halfW*3.0, 0.0, abs(d)) * 0.18;
1092
+ ground += uRibbonB * bloom;
1093
+ vec3 col = mix(ground, ribbon, mask);
1094
+ col += (hash(uv*uResolution.xy + t) - 0.5) * uGrain;
1095
+ col = clamp(col, 0.0, 1.0);
1096
+ gl_FragColor = vec4(col, 1.0);
1097
+ }
1098
+ `,is),ss=[{type:"divider",key:"motion",label:"Motion"},{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.7},{type:"divider",key:"rings",label:"Rings"},{type:"slider",key:"ringCount",label:"Ring count",min:2,max:40,step:.5,default:14},{type:"slider",key:"ringSharpness",label:"Ring sharpness",min:0,max:1,step:.01,default:.45},{type:"slider",key:"moire",label:"Moir\xE9",min:0,max:1,step:.01,default:.5},{type:"slider",key:"glow",label:"Centre glow",min:0,max:1,step:.01,default:.5},{type:"divider",key:"center",label:"Centre"},{type:"toggle",key:"followMouse",label:"Follow cursor",default:true},{type:"slider",key:"centerX",label:"Centre X",min:0,max:1,step:.01,default:.5},{type:"slider",key:"centerY",label:"Centre Y",min:0,max:1,step:.01,default:.5},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"colorA",label:"Colour A",default:"#b45cff",slot:"primary"},{type:"color",key:"colorB",label:"Colour B",default:"#ff4fd8",slot:"secondary"},{type:"color",key:"colorC",label:"Colour C",default:"#6a2fb0",slot:"accent"},{type:"color",key:"bg",label:"Background",default:"#1a0e2a",slot:"background"},{type:"divider",key:"finish",label:"Finish"},{type:"slider",key:"grain",label:"Grain",min:0,max:.08,step:.001,default:.02}],Au=$e(`
1099
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1100
+ void main(){
1101
+ vec2 uv = vUv;
1102
+ float t = uTime * uSpeed;
1103
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1104
+ vec2 centre = vec2(uCenterX, uCenterY);
1105
+ centre = mix(centre, uMouse, step(0.5, uFollowMouse));
1106
+ vec2 p = uv - centre;
1107
+ p.x *= aspect;
1108
+ float r = length(p);
1109
+ float ang = atan(p.y, p.x);
1110
+ float pulse = 1.0 + 0.06*sin(t*1.5);
1111
+ float rr = r * pulse;
1112
+ float phase = rr * uRingCount * 6.2831 - t*3.0;
1113
+ float rings = pow(0.5 + 0.5*sin(phase), mix(1.0, 6.0, uRingSharpness));
1114
+ float phase2 = rr * uRingCount * 6.2831 * 1.07 - t*2.3 + ang*0.5;
1115
+ float rings2 = pow(0.5 + 0.5*sin(phase2), mix(1.0, 6.0, uRingSharpness));
1116
+ float moire = mix(rings, rings * rings2, uMoire);
1117
+ float radialMix = fract(rr*1.2 - t*0.1);
1118
+ vec3 base = mix(uColorA, uColorB, smoothstep(0.0, 0.6, radialMix));
1119
+ base = mix(base, uColorC, smoothstep(0.6, 1.0, radialMix));
1120
+ vec3 col = mix(uBg, base, moire);
1121
+ float glow = exp(-rr * mix(6.0, 1.5, uGlow)) * uGlow;
1122
+ col += uColorA * glow;
1123
+ float vig = smoothstep(1.3, 0.2, r);
1124
+ col = mix(uBg * 0.85, col, vig);
1125
+ col += (hash(uv*uResolution.xy + t) - 0.5) * uGrain;
1126
+ col = clamp(col, 0.0, 1.0);
1127
+ gl_FragColor = vec4(col, 1.0);
1128
+ }
1129
+ `,ss),ls=[{type:"divider",key:"motion",label:"Motion"},{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.7},{type:"slider",key:"mousePull",label:"Mouse pull",min:0,max:1,step:.01,default:.35},{type:"divider",key:"swirl",label:"Swirl"},{type:"slider",key:"spin",label:"Spin",min:-6,max:6,step:.1,default:3},{type:"slider",key:"armCount",label:"Arms",min:1,max:16,step:1,default:5},{type:"slider",key:"depth",label:"Depth",min:0,max:1,step:.01,default:.6},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"colorA",label:"Colour A",default:"#3a1d6e",slot:"primary"},{type:"color",key:"colorB",label:"Colour B",default:"#a24be0",slot:"secondary"},{type:"color",key:"bg",label:"Background",default:"#0a0612",slot:"background"},{type:"divider",key:"finish",label:"Finish"},{type:"slider",key:"sparkle",label:"Sparkle",min:0,max:1,step:.01,default:.4},{type:"slider",key:"grain",label:"Grain",min:0,max:.08,step:.001,default:.02}],Iu=$e(`
1130
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1131
+ float vnoise(vec2 p){
1132
+ vec2 i=floor(p), f=fract(p); f=f*f*(3.0-2.0*f);
1133
+ float a=hash(i), b=hash(i+vec2(1.0,0.0));
1134
+ float c=hash(i+vec2(0.0,1.0)), d=hash(i+vec2(1.0,1.0));
1135
+ return mix(mix(a,b,f.x), mix(c,d,f.x), f.y);
1136
+ }
1137
+ void main(){
1138
+ vec2 uv = vUv;
1139
+ float t = uTime * uSpeed;
1140
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1141
+ vec2 centre = mix(vec2(0.5), uMouse, uMousePull);
1142
+ vec2 p = uv - centre;
1143
+ p.x *= aspect;
1144
+ float r = length(p);
1145
+ float ang = atan(p.y, p.x);
1146
+ float twist = uSpin * log(r*3.0 + 0.18);
1147
+ float spiralAng = ang + twist + t*0.6;
1148
+ float arms = pow(0.5 + 0.5*sin(spiralAng * uArmCount), 2.2);
1149
+ float flow = vnoise(vec2(spiralAng * uArmCount * 0.5, r*8.0 - t*1.5));
1150
+ arms = mix(arms, arms * (0.5 + flow), 0.6);
1151
+ float depth = pow(clamp(r * mix(2.4, 1.1, uDepth), 0.0, 1.0), mix(0.6, 2.5, uDepth));
1152
+ vec3 streakCol = mix(uColorA, uColorB, smoothstep(0.0, 0.7, r));
1153
+ float intensity = arms * depth;
1154
+ vec3 col = mix(uBg, streakCol, clamp(intensity, 0.0, 1.0));
1155
+ float throat = exp(-r*5.0);
1156
+ col += uColorB * throat * 0.5 * depth;
1157
+ col = mix(uBg * 0.4, col, smoothstep(0.0, 0.12, r));
1158
+ vec2 sgrid = floor(uv * uResolution / 2.5);
1159
+ float star = hash(sgrid);
1160
+ float spark = step(0.992, star);
1161
+ float twinkle = 0.5 + 0.5*sin(t*3.0 + star*100.0);
1162
+ col += vec3(1.0) * spark * twinkle * uSparkle * smoothstep(0.1, 0.9, r);
1163
+ col += (hash(uv*uResolution.xy + t) - 0.5) * uGrain;
1164
+ col = clamp(col, 0.0, 1.0);
1165
+ gl_FragColor = vec4(col, 1.0);
1166
+ }
1167
+ `,ls),cs=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.6},{type:"slider",key:"petalCount",label:"Petals",min:3,max:24,step:1,default:8},{type:"slider",key:"bloomRadius",label:"Bloom radius",min:.1,max:1.2,step:.01,default:.5},{type:"slider",key:"spread",label:"Spectrum spread",min:.1,max:1.5,step:.01,default:.7},{type:"slider",key:"cycle",label:"Spectral cycling",min:0,max:2,step:.01,default:.6},{type:"slider",key:"glow",label:"Glow",min:0,max:1.5,step:.01,default:.6},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"colorA",label:"Colour A",default:"#2dd4bf",slot:"primary"},{type:"color",key:"colorB",label:"Colour B",default:"#3b82f6",slot:"secondary"},{type:"color",key:"colorC",label:"Colour C",default:"#a855f7",slot:"accent"},{type:"color",key:"bg",label:"Background",default:"#05060a",slot:"background"},{type:"divider",key:"interaction",label:"Interaction"},{type:"slider",key:"mouseInfluence",label:"Mouse pull",min:0,max:1,step:.01,default:.6}],Hu=$e(`
1168
+ #define PI 3.14159265359
1169
+ #define TAU 6.28318530718
1170
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1171
+ vec3 spectralShift(vec3 base, float h){
1172
+ const vec3 k = vec3(0.57735);
1173
+ float c = cos(h), s = sin(h);
1174
+ return base*c + cross(k, base)*s + k*dot(k, base)*(1.0-c);
1175
+ }
1176
+ void main(){
1177
+ vec2 uv = vUv;
1178
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1179
+ vec2 mc = mix(vec2(0.5), uMouse, uMouseInfluence);
1180
+ vec2 p = uv - mc;
1181
+ p.x *= aspect;
1182
+ float t = uTime * uSpeed;
1183
+ float r = length(p);
1184
+ float a = atan(p.y, p.x);
1185
+ float sym = max(uPetalCount, 1.0);
1186
+ float seg = TAU / sym;
1187
+ float af = mod(a, seg);
1188
+ af = abs(af - seg*0.5);
1189
+ float ang = af / (seg*0.5);
1190
+ float petalShape = pow(cos(ang*PI - PI*0.5), 2.0 + uSpread*6.0);
1191
+ float bloom = uBloomRadius * (0.8 + 0.2*sin(t*1.3));
1192
+ float ray = petalShape / (1.0 + pow(r/bloom, 2.2));
1193
+ float subA = a*sym + t*1.2;
1194
+ float ripple = 0.5 + 0.5*sin(subA*1.0 - r*14.0 + t*2.0);
1195
+ ray *= mix(0.6, 1.0, ripple);
1196
+ float spec = r*uSpread*4.0 - t*uCycle + ang*0.4;
1197
+ vec3 c1 = mix(uColorA, uColorB, 0.5 + 0.5*sin(spec*TAU));
1198
+ vec3 c2 = mix(uColorB, uColorC, 0.5 + 0.5*sin(spec*TAU + 2.094));
1199
+ vec3 petalCol = mix(c1, c2, 0.5 + 0.5*sin(spec*TAU + 4.188));
1200
+ petalCol = spectralShift(petalCol, (r*2.0 - t*0.6)*uSpread);
1201
+ float core = uGlow / (1.0 + r*r*60.0);
1202
+ vec3 col = uBg;
1203
+ col += petalCol * ray * (1.2 + uGlow*1.5);
1204
+ col += petalCol * core * 1.5;
1205
+ col += (uColorA + uColorB) * core * 0.4;
1206
+ col *= 1.0 - 0.35*smoothstep(0.4, 1.1, r);
1207
+ col += hash(uv*uResolution.xy + t)*0.02 - 0.01;
1208
+ col = max(col, 0.0);
1209
+ gl_FragColor = vec4(col, 1.0);
1210
+ }
1211
+ `,cs),ds=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.7},{type:"slider",key:"dotSize",label:"Dot size",min:6,max:48,step:1,default:18,unit:"px"},{type:"slider",key:"gridAngle",label:"Grid angle",min:0,max:90,step:1,default:27,unit:"deg"},{type:"slider",key:"contrast",label:"Contrast",min:.5,max:4,step:.01,default:1.6},{type:"slider",key:"dotSoftness",label:"Dot softness",min:0,max:1,step:.01,default:.35},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"colorA",label:"Ink A",default:"#f97316",slot:"primary"},{type:"color",key:"colorB",label:"Ink B",default:"#fb7185",slot:"secondary"},{type:"color",key:"colorC",label:"Ink C",default:"#fbbf24",slot:"accent"},{type:"color",key:"bg",label:"Paper",default:"#0b0b0f",slot:"background"},{type:"divider",key:"interaction",label:"Interaction"},{type:"slider",key:"mouseInfluence",label:"Mouse swell",min:0,max:2,step:.01,default:.8}],Fu=$e(`
1212
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1213
+ float noise(vec2 p){ vec2 i=floor(p),f=fract(p); f=f*f*(3.0-2.0*f);
1214
+ float a=hash(i),b=hash(i+vec2(1,0)),c=hash(i+vec2(0,1)),d=hash(i+vec2(1,1));
1215
+ return mix(mix(a,b,f.x),mix(c,d,f.x),f.y); }
1216
+ mat2 rot(float a){ float c=cos(a),s=sin(a); return mat2(c,-s,s,c); }
1217
+ void main(){
1218
+ vec2 uv = vUv;
1219
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1220
+ float t = uTime * uSpeed;
1221
+ vec2 g = uv; g.x *= aspect;
1222
+ float diag = (g.x + g.y) * 0.7;
1223
+ float wave = sin(diag*3.0 - t*1.4) * 0.5 + 0.5;
1224
+ float n = noise(g*2.2 + vec2(t*0.3, -t*0.2));
1225
+ float field = mix(wave, n, 0.35);
1226
+ vec2 mp = uMouse; mp.x *= aspect;
1227
+ float md = distance(g, mp);
1228
+ field += uMouseInfluence * (0.6 / (1.0 + md*md*18.0));
1229
+ field = clamp((field - 0.5) * uContrast + 0.5, 0.0, 1.0);
1230
+ vec3 grad = mix(uColorA, uColorB, smoothstep(0.0, 0.7, field));
1231
+ grad = mix(grad, uColorC, smoothstep(0.55, 1.0, field));
1232
+ vec2 frag = gl_FragCoord.xy;
1233
+ float ga = radians(uGridAngle);
1234
+ vec2 rg = rot(ga) * frag;
1235
+ rg += vec2(t * 30.0);
1236
+ float cell = max(uDotSize, 2.0);
1237
+ vec2 gp = mod(rg, cell) - cell*0.5;
1238
+ float dist = length(gp);
1239
+ float radius = (cell*0.5) * sqrt(clamp(field, 0.0, 1.0));
1240
+ float soft = mix(0.5, cell*0.45, clamp(uDotSoftness, 0.0, 1.0));
1241
+ float dot = 1.0 - smoothstep(radius - soft, radius + soft, dist);
1242
+ vec3 col = mix(uBg, grad, dot);
1243
+ float halo = smoothstep(radius + soft, radius - soft*2.0, dist);
1244
+ col += grad * halo * 0.06;
1245
+ col += hash(uv*uResolution.xy + t)*0.02 - 0.01;
1246
+ col = clamp(col, 0.0, 1.0);
1247
+ gl_FragColor = vec4(col, 1.0);
1248
+ }
1249
+ `,ds),ps=[{type:"slider",key:"speed",label:"Speed",min:0,max:3,step:.01,default:.8},{type:"slider",key:"gridDensity",label:"Grid density",min:6,max:60,step:1,default:26},{type:"slider",key:"pulseSpeed",label:"Pulse speed",min:0,max:4,step:.01,default:1.2},{type:"slider",key:"glow",label:"Glow / intensity",min:0,max:2,step:.01,default:.9},{type:"slider",key:"ringRadius",label:"Ring radius",min:.1,max:.6,step:.01,default:.32},{type:"slider",key:"scanline",label:"Scanline mix",min:0,max:1,step:.01,default:.3},{type:"divider",key:"palette",label:"Palette"},{type:"color",key:"colorA",label:"Accent",default:"#22c55e",slot:"primary"},{type:"color",key:"colorB",label:"Rim",default:"#4ade80",slot:"accent"},{type:"color",key:"bg",label:"Background",default:"#03060a",slot:"background"},{type:"divider",key:"interaction",label:"Interaction"},{type:"slider",key:"mouseInfluence",label:"Mouse spotlight",min:0,max:2,step:.01,default:1}],zu=$e(`
1250
+ float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7)))*43758.5453); }
1251
+ float hash1(float n){ return fract(sin(n)*43758.5453); }
1252
+ void main(){
1253
+ vec2 uv = vUv;
1254
+ float aspect = uResolution.x / max(uResolution.y, 1.0);
1255
+ float t = uTime * uSpeed;
1256
+ vec2 cc = uv - 0.5; cc.x *= aspect;
1257
+ float r = length(cc);
1258
+ vec2 g = uv; g.x *= aspect;
1259
+ float dens = max(uGridDensity, 2.0);
1260
+ vec2 cellId = floor(g * dens);
1261
+ vec2 cellUv = fract(g * dens);
1262
+ float perCell = hash(cellId);
1263
+ float pt = uTime * uPulseSpeed;
1264
+ float wavePos = (cellId.x + cellId.y) * 0.18;
1265
+ float wave = sin(wavePos - pt*2.0);
1266
+ float flick = step(0.55, hash1(perCell*37.0 + floor(pt + perCell*4.0)));
1267
+ float activity = smoothstep(0.4, 1.0, wave) * mix(0.4, 1.0, flick);
1268
+ activity = max(activity, 0.12);
1269
+ vec2 d = abs(cellUv - 0.5);
1270
+ float pad = max(d.x, d.y);
1271
+ float cellMask = 1.0 - smoothstep(0.30, 0.46, pad);
1272
+ float line = smoothstep(0.46, 0.5, pad);
1273
+ float ring = abs(r - uRingRadius);
1274
+ float ringGlow = uGlow * 0.02 / (ring + 0.005);
1275
+ float disc = smoothstep(uRingRadius - 0.02, uRingRadius + 0.02, r);
1276
+ vec2 mp = uMouse; mp.x *= aspect;
1277
+ float md = distance(g, mp);
1278
+ float spot = uMouseInfluence * (0.5 / (1.0 + md*md*10.0));
1279
+ float scan = mix(1.0, 0.5 + 0.5*sin(uv.y*uResolution.y*0.6 - t*8.0), uScanline);
1280
+ vec3 accent = uColorA;
1281
+ float lit = activity * cellMask;
1282
+ lit *= disc;
1283
+ lit += spot * cellMask;
1284
+ vec3 col = uBg;
1285
+ col += accent * lit * (1.0 + uGlow) * scan;
1286
+ col += mix(uColorA, uColorB, 0.5) * line * 0.06 * disc;
1287
+ col += uColorB * ringGlow;
1288
+ col += accent * spot * 0.5;
1289
+ col += hash(uv*uResolution.xy + t)*0.02 - 0.01;
1290
+ col = max(col, 0.0);
1291
+ gl_FragColor = vec4(col, 1.0);
1292
+ }
1293
+ `,ps);var wr={space:fu,plasma:hu,voronoi:bu,synthwave:vu,mesh:ku,waves:Tu,undertones:Su,"flowing-dots":Ru,grain:Cu,glass:Pu,holographic:Mu,fluid:Nu,aurora:Eu,caustics:Lu,ribbon:Du,concentric:Au,vortex:Iu,spectral:Hu,halftone:Fu,digital:zu},kr=[{id:"mesh",label:"Mesh gradient",description:"Smooth moving blobs of the primary / secondary / accent colours over the background \u2014 the go-to soft, theme-reactive background.",tags:["gradient","mesh","abstract","hero","background"],scene:"mesh",defaultPostPreset:"none"},{id:"waves",label:"Waves",description:"Flowing banded ribbons that ripple across the surface. Clean motion for headers and hero backdrops.",tags:["waves","motion","abstract","hero"],scene:"waves",defaultPostPreset:"none"},{id:"undertones",label:"Undertones",description:"Soft low-saturation tonal washes drifting like weather \u2014 the field bends gently toward the cursor and a faint light follows it. The calm, expensive-feeling backdrop.",tags:["gradient","soft","subtle","mouse","hero","background","calm"],scene:"undertones",defaultPostPreset:"none"},{id:"flowing-dots",label:"Flowing dots",description:"A dot-matrix grid where waves of dots swell and tint as a flow field passes through \u2014 and swell toward the cursor. Playful, technical, great behind type.",tags:["dots","grid","halftone","mouse","motion","background","playful"],scene:"flowing-dots",defaultPostPreset:"none"},{id:"grain",label:"Grain",description:"A glacial tonal wash under heavy animated film grain \u2014 fine print grain plus a coarser fleck, with a gentle vignette. The editorial, print-feeling backdrop; lovely in light AND dark tones.",tags:["grain","film","texture","editorial","print","subtle","hero","background"],scene:"grain",defaultPostPreset:"none"},{id:"holographic",label:"Holographic foil",description:"Iridescent foil \u2014 a brushed diagonal grain (a diffraction grating) under a spectrum that sweeps across the sheet in dense shimmering bands, with metallic glints riding the grain. The spectrum cycles the brand colours (secondary \u2192 primary \u2192 accent) so it re-tints with the theme rather than being a fixed rainbow. The cursor acts as the view angle, sliding the whole spectrum like tilting a holographic card.",tags:["holographic","foil","iridescent","diffraction","grain","mouse","hero","background"],scene:"holographic",defaultPostPreset:"none"},{id:"glass",label:"Studio glass",description:"A brand-tinted wash seen through a sheet of frosted, slumped glass \u2014 chromatic refraction fringes the edges, anisotropic specular streaks catch a moving key light, and a faint caustic shimmer pools in the folds. The glass bulges toward the cursor like a lens and the highlight tracks it. The expensive, tactile backdrop; lovely in light AND dark tones.",tags:["glass","frosted","refraction","caustic","mouse","soft","hero","background"],scene:"glass",defaultPostPreset:"none"},{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"},{id:"fluid",label:"Fluid",description:"Soft liquid metaballs \u2014 large slow blobs of palette colour merge and split like a lava lamp. The cursor warps the liquid around it.",tags:["lava lamp","liquid","metaballs","organic","gradient","ambient","background"],scene:"fluid",defaultPostPreset:"none",controls:as},{id:"aurora",label:"Aurora",description:"Vertical curtains of northern-light ribbons drift and shimmer over a dark sky, with a faint star field. Lovely on dark surfaces.",tags:["aurora","northern lights","ribbons","dark","glow","atmospheric","background"],scene:"aurora",defaultPostPreset:"none",controls:rs},{id:"caustics",label:"Water caustics",description:"Animated underwater caustic light net \u2014 bright cellular veins ripple across a tinted water surface, with depth-graded colour and a pointer ripple.",tags:["caustics","water","underwater","ripple","cellular","light","background"],scene:"caustics",defaultPostPreset:"none",controls:ns},{id:"ribbon",label:"Flowing ribbon",description:"A silky satin ribbon sweeps and folds across the frame, catching shifting palette colours with an iridescent specular sheen on a light ground.",tags:["ribbon","satin","iridescent","elegant","light","hero","background"],scene:"ribbon",defaultPostPreset:"none",controls:is},{id:"concentric",label:"Concentric",description:"Concentric rings ripple outward from a centre with soft moir\xE9 interference and a gentle pulse. The centre can follow the cursor.",tags:["rings","ripple","moire","radial","hypnotic","background"],scene:"concentric",defaultPostPreset:"none",controls:ss},{id:"vortex",label:"Deep vortex",description:"A dark radial vortex of spiralling streaks pulling into a deep centre, dusted with starfield sparkle. Brooding and atmospheric.",tags:["vortex","spiral","dark","cosmic","radial","atmospheric","background"],scene:"vortex",defaultPostPreset:"none",controls:ls},{id:"spectral",label:"Spectral bloom",description:"A kaleidoscopic radial spectrum burst \u2014 petals of shifting spectrum colour bloom from a cursor-driven centre over a dark ground.",tags:["radial","spectrum","kaleidoscope","bloom","luminous","background"],scene:"spectral",defaultPostPreset:"none",controls:cs},{id:"halftone",label:"Halftone pop",description:"A bold pop-art halftone field \u2014 a palette gradient resolved into a rotated grid of luminance-sized print dots, with a diagonal sweep and mouse swell.",tags:["halftone","pop-art","retro","print","dots","gradient","background"],scene:"halftone",defaultPostPreset:"none",controls:ds},{id:"digital",label:"Digital grid",description:"A techy data-activity field \u2014 a grid of cells lighting up in travelling waves with scanning pulses, a glowing ring, and a mouse spotlight on a near-black ground.",tags:["grid","digital","data","techy","scanline","glow","background"],scene:"digital",defaultPostPreset:"none",controls:ps}],Sr=Object.fromEntries(kr.map(e=>[e.id,e]));var Rr={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}}}},Ln="vhs";var Cr={primary:"oklch(var(--brand-1, 0.62 0.20 20))",secondary:"oklch(var(--brand-2, 0.70 0.16 200))",accent:"oklch(var(--brand-3, 0.78 0.17 90))",background:"oklch(var(--background, 0.12 0.01 265))"},Uy={dark:"oklch(0.13 0.015 265)",light:"oklch(0.97 0.005 265)"},$y=/^[\d.]+\s+[\d.]+\s+[\d.]+(?:\s*\/\s*[\d.%]+)?$/,jy=/^[\d.]+\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.%]+)?$/,Ky=/^\s*var\(\s*(--[^,)\s]+)(?:\s*,[^)]*)?\s*\)\s*$/;function Dn(e,t,o){if(typeof document>"u")return o;let a=e,n=Ky.exec(e);if(n){let l=getComputedStyle(t).getPropertyValue(n[1]).trim();l&&($y.test(l)?a=`oklch(${l})`:jy.test(l)&&(a=`hsl(${l})`));}let r=document.createElement("span");if(r.style.color="",r.style.color=a,r.style.color==="")return o;r.style.display="none",t.appendChild(r);let i=getComputedStyle(r).color;if(t.removeChild(r),!i)return o;if(i.startsWith("rgb"))return i;try{let l=document.createElement("canvas");l.width=1,l.height=1;let s=l.getContext("2d");if(!s)return i;s.clearRect(0,0,1,1),s.fillStyle=i,s.fillRect(0,0,1,1);let[c,p,m]=s.getImageData(0,0,1,1).data;return `rgb(${c}, ${p}, ${m})`}catch{return i}}function Bu(e,t){return {primary:Dn(e.primary,t,Cr.primary),secondary:Dn(e.secondary,t,Cr.secondary),accent:Dn(e.accent,t,Cr.accent),background:Dn(e.background,t,Cr.background)}}var qy=12,us=new Set,Yy=0;function _u(){[...us].sort((t,o)=>o.touched-t.touched).forEach((t,o)=>t.setGranted(o<qy));}function Zy(e){e.touched=++Yy,us.add(e),_u();}function Vu(e){us.delete(e)&&_u();}var Ia=y__namespace.forwardRef(({preset:e,fragmentShader:t,onShaderError:o,postPreset:a,palette:n,tone:r="auto",createScene:i,controls:l=false,autoPlay:s=true,play:c,pauseOffscreen:p=true,releaseOffscreen:m=false,aspect:u="video",radius:g="lg",border:h=false,poster:f,label:b,className:v,style:S,maxDpr:x,...w},k)=>{let C=y__namespace.useRef(null),[E,F]=y__namespace.useState(c??s),[O,M]=y__namespace.useState(false),N=Io(),[H,Y]=y__namespace.useState(!m),[se,D]=y__namespace.useState(!m),V=y__namespace.useRef(null);y__namespace.useEffect(()=>{if(!m){D(true);return}let T={touched:0,setGranted:D};return V.current=T,()=>{Vu(T),V.current=null;}},[m]),y__namespace.useEffect(()=>{if(!m)return;let T=V.current;T&&(H?Zy(T):Vu(T));},[H,m]),y__namespace.useEffect(()=>{if(!m){Y(true);return}let T=C.current;if(!T)return;let Z=new IntersectionObserver(([$])=>Y($.isIntersecting),{rootMargin:"0px",threshold:0});return Z.observe(T),()=>Z.disconnect()},[m]);let R=y__namespace.useMemo(()=>{let T={...Cr,...n};return r!=="auto"&&!n?.background&&(T.background=Uy[r]),T},[n,r]),_=y__namespace.useMemo(()=>i||(t?$e(t):e&&wr[e]?wr[e]:null),[i,t,e]),le=y__namespace.useMemo(()=>{if(a&&typeof a=="object")return a;let T=typeof a=="string"?a:(e?Sr[e]?.defaultPostPreset:void 0)??Ln;return Rr[T]??Rr[Ln]},[a,e]),X=y__namespace.useRef(le);X.current=le;let U=y__namespace.useRef(R);U.current=R;let J=y__namespace.useMemo(()=>JSON.stringify(R??null),[R]),ke=y__namespace.useRef(o);ke.current=o,y__namespace.useEffect(()=>{let T=C.current;if(!T||!_)return;if(m&&(!H||!se)){M(false);return}let Z=T.clientWidth||1,$=T.clientHeight||1,Se=Bu(U.current,T),j=new He__namespace.WebGLRenderer({antialias:true,alpha:false,powerPreference:"high-performance"}),je=x??Math.min(window.devicePixelRatio||1,2);j.setPixelRatio(je),j.setSize(Z,$),j.setClearColor(new He__namespace.Color(Se.background),1),j.domElement.dataset.gdsPart="shader-canvas",j.domElement.style.width="100%",j.domElement.style.height="100%",j.domElement.style.display="block",T.appendChild(j.domElement);let Te;try{Te=_({renderer:j,width:Z,height:$,palette:Se});}catch(re){if(re instanceof Aa)ke.current?.(re),Te=wr.space({renderer:j,width:Z,height:$,palette:Se});else throw j.dispose(),j.domElement.parentElement===T&&T.removeChild(j.domElement),re}let Qe=X.current,G=gu({renderer:j,scene:Te.scene,camera:Te.camera,preset:Qe,width:Z,height:$}),K=new He__namespace.Clock,W=0,pe=(c??s)&&!N,Ie=true,he=()=>{if(W=requestAnimationFrame(he),!pe||p&&!Ie)return;let re=K.getDelta(),Me=K.getElapsedTime();Te.update?.(Me,re),G.composer.render(re);};Te.update?.(0,0),G.composer.render(0),M(true),he();let Gt=new ResizeObserver(([re])=>{let Me=Math.max(1,Math.floor(re.contentRect.width)),Wt=Math.max(1,Math.floor(re.contentRect.height));j.setSize(Me,Wt),G.resize(Me,Wt),Te.resize?.(Me,Wt),pe||(Te.update?.(K.getElapsedTime(),0),G.composer.render(0));});Gt.observe(T);let _e=new IntersectionObserver(([re])=>{Ie=re.isIntersecting;},{threshold:.05});_e.observe(T);let Mt=new MutationObserver(()=>{if(!C.current)return;let re=Bu(U.current,C.current);j.setClearColor(new He__namespace.Color(re.background),1),Te.setPalette?.(re);});Mt.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-theme","data-gds-theme","data-grade-mode"]});let Fe=Te,Qt=Fe.setMouse?re=>{let Me=T.getBoundingClientRect(),Wt=(re.clientX-Me.left)/Me.width,jo=1-(re.clientY-Me.top)/Me.height;Fe.setMouse(Wt,jo);}:null;return Qt&&T.addEventListener("pointermove",Qt),De.current={toggle:()=>{pe=!pe,F(pe);},setRunning:re=>{pe=re&&!N,F(pe);},setPalette:re=>{j.setClearColor(new He__namespace.Color(re.background),1),Te.setPalette?.(re);},setPostPreset:re=>{let Me=typeof re=="string"?Rr[re]:re;Me&&G.setPreset(Me);}},()=>{cancelAnimationFrame(W),Gt.disconnect(),_e.disconnect(),Mt.disconnect(),Qt&&T.removeEventListener("pointermove",Qt),G.dispose(),Te.dispose?.(),j.dispose(),j.domElement.parentElement===T&&T.removeChild(j.domElement),De.current=null;}},[_,J,s,N,p,m,H,se,x]);let De=y__namespace.useRef(null);y__namespace.useEffect(()=>{De.current?.setPostPreset(le);},[le]),y__namespace.useEffect(()=>{c!==void 0&&De.current?.setRunning(c);},[c]);let de=()=>De.current?.toggle();return y__namespace.createElement(so,{...w,ref:T=>{C.current=T,typeof k=="function"?k(T):k&&(k.current=T);},aspect:u,radius:g,border:h,"aria-label":b,className:v,style:S,"data-gds-part":"three-scene"},!O&&f&&y__namespace.createElement("img",{src:f,alt:"",className:"absolute inset-0 w-full h-full object-cover","data-gds-part":"scene-poster"}),l&&y__namespace.createElement("div",{"data-gds-part":"scene-controls",className:d("absolute inset-0 flex items-end justify-end p-2","opacity-0 hover:opacity-100 transition-opacity","bg-gradient-to-t from-black/30 to-transparent")},y__namespace.createElement(et,{size:"icon",variant:"secondary",onClick:de},E?y__namespace.createElement(lucideReact.Pause,{className:"h-4 w-4"}):y__namespace.createElement(lucideReact.Play,{className:"h-4 w-4"}))))});Ia.displayName="ThreeScene";function Ou(e,t,o){let a=e[t];return typeof a=="number"?a:o}function An(e,t,o){let a=e[t];return typeof a=="string"?a:o}function Gu(e,t,o){let a=e[t];return typeof a=="boolean"?a:o}function Wu(e,t,o){let a=e[t];return Array.isArray(a)?a:o}function Qy(e,t){return e.display==="percent"?true:t==="percent"&&!e.unit&&e.step<1&&e.min>=0}function e0({controls:e,state:t,onChange:o,disabled:a,labelPosition:n="inline",format:r="raw",className:i}){return y__namespace.createElement("div",{className:d("flex flex-col",n==="above"?"gap-2.5":"gap-1",i)},e.map(l=>{if(l.type==="divider")return y__namespace.createElement("div",{key:l.key,className:"mt-2 mb-0.5 first:mt-0"},l.label?y__namespace.createElement("span",{className:"text-[11px] font-medium text-foreground/70"},l.label):null);if(l.type==="slider"){let c=Ou(t,l.key,l.default);return y__namespace.createElement(Tr,{key:l.key,labelPosition:n,label:l.label,value:y__namespace.createElement(t0,{spec:l,value:c,percent:Qy(l,r),disabled:a,onChange:p=>o(l.key,p)}),control:y__namespace.createElement(sa,{size:"sm",className:"flex-1",value:[c],min:l.min,max:l.max,step:l.step,disabled:a,"aria-label":l.label,onValueChange:p=>o(l.key,Math.min(l.max,Math.max(l.min,p[0]??l.default)))})})}if(l.type==="segmented"){let c=An(t,l.key,l.default);return y__namespace.createElement(Tr,{key:l.key,labelPosition:n,label:l.label,control:y__namespace.createElement(Co,{type:"single",variant:"segmented",size:"2xs",value:c,disabled:a,onValueChange:p=>p&&o(l.key,p),className:n==="above"?"w-full":""},l.options.map(p=>y__namespace.createElement(To,{key:p.value,value:p.value,className:"px-2.5 text-[11px] font-medium"},p.label)))})}if(l.type==="select"){let c=An(t,l.key,l.default);return y__namespace.createElement(Tr,{key:l.key,labelPosition:n,label:l.label,control:y__namespace.createElement(si,{value:c,onValueChange:p=>o(l.key,p),disabled:a},y__namespace.createElement(mn,{size:"xs",className:n==="above"?"w-full":"w-auto"},y__namespace.createElement(li,null)),y__namespace.createElement(gn,{size:"xs"},l.options.map(p=>y__namespace.createElement(fn,{key:p.value,value:p.value},p.label))))})}if(l.type==="toggle"){let c=Gu(t,l.key,l.default);return y__namespace.createElement(Tr,{key:l.key,labelPosition:n,label:l.label,control:y__namespace.createElement(vn,{checked:c,onCheckedChange:p=>o(l.key,p),disabled:a})})}if(l.type==="color"){let c=An(t,l.key,l.default);return y__namespace.createElement(Tr,{key:l.key,labelPosition:n,label:l.label,hint:l.slot,control:y__namespace.createElement(Uu,{value:c,disabled:a,onChange:p=>o(l.key,p)})})}let s=Wu(t,l.key,l.default);return y__namespace.createElement(o0,{key:l.key,spec:l,value:s,disabled:a,onChange:c=>o(l.key,c)})}))}function Tr({labelPosition:e,label:t,hint:o,control:a,value:n}){let r=y__namespace.createElement(er,{size:"xs",className:d("text-muted-foreground",e==="inline"&&"w-24 shrink-0 truncate")},t,o?y__namespace.createElement("span",{className:"ml-1.5 text-[10px] text-muted-foreground/50"},o):null);return e==="above"?y__namespace.createElement("div",{className:"space-y-1"},y__namespace.createElement("div",{className:"flex items-baseline justify-between gap-2"},r,n),a):y__namespace.createElement("div",{className:"flex items-center gap-2"},r,y__namespace.createElement("div",{className:"flex min-w-0 flex-1 items-center justify-end gap-2"},a,n))}function t0({spec:e,value:t,percent:o,disabled:a,onChange:n}){let r=e.max-e.min||1,i=e.step<1?e.step<.1?3:2:0,l=f=>Math.min(e.max,Math.max(e.min,f)),s=f=>o?String(Math.round((f-e.min)/r*100)):f.toFixed(i),c=f=>{let b=Number(f.replace("%",""));return Number.isFinite(b)?(o&&(b=e.min+b/100*r),l(Math.round(b/e.step)*e.step)):null},p=o?"%":e.unit,[m,u]=y__namespace.useState(null),g=m??s(t),h=f=>{let b=c(f);b!==null&&n(b),u(null);};return y__namespace.createElement("div",{className:"flex w-14 shrink-0 items-center justify-end gap-0.5"},y__namespace.createElement(So,{size:"2xs",variant:"ghost",inputMode:"decimal","aria-label":e.label,className:"w-full px-0 text-right tabular-nums",value:g,disabled:a,onChange:f=>u(f.currentTarget.value),onBlur:f=>h(f.currentTarget.value),onKeyDown:f=>{f.key==="Enter"&&h(f.currentTarget.value);}}),p?y__namespace.createElement("span",{className:"text-[9px] text-muted-foreground/50"},p):null)}function Uu({value:e,disabled:t,onChange:o}){return y__namespace.createElement("div",{className:"flex items-center gap-1.5"},y__namespace.createElement(So,{size:"2xs",variant:"ghost",value:e,disabled:t,onChange:a=>o(a.currentTarget.value),className:"w-20 px-0 text-right font-mono","aria-label":"Colour value"}),y__namespace.createElement(hn,{color:e,size:"xs",shape:"rounded",onColorChange:t?void 0:o,className:t?"opacity-50":void 0}))}function o0({spec:e,value:t,disabled:o,onChange:a}){let n=e.min??1,r=e.max??8,i=(c,p)=>a(t.map((m,u)=>u===c?p:m)),l=()=>t.length<r&&a([...t,t[t.length-1]??"#ffffff"]),s=c=>t.length>n&&a(t.filter((p,m)=>m!==c));return y__namespace.createElement("div",null,y__namespace.createElement("div",{className:"flex items-center gap-2"},y__namespace.createElement(er,{size:"xs",className:"w-24 shrink-0 truncate text-muted-foreground"},e.label),y__namespace.createElement("div",{className:"flex flex-1 justify-end"},y__namespace.createElement("button",{type:"button",onClick:l,disabled:o||t.length>=r,"aria-label":"Add colour",className:"inline-flex h-5 w-5 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40 [&_svg]:size-3.5"},y__namespace.createElement(lucideReact.Plus,null)))),y__namespace.createElement("div",{className:"mt-1 space-y-1 pl-24"},t.map((c,p)=>y__namespace.createElement("div",{key:p,className:"flex items-center justify-end gap-1.5"},y__namespace.createElement(Uu,{value:c,disabled:o,onChange:m=>i(p,m)}),y__namespace.createElement("button",{type:"button",onClick:()=>s(p),disabled:o||t.length<=n,"aria-label":"Remove colour",className:"inline-flex h-6 w-5 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40 [&_svg]:size-3.5"},y__namespace.createElement(lucideReact.Minus,null))))))}var a0={background:"oklch(var(--background))",card:"oklch(var(--card))",muted:"oklch(var(--muted))",secondary:"oklch(var(--secondary))",accent:"oklch(var(--accent))",primary:"oklch(var(--primary))",destructive:"oklch(var(--destructive))",transparent:"transparent"};function In(e){if(e)return a0[e]??e}var r0={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl"},$u={cover:"object-cover",contain:"object-contain",fill:"object-fill",none:"object-none"},ju=y__namespace.forwardRef(({type:e,color:t,gradient:o,src:a,fit:n="cover",position:r="center",repeat:i=false,tileSize:l,preset:s,fragmentShader:c,palette:p,tone:m,postPreset:u,opacity:g,blendMode:h,radius:f="none",className:b,style:v},S)=>{if(e==="none")return null;let x={opacity:g,mixBlendMode:h,...v},w=null;if(e==="solid")x.background=In(t)??"oklch(var(--background))";else if(e==="gradient"){let k=[In(o?.from)??"oklch(var(--primary))",In(o?.via),In(o?.to)??"oklch(var(--accent))"].filter(Boolean);if(o?.shape==="radial"){let C=o.at??"center",E=o.size?`${o.size} `:"";x.backgroundImage=`radial-gradient(${E}at ${C}, ${k.join(", ")})`;}else {let C=o?.angle??135;x.backgroundImage=`linear-gradient(${C}deg, ${k.join(", ")})`;}}else e==="image"?i&&a?(x.backgroundImage=`url(${a})`,x.backgroundRepeat="repeat",x.backgroundPosition=r,l&&(x.backgroundSize=l)):a&&(w=y__namespace.createElement("img",{src:a,alt:"",className:d("absolute inset-0 h-full w-full",$u[n]),style:{objectPosition:r}})):e==="video"?a&&(w=y__namespace.createElement("video",{src:a,autoPlay:true,muted:true,loop:true,playsInline:true,className:d("absolute inset-0 h-full w-full",$u[n]),style:{objectPosition:r}})):e==="shader"&&(w=y__namespace.createElement(Ia,{preset:s,fragmentShader:c,palette:p,tone:m,postPreset:u,aspect:"auto",radius:"none",className:"absolute inset-0"}));return y__namespace.createElement("div",{ref:S,"data-gds-part":"frame-fill","data-gds-fill-type":e,"aria-hidden":"true",className:d("absolute inset-0 z-0 overflow-hidden pointer-events-none",f!=="none"&&r0[f],b),style:x},w)});ju.displayName="BackgroundFill";var Ku={primary:"oklch(var(--primary))",secondary:"oklch(var(--accent))",accent:"oklch(var(--primary))",background:"oklch(var(--foreground))"};var Hn=y__namespace.forwardRef(({preset:e,live:t="hover",postPreset:o,palette:a,className:n,aspect:r="video",radius:i="lg",label:l,hideLabel:s=false,onClick:c},p)=>{let m=Sr[e],[u,g]=y__namespace.useState(false),h=t!=="never",f=t==="always"||t==="hover"&&u;return y__namespace.createElement("div",{ref:p,"data-gds-part":"picker-card","data-gds-preset":e,onMouseEnter:()=>g(true),onMouseLeave:()=>g(false),onClick:c,className:d("group cursor-pointer flex flex-col gap-2",n)},h?y__namespace.createElement(Ia,{key:e,preset:e,postPreset:o,palette:a??Ku,aspect:r,radius:i,autoPlay:false,play:f,controls:false,pauseOffscreen:true,releaseOffscreen:true,poster:m?.poster,maxDpr:1}):y__namespace.createElement(so,{aspect:r,radius:i,"data-gds-part":"preset-poster",className:"bg-gradient-to-br from-muted to-muted/50"},m?.poster?y__namespace.createElement("img",{src:m.poster,alt:m.label,className:"w-full h-full object-cover"}):y__namespace.createElement("div",{className:"absolute inset-0 flex items-center justify-center text-xs text-muted-foreground"},m?.label??e)),!s&&y__namespace.createElement("div",{className:"flex items-baseline justify-between text-xs"},y__namespace.createElement("span",{className:"font-medium text-foreground","data-gds-part":"preset-label"},l??m?.label??e),m?.tags?.[0]&&y__namespace.createElement("span",{className:"text-muted-foreground"},m.tags[0])))});Hn.displayName="ShaderPresetPreview";function ms({value:e,onChange:t,filterTags:o,live:a="hover",postPreset:n,palette:r,columns:i=3,className:l}){let s=y__namespace.useMemo(()=>o?.length?kr.filter(p=>o.some(m=>p.tags.includes(m))):kr,[o]);return y__namespace.createElement("div",{"data-gds-part":"preset-grid",role:"radiogroup",className:d("grid grid-cols-2 gap-3",i===2?"md:grid-cols-2":i===4?"md:grid-cols-4":"md:grid-cols-3",l)},s.map(p=>{let m=e===p.id;return y__namespace.createElement("div",{key:p.id,className:"relative",role:"radio","aria-checked":m},y__namespace.createElement(Hn,{preset:p.id,postPreset:n,palette:r,live:a,onClick:()=>t?.(p.id),className:d("transition-all",m&&"ring-2 ring-primary ring-offset-2 ring-offset-background rounded-lg")}),m&&y__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"},y__namespace.createElement(lucideReact.Check,{className:"h-3.5 w-3.5"})))}))}var Fn=["primary","accent","secondary","muted","card","background","destructive","transparent"];function u0(e){return e==="transparent"?"transparent":`oklch(var(--${e}))`}var m0=[{tab:"solid",icon:lucideReact.Square,label:"Solid"},{tab:"gradient",icon:lucideReact.Blend,label:"Gradient"},{tab:"image",icon:lucideReact.Image,label:"Image"},{tab:"pattern",icon:lucideReact.Grid3x3,label:"Pattern"},{tab:"video",icon:lucideReact.Video,label:"Video"},{tab:"shader",icon:lucideReact.Sparkles,label:"Shader"}];function g0(e){return e.type==="image"&&e.repeat?"pattern":e.type==="image"?"image":e.type}var co="text-[11px] font-medium text-muted-foreground";function gs({token:e,active:t,onClick:o}){return y__namespace.createElement("button",{type:"button",title:e,onClick:o,className:d("h-7 w-7 rounded-md border border-border/60 transition-shadow",e==="transparent"&&"bg-[linear-gradient(45deg,#bbb_25%,transparent_25%,transparent_75%,#bbb_75%),linear-gradient(45deg,#bbb_25%,transparent_25%,transparent_75%,#bbb_75%)] bg-[length:8px_8px] bg-[position:0_0,4px_4px]",t&&"ring-2 ring-primary ring-offset-1 ring-offset-background"),style:e==="transparent"?void 0:{background:u0(e)}})}function qu({value:e,onChange:t,className:o}){let a=g0(e),n=i=>t({...e,...i}),r=i=>{i&&n(i==="pattern"?{type:"image",repeat:true}:i==="image"?{type:"image",repeat:false}:{type:i});};return y__namespace.createElement("div",{className:d("flex flex-col gap-3",o)},y__namespace.createElement(Co,{type:"single",size:"sm",value:a,onValueChange:i=>r(i),className:"justify-start gap-0.5"},m0.map(({tab:i,icon:l,label:s})=>y__namespace.createElement(To,{key:i,value:i,"aria-label":s,title:s},y__namespace.createElement(l,{className:"h-4 w-4"})))),a==="solid"&&y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Token"),y__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},Fn.map(i=>y__namespace.createElement(gs,{key:i,token:i,active:e.color===i,onClick:()=>n({color:i})})))),a==="gradient"&&y__namespace.createElement("div",{className:"flex flex-col gap-2"},y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"From"),y__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},Fn.map(i=>y__namespace.createElement(gs,{key:i,token:i,active:e.gradient?.from===i,onClick:()=>n({gradient:{...e.gradient,from:i}})})))),y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"To"),y__namespace.createElement("div",{className:"flex flex-wrap gap-1.5"},Fn.map(i=>y__namespace.createElement(gs,{key:i,token:i,active:e.gradient?.to===i,onClick:()=>n({gradient:{...e.gradient,to:i}})})))),y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Angle \u2014 ",e.gradient?.angle??135,"\xB0"),y__namespace.createElement(sa,{value:[e.gradient?.angle??135],min:0,max:360,step:5,onValueChange:([i])=>n({gradient:{...e.gradient,angle:i}})}))),(a==="image"||a==="pattern")&&y__namespace.createElement("div",{className:"flex flex-col gap-2"},y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Image URL"),y__namespace.createElement(So,{size:"sm",value:e.src??"",placeholder:"https://\u2026 or /asset.png",onChange:i=>n({src:i.target.value})})),a==="image"&&y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Fit"),y__namespace.createElement(Co,{type:"single",size:"sm",value:e.fit??"cover",onValueChange:i=>i&&n({fit:i}),className:"justify-start gap-0.5"},["cover","contain","fill","none"].map(i=>y__namespace.createElement(To,{key:i,value:i,className:"px-2 text-[11px] capitalize"},i)))),a==="pattern"&&y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Tile size"),y__namespace.createElement(So,{size:"sm",value:e.tileSize??"",placeholder:"120px",onChange:i=>n({tileSize:i.target.value})}))),a==="video"&&y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Video URL"),y__namespace.createElement(So,{size:"sm",value:e.src??"",placeholder:"https://\u2026.mp4",onChange:i=>n({src:i.target.value})})),a==="shader"&&y__namespace.createElement("div",{className:"flex flex-col gap-1.5"},y__namespace.createElement("span",{className:co},"Shader"),y__namespace.createElement(ms,{value:e.preset,onChange:i=>n({preset:i}),live:"hover",columns:3})),e.type!=="none"&&y__namespace.createElement("div",{className:"flex items-center gap-2 border-t border-border/50 pt-2.5"},y__namespace.createElement("span",{className:d(co,"shrink-0")},"Opacity"),y__namespace.createElement(sa,{value:[e.opacity??1],min:0,max:1,step:.05,onValueChange:([i])=>n({opacity:i}),className:"flex-1"}),y__namespace.createElement("span",{className:"w-9 shrink-0 text-right text-[11px] tabular-nums text-foreground"},Math.round((e.opacity??1)*100),"%")))}qu.displayName="FillPicker";function v0({children:e}){let t=y.useRef(null);return y.useEffect(()=>{let o=new b0__default.default({duration:1.2,easing:n=>Math.min(1,1.001-Math.pow(2,-10*n)),orientation:"vertical",gestureOrientation:"vertical",smoothWheel:true});t.current=o;function a(n){o.raf(n),requestAnimationFrame(a);}return requestAnimationFrame(a),()=>{o.destroy(),t.current=null;}},[]),y__namespace.createElement(y__namespace.Fragment,null,e)}function S0({className:e}){let t=da();if(!t)return null;let{theme:o,themes:a,setThemeId:n,deleteTheme:r}=t;return y__namespace.createElement(zt,null,y__namespace.createElement(Bt,{asChild:true},y__namespace.createElement(et,{variant:"ghost",size:"sm",className:d("gap-2",e),"aria-label":"Switch theme"},y__namespace.createElement(lucideReact.Palette,{className:"h-4 w-4"}),y__namespace.createElement("span",{className:"hidden sm:inline"},o.name))),y__namespace.createElement(Ct,{className:"w-80 p-2",align:"end"},y__namespace.createElement("div",{className:"flex items-start justify-between gap-2 px-2 py-1.5 mb-1"},y__namespace.createElement("div",null,y__namespace.createElement("div",{className:"text-xs font-medium text-muted-foreground"},"Theme"),y__namespace.createElement("div",{className:"text-xs text-muted-foreground/80"},"Switch the skin applied site-wide.")),y__namespace.createElement("button",{type:"button",onClick:()=>Hi(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"},y__namespace.createElement(lucideReact.Download,{className:"h-3 w-3"}),".md")),y__namespace.createElement("div",{className:"flex flex-col gap-0.5"},a.map(i=>{let l=i.id===o.id,s=i.id in io,c=i.ramps.primary[500],p=i.ramps.accent[500],m=i.ramps.neutral[500];return y__namespace.createElement("div",{key:i.id,className:d("group flex items-start gap-3 rounded-md px-2 py-2 text-left transition-colors","hover:bg-muted",l&&"bg-muted")},y__namespace.createElement("button",{type:"button",onClick:()=>n(i.id),className:"flex items-start gap-3 flex-1 min-w-0 text-left"},y__namespace.createElement("div",{className:"mt-0.5 flex shrink-0 overflow-hidden rounded-md border border-border"},y__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${c})`},"aria-hidden":true}),y__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${p})`},"aria-hidden":true}),y__namespace.createElement("div",{className:"h-5 w-2.5",style:{background:`oklch(${m})`},"aria-hidden":true})),y__namespace.createElement("div",{className:"min-w-0 flex-1"},y__namespace.createElement("div",{className:"flex items-center gap-2"},y__namespace.createElement("span",{className:"text-sm font-medium truncate text-foreground"},i.name),i.tagline&&y__namespace.createElement("span",{className:"text-[10px] uppercase tracking-wide text-muted-foreground shrink-0"},i.tagline)),i.description&&y__namespace.createElement("div",{className:"text-xs text-muted-foreground line-clamp-2"},i.description))),l&&y__namespace.createElement(lucideReact.Check,{className:"mt-2 h-4 w-4 shrink-0 text-primary"}),!s&&!l&&y__namespace.createElement("button",{type:"button",onClick:u=>{u.stopPropagation(),r(i.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 ${i.name}`},y__namespace.createElement(lucideReact.Trash2,{className:"h-3.5 w-3.5"})))}))))}var Yu=[{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 M0({className:e,variant:t="icons"}){let o=da();if(!o)return null;let{mode:a,setMode:n}=o;return t==="labeled"?y__namespace.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:d("inline-flex flex-wrap gap-1 rounded-md border border-border bg-background p-1",e)},Yu.map(({mode:r,label:i,icon:l})=>{let s=a===r;return y__namespace.createElement("button",{key:r,type:"button",role:"radio","aria-checked":s,onClick:()=>n(r),className:d("flex items-center gap-2 rounded px-3 py-1.5 text-sm transition-colors",s?"bg-primary text-primary-foreground":"hover:bg-accent hover:text-accent-foreground")},y__namespace.createElement(l,{className:"h-4 w-4"}),y__namespace.createElement("span",null,i))})):y__namespace.createElement("div",{role:"radiogroup","aria-label":"Brightness mode",className:d("inline-flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5",e)},Yu.map(({mode:r,icon:i,tooltip:l})=>{let s=a===r;return y__namespace.createElement("button",{key:r,type:"button",role:"radio","aria-checked":s,"aria-label":l,title:l,onClick:()=>n(r),className:d("flex h-7 w-7 items-center justify-center rounded transition-colors",s?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground")},y__namespace.createElement(i,{className:"h-3.5 w-3.5"}))}))}function L0(){let{isDark:e,setMode:t}=Oi();return y__namespace.createElement(et,{variant:"ghost",size:"sm",onClick:()=>t(e?"light":"dark"),className:"gap-2","aria-label":e?"Switch to light mode":"Switch to dark mode"},e?y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement(lucideReact.Sun,{className:"h-4 w-4"}),y__namespace.createElement("span",{className:"hidden sm:inline"},"Light")):y__namespace.createElement(y__namespace.Fragment,null,y__namespace.createElement(lucideReact.Moon,{className:"h-4 w-4"}),y__namespace.createElement("span",{className:"hidden sm:inline"},"Dark")))}
1294
+ exports.ALL_MODES=Np;exports.Accordion=Nm;exports.AccordionContent=Ol;exports.AccordionItem=Vl;exports.AccordionTrigger=_l;exports.AppShell=Jl;exports.AppShellAside=tc;exports.AppShellFooter=ac;exports.AppShellHeader=Ql;exports.AppShellMain=oc;exports.AppShellNav=ec;exports.Avatar=nc;exports.AvatarFallback=sc;exports.AvatarImage=ic;exports.BUILT_IN_INPUTS=kn;exports.BackgroundFill=ju;exports.Badge=Do;exports.Banner=pc;exports.BlinkingCursor=Wr;exports.Breadcrumb=_d;exports.BreadcrumbEllipsis=jd;exports.BreadcrumbItem=Gd;exports.BreadcrumbLink=Wd;exports.BreadcrumbList=Od;exports.BreadcrumbMenuTrigger=Kd;exports.BreadcrumbPage=Ud;exports.BreadcrumbSeparator=$d;exports.Button=et;exports.COMPONENT_CONTRACTS=Gn;exports.Calendar=Lr;exports.CalendarDayButton=mc;exports.Callout=Wl;exports.CalloutDescription=$l;exports.CalloutTitle=Ul;exports.Card=Ar;exports.CardContent=bc;exports.CardDescription=hc;exports.CardFooter=vc;exports.CardHeader=gc;exports.CardTitle=fc;exports.Carousel=qm;exports.CarouselArrows=jn;exports.CarouselDots=$n;exports.CarouselNext=ja;exports.CarouselPrev=$a;exports.CarouselSlide=Dr;exports.CarouselVideoSlide=Un;exports.ChartContainer=tp;exports.ChartLegend=fb;exports.ChartLegendContent=rp;exports.ChartStyle=op;exports.ChartTooltip=gb;exports.ChartTooltipContent=ap;exports.Checkbox=yc;exports.CheckboxCard=Rc;exports.Code=Ac;exports.Combobox=td;exports.Composer=Bc;exports.ComposerReply=wf;exports.DEMO_SPEED_PRESETS=Sa;exports.DataView=dn;exports.DataViewColumns=ni;exports.DataViewToggle=ri;exports.DatePicker=Cf;exports.DateRangePicker=Tf;exports.DemoStage=Ec;exports.Dialog=Mf;exports.DialogClose=Ef;exports.DialogContent=Oc;exports.DialogDescription=$c;exports.DialogFooter=Wc;exports.DialogHeader=Gc;exports.DialogOverlay=Xn;exports.DialogPortal=_c;exports.DialogTitle=Uc;exports.DialogTrigger=Nf;exports.DropdownMenu=Jn;exports.DropdownMenuCheckboxItem=qr;exports.DropdownMenuContent=Kr;exports.DropdownMenuGroup=If;exports.DropdownMenuItem=Yc;exports.DropdownMenuLabel=Yr;exports.DropdownMenuPortal=Hf;exports.DropdownMenuRadioGroup=zf;exports.DropdownMenuRadioItem=Zc;exports.DropdownMenuSeparator=Zr;exports.DropdownMenuShortcut=Xc;exports.DropdownMenuSub=Ff;exports.DropdownMenuSubContent=qc;exports.DropdownMenuSubTrigger=Kc;exports.DropdownMenuTrigger=Qn;exports.FILL_TOKENS=Fn;exports.FRAGMENT_HEADER=wu;exports.Field=Xm;exports.FieldDescription=Hr;exports.FieldLabel=Ir;exports.FieldTrailing=Fr;exports.FillPicker=qu;exports.Flex=md;exports.GRADE_PRE_HYDRATION_SCRIPT=Jb;exports.GradeLoader=Qp;exports.GradeModeSwitcher=M0;exports.GradeThemeProvider=Qb;exports.GradeThemeSwitcher=S0;exports.Grid=pd;exports.Input=So;exports.Label=er;exports.LenisProvider=v0;exports.Logo=Kv;exports.MOTION_ATTR=Ya;exports.Map=Wi;exports.MapMarker=Ui;exports.MediaSurface=so;exports.MediaSurfaceContract=Vn;exports.Message=xg;exports.Motion=ky;exports.MotionOverlay=Ji;exports.MotionScene=uy;exports.MotionScreen=su;exports.MotionText=cu;exports.MultiSelect=ed;exports.Popover=zt;exports.PopoverAnchor=kf;exports.PopoverContent=Ct;exports.PopoverTrigger=Bt;exports.Progress=Qc;exports.PropertyList=Qm;exports.PropertyListRow=qn;exports.RadioCard=Sc;exports.RadioGroup=ld;exports.RadioGroupItem=cd;exports.ResizableHandle=Sh;exports.ResizablePanel=kh;exports.ResizablePanelGroup=wh;exports.Reveal=Lc;exports.RivePlayer=Xp;exports.Row=zo;exports.ScreenAnimator=qi;exports.ScrollArea=gd;exports.ScrollBar=ii;exports.Select=si;exports.SelectContent=gn;exports.SelectGroup=Eh;exports.SelectItem=fn;exports.SelectLabel=bd;exports.SelectScrollDownButton=pi;exports.SelectScrollUpButton=di;exports.SelectSeparator=vd;exports.SelectTrigger=mn;exports.SelectValue=li;exports.Separator=lr;exports.ShaderCompileError=Aa;exports.ShaderControls=e0;exports.ShaderPresetPicker=ms;exports.ShaderPresetPreview=Hn;exports.Sheet=Oh;exports.SheetClose=Wh;exports.SheetContent=Sd;exports.SheetDescription=Pd;exports.SheetFooter=Cd;exports.SheetHeader=Rd;exports.SheetOverlay=ui;exports.SheetPortal=kd;exports.SheetTitle=Td;exports.SheetTrigger=Gh;exports.Sidebar=Oo;exports.SidebarContent=ki;exports.SidebarFooter=Si;exports.SidebarHeader=wi;exports.SidebarItem=Ci;exports.SidebarSection=Ri;exports.SidebarTreeItem=Ti;exports.Skeleton=$h;exports.Slider=sa;exports.Sortable=rb;exports.SortableGroup=gi;exports.SortableHandle=hi;exports.SortableItem=fi;exports.Stack=Ca;exports.Swatch=hn;exports.SwatchGroup=wd;exports.Switch=vn;exports.SwitchCard=Cc;exports.Table=tn;exports.TableBody=an;exports.TableCaption=nd;exports.TableCell=cr;exports.TableFooter=rd;exports.TableHead=rn;exports.TableHeader=on;exports.TableRow=Ta;exports.Tabs=db;exports.TabsContent=Jd;exports.TabsList=Zd;exports.TabsTrigger=Xd;exports.Textarea=np;exports.ThemeToggle=L0;exports.ThreeScene=Ia;exports.Toggle=id;exports.ToggleGroup=Co;exports.ToggleGroupItem=To;exports.Toolbar=ip;exports.ToolbarSlot=sp;exports.Tooltip=ra;exports.TooltipContent=Bo;exports.TooltipProvider=ai;exports.TooltipTrigger=na;exports.VideoPlayer=Zp;exports.appShellAsideVariants=Yl;exports.appShellFooterVariants=Xl;exports.appShellHeaderVariants=Kl;exports.appShellMainVariants=Zl;exports.appShellNavVariants=ql;exports.applyThemeToRoot=Sn;exports.badgeVariants=cc;exports.bannerVariants=dc;exports.buildFragmentShaderScene=$e;exports.builtInThemes=io;exports.buttonVariants=Ua;exports.calloutVariants=Gl;exports.calmInput=vr;exports.cn=d;exports.defaultPostPreset=Ln;exports.defaultThemeId=La;exports.deleteUserTheme=Bi;exports.demoSleep=Pe;exports.demoTypeText=Or;exports.duplicateTheme=Xb;exports.energyInput=Ei;exports.flexVariants=ud;exports.generateTheme=la;exports.getComponentContract=Rm;exports.getTheme=ca;exports.gridVariants=dd;exports.listContractedComponents=Cm;exports.listThemes=Fi;exports.listUserThemes=Pp;exports.loadUserThemeInput=zi;exports.postPresets=Rr;exports.rowVariants=od;exports.saveUserTheme=Cn;exports.sceneRegistry=wr;exports.setMotion=ng;exports.shaderPresetById=Sr;exports.shaderPresets=kr;exports.shellVariants=jl;exports.stackVariants=ad;exports.swatchVariants=yd;exports.themeToCSSVars=Ai;exports.toggleVariants=sn;exports.useCarouselApi=Ym;exports.useDataView=mh;exports.useGradeTheme=Oi;exports.useMaybeGradeTheme=da;exports.useMotionScene=Xi;exports.usePageActive=Za;exports.usePrefersReducedMotion=Io;exports.useReducedMotion=yo;exports.useScriptedDemo=Ho;//# sourceMappingURL=index.js.map
758
1295
  //# sourceMappingURL=index.js.map