PageSourceSearch

https://socialnarratives.ai/assets/CreateStoryRoute-2rVqaVex.js

js socialnarratives.ai collected 2026-10-05 15:08:23 UTC 109,826 bytes, 6 lines download raw bytes

1import{j as s,T as br,al as Gs,F as $a,B as Jt,V as za,am as Xt,J as Ua,l as qa,P as Ga,d as Ha,I as zt,c as Wa}from"./ui-vendor-XNsX7NFl.js";import{a as g,u as pe,T as Hs,R as U}from"./i18n-BCZ_8xSB.js";import{d as ot,m as yr,n as it,o as vr,p as kr,q as Qa,M as le,t as Va,v as Fe,w as Ka,x as Zt,y as Ya,z as Ja,D as Xa,E as Za,F as Ws,G as Qs,H as en,e as wr,I as tn,B as sn,u as jr,J as rn,K as an,T as nn,N as on,O as ln,S as cn,Q as Vs,R as dn,V as Ks,X as un,Y as mn,Z as Sr,_ as gn}from"./index-Dg7geK91.js";import{q as Ys,f as Js,h as Xs,j as pn}from"./firebase-db-Csu2kn54.js";import{n as lt,b as fn,s as Nr}from"./softToast-QI7-xv9r.js";import{g as Ut}from"./templateLocalization-ywEWuNch.js";import{g as hn}from"./storyUtils-BbI5tRcI.js";import{g as Ir,V as xn,c as bn,l as yn,A as vn,i as kn,a as Dt,Q as wn,b as jn,d as Sn,e as Nn,p as In}from"./AvatarStudio-CeK00hIX.js";import{e as Cn,d as Cr,c as Rn,C as Mt}from"./creditErrors-CoJqQJBl.js";import{D as ze}from"./aiModels-qXgPnQ3X.js";import{C as An}from"./CreditCost-LMZ_7bRy.js";import{N as Rr,g as Pn,a as Ar,b as Pr,c as Tn}from"./geminiService-uPfLUin3.js";import{s as En}from"./avatarSaveService-BSXUbUzq.js";import Ln from"./CreditBalanceChip-BRCCEIPJ.js";import{S as On}from"./StateHeading-D9MlYpnP.js";import{u as _n}from"./usePlatform-jw2ahvaa.js";import{h as Dn}from"./packAvailability-CbMDVbWF.js";import{L as ct,u as Tr,b as Er}from"./react-router-oAHNt2ka.js";import{u as Mn}from"./useStickyActionBar-BD2H8ZW2.js";import{r as es,s as Lr,b as Fn,g as Zs,a as Bn,c as qt,d as $n,C as zn,e as Un}from"./imageReferenceUtils-cPXJj7xD.js";import{n as er,i as qn,a as Gn}from"./entityIdentity-BGu25qW4.js";import"./firebase-auth-BWbhO1CC.js";import"./capacitor-DQeCf45c.js";import"./stripeConfig-X3dkQhO0.js";function Hn(e){const[t,r]=g.useState(!1),a=g.useRef(null);return g.useEffect(()=>{if(!e)return;const n=typeof navigator<"u"?navigator.wakeLock:void 0;if(!n||typeof n.request!="function")return;let i=!1;const d=()=>!!a.current&&!a.current.released,o=async()=>{if(!(i||d()))try{const p=await n.request("screen");if(i){p?.release?.().catch?.(()=>{});return}a.current=p,r(!0)}catch{}},c=()=>{document.visibilityState==="visible"&&o()};return o(),document.addEventListener("visibilitychange",c),()=>{i=!0,document.removeEventListener("visibilitychange",c);const p=a.current;if(a.current=null,p&&!p.released)try{p.release?.()?.catch?.(()=>{})}catch{}r(!1)}},[e]),e&&t}const Wn="Translations for the English text of story templates (Firestore `templates`), used when a template has no text of its own in the reader's language. Keys are the English text as stored; matching ignores case, spacing and apostrophe style. Shared by functions/data/storyTemplateText.js and src/data/storyTemplateText.js.",Qn={"A Trip to the Dentist":{es:"Una visita al dentista",fr:"Une visite chez le dentiste",pt:"Uma visita ao dentista",zh:"去看牙医"},"Visiting the Doctor":{es:"Una visita al médico",fr:"Une visite chez le médecin",pt:"Uma visita ao médico",zh:"去看医生"},"Getting a Haircut":{es:"Cortarse el pelo",fr:"Se faire couper les cheveux",pt:"Cortar o cabelo",zh:"去理发"},"First Day of School":{es:"El primer día de escuela",fr:"Le premier jour d’école",pt:"O primeiro dia de aula",zh:"上学第一天"},"Using the Potty":{es:"Usar la bacinica",fr:"Aller sur le pot",pt:"Usar o penico",zh:"学用小马桶"},"A New Baby Is Coming":{es:"Va a llegar un bebé",fr:"Un bébé va arriver",pt:"Vai chegar um bebê",zh:"家里要来小宝宝了"},"Moving to a New Home":{es:"Mudarse a una casa nueva",fr:"Déménager dans une nouvelle maison",pt:"Mudar para uma casa nova",zh:"搬新家"},"Having a Playdate":{es:"Jugar con un amigo en casa",fr:"Inviter un ami à jouer",pt:"Brincar com um amigo em casa",zh:"和朋友约着玩"},"When I Feel Angry":{es:"Cuando siento enojo",fr:"Quand je suis en colère",pt:"Quando eu sinto raiva",zh:"当我生气的时候"},"Fire Drill at School":{es:"Simulacro de incendio en la escuela",fr:"L’exercice d’incendie à l’école",pt:"Simulado de incêndio na escola",zh:"学校的消防演习"},"Flying on an Airplane":{es:"Viajar en avión",fr:"Prendre l’avion",pt:"Andar de avião",zh:"坐飞机"},"Going to a Birthday Party":{es:"Ir a una fiesta de cumpleaños",fr:"Aller à une fête d’anniversaire",pt:"Ir a uma festa de aniversário",zh:"去参加生日会"},"New Baby":{es:"Un bebé nuevo",fr:"Un nouveau bébé",pt:"Um bebê novo",zh:"新宝宝"},Bedtime:{es:"La hora de dormir",fr:"L’heure du coucher",pt:"Hora de dormir",zh:"睡觉时间"},Dentist:{es:"El dentista",fr:"Le dentiste",pt:"O dentista",zh:"看牙医"},"Doctor Visit":{es:"Una visita al médico",fr:"Une visite chez le médecin",pt:"Uma visita ao médico",zh:"去看医生"},Doctor:{es:"El médico",fr:"Le médecin",pt:"O médico",zh:"看医生"},"Staying Calm":{es:"Mantener la calma",fr:"Rester calme",pt:"Manter a calma",zh:"保持平静"},Emotions:{es:"Las emociones",fr:"Les émotions",pt:"As emoções",zh:"情绪"},"Fire Drill":{es:"Simulacro de incendio",fr:"L’exercice d’incendie",pt:"Simulado de incêndio",zh:"消防演习"},"Gentle Hands":{es:"Manos suaves",fr:"Des mains douces",pt:"Mãos gentis",zh:"温柔的小手"},Haircut:{es:"El corte de pelo",fr:"La coupe de cheveux",pt:"O corte de cabelo",zh:"理发"},"Trying Foods":{es:"Probar comidas nuevas",fr:"Goûter de nouveaux aliments",pt:"Provar c
1omidas novas",zh:"尝试新食物"},"Picky Eater":{es:"Probar comidas nuevas",fr:"Goûter de nouveaux aliments",pt:"Provar comidas novas",zh:"尝试新食物"},"Potty Training":{es:"Aprender a usar el baño",fr:"Apprendre à aller sur le pot",pt:"Aprender a usar o penico",zh:"学习如厕"},"School Drop-off":{es:"La llegada a la escuela",fr:"L’arrivée à l’école",pt:"A chegada na escola",zh:"送我去学校"},School:{es:"La escuela",fr:"L’école",pt:"A escola",zh:"上学"},"Asking to Play":{es:"Pedir para jugar",fr:"Demander à jouer",pt:"Pedir para brincar",zh:"请别人一起玩"},"Losing a Game":{es:"Perder un juego",fr:"Perdre à un jeu",pt:"Perder um jogo",zh:"输了游戏"},"I Am a Big Sibling":{es:"Soy hermano mayor o hermana mayor",fr:"Je suis grand frère ou grande sœur",pt:"Sou irmão mais velho ou irmã mais velha",zh:"我当哥哥姐姐了"},"Time for Bed":{es:"Es hora de dormir",fr:"C’est l’heure de dormir",pt:"Hora de dormir",zh:"该睡觉了"},"I Go to the Dentist":{es:"Voy al dentista",fr:"Je vais chez le dentiste",pt:"Eu vou ao dentista",zh:"我去看牙医"},"My Healthy Checkup":{es:"Mi revisión médica",fr:"Ma visite de contrôle",pt:"Minha consulta de rotina",zh:"我的健康检查"},"I Can Stay Calm":{es:"Puedo mantener la calma",fr:"Je peux rester calme",pt:"Eu consigo manter a calma",zh:"我可以保持平静"},"The Fire Drill":{es:"El simulacro de incendio",fr:"L’exercice d’incendie",pt:"O simulado de incêndio",zh:"消防演习"},"I Use Gentle Hands":{es:"Uso manos suaves",fr:"J’ai des mains douces",pt:"Eu uso mãos gentis",zh:"我用温柔的小手"},"My Haircut":{es:"Mi corte de pelo",fr:"Ma coupe de cheveux",pt:"Meu corte de cabelo",zh:"我去理发"},"I Can Try New Foods":{es:"Puedo probar comidas nuevas",fr:"Je peux goûter de nouveaux aliments",pt:"Eu posso provar comidas novas",zh:"我可以尝试新食物"},"I Can Use the Potty":{es:"Puedo usar la bacinica",fr:"Je peux aller sur le pot",pt:"Eu consigo usar o penico",zh:"我会用小马桶"},"I Go to School":{es:"Voy a la escuela",fr:"Je vais à l’école",pt:"Eu vou para a escola",zh:"我去上学"},"It Is Okay to Lose":{es:"Está bien perder",fr:"Ce n’est pas grave de perdre",pt:"Tudo bem perder",zh:"输了也没关系"}},Vn={"A gentle story to prepare for a dental checkup.":{es:"Una historia tranquila para prepararse para una revisión dental.",fr:"Une histoire douce pour se préparer à un contrôle chez le dentiste.",pt:"Uma história tranquila para se preparar para uma consulta no dentista.",zh:"一个温和的故事,帮孩子为检查牙齿做好准备。"},"Going to the dentist for a checkup. Being brave, sitting in the chair, and opening wide.":{es:"Ir al dentista para una revisión. Ser valiente, sentarse en el sillón y abrir bien la boca.",fr:"Aller chez le dentiste pour un contrôle. Être courageux, s’asseoir dans le fauteuil et ouvrir grand la bouche.",pt:"Ir ao dentista para uma consulta. Ter coragem, sentar na cadeira e abrir bem a boca.",zh:"去看牙医做检查。勇敢地坐上椅子,把嘴张大。"},"What happens at a check-up, from the scale to the stethoscope.":{es:"Lo que pasa en una revisión médica, de la báscula al estetoscopio.",fr:"Ce qui se passe pendant une visite médicale, de la balance au stéthoscope.",pt:"O que acontece em uma consulta, da balança ao estetoscópio.",zh:"体检时会发生什么,从称体重到听诊器。"},"Capes, clippers and the mirror at the end.":{es:"La capa, la máquina de cortar y el espejo al final.",fr:"La cape, la tondeuse et le miroir à la fin.",pt:"A capa, a maquininha e o espelho no final.",zh:"围布、理发推子,最后照照镜子。"},"Meeting the teacher, finding a cubby and circle time.":{es:"Conocer al maestro, encontrar su casillero y la hora del círculo.",fr:"Rencontrer l’enseignant, trouver son casier et le moment du regroupement.",pt:"Conhecer o professor, achar o escaninho e a roda de conversa.",zh:"认识老师、找到自己的储物格,还有围圈时间。"},"Step-by-step potty routine with lots of praise.":{es:"La rutina de la bacinica paso a paso, con muchos elogios.",fr:"La routine du pot étape par étape, avec beaucoup d’encouragements.",pt:"A rotina do penico passo a passo, com muitos elogios.",zh:"一步一步学用小马桶,还有很多表扬。"},"Getting ready to become a big brother or sister.":{es:"Prepararse para ser hermano mayor o hermana mayor.",fr:"Se préparer à devenir grand frère ou grande sœur.",pt:"Preparar-se para ser irmão mais velho ou irmã mais velha.",zh:"准备当哥哥或姐姐。"},"Packing boxes and choosing a new bedroom.":{es:"Empacar cajas y elegir una habitación nueva.",fr:"Faire les cartons et choisir sa nouvelle chambre.",pt:"Encaixotar as coisas e escolher um quarto novo.",zh:"打包箱子,挑选新卧室。"},"Taking turns and saying goodbye to a friend.":{es:"Tomar turnos y despedirse de un amigo.",fr:"Jouer chacun son tour et dire au revoir à un ami.",pt:"Revezar e se despedir de um amigo.",zh:"轮流玩,然后和朋友说再见。"},"Noticing big feelings and choosing a calm tool.":{es:"Notar las emociones fuertes y elegir algo que ayude a calmarse.",fr:"Remarquer les grandes émotions et choisir un outil pour se calmer.",pt:"Perceber os sentimentos fortes e escolher algo que ajude a se acalmar.",zh:"留意强烈的情绪,选一个让自己平静下来的方法。"},"Loud alarms, lining up and walking outside together.":{es:"Alarmas fuertes, hacer fila y salir caminando juntos.",fr:"Les alarmes fortes, se mettre en rang et sortir ensemble.",pt:"Alarmes altos, fazer fila e sair andando juntos.",zh:"响亮的警报,排好队,一起走到外面。"},"Security lines, seat belts and ear popping.":{es:"La fila de seguridad, el cinturón y los oídos tapados.",fr:"Le contrôle de sécurité, la ceinture et les oreilles qui se bouchent.",pt:"A fila da segurança, o cinto e o ouvido tapado.",zh:"安检排队、系好安全带,还有耳朵发闷。"},"Singing, candles and waiting for cake.":{es:"Cantar, las velas y esperar el pastel.",fr:"Les chansons, les bougies et l’attente du gâteau.",pt:"Cantar, as velinhas e esperar o bolo.",zh:"唱歌、吹蜡烛,还有等着吃蛋糕。"}},Kn={"Who is the child?":{es:"¿Quién es el niño?",fr:"Qui est l’enfant ?",pt:"Quem é a criança?",zh:"孩子是谁?"},"Who is going with them?":{es:"¿Quién lo acompaña?",fr:"Qui l’accompagne ?",pt:"Quem vai junto?",zh:"谁陪孩子一起去?"},"Who is the dentist?":{es:"¿Quién es el dentista?",fr:"Qui est le dentiste ?",pt:"Quem é o dentista?",zh:"牙医是谁?"},"Who is the doctor?":{es:"¿Quién es el médico?",fr:"Qui est le médecin ?",pt:"Quem é o médico?",zh:"医生是谁?"},"Who is the teacher?":{es:"¿Quién es el maestro?",fr:"Qui est l’enseignant ?",pt:"Quem é o professor?",zh:"老师是谁?"},"Who is visiting the dentist?":{es:"¿Quién va al dentista?",fr:"Qui va chez le dentiste ?",pt:"Quem vai ao dentista?",zh:"谁去看牙医?"},"Optional Helper (Hygienist)":{es:"Ayudante opcional (higienista)",fr:"Assistant facultatif (hygiéniste)",pt:"Ajudante opcional (higienista)",zh:"可选的助手(洁牙师)"}},Yn={_about:Wn,titles:Qn,descriptions:Vn,roleLabels:Kn},Or=Object.freeze({title:"titles",description:"descriptions",roleLabel:"roleLabels"}),_r=e=>String(e||"").replace(/[‘’]/g,"'").replace(/\s+/g," ").trim().toLowerCase();let Ft=null;const Jn=()=>(Ft||(Ft=Object.fromEntries(Object.values(Or).map(e=>[e,new Map(Object.entries(Yn[e]||{}).map(([t,r])=>[_r(t),r]))]))),Ft);function Xn(e,t,r){const a=Or[e];
1if(!a||!t||!r||r==="en")return"";const i=Jn()[a].get(_r(t))?.[r];return typeof i=="string"?i:""}const tt="en";function st(e,t=tt,r="title"){const a=String(t||tt).toLowerCase().split("-")[0];if(e&&typeof e=="object"&&typeof e[a]=="string"&&e[a].trim())return e[a];if(a!==tt){const n=Xn(r,Ut(e,tt),a);if(n)return n}return Ut(e,a)}const Zn=Object.freeze({complex:["standard","simple"],standard:["simple"],simple:[]}),eo=e=>(Array.isArray(e)?e:[]).filter(t=>t?.imageUrl&&t?.name).slice(0,yr.maxAvatarSheets),ts=(e,t)=>eo(e).filter(r=>!Ir(r,t)),to=e=>e?.characterSheets&&typeof e.characterSheets=="object"?"changed":"first";function Be({isTemplateMode:e=!1,templatePageCount:t,complexity:r,format:a,uncachedAvatarSheets:n=0}={}){if(e){const d=vr({pages:t,uncachedAvatarSheets:n});return{pages:d.pages,min:d.total,max:d.total,breakdown:d}}const i=kr({complexity:r,format:a,requestedLength:6});return{pages:i,...Qa({pages:i,uncachedAvatarSheets:n})}}const Dr=e=>{const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:0};function so({storyAvatars:e=[],artStyle:t,templatePageCounts:r=[]}={}){const a=ts(e,t).length,n=Be({complexity:"simple",format:"book",uncachedAvatarSheets:a}).max,i=(Array.isArray(r)?r:[]).map(Dr).filter(d=>d>0).map(d=>Be({isTemplateMode:!0,templatePageCount:d,uncachedAvatarSheets:a}).max);return Math.min(n,...i)}function tr({user:e,balance:t,neededAtLeast:r,isTemplateMode:a=!1,templatePageCount:n,complexity:i="standard",format:d="book",storyAvatars:o=[],artStyle:c,templatePageCounts:p=[]}={}){const m=t||ot(e),y=ts(o,c),h={isTemplateMode:a,templatePageCount:n,format:d,uncachedAvatarSheets:y.length};let f=Be({...h,complexity:i});const k=Dr(r);if(k>f.max){const S=Math.min(k-f.max,yr.maxAvatarSheets-h.uncachedAvatarSheets);S>0&&(h.uncachedAvatarSheets+=S,f=Be({...h,complexity:i})),k>f.max&&(f={...f,max:k})}const b=it(m,f.max);let v=null;if(!b&&!a)for(const S of Zn[i]||[]){const I=Be({...h,complexity:S});if(it(m,I.max)){v={complexity:S,pages:I.pages,credits:I.max};break}}const j=so({storyAvatars:o,artStyle:c,templatePageCounts:p});return{balance:m,estimate:f,uncachedAvatars:y,canAfford:b,shorter:v,smallestStory:j,canAffordSmallest:it(m,j)}}function ro({story:e,avatars:t=[],artStyle:r}={}){const a=Array.isArray(e?.pages)?e.pages.length:0,n=Array.isArray(e?.itemReferenceItems)&&e.itemReferenceItems.length>0,i=vr({pages:a,uncachedAvatarSheets:ts(t,r).length,itemSheet:n&&!e?.itemReferenceSheetUrl?1:0});return{pages:i.pages,references:i.references,total:i.total}}const ao=e=>{const t=Math.ceil(Number(e));return Number.isFinite(t)&&t>0?t:null};function no(e,t,r){const a=Cn(e);if(a==="resource-exhausted"){const n=ao(e?.details?.resetMinutes);return n?t("errors.storyRateLimited",{count:n}):t("errors.storyRateLimitedLater")}return t(a==="unavailable"?"errors.writerBusy":a==="deadline-exceeded"?"errors.tookTooLong":r)}const Mr="prompt-review-not-enough-credits",Gt="prompt-review-credit-cost",De="rounded-xl border border-sage-100 bg-white p-4 dark:border-dim-border dark:bg-dim-surface",rt="mb-3 flex items-center gap-2 font-['Quicksand'] text-lg font-bold text-ink dark:text-dim-text",Me="h-5 w-5 shrink-0 text-sage-600 dark:text-sage-300",sr="mb-2 text-sm text-slate-600 dark:text-dim-text-secondary",Fr="w-full rounded-lg border border-slate-200 bg-white p-3 text-ink outline-none focus:border-sage-500 focus:ring-2 focus:ring-sage-500 dark:border-dim-border dark:bg-dim-elevated dark:text-dim-text",oo=`${Fr} text-lg font-semibold`,io=`${Fr} resize-y text-sm font-['Nunito'] leading-relaxed`,rr="whitespace-pre-wrap rounded-lg bg-slate-50 p-3 text-sm font-['Nunito'] leading-relaxed text-ink dark:bg-dim-elevated dark:text-dim-text";function lo({t:e,credits:t}){const{pages:r,references:a,total:n}=t.estimate;return s.jsxs("div",{id:Gt,className:"space-y-0.5 text-center sm:text-right",children:[s.jsx("p",{className:"text-sm font-semibold text-ink dark:text-dim-text",children:a>0?e("promptReview.costLine",{pages:r,count:a}):e("promptReview.costLinePages",{pages:r})}),s.jsx(An,{cost:n,upTo:!0,balance:t.balance})]})}const co=(e,t)=>e.characters&&Array.isArray(e.characters)?e.characters.map(r=>t("promptReview.characterLine",{name:r.name,description:r.description})).join(`
2
3`):e.characterDefinitions||e.characterVisualDescription||"",uo=(e,t)=>({title:Va(e.title||""),characterDesc:co(e,t),styleDesc:e.styleDescription||"",coverPrompt:e.coverImagePrompt||"",pagePrompts:e.pages.map(r=>r.fullImagePrompt||r.imagePrompt||"")});function mo({t:e,onKeep:t,onDiscard:r}){const a=g.useRef(null),n=g.useId();return g.useEffect(()=>{a.current?.focus()},[]),s.jsxs("div",{role:"group","aria-labelledby":n,className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("p",{id:n,className:"font-bold text-ink dark:text-dim-text",children:e("promptReview.discardConfirm")}),s.jsxs("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:[s.jsx("button",{type:"button",onClick:r,className:"min-h-[44px] rounded-xl border-2 border-slate-300 bg-white px-5 py-2 font-bold text-slate-700 transition-colors hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:border-dim-border dark:bg-dim-surface dark:text-dim-text dark:hover:bg-dim-elevated",children:e("promptReview.discard")}),s.jsx("button",{ref:a,type:"button",onClick:t,className:"min-h-[44px] rounded-xl bg-sage-700 px-5 py-2 font-bold text-white transition-colors hover:bg-sage-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2",children:e("promptReview.keepEditing")})]})]})}function go({t:e,credits:t,isShort:r,startOverRef:a,onStartOver:n,onProceed:i}){const d=t?r?`${Gt} ${Mr}`:Gt:void 0;return s.jsxs(s.Fragment,{children:[t&&s.jsx(lo,{t:e,credits:t}),s.jsxs("div",{className:"flex items-center justify-between gap-3",children:[s.jsx("button",{ref:a,type:"button",onClick:n,className:"min-h-[44px] rounded-xl border-2 border-slate-300 bg-white px-5 py-3 font-['Quicksand'] font-bold text-slate-700 transition-colors hover:bg-slate-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:border-dim-border dark:bg-dim-surface dark:text-dim-text dark:hover:bg-dim-border",children:e("promptReview.startOver")}),s.jsxs("button",{type:"button",onClick:i,disabled:r,"aria-describedby":d,className:`flex min-h-[44px] items-center gap-2 rounded-xl px-5 py-3 font-['Quicksand'] font-bold transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2 sm:px-8 ${r?"cursor-not-allowed bg-slate-200 text-slate-700 dark:bg-dim-border dark:text-dim-text-secondary":"bg-sage-700 text-white shadow-sm hover:bg-sage-800 dark:shadow-none"}`,children:[e(r?"navigation.notEnough":"promptReview.generate"),s.jsx(Xt,{className:"h-5 w-5","aria-hidden":"true"})]})]})]})}function po({story:e,onProceed:t,onCancel:r,originalPrompt:a,originalConfig:n,rawPrompt:i,credits:d=null}){const{t:o}=pe("create"),c=g.useId(),p=!!d&&!it(d.balance,d.estimate?.total),[m]=g.useState(()=>uo(e,o)),[y,h]=g.useState(m.title),[f,k]=g.useState(m.pagePrompts),[b,v]=g.useState(!1),[j,S]=g.useState(!1),I=g.useRef(null),B=g.useRef(!1),R=y!==m.title||f.some((L,M)=>L!==m.pagePrompts[M]);g.useEffect(()=>{B.current&&!j&&I.current?.focus(),B.current=j},[j]);const C={original:`${c}-original`,title:`${c}-title`,characters:`${c}-characters`,style:`${c}-style`,pages:`${c}-pages`,pagesNote:`${c}-pages-note`},N=(L,M)=>{const Z=[...f];Z[L]=M,k(Z)},O=()=>{p||t({title:y,coverPrompt:m.coverPrompt,pagePrompts:f})},T=()=>{if(R){S(!0);return}r()};return s.jsxs(le,{isOpen:!0,onClose:T,size:"lg",closeOnBackdrop:!1,closeOnEscape:!1,children:[s.jsx(le.Header,{children:o("promptReview.title")}),s.jsxs(le.Body,{className:"flex-1 space-y-6 font-['Nunito']",children:[s.jsx("p",{className:"-mt-2 text-sm text-slate-600 dar
3k:text-dim-text-secondary",children:o("promptReview.subtitle")}),p&&s.jsx(Rr,{id:Mr,variant:"story",needed:d.estimate.total,balance:d.balance,keepsWork:!1}),a&&s.jsxs("section",{className:De,"aria-labelledby":C.original,children:[s.jsxs("h3",{id:C.original,className:rt,children:[s.jsx(br,{className:Me,"aria-hidden":"true"}),o("promptReview.originalRequest")]}),s.jsx("p",{className:"mb-2 rounded-lg border border-slate-200 bg-slate-50 p-3 italic text-ink dark:border-dim-border dark:bg-dim-elevated dark:text-dim-text",children:o("promptReview.originalRequestQuote",{text:a})}),n&&s.jsxs("div",{className:"flex flex-wrap gap-x-4 gap-y-1 px-1 text-sm font-medium text-slate-600 dark:text-dim-text-secondary",children:[s.jsxs("span",{className:"flex items-center gap-1",children:[s.jsx(Gs,{className:"h-4 w-4 text-sage-600 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:s.jsx(Hs,{i18nKey:"promptReview.styleValue",t:o,values:{value:n.artStyle},components:{value:s.jsx("span",{className:"text-ink dark:text-dim-text"})}})})]}),s.jsxs("span",{className:"flex items-center gap-1",children:[s.jsx($a,{className:"h-4 w-4 text-sage-600 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:s.jsx(Hs,{i18nKey:"promptReview.lengthValue",t:o,values:{value:o("promptReview.pagesCount",{count:e.pages?.length||n.bookLength})},components:{value:s.jsx("span",{className:"text-ink dark:text-dim-text"})}})})]})]}),i&&s.jsxs("div",{className:"mt-3 border-t border-slate-200 pt-2 dark:border-dim-border",children:[s.jsx("button",{type:"button","aria-expanded":b,onClick:()=>v(!b),className:"flex min-h-[44px] items-center gap-1 text-sm font-semibold text-sage-700 transition-colors hover:text-sage-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:text-sage-300 dark:hover:text-sage-200",children:o(b?"promptReview.hideRaw":"promptReview.showRaw")}),b&&s.jsx("div",{className:"mt-2 overflow-x-auto whitespace-pre-wrap rounded-lg bg-slate-50 p-3 font-mono text-xs text-slate-700 dark:bg-dim-elevated dark:text-dim-text-secondary",children:i})]})]}),s.jsxs("section",{className:De,children:[s.jsxs("h3",{id:C.title,className:rt,children:[s.jsx(Jt,{className:Me,"aria-hidden":"true"}),o("promptReview.bookTitle")]}),s.jsx("input",{type:"text",value:y,onChange:L=>h(L.target.value),"aria-labelledby":C.title,className:oo,placeholder:o("promptReview.bookTitlePlaceholder")})]}),m.characterDesc&&s.jsxs("section",{className:De,children:[s.jsxs("h3",{id:C.characters,className:rt,children:[s.jsx(za,{className:Me,"aria-hidden":"true"}),o("promptReview.characterDescTitle")]}),s.jsx("p",{className:sr,children:o("promptReview.builtInNote")}),s.jsx("p",{className:rr,children:m.characterDesc})]}),m.styleDesc&&s.jsxs("section",{className:De,children:[s.jsxs("h3",{id:C.style,className:rt,children:[s.jsx(Gs,{className:Me,"aria-hidden":"true"}),o("promptReview.styleDescTitle")]}),s.jsx("p",{className:sr,children:o("promptReview.builtInNote")}),s.jsx("p",{className:rr,children:m.styleDesc})]}),s.jsxs("section",{className:"space-y-4","aria-labelledby":C.pages,children:[s.jsxs("h3",{id:C.pages,className:"flex items-center gap-2 font-['Quicksand'] text-lg font-bold text-ink dark:text-dim-text",children:[s.jsx(Xt,{className:Me,"aria-hidden":"true"}),o("promptReview.pagePromptsTitle",{count:e.pages.length})]}),s.jsxs("p",{id:C.pagesNote,className:"-mt-2 text-sm text-slate-600 dark:text-dim-text-secondary",children:[o("promptReview.pagePromptsNote")," ",o("promptReview.coverFromPageOne")]}),e.pages.map((L,M)=>s.jsxs("div",{className:De,children:[s.jsx("h4",{className:"mb-2 font-['Quicksand'] font-bold text-ink dark:text-dim-text",children:o("promptReview.pageLabel",{number:M+1})}),s.jsx("p",{className:"mb-2 line-clamp-2 text-sm italic text-slate-600 dark:text-dim-text-secondary",children:o("promptReview.storyQuote",{text:L.text})}),s.jsx("textarea",{value:f[M],onChange:Z=>N(M,Z.target.value),"aria-label":o("promptReview.pagePromptLabel",{number:M+1}),"aria-describedby":C.pagesNote,className:`${io} h-24`,placeholder:o("promptReview.pagePromptPlaceholder",{number:M+1})})]},M))]})]}),s.jsx(le.Footer,{className:"flex-col items-stretch bg-slate-50 dark:bg-dim-elevated",children:j?s.jsx(mo,{t:o,onKeep:()=>S(!1),onDiscard:r}):s.jsx(go,{t:o,credits:d,isShort:p,startOverRef:I,onStartOver:T,onProceed:O})})]})}const Br="story-credit-estimate",dt="story-not-enough-credits";function fo({t:e,step:t,totalSteps:r,currentStepTitle:a,stepContext:n,heroName:i,isGenerating:d=!1,creditBalance:o=null}){const c=e(t===1?"page.theAdventure":t===2?"page.castingCall":"page.theDetails"),p=n||e("page.stepWithTitle",{step:t,total:r,title:a||c});return s.jsxs("header",{className:"sticky top-[var(--app-navbar-height,4rem)] z-10 flex items-center justify-between gap-3 border-b border-gray-50 bg-white/95 px-4 py-3 backdrop-blur-sm transition-all duration-300 sm:px-6 sm:py-4 md:px-8 md:py-6 dark:border-dim-border dark:bg-dim-surface/95",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("h1",{className:"text-xl font-['Quicksand'] font-bold text-sage-700 sm:text-2xl dark:text-sage-300",children:e("page.title")}),!d&&s.jsx("p",{id:"create-current-step-title","aria-live":"polite","aria-atomic":"true",className:"mt-0.5 text-xs font-medium uppercase tracking-wide text-gray-600 sm:mt-1 dark:text-dim-text-muted",children:p})]}),(i||o&&!d)&&s.jsxs("div",{className:"flex min-w-0 max-w-[55%] shrink-0 flex-col items-end gap-1.5 sm:flex-row sm:items-center sm:gap-2","data-testid":"create-header-chips",children:[i&&s.jsxs("p",{className:"flex min-w-0 max-w-full items-center gap-1.5 truncate rounded-full border border-sage-200 bg-sage-50 px-3 py-1 text-xs font-bold text-sage-800 dark:border-sage-800 dark:bg-sage-900/30 dark:text-sage-200","data-testid":"story-for-chip",children:[s.jsx("span",{"aria-hidden":"true",children:"🧒"}),s.jsx("span",{className:"truncate",children:e("page.storyFor",{name:i})})]}),o&&!d&&s.jsx(Ln,{balance:o})]})]})}const ss=e=>e?.id===Fe.id;function $e(e,t){return e?ss(e)?t("step1.customStoryShort"):e.label||"":""}function ho({step:e,totalSteps:t,label:r}){const a=Math.max(t,1),n=Math.min(Math.max(e,0),a),i=n/a*100;return s.jsx("div",{role:"progressbar","aria-label":r,"aria-valuemin":0,"aria-valuemax":a,"aria-valuenow":n,className:"h-2 w-full overflow-hidden bg-gray-50 sm:h-2.5 dark:bg-dim-border",children:s.jsx("div",{className:"h-full rounded-r-full bg-gradient-to-r from-sage-500 to-sage-400 shadow-[0_0_10px_rgba(74,124,89,0.4)] transition-all duration-500 ease-out motion-reduce:transition-none",style:{width:`${i}%`}})})}function xo({t:e,requiresVerification:t=!1,email:r,scenarioLabel:a,sendVerificationEmail
3:n,checkVerificationStatus:i,children:d}){if(t){let o;return r?a?o=e("verifyCredits.body",{email:r,scenario:a}):o=e("verifyCredits.bodyNoScenario",{email:r}):o=e("verifyCredits.bodyNoEmail"),s.jsx("div",{className:"mx-auto max-w-xl",children:s.jsx(xn,{id:"create-verify-credits",t:e,email:r,body:o,headingLevel:2,returnPath:"/create",sendVerificationEmail:n,checkVerificationStatus:i})})}return d}function bo({t:e,searchTerm:t,setSearchTerm:r,allScenarios:a,selectedScenario:n,setSelectedScenario:i,setStep:d,isProfessional:o=!1}){return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx("h2",{className:"text-3xl font-['Quicksand'] font-bold mb-2 text-gray-800 dark:text-dim-text",children:e("step1.title")}),s.jsx("p",{className:"text-gray-500 dark:text-dim-text-secondary",children:e(o?"step1.subtitleProfessional":"step1.subtitle")})]}),s.jsxs("div",{className:"max-w-md mx-auto relative mb-6",children:[s.jsx("input",{type:"search","aria-label":e("step1.searchPlaceholder"),placeholder:e("step1.searchPlaceholder"),value:t,onChange:c=>r(c.target.value),onKeyDown:c=>{c.key==="Enter"&&c.preventDefault()},className:"w-full px-4 py-3 pl-11 rounded-2xl border bg-white dark:bg-dim-elevated border-gray-200 dark:border-dim-border text-gray-800 dark:text-dim-text focus:ring-2 focus:ring-sage-500 outline-none shadow-sm dark:shadow-none transition-all"}),s.jsx("span",{className:"absolute left-4 top-3.5 text-gray-400 dark:text-dim-text-muted","aria-hidden":"true",children:"🔍"})]}),(!t||"custom".includes(t.toLowerCase()))&&s.jsx("div",{className:"mb-8",children:s.jsxs("button",{type:"button",onClick:()=>{i(Fe),d(2)},className:"w-full p-4 rounded-2xl border-2 border-honey-700 bg-honey-50 text-ink hover:bg-honey-100 transition-colors flex items-center gap-4 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2 dark:border-sun dark:bg-dim-elevated dark:text-dim-text dark:hover:bg-dim-border",children:[s.jsx("span",{className:"flex h-12 w-12 shrink-0 items-center justify-center rounded-xl border border-honey-100 bg-white dark:border-dim-border dark:bg-dim-surface","aria-hidden":"true",children:s.jsx(Ua,{className:"h-6 w-6 text-honey-700 dark:text-sun"})}),s.jsxs("span",{className:"flex-1 min-w-0",children:[s.jsx("span",{className:"block font-bold",children:e("step1.customStory")}),s.jsx("span",{className:"block text-sm text-slate-700 dark:text-dim-text-secondary",children:e("step1.customStoryDesc")})]}),s.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1 rounded-full bg-honey-100 px-3 py-1 text-sm font-bold text-ink dark:bg-dim-surface dark:text-dim-text",children:[e("step1.create"),s.jsx(qa,{className:"h-4 w-4","aria-hidden":"true"})]})]})}),s.jsxs("div",{className:"space-y-8",children:[Ka.filter(c=>c.id!=="all").map(c=>{const p=a.filter(m=>m.category===c.id&&m.label.toLowerCase().includes(t.toLowerCase()));return p.length===0?null:s.jsxs("div",{className:"menu-enter",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 dark:text-dim-text mb-3 flex items-center gap-2",children:[s.jsxs("span",{"aria-hidden":"true",children:[c.id==="health"&&"🩺",c.id==="social"&&"🤝",c.id==="routines"&&"📅",c.id==="transitions"&&"🔄"]}),c.id==="health"&&e("step1.categories.health"),c.id==="social"&&e("step1.categories.social"),c.id==="routines"&&e("step1.categories.routines"),c.id==="transitions"&&e("step1.categories.transitions")]}),s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-3",children:p.map(m=>s.jsxs("button",{type:"button","aria-pressed":n?.id===m.id,onClick:()=>i(m),className:`p-3 rounded-xl border-2 transition-all flex flex-row items-center text-left group
4                                                ${n?.id===m.id?"bg-sage-600 border-sage-600 text-white shadow-md ring-2 ring-offset-2 ring-sage-300 dark:ring-sage-700":"bg-white dark:bg-dim-elevated border-sage-100 dark:border-dim-border text-gray-700 dark:text-dim-text hover:border-sage-300 dark:hover:border-sage-600 hover:shadow-md dark:hover:shadow-none hover:-translate-y-0.5"}
5                                            `,children:[s.jsx("span",{className:"text-3xl mr-3 group-hover:scale-110 transition-transform duration-300 filter drop-shadow-sm flex-shrink-0",children:m.icon}),s.jsx("span",{className:"font-bold text-sm leading-tight",children:m.label})]},m.id))})]},c.id)}),t&&!a.some(c=>c.label.toLowerCase().includes(t.toLowerCase()))&&s.jsxs("div",{className:"text-center py-12",children:[s.jsx("div",{className:"text-4xl mb-2","aria-hidden":"true",children:"🤔"}),s.jsx("p",{className:"text-gray-600 dark:text-dim-text-secondary font-medium",children:e("step1.noScenariosFound",{term:t})}),s.jsx("button",{type:"button",onClick:()=>r(""),className:"mt-2 min-h-[44px] px-3 text-sage-700 dark:text-sage-300 hover:text-sage-800 dark:hover:text-sage-200 font-bold text-sm underline",children:e("step1.clearSearch")})]})]})]})}const $r=(e={})=>
5{if(e.required===!1||e.optional===!0)return!0;const t=typeof e.englishLabel=="string"?e.englishLabel:e.label;return typeof t=="string"&&t.toLowerCase().includes("optional")},zr=(e=[],t={})=>e.filter(r=>!$r(r)&&!t[r.id]),at=(e,t)=>e?e==="adult"?t==="adult"||t==="professional":e===t:!0,ar=Object.freeze({dentist:"Dentist",doctor:"Doctor",haircut:"Hairdresser",school:"Teacher",firstDayOfSchool:"Teacher",fireDrill:"Teacher",teacher:"Teacher",therapy:"Therapist"}),yo=[[/\bdentists?\b(?!['’]s)/i,"Dentist"],[/\b(doctor|physician|pediatrician)s?\b(?!['’]s)/i,"Doctor"],[/\b(hairdresser|hair stylist|hairstylist|barber)s?\b(?!['’]s)/i,"Hairdresser"],[/\bteachers?\b(?!['’]s)/i,"Teacher"],[/\btherapists?\b(?!['’]s)/i,"Therapist"],[/\bcoach(es)?\b(?!['’]s)/i,"Coach"]],vo=e=>typeof e=="string"?e:e&&typeof e=="object"&&typeof e.en=="string"?e.en:"",ko=(e,t,r)=>{if(t?.defaultType!=="professional")return null;const a=o=>!!o&&(!r||r.includes(o)),n=`${vo(t.label)} ${t.id||""}`.replace(/[_-]+/g," "),i=yo.find(([o])=>o.test(n));if(i)return a(i[1])?i[1]:null;const d=e&&Object.prototype.hasOwnProperty.call(ar,e)?ar[e]:null;return a(d)?d:null},nr="flex flex-col items-center gap-1 rounded-xl p-1 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500",or="h-16 w-16 sm:h-20 sm:w-20 rounded-lg",wo=e=>bn(e).length>0;
5function jo({t:e,role:t,assignedAvatar:r,onAddAvatar:a,onChangeAvatar:n,onSelectAvatar:i,availableAvatars:d,isFamilyMember:o=wo,quickCreate:c=null}){const p=t.optional===!0||$r(t),m=g.useId();return s.jsxs("section",{id:`cast-role-${t.id}`,tabIndex:-1,"aria-labelledby":m,className:`p-4 rounded-2xl border-2 transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 ${r?"border-sage-500 bg-sage-50/50 dark:bg-sage-900/20":"border-dashed border-gray-300 dark:border-dim-border bg-gray-50 dark:bg-dim-elevated"}`,children:[s.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[s.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[s.jsx("span",{className:"text-2xl","aria-hidden":"true",children:t.icon}),s.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[s.jsx("h3",{id:m,className:"font-bold text-gray-800 dark:text-dim-text",children:t.label}),p&&s.jsx("span",{className:"text-xs font-semibold bg-gray-100 dark:bg-dim-border text-gray-600 dark:text-dim-text-secondary px-2 py-0.5 rounded-full",children:e("step2.optional")})]})]}),r&&s.jsx("button",{type:"button",onClick:n,className:"inline-flex min-h-[44px] shrink-0 items-center justify-center rounded-full border-2 border-sage-600 bg-white px-4 text-sm font-bold text-sage-700 transition-colors hover:bg-sage-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2 dark:border-sage-500 dark:bg-dim-surface dark:text-sage-300 dark:hover:bg-dim-elevated",children:e("step2.changeCharacter")})]}),r?s.jsxs("div",{className:"flex items-center gap-3 bg-white dark:bg-dim-surface p-3 rounded-xl shadow-sm dark:shadow-none",children:[s.jsx("img",{src:r.imageUrl,alt:r.name,className:"w-20 h-20 rounded-lg object-cover"}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"font-bold text-gray-800 dark:text-dim-text",children:r.name}),s.jsx("div",{className:"text-xs text-gray-600 dark:text-dim-text-muted truncate max-w-[200px]",children:r.description})]})]}):s.jsxs("div",{className:"grid grid-cols-3 min-[420px]:grid-cols-4 sm:grid-cols-5 gap-2 justify-items-center",children:[c&&s.jsxs("button",{type:"button",onClick:c.onCreate,className:"col-span-full flex min-h-[56px] w-full items-center gap-3 justify-self-stretch rounded-xl border-2 border-sage-300 bg-white px-4 py-2 text-left font-bold text-sage-800 transition-colors hover:border-sage-500 hover:bg-sage-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:border-sage-700 dark:bg-dim-surface dark:text-sage-200 dark:hover:bg-dim-elevated",children:[s.jsx(Xt,{className:"h-5 w-5 shrink-0 text-sage-600 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:c.label})]}),d.slice(0,10).map(y=>{const h=o(y);return s.jsxs("button",{type:"button",onClick:()=>i(y),className:`${nr} group relative hover:bg-white dark:hover:bg-dim-surface`,children:[s.jsxs("div",{className:"relative",children:[s.jsx("div",{className:"absolute top-1 left-1 z-10 w-4 h-4 rounded-full border-2 border-white shadow-sm bg-black/20 group-hover:border-sage-400 group-hover:bg-sage-500/20 transition-all","aria-hidden":"true"}),s.jsx("img",{src:y.imageUrl,alt:y.name,className:`${or} object-cover transition-opacity ${h?"ring-2 ring-sage-300 dark:ring-sage-600":"opacity-90 group-hover:opacity-100"}`}),h&&s.jsx("span",{className:"absolute -bottom-1.5 -right-1.5 rounded-full border border-sage-200 bg-sage-100 px-1.5 text-xs font-bold leading-5 text-sage-800 dark:border-sage-700 dark:bg-sage-900 dark:text-sage-200",children:e("step2.fam")})]}),s.jsx("span",{className:"text-sm font-bold truncate max-w-[72px] sm:max-w-[80px] text-gray-600 dark:text-dim-text-secondary group-hover:text-sage-700 dark:group-hover:text-sage-300",children:y.name})]},y.id)}),s.jsxs("button",{type:"button",onClick:a,"aria-label":e("step2.addNewCharacter"),"aria-describedby":m,className:`${nr} group text-sage-700 hover:bg-white dark:text-sage-300 dark:hover:bg-dim-surface`,children:[s.jsx("span",{className:`${or} flex items-center justify-center border-2 border-dashed border-sage-300 bg-white transition-colors group-hover:border-sage-500 dark:border-dim-border dark:bg-dim-surface dark:group-hover:border-sage-500`,"aria-hidden":"true",children:s.jsx(Ga,{className:"h-7 w-7",strokeWidth:2})}),s.jsx("span",{className:"text-sm font-bold","aria-hidden":"true",children:e("step2.add")})]})]})]})}function So({t:e,selectedScenario:t,isTemplateMode:r,templateRoles:a,cast:n,setCast:i,userAvatars:d,selectedAvatars:o,toggleAvatarSelection:c,onCreateAvatar:p,getAvailableAvatarsForRole:m,isFamilyMember:y,getQuickCreate:h=()=>null,onManageCharacters:f}){const k=ss(t)?e("step2.subtitleCustom"):e("step2.subtitle",{scenario:$e(t,e)}).replace(/<\/?[^>]+(>|$)/g,"");return s.jsxs("div",{className:"space-y-8 menu-enter",children:[s.jsxs("div",{className:"text-center mb-6",children:[s.jsx("h2",{className:"text-3xl font-['Quicksand'] font-bold mb-2 text-gray-800 dark:text-dim-text",children:e("step2.title")}),s.jsx("p",{className:"text-gray-500 dark:text-dim-text-secondary",children:k})]}),s.jsx("div",{className:"grid gap-6 max-w-2xl mx-auto",children:r?a.map(b=>s.jsx(jo,{t:e,role:b,assignedAvatar:n[b.id],onAddAvatar:()=>p(b.id,b.defaultType||null),onChangeAvatar:()=>i(v=>{const j={...v};return delete j[b.id],j}),onSelectAvatar:v=>i(j=>({...j,[b.id]:v})),availableAvatars:m(b),isFamilyMember:y,quickCreate:h(b)},b.id)):s.jsxs("div",{className:"space-y-4",children:[s.jsx("div",{className:"p-6 rounded-2xl border-2 border-dashed flex flex-col items-center justify-center gap-4 border-gray-200 dark:border-dim-border bg-gray-50 dark:bg-dim-elevated",children:s.jsx("p",{className:"text-sm text-gray-500 dark:text-dim-text-secondary",children:e("step2.whoInStory")})}),s.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[d.map(b=>{const v=o.some(j=>j.id===b.id);return s.jsxs("button",{type:"button","aria-pressed":v,onClick:()=>c(b),className:`p-2 rounded-xl border-2 flex items-center gap-2 transition-all ${v?"border-sage-500 bg-sage-50 dark:bg-sage-900/20 ring-2 ring-sage-500/20":"border-gray-100 dark:border-dim-border hover:border-sage-300 dark:hover:border-sage-600 bg-white dark:bg-dim-elevated"}`,children:[s.jsx("img",{src:b.imageUrl,alt:"",className:"w-10 h-10 rounded-lg object-cover"}),s.jsxs("div",{className:"text-left overflow-hidden",children:[s.jsx("div",{className:"text-xs font-bold truncate text-gray-800 dark:text-dim-text",children:b.name}),s.jsx("div",{className:"text-xs text-gray-600 dark:text-dim-text-muted truncate capitalize",children:b.type})]}
5),v&&s.jsx("span",{className:"ml-auto text-sage-600 dark:text-sage-300 font-bold",children:"✓"})]},b.id)}),s.jsxs("button",{type:"button",onClick:()=>p(),className:"p-2 rounded-xl border-2 border-dashed border-sage-300 dark:border-dim-border flex items-center justify-center gap-2 text-sage-700 dark:text-sage-300 hover:border-sage-500 dark:hover:border-sage-600 hover:bg-white dark:hover:bg-dim-surface transition-colors min-h-[60px] focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500",children:[s.jsx("span",{className:"text-lg","aria-hidden":"true",children:"+"}),s.jsx("span",{className:"text-sm font-bold",children:e("step2.new")})]})]})]})}),f&&s.jsx("p",{className:"text-center",children:s.jsx("button",{type:"button",onClick:f,className:"min-h-[44px] px-3 text-sm font-bold text-sage-700 underline underline-offset-4 hover:text-sage-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:text-sage-300 dark:hover:text-sage-200",children:e("step2.manageCharacters")})})]})}function No({t:e,onStay:t,onLeave:r}){const a=g.useRef(null),n=g.useId(),i=g.useId();return g.useEffect(()=>{a.current?.focus()},[]),s.jsxs("div",{role:"group","aria-labelledby":n,"aria-describedby":i,className:"flex w-full flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{id:n,className:"font-bold text-ink dark:text-dim-text",children:e("step2.leaveStudio.question")}),s.jsx("p",{id:i,className:"text-sm text-slate-600 dark:text-dim-text-secondary",children:e("step2.leaveStudio.note",{count:Zt.avatar})})]}),s.jsxs("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:[s.jsx("button",{type:"button",onClick:r,className:"min-h-[44px] rounded-xl border-2 border-slate-300 bg-white px-5 py-2 font-bold text-slate-700 transition-colors hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:border-dim-border dark:bg-dim-surface dark:text-dim-text dark:hover:bg-dim-elevated",children:e("step2.leaveStudio.leave")}),s.jsx("button",{ref:a,type:"button",onClick:t,className:"min-h-[44px] rounded-xl bg-sage-700 px-5 py-2 font-bold text-white transition-colors hover:bg-sage-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2",children:e("step2.leaveStudio.stay")})]})]})}const H=e=>{const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:0};function Io(e,{characterName:t,avatarSheets:r,avatarReason:a}){return!t||r!==1?e("story.rowAvatars"):a==="changed"?e("story.rowAvatarChanged",{name:t}):e("story.rowAvatarFirst",{name:t})}function Co(e,t,{avatarName:r,avatarReason:a}){const n=H(t.pages),i=H(t.avatarSheets),d=[["people","story.rowPeople",H(t.castSheets)],["object","story.rowObject",H(t.itemSheet)],["places","story.rowPlaces",H(t.settingShots)]],o={"story.rowPeople":e("story.rowPeople"),"story.rowObject":e("story.rowObject"),"story.rowPlaces":e("story.rowPlaces")};return[n>0&&{key:"pages",label:e("story.rowPages"),value:e("story.rowCredits",{count:n})},i>0&&{key:"avatar",label:Io(e,{characterName:r,avatarSheets:i,avatarReason:a}),value:e("story.rowCredits",{count:i})},...d.map(([c,p,m])=>m>0&&{key:c,label:o[p],value:e("story.rowUpTo",{count:m})})].filter(Boolean)}const Ur=e=>H(e.avatarSheets)>0&&!H(e.castSheets)&&!H(e.itemSheet)&&!H(e.settingShots);function Ro(e,{pages:t,refs:r,breakdown:a}){return r<=0?e("story.summaryExact",{pages:t}):Ur(a)&&H(a.avatarSheets)===r?e("story.summaryCharacters",{pages:t,count:r}):e("story.summary",{pages:t,refs:r})}function Ao(e,{breakdown:t,characterName:r,avatarName:a}){return Ur(t)?H(t.avatarSheets)===1&&a?e("story.refsWhyCharacter",{name:a}):e("story.refsWhyCharacters"):r?e("story.refsWhy",{name:r}):e("story.refsWhyNoName")}function Po({t:e,balance:t,total:r}){if(t?.unlimited===!0)return s.jsx("p",{className:"mt-3 text-sm text-slate-600 dark:text-dim-text-secondary",children:e("balance.admin")});const a=Number.isFinite(t?.available)?t.available:null;if(a===null||a<r)return null;const n=a-r;return n<Ya?s.jsx("p",{className:"mt-3 rounded-xl border border-honey-100 bg-honey-50 px-3 py-2 text-sm font-semibold text-ink dark:border-dim-border dark:bg-dim-elevated dark:text-sun",children:e("story.afterLow",{left:n})}):s.jsx("p",{className:"mt-3 text-sm text-slate-700 dark:text-dim-text-secondary",children:e("story.after",{have:a,left:n})})}function To({max:e,min:t,breakdown:r={},balance:a,characterName:n,avatarName:i=n,avatarReason:d="first",id:o="story-credit-estimate",headingLevel:c=3,className:p=""}){const{t:m}=pe("credits"),y=H(e),h=H(r.pages),f=Math.max(0,y-h),k=H(t)===y,b=Co(m,r,{avatarName:i,avatarReason:d}),v=Ro(m,{pages:h,refs:f,breakdown:r}),j=Ao(m,{breakdown:r,characterName:n,avatarName:i});return s.jsxs("section",{id:o,"aria-labelledby":`${o}-title`,className:`rounded-2xl border border-sage-100 bg-white p-4 sm:p-5 dark:border-dim-border dark:bg-dim-surface ${p}`.trim(),children:[s.jsxs("div",{className:"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",children:[s.jsx(On,{level:c,fallback:3,id:`${o}-title`,className:"font-['Quicksand'] text-lg font-bold text-ink dark:text-dim-text",children:m("story.title")}),s.jsx("p",{className:"font-bold tabular-nums text-ink dark:text-dim-text","aria-live":"polite","aria-atomic":"true","data-testid":"story-credit-total",children:k?m("cost.uses",{count:y}):m("cost.upTo",{count:y})})]}),s.jsx("p",{className:"mt-2 text-sm text-slate-700 dark:text-dim-text-secondary",children:v}),f>
50&&s.jsx("p",{className:"mt-1 text-sm text-slate-600 dark:text-dim-text-secondary",children:j}),s.jsx(Po,{t:m,balance:a,total:y}),b.length>0&&s.jsxs("details",{className:"group mt-3",children:[s.jsxs("summary",{className:"inline-flex min-h-[44px] cursor-pointer list-none items-center gap-1 rounded-lg text-sm font-bold text-sage-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 dark:text-sage-300 [&::-webkit-details-marker]:hidden",children:[m("story.breakdownToggle"),s.jsx(Ha,{className:"h-4 w-4 transition-transform group-open:rotate-180 motion-reduce:transition-none","aria-hidden":"true"})]}),s.jsx("dl",{className:"mt-1 divide-y divide-slate-100 text-sm dark:divide-dim-border",children:b.map(S=>s.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2",children:[s.jsx("dt",{className:"text-slate-700 dark:text-dim-text-secondary",children:S.label}),s.jsx("dd",{className:"shrink-0 font-semibold tabular-nums text-ink dark:text-dim-text",children:S.value})]},S.key))})]})]})}const qr="inline-flex min-h-[44px] items-center justify-center rounded-full px-5 py-2 text-sm font-bold transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-dim-surface",ir=`${qr} bg-sage-700 text-white hover:bg-sage-800`,lr=`${qr} border-2 border-sage-300 bg-white text-sage-800 hover:bg-sage-50 dark:border-sage-700 dark:bg-dim-surface dark:text-sage-200 dark:hover:bg-dim-elevated`,Eo="mx-auto mb-6 max-w-3xl",Lo=e=>typeof e=="string"&&e?`/explore?category=${encodeURIComponent(e)}`:"/explore",cr=e=>{const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:0};function Oo(e,t){const r=(e?.planKey||"free")==="free",a=!t&&Dn();return{plans:r,credits:a,nextGrant:!r&&!a&&!!e?.nextGrant}}function Gr({id:e,balance:t,smallestStory:r,pending:a=!1,isNative:n,className:i=Eo,exploreCategory:d}){const{t:o,i18n:c}=pe("credits"),p=_n(),m=typeof n=="boolean"?n:!!p?.isNative;if(!t||t.unlimited)return null;if(a)return s.jsx("div",{id:e,role:"status","data-testid":"welcome-credits-pending",className:`${i} rounded-2xl border border-sage-100 bg-sage-50 p-4 text-ink sm:p-5 dark:border-dim-border dark:bg-dim-elevated dark:text-dim-text`.trim(),children:s.jsxs("p",{className:"flex items-start gap-2 text-sm font-semibold",children:[s.jsx(zt,{className:"mt-0.5 h-4 w-4 shrink-0 text-sage-700 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:o("balance.welcomeChecking")})]})});const y=cr(t.available),h=cr(r),f=y>0&&h>y?o("notEnough.shortestStoryBanner",{count:y,need:h}):o("notEnough.outOfCreditsBanner"),k=Oo(t,m);return s.jsxs("section",{id:e,"aria-label":o("balance.title"),"data-testid":"out-of-credits-banner",className:`${i} rounded-2xl border border-honey-100 bg-honey-50 p-4 text-ink sm:p-5 dark:border-dim-border dark:bg-dim-elevated dark:text-dim-text`.trim(),children:[s.jsxs("p",{className:"flex items-start gap-2 text-sm font-semibold",children:[s.jsx(zt,{className:"mt-0.5 h-4 w-4 shrink-0 text-sage-700 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:f})]}),k.nextGrant&&s.jsx("p",{className:"mt-2 pl-6 text-sm",children:o("notEnough.nextGrantNative",{amount:t.nextGrant.amount,date:Ja(t.nextGrant.at,c?.language)})}),s.jsxs("div",{className:"mt-3 flex flex-wrap gap-2 pl-6",children:[s.jsx(ct,{to:Lo(d),className:lr,"data-testid":"out-of-credits-explore",children:o("notEnough.readFreeStory")}),k.plans&&s.jsx(ct,{to:Xa,className:ir,children:o("notEnough.seePlans")}),k.credits&&s.jsx(ct,{to:Za,className:k.plans?lr:ir,children:o("notEnough.addCredits")})]}),s.jsx("p",{className:"mt-3 pl-6 text-sm text-slate-700 dark:text-dim-text-secondary",children:o("notEnough.stillFree")})]})}const Se="block text-xs font-bold mb-2 uppercase text-gray-600 dark:text-dim-text-muted",_o=()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(pointer: fine)").matches}catch{return!1}},Do=["book","comic"],Mo=["first_person","third_person"];function Fo({t:e,format:t,setFormat:r}){const a=U.useId(),{getRadioProps:n}=wr({options:Do,value:t,onChange:r});return s.jsxs("div",{children:[s.jsx("p",{id:a,className:Se,children:e("step3.format.label")}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",role:"radiogroup","aria-labelledby":a,children:[s.jsxs("button",{type:"button",...n("book",0),className:`flex flex-col items-start gap-1 p-4 rounded-xl border-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 ${t==="book"?"border-sage-500 bg-sage-50 dark:bg-sage-900/20 dark:border-sage-600":"border-gray-200 dark:border-dim-border bg-white dark:bg-dim-surface"}`,children:[s.jsxs("span",{className:"flex items-center gap-2 font-bold text-gray-800 dark:text-dim-text",children:[s.jsx(Jt,{className:"w-5 h-5","aria-hidden":"true"}),e("step3.format.book")]}),s.jsx("span",{className:"text-xs text-gray-600 dark:text-dim-text-secondary",children:e("step3.format.bookHint")})]}),s.jsxs("button",{type:"button",...n("comic",1),className:`flex flex-col items-start gap-1 p-4 rounded-xl border-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 ${t==="comic"?"border-sage-500 bg-sage-50 dark:bg-sage-900/20 dark:border-sage-600":"border-gray-200 dark:border-dim-border bg-white dark:bg-dim-surface"}`,children:[s.jsxs("span",{className:"flex items-center gap-2 font-bold text-gray-800 dark:text-dim-text",children:[s.jsx(br,{className:"w-5 h-5","aria-hidden":"true"}),e("step3.format.comic")]}),s.jsx("span",{className:"text-xs text-gray-600 dark:text-dim-text-secondary",children:e("step3.format.comicHint")})]})]})]})}function dr({checked:e,radioProps:t,children:r}){return s.jsxs("button",{type:"button",...t,className:`flex-1 min-h-[44px] px-2 py-2 text-xs font-bold transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-slate-500 ${e?"bg-slate-700 text-white":"bg-white dark:bg-dim-surface text-gray-700 dark:text-dim-text"}`,children:[e&&s.jsx("span",{"aria-hidden":"true",className:"mr-1",children:"✓"}),s.jsx("span",{children:r})]})}function Bt(e,t,r){return e("step3.complexityPages",{label:e(`step3.${t}`),count:kr({complexity:t,format:r})})}function Bo({t:e,panelId:t,showProfessional:r,setShowProfessional:a,perspective:n,setPerspective:i,complexity:d,setComplexity:o,advancedPrompt:c,setAdvancedPrompt:p,format:m}){const y=U.useId(),{getRadioProps:h}
5=wr({options:Mo,value:n,onChange:i}),f=U.useId(),k=U.useId();return s.jsxs("div",{className:"p-6 rounded-2xl border-2 space-y-6 bg-slate-50 dark:bg-dim-elevated border-slate-200 dark:border-dim-border",children:[s.jsx("h3",{className:"font-bold text-slate-700 dark:text-dim-text",children:s.jsxs("button",{type:"button",className:"flex w-full min-h-[44px] cursor-pointer items-center justify-between text-left","aria-expanded":r,"aria-controls":t,onClick:()=>a(!r),children:[s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx("span",{"aria-hidden":"true",children:"✏️"})," ",e("step3.writingOptions")]}),s.jsx("span",{className:"text-xs font-bold text-slate-600 dark:text-dim-text-secondary",children:e(r?"step3.hide":"step3.show")})]})}),r&&s.jsxs("div",{id:t,className:"menu-enter space-y-6 pt-2",children:[s.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("p",{id:y,className:Se,children:e("step3.perspective")}),s.jsxs("div",{role:"radiogroup","aria-labelledby":y,className:"flex rounded-lg overflow-hidden border border-slate-300 dark:border-dim-border",children:[s.jsx(dr,{checked:n==="first_person",radioProps:h("first_person",0),children:e("step3.firstPerson")}),s.jsx(dr,{checked:n==="third_person",radioProps:h("third_person",1),children:e("step3.thirdPerson")})]})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:f,className:Se,children:e("step3.complexity")}),s.jsxs("select",{id:f,value:d,onChange:b=>o(b.target.value),className:"w-full min-h-[44px] p-2 rounded-lg border border-slate-300 dark:border-dim-border text-sm bg-white dark:bg-dim-surface text-gray-800 dark:text-dim-text",children:[s.jsx("option",{value:"simple",children:Bt(e,"simple",m)}),s.jsx("option",{value:"standard",children:Bt(e,"standard",m)}),s.jsx("option",{value:"complex",children:Bt(e,"complex",m)})]})]})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:k,className:Se,children:e("step3.extraInstructions")}),s.jsx("textarea",{id:k,value:c,onChange:b=>p(b.target.value),className:"w-full p-2 rounded-lg border border-slate-300 dark:border-dim-border text-sm h-20 bg-white dark:bg-dim-surface text-gray-800 dark:text-dim-text",placeholder:e("step3.instructionsPlaceholder")})]})]})]})}function $o({t:e,onSwitchToCustom:t}){return s.jsxs("div",{className:"p-5 rounded-2xl border-2 border-slate-200 dark:border-dim-border bg-slate-50 dark:bg-dim-elevated space-y-3",children:[s.jsxs("p",{className:"text-sm text-gray-700 dark:text-dim-text-secondary",children:[s.jsx("span",{"aria-hidden":"true",children:"📘 "}),e("step3.templateNote")]}),t&&s.jsx("button",{type:"button",onClick:t,className:"min-h-[44px] px-4 py-2 rounded-xl font-bold text-sm text-sage-800 dark:text-sage-200 border-2 border-sage-300 dark:border-sage-700 hover:bg-sage-50 dark:hover:bg-sage-900/30 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500",children:e("step3.switchToCustom")})]})}function zo({isTemplateMode:e,cast:t,selectedAvatars:r,templateRoles:a}){const n=t&&typeof t=="object"&&!Array.isArray(t)?t:{},i=Array.isArray(r)?r:[],d=Array.isArray(a)?a:[];if(e){const o=d.find(c=>c.defaultType==="child");return{characterCount:Object.keys(n).length,hero:o?n[o.id]:null}}return{characterCount:i.length,hero:i.find(o=>o.type==="child")||i[0]}}function Uo(e,t){return e?.type!=="child"?"step3.summaryMainCharacter":t?"step3.summaryChildProfessional":"step3.summaryChild"}function qo({t:e,selectedScenario:t,isTemplateMode:r,cast:a,selectedAvatars:n,templateRoles:i,isProfessional:d}){const{characterCount:o,hero:c}=zo({isTemplateMode:r,cast:a,selectedAvatars:n,templateRoles:i});return s.jsxs("div",{className:"p-4 rounded-xl flex items-center justify-between bg-sage-50 dark:bg-sage-900/20",children:[s.jsxs("div",{children:[s.jsx("div",{className:"text-xs font-bold uppercase text-gray-600 dark:text-dim-text-muted",children:e("step3.summary")}),s.jsxs("div",{className:"font-bold dark:text-dim-text",children:[$e(t,e)," • ",e("step3.characters",{count:o})]}),c&&s.jsxs("div",{className:"text-xs text-gray-600 dark:text-dim-text-secondary mt-1",children:[e(Uo(c,d),{name:c.name}),c.age?` (${e("step3.yearsOld",{age:c.age})})`:""]})]}),s.jsx("div",{className:"text-2xl","aria-hidden":"true",children:"✨"})]})}function Go({credits:e,onUseShorter:t}){const{estimate:r,balance:a,canAfford:n,shorter:i,pendingWelcome:d,characterName:o,avatarName:c,avatarReason:p}=e;return s.jsxs("div",{className:"space-y-4","data-testid":"story-credits",children:[s.jsx(To,{id:Br,max:r.max,min:r.min,breakdown:r.breakdown,balance:a,characterName:o,avatarName:c,avatarReason:p}),!n&&d&&s.jsx(Gr,{id:dt,balance:a,pending:!0,className:""}),!n&&!d&&s.jsx(Rr,{id:dt,variant:"story",needed:r.max,balance:a,shorterStory:i&&t?{pages:i.pages,credits:i.credits,onUse:()=>t(i.complexity)}:void 0})]})}function Ho({t:e,selectedScenario:t,customTopic:r,setCustomTopic:a,storyLanguage:n,setStoryLanguage:i,age:d,setAge:o,showProfessional:c,setShowProfessional:p,perspective:m,setPerspective:y,complexity:h,setComplexity:f,advancedPrompt:k,setAdvancedPrompt:b,format:v="book",setFormat:j,isTemplateMode:S,
5cast:I,selectedAvatars:B,templateRoles:R,uiLanguage:C="en",availableLanguages:N,onSwitchToCustom:O,credits:T=null,onUseShorter:L,isProfessional:M=!1}){const Z=U.useId(),$=U.useId(),J=U.useId(),Ne=U.useId(),[fe]=U.useState(_o),gt=ss(t)?e("step3.subtitleCustom"):e("step3.subtitle",{scenario:$e(t,e)}).replace(/<\/?[^>]+(>|$)/g,""),Ie=Array.isArray(N)&&N.length>0?N:Ws,_=Ie.length<Ws.length,he=Ie.map(P=>Qs(P,C)).join(", ");return s.jsxs("div",{className:"space-y-8 menu-enter",children:[s.jsxs("div",{className:"text-center mb-6",children:[s.jsx("h2",{className:"text-3xl font-['Quicksand'] font-bold mb-2 text-gray-800 dark:text-dim-text",children:e("step3.title")}),s.jsx("p",{className:"text-gray-600 dark:text-dim-text-secondary",children:gt})]}),s.jsxs("div",{className:"max-w-xl mx-auto space-y-6",children:[t?.id==="custom"&&s.jsxs("div",{children:[s.jsx("label",{htmlFor:"custom-story-topic",className:"block text-sm font-bold mb-2 uppercase text-gray-600 dark:text-dim-text-muted",children:e("step3.whatAbout")}),s.jsx("textarea",{id:"custom-story-topic",value:r,onChange:P=>a(P.target.value),placeholder:e("step3.topicPlaceholder"),required:!0,"aria-describedby":"custom-topic-requirement",className:"w-full p-4 rounded-2xl border-2 outline-none h-32 text-lg bg-white dark:bg-dim-elevated border-gray-200 dark:border-dim-border text-gray-800 dark:text-dim-text",autoFocus:fe}),s.jsx("p",{id:"custom-topic-requirement",className:"mt-2 text-sm text-gray-600 dark:text-dim-text-secondary",children:e("validation.enterTopic")})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{htmlFor:$,className:Se,children:e("step3.language")}),s.jsx("select",{id:$,value:n,onChange:P=>i(P.target.value),"aria-describedby":_?Ne:void 0,className:"w-full min-h-[44px] p-3 rounded-xl border outline-none font-bold bg-white dark:bg-dim-elevated border-gray-200 dark:border-dim-border text-gray-700 dark:text-dim-text",children:Ie.map(P=>s.jsx("option",{value:P,children:Qs(P,C)},P))})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:J,className:Se,children:e(M?"step3.childAgeProfessional":"step3.childAge")}),s.jsx("select",{id:J,value:d,onChange:P=>o(parseInt(P.target.value)),className:"w-full min-h-[44px] p-3 rounded-xl border outline-none font-bold bg-white dark:bg-dim-elevated border-gray-200 dark:border-dim-border text-gray-700 dark:text-dim-text",children:en.map(P=>s.jsx("option",{value:P,children:e("step3.yearsOld",{age:P})},P))})]}),_&&s.jsx("p",{id:Ne,className:"col-span-2 -mt-2 text-xs text-gray-600 dark:text-dim-text-secondary",children:e("step3.templateLanguages",{languages:he})})]}),!S&&j&&s.jsx(Fo,{t:e,format:v,setFormat:j}),S?s.jsx($o,{t:e,onSwitchToCustom:O}):s.jsx(Bo,{t:e,panelId:Z,showProfessional:c,setShowProfessional:p,perspective:m,setPerspective:y,complexity:h,setComplexity:f,advancedPrompt:k,setAdvancedPrompt:b,format:v}),s.jsx(qo,{t:e,selectedScenario:t,isTemplateMode:S,cast:I,selectedAvatars:B,templateRoles:R,isProfessional:M}),T&&s.jsx(Go,{credits:T,onUseShorter:L})]})]})}const Ht="bg-sage-700 text-white",Hr="bg-gray-300 dark:bg-dim-border cursor-not-allowed text-gray-700 dark:text-dim-text-secondary",Wt="flex min-h-12 min-w-0 w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-center font-['Quicksand'] font-bold leading-tight shadow-lg transition-all hover:-translate-y-1 hover:shadow-xl motion-reduce:transition-none motion-reduce:hover:translate-y-0 sm:px-6 md:px-8 dark:shadow-none",Wo=({t:e,step:t,totalSteps:r,isLoading:a,isTemplateMode:n,isMissingCharacters:i,isCustomTopicMissing:d,isShortOfCredits:o,isPendingWelcome:c,isSaveFailed:p})=>{const m=e(n?"validation.assignRequiredRoles":"validation.addCharacter");return t===2&&i?m:t!==r?null:p&&!a?e("validation.saveStoryFirst"):d?e("validation.enterTopic"):i?m:o&&!a?e(c?"validation.welcomeCredits":"validation.notEnoughCredits"):null},Qo=({t:e,step:t,totalSteps:r,isLoading:a,selectedScenario:n,isTemplateMode:i,cast:d,selectedAvatars:o,templateRoles:c,customTopic:p,isShortOfCredits:m,isPendingWelcome:y,isSaveFailed:h})=>{const f=i?zr(c,d):[],k=i?f.length>0:o.length===0,b=n?.id==="custom"&&!p.trim(),v=a||t===1&&!n||t===2&&k,j=a||k||b||!!m||!!h,S=Wo({t:e,step:t,totalSteps:r,isLoading:a,isTemplateMode:i,isMissingCharacters:k,isCustomTopicMissing:b,isShortOfCredits:m,isPendingWelcome:y,isSaveFailed:h});return{isNextDisabled:v,isCreateDisabled:j,validationMessage:S}
5};function Vo({t:e,creditCost:t,isCreateDisabled:r,describedBy:a}){const{t:n}=pe("credits"),i=!!t?.isShort,d=i&&!t?.isPendingWelcome,o=t&&t.count>0?t.upTo?n("cost.upTo",{count:t.count}):n("cost.uses",{count:t.count}):null,c=[a,i?t?.panelId:null].filter(Boolean).join(" ")||void 0;return s.jsx("button",{form:"create-story-form",type:"submit","data-create-submit":"true",disabled:r,"aria-describedby":c,className:`${Wt} ${r?Hr:Ht}`,children:s.jsxs("span",{className:"flex min-w-0 flex-col items-center break-words",children:[s.jsxs("span",{children:[!d&&s.jsx("span",{"aria-hidden":"true",children:"✨ "}),e(d?"navigation.notEnough":"navigation.createStory")]}),o&&s.jsx("span",{className:"mt-0.5 text-xs font-semibold font-['Nunito'] tabular-nums","data-testid":"create-credit-cost",children:o})]})},"create-story")}function Ko({t:e,user:t,step:r,totalSteps:a,nextStep:n,isNextDisabled:i,isCreateDisabled:d,validationMessage:o,creditCost:c}){if(!t)return s.jsx(ct,{to:"/login?mode=signup&intent=story",state:{mode:"signup",intent:"story",returnTo:"/create"},className:`${Wt} ${Ht}`,children:s.jsxs("span",{className:"min-w-0 break-words",children:[s.jsx("span",{"aria-hidden":"true",children:"✨ "}),e("navigation.signupToCreate")]})});const p=o?"create-validation-message":void 0;return r<a?s.jsx("button",{type:"button",onClick:n,disabled:i,"aria-describedby":p,className:`${Wt} ${i?Hr:Ht}`,children:s.jsxs("span",{className:"min-w-0 break-words",children:[e("navigation.nextStep")," →"]})},"next-step"):s.jsx(Vo,{t:e,creditCost:c,isCreateDisabled:d,describedBy:p})}function Yo({t:e,step:t,totalSteps:r,prevStep:a,nextStep:n,isLoading:i,user:d,selectedScenario:o,isTemplateMode:c,cast:p={},selectedAvatars:m=[],templateRoles:y=[],customTopic:h="",creditCost:f=null,isSaveFailed:k=!1}){const b=!!f?.isShort,v=b&&!!f?.isPendingWelcome,{isNextDisabled:j,isCreateDisabled:S,validationMessage:I}=Qo({t:e,step:t,totalSteps:r,isLoading:i,selectedScenario:o,isTemplateMode:c,cast:p,selectedAvatars:m,templateRoles:y,customTopic:h,isShortOfCredits:b,isPendingWelcome:v,isSaveFailed:k}),B=g.useRef(null);if(Mn(B,!i),i)return null;const R=t>1;return s.jsxs("div",{ref:B,"data-sticky-action-bar":"create",className:"sticky bottom-0 z-10 border-t border-gray-100 bg-white/95 px-4 pt-4 pb-[calc(1rem+env(safe-area-inset-bottom))] backdrop-blur-sm transition-all duration-300 sm:px-6 sm:pt-5 sm:pb-[calc(1.25rem+env(safe-area-inset-bottom))] md:px-10 md:pt-6 md:pb-[calc(1.5rem+env(safe-area-inset-bottom))] dark:border-dim-border dark:bg-dim-surface/95",children:[I&&s.jsxs("p",{id:"create-validation-message",role:"status",className:"mb-3 flex items-start justify-center gap-2 text-center text-sm text-slate-600 dark:text-dim-text-secondary",children:[s.jsx(zt,{className:"mt-0.5 h-4 w-4 shrink-0 text-sage-700 dark:text-sage-300","aria-hidden":"true"}),s.jsx("span",{children:I})]}),s.jsxs("div",{className:R?"grid grid-cols-2 items-stretch gap-3":"flex",children:[R&&s.jsxs("button",{type:"button",onClick:a,className:"flex min-h-12 min-w-0 w-full items-center justify-center gap-2 rounded-xl px-3 py-3 text-center font-bold leading-tight text-gray-700 transition-all disabled:opacity-60 hover:bg-gray-100 sm:px-4 dark:text-dim-text-secondary dark:hover:bg-dim-border",children:[s.jsx("span",{"aria-hidden":"true",children:"←"}),s.jsx("span",{className:"min-w-0 break-words",children:e("navigation.previous")})]}),s.jsx(Ko,{t:e,user:d,step:t,totalSteps:r,nextStep:n,isNextDisabled:j,isCreateDisabled:S,validationMessage:I,creditCost:f})]})]})}const Jo=3e4,Xo=new Set(["no_profile","email_unverified"]);function Zo(e,t){return!e||e.emailVerified===!1||!t||t.unlimited||t.planKey!=="free"||t.available>0?!1:!(e.credits&&typeof e.credits=="object"?e.credits.updatedAt:e.creditsUpdatedAt)}function ei(e,t){const r=Zo(e,t),a=e?.id||e?.uid||null,[n,i]=g.useState(null);return g.useEffect(()=>{if(!r||!a)return;let d=!0;const o=()=>{d&&i(a)},c=setTimeout(o,Jo);return Promise.resolve().then(()=>tn(a)).then(p=>{p&&!(p.granted>0)&&!Xo.has(p.reason)&&o()}).catch(()=>{}),()=>{d=!1,clearTimeout(c)}},[r,a]),r&&!!a&&n!==a}const Wr=[{id:"writing",labelKey:"progressPanel.stages.writing"},{id:"characters",labelKey:"progressPanel.stages.characters"},{id:"painting",labelKey:"progressPanel.stages.painting"},{id:"finishing",labelKey:"progressPanel.stages.finishing"}],ti={"progress.startingMagic":["writing",0,2],"progress.writingText":["writing",2,25],"progress.castingStory":["writing",2,25],"progress.planningScenes":["characters",25,30],"progress.preparingPrompts":["characters",25,35
5],"progress.promptsReady":["characters",35,35],"progress.preparingPages":["characters",25,30],"progress.illustrating":["characters",25,30],"progress.characterSheets":["characters",30,40],"progress.itemSheet":["characters",40,45],"progress.paintingPages":["painting",45,92],"progress.finalizing":["finishing",92,96],"progress.saving":["finishing",96,99],"progress.ready":["finishing",100,100]},ur=e=>{if(!e||typeof e!="object")return null;const t=ti[e.key];if(!t)return null;const[r,a,n]=t;let i=a,d=n;if(e.key==="progress.paintingPages"){const o=Number(e.values?.done)||0,c=Number(e.values?.total)||0;if(c>0){const p=(n-a)/c;i=a+p*Math.min(o,c),d=Math.min(n,i+p)}}return{stage:r,percent:Math.round(i),end:Math.round(d)}},si=(e,t)=>t?typeof t=="string"?t:typeof t=="object"&&t.key?e(t.key,t.values):"":"",ri=1e3,ai=.12;function ni({t:e,stage:t,state:r,detail:a}){return s.jsxs("li",{className:"flex items-center gap-3","aria-current":r==="active"?"step":void 0,children:[s.jsx("span",{className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 text-xs font-bold ${r==="done"?"border-sage-600 bg-sage-600 text-white":r==="active"?"border-sage-600 bg-white text-sage-700 dark:bg-dim-surface dark:text-sage-300":"border-gray-300 bg-white text-gray-400 dark:border-dim-border dark:bg-dim-surface dark:text-dim-text-muted"}`,"aria-hidden":"true",children:r==="done"?s.jsx(Wa,{className:"h-4 w-4"}):r==="active"?"•":""}),s.jsxs("span",{className:`text-sm ${r==="pending"?"text-gray-600 dark:text-dim-text-muted":"font-bold text-gray-800 dark:text-dim-text"}`,children:[e(t.labelKey),a?s.jsxs("span",{className:"font-normal text-gray-600 dark:text-dim-text-secondary",children:[" · ",a]}):null,s.jsxs("span",{className:"sr-only",children:[" ","(",e(`progressPanel.state.${r}`),")"]})]})]})}function Qr(e,t){return t?e("progressPanel.readyWithHero",{name:t}):e("progressPanel.readyTitle")}const oi=e=>e?"sr-only":"text-center font-bold text-sage-800 dark:text-sage-200";function ii({t:e,progress:t,heroName:r,isReady:a}){return a?Qr(e,r):si(e,t)||e("progressPanel.starting")}function li({receipt:e}){return e?.message?e.important?s.jsx("p",{className:"rounded-xl border border-sage-200 bg-sage-50 p-3 text-left text-sm text-ink dark:border-dim-border dark:bg-dim-elevated dark:text-dim-text","data-testid":"story-credit-receipt",children:e.message}):s.jsx("p",{className:"text-sm text-slate-600 dark:text-dim-text-secondary","data-testid":"story-credit-receipt",children:e.message}):null}function ci({t:e,heroName:t,cover:r,receipt:a,onRead:n}){const i=U.useRef(null);return U.useEffect(()=>{i.current?.focus()},[]),s.jsxs("div",{className:"space-y-5 text-center",children:[r&&s.jsx("img",{src:r,alt:"",className:"mx-auto aspect-square w-full max-w-xs rounded-2xl border border-sage-100 object-cover shadow-sm dark:border-dim-border dark:shadow-none"}),s.jsx(li,{receipt:a}),n&&s.jsx(sn,{ref:i,variant:"primary",size:"lg",onClick:n,leftIcon:s.jsx(Jt,{className:"h-5 w-5","aria-hidden":"true"}),className:"w-full sm:w-auto",children:t?e("progressPanel.readWith",{name:t}):e("progressPanel.readStory")})]})}function di(e,t){return t?.key!=="progress.paintingPages"||!t.values?.total?null:e("progressPanel.pagesDone",{done:t.values.done||0,total:t.values.total})}function ui({t:e,percent:t,activeIndex:r,paintingDetail:a,slots:n,pageImages:i,prefersReducedMotion:d}){const o=d?"":"transition-opacity duration-700 ease-out";return s.jsxs(s.Fragment,{children:[s.jsx("div",{role:"progressbar","aria-label":e("progressPanel.barLabel"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":t,className:"h-3 w-full overflow-hidden rounded-full border border-sage-200 bg-white dark:border-sage-800 dark:bg-dim-elevated",children:s.jsx("div",{className:`h-full rounded-full bg-sage-600 ${d?"":"transition-[width] duration-500 ease-out"}`,style:{width:`${t}%`}})}),s.jsx("ol",{className:"space-y-3",children:Wr.map((c,p)=>{const m=p<r?"done":p===r?"active":"pending";return s.jsx(ni,{t:e,stage:c,state:m,detail:c.id==="painting"&&m==="active"?a:null},c.id)})}),n>0&&s.jsx("ul",{className:"grid grid-cols-3 gap-3 sm:grid-cols-6","aria-label":e("progressPanel.previewLabel"),children:Array.from({length:n},(c,p)=>{const m=i[p];return s.jsx("li",{className:"relative aspect-square overflow-hidden rounded-xl border border-sage-100 bg-sage-50 dark:border-sage-900 dark:bg-sage-900/20",children:m?s.jsx("img",{src:m,alt:e("progressPanel.pagePreview",{page:p+1}),className:`h-full w-full object-cover ${o}`}):s.jsxs("span",{className:"flex h-full w-full items-center justify-center text-xs font-bold text-sage-700 dark:text-sage-300",children:[s.jsx("span",{className:"sr-only",children:e("progressPanel.pagePending",{page:p+1})}),s.jsx("span",{"aria-hidden":"true",children:p+1})]})},p)})})]})}function mi({t:e,progress:t,pageImages:r=[],totalPages:a=0,heroName:n="",isReady:i=!1,screenKeptOn:d=!1,receipt:o=null,onRead:c,prefersReducedMotion:p=!1}){const[m,y]=U.useState(()=>ur(t)||{stage:"writing",percent:0}),[h,f]=U.useState(t);if(t!==h){f(t);const N=ur(t);N&&N.percent>=m.percent&&y(N)}const[k,b]=U.useState(m.percent),v=Math.max(m.percent,(m.end??m.percent)-1);U.useEffect(()=>{if(p||i||v<=m.percent)return;const N=setInterval(()=>{b(O=>{const T=Math.max(O,m.percent);return Math.min(v,T+Math.max(.5,(v-T)*ai))})},ri);return()=>clearInterval(N)},[v,i,p,m.percent]);const j=p?m.percent:Math.min(v,Math.max(m.percent,Math.round(k))),S=i?{stage:"finishing",percent:100}:{...m,percent:j},I=Math.max(0,Wr.findIndex(N=>N.id===S.stage)),B=ii({t:e,progress:t,heroName:n,isReady:i}),R=di(e,t),C=Math.max(0,Math.min(Number(a)||0,12));return s.jsxs("section",{className:"mx-auto max-w-xl space-y-6 py-4","aria-labelledby":"story-progress-heading","data-testid":"story-generation-progress",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("h2",{id:"story-progress-heading",className:"text-2xl font-['Quicksand'] font-bold text-gray-800 dark:text-dim-text",children:i?Qr(e,n):e("progressPanel.title")}),!i&&s.jsx("p",{className:"text-sm text-gray-600 dark:text-dim-text-secondary",children:e(d?"progressPanel.estimateAwake":"progressPanel.estimate")})]}),s.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:oi(i),children:B}),i?s.jsx(ci,{t:e,heroName:n,cover:r.find(Boolean)||null,receipt:o,onRead:c}):s.jsx(ui,{t:e,percent:S.percent,activeIndex:I,paintingDetail:R,slots:C,pageImages:r,prefersReducedMotion:p})]})}const je="socialNarratives.storyDraft.v1",mr="socialNarratives.storyDraft.guestSession.v1",rs=e=>e||globalThis.localStorage,gi=e=>globalThis.sessionStorage,as=(e=null)=>e?`${je}.user.${encodeURIComponent(e)}`:je,Qt=e=>{const t=gi();let r=t?.getItem(mr);return r||(r=globalThis.crypto?.randomUUID?.()||`${Date.now()}-${Math.random().toString(36).slice(2)}`,t?.setItem(mr,r)),r},$t=e=>{if(!e)return null;const t=JSON.parse(e);return t&&t.version===1&&typeof t.data=="object"?t:null};function pi(e=null,t,r){const a=rs(t),n=as(e);try{if(e){const o=a?.getItem(n),c=$t(o);if(c)return c.data;o&&a.removeItem(n)}else{const o=a?.getItem(je),c=$t(o);return c?c.guestSessionId===Qt(r)?c.data:null:(o&&a.removeItem(je),null)}const i=$t(a?.getItem(je)),d=Qt(r);return!i||i.ownerId||i.guestSessionId!==d?null:(Vt(i.data,e,a,r),a.removeItem(je),i.data)}catch{try{a?.removeItem(n)}catch{}return null}}
5function Vt(e,t=null,r,a){try{return rs(r)?.setItem(as(t),JSON.stringify({version:1,ownerId:t||null,guestSessionId:t?null:Qt(a),savedAt:new Date().toISOString(),data:e})),!0}catch{return!1}}function gr(e=null,t){try{rs(t)?.removeItem(as(e))}catch{}}function fi(e){return e?!!(e.selectedScenario||e.customTopic?.trim()||e.selectedAvatarIds?.length||Object.keys(e.castAvatarIds||{}).length||e.advancedPrompt?.trim()||Number(e.step)>1):!1}function ut(e){if(!e||typeof e!="object")return null;const t=typeof e.title=="string"?e.title.trim():"";return t?{id:typeof e.id=="string"&&e.id?e.id:null,title:t}:null}function hi(e,t){const r=ut(e),a=ut(t);return!r||!a?!1:r.id&&a.id?r.id===a.id:r.title===a.title}const xi=e=>{const t=e?.nativeEvent?.submitter;return!t||t.dataset?.createSubmit==="true"},pr=e=>{const t=typeof document<"u"?document.getElementById(dt):null;t&&(t.setAttribute("tabindex","-1"),t.scrollIntoView?.({behavior:e?"auto":"smooth",block:"center"}),t.focus({preventScroll:!0}))},bi=({t:e,tc:t},r,{unlimited:a,balanceLeft:n})=>r?r.ranOut?t("notEnough.ranOutMidway"):r.missingPages>0?r.uncertain===0&&r.returned+r.notCharged>=r.failed?t("story.receiptPartial",{count:r.missingPages,cost:t("unit",{count:Zt.redo})}):e("errors.partialImages",{count:r.missingPages}):a||!(r.used>0)?null:t("story.receipt",{count:r.used,balance:n}):null,yi=500,vi=e=>
5{const t=typeof e?.topic=="string"?e.topic.trim().slice(0,yi):"";return t?{topic:t}:null},ki=(e,t,r)=>!e||e.includes(t)?t:e.includes(r)?r:e[0],wi=(e,t)=>e(t===1?"page.theAdventure":t===2?"page.castingCall":"page.theDetails");function ji({onGenerate:e,onGeneratePromptsOnly:t,onGenerateImages:r,onRetrySave:a}){const{t:n,i18n:i}=pe("create"),{t:d}=pe("credits"),{user:o,sendVerificationEmail:c,checkVerificationStatus:p}=jr(),m=rn(),y=i.language?.split("-")[0]||"en",h=an[y]||"English",f=Tr(),k=Er(),b=f.state?.hero,v=f.state?.allowedCast,j=f.state?.isGuest,S=f.state?.heroId,[{restoredDraft:I,initialSequel:B,isFreshSequel:R,likeTopic:C}]=g.useState(()=>{const l=vi(f.state?.likeStory);if(l)return{restoredDraft:null,initialSequel:null,isFreshSequel:!1,likeTopic:l.topic};const u=ut(f.state?.sequelOf),x=pi(o?.id),w=ut(x?.sequelOf);if(!u)return{restoredDraft:x,initialSequel:w,isFreshSequel:!1};const A=hi(w,u);return{restoredDraft:A?x:null,initialSequel:u,isFreshSequel:!A}}),[N,O]=g.useState(B),[T,L]=g.useState(I),[M,Z]=g.useState(!!I),[$,J]=g.useState(I?.step||(j&&S||N||C?2:1)),Ne=g.useRef(null),fe=g.useRef(!1),gt=()=>{J(l=>{const u=Math.min(l+1,ue);return u!==l&&(fe.current=!0),u})},Ie=()=>{J(l=>{const u=Math.max(l-1,1);return u!==l&&(fe.current=!0),u})};g.useEffect(()=>{if(!fe.current)return;fe.current=!1;const l=Ne.current;l&&(l.focus({preventScroll:!0}),l.scrollIntoView?.({behavior:m?"auto":"smooth",block:"start"}))},[m,$]);const[_,he]=g.useState([]),[P,ce]=g.useState([]),[,ls]=g.useState(!1),[cs,ra]=g.useState(!1),[E,pt]=g.useState(I?.selectedScenario||(N||C?Fe:null)),[xe,Ue]=g.useState(I?.customTopic||C||""),[aa,na]=g.useState(""),[qe,oa]=g.useState({}),[de,ia]=g.useState(!1),[q,be]=g.useState({}),la=[...Object.entries(qe).map(([l,u])=>({id:u.id||l,label:st(u.title,y,"title"),icon:u.icon,category:(()=>{const x=u.tags?.[0]?.toLowerCase()||"routines";return["health","dentist","doctor","haircut","body"].some(w=>x.includes(w))?"health":["social","emotional","feelings","play","friends"].some(w=>x.includes(w))?"social":["transition","baby","move","change"].some(w=>x.includes(w))?"transitions":"routines"})(),prompt:st(u.description,y,"description"),templateId:u.id||l})),Fe],V=E?.templateId?qe[E.templateId]:null,ye=g.useMemo(()=>V&&E?{...E,label:st(V.title,y,"title")||E.label}:E,[y,E,V]),W=g.useMemo(()=>V?.roles?V.roles.map((l,u)=>({...l,id:l.id||`role_${u}`,label:st(l.label,y,"roleLabel"),englishLabel:Ut(l.label,"en")})):[],[V,y]),z=!!V,ue=3,ds=wi(n,$),us=n("page.stepWithTitle",{step:$,total:ue,title:ds}),[Ge,He]=g.useState(I?.age||3),[ft,We]=g.useState(I?.storyLanguage||h),[ca]=g.useState(ze),[ht]=g.useState("Calm Flat");g.useEffect(()=>{(async()=>{try{const u=Ys(Js(Vs,"templates")),x=await Xs(u),w={};x.forEach(A=>{w[A.id]=A.data()}),oa(w)}catch(u){console.error("Failed to load templates:",u)}finally{ia(!0)}})()},[]);const[Qe,ms]=g.useState(I?.perspective||"first_person"),[Ce,xt]=g.useState(I?.complexity||"standard"),[Re,gs]=g.useState(I?.format||"book"),[Ve,ps]=g.useState(I?.advancedPrompt||""),[bt,fs]=g.useState(!!I?.showProfessional),[ee,te]=g.useState(!1),da=Hn(ee),[ua,K]=g.useState(""),[yt,Ae]=g.useState(null),[me,vt]=g.useState(null),[ma,hs]=g.useState([]),[ga,xs]=g.useState(0),[kt,wt]=g.useState(!1),[bs,ys]=g.useState(!1),[pa,vs]=g.useState(null),jt=g.useRef(null),[Pe,Te]=g.useState(!1),[Ke,ks]=g.useState(!1),St=o?.id,ve=o?.preferences?.language,Nt=o?.preferences?.toddlerAge;g.useEffect(()=>{!I?.storyLanguage&&ve&&We(ve),!I?.age&&Nt&&He(Nt)},[I,ve,Nt]),g.useEffect(()=>{if(P.length>0){const l=P.find(u=>u.type==="child"&&u.age)||P.find(u=>u.age);l?.age&&He(l.age)}},[P]),g.useEffect(()=>{const l=W.find(x=>x.defaultType==="child"),u=l?q[l.id]:null;u?.type==="child"&&u?.age&&He(u.age)},[q,W]),g.useEffect(()=>{(async()=>{if(!(!St&&!j)){if(j){b&&(he([b]),ce([b])),v&&he(u=>[...u,...v]);return}ls(!0);try{const u=Js(Vs,"users",St,"avatars"),x=Ys(u,pn("createdAt","desc")),A=((await Xs(x))?.docs||[]).map(G=>({id:G.id,...G.data()}));he(A)}catch(u){console.error("Failed to load avatars:",u)}finally{ls(!1),ra(!0)}}})()},[St,j,b,v]);const It=g.useRef(!1);g.useEffect(()=>{if(It.current||_.length===0)return;
5const l=[S,...T?.selectedAvatarIds||[]].filter(Boolean);if(l.length===0)return;const x=[...new Set(l)].slice(0,3).map(w=>_.find(A=>A.id===w)).filter(Boolean);x.length!==0&&(It.current=!0,ce(w=>[...w,...x.filter(A=>!w.some(G=>G.id===A.id))].slice(0,3)))},[T,S,_]);const se=S&&_.find(l=>l.id===S)||null;g.useEffect(()=>{if(!se||W.length===0)return;const l=W.find(u=>u.defaultType==="child"&&at(u.defaultType,se.type));l&&be(u=>u[l.id]?u:{...u,[l.id]:se})},[se,W]);const ws=g.useRef(!R);g.useEffect(()=>{!N||ws.current||S&&o&&!cs||(ws.current=!0,Ue(se?n("sequel.topic",{hero:se.name,title:N.title}):n("sequel.topicNoHero",{title:N.title})))},[cs,se,S,N,n,o]);const Ct=g.useRef(!1);g.useEffect(()=>{if(Ct.current||!de||_.length===0||!T?.castAvatarIds)return;const l=Object.fromEntries(Object.entries(T.castAvatarIds).map(([u,x])=>[u,_.find(w=>w.id===x)]).filter(([,u])=>!!u));Object.keys(l).length!==0&&(Ct.current=!0,be(u=>({...u,...l})))},[T,de,_]);const js=g.useRef(null);g.useEffect(()=>{const l=f.state?.createdAvatarId;if(!l||js.current===l||_.length===0)return;const u=_.find(D=>D.id===l);if(!u)return;const x=f.state?.createdAvatarRoleId;if(x&&!de)return;const A=(x?W.find(D=>D.id===x):null)?.defaultType||f.state?.createdAvatarRoleType,G=!x||at(A,u.type);js.current=l,x?G&&be(D=>({...D,[x]:u})):ce(D=>[u,...D.filter(X=>X.id!==u.id)].slice(0,3)),L(D=>{const X={...D||{}};return x&&G?X.castAvatarIds={...D?.castAvatarIds||{},[x]:l}:x||(X.selectedAvatarIds=[l,...(D?.selectedAvatarIds||[]).filter(ie=>ie!==l)].slice(0,3)),X});const Y={...f.state};delete Y.createdAvatarId,delete Y.createdAvatarRoleId,delete Y.createdAvatarRoleType,k("/create",{replace:!0,state:Object.keys(Y).length>0?Y:void 0})},[f.state,k,W,de,_]),g.useEffect(()=>{if(!f.state?.likeStory)return;const l={...f.state};delete l.likeStory,k("/create",{replace:!0,state:Object.keys(l).length>0?l:void 0})},[f.state,k]);const Ye=g.useMemo(()=>({step:$,selectedScenario:E?{id:E.id,label:E.label,prompt:E.prompt,category:E.category,templateId:E.templateId}:null,customTopic:xe,selectedAvatarIds:P.length>0?P.map(l=>l.id):_.length===0?T?.selectedAvatarIds||[]:[],castAvatarIds:Object.keys(q).length>0?Object.fromEntries(Object.entries(q).filter(([,l])=>l?.id).map(([l,u])=>[l,u.id])):!de||_.length===0?T?.castAvatarIds||{}:{},age:Ge,storyLanguage:ft,perspective:Qe,complexity:Ce,format:Re,advancedPrompt:Ve,showProfessional:bt,sequelOf:N}),[Ve,Ge,q,Ce,xe,Re,Qe,T,P,E,N,bt,$,ft,de,_]),Je=fi(Ye),Xe=g.useRef(!1);g.useEffect(()=>{if(!Je){Xe.current=!1;return}Xe.current||Vt(Ye,o?.id)},[Ye,Je,o?.id]);const[re,Ss]=g.useState(null),Ee=g.useRef(!1),Ns=g.useRef(null),[fa,Le]=g.useState(!1),Is=(l=null,u=null,x=null)=>{Ee.current=!1,Le(!1),Ss({roleId:l,roleType:u,quickCreateRole:x})},ha=g.useCallback(l=>{Ee.current=l,l||Le(!1)},[]),Cs=()=>{if(Ee.current){Le(!0);return}Rs()},xa=()=>{Le(!1);const l=()=>{const u=Ns.current;(u?.querySelector("[data-studio-accept]:not([disabled])")||u)?.focus({preventScroll:!0})};typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(l):setTimeout(l,0)},Rs=()=>{const l=re?.roleId;if(Ee.current=!1,Le(!1),Ss(null),!l||typeof window>"u")return;const u=()=>document.getElementById(`cast-role-${l}`)?.focus({preventScroll:!0});typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(u):setTimeout(u,0)},ba=async l=>{const u=await En(o,l);Ee.current=!1;const x=re;if(he(w=>[u,...w.filter(A=>A.id!==u.id)]),x?.roleId){const w=W.find(A=>A.id===x.roleId);(!w||at(w.defaultType,u.type))&&be(A=>({...A,[x.roleId]:u}))}else ce(w=>[u,...w.filter(A=>A.id!==u.id)].slice(0,3));return u},ya=()=>{Vt(Ye,o?.id),k("/characters",{state:{returnTo:"/create"}})},va=l=>{if(!o)return null;const u=ko(E?.templateId,{...l,label:l.englishLabel||l.label},wn);return u?{label:n("step2.quickCreateLabel",{action:n(`step2.quickCreate.${u}`),count:Zt.avatar}),onCreate:()=>Is(l.id,"professional",u)}:null};g.useEffect(()=>{if(bs||!Je&&!ee&&!Pe)return;const l=u=>{u.preventDefault(),u.returnValue=""};return window.addEventListener("beforeunload",l),()=>window.removeEventListener("beforeunload",l)},[Je,ee,bs,Pe]);const ka=()=>{Xe.current=!0,gr(o?.id),Ct.current=!0,_.length>0&&(It.current=!0),L(null),Z(!1),O(null),J(j&&S?2:1),pt(null),Ue("");const l=S?_.find(u=>u.id===S):null;ce(l?[l]:[]),be({}),ps(""),ms("first_person"),xt("standard"),gs("book"),fs(!1)},Oe=()=>{Xe.current=!0,gr(o?.id),L(null),Z(!1)},wa=l=>{ce(u=>u.some(w=>w.id===l.id)?u.filter(w=>w.id!==l.id):u.length<3?[...u,l]:u)},[ja,Rt]=g.useState(!1),[ke,As]=g.useState(null),[Ze,At]=g.useState(null),[Ps,Pt]=g.useState(null);g.useEffect(()=>{I?.storyLanguage||We(ve||h)},[ve,h,I]);
5const Ts=o?.tier||nn.FREE,Es=z?Object.values(q).filter(Boolean):P,Sa=g.useMemo(()=>Object.values(qe).map(l=>Array.isArray(l?.pages)?l.pages.length:0),[qe]),Ls={isTemplateMode:z,templatePageCount:z&&Array.isArray(V?.pages)?V.pages.length:void 0,complexity:Ce,format:z?"book":Re,storyAvatars:Es,artStyle:ht,templatePageCounts:Sa},ae=tr({user:o,...Ls}),Q=!!me&&!ae.balance.unlimited&&ae.balance.available===me.clientAvailable&&ae.estimate.max>=me.clientMax?tr({...Ls,balance:{...ae.balance,available:me.available},neededAtLeast:me.needed}):ae,ne=Q.balance,oe=!!o,_e=ei(oe?o:null,ae.balance),Tt=oe&&!Q.canAfford,Et=!!o&&o.emailVerified===!1,Na=oe&&!Et&&!_e,Ia=oe&&!ne.unlimited&&(_e||ne.available<=0||de&&!Q.canAffordSmallest),Os=g.useMemo(()=>z?on(V):null,[z,V]),_s=ki(Os,ft,h),Lt=Es.find(l=>l?.type==="child")||se,Ds=Q.uncachedAvatars.length===1?Q.uncachedAvatars[0]:null,Ca=oe?{estimate:Q.estimate,balance:ne,canAfford:Q.canAfford,shorter:Q.shorter,pendingWelcome:_e,characterName:Lt?.name||void 0,avatarName:Ds?.name||null,avatarReason:to(Ds)}:null,Ra=l=>{xt(l);const u=()=>{const x=document.getElementById(Br);x&&(x.setAttribute("tabindex","-1"),x.focus({preventScroll:!0}))};typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(u):setTimeout(u,0)};g.useEffect(()=>{me&&pr(m)},[me,m]);const et=l=>{K(l),l?.key==="progress.paintingPages"&&l.values?.total&&xs(l.values.total)},Aa=(l,u)=>{hs(x=>{const w=[...x];return w[l]=u,w})},we=g.useRef(null),Ot=g.useRef(null),Ms=g.useRef(o);Ms.current=o;const Pa=()=>{const l=we.current;we.current=null;const u=ot(Ms.current),x=Ot.current,w=Math.max(0,Math.min(u.available,Number.isFinite(x)?x-(l?.used||0):u.available)),A=bi({t:n,tc:d},l,{unlimited:u.unlimited,balanceLeft:w});return A?{message:A,important:l?.missingPages>0||!!l?.ranOut}:null},Ta=()=>new Promise(l=>{Oe(),ys(!0),te(!1),Te(!1),wt(!0),K({key:"progress.ready"}),vs(Pa()),jt.current=l}),Ea=()=>{const l=jt.current;jt.current=null,l?.()},_t=(l=lt())=>({onPageReady:Aa,beforeNavigate:Ta,creditRunId:l,onCreditRun:u=>{we.current=u},reportsPictureOutcome:!0}),La=()=>{const l=Object.values(q).filter(Boolean);if(l.length>0){const u=l.filter((x,w)=>l.findIndex(A=>A.id===x.id)===w);ce(u.slice(0,3))}Ue(u=>u||E?.prompt||E?.label||""),pt(Fe)},Fs=()=>{hs([]),xs(0),wt(!1),ys(!1),vs(null),Te(!1)},Bs=(l,u)=>{te(!1),wt(!1),K("");const x=l?.credit||Cr(l),w=A=>Ae({message:A,creditsUsed:we.current?.used||0});if(x.isInsufficient&&oe){vt({needed:x.needed??Q.estimate.max,available:x.available??0,clientAvailable:ae.balance.available,clientMax:ae.estimate.max}),J(ue);return}l?.code==="save-failed"?Te(!0):x.isCreditError?(console.error("Story generation failed:",l),w(Rn(d,l)||n(u))):(console.error("Story generation failed:",l),un(l,{tags:{area:"create-story"}}),w(no(l,n,u))),window.scrollTo(0,0)},Oa=async()=>{if(!(!a||Ke)){ks(!0);try{await a(_t(null)),Oe(),Te(!1)}catch(l){l?.code!=="save-failed"&&console.error("Retrying the save failed:",l),Te(!0)}finally{ks(!1)}}},$s=async l=>{if(l.preventDefault(),$!==ue||!E||ee||kt||Pe||!xi(l))return;let u="";if(E?.id==="custom"?u=xe||"":E&&(u=E.prompt||""),(z?zr(W,q):[]).length>0){J(2),window.scrollTo(0,0);return}if(!z&&P.length===0){J(2),window.scrollTo(0,0);return}if(!u.trim())return;if(Tt){pr(m);return}const w=E?.category||"custom",A=!0,G=lt(),Y=_t(G);we.current=null,Ot.current=ne.available,te(!0),K({key:"progress.startingMagic"}),Ae(null),vt(null),Pt(null),Fs();try{const D=z?Object.values(q).filter(Boolean):P,X=D.find(F=>F.type==="child")||D[0],ie={imageModel:ca,artStyle:ht,userId:o?.id,tier:Ts,bookLength:6,language:_s,toddlerAge:Ge,isSocialStory:A,style_preset:"calm_flat_2d",perspective:Qe,complexity:Ce,advancedPrompt:Ve,tone:"supportive_and_direct",format:z?"book":Re,heroId:X?.id||null,childName:D.map(F=>F.name).join(" and ")||"the hero",selectedAvatars:D,avatarCharacters:D.map(F=>({name:F.name,description:F.description||`A ${F.type||"character"}`,type:F.type||"child",role:F.role||"",hairColor:F.hairColor||null,eyeColor:F.eyeColor||null,skinTone:F.skinTone||null,ethnicity:F.ethnicity||null}
5)),useAvatarDescriptions:!0,...N&&!z?{previousStoryTitle:N.title}:{}};if(z){K({key:"progress.castingStory"});const F=await Pn(E.templateId,q,ie);K({key:"progress.illustrating"}),await r(F,{},et,F?.language?{...ie,language:F.language}:ie,Y),Oe(),te(!1);return}if(dn(o)&&t){const F=await t(Ks(u),"Neutral",w,et,ie,{creditRunId:G});As(F),At({userPreferences:ie,creditRunId:G}),Rt(!0),te(!1),K("")}else await e(Ks(u),"Neutral",w,et,ie,Y),Oe(),te(!1),K("")}catch(D){Bs(D,"errors.generationFailedBody")}},_a=()=>{Ae(null),Ps&&ke?zs(Ps):$s({preventDefault:()=>{}})},zs=async l=>{const u=Ze?.creditRunId||lt();At(x=>x&&{...x,creditRunId:null}),we.current=null,Ot.current=ot(o).available,te(!0),Rt(!1),Ae(null),vt(null),Pt(l),Fs(),K({key:"progress.illustrating"});try{const{userPreferences:x}=Ze;if(r)await r(ke,l,et,x,_t(u)),Oe(),te(!1),K("");else throw new Error(n("errors.imageGenerationUnavailable"))}catch(x){Bs(x,"errors.imageGenerationFailed")}},Da=()=>{Rt(!1),As(null),At(null),Pt(null),K("")},Ma=g.useMemo(()=>yn(_),[_]),Us=l=>kn(l,Ma),Fa=l=>{const u=W.find(w=>w.defaultType==="child"),x=u?q[u.id]:null;return _.filter(w=>at(l.defaultType,w.type)?l.defaultType==="child"||!Us(w)?!0:!!x&&Dt(w,x.id):!1).sort((w,A)=>{const G=w.type===l.defaultType?-1:1,Y=A.type===l.defaultType?-1:1;if(G!==Y)return G-Y;if(x){const D=Dt(w,x.id)?-1:1,X=Dt(A,x.id)?-1:1;if(D!==X)return D-X}return 0})},Ba=ye&&ye.id!=="custom"?$e(ye,n):null,ge=ee||kt;g.useEffect(()=>{!ge||typeof window.scrollTo!="function"||window.scrollTo({top:0,behavior:m?"auto":"smooth"})},[ge,m]);const qs=ln(Ts);return s.jsxs("div",{className:"min-h-screen bg-white font-['Nunito'] transition-colors duration-200 sm:bg-transparent sm:p-4 md:p-8 dark:bg-dim-surface sm:dark:bg-transparent",children:[s.jsx(cn,{title:n("page.title"),description:n("page.seoDescription"),noIndex:!0}),s.jsxs("div",{className:"mx-auto flex min-h-[600px] max-w-5xl flex-col overflow-clip bg-white transition-all duration-300 sm:rounded-3xl sm:border sm:border-gray-100 sm:shadow-xl dark:bg-dim-surface sm:dark:border-dim-border sm:dark:shadow-none",children:[s.jsx(fo,{t:n,step:$,totalSteps:ue,currentStepTitle:ds,stepContext:us,heroName:Lt?.name||"",isGenerating:ge,creditBalance:Na?ne:null}),!ge&&s.jsx(ho,{step:$,totalSteps:ue,label:us}),M&&s.jsxs("div",{role:"status",className:"mx-6 md:mx-10 mt-6 rounded-2xl border border-sage-200 dark:border-sage-800 bg-sage-50 dark:bg-sage-900/20 p-4 flex flex-col sm:flex-row sm:items-center gap-3",children:[s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"font-bold text-sage-800 dark:text-sage-200",children:n("draft.restored")}),s.jsx("p",{className:"text-sm text-sage-700 dark:text-sage-300",children:n("draft.restoredDescription")})]}),s.jsx("button",{type:"button",onClick:ka,className:"px-4 py-2 rounded-xl font-bold text-sage-700 dark:text-sage-200 hover:bg-sage-100 dark:hover:bg-sage-900/40 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500",children:n("draft.discard")})]}),Pe&&!ee&&s.jsxs("div",{role:"alert",className:"mx-6 md:mx-10 mt-6 rounded-2xl border border-sage-200 dark:border-sage-800 bg-sage-50 dark:bg-sage-900/20 p-4 flex flex-col sm:flex-row sm:items-center gap-3",children:[s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"font-bold text-sage-900 dark:text-sage-100",children:n("saveFailed.title")}),s.jsx("p",{className:"text-sm text-sage-800 dark:text-sage-200 mt-1",children:n("saveFailed.body")})]}),s.jsx("button",{type:"button",onClick:Oa,disabled:Ke||!a,"aria-busy":Ke||void 0,className:"min-h-[44px] px-5 py-2.5 rounded-full font-bold text-white bg-sage-700 hover:bg-sage-800 transition-colors disabled:opacity-70 focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2",children:n(Ke?"saveFailed.saving":"saveFailed.retry")})]}),yt&&!ee&&s.jsxs("div",{role:"alert",className:"mx-6 md:mx-10 mt-6 rounded-2xl border border-amber-200 dark:border-amber-700/60 bg-amber-50 dark:bg-amber-900/30 p-4 flex flex-col sm:flex-row sm:items-center gap-3 menu-enter",children:[s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"font-bold text-amber-900 dark:text-amber-100",children:n("errors.generationFailedTitle")}),s.jsx("p",{className:"text-sm text-amber-900 dark:text-amber-100 mt-1",children:yt.message}),s.jsxs("p",{className:"text-sm text-amber-800 dark:text-amber-200 mt-1",children:[d("explain.failed"),yt.creditsUsed>0&&!ne.unlimited&&s.jsxs(s.Fragment,{children:[" ",d("balance.youHave",{count:ne.available})]})]})]}),s.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[s.jsx("button",{type:"button",onClick:_a,className:"min-h-[44px] px-5 py-2.5 rounded-full font-bold text-white bg-sage-700 hover:bg-sage-800 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-sage-500 focus-visible:ring-offset-2",children:n("errors.retry")}),s.jsx("button",{type:"button",onClick:()=>Ae(null),className:"min-h-[44px] px-4 py-2.5 rounded-full font-bold text-amber-900 dark:text-amber-100 hover:bg-amber-100 dar
5k:hover:bg-amber-900/50 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-amber-500",children:n("errors.dismiss")})]})]}),s.jsx("div",{className:"flex-grow overflow-y-auto p-4 pb-[calc(1rem+var(--calm-fab-clearance,0px))] sm:p-6 sm:pb-[calc(1.5rem+var(--calm-fab-clearance,0px))] md:p-10 md:pb-[calc(2.5rem+var(--calm-fab-clearance,0px))]",children:s.jsx(xo,{t:n,requiresVerification:Et,email:o?.email,scenarioLabel:Ba,sendVerificationEmail:c,checkVerificationStatus:p,children:s.jsx("form",{ref:Ne,onSubmit:$s,id:"create-story-form",tabIndex:-1,"aria-labelledby":ge?"story-progress-heading":"create-current-step-title",className:"mx-auto max-w-3xl space-y-8 focus:outline-none",children:ge?s.jsx(mi,{t:n,progress:ua,pageImages:ma,totalPages:ga,heroName:Lt?.name||"",isReady:kt,screenKeptOn:da,receipt:pa,onRead:Ea,prefersReducedMotion:m}):s.jsxs("fieldset",{disabled:ee,className:"m-0 min-w-0 border-0 p-0",children:[$===1&&Ia&&s.jsx(Gr,{balance:ne,smallestStory:Q.smallestStory,pending:_e,exploreCategory:E?.templateId&&hn(E.id)||void 0}),$===1&&s.jsx(bo,{t:n,searchTerm:aa,setSearchTerm:na,allScenarios:la,selectedScenario:E,setSelectedScenario:pt,setStep:J,isProfessional:qs}),$===2&&s.jsx(So,{t:n,selectedScenario:ye,isTemplateMode:z,templateRoles:W,cast:q,setCast:be,userAvatars:_,selectedAvatars:P,toggleAvatarSelection:wa,onCreateAvatar:Is,getAvailableAvatarsForRole:Fa,isFamilyMember:Us,getQuickCreate:va,onManageCharacters:o?ya:void 0}),$===3&&s.jsx(Ho,{t:n,selectedScenario:ye,customTopic:xe,setCustomTopic:Ue,storyLanguage:_s,setStoryLanguage:We,age:Ge,setAge:He,showProfessional:bt,setShowProfessional:fs,perspective:Qe,setPerspective:ms,complexity:Ce,setComplexity:xt,advancedPrompt:Ve,setAdvancedPrompt:ps,format:Re,setFormat:gs,isTemplateMode:z,cast:q,selectedAvatars:P,templateRoles:W,uiLanguage:y,availableLanguages:Os||void 0,onSwitchToCustom:La,credits:Ca,onUseShorter:Ra,isProfessional:qs})]})})})}),!Et&&s.jsx(Yo,{t:n,step:$,totalSteps:ue,prevStep:Ie,nextStep:gt,isLoading:ge,user:o,selectedScenario:E,isTemplateMode:z,cast:q,selectedAvatars:P,templateRoles:W,customTopic:xe,creditCost:oe?{count:Q.estimate.max,upTo:Q.estimate.min!==Q.estimate.max,isShort:Tt,isPendingWelcome:Tt&&_e,panelId:dt}:null,isSaveFailed:Pe}),s.jsxs(le,{isOpen:!!re,onClose:Cs,size:"md",closeOnBackdrop:!1,closeOnEscape:!1,children:[s.jsx(le.Header,{children:n("step2.studioTitle")}),s.jsx(le.Body,{children:re&&s.jsx("div",{ref:Ns,tabIndex:-1,className:"outline-none",children:s.jsx(vn,{onAvatarCreated:ba,onClose:Cs,onHoldChange:ha,initialType:re.roleType||"child",quickCreateRole:re.quickCreateRole,returnPath:"/create",showHeading:!1,embedded:!0},`${re.roleId||"custom"}-${re.quickCreateRole||""}`)})}),fa&&s.jsx(le.Footer,{className:"bg-slate-50 dark:bg-dim-elevated",children:s.jsx(No,{t:n,onStay:xa,onLeave:Rs})})]}),ja&&ke&&s.jsx(po,{story:ke,originalPrompt:E?.id==="custom"?xe:$e(ye,n),originalConfig:Ze?.userPreferences,rawPrompt:ke.rawPrompt,onProceed:zs,onCancel:Da,credits:oe?{estimate:ro({story:ke,avatars:Ze?.userPreferences?.selectedAvatars,artStyle:ht}),balance:ot(o)}:null})]})]})}const fr=(e,t="reference")=>String(e||t).toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,60)||t,Si=(e={})=>(e?.selectedAvatars||[]).filter(t=>t?.imageUrl&&t?.name).slice(0,3),Ni=(e={})=>{const t=(e?.selectedAvatars||[]).filter(r=>r?.name);return t.length>0?t:(e?.avatarCharacters||[]).filter(r=>r?.name)},ns=(e={},t={},r)=>{const a=Ni(t),n=Array.isArray(e?.characters)?e.characters:null;if(n||a.length>0){const i=Bn(n||[],a);if(i.length>0)return i}return e?.characterDefinitions||e?.characterVisualDescription||r},Ii=(e,t)=>t?{key:e,values:t}:{key:e},os=e=>(t,r)=>{typeof e=="function"&&e(Ii(t,r))},Vr=(e,t,r)=>{if(!(typeof e!="function"||!r))try{e(t,r)}catch(a){console.warn("onPageReady listener failed:",a)}},Ci=/^[A-Za-z0-9_-]{1,100}$/,mt=e=>{const t=typeof e=="string"&&Ci.test(e)?e:lt(),r={used:0,failed:0,returned:0,notCharged:0,uncertain:0};let a=!1;return{id:t,get ranOut(){return a},pictureOptions(n,i){return{operationId:fn(t,n,i),generationRunId:t,assetIndex:i,action:"create"}},made(){r.used+=1},failed(n){const i=n?.credit||Cr(n);r.failed+=1,i.isInsufficient&&(a=!0),i.settlement===Mt.REFUNDED?r.returned+=1:i.settlement===Mt.NOT_CHARGED||i.isCreditError?r.notCharged+=1:i.settlement===Mt.UNCERTAIN&&(r.uncertain+=1)},summary(n={}){return{runId:t,...r,ranOut:a,...n}}}},Kr=(e,t)=>
5{if(typeof e=="function")try{e(t)}catch(r){console.warn("onCreditRun listener failed:",r)}},Yr=async({run:e,index:t,prompt:r,userPreferences:a,sceneReferences:n})=>{if(e.ranOut)return null;try{const i=await Pr(r,a?.imageModel,a?.userId,{operationType:"story_page_image",referenceImages:n.referenceImages,characterNames:n.characterNames,...e.pictureOptions("story_page_image",t)});return e.made(),i||null}catch(i){return e.failed(i),console.error(`Failed to generate image for page ${t+1}:`,i),null}},Jr=e=>e.filter(t=>!t?.imageUrl).length,Ri=(e={},t={})=>(e?.format||t?.format)==="comic",is=({storyData:e,characters:t,page:r,narrator:a,userPreferences:n})=>$n({styleDescription:e?.styleDescription,characters:t,keyItems:e?.keyItems,keySettings:e?.keySettings,page:r,narrator:a,isComic:Ri(e,n)}),Xr=async({sheetUrl:e,userId:t,fileName:r})=>!e?.startsWith?.("data:image")||!t?e:await mn(e,t,r),nt=new Map,Zr=new Map,Ai=(e,t,r)=>`${e}:${t.id||t.name}:${Sn(t)}:${Nn(r)}:${jn}`,Pi=async({avatar:e,artStyle:t,userPreferences:r,sessionKey:a,pictureOptions:n})=>{const i=r.userId,d=await Tn(e,t,n);let o;try{o=await Xr({sheetUrl:d?.sheetUrl,userId:i,fileName:`character_sheet_${fr(e.id||e.name)}_${fr(t,"style")}_${Date.now()}.png`})}catch(p){throw Object.assign(p instanceof Error?p:new Error(String(p)),{pictureMade:!0})}const c=o||d?.sheetUrl;return c?.startsWith?.("https://")&&(Zr.set(a,c),In({userId:i,avatar:e,artStyle:t,sheetUrl:c,requestedModel:r?.imageModel||ze}).catch(p=>{console.warn("Failed to cache character reference sheet:",p)})),c},Ti=async({avatar:e,artStyle:t,userPreferences:r,sessionKey:a,pictureOptions:n})=>{let i=nt.get(a);const d=!i;i||(i=Pi({avatar:e,artStyle:t,userPreferences:r,sessionKey:a,pictureOptions:n}),nt.set(a,i));try{return{sheetUrl:await i,ownCall:d,error:null}}catch(o){return{sheetUrl:null,ownCall:d,error:o}}finally{nt.get(a)===i&&nt.delete(a)}},ea=async(e={},t,r=mt())=>{const a=Si(e);if(a.length===0)return{referenceImages:[],characterNames:[]};if(!e?.userId)return{referenceImages:a.map(o=>o.imageUrl),characterNames:a.map(o=>o.name)};const n=e?.artStyle||"Cartoon",i=a.map(o=>{const c=Ai(e.userId,o,n);return{avatar:o,sessionKey:c,cached:Ir(o,n)||Zr.get(c)||null}});i.some(o=>!o.cached)&&t?.("progress.characterSheets");const d=await Promise.all(i.map(async({avatar:o,sessionKey:c,cached:p},m)=>{if(p)return{url:p,name:`${o.name} reference sheet`};const y={url:o.imageUrl,name:o.name},h=await Ti({avatar:o,artStyle:n,userPreferences:e,sessionKey:c,pictureOptions:r.pictureOptions("character_reference",m)});return h.error?(h.ownCall&&(h.error?.pictureMade?r.made():r.failed(h.error)),console.warn(`Failed to generate character reference sheet for ${o.name}, using avatar image:`,h.error),y):(h.ownCall&&r.made(),h.sheetUrl?{url:h.sheetUrl,name:`${o.name} reference sheet`}:(console.warn(`Character reference sheet for ${o.name} came back without an image, using avatar image.`),y))}));return{referenceImages:d.map(o=>o.url).filter(Boolean),characterNames:d.map(o=>o.name).filter(Boolean)}},Kt=(e,t)=>Un(e?.keyItems,e?.keySettings,Array.isArray(t)?t:[]),Ei=async({itemReferencePrompt:e,userPreferences:t={},reportProgress:r,run:a})=>{if(a.ranOut)return null;let n=null;try{r?.("progress.itemSheet"),n=await Pr(e,t?.imageModel,t?.userId,{operationType:"story_reference_image",...a.pictureOptions("story_reference_image",0)}),a.made()}catch(i){return a.failed(i),console.warn("Failed to generate key item reference sheet; continuing with text item definitions only:",i),null}try{return await Xr({sheetUrl:n,userId:t?.userId,fileName:`item_reference_sheet_${Date.now()}.png`})||n}catch(i){return console.warn("Failed to save key item reference sheet; continuing with text item definitions only:",i),null}},ta=async({storyData:e,characters:t,userPreferences:r={},reportProgress:a,run:n=mt()})=>{const i=Array.isArray(e?.itemReferenceItems)?e.itemReferenceItems:Kt(e,t),d=e?.itemReferencePrompt||(i.length>0?qt({items:i,styleDescription:e?.styleDescription}):null);if(e?.itemReferenceSheetUrl)return{itemReferenceSheetUrl:e.itemReferenceSheetUrl,itemReferenceItems:i,itemReferencePrompt:d};const o=Kt(e,t);if(o.length===0)return{itemReferenceSheetUrl:null,itemReferenceItems:[],itemReferencePrompt:null};const c=qt({items:o,styleDescription:e?.styleDescription});return{itemReferenceSheetUrl:await Ei({itemReferencePrompt:c,userPreferences:r,reportProgress:a,run:n}
5),itemReferenceItems:o,itemReferencePrompt:c}},Li=(e,t)=>{const r=Kt(e,t);return{itemReferenceItems:r,itemReferencePrompt:r.length>0?qt({items:r,styleDescription:e?.styleDescription}):null}},Oi=e=>/^\s*\{/.test(String(e||"")),_i=e=>{const t=String(e||""),r=` Style: ${zn}`;return t.endsWith(r)?t.slice(0,-r.length).trim():t},Di=(e,t,r)=>{const a=er(`${t||""}
6${r||""}`),n=e.filter(i=>{const d=er(i?.visualDescription||"");return qn(i).some(o=>Gn(a,o))||d.length>=12&&a.includes(d)}).map(i=>i.name).filter(Boolean);return n.length>0?n:void 0},Mi=async(e,t,r,a,n={},i={})=>{const d=os(a),o=mt(i?.creditRunId);try{d("progress.writingText");const c=await Ar(e,t,r,n,{generationRunId:o.id}),p=C=>new Promise(N=>{const O=new Image;O.src=C,O.onload=N,O.onerror=N});d("progress.planningScenes");const m=ns(c,n,`Main character: ${e}`),y=es(n),{referenceImages:h,characterNames:f}=await ea(n,d,o),{itemReferenceSheetUrl:k,itemReferenceItems:b,itemReferencePrompt:v}=await ta({storyData:c,characters:m,userPreferences:n,reportProgress:d,run:o}),j=[...c.pages];let S=0;const I=j.length,B=3,R=async(C,N)=>{const{prompt:O,sceneReferenceNames:T}=is({storyData:c,characters:m,page:C,narrator:y,userPreferences:n}),L=Lr({referenceImages:h,characterNames:f,sceneCharacters:T,actionText:O,itemReferenceSheetUrl:k,itemReferenceItems:b,sceneItems:C.itemsInScene}),M=await Yr({run:o,index:N,prompt:O,userPreferences:n,sceneReferences:L});M&&await p(M),j[N]={...C,imageUrl:M,fullImagePrompt:O,referenceImagesUsed:L.referenceDetails},S++,Vr(i?.onPageReady,N,M),d("progress.paintingPages",{done:S,total:I})};d("progress.paintingPages",{done:0,total:I});for(let C=0;C<I;C+=B){const N=j.slice(C,C+B).map((O,T)=>{const L=C+T;return R(O,L)});await Promise.all(N)}return d("progress.finalizing"),Kr(i?.onCreditRun,o.summary({pages:I,missingPages:Jr(j)})),{...c,gender:t,category:r,coverImageUrl:j[0]?.imageUrl||null,coverImagePrompt:j[0]?.fullImagePrompt||null,itemReferenceSheetUrl:k,itemReferenceItems:b,itemReferencePrompt:v,pages:j,imageModel:n?.imageModel||ze,referenceImages:h.length>0?h:null,characterNames:f.length>0?f:null}}catch(c){throw console.error("Gemini Generation Failed:",c),c}},Fi=async(e,t,r,a,n={},i={})=>{const d=os(a);try{d("progress.writingText");const o=await Ar(e,t,r,n,{includePrompt:!0,...i?.creditRunId?{generationRunId:i.creditRunId}:{}});d("progress.preparingPrompts");let c=o.characterDefinitions||o.characterVisualDescription||`Main character: ${e}`;o.characters&&Array.isArray(o.characters)&&(c=o.characters.map(v=>`${v.name}: ${v.description}`).join(". "));const p=o.styleDescription||`Style: ${r}`,m=ns(o,n,`Main character: ${e}`),y=es(n),{itemReferenceItems:h,itemReferencePrompt:f}=Li(o,m),k=Fn(p,c),b=o.pages.map(v=>({...v,fullImagePrompt:is({storyData:o,characters:m,page:v,narrator:y,userPreferences:n}).prompt}));return d("progress.promptsReady"),{...o,gender:t,category:r,coverImagePrompt:k,itemReferenceItems:h,itemReferencePrompt:f,pages:b,imageModel:n?.imageModel||ze,rawPrompt:o.rawPrompt}}catch(o){throw console.error("Story generation failed:",o),o}},Bi=async(e,t,r,a={},n={})=>{const i=os(r),d=mt(n?.creditRunId),o=c=>new Promise(p=>{const m=new Image;m.src=c,m.onload=p,m.onerror=p});try{i("progress.preparingPages");const c=ns(e,a),p=es(a),{referenceImages:m,characterNames:y}=await ea(a,i,d),{itemReferenceSheetUrl:h,itemReferenceItems:f,itemReferencePrompt:k}=await ta({storyData:e,characters:c,userPreferences:a,reportProgress:i,run:d}),b=(R,C)=>{const N=t?.pagePrompts?.[C];if(N)return{prompt:N,sceneCharacters:Zs(N,R.charactersInScene)};if(Oi(R.imagePrompt)||!Array.isArray(c))return{prompt:R.imagePrompt,sceneCharacters:Zs(R.imagePrompt,R.charactersInScene)};const O=_i(R.imagePrompt),{prompt:T,sceneReferenceNames:L}=is({storyData:e,characters:c,page:{...R,imagePrompt:O,charactersInScene:Array.isArray(R.charactersInScene)?R.charactersInScene:Di(c,R.text,O)},narrator:p,userPreferences:a});return{prompt:T,sceneCharacters:L}},v=[...e.pages];let j=0;const S=v.length,I=3,B=async(R,C)=>{const{prompt:N,sceneCharacters:O}=b(R,C),T=Lr({referenceImages:m,characterNames:y,sceneCharacters:O,actionText:N,itemReferenceSheetUrl:h,itemReferenceItems:f,sceneItems:R.itemsInScene}),L=await Yr({run:d,index:C,prompt:N,userPreferences:a,sceneReferences:T});L&&await o(L),v[C]={...R,imageUrl:L,fullImagePrompt:N,referenceImagesUsed:T.referenceDetails},j++,Vr(n?.onPageReady,C,L),i("progress.paintingPages",{done:j,total:S})};i("progress.paintingPages",{done:0,total:S});for(let R=0;R<S;R+=I){const C=v.slice(R,R+I).map((N,O)=>{const T=R+O;return B(N,T)});await Promise.all(C)}return i("progress.finalizing"),Kr(n?.onCreditRun,d.summary({pages:S,missingPages:Jr(v)})),{...e,title:t&&t.title?t.title:e.title,coverImageUrl:v[0]?.imageUrl||null,coverImagePrompt:v[0]?.fullImagePrompt||null,itemReferenceSheetUrl:h,itemReferenceItems:f,itemReferencePrompt:k,pages:v,imageModel:a?.imageModel||ze,referenceImages:m.length>0?m:null,characterNames:y.length>0?y:null}}catch(c){throw console.error("Image generation failed:",c),c}},hr=(e,t={},r,a)=>{const n=t||{};return{...e,targetAge:n.toddlerAge||3,heroId:n.heroId||null,generationParams:{...n,topic:r||"",category:a||null}}},Yt=e=>`/story/${e.id}/${gn(e.title)}`,xr=(e,t,r)=>{if(r?.reportsPictureOutcome)return;const a=(e?.pages||[]).filter(n=>!n.imageUrl).length;a>0&&Nr(t("errors.partialImages",{count:a}),{duration:8e3})},sa=async(e,t)=>{if(typeof e=="function")try{await e(t)}catch(r){console.warn("beforeNavigate failed:",r)}},$i=async({book:e,guestToken:t,navigate:r,guestSaveFailedMessage:a,beforeNavigate:n})=>{const i=t?`/bundle/${t}`:"/";try{const d=await Sr(e,null);return await sa(n,d),r(Yt(d),{state:{isGuest:!0,returnPath:i}}),d}catch(d){console.error("Failed to save guest story locally:",d),Nr(a,{duration:8e3});const o={...e,id:`temp_${Date.now()}`,userId:"guest"};return r(Yt(o),{state:{bookData:o,isGuest:!0,returnPath:i}}),o}},zi=async({book:e,user:t,isGuest:r,guestToken:a,navigate:n,guestSaveFailedMessage:i,beforeNavigate:d})=>{if(r||!t)return $i({book:e,guestToken:a,navigate:n,guestSaveFailedMessage:i,beforeNavigate:d});const o=await Sr(e,t.id,null,t.tier);return await sa(d,o),n(Yt(o)),o};function gl(){const{t:e}=pe("create"),{user:t,loading:r}=jr(),a=Er(),n=Tr(),i=n.state?.isGuest,d=g.useRef(null);if(r)return s.jsx("div",{className:"flex min-h-[50vh] items-center justify-center",role:"status","aria-label":e("loading","Loading story creator"),children:s.jsx("div",{className:"h-10 w-10 animate-spin rounded-full border-4 border-sage-500 border-t-transparent"})});const o=async(h,f={})=>{try{const k=await zi({book:h,user:t,isGuest:i,guestToken:n.state?.guestToken,navigate:a,guestSaveFailedMessage:e("errors.guestSaveFailed"),beforeNavigate:f?.beforeNavigate});return d.current=null,k}catch(k){throw console.error("Saving the finished story failed:",k),d.current=h,Object.assign(new Error(e("saveFailed.title")),{code:"save-failed",cause:k})}},c=async(h={})=>{const f=d.current;if(!f)throw Object.assign(new Error(e("errors.generationFailed")),{code:"nothing-to-save"});return o(f,h)},p=async(h,f,k,b,v={},j={})=>{const S=await Mi(h,f,k,b,v,j);xr(S,e,j),b?.({key:"progress.saving"}),await o(hr(S,v,h,k),j)},m=(h,f,k,b,v={},j={})=>Fi(h,f,k,b,v,j),y=async(h,f,k,b={},v={})=>{const j=await Bi(h,f,k,b,v);xr(j,e,v),k?.({key:"progress.saving"}),await o(hr(j,b,h?.topic,h?.category),v)};return s.jsx(ji,{onGenerate:p,onGeneratePromptsOnly:m,onGenerateImages:y,onRetrySave:c},t?.id||"guest")}export{gl as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.