aidol 0.2.1 โ†’ 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),p=require("react-i18next"),O=require("next/image"),x=require("react"),z=require("@hookform/resolvers"),v=require("react-hook-form"),J=require("./aidol-gZjlTwTe.js"),h=require("framer-motion");function Q(t){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(a,r,s.get?s:{enumerable:!0,get:()=>t[r]})}}return a.default=t,Object.freeze(a)}const o=Q(x);function X({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 12.75 6 6 9-13.5"}))}const ee=o.forwardRef(X);function te({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4.5v15m7.5-7.5h-15"}))}const ae=o.forwardRef(te);function se({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z"}))}const re=o.forwardRef(se);function ne({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"}))}const le=o.forwardRef(ne);function oe({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"}))}const ie=o.forwardRef(oe),ce={sm:"size-16",md:"size-24",lg:"size-32"};function N({url:t,alt:a,size:r="md"}){const s=ce[r];return e.jsx("div",{className:`bg-base-200 relative overflow-hidden rounded-2xl ${s}`,children:t?e.jsx(O,{src:t,alt:a,fill:!0,className:"object-cover"}):e.jsx("div",{className:"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br",children:e.jsx(ie,{className:"text-base-content/50 size-1/2"})})})}function U({companion:t,onClick:a}){return e.jsx("div",{onClick:a,className:"card bg-base-200 cursor-pointer p-4 transition-shadow hover:shadow-lg",role:a?"button":void 0,tabIndex:a?0:void 0,onKeyDown:a?r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a())}:void 0,children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(N,{url:t.profilePictureUrl,alt:t.name,size:"md"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h3",{className:"text-title-m text-base-content truncate font-semibold",children:t.name}),t.biography&&e.jsx("p",{className:"text-body-s text-base-content/70 mt-1 line-clamp-2",children:t.biography})]})]})})}function de({companions:t,onCompanionClick:a}){const{t:r}=p.useTranslation();return e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-title-l mb-4 font-semibold",children:r("aidol:aidol.members")}),t&&t.length>0?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:t.map(s=>e.jsx(U,{companion:s,onClick:()=>a(s.id)},s.id))}):e.jsx("p",{className:"text-base-content/50 text-center",children:r("aidol:aidol.noMembers")})]})}function me({aidol:t}){return e.jsxs("div",{className:"flex flex-col items-center gap-4 py-8 text-center",children:[e.jsx("div",{className:"bg-base-200 relative size-32 overflow-hidden rounded-full",children:t.profileImageUrl?e.jsx(O,{src:t.profileImageUrl,alt:t.name,fill:!0,className:"object-cover"}):e.jsx("div",{className:"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br",children:e.jsx(le,{className:"text-base-content/50 size-16"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-display-s text-base-content font-bold",children:t.name}),t.concept&&e.jsx("p",{className:"text-body-l text-base-content/70 mt-2",children:t.concept})]})]})}function $({onClick:t,isLoading:a}){const{t:r}=p.useTranslation();return e.jsx("button",{onClick:t,disabled:a,className:"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48",children:a?e.jsx("span",{className:"loading loading-spinner loading-sm"}):e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"size-5"}),r("aidol:companion.addMember")]})})}const I=x.forwardRef(({placeholder:t,maxLength:a=500,charCount:r,...s},l)=>{const{t:i}=p.useTranslation();return e.jsxs("div",{className:"w-full",children:[e.jsx("textarea",{ref:l,placeholder:t??i("aidol:companion.promptPlaceholder"),maxLength:a,className:"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden",...s}),e.jsxs("div",{className:"text-label-s text-base-content/50 mt-1 text-right",children:[r??0,"/",a]})]})});I.displayName="PromptInput";const k=x.forwardRef(({options:t,...a},r)=>{const{t:s}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:s("aidol:creation.concept")}),e.jsxs("select",{ref:r,className:"select bg-base-100 text-base-content w-full",...a,children:[e.jsx("option",{value:"",children:s("aidol:creation.selectConcept")}),t.map(l=>e.jsx("option",{value:l.value,children:l.label},l.value))]})]})});k.displayName="ConceptSelector";function G({onGenerate:t,isGenerating:a,disabled:r}){const{t:s}=p.useTranslation(),[l,i]=x.useState(""),n=()=>{l.trim()&&t(l)},c=d=>{d.key==="Enter"&&l.trim()&&!a&&!r&&(d.preventDefault(),n())};return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:l,onChange:d=>i(d.target.value),onKeyDown:c,placeholder:s("aidol:creation.emblemPromptPlaceholder"),maxLength:200,className:"input flex-1",disabled:r||a,"data-testid":"emblem-prompt-input"}),e.jsx("button",{type:"button",onClick:n,disabled:r||a||!l.trim(),className:"btn btn-secondary","data-testid":"emblem-generate-button",children:a?e.jsx("span",{className:"loading loading-spinner loading-sm"}):s("aidol:creation.generate")})]}),a&&e.jsx("div",{className:"mt-2",children:e.jsx("progress",{className:"progress w-full"})})]})}var ue=function(t,a){for(var r={};t.length;){var s=t[0],l=s.code,i=s.message,n=s.path.join(".");if(!r[n])if("unionErrors"in s){var c=s.unionErrors[0].errors[0];r[n]={message:c.message,type:c.code}}else r[n]={message:i,type:l};if("unionErrors"in s&&s.unionErrors.forEach(function(w){return w.errors.forEach(function(g){return t.push(g)})}),a){var d=r[n].types,b=d&&d[s.code];r[n]=v.appendErrors(n,a,r,l,b?[].concat(b,s.message):s.message)}t.shift()}return r},pe=function(t,a,r){return r===void 0&&(r={}),function(s,l,i){try{return Promise.resolve((function(n,c){try{var d=Promise.resolve(t[r.mode==="sync"?"parse":"parseAsync"](s,a)).then(function(b){return i.shouldUseNativeValidation&&z.validateFieldsNatively({},i),{errors:{},values:r.raw?s:b}})}catch(b){return c(b)}return d&&d.then?d.then(void 0,c):d})(0,function(n){if((function(c){return Array.isArray(c?.errors)})(n))return{values:{},errors:z.toNestErrors(ue(n.errors,!i.shouldUseNativeValidation&&i.criteriaMode==="all"),i)};throw n}))}catch(n){return Promise.reject(n)}}};function Z(t){var a,r,s="";if(typeof t=="string"||typeof t=="number")s+=t;else if(typeof t=="object")if(Array.isArray(t)){var l=t.length;for(a=0;a<l;a++)t[a]&&(r=Z(t[a]))&&(s&&(s+=" "),s+=r)}else for(r in t)t[r]&&(s&&(s+=" "),s+=r);return s}function y(){for(var t,a,r=0,s="",l=arguments.length;r<l;r++)(t=arguments[r])&&(a=Z(t))&&(s&&(s+=" "),s+=a);return s}const P=x.forwardRef(({error:t,...a},r)=>{const{t:s}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:s("aidol:creation.groupName")}),e.jsx("input",{ref:r,type:"text",placeholder:s("aidol:creation.groupNamePlaceholder"),className:y("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...a}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});P.displayName="GroupNameInput";const M=x.forwardRef(({error:t,...a},r)=>{const{t:s}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:s("aidol:creation.memberName")}),e.jsx("input",{ref:r,type:"text",placeholder:s("aidol:creation.memberNamePlaceholder"),className:y("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...a}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});M.displayName="MemberNameInput";function B({value:t,onChange:a,options:r}){const{t:s}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:s("aidol:creation.personality")}),e.jsx("div",{className:"space-y-2",children:r.map(l=>e.jsxs("label",{className:y("flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors",t===l.value?"border-primary bg-primary/10":"border-base-300 hover:border-base-content/30"),children:[e.jsx("input",{type:"radio",name:"personality",value:l.value,checked:t===l.value,onChange:i=>a(i.target.value),className:"radio-primary radio mt-0.5"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-base-content font-medium",children:l.label}),l.description&&e.jsx("div",{className:"text-body-s text-base-content/70 mt-1",children:l.description})]})]},l.value))})]})}function D({currentStep:t,totalSteps:a,labels:r}){return e.jsx("ul",{className:"steps w-full",children:Array.from({length:a},(s,l)=>{const i=l+1,n=i<t,c=i===t;return e.jsx("li",{className:y("step",(n||c)&&"step-primary"),children:r?.[l]??""},i)})})}const xe=["cute","cool","elegant","powerful"],be=["cheerful","cool","tsundere","gentle"];function fe({onSubmit:t,onComplete:a,onGenerateImage:r,isLoading:s,isGeneratingImage:l,isCompleted:i}){const{t:n}=p.useTranslation(),[c,d]=x.useState(i?3:1),b=x.useMemo(()=>xe.map(m=>({value:m,label:n(`aidol:creation.concepts.${m}`)})),[n]),w=x.useMemo(()=>be.map(m=>({value:m,label:n(`aidol:creation.personalities.${m}.label`),description:n(`aidol:creation.personalities.${m}.description`)})),[n]),{register:g,control:R,handleSubmit:F,trigger:_,watch:T,setValue:L,formState:{errors:f}}=v.useForm({resolver:pe(J.groupCreationSchema),defaultValues:{groupName:"",concept:"",profileImageUrl:"",members:[{name:"",personality:"",systemPrompt:""}]}}),C=T("profileImageUrl"),{fields:q,append:V}=v.useFieldArray({control:R,name:"members"}),A=T("members"),H=async m=>{const u=await r(m);u&&L("profileImageUrl",u)},K=async()=>{await _(["groupName","profileImageUrl"])&&d(2)},W=F(async m=>{const u=m.members.filter(j=>j.name.trim());await t({...m,members:u}),d(3)}),Y=()=>{V({name:"",personality:"",systemPrompt:""})};return e.jsx("main",{className:"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20",children:e.jsxs("div",{className:"w-full max-w-lg",children:[e.jsx(D,{currentStep:c,totalSteps:3,labels:[n("aidol:creation.step1"),n("aidol:creation.step2"),n("aidol:creation.step3")]}),e.jsxs("div",{className:"mt-8",children:[c===1&&e.jsxs("div",{className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step1Title")}),e.jsx(P,{...g("groupName"),error:f.groupName?.message?n(f.groupName.message,{ns:"aidol"}):void 0}),e.jsx(k,{...g("concept"),options:b}),e.jsxs("fieldset",{className:"fieldset",children:[e.jsx("label",{className:"label",children:n("aidol:creation.emblem")}),e.jsx(G,{onGenerate:H,isGenerating:l,disabled:s}),C&&e.jsx("div",{className:"mt-2 flex justify-center",children:e.jsx(N,{url:C,alt:n("aidol:creation.emblem"),size:"lg"})}),f.profileImageUrl?.message&&e.jsx("p",{className:"text-label-m text-error mt-1",children:n(f.profileImageUrl.message,{ns:"aidol"})})]}),e.jsx("button",{type:"button",onClick:K,disabled:!C,className:"btn btn-primary w-full",children:n("aidol:creation.next")})]}),c===2&&e.jsxs("form",{onSubmit:W,className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step2Title")}),q.map((m,u)=>e.jsxs("div",{className:"border-base-300 space-y-4 rounded-lg border p-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(N,{url:null,alt:A[u]?.name??"",size:"sm"}),e.jsx("div",{className:"flex-1",children:e.jsx(M,{...g(`members.${u}.name`),error:f.members?.[u]?.name?.message?n(f.members?.[u]?.name?.message??"",{ns:"aidol"}):void 0})})]}),e.jsx(v.Controller,{name:`members.${u}.personality`,control:R,render:({field:j})=>e.jsx(B,{value:j.value??"",onChange:j.onChange,options:w})}),e.jsx(I,{...g(`members.${u}.systemPrompt`),charCount:A[u]?.systemPrompt?.length??0})]},m.id)),e.jsx($,{onClick:Y,isLoading:!1}),f.members?.root?.message&&e.jsx("p",{className:"text-error text-center",children:n(f.members.root.message,{ns:"aidol"})}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx("button",{type:"button",onClick:()=>d(1),className:"btn btn-ghost flex-1",disabled:s,children:n("aidol:creation.back")}),e.jsx("button",{type:"submit",className:"btn btn-primary flex-1",disabled:s,children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):n("aidol:creation.create")})]})]}),c===3&&e.jsxs("div",{className:"space-y-6 text-center",children:[e.jsx("div",{className:"text-display-l",children:"๐ŸŽ‰"}),e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.completeTitle")}),e.jsx("p",{className:"text-body-l text-base-content/70",children:n("aidol:creation.completeDescription")}),e.jsx("button",{onClick:a,className:"btn btn-primary w-full",children:n("aidol:creation.viewProfile")})]})]})]})})}function he({title:t,titleId:a,...r},s){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":a},r),t?o.createElement("title",{id:a},t):null,o.createElement("path",{fillRule:"evenodd",d:"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z",clipRule:"evenodd"}))}const ge=o.forwardRef(he),S={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},je={animate:{transition:{staggerChildren:.2}}};function ve(){const{t}=p.useTranslation();return e.jsxs(h.motion.section,{variants:je,initial:"initial",whileInView:"animate",viewport:{once:!0,amount:.1},className:"container mx-auto px-6 py-20 text-center md:py-28",children:[e.jsx(h.motion.div,{variants:S,children:e.jsx(ge,{className:"text-secondary drop-shadow-[0_0_16px_theme(colors.secondary)] mx-auto size-24"})}),e.jsx(h.motion.h2,{variants:S,className:"text-display-s md:text-display-m mt-4",children:t("aidol:landing.demo.title")}),e.jsx(h.motion.p,{variants:S,className:"text-body-l text-neutral-content mx-auto mt-4 max-w-lg",children:t("aidol:landing.demo.description")})]})}const E={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},Ne={animate:{transition:{staggerChildren:.2}}};function ye({onGetStarted:t}){const{t:a}=p.useTranslation();return e.jsx("div",{className:"hero from-base-200 to-primary min-h-screen bg-gradient-to-b pt-20",children:e.jsxs(h.motion.div,{variants:Ne,initial:"initial",animate:"animate",className:"hero-content text-base-content flex-col gap-12 text-center",children:[e.jsxs("div",{className:"max-w-3xl",children:[e.jsx(h.motion.h1,{variants:E,className:"text-display-m md:text-display-l mb-4",children:a("aidol:landing.hero.title")}),e.jsx(h.motion.p,{variants:E,className:"text-body-l text-neutral-content mx-auto mt-6 max-w-xl",children:a("aidol:landing.hero.description")})]}),e.jsx(h.motion.div,{variants:E,children:e.jsx("button",{onClick:t,className:"btn btn-primary font-semibold",children:a("aidol:landing.hero.cta")})})]})})}function we({url:t,onCopySuccess:a}){const{t:r}=p.useTranslation(),[s,l]=x.useState(!1),i=x.useCallback(async()=>{await navigator.clipboard.writeText(t),l(!0),a?.(),setTimeout(()=>l(!1),2e3)},[t,a]);return e.jsx("button",{onClick:i,className:"btn btn-circle btn-ghost","aria-label":r("aidol:share"),children:s?e.jsx(ee,{className:"text-success size-6"}):e.jsx(re,{className:"size-6"})})}exports.AddMemberButton=$;exports.Card=U;exports.CompanionGrid=de;exports.ConceptSelector=k;exports.DemoSection=ve;exports.EmblemGenerator=G;exports.GroupCreation=fe;exports.GroupHeader=me;exports.GroupNameInput=P;exports.HeroSection=ye;exports.ImagePreview=N;exports.MemberNameInput=M;exports.PersonalitySelector=B;exports.PromptInput=I;exports.ShareButton=we;exports.StepIndicator=D;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react-i18next"),z=require("next/image"),x=require("react"),O=require("@hookform/resolvers"),N=require("react-hook-form"),J=require("./aidol-gZjlTwTe.js"),h=require("framer-motion");function Q(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(s,r,a.get?a:{enumerable:!0,get:()=>t[r]})}}return s.default=t,Object.freeze(s)}const i=Q(x);function U(t){var s,r,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var l=t.length;for(s=0;s<l;s++)t[s]&&(r=U(t[s]))&&(a&&(a+=" "),a+=r)}else for(r in t)t[r]&&(a&&(a+=" "),a+=r);return a}function g(){for(var t,s,r=0,a="",l=arguments.length;r<l;r++)(t=arguments[r])&&(s=U(t))&&(a&&(a+=" "),a+=s);return a}function X({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 12.75 6 6 9-13.5"}))}const ee=i.forwardRef(X);function te({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4.5v15m7.5-7.5h-15"}))}const ae=i.forwardRef(te);function se({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z"}))}const re=i.forwardRef(se);function ne({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"}))}const le=i.forwardRef(ne);function oe({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"}))}const ie=i.forwardRef(oe),ce={default:"size-profile",profile:"size-full"};function y({url:t,alt:s,variant:r="default"}){return e.jsx("div",{className:g("border-base-300 bg-base-200 relative overflow-hidden rounded-lg border",ce[r]),children:t?e.jsx(z,{src:t,alt:s,fill:!0,className:"size-full object-cover"}):e.jsx("div",{className:"flex size-full items-center justify-center",children:e.jsx(ie,{className:"text-base-content/50 size-1/2"})})})}function $({companion:t,variant:s="grade",onClick:r}){const{t:a}=u.useTranslation(),l=t.aidolId!==null,o=s==="position",n=r&&!l;return e.jsxs("div",{className:g("h-card max-w-card border-base-300 relative w-full overflow-hidden rounded-lg border",n&&"cursor-pointer"),onClick:n?r:void 0,role:n?"button":void 0,tabIndex:n?0:void 0,onKeyDown:n?c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),r())}:void 0,children:[e.jsx("div",{className:"absolute inset-0",children:e.jsx(y,{url:t.profilePictureUrl,alt:t.name,variant:"profile"})}),l&&e.jsx("div",{className:"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm"}),l&&e.jsx("div",{className:"absolute top-4 left-4 z-20",children:e.jsx("span",{className:"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1",children:a("companion.signed")})}),e.jsx("div",{className:g("absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent",l&&"opacity-20",o&&"opacity-30",!l&&!o&&"opacity-60")}),e.jsxs("div",{className:"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2",children:[e.jsx("span",{className:"text-title-s text-white",children:t.name}),!o&&e.jsx("span",{className:"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white",children:a("companion.grade",{grade:t.grade})}),o&&e.jsx("span",{className:"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1",children:t.position})]})]})}function de({companions:t,onCompanionClick:s}){const{t:r}=u.useTranslation();return e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-title-l mb-4 font-semibold",children:r("aidol:aidol.members")}),t&&t.length>0?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx($,{companion:a,onClick:()=>s(a.id)},a.id))}):e.jsx("p",{className:"text-base-content/50 text-center",children:r("aidol:aidol.noMembers")})]})}function me({aidol:t}){return e.jsxs("div",{className:"flex flex-col items-center gap-4 py-8 text-center",children:[e.jsx("div",{className:"bg-base-200 relative size-32 overflow-hidden rounded-full",children:t.profileImageUrl?e.jsx(z,{src:t.profileImageUrl,alt:t.name,fill:!0,className:"object-cover"}):e.jsx("div",{className:"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br",children:e.jsx(le,{className:"text-base-content/50 size-16"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-display-s text-base-content font-bold",children:t.name}),t.concept&&e.jsx("p",{className:"text-body-l text-base-content/70 mt-2",children:t.concept})]})]})}function G({onClick:t,isLoading:s}){const{t:r}=u.useTranslation();return e.jsx("button",{onClick:t,disabled:s,className:"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"size-5"}),r("aidol:companion.addMember")]})})}const E=x.forwardRef(({placeholder:t,maxLength:s=500,charCount:r,...a},l)=>{const{t:o}=u.useTranslation();return e.jsxs("div",{className:"w-full",children:[e.jsx("textarea",{ref:l,placeholder:t??o("aidol:companion.promptPlaceholder"),maxLength:s,className:"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden",...a}),e.jsxs("div",{className:"text-label-s text-base-content/50 mt-1 text-right",children:[r??0,"/",s]})]})});E.displayName="PromptInput";const I=x.forwardRef(({options:t,...s},r)=>{const{t:a}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.concept")}),e.jsxs("select",{ref:r,className:"select bg-base-100 text-base-content w-full",...s,children:[e.jsx("option",{value:"",children:a("aidol:creation.selectConcept")}),t.map(l=>e.jsx("option",{value:l.value,children:l.label},l.value))]})]})});I.displayName="ConceptSelector";function Z({onGenerate:t,isGenerating:s,disabled:r}){const{t:a}=u.useTranslation(),[l,o]=x.useState(""),n=()=>{l.trim()&&t(l)},c=d=>{d.key==="Enter"&&l.trim()&&!s&&!r&&(d.preventDefault(),n())};return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:l,onChange:d=>o(d.target.value),onKeyDown:c,placeholder:a("aidol:creation.emblemPromptPlaceholder"),maxLength:200,className:"input flex-1",disabled:r||s,"data-testid":"emblem-prompt-input"}),e.jsx("button",{type:"button",onClick:n,disabled:r||s||!l.trim(),className:"btn btn-secondary","data-testid":"emblem-generate-button",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):a("aidol:creation.generate")})]}),s&&e.jsx("div",{className:"mt-2",children:e.jsx("progress",{className:"progress w-full"})})]})}var ue=function(t,s){for(var r={};t.length;){var a=t[0],l=a.code,o=a.message,n=a.path.join(".");if(!r[n])if("unionErrors"in a){var c=a.unionErrors[0].errors[0];r[n]={message:c.message,type:c.code}}else r[n]={message:o,type:l};if("unionErrors"in a&&a.unionErrors.forEach(function(w){return w.errors.forEach(function(j){return t.push(j)})}),s){var d=r[n].types,b=d&&d[a.code];r[n]=N.appendErrors(n,s,r,l,b?[].concat(b,a.message):a.message)}t.shift()}return r},pe=function(t,s,r){return r===void 0&&(r={}),function(a,l,o){try{return Promise.resolve((function(n,c){try{var d=Promise.resolve(t[r.mode==="sync"?"parse":"parseAsync"](a,s)).then(function(b){return o.shouldUseNativeValidation&&O.validateFieldsNatively({},o),{errors:{},values:r.raw?a:b}})}catch(b){return c(b)}return d&&d.then?d.then(void 0,c):d})(0,function(n){if((function(c){return Array.isArray(c?.errors)})(n))return{values:{},errors:O.toNestErrors(ue(n.errors,!o.shouldUseNativeValidation&&o.criteriaMode==="all"),o)};throw n}))}catch(n){return Promise.reject(n)}}};const P=x.forwardRef(({error:t,...s},r)=>{const{t:a}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.groupName")}),e.jsx("input",{ref:r,type:"text",placeholder:a("aidol:creation.groupNamePlaceholder"),className:g("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});P.displayName="GroupNameInput";const M=x.forwardRef(({error:t,...s},r)=>{const{t:a}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.memberName")}),e.jsx("input",{ref:r,type:"text",placeholder:a("aidol:creation.memberNamePlaceholder"),className:g("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});M.displayName="MemberNameInput";function B({value:t,onChange:s,options:r}){const{t:a}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.personality")}),e.jsx("div",{className:"space-y-2",children:r.map(l=>e.jsxs("label",{className:g("flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors",t===l.value?"border-primary bg-primary/10":"border-base-300 hover:border-base-content/30"),children:[e.jsx("input",{type:"radio",name:"personality",value:l.value,checked:t===l.value,onChange:o=>s(o.target.value),className:"radio-primary radio mt-0.5"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-base-content font-medium",children:l.label}),l.description&&e.jsx("div",{className:"text-body-s text-base-content/70 mt-1",children:l.description})]})]},l.value))})]})}function D({currentStep:t,totalSteps:s,labels:r}){return e.jsx("ul",{className:"steps w-full",children:Array.from({length:s},(a,l)=>{const o=l+1,n=o<t,c=o===t;return e.jsx("li",{className:g("step",(n||c)&&"step-primary"),children:r?.[l]??""},o)})})}const xe=["cute","cool","elegant","powerful"],be=["cheerful","cool","tsundere","gentle"];function fe({onSubmit:t,onComplete:s,onGenerateImage:r,isLoading:a,isGeneratingImage:l,isCompleted:o}){const{t:n}=u.useTranslation(),[c,d]=x.useState(o?3:1),b=x.useMemo(()=>xe.map(m=>({value:m,label:n(`aidol:creation.concepts.${m}`)})),[n]),w=x.useMemo(()=>be.map(m=>({value:m,label:n(`aidol:creation.personalities.${m}.label`),description:n(`aidol:creation.personalities.${m}.description`)})),[n]),{register:j,control:R,handleSubmit:F,trigger:_,watch:T,setValue:L,formState:{errors:f}}=N.useForm({resolver:pe(J.groupCreationSchema),defaultValues:{groupName:"",concept:"",profileImageUrl:"",members:[{name:"",personality:"",systemPrompt:""}]}}),C=T("profileImageUrl"),{fields:q,append:V}=N.useFieldArray({control:R,name:"members"}),A=T("members"),H=async m=>{const p=await r(m);p&&L("profileImageUrl",p)},K=async()=>{await _(["groupName","profileImageUrl"])&&d(2)},W=F(async m=>{const p=m.members.filter(v=>v.name.trim());await t({...m,members:p}),d(3)}),Y=()=>{V({name:"",personality:"",systemPrompt:""})};return e.jsx("main",{className:"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20",children:e.jsxs("div",{className:"w-full max-w-lg",children:[e.jsx(D,{currentStep:c,totalSteps:3,labels:[n("aidol:creation.step1"),n("aidol:creation.step2"),n("aidol:creation.step3")]}),e.jsxs("div",{className:"mt-8",children:[c===1&&e.jsxs("div",{className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step1Title")}),e.jsx(P,{...j("groupName"),error:f.groupName?.message?n(f.groupName.message,{ns:"aidol"}):void 0}),e.jsx(I,{...j("concept"),options:b}),e.jsxs("fieldset",{className:"fieldset",children:[e.jsx("label",{className:"label",children:n("aidol:creation.emblem")}),e.jsx(Z,{onGenerate:H,isGenerating:l,disabled:a}),C&&e.jsx("div",{className:"mt-2 flex justify-center",children:e.jsx(y,{url:C,alt:n("aidol:creation.emblem")})}),f.profileImageUrl?.message&&e.jsx("p",{className:"text-label-m text-error mt-1",children:n(f.profileImageUrl.message,{ns:"aidol"})})]}),e.jsx("button",{type:"button",onClick:K,disabled:!C,className:"btn btn-primary w-full",children:n("aidol:creation.next")})]}),c===2&&e.jsxs("form",{onSubmit:W,className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step2Title")}),q.map((m,p)=>e.jsxs("div",{className:"border-base-300 space-y-4 rounded-lg border p-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(y,{url:null,alt:A[p]?.name??""}),e.jsx("div",{className:"flex-1",children:e.jsx(M,{...j(`members.${p}.name`),error:f.members?.[p]?.name?.message?n(f.members?.[p]?.name?.message??"",{ns:"aidol"}):void 0})})]}),e.jsx(N.Controller,{name:`members.${p}.personality`,control:R,render:({field:v})=>e.jsx(B,{value:v.value??"",onChange:v.onChange,options:w})}),e.jsx(E,{...j(`members.${p}.systemPrompt`),charCount:A[p]?.systemPrompt?.length??0})]},m.id)),e.jsx(G,{onClick:Y,isLoading:!1}),f.members?.root?.message&&e.jsx("p",{className:"text-error text-center",children:n(f.members.root.message,{ns:"aidol"})}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx("button",{type:"button",onClick:()=>d(1),className:"btn btn-ghost flex-1",disabled:a,children:n("aidol:creation.back")}),e.jsx("button",{type:"submit",className:"btn btn-primary flex-1",disabled:a,children:a?e.jsx("span",{className:"loading loading-spinner loading-sm"}):n("aidol:creation.create")})]})]}),c===3&&e.jsxs("div",{className:"space-y-6 text-center",children:[e.jsx("div",{className:"text-display-l",children:"๐ŸŽ‰"}),e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.completeTitle")}),e.jsx("p",{className:"text-body-l text-base-content/70",children:n("aidol:creation.completeDescription")}),e.jsx("button",{onClick:s,className:"btn btn-primary w-full",children:n("aidol:creation.viewProfile")})]})]})]})})}function he({title:t,titleId:s,...r},a){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?i.createElement("title",{id:s},t):null,i.createElement("path",{fillRule:"evenodd",d:"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z",clipRule:"evenodd"}))}const ge=i.forwardRef(he),k={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},je={animate:{transition:{staggerChildren:.2}}};function ve(){const{t}=u.useTranslation();return e.jsxs(h.motion.section,{variants:je,initial:"initial",whileInView:"animate",viewport:{once:!0,amount:.1},className:"container mx-auto px-6 py-20 text-center md:py-28",children:[e.jsx(h.motion.div,{variants:k,children:e.jsx(ge,{className:"text-secondary drop-shadow-[0_0_16px_theme(colors.secondary)] mx-auto size-24"})}),e.jsx(h.motion.h2,{variants:k,className:"text-display-s md:text-display-m mt-4",children:t("aidol:landing.demo.title")}),e.jsx(h.motion.p,{variants:k,className:"text-body-l text-neutral-content mx-auto mt-4 max-w-lg",children:t("aidol:landing.demo.description")})]})}const S={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},Ne={animate:{transition:{staggerChildren:.2}}};function ye({onGetStarted:t}){const{t:s}=u.useTranslation();return e.jsx("div",{className:"hero from-base-200 to-primary min-h-screen bg-gradient-to-b pt-20",children:e.jsxs(h.motion.div,{variants:Ne,initial:"initial",animate:"animate",className:"hero-content text-base-content flex-col gap-12 text-center",children:[e.jsxs("div",{className:"max-w-3xl",children:[e.jsx(h.motion.h1,{variants:S,className:"text-display-m md:text-display-l mb-4",children:s("aidol:landing.hero.title")}),e.jsx(h.motion.p,{variants:S,className:"text-body-l text-neutral-content mx-auto mt-6 max-w-xl",children:s("aidol:landing.hero.description")})]}),e.jsx(h.motion.div,{variants:S,children:e.jsx("button",{onClick:t,className:"btn btn-primary font-semibold",children:s("aidol:landing.hero.cta")})})]})})}function we({url:t,onCopySuccess:s}){const{t:r}=u.useTranslation(),[a,l]=x.useState(!1),o=x.useCallback(async()=>{await navigator.clipboard.writeText(t),l(!0),s?.(),setTimeout(()=>l(!1),2e3)},[t,s]);return e.jsx("button",{onClick:o,className:"btn btn-circle btn-ghost","aria-label":r("aidol:share"),children:a?e.jsx(ee,{className:"text-success size-6"}):e.jsx(re,{className:"size-6"})})}exports.AddMemberButton=G;exports.Card=$;exports.CompanionGrid=de;exports.ConceptSelector=I;exports.DemoSection=ve;exports.EmblemGenerator=Z;exports.GroupCreation=fe;exports.GroupHeader=me;exports.GroupNameInput=P;exports.HeroSection=ye;exports.ImagePreview=y;exports.MemberNameInput=M;exports.PersonalitySelector=B;exports.PromptInput=E;exports.ShareButton=we;exports.StepIndicator=D;
2
2
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":["../node_modules/@heroicons/react/24/outline/esm/CheckIcon.js","../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../node_modules/@heroicons/react/24/outline/esm/ShareIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserGroupIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserIcon.js","../src/components/companion/ImagePreview.tsx","../src/components/companion/Card.tsx","../src/components/aidol/CompanionGrid.tsx","../src/components/aidol/GroupHeader.tsx","../src/components/companion/AddMemberButton.tsx","../src/components/companion/PromptInput.tsx","../src/components/creation/ConceptSelector.tsx","../src/components/creation/EmblemGenerator.tsx","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../node_modules/clsx/dist/clsx.mjs","../src/components/creation/GroupNameInput.tsx","../src/components/creation/MemberNameInput.tsx","../src/components/creation/PersonalitySelector.tsx","../src/components/creation/StepIndicator.tsx","../src/components/creation/GroupCreation.tsx","../node_modules/@heroicons/react/24/solid/esm/SparklesIcon.js","../src/components/landing/DemoSection.tsx","../src/components/landing/HeroSection.tsx","../src/components/ShareButton.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction CheckIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 12.75 6 6 9-13.5\"\n }));\n}\nconst ForwardRef = React.forwardRef(CheckIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 4.5v15m7.5-7.5h-15\"\n }));\n}\nconst ForwardRef = React.forwardRef(PlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ShareIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(ShareIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserGroupIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserGroupIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserIcon);\nexport default ForwardRef;","\"use client\";\n\nimport { UserIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\n\ninterface ImagePreviewProps {\n url?: string | null;\n alt: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst SIZE_CLASSES = {\n sm: \"size-16\",\n md: \"size-24\",\n lg: \"size-32\",\n};\n\n/**\n * Image preview component for companion profile pictures.\n * Shows a placeholder when no image URL is provided.\n */\nexport function ImagePreview({ url, alt, size = \"md\" }: ImagePreviewProps) {\n const sizeClass = SIZE_CLASSES[size];\n\n return (\n <div\n className={`bg-base-200 relative overflow-hidden rounded-2xl ${sizeClass}`}\n >\n {url ? (\n <Image src={url} alt={alt} fill className=\"object-cover\" />\n ) : (\n <div className=\"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br\">\n <UserIcon className=\"text-base-content/50 size-1/2\" />\n </div>\n )}\n </div>\n );\n}\n","import type { Companion } from \"../../schemas\";\n\nimport { ImagePreview } from \"./ImagePreview\";\n\ninterface CardProps {\n companion: Companion;\n onClick?: () => void;\n}\n\n/**\n * Companion card component displaying profile picture and name.\n */\nexport function Card({ companion, onClick }: CardProps) {\n return (\n <div\n onClick={onClick}\n className=\"card bg-base-200 cursor-pointer p-4 transition-shadow hover:shadow-lg\"\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n <div className=\"flex items-center gap-4\">\n <ImagePreview\n url={companion.profilePictureUrl}\n alt={companion.name}\n size=\"md\"\n />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-title-m text-base-content truncate font-semibold\">\n {companion.name}\n </h3>\n {companion.biography && (\n <p className=\"text-body-s text-base-content/70 mt-1 line-clamp-2\">\n {companion.biography}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { Card } from \"@/components/companion/Card\";\nimport type { Companion } from \"@/schemas/companion\";\n\nexport interface CompanionGridProps {\n companions: Companion[] | undefined;\n onCompanionClick: (companionId: string) => void;\n}\n\n/**\n * Companion ์นด๋“œ ๊ทธ๋ฆฌ๋“œ (Presentational)\n * ๋ฉค๋ฒ„ ๋ชฉ๋ก ์ œ๋ชฉ, ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ, ๋นˆ ์ƒํƒœ ํ‘œ์‹œ\n */\nexport function CompanionGrid({\n companions,\n onCompanionClick,\n}: CompanionGridProps): JSX.Element {\n const { t } = useTranslation();\n\n return (\n <div className=\"mt-8\">\n <h2 className=\"text-title-l mb-4 font-semibold\">\n {t(\"aidol:aidol.members\")}\n </h2>\n {companions && companions.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {companions.map((companion) => (\n <Card\n key={companion.id}\n companion={companion}\n onClick={() => onCompanionClick(companion.id)}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-base-content/50 text-center\">\n {t(\"aidol:aidol.noMembers\")}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { UserGroupIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\n\nimport type { AIdol } from \"../../schemas\";\n\ninterface GroupHeaderProps {\n aidol: AIdol;\n}\n\n/**\n * Header component for AIdol group profile page.\n * Displays group image, name, and concept.\n */\nexport function GroupHeader({ aidol }: GroupHeaderProps) {\n return (\n <div className=\"flex flex-col items-center gap-4 py-8 text-center\">\n <div className=\"bg-base-200 relative size-32 overflow-hidden rounded-full\">\n {aidol.profileImageUrl ? (\n <Image\n src={aidol.profileImageUrl}\n alt={aidol.name}\n fill\n className=\"object-cover\"\n />\n ) : (\n <div className=\"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br\">\n <UserGroupIcon className=\"text-base-content/50 size-16\" />\n </div>\n )}\n </div>\n <div>\n <h1 className=\"text-display-s text-base-content font-bold\">\n {aidol.name}\n </h1>\n {aidol.concept && (\n <p className=\"text-body-l text-base-content/70 mt-2\">\n {aidol.concept}\n </p>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { PlusIcon } from \"@heroicons/react/24/outline\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface AddMemberButtonProps {\n onClick: () => void;\n isLoading?: boolean;\n}\n\n/**\n * Button for adding a new companion member.\n */\nexport function AddMemberButton({ onClick, isLoading }: AddMemberButtonProps) {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={onClick}\n disabled={isLoading}\n className=\"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48\"\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n <>\n <PlusIcon className=\"size-5\" />\n {t(\"aidol:companion.addMember\")}\n </>\n )}\n </button>\n );\n}\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PromptInputProps {\n placeholder?: string;\n maxLength?: number;\n charCount?: number;\n}\n\n/**\n * Textarea for entering companion system prompt or personality description.\n * Supports react-hook-form register() via forwardRef.\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n ({ placeholder, maxLength = 500, charCount, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"w-full\">\n <textarea\n ref={ref}\n placeholder={placeholder ?? t(\"aidol:companion.promptPlaceholder\")}\n maxLength={maxLength}\n className=\"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden\"\n {...props}\n />\n <div className=\"text-label-s text-base-content/50 mt-1 text-right\">\n {charCount ?? 0}/{maxLength}\n </div>\n </div>\n );\n },\n);\n\nPromptInput.displayName = \"PromptInput\";\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ConceptOption {\n value: string;\n label: string;\n}\n\ninterface ConceptSelectorProps {\n options: ConceptOption[];\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\n/**\n * Dropdown selector for AIdol group concept.\n * Supports react-hook-form via forwardRef.\n */\nexport const ConceptSelector = forwardRef<\n HTMLSelectElement,\n ConceptSelectorProps\n>(({ options, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.concept\")}</label>\n <select\n ref={ref}\n className=\"select bg-base-100 text-base-content w-full\"\n {...props}\n >\n <option value=\"\">{t(\"aidol:creation.selectConcept\")}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </fieldset>\n );\n});\n\nConceptSelector.displayName = \"ConceptSelector\";\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface EmblemGeneratorProps {\n onGenerate: (prompt: string) => void;\n isGenerating: boolean;\n disabled?: boolean;\n}\n\n/**\n * Emblem image generation input (Presentational)\n * Follows ImageUpload pattern: input + loading state only\n * Preview is handled by parent component\n */\nexport function EmblemGenerator({\n onGenerate,\n isGenerating,\n disabled,\n}: EmblemGeneratorProps) {\n const { t } = useTranslation();\n const [prompt, setPrompt] = useState(\"\");\n\n const handleGenerate = () => {\n if (prompt.trim()) {\n onGenerate(prompt);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && prompt.trim() && !isGenerating && !disabled) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n return (\n <fieldset className=\"fieldset w-full\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={t(\"aidol:creation.emblemPromptPlaceholder\")}\n maxLength={200}\n className=\"input flex-1\"\n disabled={disabled || isGenerating}\n data-testid=\"emblem-prompt-input\"\n />\n <button\n type=\"button\"\n onClick={handleGenerate}\n disabled={disabled || isGenerating || !prompt.trim()}\n className=\"btn btn-secondary\"\n data-testid=\"emblem-generate-button\"\n >\n {isGenerating ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.generate\")\n )}\n </button>\n </div>\n {isGenerating && (\n <div className=\"mt-2\">\n <progress className=\"progress w-full\"></progress>\n </div>\n )}\n </fieldset>\n );\n}\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface GroupNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for AIdol group name.\n * Supports react-hook-form via forwardRef.\n */\nexport const GroupNameInput = forwardRef<HTMLInputElement, GroupNameInputProps>(\n ({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.groupName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.groupNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n },\n);\n\nGroupNameInput.displayName = \"GroupNameInput\";\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface MemberNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for companion member name.\n * Supports react-hook-form via forwardRef.\n */\nexport const MemberNameInput = forwardRef<\n HTMLInputElement,\n MemberNameInputProps\n>(({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.memberName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.memberNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n});\n\nMemberNameInput.displayName = \"MemberNameInput\";\n","\"use client\";\n\nimport clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PersonalityOption {\n value: string;\n label: string;\n description?: string;\n}\n\ninterface PersonalitySelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: PersonalityOption[];\n}\n\n/**\n * Radio group selector for companion personality.\n */\nexport function PersonalitySelector({\n value,\n onChange,\n options,\n}: PersonalitySelectorProps) {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.personality\")}</label>\n <div className=\"space-y-2\">\n {options.map((option) => (\n <label\n key={option.value}\n className={clsx(\n \"flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors\",\n value === option.value\n ? \"border-primary bg-primary/10\"\n : \"border-base-300 hover:border-base-content/30\",\n )}\n >\n <input\n type=\"radio\"\n name=\"personality\"\n value={option.value}\n checked={value === option.value}\n onChange={(e) => onChange(e.target.value)}\n className=\"radio-primary radio mt-0.5\"\n />\n <div>\n <div className=\"text-base-content font-medium\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-body-s text-base-content/70 mt-1\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport clsx from \"clsx\";\n\ninterface StepIndicatorProps {\n currentStep: number;\n totalSteps: number;\n labels?: string[];\n}\n\n/**\n * Step indicator for multi-step creation flow.\n * Uses DaisyUI steps component.\n */\nexport function StepIndicator({\n currentStep,\n totalSteps,\n labels,\n}: StepIndicatorProps) {\n return (\n <ul className=\"steps w-full\">\n {Array.from({ length: totalSteps }, (_, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n\n return (\n <li\n key={stepNumber}\n className={clsx(\n \"step\",\n (isCompleted || isCurrent) && \"step-primary\",\n )}\n >\n {labels?.[index] ?? \"\"}\n </li>\n );\n })}\n </ul>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { AddMemberButton } from \"@/components/companion/AddMemberButton\";\nimport { ImagePreview } from \"@/components/companion/ImagePreview\";\nimport { PromptInput } from \"@/components/companion/PromptInput\";\nimport { ConceptSelector } from \"@/components/creation/ConceptSelector\";\nimport { EmblemGenerator } from \"@/components/creation/EmblemGenerator\";\nimport { GroupNameInput } from \"@/components/creation/GroupNameInput\";\nimport { MemberNameInput } from \"@/components/creation/MemberNameInput\";\nimport { PersonalitySelector } from \"@/components/creation/PersonalitySelector\";\nimport { StepIndicator } from \"@/components/creation/StepIndicator\";\nimport {\n groupCreationSchema,\n type GroupCreationFormData,\n} from \"@/schemas/aidol\";\n\nexport type { GroupCreationFormData };\n\nexport interface GroupCreationProps {\n onSubmit: (data: GroupCreationFormData) => Promise<void>;\n onComplete: () => void;\n onGenerateImage: (prompt: string) => Promise<string | null>;\n isLoading: boolean;\n isGeneratingImage: boolean;\n isCompleted: boolean;\n}\n\nconst CONCEPT_KEYS = [\"cute\", \"cool\", \"elegant\", \"powerful\"] as const;\nconst PERSONALITY_KEYS = [\"cheerful\", \"cool\", \"tsundere\", \"gentle\"] as const;\n\n/**\n * AIdol ๊ทธ๋ฃน ์ƒ์„ฑ ๋ฉ€ํ‹ฐ์Šคํ… ํผ (Presentational)\n * react-hook-form + zod validation\n */\nexport function GroupCreation({\n onSubmit,\n onComplete,\n onGenerateImage,\n isLoading,\n isGeneratingImage,\n isCompleted,\n}: GroupCreationProps): JSX.Element {\n const { t } = useTranslation();\n const [step, setStep] = useState(isCompleted ? 3 : 1);\n\n const conceptOptions = useMemo(\n () =>\n CONCEPT_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.concepts.${key}`),\n })),\n [t],\n );\n\n const personalityOptions = useMemo(\n () =>\n PERSONALITY_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.personalities.${key}.label`),\n description: t(`aidol:creation.personalities.${key}.description`),\n })),\n [t],\n );\n\n const {\n register,\n control,\n handleSubmit,\n trigger,\n watch,\n setValue,\n formState: { errors },\n } = useForm<GroupCreationFormData>({\n resolver: zodResolver(groupCreationSchema),\n defaultValues: {\n groupName: \"\",\n concept: \"\",\n profileImageUrl: \"\",\n members: [{ name: \"\", personality: \"\", systemPrompt: \"\" }],\n },\n });\n\n const profileImageUrl = watch(\"profileImageUrl\");\n\n const { fields, append } = useFieldArray({\n control,\n name: \"members\",\n });\n\n const members = watch(\"members\");\n\n const handleGenerateEmblem = async (prompt: string) => {\n const imageUrl = await onGenerateImage(prompt);\n if (imageUrl) {\n setValue(\"profileImageUrl\", imageUrl);\n }\n };\n\n const handleStep1Next = async () => {\n const isValid = await trigger([\"groupName\", \"profileImageUrl\"]);\n if (isValid) {\n setStep(2);\n }\n };\n\n const handleStep2Submit = handleSubmit(async (data) => {\n // Filter out empty members before submit\n const validMembers = data.members.filter((m) => m.name.trim());\n await onSubmit({ ...data, members: validMembers });\n setStep(3);\n });\n\n const handleAddMember = () => {\n append({ name: \"\", personality: \"\", systemPrompt: \"\" });\n };\n\n return (\n <main className=\"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20\">\n <div className=\"w-full max-w-lg\">\n <StepIndicator\n currentStep={step}\n totalSteps={3}\n labels={[\n t(\"aidol:creation.step1\"),\n t(\"aidol:creation.step2\"),\n t(\"aidol:creation.step3\"),\n ]}\n />\n\n <div className=\"mt-8\">\n {/* Step 1: Group Info */}\n {step === 1 && (\n <div className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step1Title\")}\n </h2>\n <GroupNameInput\n {...register(\"groupName\")}\n error={\n errors.groupName?.message\n ? t(errors.groupName.message, { ns: \"aidol\" })\n : undefined\n }\n />\n <ConceptSelector\n {...register(\"concept\")}\n options={conceptOptions}\n />\n\n {/* Emblem Image Generation (follows ImageUpload pattern) */}\n <fieldset className=\"fieldset\">\n <label className=\"label\">{t(\"aidol:creation.emblem\")}</label>\n <EmblemGenerator\n onGenerate={handleGenerateEmblem}\n isGenerating={isGeneratingImage}\n disabled={isLoading}\n />\n {profileImageUrl && (\n <div className=\"mt-2 flex justify-center\">\n <ImagePreview\n url={profileImageUrl}\n alt={t(\"aidol:creation.emblem\")}\n size=\"lg\"\n />\n </div>\n )}\n {errors.profileImageUrl?.message && (\n <p className=\"text-label-m text-error mt-1\">\n {t(errors.profileImageUrl.message, { ns: \"aidol\" })}\n </p>\n )}\n </fieldset>\n\n <button\n type=\"button\"\n onClick={handleStep1Next}\n disabled={!profileImageUrl}\n className=\"btn btn-primary w-full\"\n >\n {t(\"aidol:creation.next\")}\n </button>\n </div>\n )}\n\n {/* Step 2: Members */}\n {step === 2 && (\n <form onSubmit={handleStep2Submit} className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step2Title\")}\n </h2>\n\n {fields.map((field, index) => (\n <div\n key={field.id}\n className=\"border-base-300 space-y-4 rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-4\">\n <ImagePreview\n url={null}\n alt={members[index]?.name ?? \"\"}\n size=\"sm\"\n />\n <div className=\"flex-1\">\n <MemberNameInput\n {...register(`members.${index}.name`)}\n error={\n errors.members?.[index]?.name?.message\n ? t(errors.members?.[index]?.name?.message ?? \"\", {\n ns: \"aidol\",\n })\n : undefined\n }\n />\n </div>\n </div>\n <Controller\n name={`members.${index}.personality`}\n control={control}\n render={({ field: controllerField }) => (\n <PersonalitySelector\n value={controllerField.value ?? \"\"}\n onChange={controllerField.onChange}\n options={personalityOptions}\n />\n )}\n />\n <PromptInput\n {...register(`members.${index}.systemPrompt`)}\n charCount={members[index]?.systemPrompt?.length ?? 0}\n />\n </div>\n ))}\n\n <AddMemberButton onClick={handleAddMember} isLoading={false} />\n\n {errors.members?.root?.message && (\n <p className=\"text-error text-center\">\n {t(errors.members.root.message, { ns: \"aidol\" })}\n </p>\n )}\n\n <div className=\"flex gap-4\">\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className=\"btn btn-ghost flex-1\"\n disabled={isLoading}\n >\n {t(\"aidol:creation.back\")}\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary flex-1\"\n disabled={isLoading}\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.create\")\n )}\n </button>\n </div>\n </form>\n )}\n\n {/* Step 3: Complete */}\n {step === 3 && (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-display-l\">๐ŸŽ‰</div>\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.completeTitle\")}\n </h2>\n <p className=\"text-body-l text-base-content/70\">\n {t(\"aidol:creation.completeDescription\")}\n </p>\n <button onClick={onComplete} className=\"btn btn-primary w-full\">\n {t(\"aidol:creation.viewProfile\")}\n </button>\n </div>\n )}\n </div>\n </div>\n </main>\n );\n}\n","import * as React from \"react\";\nfunction SparklesIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z\",\n clipRule: \"evenodd\"\n }));\n}\nconst ForwardRef = React.forwardRef(SparklesIcon);\nexport default ForwardRef;","\"use client\";\n\nimport { SparklesIcon } from \"@heroicons/react/24/solid\";\nimport { motion, Variants } from \"framer-motion\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.2,\n },\n },\n};\n\n/**\n * Demo/feature section for AIdol landing page.\n */\nexport function DemoSection() {\n const { t } = useTranslation();\n\n return (\n <motion.section\n variants={staggerContainer}\n initial=\"initial\"\n whileInView=\"animate\"\n viewport={{ once: true, amount: 0.1 }}\n className=\"container mx-auto px-6 py-20 text-center md:py-28\"\n >\n <motion.div variants={fadeInUp}>\n <SparklesIcon className=\"text-secondary drop-shadow-[0_0_16px_theme(colors.secondary)] mx-auto size-24\" />\n </motion.div>\n <motion.h2\n variants={fadeInUp}\n className=\"text-display-s md:text-display-m mt-4\"\n >\n {t(\"aidol:landing.demo.title\")}\n </motion.h2>\n <motion.p\n variants={fadeInUp}\n className=\"text-body-l text-neutral-content mx-auto mt-4 max-w-lg\"\n >\n {t(\"aidol:landing.demo.description\")}\n </motion.p>\n </motion.section>\n );\n}\n","\"use client\";\n\nimport { motion, Variants } from \"framer-motion\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.2,\n },\n },\n};\n\ninterface HeroSectionProps {\n onGetStarted: () => void;\n}\n\n/**\n * Hero section for AIdol landing page.\n */\nexport function HeroSection({ onGetStarted }: HeroSectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"hero from-base-200 to-primary min-h-screen bg-gradient-to-b pt-20\">\n <motion.div\n variants={staggerContainer}\n initial=\"initial\"\n animate=\"animate\"\n className=\"hero-content text-base-content flex-col gap-12 text-center\"\n >\n <div className=\"max-w-3xl\">\n <motion.h1\n variants={fadeInUp}\n className=\"text-display-m md:text-display-l mb-4\"\n >\n {t(\"aidol:landing.hero.title\")}\n </motion.h1>\n <motion.p\n variants={fadeInUp}\n className=\"text-body-l text-neutral-content mx-auto mt-6 max-w-xl\"\n >\n {t(\"aidol:landing.hero.description\")}\n </motion.p>\n </div>\n <motion.div variants={fadeInUp}>\n <button\n onClick={onGetStarted}\n className=\"btn btn-primary font-semibold\"\n >\n {t(\"aidol:landing.hero.cta\")}\n </button>\n </motion.div>\n </motion.div>\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckIcon, ShareIcon } from \"@heroicons/react/24/outline\";\nimport { useCallback, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ShareButtonProps {\n url: string;\n onCopySuccess?: () => void;\n}\n\n/**\n * Share button that copies URL to clipboard.\n * Shows a check icon briefly after successful copy.\n */\nexport function ShareButton({ url, onCopySuccess }: ShareButtonProps) {\n const { t } = useTranslation();\n const [copied, setCopied] = useState(false);\n\n const handleShare = useCallback(async () => {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n onCopySuccess?.();\n setTimeout(() => setCopied(false), 2000);\n }, [url, onCopySuccess]);\n\n return (\n <button\n onClick={handleShare}\n className=\"btn btn-circle btn-ghost\"\n aria-label={t(\"aidol:share\")}\n >\n {copied ? (\n <CheckIcon className=\"text-success size-6\" />\n ) : (\n <ShareIcon className=\"size-6\" />\n )}\n </button>\n );\n}\n"],"names":["CheckIcon","title","titleId","props","svgRef","React","ForwardRef","PlusIcon","ShareIcon","UserGroupIcon","UserIcon","SIZE_CLASSES","ImagePreview","url","alt","size","sizeClass","jsx","Image","Card","companion","onClick","e","jsxs","CompanionGrid","companions","onCompanionClick","t","useTranslation","GroupHeader","aidol","AddMemberButton","isLoading","Fragment","PromptInput","forwardRef","placeholder","maxLength","charCount","ref","ConceptSelector","options","option","EmblemGenerator","onGenerate","isGenerating","disabled","prompt","setPrompt","useState","handleGenerate","handleKeyDown","n","r","s","a","u","c","f","o","i","clsx","GroupNameInput","error","MemberNameInput","PersonalitySelector","value","onChange","StepIndicator","currentStep","totalSteps","labels","_","index","stepNumber","isCompleted","isCurrent","CONCEPT_KEYS","PERSONALITY_KEYS","GroupCreation","onSubmit","onComplete","onGenerateImage","isGeneratingImage","step","setStep","conceptOptions","useMemo","key","personalityOptions","register","control","handleSubmit","trigger","watch","setValue","errors","useForm","zodResolver","groupCreationSchema","profileImageUrl","fields","append","useFieldArray","members","handleGenerateEmblem","imageUrl","handleStep1Next","handleStep2Submit","data","validMembers","m","handleAddMember","field","Controller","controllerField","SparklesIcon","fadeInUp","staggerContainer","DemoSection","motion","HeroSection","onGetStarted","ShareButton","onCopySuccess","copied","setCopied","handleShare","useCallback"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,13,14,20]}
1
+ {"version":3,"file":"client.cjs","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/@heroicons/react/24/outline/esm/CheckIcon.js","../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../node_modules/@heroicons/react/24/outline/esm/ShareIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserGroupIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserIcon.js","../src/components/companion/ImagePreview.tsx","../src/components/companion/Card.tsx","../src/components/aidol/CompanionGrid.tsx","../src/components/aidol/GroupHeader.tsx","../src/components/companion/AddMemberButton.tsx","../src/components/companion/PromptInput.tsx","../src/components/creation/ConceptSelector.tsx","../src/components/creation/EmblemGenerator.tsx","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/creation/GroupNameInput.tsx","../src/components/creation/MemberNameInput.tsx","../src/components/creation/PersonalitySelector.tsx","../src/components/creation/StepIndicator.tsx","../src/components/creation/GroupCreation.tsx","../node_modules/@heroicons/react/24/solid/esm/SparklesIcon.js","../src/components/landing/DemoSection.tsx","../src/components/landing/HeroSection.tsx","../src/components/ShareButton.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import * as React from \"react\";\nfunction CheckIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 12.75 6 6 9-13.5\"\n }));\n}\nconst ForwardRef = React.forwardRef(CheckIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 4.5v15m7.5-7.5h-15\"\n }));\n}\nconst ForwardRef = React.forwardRef(PlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ShareIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(ShareIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserGroupIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserGroupIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserIcon);\nexport default ForwardRef;","import { UserIcon } from \"@heroicons/react/24/outline\";\nimport clsx from \"clsx\";\nimport Image from \"next/image\";\n\ninterface ProfileProps {\n url?: string | null;\n alt: string;\n variant?: \"default\" | \"profile\";\n}\n\nconst SIZE_CLASSES = {\n default: \"size-profile\",\n profile: \"size-full\",\n};\n\n/**\n * Profile image component for companion.\n * Shows a placeholder when no image URL is provided.\n */\nexport function ImagePreview({ url, alt, variant = \"default\" }: ProfileProps) {\n return (\n <div\n className={clsx(\n \"border-base-300 bg-base-200 relative overflow-hidden rounded-lg border\",\n SIZE_CLASSES[variant],\n )}\n >\n {url ? (\n <Image src={url} alt={alt} fill className=\"size-full object-cover\" />\n ) : (\n <div className=\"flex size-full items-center justify-center\">\n <UserIcon className=\"text-base-content/50 size-1/2\" />\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Companion } from \"@/schemas\";\n\nimport { ImagePreview } from \"./ImagePreview\";\n\ntype CardVariant = \"grade\" | \"position\";\n\ninterface CardProps {\n companion: Companion;\n variant?: CardVariant;\n onClick?: () => void;\n}\n\nexport function Card({ companion, variant = \"grade\", onClick }: CardProps) {\n const { t } = useTranslation();\n const isSigned = companion.aidolId !== null;\n const isPosition = variant === \"position\";\n const isClickable = onClick && !isSigned;\n\n return (\n <div\n className={clsx(\n \"h-card max-w-card border-base-300 relative w-full overflow-hidden rounded-lg border\",\n isClickable && \"cursor-pointer\",\n )}\n onClick={isClickable ? onClick : undefined}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {/* 1. ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ */}\n <div className=\"absolute inset-0\">\n <ImagePreview\n url={companion.profilePictureUrl}\n alt={companion.name}\n variant=\"profile\"\n />\n </div>\n\n {/* 2. ๊ณ„์•ฝ ์™„๋ฃŒ ์‹œ ๋ธ”๋Ÿฌ */}\n {isSigned && (\n <div className=\"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm\" />\n )}\n\n {/* 3. ๋ธ”๋Ÿฌ ์œ„ ๊ณ„์•ฝ ์™„๋ฃŒ ๋ ˆ์ด์–ด */}\n {isSigned && (\n <div className=\"absolute top-4 left-4 z-20\">\n <span className=\"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1\">\n {t(\"companion.signed\")}\n </span>\n </div>\n )}\n\n {/* 4. ๊ธฐ์กด ํ•˜๋‹จ ๊ทธ๋ผ๋ฐ์ด์…˜ */}\n <div\n className={clsx(\n \"absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent\",\n isSigned && \"opacity-20\",\n isPosition && \"opacity-30\",\n !isSigned && !isPosition && \"opacity-60\",\n )}\n />\n\n {/* 5. ์ด๋ฆ„ + ๋“ฑ๊ธ‰ */}\n <div className=\"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2\">\n <span className=\"text-title-s text-white\">{companion.name}</span>\n\n {!isPosition && (\n <span className=\"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white\">\n {t(\"companion.grade\", { grade: companion.grade })}\n </span>\n )}\n {isPosition && (\n <span className=\"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1\">\n {companion.position}\n </span>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { Card } from \"@/components/companion/Card\";\nimport type { Companion } from \"@/schemas/companion\";\n\nexport interface CompanionGridProps {\n companions: Companion[] | undefined;\n onCompanionClick: (companionId: string) => void;\n}\n\n/**\n * Companion ์นด๋“œ ๊ทธ๋ฆฌ๋“œ (Presentational)\n * ๋ฉค๋ฒ„ ๋ชฉ๋ก ์ œ๋ชฉ, ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ, ๋นˆ ์ƒํƒœ ํ‘œ์‹œ\n */\nexport function CompanionGrid({\n companions,\n onCompanionClick,\n}: CompanionGridProps): JSX.Element {\n const { t } = useTranslation();\n\n return (\n <div className=\"mt-8\">\n <h2 className=\"text-title-l mb-4 font-semibold\">\n {t(\"aidol:aidol.members\")}\n </h2>\n {companions && companions.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {companions.map((companion) => (\n <Card\n key={companion.id}\n companion={companion}\n onClick={() => onCompanionClick(companion.id)}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-base-content/50 text-center\">\n {t(\"aidol:aidol.noMembers\")}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { UserGroupIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\n\nimport type { AIdol } from \"../../schemas\";\n\ninterface GroupHeaderProps {\n aidol: AIdol;\n}\n\n/**\n * Header component for AIdol group profile page.\n * Displays group image, name, and concept.\n */\nexport function GroupHeader({ aidol }: GroupHeaderProps) {\n return (\n <div className=\"flex flex-col items-center gap-4 py-8 text-center\">\n <div className=\"bg-base-200 relative size-32 overflow-hidden rounded-full\">\n {aidol.profileImageUrl ? (\n <Image\n src={aidol.profileImageUrl}\n alt={aidol.name}\n fill\n className=\"object-cover\"\n />\n ) : (\n <div className=\"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br\">\n <UserGroupIcon className=\"text-base-content/50 size-16\" />\n </div>\n )}\n </div>\n <div>\n <h1 className=\"text-display-s text-base-content font-bold\">\n {aidol.name}\n </h1>\n {aidol.concept && (\n <p className=\"text-body-l text-base-content/70 mt-2\">\n {aidol.concept}\n </p>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { PlusIcon } from \"@heroicons/react/24/outline\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface AddMemberButtonProps {\n onClick: () => void;\n isLoading?: boolean;\n}\n\n/**\n * Button for adding a new companion member.\n */\nexport function AddMemberButton({ onClick, isLoading }: AddMemberButtonProps) {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={onClick}\n disabled={isLoading}\n className=\"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48\"\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n <>\n <PlusIcon className=\"size-5\" />\n {t(\"aidol:companion.addMember\")}\n </>\n )}\n </button>\n );\n}\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PromptInputProps {\n placeholder?: string;\n maxLength?: number;\n charCount?: number;\n}\n\n/**\n * Textarea for entering companion system prompt or personality description.\n * Supports react-hook-form register() via forwardRef.\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n ({ placeholder, maxLength = 500, charCount, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"w-full\">\n <textarea\n ref={ref}\n placeholder={placeholder ?? t(\"aidol:companion.promptPlaceholder\")}\n maxLength={maxLength}\n className=\"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden\"\n {...props}\n />\n <div className=\"text-label-s text-base-content/50 mt-1 text-right\">\n {charCount ?? 0}/{maxLength}\n </div>\n </div>\n );\n },\n);\n\nPromptInput.displayName = \"PromptInput\";\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ConceptOption {\n value: string;\n label: string;\n}\n\ninterface ConceptSelectorProps {\n options: ConceptOption[];\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\n/**\n * Dropdown selector for AIdol group concept.\n * Supports react-hook-form via forwardRef.\n */\nexport const ConceptSelector = forwardRef<\n HTMLSelectElement,\n ConceptSelectorProps\n>(({ options, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.concept\")}</label>\n <select\n ref={ref}\n className=\"select bg-base-100 text-base-content w-full\"\n {...props}\n >\n <option value=\"\">{t(\"aidol:creation.selectConcept\")}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </fieldset>\n );\n});\n\nConceptSelector.displayName = \"ConceptSelector\";\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface EmblemGeneratorProps {\n onGenerate: (prompt: string) => void;\n isGenerating: boolean;\n disabled?: boolean;\n}\n\n/**\n * Emblem image generation input (Presentational)\n * Follows ImageUpload pattern: input + loading state only\n * Preview is handled by parent component\n */\nexport function EmblemGenerator({\n onGenerate,\n isGenerating,\n disabled,\n}: EmblemGeneratorProps) {\n const { t } = useTranslation();\n const [prompt, setPrompt] = useState(\"\");\n\n const handleGenerate = () => {\n if (prompt.trim()) {\n onGenerate(prompt);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && prompt.trim() && !isGenerating && !disabled) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n return (\n <fieldset className=\"fieldset w-full\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={t(\"aidol:creation.emblemPromptPlaceholder\")}\n maxLength={200}\n className=\"input flex-1\"\n disabled={disabled || isGenerating}\n data-testid=\"emblem-prompt-input\"\n />\n <button\n type=\"button\"\n onClick={handleGenerate}\n disabled={disabled || isGenerating || !prompt.trim()}\n className=\"btn btn-secondary\"\n data-testid=\"emblem-generate-button\"\n >\n {isGenerating ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.generate\")\n )}\n </button>\n </div>\n {isGenerating && (\n <div className=\"mt-2\">\n <progress className=\"progress w-full\"></progress>\n </div>\n )}\n </fieldset>\n );\n}\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface GroupNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for AIdol group name.\n * Supports react-hook-form via forwardRef.\n */\nexport const GroupNameInput = forwardRef<HTMLInputElement, GroupNameInputProps>(\n ({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.groupName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.groupNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n },\n);\n\nGroupNameInput.displayName = \"GroupNameInput\";\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface MemberNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for companion member name.\n * Supports react-hook-form via forwardRef.\n */\nexport const MemberNameInput = forwardRef<\n HTMLInputElement,\n MemberNameInputProps\n>(({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.memberName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.memberNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n});\n\nMemberNameInput.displayName = \"MemberNameInput\";\n","\"use client\";\n\nimport clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PersonalityOption {\n value: string;\n label: string;\n description?: string;\n}\n\ninterface PersonalitySelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: PersonalityOption[];\n}\n\n/**\n * Radio group selector for companion personality.\n */\nexport function PersonalitySelector({\n value,\n onChange,\n options,\n}: PersonalitySelectorProps) {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.personality\")}</label>\n <div className=\"space-y-2\">\n {options.map((option) => (\n <label\n key={option.value}\n className={clsx(\n \"flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors\",\n value === option.value\n ? \"border-primary bg-primary/10\"\n : \"border-base-300 hover:border-base-content/30\",\n )}\n >\n <input\n type=\"radio\"\n name=\"personality\"\n value={option.value}\n checked={value === option.value}\n onChange={(e) => onChange(e.target.value)}\n className=\"radio-primary radio mt-0.5\"\n />\n <div>\n <div className=\"text-base-content font-medium\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-body-s text-base-content/70 mt-1\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport clsx from \"clsx\";\n\ninterface StepIndicatorProps {\n currentStep: number;\n totalSteps: number;\n labels?: string[];\n}\n\n/**\n * Step indicator for multi-step creation flow.\n * Uses DaisyUI steps component.\n */\nexport function StepIndicator({\n currentStep,\n totalSteps,\n labels,\n}: StepIndicatorProps) {\n return (\n <ul className=\"steps w-full\">\n {Array.from({ length: totalSteps }, (_, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n\n return (\n <li\n key={stepNumber}\n className={clsx(\n \"step\",\n (isCompleted || isCurrent) && \"step-primary\",\n )}\n >\n {labels?.[index] ?? \"\"}\n </li>\n );\n })}\n </ul>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { AddMemberButton } from \"@/components/companion/AddMemberButton\";\nimport { ImagePreview } from \"@/components/companion/ImagePreview\";\nimport { PromptInput } from \"@/components/companion/PromptInput\";\nimport { ConceptSelector } from \"@/components/creation/ConceptSelector\";\nimport { EmblemGenerator } from \"@/components/creation/EmblemGenerator\";\nimport { GroupNameInput } from \"@/components/creation/GroupNameInput\";\nimport { MemberNameInput } from \"@/components/creation/MemberNameInput\";\nimport { PersonalitySelector } from \"@/components/creation/PersonalitySelector\";\nimport { StepIndicator } from \"@/components/creation/StepIndicator\";\nimport {\n groupCreationSchema,\n type GroupCreationFormData,\n} from \"@/schemas/aidol\";\n\nexport type { GroupCreationFormData };\n\nexport interface GroupCreationProps {\n onSubmit: (data: GroupCreationFormData) => Promise<void>;\n onComplete: () => void;\n onGenerateImage: (prompt: string) => Promise<string | null>;\n isLoading: boolean;\n isGeneratingImage: boolean;\n isCompleted: boolean;\n}\n\nconst CONCEPT_KEYS = [\"cute\", \"cool\", \"elegant\", \"powerful\"] as const;\nconst PERSONALITY_KEYS = [\"cheerful\", \"cool\", \"tsundere\", \"gentle\"] as const;\n\n/**\n * AIdol ๊ทธ๋ฃน ์ƒ์„ฑ ๋ฉ€ํ‹ฐ์Šคํ… ํผ (Presentational)\n * react-hook-form + zod validation\n */\nexport function GroupCreation({\n onSubmit,\n onComplete,\n onGenerateImage,\n isLoading,\n isGeneratingImage,\n isCompleted,\n}: GroupCreationProps): JSX.Element {\n const { t } = useTranslation();\n const [step, setStep] = useState(isCompleted ? 3 : 1);\n\n const conceptOptions = useMemo(\n () =>\n CONCEPT_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.concepts.${key}`),\n })),\n [t],\n );\n\n const personalityOptions = useMemo(\n () =>\n PERSONALITY_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.personalities.${key}.label`),\n description: t(`aidol:creation.personalities.${key}.description`),\n })),\n [t],\n );\n\n const {\n register,\n control,\n handleSubmit,\n trigger,\n watch,\n setValue,\n formState: { errors },\n } = useForm<GroupCreationFormData>({\n resolver: zodResolver(groupCreationSchema),\n defaultValues: {\n groupName: \"\",\n concept: \"\",\n profileImageUrl: \"\",\n members: [{ name: \"\", personality: \"\", systemPrompt: \"\" }],\n },\n });\n\n const profileImageUrl = watch(\"profileImageUrl\");\n\n const { fields, append } = useFieldArray({\n control,\n name: \"members\",\n });\n\n const members = watch(\"members\");\n\n const handleGenerateEmblem = async (prompt: string) => {\n const imageUrl = await onGenerateImage(prompt);\n if (imageUrl) {\n setValue(\"profileImageUrl\", imageUrl);\n }\n };\n\n const handleStep1Next = async () => {\n const isValid = await trigger([\"groupName\", \"profileImageUrl\"]);\n if (isValid) {\n setStep(2);\n }\n };\n\n const handleStep2Submit = handleSubmit(async (data) => {\n // Filter out empty members before submit\n const validMembers = data.members.filter((m) => m.name.trim());\n await onSubmit({ ...data, members: validMembers });\n setStep(3);\n });\n\n const handleAddMember = () => {\n append({ name: \"\", personality: \"\", systemPrompt: \"\" });\n };\n\n return (\n <main className=\"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20\">\n <div className=\"w-full max-w-lg\">\n <StepIndicator\n currentStep={step}\n totalSteps={3}\n labels={[\n t(\"aidol:creation.step1\"),\n t(\"aidol:creation.step2\"),\n t(\"aidol:creation.step3\"),\n ]}\n />\n\n <div className=\"mt-8\">\n {/* Step 1: Group Info */}\n {step === 1 && (\n <div className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step1Title\")}\n </h2>\n <GroupNameInput\n {...register(\"groupName\")}\n error={\n errors.groupName?.message\n ? t(errors.groupName.message, { ns: \"aidol\" })\n : undefined\n }\n />\n <ConceptSelector\n {...register(\"concept\")}\n options={conceptOptions}\n />\n\n {/* Emblem Image Generation (follows ImageUpload pattern) */}\n <fieldset className=\"fieldset\">\n <label className=\"label\">{t(\"aidol:creation.emblem\")}</label>\n <EmblemGenerator\n onGenerate={handleGenerateEmblem}\n isGenerating={isGeneratingImage}\n disabled={isLoading}\n />\n {profileImageUrl && (\n <div className=\"mt-2 flex justify-center\">\n <ImagePreview\n url={profileImageUrl}\n alt={t(\"aidol:creation.emblem\")}\n />\n </div>\n )}\n {errors.profileImageUrl?.message && (\n <p className=\"text-label-m text-error mt-1\">\n {t(errors.profileImageUrl.message, { ns: \"aidol\" })}\n </p>\n )}\n </fieldset>\n\n <button\n type=\"button\"\n onClick={handleStep1Next}\n disabled={!profileImageUrl}\n className=\"btn btn-primary w-full\"\n >\n {t(\"aidol:creation.next\")}\n </button>\n </div>\n )}\n\n {/* Step 2: Members */}\n {step === 2 && (\n <form onSubmit={handleStep2Submit} className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step2Title\")}\n </h2>\n\n {fields.map((field, index) => (\n <div\n key={field.id}\n className=\"border-base-300 space-y-4 rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-4\">\n <ImagePreview url={null} alt={members[index]?.name ?? \"\"} />\n <div className=\"flex-1\">\n <MemberNameInput\n {...register(`members.${index}.name`)}\n error={\n errors.members?.[index]?.name?.message\n ? t(errors.members?.[index]?.name?.message ?? \"\", {\n ns: \"aidol\",\n })\n : undefined\n }\n />\n </div>\n </div>\n <Controller\n name={`members.${index}.personality`}\n control={control}\n render={({ field: controllerField }) => (\n <PersonalitySelector\n value={controllerField.value ?? \"\"}\n onChange={controllerField.onChange}\n options={personalityOptions}\n />\n )}\n />\n <PromptInput\n {...register(`members.${index}.systemPrompt`)}\n charCount={members[index]?.systemPrompt?.length ?? 0}\n />\n </div>\n ))}\n\n <AddMemberButton onClick={handleAddMember} isLoading={false} />\n\n {errors.members?.root?.message && (\n <p className=\"text-error text-center\">\n {t(errors.members.root.message, { ns: \"aidol\" })}\n </p>\n )}\n\n <div className=\"flex gap-4\">\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className=\"btn btn-ghost flex-1\"\n disabled={isLoading}\n >\n {t(\"aidol:creation.back\")}\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary flex-1\"\n disabled={isLoading}\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.create\")\n )}\n </button>\n </div>\n </form>\n )}\n\n {/* Step 3: Complete */}\n {step === 3 && (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-display-l\">๐ŸŽ‰</div>\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.completeTitle\")}\n </h2>\n <p className=\"text-body-l text-base-content/70\">\n {t(\"aidol:creation.completeDescription\")}\n </p>\n <button onClick={onComplete} className=\"btn btn-primary w-full\">\n {t(\"aidol:creation.viewProfile\")}\n </button>\n </div>\n )}\n </div>\n </div>\n </main>\n );\n}\n","import * as React from \"react\";\nfunction SparklesIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z\",\n clipRule: \"evenodd\"\n }));\n}\nconst ForwardRef = React.forwardRef(SparklesIcon);\nexport default ForwardRef;","\"use client\";\n\nimport { SparklesIcon } from \"@heroicons/react/24/solid\";\nimport { motion, Variants } from \"framer-motion\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.2,\n },\n },\n};\n\n/**\n * Demo/feature section for AIdol landing page.\n */\nexport function DemoSection() {\n const { t } = useTranslation();\n\n return (\n <motion.section\n variants={staggerContainer}\n initial=\"initial\"\n whileInView=\"animate\"\n viewport={{ once: true, amount: 0.1 }}\n className=\"container mx-auto px-6 py-20 text-center md:py-28\"\n >\n <motion.div variants={fadeInUp}>\n <SparklesIcon className=\"text-secondary drop-shadow-[0_0_16px_theme(colors.secondary)] mx-auto size-24\" />\n </motion.div>\n <motion.h2\n variants={fadeInUp}\n className=\"text-display-s md:text-display-m mt-4\"\n >\n {t(\"aidol:landing.demo.title\")}\n </motion.h2>\n <motion.p\n variants={fadeInUp}\n className=\"text-body-l text-neutral-content mx-auto mt-4 max-w-lg\"\n >\n {t(\"aidol:landing.demo.description\")}\n </motion.p>\n </motion.section>\n );\n}\n","\"use client\";\n\nimport { motion, Variants } from \"framer-motion\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.2,\n },\n },\n};\n\ninterface HeroSectionProps {\n onGetStarted: () => void;\n}\n\n/**\n * Hero section for AIdol landing page.\n */\nexport function HeroSection({ onGetStarted }: HeroSectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"hero from-base-200 to-primary min-h-screen bg-gradient-to-b pt-20\">\n <motion.div\n variants={staggerContainer}\n initial=\"initial\"\n animate=\"animate\"\n className=\"hero-content text-base-content flex-col gap-12 text-center\"\n >\n <div className=\"max-w-3xl\">\n <motion.h1\n variants={fadeInUp}\n className=\"text-display-m md:text-display-l mb-4\"\n >\n {t(\"aidol:landing.hero.title\")}\n </motion.h1>\n <motion.p\n variants={fadeInUp}\n className=\"text-body-l text-neutral-content mx-auto mt-6 max-w-xl\"\n >\n {t(\"aidol:landing.hero.description\")}\n </motion.p>\n </div>\n <motion.div variants={fadeInUp}>\n <button\n onClick={onGetStarted}\n className=\"btn btn-primary font-semibold\"\n >\n {t(\"aidol:landing.hero.cta\")}\n </button>\n </motion.div>\n </motion.div>\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckIcon, ShareIcon } from \"@heroicons/react/24/outline\";\nimport { useCallback, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ShareButtonProps {\n url: string;\n onCopySuccess?: () => void;\n}\n\n/**\n * Share button that copies URL to clipboard.\n * Shows a check icon briefly after successful copy.\n */\nexport function ShareButton({ url, onCopySuccess }: ShareButtonProps) {\n const { t } = useTranslation();\n const [copied, setCopied] = useState(false);\n\n const handleShare = useCallback(async () => {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n onCopySuccess?.();\n setTimeout(() => setCopied(false), 2000);\n }, [url, onCopySuccess]);\n\n return (\n <button\n onClick={handleShare}\n className=\"btn btn-circle btn-ghost\"\n aria-label={t(\"aidol:share\")}\n >\n {copied ? (\n <CheckIcon className=\"text-success size-6\" />\n ) : (\n <ShareIcon className=\"size-6\" />\n )}\n </button>\n );\n}\n"],"names":["r","e","t","f","n","o","clsx","CheckIcon","title","titleId","props","svgRef","React","ForwardRef","PlusIcon","ShareIcon","UserGroupIcon","UserIcon","SIZE_CLASSES","ImagePreview","url","alt","variant","jsx","Image","Card","companion","onClick","useTranslation","isSigned","isPosition","isClickable","jsxs","CompanionGrid","companions","onCompanionClick","GroupHeader","aidol","AddMemberButton","isLoading","Fragment","PromptInput","forwardRef","placeholder","maxLength","charCount","ref","ConceptSelector","options","option","EmblemGenerator","onGenerate","isGenerating","disabled","prompt","setPrompt","useState","handleGenerate","handleKeyDown","s","i","a","u","c","GroupNameInput","error","MemberNameInput","PersonalitySelector","value","onChange","StepIndicator","currentStep","totalSteps","labels","_","index","stepNumber","isCompleted","isCurrent","CONCEPT_KEYS","PERSONALITY_KEYS","GroupCreation","onSubmit","onComplete","onGenerateImage","isGeneratingImage","step","setStep","conceptOptions","useMemo","key","personalityOptions","register","control","handleSubmit","trigger","watch","setValue","errors","useForm","zodResolver","groupCreationSchema","profileImageUrl","fields","append","useFieldArray","members","handleGenerateEmblem","imageUrl","handleStep1Next","handleStep2Submit","data","validMembers","m","handleAddMember","field","Controller","controllerField","SparklesIcon","fadeInUp","staggerContainer","DemoSection","motion","HeroSection","onGetStarted","ShareButton","onCopySuccess","copied","setCopied","handleShare","useCallback"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,14,20]}