This commit implements the core admin dashboard functionality including NextAuth authentication, Cloudflare D1 database integration with complete schema, and Cloudflare R2 file upload system for portfolio images. Features include artist management, appointment scheduling, and data migration capabilities.
1 line
24 KiB
JavaScript
1 line
24 KiB
JavaScript
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9504],{89504:function(e,t,r){r.d(t,{ArtistForm:function(){return w}});var n=r(57437),a=r(2265),i=r(99376),s=r(29501),o=r(13590),l=r(91115),d=r(62869),c=r(95186),u=r(76818),f=r(26815),p=r(66070),m=r(35974),h=r(1828),v=r(99397),g=r(32489),x=r(17689),b=r(35153),y=r(44444);let j=l.z.object({name:l.z.string().min(1,"Name is required"),bio:l.z.string().min(10,"Bio must be at least 10 characters"),specialties:l.z.array(l.z.string()).min(1,"At least one specialty is required"),instagramHandle:l.z.string().optional(),hourlyRate:l.z.number().min(0).optional(),isActive:l.z.boolean().default(!0),email:l.z.string().email().optional()});function w(e){let{artist:t,onSuccess:r}=e,l=(0,i.useRouter)(),{toast:w}=(0,b.pm)(),[N,k]=(0,a.useState)(!1),[S,A]=(0,a.useState)(""),{uploadFiles:C,progress:E,isUploading:P,error:_,clearProgress:z}=(0,y.FL)({maxFiles:10,maxSize:5242880,allowedTypes:["image/jpeg","image/png","image/webp"]}),{register:O,handleSubmit:T,watch:R,setValue:I,formState:{errors:F}}=(0,s.cI)({resolver:(0,o.F)(j),defaultValues:{name:(null==t?void 0:t.name)||"",bio:(null==t?void 0:t.bio)||"",specialties:(null==t?void 0:t.specialties)?"string"==typeof t.specialties?JSON.parse(t.specialties):t.specialties:[],instagramHandle:(null==t?void 0:t.instagramHandle)||"",hourlyRate:(null==t?void 0:t.hourlyRate)||void 0,isActive:(null==t?void 0:t.isActive)!==!1,email:""}}),M=R("specialties"),D=()=>{S.trim()&&!M.includes(S.trim())&&(I("specialties",[...M,S.trim()]),A(""))},U=e=>{I("specialties",M.filter(t=>t!==e))},H=async e=>{if(!e||0===e.length)return;let r=Array.from(e);await C(r,{keyPrefix:t?"portfolio/".concat(t.id):"temp-portfolio"})},Z=async e=>{k(!0);try{let n=t?"/api/artists/".concat(t.id):"/api/artists",a=await fetch(n,{method:t?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!a.ok){let e=await a.json();throw Error(e.error||"Failed to save artist")}let i=await a.json();w({title:"Success",description:t?"Artist updated successfully":"Artist created successfully"}),null==r||r(),t||l.push("/admin/artists/".concat(i.artist.id))}catch(e){console.error("Form submission error:",e),w({title:"Error",description:e instanceof Error?e.message:"Failed to save artist",variant:"destructive"})}finally{k(!1)}};return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsxs)(p.Zb,{children:[(0,n.jsx)(p.Ol,{children:(0,n.jsx)(p.ll,{children:t?"Edit Artist":"Create New Artist"})}),(0,n.jsx)(p.aY,{children:(0,n.jsxs)("form",{onSubmit:T(Z),className:"space-y-6",children:[(0,n.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{htmlFor:"name",children:"Name *"}),(0,n.jsx)(c.I,{id:"name",...O("name"),placeholder:"Artist name"}),F.name&&(0,n.jsx)("p",{className:"text-sm text-red-600",children:F.name.message})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{htmlFor:"email",children:"Email"}),(0,n.jsx)(c.I,{id:"email",type:"email",...O("email"),placeholder:"artist@unitedtattoo.com"}),F.email&&(0,n.jsx)("p",{className:"text-sm text-red-600",children:F.email.message})]})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{htmlFor:"bio",children:"Bio *"}),(0,n.jsx)(u.g,{id:"bio",...O("bio"),placeholder:"Tell us about this artist...",rows:4}),F.bio&&(0,n.jsx)("p",{className:"text-sm text-red-600",children:F.bio.message})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{children:"Specialties *"}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(c.I,{value:S,onChange:e=>A(e.target.value),placeholder:"Add a specialty",onKeyPress:e=>"Enter"===e.key&&(e.preventDefault(),D())}),(0,n.jsx)(d.z,{type:"button",onClick:D,size:"sm",children:(0,n.jsx)(v.Z,{className:"h-4 w-4"})})]}),(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:M.map(e=>(0,n.jsxs)(m.C,{variant:"secondary",className:"flex items-center gap-1",children:[e,(0,n.jsx)("button",{type:"button",onClick:()=>U(e),className:"ml-1 hover:text-red-600",children:(0,n.jsx)(g.Z,{className:"h-3 w-3"})})]},e))}),F.specialties&&(0,n.jsx)("p",{className:"text-sm text-red-600",children:F.specialties.message})]}),(0,n.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{htmlFor:"instagramHandle",children:"Instagram Handle"}),(0,n.jsx)(c.I,{id:"instagramHandle",...O("instagramHandle"),placeholder:"@username"})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(f._,{htmlFor:"hourlyRate",children:"Hourly Rate ($)"}),(0,n.jsx)(c.I,{id:"hourlyRate",type:"number",step:"0.01",...O("hourlyRate",{valueAsNumber:!0}),placeholder:"150.00"})]})]}),(0,n.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,n.jsx)(h.r,{id:"isActive",checked:R("isActive"),onCheckedChange:e=>I("isActive",e)}),(0,n.jsx)(f._,{htmlFor:"isActive",children:"Active Artist"})]}),(0,n.jsxs)("div",{className:"flex justify-end space-x-2",children:[(0,n.jsx)(d.z,{type:"button",variant:"outline",onClick:()=>l.back(),children:"Cancel"}),(0,n.jsx)(d.z,{type:"submit",disabled:N,children:N?"Saving...":t?"Update Artist":"Create Artist"})]})]})})]}),t&&(0,n.jsxs)(p.Zb,{children:[(0,n.jsx)(p.Ol,{children:(0,n.jsx)(p.ll,{children:"Portfolio Images"})}),(0,n.jsx)(p.aY,{children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"border-2 border-dashed border-gray-300 rounded-lg p-6 text-center",children:[(0,n.jsx)(x.Z,{className:"mx-auto h-12 w-12 text-gray-400"}),(0,n.jsxs)("div",{className:"mt-4",children:[(0,n.jsxs)(f._,{htmlFor:"portfolio-upload",className:"cursor-pointer",children:[(0,n.jsx)("span",{className:"mt-2 block text-sm font-medium text-gray-900",children:"Upload portfolio images"}),(0,n.jsx)("span",{className:"mt-1 block text-sm text-gray-500",children:"PNG, JPG, WebP up to 5MB each"})]}),(0,n.jsx)(c.I,{id:"portfolio-upload",type:"file",multiple:!0,accept:"image/*",className:"hidden",onChange:e=>H(e.target.files)})]})]}),E.length>0&&(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h4",{className:"font-medium",children:"Upload Progress"}),E.map(e=>(0,n.jsxs)("div",{className:"flex items-center justify-between p-2 bg-gray-50 rounded",children:[(0,n.jsx)("span",{className:"text-sm",children:e.filename}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:["uploading"===e.status&&(0,n.jsx)("div",{className:"w-20 bg-gray-200 rounded-full h-2",children:(0,n.jsx)("div",{className:"bg-blue-600 h-2 rounded-full transition-all",style:{width:"".concat(e.progress,"%")}})}),"complete"===e.status&&(0,n.jsx)(m.C,{variant:"default",children:"Complete"}),"error"===e.status&&(0,n.jsx)(m.C,{variant:"destructive",children:"Error"})]})]},e.id)),(0,n.jsx)(d.z,{type:"button",variant:"outline",size:"sm",onClick:z,children:"Clear Progress"})]}),_&&(0,n.jsx)("div",{className:"p-3 bg-red-50 border border-red-200 rounded text-red-700 text-sm",children:_})]})})]})]})}},35974:function(e,t,r){r.d(t,{C:function(){return l}});var n=r(57437);r(2265);var a=r(37053),i=r(90535),s=r(94508);let o=(0,i.j)("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function l(e){let{className:t,variant:r,asChild:i=!1,...l}=e,d=i?a.g7:"span";return(0,n.jsx)(d,{"data-slot":"badge",className:(0,s.cn)(o({variant:r}),t),...l})}},62869:function(e,t,r){r.d(t,{d:function(){return o},z:function(){return l}});var n=r(57437);r(2265);var a=r(37053),i=r(90535),s=r(94508);let o=(0,i.j)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:t,variant:r,size:i,asChild:l=!1,...d}=e,c=l?a.g7:"button";return(0,n.jsx)(c,{"data-slot":"button",className:(0,s.cn)(o({variant:r,size:i,className:t})),...d})}},66070:function(e,t,r){r.d(t,{Ol:function(){return s},SZ:function(){return l},Zb:function(){return i},aY:function(){return d},eW:function(){return c},ll:function(){return o}});var n=r(57437);r(2265);var a=r(94508);function i(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card",className:(0,a.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...r})}function s(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card-header",className:(0,a.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",t),...r})}function o(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card-title",className:(0,a.cn)("leading-none font-semibold",t),...r})}function l(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card-description",className:(0,a.cn)("text-muted-foreground text-sm",t),...r})}function d(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card-content",className:(0,a.cn)("px-6",t),...r})}function c(e){let{className:t,...r}=e;return(0,n.jsx)("div",{"data-slot":"card-footer",className:(0,a.cn)("flex items-center px-6 [.border-t]:pt-6",t),...r})}},95186:function(e,t,r){r.d(t,{I:function(){return i}});var n=r(57437);r(2265);var a=r(94508);function i(e){let{className:t,type:r,...i}=e;return(0,n.jsx)("input",{type:r,"data-slot":"input",className:(0,a.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t),...i})}},26815:function(e,t,r){r.d(t,{_:function(){return s}});var n=r(57437);r(2265);var a=r(3771),i=r(94508);function s(e){let{className:t,...r}=e;return(0,n.jsx)(a.f,{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...r})}},1828:function(e,t,r){r.d(t,{r:function(){return s}});var n=r(57437);r(2265);var a=r(88447),i=r(94508);function s(e){let{className:t,...r}=e;return(0,n.jsx)(a.fC,{"data-slot":"switch",className:(0,i.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",t),...r,children:(0,n.jsx)(a.bU,{"data-slot":"switch-thumb",className:(0,i.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}},76818:function(e,t,r){r.d(t,{g:function(){return i}});var n=r(57437);r(2265);var a=r(94508);function i(e){let{className:t,...r}=e;return(0,n.jsx)("textarea",{"data-slot":"textarea",className:(0,a.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),...r})}},44444:function(e,t,r){r.d(t,{FL:function(){return a}});var n=r(2265);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=(0,n.useState)([]),[a,i]=(0,n.useState)(!1),[s,o]=(0,n.useState)(null),{maxFiles:l=10,maxSize:d=10485760,allowedTypes:c=["image/jpeg","image/png","image/webp","image/gif"],onProgress:u,onComplete:f,onError:p}=e,m=(0,n.useCallback)(e=>{let t=[],r=[];if(e.length>l)return r.push("Maximum ".concat(l," files allowed")),{valid:t,errors:r};for(let n of e){if(n.size>d){r.push("".concat(n.name,": File size exceeds ").concat(Math.round(d/1024/1024),"MB limit"));continue}if(!c.includes(n.type)){r.push("".concat(n.name,": File type ").concat(n.type," not allowed"));continue}t.push(n)}return{valid:t,errors:r}},[l,d,c]),h=(0,n.useCallback)(async(e,t)=>{let n="".concat(Date.now(),"-").concat(Math.random().toString(36).substring(2)),a={id:n,filename:e.name,progress:0,status:"uploading"};r(e=>[...e,a]),o(null);try{let a=setInterval(()=>{r(e=>e.map(e=>e.id===n&&e.progress<90?{...e,progress:Math.min(90,e.progress+20*Math.random())}:e))},200),i=new FormData;i.append("file",e),t&&i.append("key",t);let s=await fetch("/api/upload",{method:"POST",body:i});clearInterval(a);let o=await s.json();if(o.success)return r(e=>e.map(e=>e.id===n?{...e,progress:100,status:"complete",url:o.url}:e)),o;return r(e=>e.map(e=>e.id===n?{...e,status:"error",error:o.error}:e)),{success:!1,error:o.error||"Upload failed"}}catch(t){let e=t instanceof Error?t.message:"Upload failed";return r(t=>t.map(t=>t.id===n?{...t,status:"error",error:e}:t)),{success:!1,error:e}}},[]);return{uploadFiles:(0,n.useCallback)(async(e,r)=>{i(!0),o(null);try{let{valid:n,errors:a}=m(e);if(a.length>0){let e=a.join(", ");o(e),null==p||p(e);return}if(0===n.length){o("No valid files to upload"),null==p||p("No valid files to upload");return}let i=[];for(let e of n){let t=(null==r?void 0:r.keyPrefix)?"".concat(r.keyPrefix,"/").concat(Date.now(),"-").concat(e.name):void 0,n=await h(e,t);i.push(n)}let s=i.filter(e=>e.success).map(e=>{var t,r,a;return{filename:(null===(t=n.find(t=>i.indexOf(e)===n.indexOf(t)))||void 0===t?void 0:t.name)||"",url:e.url||"",key:e.key||"",size:(null===(r=n.find(t=>i.indexOf(e)===n.indexOf(t)))||void 0===r?void 0:r.size)||0,mimeType:(null===(a=n.find(t=>i.indexOf(e)===n.indexOf(t)))||void 0===a?void 0:a.type)||""}}),l=i.map((e,t)=>({result:e,file:n[t]})).filter(e=>{let{result:t}=e;return!t.success}).map(e=>{let{result:t,file:r}=e;return{filename:r.name,error:t.error||"Upload failed"}}),d={successful:s,failed:l,total:n.length};null==f||f(d);let c=[...t];null==u||u(c)}catch(t){let e=t instanceof Error?t.message:"Upload failed";o(e),null==p||p(e)}finally{i(!1)}},[t,m,h,u,f,p]),uploadSingleFile:h,progress:t,isUploading:a,error:s,clearProgress:(0,n.useCallback)(()=>{r([]),o(null)},[]),removeFile:(0,n.useCallback)(e=>{r(t=>t.filter(t=>t.id!==e))},[])}}},35153:function(e,t,r){r.d(t,{pm:function(){return f}});var n=r(2265);let a=0,i=new Map,s=e=>{if(i.has(e))return;let t=setTimeout(()=>{i.delete(e),c({type:"REMOVE_TOAST",toastId:e})},1e6);i.set(e,t)},o=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case"DISMISS_TOAST":{let{toastId:r}=t;return r?s(r):e.toasts.forEach(e=>{s(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===r||void 0===r?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===t.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}},l=[],d={toasts:[]};function c(e){d=o(d,e),l.forEach(e=>{e(d)})}function u(e){let{...t}=e,r=(a=(a+1)%Number.MAX_SAFE_INTEGER).toString(),n=()=>c({type:"DISMISS_TOAST",toastId:r});return c({type:"ADD_TOAST",toast:{...t,id:r,open:!0,onOpenChange:e=>{e||n()}}}),{id:r,dismiss:n,update:e=>c({type:"UPDATE_TOAST",toast:{...e,id:r}})}}function f(){let[e,t]=n.useState(d);return n.useEffect(()=>(l.push(t),()=>{let e=l.indexOf(t);e>-1&&l.splice(e,1)}),[e]),{...e,toast:u,dismiss:e=>c({type:"DISMISS_TOAST",toastId:e})}}},94508:function(e,t,r){r.d(t,{cn:function(){return i}});var n=r(61994),a=r(53335);function i(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.m6)((0,n.W)(t))}},17689:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]])},99376:function(e,t,r){var n=r(35475);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},88447:function(e,t,r){r.d(t,{fC:function(){return k},bU:function(){return S}});var n=r(2265);function a(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function i(...e){return t=>{let r=!1,n=e.map(e=>{let n=a(e,t);return r||"function"!=typeof n||(r=!0),n});if(r)return()=>{for(let t=0;t<n.length;t++){let r=n[t];"function"==typeof r?r():a(e[t],null)}}}}var s=r(57437);function o(e){let t=n.useRef(e);return n.useEffect(()=>{t.current=e}),n.useMemo(()=>(...e)=>t.current?.(...e),[])}var l=globalThis?.document?n.useLayoutEffect:()=>{};r(54887);var d=n.forwardRef((e,t)=>{let{children:r,...a}=e,i=n.Children.toArray(r),o=i.find(f);if(o){let e=o.props.children,r=i.map(t=>t!==o?t:n.Children.count(e)>1?n.Children.only(null):n.isValidElement(e)?e.props.children:null);return(0,s.jsx)(c,{...a,ref:t,children:n.isValidElement(e)?n.cloneElement(e,void 0,r):null})}return(0,s.jsx)(c,{...a,ref:t,children:r})});d.displayName="Slot";var c=n.forwardRef((e,t)=>{let{children:r,...a}=e;if(n.isValidElement(r)){let e,s;let o=(e=Object.getOwnPropertyDescriptor(r.props,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning?r.ref:(e=Object.getOwnPropertyDescriptor(r,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning?r.props.ref:r.props.ref||r.ref;return n.cloneElement(r,{...function(e,t){let r={...t};for(let n in t){let a=e[n],i=t[n];/^on[A-Z]/.test(n)?a&&i?r[n]=(...e)=>{i(...e),a(...e)}:a&&(r[n]=a):"style"===n?r[n]={...a,...i}:"className"===n&&(r[n]=[a,i].filter(Boolean).join(" "))}return{...e,...r}}(a,r.props),ref:t?i(t,o):o})}return n.Children.count(r)>1?n.Children.only(null):null});c.displayName="SlotClone";var u=({children:e})=>(0,s.jsx)(s.Fragment,{children:e});function f(e){return n.isValidElement(e)&&e.type===u}var p=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"].reduce((e,t)=>{let r=n.forwardRef((e,r)=>{let{asChild:n,...a}=e,i=n?d:t;return"undefined"!=typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,s.jsx)(i,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),m="Switch",[h,v]=function(e,t=[]){let r=[],a=()=>{let t=r.map(e=>n.createContext(e));return function(r){let a=r?.[e]||t;return n.useMemo(()=>({[`__scope${e}`]:{...r,[e]:a}}),[r,a])}};return a.scopeName=e,[function(t,a){let i=n.createContext(a),o=r.length;r=[...r,a];let l=t=>{let{scope:r,children:a,...l}=t,d=r?.[e]?.[o]||i,c=n.useMemo(()=>l,Object.values(l));return(0,s.jsx)(d.Provider,{value:c,children:a})};return l.displayName=t+"Provider",[l,function(r,s){let l=s?.[e]?.[o]||i,d=n.useContext(l);if(d)return d;if(void 0!==a)return a;throw Error(`\`${r}\` must be used within \`${t}\``)}]},function(...e){let t=e[0];if(1===e.length)return t;let r=()=>{let r=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let a=r.reduce((t,{useScope:r,scopeName:n})=>{let a=r(e)[`__scope${n}`];return{...t,...a}},{});return n.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}(a,...t)]}(m),[g,x]=h(m),b=n.forwardRef((e,t)=>{let{__scopeSwitch:r,name:a,checked:l,defaultChecked:d,required:c,disabled:u,value:f="on",onCheckedChange:m,form:h,...v}=e,[x,b]=n.useState(null),y=function(...e){return n.useCallback(i(...e),e)}(t,e=>b(e)),j=n.useRef(!1),k=!x||h||!!x.closest("form"),[S=!1,A]=function({prop:e,defaultProp:t,onChange:r=()=>{}}){let[a,i]=function({defaultProp:e,onChange:t}){let r=n.useState(e),[a]=r,i=n.useRef(a),s=o(t);return n.useEffect(()=>{i.current!==a&&(s(a),i.current=a)},[a,i,s]),r}({defaultProp:t,onChange:r}),s=void 0!==e,l=s?e:a,d=o(r);return[l,n.useCallback(t=>{if(s){let r="function"==typeof t?t(e):t;r!==e&&d(r)}else i(t)},[s,e,i,d])]}({prop:l,defaultProp:d,onChange:m});return(0,s.jsxs)(g,{scope:r,checked:S,disabled:u,children:[(0,s.jsx)(p.button,{type:"button",role:"switch","aria-checked":S,"aria-required":c,"data-state":N(S),"data-disabled":u?"":void 0,disabled:u,value:f,...v,ref:y,onClick:function(e,t,{checkForDefaultPrevented:r=!0}={}){return function(n){if(e?.(n),!1===r||!n.defaultPrevented)return t?.(n)}}(e.onClick,e=>{A(e=>!e),k&&(j.current=e.isPropagationStopped(),j.current||e.stopPropagation())})}),k&&(0,s.jsx)(w,{control:x,bubbles:!j.current,name:a,value:f,checked:S,required:c,disabled:u,form:h,style:{transform:"translateX(-100%)"}})]})});b.displayName=m;var y="SwitchThumb",j=n.forwardRef((e,t)=>{let{__scopeSwitch:r,...n}=e,a=x(y,r);return(0,s.jsx)(p.span,{"data-state":N(a.checked),"data-disabled":a.disabled?"":void 0,...n,ref:t})});j.displayName=y;var w=e=>{let{control:t,checked:r,bubbles:a=!0,...i}=e,o=n.useRef(null),d=function(e){let t=n.useRef({value:e,previous:e});return n.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}(r),c=function(e){let[t,r]=n.useState(void 0);return l(()=>{if(e){r({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{let n,a;if(!Array.isArray(t)||!t.length)return;let i=t[0];if("borderBoxSize"in i){let e=i.borderBoxSize,t=Array.isArray(e)?e[0]:e;n=t.inlineSize,a=t.blockSize}else n=e.offsetWidth,a=e.offsetHeight;r({width:n,height:a})});return t.observe(e,{box:"border-box"}),()=>t.unobserve(e)}r(void 0)},[e]),t}(t);return n.useEffect(()=>{let e=o.current,t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(d!==r&&t){let n=new Event("click",{bubbles:a});t.call(e,r),e.dispatchEvent(n)}},[d,r,a]),(0,s.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:r,...i,tabIndex:-1,ref:o,style:{...e.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function N(e){return e?"checked":"unchecked"}var k=b,S=j}}]); |