aidol 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/{aidol-D1U55wfr.mjs → aidol-CUuPOg12.mjs} +7 -7
  2. package/dist/aidol-CUuPOg12.mjs.map +1 -0
  3. package/dist/aidol-CqvBUwd0.js +2 -0
  4. package/dist/aidol-CqvBUwd0.js.map +1 -0
  5. package/dist/client.cjs +1 -1
  6. package/dist/client.cjs.map +1 -1
  7. package/dist/client.d.ts +12 -0
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +686 -265
  10. package/dist/client.js.map +1 -1
  11. package/dist/components/Header.d.ts.map +1 -1
  12. package/dist/components/casting-board/CastingBoard.d.ts.map +1 -1
  13. package/dist/components/casting-board/CastingComplete.d.ts +8 -0
  14. package/dist/components/casting-board/CastingComplete.d.ts.map +1 -0
  15. package/dist/components/casting-board/index.d.ts +1 -0
  16. package/dist/components/casting-board/index.d.ts.map +1 -1
  17. package/dist/components/companion/Card.d.ts.map +1 -1
  18. package/dist/components/companion/ImagePreview.d.ts.map +1 -1
  19. package/dist/components/companion/ProfileContent.d.ts +5 -1
  20. package/dist/components/companion/ProfileContent.d.ts.map +1 -1
  21. package/dist/components/companion/RadarChart.d.ts +7 -0
  22. package/dist/components/companion/RadarChart.d.ts.map +1 -0
  23. package/dist/components/companion/index.d.ts +1 -0
  24. package/dist/components/companion/index.d.ts.map +1 -1
  25. package/dist/components/complete/CompleteContent.d.ts +11 -0
  26. package/dist/components/complete/CompleteContent.d.ts.map +1 -0
  27. package/dist/components/creation/BiographyInput.d.ts +7 -0
  28. package/dist/components/creation/BiographyInput.d.ts.map +1 -0
  29. package/dist/components/creation/CompanionCreateLayout.d.ts +10 -0
  30. package/dist/components/creation/CompanionCreateLayout.d.ts.map +1 -0
  31. package/dist/components/creation/CompanionNameInput.d.ts +8 -0
  32. package/dist/components/creation/CompanionNameInput.d.ts.map +1 -0
  33. package/dist/components/creation/GenderSelector.d.ts +8 -0
  34. package/dist/components/creation/GenderSelector.d.ts.map +1 -0
  35. package/dist/components/creation/MbtiForm.d.ts +13 -0
  36. package/dist/components/creation/MbtiForm.d.ts.map +1 -0
  37. package/dist/components/creation/MbtiSlider.d.ts +10 -0
  38. package/dist/components/creation/MbtiSlider.d.ts.map +1 -0
  39. package/dist/components/creation/ProfileImageGenerator.d.ts +11 -0
  40. package/dist/components/creation/ProfileImageGenerator.d.ts.map +1 -0
  41. package/dist/components/creation/ProgressBar.d.ts +6 -0
  42. package/dist/components/creation/ProgressBar.d.ts.map +1 -0
  43. package/dist/components/creation/index.d.ts +9 -0
  44. package/dist/components/creation/index.d.ts.map +1 -1
  45. package/dist/components/group-creation/Button.d.ts +12 -0
  46. package/dist/components/group-creation/Button.d.ts.map +1 -0
  47. package/dist/components/group-creation/EmblemStep.d.ts +10 -0
  48. package/dist/components/group-creation/EmblemStep.d.ts.map +1 -0
  49. package/dist/components/group-creation/GroupPlanningLayout.d.ts +10 -0
  50. package/dist/components/group-creation/GroupPlanningLayout.d.ts.map +1 -0
  51. package/dist/components/group-creation/TextInput.d.ts +10 -0
  52. package/dist/components/group-creation/TextInput.d.ts.map +1 -0
  53. package/dist/components/group-creation/index.d.ts +5 -0
  54. package/dist/components/group-creation/index.d.ts.map +1 -0
  55. package/dist/components/newsletter/NewsletterForm.d.ts +10 -0
  56. package/dist/components/newsletter/NewsletterForm.d.ts.map +1 -0
  57. package/dist/components/position/PositionBoard.d.ts +10 -0
  58. package/dist/components/position/PositionBoard.d.ts.map +1 -0
  59. package/dist/components/position/PositionSelector.d.ts +10 -0
  60. package/dist/components/position/PositionSelector.d.ts.map +1 -0
  61. package/dist/components/position/index.d.ts +3 -0
  62. package/dist/components/position/index.d.ts.map +1 -0
  63. package/dist/i18n/translations.d.ts +981 -0
  64. package/dist/i18n/translations.d.ts.map +1 -1
  65. package/dist/index.cjs +56 -10
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +219 -118
  70. package/dist/index.js.map +1 -1
  71. package/dist/repositories/AIdolRepository.d.ts +6 -6
  72. package/dist/repositories/CompanionRepository.d.ts +7 -7
  73. package/dist/repositories/LeadsRepository.d.ts +9 -0
  74. package/dist/repositories/LeadsRepository.d.ts.map +1 -0
  75. package/dist/repositories/MockCompanionRepository.d.ts +13 -0
  76. package/dist/repositories/MockCompanionRepository.d.ts.map +1 -0
  77. package/dist/repositories/index.d.ts +2 -0
  78. package/dist/repositories/index.d.ts.map +1 -1
  79. package/dist/schemas/aidol.d.ts +8 -8
  80. package/dist/schemas/aidol.d.ts.map +1 -1
  81. package/dist/schemas/companion.d.ts +15 -8
  82. package/dist/schemas/companion.d.ts.map +1 -1
  83. package/dist/schemas/index.d.ts +4 -2
  84. package/dist/schemas/index.d.ts.map +1 -1
  85. package/dist/schemas/lead.d.ts +23 -0
  86. package/dist/schemas/lead.d.ts.map +1 -0
  87. package/package.json +1 -1
  88. package/dist/aidol-D1U55wfr.mjs.map +0 -1
  89. package/dist/aidol-gZjlTwTe.js +0 -2
  90. package/dist/aidol-gZjlTwTe.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import { z as e } from "zod";
2
2
  const m = e.object({
3
3
  id: e.string(),
4
- name: e.string(),
4
+ name: e.string().nullable(),
5
5
  concept: e.string().nullable().optional(),
6
- profileImageUrl: e.string(),
6
+ profileImageUrl: e.string().nullable(),
7
7
  createdAt: e.string(),
8
8
  updatedAt: e.string()
9
- }), i = e.object({
9
+ }), n = e.object({
10
10
  name: e.string().min(1, "creation.memberNameRequired"),
11
11
  personality: e.string().optional(),
12
12
  systemPrompt: e.string().optional()
@@ -14,24 +14,24 @@ const m = e.object({
14
14
  groupName: e.string().min(1, "creation.groupNameRequired"),
15
15
  concept: e.string().optional(),
16
16
  profileImageUrl: e.string().min(1, "creation.emblemRequired"),
17
- members: e.array(i).min(1, "creation.memberRequired").refine((t) => t.some((r) => r.name.trim() !== ""), {
17
+ members: e.array(n).min(1, "creation.memberRequired").refine((t) => t.some((r) => r.name.trim() !== ""), {
18
18
  message: "creation.memberRequired"
19
19
  })
20
20
  });
21
21
  e.object({
22
22
  prompt: e.string().max(200)
23
23
  });
24
- const n = e.object({
24
+ const i = e.object({
25
25
  imageUrl: e.string(),
26
26
  width: e.number(),
27
27
  height: e.number(),
28
28
  format: e.string()
29
29
  }), s = e.object({
30
- data: n
30
+ data: i
31
31
  });
32
32
  export {
33
33
  m as a,
34
34
  o as g,
35
35
  s as i
36
36
  };
37
- //# sourceMappingURL=aidol-D1U55wfr.mjs.map
37
+ //# sourceMappingURL=aidol-CUuPOg12.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aidol-CUuPOg12.mjs","sources":["../src/schemas/aidol.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes claim_token)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for creating an AIdol group\n * claimToken is optional for anonymous ownership verification\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n claimToken?: string | null;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n"],"names":["aidolSchema","z","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema"],"mappings":";AAaO,MAAMA,IAAcC,EAAE,OAAO;AAAA,EAClC,IAAIA,EAAE,OAAA;AAAA,EACN,MAAMA,EAAE,OAAA,EAAS,SAAA;AAAA,EACjB,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,iBAAiBA,EAAE,OAAA,EAAS,SAAA;AAAA,EAC5B,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GAmCYC,IAAoBD,EAAE,OAAO;AAAA,EACxC,MAAMA,EAAE,OAAA,EAAS,IAAI,GAAG,6BAA6B;AAAA,EACrD,aAAaA,EAAE,OAAA,EAAS,SAAA;AAAA,EACxB,cAAcA,EAAE,OAAA,EAAS,SAAA;AAC3B,CAAC,GAOYE,IAAsBF,EAAE,OAAO;AAAA,EAC1C,WAAWA,EAAE,OAAA,EAAS,IAAI,GAAG,4BAA4B;AAAA,EACzD,SAASA,EAAE,OAAA,EAAS,SAAA;AAAA,EACpB,iBAAiBA,EAAE,OAAA,EAAS,IAAI,GAAG,yBAAyB;AAAA,EAC5D,SAASA,EACN,MAAMC,CAAiB,EACvB,IAAI,GAAG,yBAAyB,EAChC,OAAO,CAACE,MAAYA,EAAQ,KAAK,CAACC,MAAMA,EAAE,KAAK,WAAW,EAAE,GAAG;AAAA,IAC9D,SAAS;AAAA,EAAA,CACV;AACL,CAAC;AAW2CJ,EAAE,OAAO;AAAA,EACnD,QAAQA,EAAE,OAAA,EAAS,IAAI,GAAG;AAC5B,CAAC;AASM,MAAMK,IAA4BL,EAAE,OAAO;AAAA,EAChD,UAAUA,EAAE,OAAA;AAAA,EACZ,OAAOA,EAAE,OAAA;AAAA,EACT,QAAQA,EAAE,OAAA;AAAA,EACV,QAAQA,EAAE,OAAA;AACZ,CAAC,GAOYM,IAAgCN,EAAE,OAAO;AAAA,EACpD,MAAMK;AACR,CAAC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("zod"),n=e.z.object({id:e.z.string(),name:e.z.string().nullable(),concept:e.z.string().nullable().optional(),profileImageUrl:e.z.string().nullable(),createdAt:e.z.string(),updatedAt:e.z.string()}),i=e.z.object({name:e.z.string().min(1,"creation.memberNameRequired"),personality:e.z.string().optional(),systemPrompt:e.z.string().optional()}),a=e.z.object({groupName:e.z.string().min(1,"creation.groupNameRequired"),concept:e.z.string().optional(),profileImageUrl:e.z.string().min(1,"creation.emblemRequired"),members:e.z.array(i).min(1,"creation.memberRequired").refine(t=>t.some(r=>r.name.trim()!==""),{message:"creation.memberRequired"})});e.z.object({prompt:e.z.string().max(200)});const o=e.z.object({imageUrl:e.z.string(),width:e.z.number(),height:e.z.number(),format:e.z.string()}),m=e.z.object({data:o});exports.aidolSchema=n;exports.groupCreationSchema=a;exports.imageGenerationResponseSchema=m;
2
+ //# sourceMappingURL=aidol-CqvBUwd0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aidol-CqvBUwd0.js","sources":["../src/schemas/aidol.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes claim_token)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for creating an AIdol group\n * claimToken is optional for anonymous ownership verification\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n claimToken?: string | null;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n"],"names":["aidolSchema","z","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema"],"mappings":"oCAaaA,EAAcC,EAAAA,EAAE,OAAO,CAClC,GAAIA,EAAAA,EAAE,OAAA,EACN,KAAMA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACjB,QAASA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAC/B,gBAAiBA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAC5B,UAAWA,EAAAA,EAAE,OAAA,EACb,UAAWA,EAAAA,EAAE,OAAA,CACf,CAAC,EAmCYC,EAAoBD,EAAAA,EAAE,OAAO,CACxC,KAAMA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,6BAA6B,EACrD,YAAaA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACxB,aAAcA,EAAAA,EAAE,OAAA,EAAS,SAAA,CAC3B,CAAC,EAOYE,EAAsBF,EAAAA,EAAE,OAAO,CAC1C,UAAWA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,4BAA4B,EACzD,QAASA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACpB,gBAAiBA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,yBAAyB,EAC5D,QAASA,EAAAA,EACN,MAAMC,CAAiB,EACvB,IAAI,EAAG,yBAAyB,EAChC,OAAQE,GAAYA,EAAQ,KAAMC,GAAMA,EAAE,KAAK,SAAW,EAAE,EAAG,CAC9D,QAAS,yBAAA,CACV,CACL,CAAC,EAW2CJ,EAAAA,EAAE,OAAO,CACnD,OAAQA,EAAAA,EAAE,OAAA,EAAS,IAAI,GAAG,CAC5B,CAAC,EASM,MAAMK,EAA4BL,EAAAA,EAAE,OAAO,CAChD,SAAUA,EAAAA,EAAE,OAAA,EACZ,MAAOA,EAAAA,EAAE,OAAA,EACT,OAAQA,EAAAA,EAAE,OAAA,EACV,OAAQA,EAAAA,EAAE,OAAA,CACZ,CAAC,EAOYM,EAAgCN,EAAAA,EAAE,OAAO,CACpD,KAAMK,CACR,CAAC"}
package/dist/client.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),p=require("react-i18next"),S=require("next/image"),b=require("react"),z=require("@hookform/resolvers"),y=require("react-hook-form"),Y=require("./aidol-gZjlTwTe.js"),j=require("framer-motion");function J(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(s,r,a.get?a:{enumerable:!0,get:()=>t[r]})}}return s.default=t,Object.freeze(s)}const d=J(b);function O(t){var s,r,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var l=t.length;for(s=0;s<l;s++)t[s]&&(r=O(t[s]))&&(a&&(a+=" "),a+=r)}else for(r in t)t[r]&&(a&&(a+=" "),a+=r);return a}function h(){for(var t,s,r=0,a="",l=arguments.length;r<l;r++)(t=arguments[r])&&(s=O(t))&&(a&&(a+=" "),a+=s);return a}function Q({title:t,titleId:s,...r},a){return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?d.createElement("title",{id:s},t):null,d.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 12.75 6 6 9-13.5"}))}const X=d.forwardRef(Q);function ee({title:t,titleId:s,...r},a){return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?d.createElement("title",{id:s},t):null,d.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4.5v15m7.5-7.5h-15"}))}const te=d.forwardRef(ee);function se({title:t,titleId:s,...r},a){return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?d.createElement("title",{id:s},t):null,d.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z"}))}const ae=d.forwardRef(se);function re({title:t,titleId:s,...r},a){return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?d.createElement("title",{id:s},t):null,d.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"}))}const ne=d.forwardRef(re);function le({title:t,titleId:s,...r},a){return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":s},r),t?d.createElement("title",{id:s},t):null,d.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"}))}const oe=d.forwardRef(le),ie={default:"size-profile",profile:"size-full"};function w({url:t,alt:s,variant:r="default"}){return e.jsx("div",{className:h("border-base-300 bg-base-200 relative overflow-hidden rounded-lg border",ie[r]),children:t?e.jsx(S,{src:t,alt:s,fill:!0,className:"size-full object-cover"}):e.jsx("div",{className:"flex size-full items-center justify-center",children:e.jsx(oe,{className:"text-base-content/50 size-1/2"})})})}function U({companion:t,variant:s="grade",onClick:r}){const{t:a}=p.useTranslation(),l=t.aidolId!==null,o=s==="position",n=s==="castingBoard",i=r&&(!l||n);return e.jsxs("div",{className:h("h-card max-w-card border-base-300 relative isolate w-full overflow-hidden rounded-lg border",i&&"cursor-pointer"),onClick:i?r:void 0,role:i?"button":void 0,tabIndex:i?0:void 0,onKeyDown:i?c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),r())}:void 0,children:[e.jsx("div",{className:"absolute inset-0",children:e.jsx(w,{url:t.profilePictureUrl,alt:t.name??"",variant:"profile"})}),l&&!n&&e.jsx("div",{className:"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm"}),l&&!n&&e.jsx("div",{className:"absolute top-4 left-4 z-20",children:e.jsx("span",{className:"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1",children:a("companion.signed")})}),e.jsx("div",{className:h("absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent",l&&!n&&"opacity-20",o&&"opacity-30",(!l||n)&&!o&&"opacity-60")}),e.jsxs("div",{className:"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2",children:[e.jsx("span",{className:"text-title-s text-white",children:t.name??""}),!o&&e.jsx("span",{className:"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white",children:a("companion.grade",{grade:t.grade})}),o&&e.jsx("span",{className:"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1",children:t.position})]})]})}function ce({companions:t,onCompanionClick:s}){const{t:r}=p.useTranslation();return e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-title-l mb-4 font-semibold",children:r("aidol:aidol.members")}),t&&t.length>0?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx(U,{companion:a,onClick:()=>s(a.id)},a.id))}):e.jsx("p",{className:"text-base-content/50 text-center",children:r("aidol:aidol.noMembers")})]})}function de({aidol:t}){return e.jsxs("div",{className:"flex flex-col items-center gap-4 py-8 text-center",children:[e.jsx("div",{className:"bg-base-200 relative size-32 overflow-hidden rounded-full",children:t.profileImageUrl?e.jsx(S,{src:t.profileImageUrl,alt:t.name,fill:!0,className:"object-cover"}):e.jsx("div",{className:"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br",children:e.jsx(ne,{className:"text-base-content/50 size-16"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-display-s text-base-content font-bold",children:t.name}),t.concept&&e.jsx("p",{className:"text-body-l text-base-content/70 mt-2",children:t.concept})]})]})}function G({onClick:t,isLoading:s}){const{t:r}=p.useTranslation();return e.jsx("button",{onClick:t,disabled:s,className:"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):e.jsxs(e.Fragment,{children:[e.jsx(te,{className:"size-5"}),r("aidol:companion.addMember")]})})}const E=b.forwardRef(({placeholder:t,maxLength:s=500,charCount:r,...a},l)=>{const{t:o}=p.useTranslation();return e.jsxs("div",{className:"w-full",children:[e.jsx("textarea",{ref:l,placeholder:t??o("aidol:companion.promptPlaceholder"),maxLength:s,className:"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden",...a}),e.jsxs("div",{className:"text-label-s text-base-content/50 mt-1 text-right",children:[r??0,"/",s]})]})});E.displayName="PromptInput";const I=b.forwardRef(({options:t,...s},r)=>{const{t:a}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.concept")}),e.jsxs("select",{ref:r,className:"select bg-base-100 text-base-content w-full",...s,children:[e.jsx("option",{value:"",children:a("aidol:creation.selectConcept")}),t.map(l=>e.jsx("option",{value:l.value,children:l.label},l.value))]})]})});I.displayName="ConceptSelector";function B({onGenerate:t,isGenerating:s,disabled:r}){const{t:a}=p.useTranslation(),[l,o]=b.useState(""),n=()=>{l.trim()&&t(l)},i=c=>{c.key==="Enter"&&l.trim()&&!s&&!r&&(c.preventDefault(),n())};return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:l,onChange:c=>o(c.target.value),onKeyDown:i,placeholder:a("aidol:creation.emblemPromptPlaceholder"),maxLength:200,className:"input flex-1",disabled:r||s,"data-testid":"emblem-prompt-input"}),e.jsx("button",{type:"button",onClick:n,disabled:r||s||!l.trim(),className:"btn btn-secondary","data-testid":"emblem-generate-button",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):a("aidol:creation.generate")})]}),s&&e.jsx("div",{className:"mt-2",children:e.jsx("progress",{className:"progress w-full"})})]})}var me=function(t,s){for(var r={};t.length;){var a=t[0],l=a.code,o=a.message,n=a.path.join(".");if(!r[n])if("unionErrors"in a){var i=a.unionErrors[0].errors[0];r[n]={message:i.message,type:i.code}}else r[n]={message:o,type:l};if("unionErrors"in a&&a.unionErrors.forEach(function(C){return C.errors.forEach(function(g){return t.push(g)})}),s){var c=r[n].types,x=c&&c[a.code];r[n]=y.appendErrors(n,s,r,l,x?[].concat(x,a.message):a.message)}t.shift()}return r},ue=function(t,s,r){return r===void 0&&(r={}),function(a,l,o){try{return Promise.resolve((function(n,i){try{var c=Promise.resolve(t[r.mode==="sync"?"parse":"parseAsync"](a,s)).then(function(x){return o.shouldUseNativeValidation&&z.validateFieldsNatively({},o),{errors:{},values:r.raw?a:x}})}catch(x){return i(x)}return c&&c.then?c.then(void 0,i):c})(0,function(n){if((function(i){return Array.isArray(i?.errors)})(n))return{values:{},errors:z.toNestErrors(me(n.errors,!o.shouldUseNativeValidation&&o.criteriaMode==="all"),o)};throw n}))}catch(n){return Promise.reject(n)}}};const P=b.forwardRef(({error:t,...s},r)=>{const{t:a}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.groupName")}),e.jsx("input",{ref:r,type:"text",placeholder:a("aidol:creation.groupNamePlaceholder"),className:h("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});P.displayName="GroupNameInput";const M=b.forwardRef(({error:t,...s},r)=>{const{t:a}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.memberName")}),e.jsx("input",{ref:r,type:"text",placeholder:a("aidol:creation.memberNamePlaceholder"),className:h("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});M.displayName="MemberNameInput";function $({value:t,onChange:s,options:r}){const{t:a}=p.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:a("aidol:creation.personality")}),e.jsx("div",{className:"space-y-2",children:r.map(l=>e.jsxs("label",{className:h("flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors",t===l.value?"border-primary bg-primary/10":"border-base-300 hover:border-base-content/30"),children:[e.jsx("input",{type:"radio",name:"personality",value:l.value,checked:t===l.value,onChange:o=>s(o.target.value),className:"radio-primary radio mt-0.5"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-base-content font-medium",children:l.label}),l.description&&e.jsx("div",{className:"text-body-s text-base-content/70 mt-1",children:l.description})]})]},l.value))})]})}function F({currentStep:t,totalSteps:s,labels:r}){return e.jsx("ul",{className:"steps w-full",children:Array.from({length:s},(a,l)=>{const o=l+1,n=o<t,i=o===t;return e.jsx("li",{className:h("step",(n||i)&&"step-primary"),children:r?.[l]??""},o)})})}const pe=["cute","cool","elegant","powerful"],be=["cheerful","cool","tsundere","gentle"];function xe({onSubmit:t,onComplete:s,onGenerateImage:r,isLoading:a,isGeneratingImage:l,isCompleted:o}){const{t:n}=p.useTranslation(),[i,c]=b.useState(o?3:1),x=b.useMemo(()=>pe.map(m=>({value:m,label:n(`aidol:creation.concepts.${m}`)})),[n]),C=b.useMemo(()=>be.map(m=>({value:m,label:n(`aidol:creation.personalities.${m}.label`),description:n(`aidol:creation.personalities.${m}.description`)})),[n]),{register:g,control:T,handleSubmit:L,trigger:q,watch:R,setValue:D,formState:{errors:f}}=y.useForm({resolver:ue(Y.groupCreationSchema),defaultValues:{groupName:"",concept:"",profileImageUrl:"",members:[{name:"",personality:"",systemPrompt:""}]}}),k=R("profileImageUrl"),{fields:Z,append:_}=y.useFieldArray({control:T,name:"members"}),A=R("members"),V=async m=>{const u=await r(m);u&&D("profileImageUrl",u)},H=async()=>{await q(["groupName","profileImageUrl"])&&c(2)},K=L(async m=>{const u=m.members.filter(N=>N.name.trim());await t({...m,members:u}),c(3)}),W=()=>{_({name:"",personality:"",systemPrompt:""})};return e.jsx("main",{className:"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20",children:e.jsxs("div",{className:"w-full max-w-lg",children:[e.jsx(F,{currentStep:i,totalSteps:3,labels:[n("aidol:creation.step1"),n("aidol:creation.step2"),n("aidol:creation.step3")]}),e.jsxs("div",{className:"mt-8",children:[i===1&&e.jsxs("div",{className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step1Title")}),e.jsx(P,{...g("groupName"),error:f.groupName?.message?n(f.groupName.message,{ns:"aidol"}):void 0}),e.jsx(I,{...g("concept"),options:x}),e.jsxs("fieldset",{className:"fieldset",children:[e.jsx("label",{className:"label",children:n("aidol:creation.emblem")}),e.jsx(B,{onGenerate:V,isGenerating:l,disabled:a}),k&&e.jsx("div",{className:"mt-2 flex justify-center",children:e.jsx(w,{url:k,alt:n("aidol:creation.emblem")})}),f.profileImageUrl?.message&&e.jsx("p",{className:"text-label-m text-error mt-1",children:n(f.profileImageUrl.message,{ns:"aidol"})})]}),e.jsx("button",{type:"button",onClick:H,disabled:!k,className:"btn btn-primary w-full",children:n("aidol:creation.next")})]}),i===2&&e.jsxs("form",{onSubmit:K,className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step2Title")}),Z.map((m,u)=>e.jsxs("div",{className:"border-base-300 space-y-4 rounded-lg border p-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(w,{url:null,alt:A[u]?.name??""}),e.jsx("div",{className:"flex-1",children:e.jsx(M,{...g(`members.${u}.name`),error:f.members?.[u]?.name?.message?n(f.members?.[u]?.name?.message??"",{ns:"aidol"}):void 0})})]}),e.jsx(y.Controller,{name:`members.${u}.personality`,control:T,render:({field:N})=>e.jsx($,{value:N.value??"",onChange:N.onChange,options:C})}),e.jsx(E,{...g(`members.${u}.systemPrompt`),charCount:A[u]?.systemPrompt?.length??0})]},m.id)),e.jsx(G,{onClick:W,isLoading:!1}),f.members?.root?.message&&e.jsx("p",{className:"text-error text-center",children:n(f.members.root.message,{ns:"aidol"})}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx("button",{type:"button",onClick:()=>c(1),className:"btn btn-ghost flex-1",disabled:a,children:n("aidol:creation.back")}),e.jsx("button",{type:"submit",className:"btn btn-primary flex-1",disabled:a,children:a?e.jsx("span",{className:"loading loading-spinner loading-sm"}):n("aidol:creation.create")})]})]}),i===3&&e.jsxs("div",{className:"space-y-6 text-center",children:[e.jsx("div",{className:"text-display-l",children:"🎉"}),e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.completeTitle")}),e.jsx("p",{className:"text-body-l text-base-content/70",children:n("aidol:creation.completeDescription")}),e.jsx("button",{onClick:s,className:"btn btn-primary w-full",children:n("aidol:creation.viewProfile")})]})]})]})})}const v={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},fe={animate:{transition:{staggerChildren:.15}}};function he({onGetStarted:t}){const{t:s}=p.useTranslation();return e.jsx("section",{className:"bg-base-100 flex min-h-screen w-full flex-col items-center px-6 pt-12 pb-8",children:e.jsxs(j.motion.div,{variants:fe,initial:"initial",animate:"animate",className:"flex w-full flex-col items-center text-center",children:[e.jsx(j.motion.div,{variants:v,className:"mb-6",children:e.jsx(S,{src:"/images/logo.svg",alt:"AIdol",width:92,height:28,priority:!0})}),e.jsxs(j.motion.h1,{variants:v,className:"text-display-s mb-3",children:[s("aidol:landing.hero.title.line1"),e.jsx("br",{}),s("aidol:landing.hero.title.line2")]}),e.jsxs(j.motion.div,{variants:v,className:"text-headline-s text-base-content mb-8 flex flex-col",children:[e.jsx("p",{className:"text-neutral",children:s("aidol:landing.hero.line1")}),e.jsx("p",{className:"text-neutral",children:s("aidol:landing.hero.line2")}),e.jsx("p",{children:s("aidol:landing.hero.line3")}),e.jsx("p",{children:s("aidol:landing.hero.line4")})]}),e.jsx(j.motion.div,{variants:v,className:"bg-base-200 relative mb-6 aspect-[345/368] w-full overflow-hidden rounded-lg"}),e.jsx(j.motion.div,{variants:v,className:"w-full",children:e.jsx("button",{onClick:t,className:"btn btn-primary btn-lg text-label-l w-full rounded-lg",children:s("aidol:landing.hero.cta")})})]})})}function ge({url:t,onCopySuccess:s}){const{t:r}=p.useTranslation(),[a,l]=b.useState(!1),o=b.useCallback(async()=>{await navigator.clipboard.writeText(t),l(!0),s?.(),setTimeout(()=>l(!1),2e3)},[t,s]);return e.jsx("button",{onClick:o,className:"btn btn-circle btn-ghost","aria-label":r("aidol:share"),children:a?e.jsx(X,{className:"text-success size-6"}):e.jsx(ae,{className:"size-6"})})}exports.AddMemberButton=G;exports.Card=U;exports.CompanionGrid=ce;exports.ConceptSelector=I;exports.EmblemGenerator=B;exports.GroupCreation=xe;exports.GroupHeader=de;exports.GroupNameInput=P;exports.HeroSection=he;exports.ImagePreview=w;exports.MemberNameInput=M;exports.PersonalitySelector=$;exports.PromptInput=E;exports.ShareButton=ge;exports.StepIndicator=F;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react-i18next"),M=require("next/image"),g=require("react"),O=require("@hookform/resolvers"),E=require("react-hook-form"),Q=require("./aidol-CqvBUwd0.js"),v=require("framer-motion");function ee(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const l=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(s,a,l.get?l:{enumerable:!0,get:()=>t[a]})}}return s.default=t,Object.freeze(s)}const m=ee(g);function G(t){var s,a,l="";if(typeof t=="string"||typeof t=="number")l+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(s=0;s<r;s++)t[s]&&(a=G(t[s]))&&(l&&(l+=" "),l+=a)}else for(a in t)t[a]&&(l&&(l+=" "),l+=a);return l}function j(){for(var t,s,a=0,l="",r=arguments.length;a<r;a++)(t=arguments[a])&&(s=G(t))&&(l&&(l+=" "),l+=s);return l}function te({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 12.75 6 6 9-13.5"}))}const ae=m.forwardRef(te);function se({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4.5v15m7.5-7.5h-15"}))}const le=m.forwardRef(se);function ne({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z"}))}const re=m.forwardRef(ne);function oe({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z"}))}const ie=m.forwardRef(oe);function ce({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"}))}const de=m.forwardRef(ce);function me({title:t,titleId:s,...a},l){return m.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:l,"aria-labelledby":s},a),t?m.createElement("title",{id:s},t):null,m.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"}))}const ue=m.forwardRef(me),pe={default:"size-profile",profile:"size-full"};function k({url:t,alt:s,variant:a="default"}){return e.jsx("div",{className:j("border-base-300 bg-base-200 relative overflow-hidden rounded-lg border",pe[a]),children:t?e.jsx(M,{src:t,alt:s,fill:!0,draggable:!1,className:"size-full object-cover"}):e.jsx("div",{className:"flex size-full items-center justify-center",children:e.jsx(ue,{className:"text-base-content/50 size-1/2"})})})}function B({companion:t,variant:s="grade",onClick:a}){const{t:l}=u.useTranslation(),o=t.aidolId!==null&&s==="grade",n=a&&!o,i=s==="position"?"opacity-30":o?"opacity-20":"opacity-60",c=s==="position"?t.position?l(`aidol:position.${t.position}`):l("aidol:position.unassigned"):l("companion.grade",{grade:t.grade});return e.jsxs("div",{className:j("h-card max-w-card border-base-300 relative isolate w-full overflow-hidden rounded-lg border",n&&"cursor-pointer"),onClick:n?a:void 0,role:n?"button":void 0,tabIndex:n?0:void 0,onKeyDown:n?p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),a())}:void 0,children:[e.jsx("div",{className:"absolute inset-0",children:e.jsx(k,{url:t.profilePictureUrl,alt:t.name??"",variant:"profile"})}),o&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm"}),e.jsx("div",{className:"absolute top-4 left-4 z-20",children:e.jsx("span",{className:"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1",children:l("companion.signed")})})]}),e.jsx("div",{className:j("absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent",i)}),e.jsxs("div",{className:"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2",children:[e.jsx("span",{className:"text-title-s text-white",children:t.name}),e.jsx("span",{className:"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white",children:c})]})]})}function xe({companions:t,onCompanionClick:s}){const{t:a}=u.useTranslation();return e.jsxs("div",{className:"mt-8",children:[e.jsx("h2",{className:"text-title-l mb-4 font-semibold",children:a("aidol:aidol.members")}),t&&t.length>0?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:t.map(l=>e.jsx(B,{companion:l,onClick:()=>s(l.id)},l.id))}):e.jsx("p",{className:"text-base-content/50 text-center",children:a("aidol:aidol.noMembers")})]})}function be({aidol:t}){return e.jsxs("div",{className:"flex flex-col items-center gap-4 py-8 text-center",children:[e.jsx("div",{className:"bg-base-200 relative size-32 overflow-hidden rounded-full",children:t.profileImageUrl?e.jsx(M,{src:t.profileImageUrl,alt:t.name??"Group",fill:!0,className:"object-cover"}):e.jsx("div",{className:"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br",children:e.jsx(de,{className:"text-base-content/50 size-16"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-display-s text-base-content font-bold",children:t.name}),t.concept&&e.jsx("p",{className:"text-body-l text-base-content/70 mt-2",children:t.concept})]})]})}function U({onClick:t,isLoading:s}){const{t:a}=u.useTranslation();return e.jsx("button",{onClick:t,disabled:s,className:"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):e.jsxs(e.Fragment,{children:[e.jsx(le,{className:"size-5"}),a("aidol:companion.addMember")]})})}const I=["vocal","dance","rap","visual","stamina","charm"];function fe({stats:t}){const{t:s}=u.useTranslation(),a=260,l=a/2,r=70,o=100,n=(d,x)=>{const b=Math.PI*2*d/6-Math.PI/3,y=x/100*r;return{x:l+y*Math.cos(b),y:l+y*Math.sin(b)}},i=d=>{const x=Math.PI*2*d/6-Math.PI/3;return{x:l+o*Math.cos(x),y:l+o*Math.sin(x)}},c=I.map((d,x)=>n(x,t[d])),p=c.map(d=>`${d.x},${d.y}`).join(" "),w=[20,40,60,80,100];return e.jsx("div",{className:"flex items-center justify-center",children:e.jsxs("svg",{width:a,height:a,viewBox:`0 0 ${a} ${a}`,children:[w.map(d=>{const b=I.map((y,P)=>n(P,d)).map(y=>`${y.x},${y.y}`).join(" ");return e.jsx("polygon",{points:b,fill:"none",stroke:"currentColor",strokeWidth:"1",className:"text-base-300"},d)}),I.map((d,x)=>{const b=n(x,100);return e.jsx("line",{x1:l,y1:l,x2:b.x,y2:b.y,stroke:"currentColor",strokeWidth:"1",className:"text-base-300"},x)}),e.jsx("polygon",{points:p,fill:"currentColor",fillOpacity:"0.3",stroke:"currentColor",strokeWidth:"2",className:"text-secondary"}),c.map((d,x)=>e.jsx("circle",{cx:d.x,cy:d.y,r:"3",fill:"currentColor",className:"text-secondary"},x)),I.map((d,x)=>{const b=i(x);return e.jsxs("g",{children:[e.jsx("text",{x:b.x,y:b.y-8,textAnchor:"middle",dominantBaseline:"middle",className:"text-label-l fill-base-content font-medium",children:s(`aidol:casting.abilities.${d}`)}),e.jsx("text",{x:b.x,y:b.y+10,textAnchor:"middle",dominantBaseline:"middle",className:"text-label-l fill-secondary font-medium",children:t[d]})]},d)})]})})}function he({companion:t,showBiography:s=!0,showStats:a=!0}){const{t:l}=u.useTranslation(),{name:r,profilePictureUrl:o,grade:n,mbti:i,biography:c,stats:p}=t;return e.jsxs("div",{className:"flex flex-col items-center gap-6",children:[e.jsx(k,{url:o??null,alt:r??""}),e.jsxs("div",{className:"flex flex-col gap-2 self-start",children:[e.jsx("h2",{className:"text-title-s text-base-content font-semibold",children:r??""}),(n||i)&&e.jsxs("div",{className:"flex gap-2",children:[n&&e.jsx("span",{className:"text-label-l bg-base-content text-base-100 rounded-lg px-2 py-1",children:l("aidol:companion.grade",{grade:n})}),i&&e.jsx("span",{className:"text-label-l bg-base-content text-base-100 rounded-lg px-2 py-1",children:i})]})]}),s&&c&&e.jsx("p",{className:"text-body-s text-base-content",children:c}),a&&p&&e.jsx(fe,{stats:p})]})}const T=g.forwardRef(({placeholder:t,maxLength:s=500,charCount:a,...l},r)=>{const{t:o}=u.useTranslation();return e.jsxs("div",{className:"w-full",children:[e.jsx("textarea",{ref:r,placeholder:t??o("aidol:companion.promptPlaceholder"),maxLength:s,className:"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden",...l}),e.jsxs("div",{className:"text-label-s text-base-content/50 mt-1 text-right",children:[a??0,"/",s]})]})});T.displayName="PromptInput";function ge({value:t,onChange:s}){const{t:a}=u.useTranslation();return e.jsx("input",{type:"text",value:t,onChange:l=>s(l.target.value),placeholder:a("aidol:companionCreate.complete.bioPlaceholder"),className:"input w-full bg-white text-black"})}function je({title:t,rightContent:s}){return e.jsxs("header",{className:"h-header bg-base-100 flex shrink-0 items-center justify-between px-6 py-4",children:[e.jsx("h1",{className:"text-headline-s text-base-content",children:t}),s&&e.jsx("div",{className:"flex max-w-40 shrink-0 items-center",children:s})]})}function F({progress:t}){const s=Math.min(100,Math.max(0,t));return e.jsx("div",{className:"bg-primary/20 h-3 w-full overflow-hidden rounded-full",children:e.jsx("div",{className:"bg-primary h-full rounded-full transition-all duration-500 ease-out",style:{width:`${s}%`}})})}function ye({step:t,totalSteps:s,children:a,bottomButton:l}){const{t:r}=u.useTranslation(),o=t/s*100;return e.jsxs("div",{className:"flex min-h-dvh flex-col",children:[e.jsx(je,{title:r("aidol:companionCreate.title")}),e.jsx("div",{className:"px-6 py-4",children:e.jsx(F,{progress:o})}),e.jsx("div",{className:"flex flex-1 flex-col gap-6 p-6",children:a}),e.jsx("div",{className:"sticky bottom-0 p-6",children:l})]})}const Ne=/[!@#$%^&*()+=[\]{}|\\;:'",.<>?/`~_]/g;function ve({value:t,onChange:s,maxLength:a=10}){const{t:l}=u.useTranslation();return e.jsx("input",{type:"text",value:t,onChange:r=>s(r.target.value.replace(Ne,"").slice(0,a)),placeholder:l("aidol:companionCreate.complete.namePlaceholder"),className:"input w-full bg-white text-black"})}const R=g.forwardRef(({options:t,...s},a)=>{const{t:l}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:l("aidol:creation.concept")}),e.jsxs("select",{ref:a,className:"select bg-base-100 text-base-content w-full",...s,children:[e.jsx("option",{value:"",children:l("aidol:creation.selectConcept")}),t.map(r=>e.jsx("option",{value:r.value,children:r.label},r.value))]})]})});R.displayName="ConceptSelector";function we({value:t,onChange:s}){const{t:a}=u.useTranslation(),l=[{gender:"female",label:a("aidol:companionCreate.gender.female")},{gender:"male",label:a("aidol:companionCreate.gender.male")}];return e.jsx("div",{className:"flex gap-4",children:l.map(({gender:r,label:o})=>e.jsx("button",{type:"button",onClick:()=>s(r),className:j("text-label-l flex-1 rounded-lg border px-6 py-3 transition-colors",t===r?"border-primary text-primary bg-white":"border-base-300 text-base-content bg-white"),children:o},r))})}function _({onGenerate:t,isGenerating:s,disabled:a}){const{t:l}=u.useTranslation(),[r,o]=g.useState(""),n=()=>{r.trim()&&t(r)},i=c=>{c.key==="Enter"&&r.trim()&&!s&&!a&&(c.preventDefault(),n())};return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:r,onChange:c=>o(c.target.value),onKeyDown:i,placeholder:l("aidol:creation.emblemPromptPlaceholder"),maxLength:200,className:"input flex-1",disabled:a||s,"data-testid":"emblem-prompt-input"}),e.jsx("button",{type:"button",onClick:n,disabled:a||s||!r.trim(),className:"btn btn-secondary","data-testid":"emblem-generate-button",children:s?e.jsx("span",{className:"loading loading-spinner loading-sm"}):l("aidol:creation.generate")})]}),s&&e.jsx("div",{className:"mt-2",children:e.jsx("progress",{className:"progress w-full"})})]})}var Ce=function(t,s){for(var a={};t.length;){var l=t[0],r=l.code,o=l.message,n=l.path.join(".");if(!a[n])if("unionErrors"in l){var i=l.unionErrors[0].errors[0];a[n]={message:i.message,type:i.code}}else a[n]={message:o,type:r};if("unionErrors"in l&&l.unionErrors.forEach(function(w){return w.errors.forEach(function(d){return t.push(d)})}),s){var c=a[n].types,p=c&&c[l.code];a[n]=E.appendErrors(n,s,a,r,p?[].concat(p,l.message):l.message)}t.shift()}return a},ke=function(t,s,a){return a===void 0&&(a={}),function(l,r,o){try{return Promise.resolve((function(n,i){try{var c=Promise.resolve(t[a.mode==="sync"?"parse":"parseAsync"](l,s)).then(function(p){return o.shouldUseNativeValidation&&O.validateFieldsNatively({},o),{errors:{},values:a.raw?l:p}})}catch(p){return i(p)}return c&&c.then?c.then(void 0,i):c})(0,function(n){if((function(i){return Array.isArray(i?.errors)})(n))return{values:{},errors:O.toNestErrors(Ce(n.errors,!o.shouldUseNativeValidation&&o.criteriaMode==="all"),o)};throw n}))}catch(n){return Promise.reject(n)}}};const A=g.forwardRef(({error:t,...s},a)=>{const{t:l}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:l("aidol:creation.groupName")}),e.jsx("input",{ref:a,type:"text",placeholder:l("aidol:creation.groupNamePlaceholder"),className:j("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});A.displayName="GroupNameInput";const $=g.forwardRef(({error:t,...s},a)=>{const{t:l}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:l("aidol:creation.memberName")}),e.jsx("input",{ref:a,type:"text",placeholder:l("aidol:creation.memberNamePlaceholder"),className:j("input bg-base-100 text-base-content placeholder:text-base-content/50 w-full",t&&"input-error"),...s}),t&&e.jsx("span",{className:"text-label-m text-error",children:t})]})});$.displayName="MemberNameInput";function Z({value:t,onChange:s,options:a}){const{t:l}=u.useTranslation();return e.jsxs("fieldset",{className:"fieldset w-full",children:[e.jsx("label",{className:"label",children:l("aidol:creation.personality")}),e.jsx("div",{className:"space-y-2",children:a.map(r=>e.jsxs("label",{className:j("flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors",t===r.value?"border-primary bg-primary/10":"border-base-300 hover:border-base-content/30"),children:[e.jsx("input",{type:"radio",name:"personality",value:r.value,checked:t===r.value,onChange:o=>s(o.target.value),className:"radio-primary radio mt-0.5"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-base-content font-medium",children:r.label}),r.description&&e.jsx("div",{className:"text-body-s text-base-content/70 mt-1",children:r.description})]})]},r.value))})]})}function q({currentStep:t,totalSteps:s,labels:a}){return e.jsx("ul",{className:"steps w-full",children:Array.from({length:s},(l,r)=>{const o=r+1,n=o<t,i=o===t;return e.jsx("li",{className:j("step",(n||i)&&"step-primary"),children:a?.[r]??""},o)})})}const Pe=["cute","cool","elegant","powerful"],Se=["cheerful","cool","tsundere","gentle"];function Ie({onSubmit:t,onComplete:s,onGenerateImage:a,isLoading:l,isGeneratingImage:r,isCompleted:o}){const{t:n}=u.useTranslation(),[i,c]=g.useState(o?3:1),p=g.useMemo(()=>Pe.map(f=>({value:f,label:n(`aidol:creation.concepts.${f}`)})),[n]),w=g.useMemo(()=>Se.map(f=>({value:f,label:n(`aidol:creation.personalities.${f}.label`),description:n(`aidol:creation.personalities.${f}.description`)})),[n]),{register:d,control:x,handleSubmit:b,trigger:y,watch:P,setValue:D,formState:{errors:N}}=E.useForm({resolver:ke(Q.groupCreationSchema),defaultValues:{groupName:"",concept:"",profileImageUrl:"",members:[{name:"",personality:"",systemPrompt:""}]}}),L=P("profileImageUrl"),{fields:H,append:K}=E.useFieldArray({control:x,name:"members"}),z=P("members"),V=async f=>{const h=await a(f);h&&D("profileImageUrl",h)},Y=async()=>{await y(["groupName","profileImageUrl"])&&c(2)},X=b(async f=>{const h=f.members.filter(S=>S.name.trim());await t({...f,members:h}),c(3)}),J=()=>{K({name:"",personality:"",systemPrompt:""})};return e.jsx("main",{className:"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20",children:e.jsxs("div",{className:"w-full max-w-lg",children:[e.jsx(q,{currentStep:i,totalSteps:3,labels:[n("aidol:creation.step1"),n("aidol:creation.step2"),n("aidol:creation.step3")]}),e.jsxs("div",{className:"mt-8",children:[i===1&&e.jsxs("div",{className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step1Title")}),e.jsx(A,{...d("groupName"),error:N.groupName?.message?n(N.groupName.message,{ns:"aidol"}):void 0}),e.jsx(R,{...d("concept"),options:p}),e.jsxs("fieldset",{className:"fieldset",children:[e.jsx("label",{className:"label",children:n("aidol:creation.emblem")}),e.jsx(_,{onGenerate:V,isGenerating:r,disabled:l}),L&&e.jsx("div",{className:"mt-2 flex justify-center",children:e.jsx(k,{url:L,alt:n("aidol:creation.emblem")})}),N.profileImageUrl?.message&&e.jsx("p",{className:"text-label-m text-error mt-1",children:n(N.profileImageUrl.message,{ns:"aidol"})})]}),e.jsx("button",{type:"button",onClick:Y,disabled:!L,className:"btn btn-primary w-full",children:n("aidol:creation.next")})]}),i===2&&e.jsxs("form",{onSubmit:X,className:"space-y-6",children:[e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.step2Title")}),H.map((f,h)=>e.jsxs("div",{className:"border-base-300 space-y-4 rounded-lg border p-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(k,{url:null,alt:z[h]?.name??""}),e.jsx("div",{className:"flex-1",children:e.jsx($,{...d(`members.${h}.name`),error:N.members?.[h]?.name?.message?n(N.members?.[h]?.name?.message??"",{ns:"aidol"}):void 0})})]}),e.jsx(E.Controller,{name:`members.${h}.personality`,control:x,render:({field:S})=>e.jsx(Z,{value:S.value??"",onChange:S.onChange,options:w})}),e.jsx(T,{...d(`members.${h}.systemPrompt`),charCount:z[h]?.systemPrompt?.length??0})]},f.id)),e.jsx(U,{onClick:J,isLoading:!1}),N.members?.root?.message&&e.jsx("p",{className:"text-error text-center",children:n(N.members.root.message,{ns:"aidol"})}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx("button",{type:"button",onClick:()=>c(1),className:"btn btn-ghost flex-1",disabled:l,children:n("aidol:creation.back")}),e.jsx("button",{type:"submit",className:"btn btn-primary flex-1",disabled:l,children:l?e.jsx("span",{className:"loading loading-spinner loading-sm"}):n("aidol:creation.create")})]})]}),i===3&&e.jsxs("div",{className:"space-y-6 text-center",children:[e.jsx("div",{className:"text-display-l",children:"🎉"}),e.jsx("h2",{className:"text-display-s font-bold",children:n("aidol:creation.completeTitle")}),e.jsx("p",{className:"text-body-l text-base-content/70",children:n("aidol:creation.completeDescription")}),e.jsx("button",{onClick:s,className:"btn btn-primary w-full",children:n("aidol:creation.viewProfile")})]})]})]})})}function W({label:t,leftLabel:s,rightLabel:a,value:l,onChange:r}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-label-l text-base-content",children:t}),e.jsx("input",{type:"range",min:1,max:10,step:1,value:l,onChange:o=>r(Number(o.target.value)),className:"range range-primary range-sm"}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-label-m text-primary",children:s}),e.jsx("span",{className:"text-label-m text-primary",children:a})]})]})}function Ee({values:t,onChange:s}){const{t:a}=u.useTranslation(),l=[{key:"energy",label:a("aidol:companionCreate.personality.energy"),leftLabel:a("aidol:companionCreate.personality.energyLeft"),rightLabel:a("aidol:companionCreate.personality.energyRight")},{key:"perception",label:a("aidol:companionCreate.personality.perception"),leftLabel:a("aidol:companionCreate.personality.perceptionLeft"),rightLabel:a("aidol:companionCreate.personality.perceptionRight")},{key:"judgment",label:a("aidol:companionCreate.personality.judgment"),leftLabel:a("aidol:companionCreate.personality.judgmentLeft"),rightLabel:a("aidol:companionCreate.personality.judgmentRight")},{key:"lifestyle",label:a("aidol:companionCreate.personality.lifestyle"),leftLabel:a("aidol:companionCreate.personality.lifestyleLeft"),rightLabel:a("aidol:companionCreate.personality.lifestyleRight")}];return e.jsx("div",{className:"flex flex-col gap-6",children:l.map(({key:r,label:o,leftLabel:n,rightLabel:i})=>e.jsx(W,{label:o,leftLabel:n,rightLabel:i,value:t[r],onChange:c=>s({...t,[r]:c})},r))})}function Me({prompt:t,onPromptChange:s,onGenerate:a,isGenerating:l,imageUrl:r,hasGenerated:o}){const{t:n}=u.useTranslation();return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("input",{type:"text",value:t,onChange:i=>s(i.target.value),placeholder:n("aidol:companionCreate.image.promptPlaceholder"),className:"input w-full bg-white text-black"}),e.jsxs("button",{type:"button",onClick:a,disabled:l||!t.trim(),className:"btn btn-primary w-full",children:[l&&e.jsx("span",{className:"loading loading-spinner"}),n(o?"aidol:companionCreate.image.regenerate":"aidol:companionCreate.image.generate")]}),r?e.jsx("div",{className:"relative aspect-square w-full overflow-hidden rounded-lg",children:e.jsx(M,{src:r,alt:"Generated profile",fill:!0,className:"object-cover"})}):e.jsxs("div",{className:"border-base-300 bg-base-100 flex aspect-square w-full flex-col items-center justify-center gap-4 rounded-lg border",children:[e.jsx(ie,{className:"text-neutral size-6"}),e.jsx("p",{className:"text-body-m text-neutral text-center whitespace-pre-line",children:n("aidol:companionCreate.image.placeholder")})]})]})}function Le({step:t,title:s,children:a}){const l=t.toString().padStart(2,"0");return e.jsxs("div",{className:"bg-base-200 flex w-full flex-col gap-6 rounded-lg p-6",children:[e.jsx("span",{className:"text-title-s text-primary",children:l}),e.jsx("h3",{className:"text-title-s text-base-content",children:s}),e.jsx("div",{className:"flex flex-col gap-4",children:a})]})}const C={initial:{y:40,opacity:0},animate:{y:0,opacity:1,transition:{duration:.8,ease:"easeInOut"}}},Te={animate:{transition:{staggerChildren:.15}}};function Re({onGetStarted:t}){const{t:s}=u.useTranslation();return e.jsx("section",{className:"bg-base-100 flex min-h-screen w-full flex-col items-center px-6 pt-12 pb-8",children:e.jsxs(v.motion.div,{variants:Te,initial:"initial",animate:"animate",className:"flex w-full flex-col items-center text-center",children:[e.jsx(v.motion.div,{variants:C,className:"mb-6",children:e.jsx(M,{src:"/images/logo.svg",alt:"AIdol",width:92,height:28,priority:!0})}),e.jsxs(v.motion.h1,{variants:C,className:"text-display-s mb-3",children:[s("aidol:landing.hero.title.line1"),e.jsx("br",{}),s("aidol:landing.hero.title.line2")]}),e.jsxs(v.motion.div,{variants:C,className:"text-headline-s text-base-content mb-8 flex flex-col",children:[e.jsx("p",{className:"text-neutral",children:s("aidol:landing.hero.line1")}),e.jsx("p",{className:"text-neutral",children:s("aidol:landing.hero.line2")}),e.jsx("p",{children:s("aidol:landing.hero.line3")}),e.jsx("p",{children:s("aidol:landing.hero.line4")})]}),e.jsx(v.motion.div,{variants:C,className:"bg-base-200 relative mb-6 aspect-[345/368] w-full overflow-hidden rounded-lg"}),e.jsx(v.motion.div,{variants:C,className:"w-full",children:e.jsx("button",{onClick:t,className:"btn btn-primary btn-lg text-label-l w-full rounded-lg",children:s("aidol:landing.hero.cta")})})]})})}function Ae({isOpen:t,onClose:s,children:a,action:l}){const{t:r}=u.useTranslation();return t?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed top-0 left-0 z-40 h-screen w-screen bg-black/80",onClick:s}),e.jsx("div",{className:"max-w-mobile fixed inset-0 z-50 mx-auto flex items-center justify-center p-6",onClick:s,children:e.jsxs("div",{className:"bg-base-200 relative flex max-h-170 min-h-90 w-full flex-col gap-6 overflow-hidden rounded-lg p-6",onClick:o=>o.stopPropagation(),children:[e.jsx("div",{className:"scrollbar-hide flex-1 overflow-y-auto pb-20",children:a}),e.jsxs("div",{className:"absolute inset-x-6 bottom-6 flex shrink-0 gap-4",children:[e.jsx("button",{type:"button",onClick:s,className:"btn btn-lg bg-base-300 text-label-l text-base-content rounded-lg p-4",children:r("aidol:common.close")}),l&&e.jsx("button",{type:"button",onClick:l.onClick,className:j("btn btn-lg text-label-l flex-1",l.variant==="neutral"?"btn-neutral":"btn-primary"),children:l.label})]})]})})]}):null}function $e({url:t,onCopySuccess:s}){const{t:a}=u.useTranslation(),[l,r]=g.useState(!1),o=g.useCallback(async()=>{await navigator.clipboard.writeText(t),r(!0),s?.(),setTimeout(()=>r(!1),2e3)},[t,s]);return e.jsx("button",{onClick:o,className:"btn btn-circle btn-ghost","aria-label":a("aidol:share"),children:l?e.jsx(ae,{className:"text-success size-6"}):e.jsx(re,{className:"size-6"})})}exports.AddMemberButton=U;exports.BiographyInput=ge;exports.Card=B;exports.CompanionCreateLayout=ye;exports.CompanionGrid=xe;exports.CompanionNameInput=ve;exports.ConceptSelector=R;exports.EmblemGenerator=_;exports.GenderSelector=we;exports.GroupCreation=Ie;exports.GroupHeader=be;exports.GroupNameInput=A;exports.HeroSection=Re;exports.ImagePreview=k;exports.MbtiForm=Ee;exports.MbtiSlider=W;exports.MemberNameInput=$;exports.Modal=Ae;exports.PersonalitySelector=Z;exports.ProfileContent=he;exports.ProfileImageGenerator=Me;exports.ProgressBar=F;exports.PromptInput=T;exports.ShareButton=$e;exports.StepCard=Le;exports.StepIndicator=q;
2
2
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/@heroicons/react/24/outline/esm/CheckIcon.js","../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../node_modules/@heroicons/react/24/outline/esm/ShareIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserGroupIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserIcon.js","../src/components/companion/ImagePreview.tsx","../src/components/companion/Card.tsx","../src/components/aidol/CompanionGrid.tsx","../src/components/aidol/GroupHeader.tsx","../src/components/companion/AddMemberButton.tsx","../src/components/companion/PromptInput.tsx","../src/components/creation/ConceptSelector.tsx","../src/components/creation/EmblemGenerator.tsx","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/creation/GroupNameInput.tsx","../src/components/creation/MemberNameInput.tsx","../src/components/creation/PersonalitySelector.tsx","../src/components/creation/StepIndicator.tsx","../src/components/creation/GroupCreation.tsx","../src/components/landing/HeroSection.tsx","../src/components/ShareButton.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import * as React from \"react\";\nfunction CheckIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 12.75 6 6 9-13.5\"\n }));\n}\nconst ForwardRef = React.forwardRef(CheckIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 4.5v15m7.5-7.5h-15\"\n }));\n}\nconst ForwardRef = React.forwardRef(PlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ShareIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(ShareIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserGroupIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserGroupIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserIcon);\nexport default ForwardRef;","import { UserIcon } from \"@heroicons/react/24/outline\";\nimport clsx from \"clsx\";\nimport Image from \"next/image\";\n\ninterface ProfileProps {\n url?: string | null;\n alt: string;\n variant?: \"default\" | \"profile\";\n}\n\nconst SIZE_CLASSES = {\n default: \"size-profile\",\n profile: \"size-full\",\n};\n\n/**\n * Profile image component for companion.\n * Shows a placeholder when no image URL is provided.\n */\nexport function ImagePreview({ url, alt, variant = \"default\" }: ProfileProps) {\n return (\n <div\n className={clsx(\n \"border-base-300 bg-base-200 relative overflow-hidden rounded-lg border\",\n SIZE_CLASSES[variant],\n )}\n >\n {url ? (\n <Image src={url} alt={alt} fill className=\"size-full object-cover\" />\n ) : (\n <div className=\"flex size-full items-center justify-center\">\n <UserIcon className=\"text-base-content/50 size-1/2\" />\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Companion } from \"@/schemas\";\n\nimport { ImagePreview } from \"./ImagePreview\";\n\ntype CardVariant = \"grade\" | \"position\" | \"castingBoard\";\n\ninterface CardProps {\n companion: Companion;\n variant?: CardVariant;\n onClick?: () => void;\n}\n\nexport function Card({ companion, variant = \"grade\", onClick }: CardProps) {\n const { t } = useTranslation();\n const isSigned = companion.aidolId !== null;\n const isPosition = variant === \"position\";\n const isCastingBoard = variant === \"castingBoard\";\n const isClickable = onClick && (!isSigned || isCastingBoard);\n\n return (\n <div\n className={clsx(\n \"h-card max-w-card border-base-300 relative isolate w-full overflow-hidden rounded-lg border\",\n isClickable && \"cursor-pointer\",\n )}\n onClick={isClickable ? onClick : undefined}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {/* 1. 배경 이미지 */}\n <div className=\"absolute inset-0\">\n <ImagePreview\n url={companion.profilePictureUrl}\n alt={companion.name ?? \"\"}\n variant=\"profile\"\n />\n </div>\n\n {/* 2. 계약 완료 시 블러 (castingBoard에서는 표시 안 함) */}\n {isSigned && !isCastingBoard && (\n <div className=\"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm\" />\n )}\n\n {/* 3. 블러 위 계약 완료 레이어 (castingBoard에서는 표시 안 함) */}\n {isSigned && !isCastingBoard && (\n <div className=\"absolute top-4 left-4 z-20\">\n <span className=\"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1\">\n {t(\"companion.signed\")}\n </span>\n </div>\n )}\n\n {/* 4. 기존 하단 그라데이션 */}\n <div\n className={clsx(\n \"absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent\",\n isSigned && !isCastingBoard && \"opacity-20\",\n isPosition && \"opacity-30\",\n (!isSigned || isCastingBoard) && !isPosition && \"opacity-60\",\n )}\n />\n\n {/* 5. 이름 + 등급 */}\n <div className=\"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2\">\n <span className=\"text-title-s text-white\">{companion.name ?? \"\"}</span>\n\n {!isPosition && (\n <span className=\"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white\">\n {t(\"companion.grade\", { grade: companion.grade })}\n </span>\n )}\n {isPosition && (\n <span className=\"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1\">\n {companion.position}\n </span>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { Card } from \"@/components/companion/Card\";\nimport type { Companion } from \"@/schemas/companion\";\n\nexport interface CompanionGridProps {\n companions: Companion[] | undefined;\n onCompanionClick: (companionId: string) => void;\n}\n\n/**\n * Companion 카드 그리드 (Presentational)\n * 멤버 목록 제목, 그리드 레이아웃, 빈 상태 표시\n */\nexport function CompanionGrid({\n companions,\n onCompanionClick,\n}: CompanionGridProps): JSX.Element {\n const { t } = useTranslation();\n\n return (\n <div className=\"mt-8\">\n <h2 className=\"text-title-l mb-4 font-semibold\">\n {t(\"aidol:aidol.members\")}\n </h2>\n {companions && companions.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {companions.map((companion) => (\n <Card\n key={companion.id}\n companion={companion}\n onClick={() => onCompanionClick(companion.id)}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-base-content/50 text-center\">\n {t(\"aidol:aidol.noMembers\")}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { UserGroupIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\n\nimport type { AIdol } from \"../../schemas\";\n\ninterface GroupHeaderProps {\n aidol: AIdol;\n}\n\n/**\n * Header component for AIdol group profile page.\n * Displays group image, name, and concept.\n */\nexport function GroupHeader({ aidol }: GroupHeaderProps) {\n return (\n <div className=\"flex flex-col items-center gap-4 py-8 text-center\">\n <div className=\"bg-base-200 relative size-32 overflow-hidden rounded-full\">\n {aidol.profileImageUrl ? (\n <Image\n src={aidol.profileImageUrl}\n alt={aidol.name}\n fill\n className=\"object-cover\"\n />\n ) : (\n <div className=\"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br\">\n <UserGroupIcon className=\"text-base-content/50 size-16\" />\n </div>\n )}\n </div>\n <div>\n <h1 className=\"text-display-s text-base-content font-bold\">\n {aidol.name}\n </h1>\n {aidol.concept && (\n <p className=\"text-body-l text-base-content/70 mt-2\">\n {aidol.concept}\n </p>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { PlusIcon } from \"@heroicons/react/24/outline\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface AddMemberButtonProps {\n onClick: () => void;\n isLoading?: boolean;\n}\n\n/**\n * Button for adding a new companion member.\n */\nexport function AddMemberButton({ onClick, isLoading }: AddMemberButtonProps) {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={onClick}\n disabled={isLoading}\n className=\"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48\"\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n <>\n <PlusIcon className=\"size-5\" />\n {t(\"aidol:companion.addMember\")}\n </>\n )}\n </button>\n );\n}\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PromptInputProps {\n placeholder?: string;\n maxLength?: number;\n charCount?: number;\n}\n\n/**\n * Textarea for entering companion system prompt or personality description.\n * Supports react-hook-form register() via forwardRef.\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n ({ placeholder, maxLength = 500, charCount, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"w-full\">\n <textarea\n ref={ref}\n placeholder={placeholder ?? t(\"aidol:companion.promptPlaceholder\")}\n maxLength={maxLength}\n className=\"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden\"\n {...props}\n />\n <div className=\"text-label-s text-base-content/50 mt-1 text-right\">\n {charCount ?? 0}/{maxLength}\n </div>\n </div>\n );\n },\n);\n\nPromptInput.displayName = \"PromptInput\";\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ConceptOption {\n value: string;\n label: string;\n}\n\ninterface ConceptSelectorProps {\n options: ConceptOption[];\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\n/**\n * Dropdown selector for AIdol group concept.\n * Supports react-hook-form via forwardRef.\n */\nexport const ConceptSelector = forwardRef<\n HTMLSelectElement,\n ConceptSelectorProps\n>(({ options, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.concept\")}</label>\n <select\n ref={ref}\n className=\"select bg-base-100 text-base-content w-full\"\n {...props}\n >\n <option value=\"\">{t(\"aidol:creation.selectConcept\")}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </fieldset>\n );\n});\n\nConceptSelector.displayName = \"ConceptSelector\";\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface EmblemGeneratorProps {\n onGenerate: (prompt: string) => void;\n isGenerating: boolean;\n disabled?: boolean;\n}\n\n/**\n * Emblem image generation input (Presentational)\n * Follows ImageUpload pattern: input + loading state only\n * Preview is handled by parent component\n */\nexport function EmblemGenerator({\n onGenerate,\n isGenerating,\n disabled,\n}: EmblemGeneratorProps) {\n const { t } = useTranslation();\n const [prompt, setPrompt] = useState(\"\");\n\n const handleGenerate = () => {\n if (prompt.trim()) {\n onGenerate(prompt);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && prompt.trim() && !isGenerating && !disabled) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n return (\n <fieldset className=\"fieldset w-full\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={t(\"aidol:creation.emblemPromptPlaceholder\")}\n maxLength={200}\n className=\"input flex-1\"\n disabled={disabled || isGenerating}\n data-testid=\"emblem-prompt-input\"\n />\n <button\n type=\"button\"\n onClick={handleGenerate}\n disabled={disabled || isGenerating || !prompt.trim()}\n className=\"btn btn-secondary\"\n data-testid=\"emblem-generate-button\"\n >\n {isGenerating ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.generate\")\n )}\n </button>\n </div>\n {isGenerating && (\n <div className=\"mt-2\">\n <progress className=\"progress w-full\"></progress>\n </div>\n )}\n </fieldset>\n );\n}\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface GroupNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for AIdol group name.\n * Supports react-hook-form via forwardRef.\n */\nexport const GroupNameInput = forwardRef<HTMLInputElement, GroupNameInputProps>(\n ({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.groupName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.groupNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n },\n);\n\nGroupNameInput.displayName = \"GroupNameInput\";\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface MemberNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for companion member name.\n * Supports react-hook-form via forwardRef.\n */\nexport const MemberNameInput = forwardRef<\n HTMLInputElement,\n MemberNameInputProps\n>(({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.memberName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.memberNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n});\n\nMemberNameInput.displayName = \"MemberNameInput\";\n","\"use client\";\n\nimport clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PersonalityOption {\n value: string;\n label: string;\n description?: string;\n}\n\ninterface PersonalitySelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: PersonalityOption[];\n}\n\n/**\n * Radio group selector for companion personality.\n */\nexport function PersonalitySelector({\n value,\n onChange,\n options,\n}: PersonalitySelectorProps) {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.personality\")}</label>\n <div className=\"space-y-2\">\n {options.map((option) => (\n <label\n key={option.value}\n className={clsx(\n \"flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors\",\n value === option.value\n ? \"border-primary bg-primary/10\"\n : \"border-base-300 hover:border-base-content/30\",\n )}\n >\n <input\n type=\"radio\"\n name=\"personality\"\n value={option.value}\n checked={value === option.value}\n onChange={(e) => onChange(e.target.value)}\n className=\"radio-primary radio mt-0.5\"\n />\n <div>\n <div className=\"text-base-content font-medium\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-body-s text-base-content/70 mt-1\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport clsx from \"clsx\";\n\ninterface StepIndicatorProps {\n currentStep: number;\n totalSteps: number;\n labels?: string[];\n}\n\n/**\n * Step indicator for multi-step creation flow.\n * Uses DaisyUI steps component.\n */\nexport function StepIndicator({\n currentStep,\n totalSteps,\n labels,\n}: StepIndicatorProps) {\n return (\n <ul className=\"steps w-full\">\n {Array.from({ length: totalSteps }, (_, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n\n return (\n <li\n key={stepNumber}\n className={clsx(\n \"step\",\n (isCompleted || isCurrent) && \"step-primary\",\n )}\n >\n {labels?.[index] ?? \"\"}\n </li>\n );\n })}\n </ul>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { AddMemberButton } from \"@/components/companion/AddMemberButton\";\nimport { ImagePreview } from \"@/components/companion/ImagePreview\";\nimport { PromptInput } from \"@/components/companion/PromptInput\";\nimport { ConceptSelector } from \"@/components/creation/ConceptSelector\";\nimport { EmblemGenerator } from \"@/components/creation/EmblemGenerator\";\nimport { GroupNameInput } from \"@/components/creation/GroupNameInput\";\nimport { MemberNameInput } from \"@/components/creation/MemberNameInput\";\nimport { PersonalitySelector } from \"@/components/creation/PersonalitySelector\";\nimport { StepIndicator } from \"@/components/creation/StepIndicator\";\nimport {\n groupCreationSchema,\n type GroupCreationFormData,\n} from \"@/schemas/aidol\";\n\nexport type { GroupCreationFormData };\n\nexport interface GroupCreationProps {\n onSubmit: (data: GroupCreationFormData) => Promise<void>;\n onComplete: () => void;\n onGenerateImage: (prompt: string) => Promise<string | null>;\n isLoading: boolean;\n isGeneratingImage: boolean;\n isCompleted: boolean;\n}\n\nconst CONCEPT_KEYS = [\"cute\", \"cool\", \"elegant\", \"powerful\"] as const;\nconst PERSONALITY_KEYS = [\"cheerful\", \"cool\", \"tsundere\", \"gentle\"] as const;\n\n/**\n * AIdol 그룹 생성 멀티스텝 폼 (Presentational)\n * react-hook-form + zod validation\n */\nexport function GroupCreation({\n onSubmit,\n onComplete,\n onGenerateImage,\n isLoading,\n isGeneratingImage,\n isCompleted,\n}: GroupCreationProps): JSX.Element {\n const { t } = useTranslation();\n const [step, setStep] = useState(isCompleted ? 3 : 1);\n\n const conceptOptions = useMemo(\n () =>\n CONCEPT_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.concepts.${key}`),\n })),\n [t],\n );\n\n const personalityOptions = useMemo(\n () =>\n PERSONALITY_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.personalities.${key}.label`),\n description: t(`aidol:creation.personalities.${key}.description`),\n })),\n [t],\n );\n\n const {\n register,\n control,\n handleSubmit,\n trigger,\n watch,\n setValue,\n formState: { errors },\n } = useForm<GroupCreationFormData>({\n resolver: zodResolver(groupCreationSchema),\n defaultValues: {\n groupName: \"\",\n concept: \"\",\n profileImageUrl: \"\",\n members: [{ name: \"\", personality: \"\", systemPrompt: \"\" }],\n },\n });\n\n const profileImageUrl = watch(\"profileImageUrl\");\n\n const { fields, append } = useFieldArray({\n control,\n name: \"members\",\n });\n\n const members = watch(\"members\");\n\n const handleGenerateEmblem = async (prompt: string) => {\n const imageUrl = await onGenerateImage(prompt);\n if (imageUrl) {\n setValue(\"profileImageUrl\", imageUrl);\n }\n };\n\n const handleStep1Next = async () => {\n const isValid = await trigger([\"groupName\", \"profileImageUrl\"]);\n if (isValid) {\n setStep(2);\n }\n };\n\n const handleStep2Submit = handleSubmit(async (data) => {\n // Filter out empty members before submit\n const validMembers = data.members.filter((m) => m.name.trim());\n await onSubmit({ ...data, members: validMembers });\n setStep(3);\n });\n\n const handleAddMember = () => {\n append({ name: \"\", personality: \"\", systemPrompt: \"\" });\n };\n\n return (\n <main className=\"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20\">\n <div className=\"w-full max-w-lg\">\n <StepIndicator\n currentStep={step}\n totalSteps={3}\n labels={[\n t(\"aidol:creation.step1\"),\n t(\"aidol:creation.step2\"),\n t(\"aidol:creation.step3\"),\n ]}\n />\n\n <div className=\"mt-8\">\n {/* Step 1: Group Info */}\n {step === 1 && (\n <div className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step1Title\")}\n </h2>\n <GroupNameInput\n {...register(\"groupName\")}\n error={\n errors.groupName?.message\n ? t(errors.groupName.message, { ns: \"aidol\" })\n : undefined\n }\n />\n <ConceptSelector\n {...register(\"concept\")}\n options={conceptOptions}\n />\n\n {/* Emblem Image Generation (follows ImageUpload pattern) */}\n <fieldset className=\"fieldset\">\n <label className=\"label\">{t(\"aidol:creation.emblem\")}</label>\n <EmblemGenerator\n onGenerate={handleGenerateEmblem}\n isGenerating={isGeneratingImage}\n disabled={isLoading}\n />\n {profileImageUrl && (\n <div className=\"mt-2 flex justify-center\">\n <ImagePreview\n url={profileImageUrl}\n alt={t(\"aidol:creation.emblem\")}\n />\n </div>\n )}\n {errors.profileImageUrl?.message && (\n <p className=\"text-label-m text-error mt-1\">\n {t(errors.profileImageUrl.message, { ns: \"aidol\" })}\n </p>\n )}\n </fieldset>\n\n <button\n type=\"button\"\n onClick={handleStep1Next}\n disabled={!profileImageUrl}\n className=\"btn btn-primary w-full\"\n >\n {t(\"aidol:creation.next\")}\n </button>\n </div>\n )}\n\n {/* Step 2: Members */}\n {step === 2 && (\n <form onSubmit={handleStep2Submit} className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step2Title\")}\n </h2>\n\n {fields.map((field, index) => (\n <div\n key={field.id}\n className=\"border-base-300 space-y-4 rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-4\">\n <ImagePreview url={null} alt={members[index]?.name ?? \"\"} />\n <div className=\"flex-1\">\n <MemberNameInput\n {...register(`members.${index}.name`)}\n error={\n errors.members?.[index]?.name?.message\n ? t(errors.members?.[index]?.name?.message ?? \"\", {\n ns: \"aidol\",\n })\n : undefined\n }\n />\n </div>\n </div>\n <Controller\n name={`members.${index}.personality`}\n control={control}\n render={({ field: controllerField }) => (\n <PersonalitySelector\n value={controllerField.value ?? \"\"}\n onChange={controllerField.onChange}\n options={personalityOptions}\n />\n )}\n />\n <PromptInput\n {...register(`members.${index}.systemPrompt`)}\n charCount={members[index]?.systemPrompt?.length ?? 0}\n />\n </div>\n ))}\n\n <AddMemberButton onClick={handleAddMember} isLoading={false} />\n\n {errors.members?.root?.message && (\n <p className=\"text-error text-center\">\n {t(errors.members.root.message, { ns: \"aidol\" })}\n </p>\n )}\n\n <div className=\"flex gap-4\">\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className=\"btn btn-ghost flex-1\"\n disabled={isLoading}\n >\n {t(\"aidol:creation.back\")}\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary flex-1\"\n disabled={isLoading}\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.create\")\n )}\n </button>\n </div>\n </form>\n )}\n\n {/* Step 3: Complete */}\n {step === 3 && (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-display-l\">🎉</div>\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.completeTitle\")}\n </h2>\n <p className=\"text-body-l text-base-content/70\">\n {t(\"aidol:creation.completeDescription\")}\n </p>\n <button onClick={onComplete} className=\"btn btn-primary w-full\">\n {t(\"aidol:creation.viewProfile\")}\n </button>\n </div>\n )}\n </div>\n </div>\n </main>\n );\n}\n","\"use client\";\n\nimport { motion, Variants } from \"framer-motion\";\nimport Image from \"next/image\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.15,\n },\n },\n};\n\ninterface HeroSectionProps {\n onGetStarted: () => void;\n}\n\n/**\n * Hero section for AIdol landing page.\n */\nexport function HeroSection({ onGetStarted }: HeroSectionProps) {\n const { t } = useTranslation();\n\n return (\n <section className=\"bg-base-100 flex min-h-screen w-full flex-col items-center px-6 pt-12 pb-8\">\n <motion.div\n variants={staggerContainer}\n initial=\"initial\"\n animate=\"animate\"\n className=\"flex w-full flex-col items-center text-center\"\n >\n <motion.div variants={fadeInUp} className=\"mb-6\">\n <Image\n src=\"/images/logo.svg\"\n alt=\"AIdol\"\n width={92}\n height={28}\n priority\n />\n </motion.div>\n\n <motion.h1 variants={fadeInUp} className=\"text-display-s mb-3\">\n {t(\"aidol:landing.hero.title.line1\")}\n <br />\n {t(\"aidol:landing.hero.title.line2\")}\n </motion.h1>\n\n <motion.div\n variants={fadeInUp}\n className=\"text-headline-s text-base-content mb-8 flex flex-col\"\n >\n <p className=\"text-neutral\">{t(\"aidol:landing.hero.line1\")}</p>\n <p className=\"text-neutral\">{t(\"aidol:landing.hero.line2\")}</p>\n <p>{t(\"aidol:landing.hero.line3\")}</p>\n <p>{t(\"aidol:landing.hero.line4\")}</p>\n </motion.div>\n\n <motion.div\n variants={fadeInUp}\n className=\"bg-base-200 relative mb-6 aspect-[345/368] w-full overflow-hidden rounded-lg\"\n />\n\n <motion.div variants={fadeInUp} className=\"w-full\">\n <button\n onClick={onGetStarted}\n className=\"btn btn-primary btn-lg text-label-l w-full rounded-lg\"\n >\n {t(\"aidol:landing.hero.cta\")}\n </button>\n </motion.div>\n </motion.div>\n </section>\n );\n}\n","\"use client\";\n\nimport { CheckIcon, ShareIcon } from \"@heroicons/react/24/outline\";\nimport { useCallback, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ShareButtonProps {\n url: string;\n onCopySuccess?: () => void;\n}\n\n/**\n * Share button that copies URL to clipboard.\n * Shows a check icon briefly after successful copy.\n */\nexport function ShareButton({ url, onCopySuccess }: ShareButtonProps) {\n const { t } = useTranslation();\n const [copied, setCopied] = useState(false);\n\n const handleShare = useCallback(async () => {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n onCopySuccess?.();\n setTimeout(() => setCopied(false), 2000);\n }, [url, onCopySuccess]);\n\n return (\n <button\n onClick={handleShare}\n className=\"btn btn-circle btn-ghost\"\n aria-label={t(\"aidol:share\")}\n >\n {copied ? (\n <CheckIcon className=\"text-success size-6\" />\n ) : (\n <ShareIcon className=\"size-6\" />\n )}\n </button>\n );\n}\n"],"names":["r","e","t","f","n","o","clsx","CheckIcon","title","titleId","props","svgRef","React","ForwardRef","PlusIcon","ShareIcon","UserGroupIcon","UserIcon","SIZE_CLASSES","ImagePreview","url","alt","variant","jsx","Image","Card","companion","onClick","useTranslation","isSigned","isPosition","isCastingBoard","isClickable","jsxs","CompanionGrid","companions","onCompanionClick","GroupHeader","aidol","AddMemberButton","isLoading","Fragment","PromptInput","forwardRef","placeholder","maxLength","charCount","ref","ConceptSelector","options","option","EmblemGenerator","onGenerate","isGenerating","disabled","prompt","setPrompt","useState","handleGenerate","handleKeyDown","s","i","a","u","GroupNameInput","error","MemberNameInput","PersonalitySelector","value","onChange","StepIndicator","currentStep","totalSteps","labels","_","index","stepNumber","isCompleted","isCurrent","CONCEPT_KEYS","PERSONALITY_KEYS","GroupCreation","onSubmit","onComplete","onGenerateImage","isGeneratingImage","step","setStep","conceptOptions","useMemo","key","personalityOptions","register","control","handleSubmit","trigger","watch","setValue","errors","useForm","zodResolver","groupCreationSchema","profileImageUrl","fields","append","useFieldArray","members","handleGenerateEmblem","imageUrl","handleStep1Next","handleStep2Submit","data","validMembers","m","handleAddMember","field","Controller","controllerField","fadeInUp","staggerContainer","HeroSection","onGetStarted","motion","ShareButton","onCopySuccess","copied","setCopied","handleShare","useCallback"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,14]}
1
+ {"version":3,"file":"client.cjs","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/@heroicons/react/24/outline/esm/CheckIcon.js","../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../node_modules/@heroicons/react/24/outline/esm/ShareIcon.js","../node_modules/@heroicons/react/24/outline/esm/SparklesIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserGroupIcon.js","../node_modules/@heroicons/react/24/outline/esm/UserIcon.js","../src/components/companion/ImagePreview.tsx","../src/components/companion/Card.tsx","../src/components/aidol/CompanionGrid.tsx","../src/components/aidol/GroupHeader.tsx","../src/components/companion/AddMemberButton.tsx","../src/components/companion/RadarChart.tsx","../src/components/companion/ProfileContent.tsx","../src/components/companion/PromptInput.tsx","../src/components/creation/BiographyInput.tsx","../src/components/Header.tsx","../src/components/creation/ProgressBar.tsx","../src/components/creation/CompanionCreateLayout.tsx","../src/components/creation/CompanionNameInput.tsx","../src/components/creation/ConceptSelector.tsx","../src/components/creation/GenderSelector.tsx","../src/components/creation/EmblemGenerator.tsx","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/creation/GroupNameInput.tsx","../src/components/creation/MemberNameInput.tsx","../src/components/creation/PersonalitySelector.tsx","../src/components/creation/StepIndicator.tsx","../src/components/creation/GroupCreation.tsx","../src/components/creation/MbtiSlider.tsx","../src/components/creation/MbtiForm.tsx","../src/components/creation/ProfileImageGenerator.tsx","../src/components/creation/StepCard.tsx","../src/components/landing/HeroSection.tsx","../src/components/Modal.tsx","../src/components/ShareButton.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import * as React from \"react\";\nfunction CheckIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 12.75 6 6 9-13.5\"\n }));\n}\nconst ForwardRef = React.forwardRef(CheckIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 4.5v15m7.5-7.5h-15\"\n }));\n}\nconst ForwardRef = React.forwardRef(PlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ShareIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(ShareIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction SparklesIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(SparklesIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserGroupIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserGroupIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction UserIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z\"\n }));\n}\nconst ForwardRef = React.forwardRef(UserIcon);\nexport default ForwardRef;","import { UserIcon } from \"@heroicons/react/24/outline\";\nimport clsx from \"clsx\";\nimport Image from \"next/image\";\n\ninterface ProfileProps {\n url?: string | null;\n alt: string;\n variant?: \"default\" | \"profile\";\n}\n\nconst SIZE_CLASSES = {\n default: \"size-profile\",\n profile: \"size-full\",\n};\n\n/**\n * Profile image component for companion.\n * Shows a placeholder when no image URL is provided.\n */\nexport function ImagePreview({ url, alt, variant = \"default\" }: ProfileProps) {\n return (\n <div\n className={clsx(\n \"border-base-300 bg-base-200 relative overflow-hidden rounded-lg border\",\n SIZE_CLASSES[variant],\n )}\n >\n {url ? (\n <Image\n src={url}\n alt={alt}\n fill\n draggable={false}\n className=\"size-full object-cover\"\n />\n ) : (\n <div className=\"flex size-full items-center justify-center\">\n <UserIcon className=\"text-base-content/50 size-1/2\" />\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Companion } from \"@/schemas\";\n\nimport { ImagePreview } from \"./ImagePreview\";\n\ntype CardVariant = \"grade\" | \"position\" | \"castingBoard\";\n\ninterface CardProps {\n companion: Companion;\n variant?: CardVariant;\n onClick?: () => void;\n}\n\nexport function Card({ companion, variant = \"grade\", onClick }: CardProps) {\n const { t } = useTranslation();\n const isSigned = companion.aidolId !== null;\n const showSignedOverlay = isSigned && variant === \"grade\";\n const isClickable = onClick && !showSignedOverlay;\n\n const gradientOpacity =\n variant === \"position\"\n ? \"opacity-30\"\n : showSignedOverlay\n ? \"opacity-20\"\n : \"opacity-60\";\n\n const badgeText =\n variant === \"position\"\n ? companion.position\n ? t(`aidol:position.${companion.position}`)\n : t(\"aidol:position.unassigned\")\n : t(\"companion.grade\", { grade: companion.grade });\n\n return (\n <div\n className={clsx(\n \"h-card max-w-card border-base-300 relative isolate w-full overflow-hidden rounded-lg border\",\n isClickable && \"cursor-pointer\",\n )}\n onClick={isClickable ? onClick : undefined}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n <div className=\"absolute inset-0\">\n <ImagePreview\n url={companion.profilePictureUrl}\n alt={companion.name ?? \"\"}\n variant=\"profile\"\n />\n </div>\n\n {showSignedOverlay && (\n <>\n <div className=\"absolute inset-0 z-20 bg-black/40 backdrop-blur-sm\" />\n <div className=\"absolute top-4 left-4 z-20\">\n <span className=\"bg-base-100 text-body-s text-base-content w-fit rounded-lg px-2 py-1\">\n {t(\"companion.signed\")}\n </span>\n </div>\n </>\n )}\n\n <div\n className={clsx(\n \"absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black to-transparent\",\n gradientOpacity,\n )}\n />\n\n <div className=\"absolute inset-x-4 bottom-4 z-10 flex flex-col gap-2\">\n <span className=\"text-title-s text-white\">{companion.name}</span>\n <span className=\"text-body-s w-fit rounded-lg bg-black px-2 py-1 text-white\">\n {badgeText}\n </span>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { Card } from \"@/components/companion/Card\";\nimport type { Companion } from \"@/schemas/companion\";\n\nexport interface CompanionGridProps {\n companions: Companion[] | undefined;\n onCompanionClick: (companionId: string) => void;\n}\n\n/**\n * Companion 카드 그리드 (Presentational)\n * 멤버 목록 제목, 그리드 레이아웃, 빈 상태 표시\n */\nexport function CompanionGrid({\n companions,\n onCompanionClick,\n}: CompanionGridProps): JSX.Element {\n const { t } = useTranslation();\n\n return (\n <div className=\"mt-8\">\n <h2 className=\"text-title-l mb-4 font-semibold\">\n {t(\"aidol:aidol.members\")}\n </h2>\n {companions && companions.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {companions.map((companion) => (\n <Card\n key={companion.id}\n companion={companion}\n onClick={() => onCompanionClick(companion.id)}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-base-content/50 text-center\">\n {t(\"aidol:aidol.noMembers\")}\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { UserGroupIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\n\nimport type { AIdol } from \"../../schemas\";\n\ninterface GroupHeaderProps {\n aidol: AIdol;\n}\n\n/**\n * Header component for AIdol group profile page.\n * Displays group image, name, and concept.\n */\nexport function GroupHeader({ aidol }: GroupHeaderProps) {\n return (\n <div className=\"flex flex-col items-center gap-4 py-8 text-center\">\n <div className=\"bg-base-200 relative size-32 overflow-hidden rounded-full\">\n {aidol.profileImageUrl ? (\n <Image\n src={aidol.profileImageUrl}\n alt={aidol.name ?? \"Group\"}\n fill\n className=\"object-cover\"\n />\n ) : (\n <div className=\"from-primary/20 to-secondary/20 flex size-full items-center justify-center bg-gradient-to-br\">\n <UserGroupIcon className=\"text-base-content/50 size-16\" />\n </div>\n )}\n </div>\n <div>\n <h1 className=\"text-display-s text-base-content font-bold\">\n {aidol.name}\n </h1>\n {aidol.concept && (\n <p className=\"text-body-l text-base-content/70 mt-2\">\n {aidol.concept}\n </p>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { PlusIcon } from \"@heroicons/react/24/outline\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface AddMemberButtonProps {\n onClick: () => void;\n isLoading?: boolean;\n}\n\n/**\n * Button for adding a new companion member.\n */\nexport function AddMemberButton({ onClick, isLoading }: AddMemberButtonProps) {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={onClick}\n disabled={isLoading}\n className=\"btn btn-neutral text-label-l text-neutral-content h-16 min-w-48\"\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n <>\n <PlusIcon className=\"size-5\" />\n {t(\"aidol:companion.addMember\")}\n </>\n )}\n </button>\n );\n}\n","import { useTranslation } from \"react-i18next\";\n\nimport type { CompanionStats } from \"@/schemas/companion\";\n\ninterface RadarChartProps {\n stats: CompanionStats;\n}\n\nconst STAT_KEYS: (keyof CompanionStats)[] = [\n \"vocal\",\n \"dance\",\n \"rap\",\n \"visual\",\n \"stamina\",\n \"charm\",\n];\n\nexport function RadarChart({ stats }: RadarChartProps) {\n const { t } = useTranslation();\n\n const size = 260;\n const center = size / 2;\n const maxRadius = 70;\n const labelRadius = 100;\n\n // flat-top hexagon: 위에 점 2개 (30도 회전)\n const getPoint = (index: number, value: number) => {\n const angle = (Math.PI * 2 * index) / 6 - Math.PI / 3;\n const radius = (value / 100) * maxRadius;\n return {\n x: center + radius * Math.cos(angle),\n y: center + radius * Math.sin(angle),\n };\n };\n\n const getLabelPosition = (index: number) => {\n const angle = (Math.PI * 2 * index) / 6 - Math.PI / 3;\n return {\n x: center + labelRadius * Math.cos(angle),\n y: center + labelRadius * Math.sin(angle),\n };\n };\n\n const points = STAT_KEYS.map((key, i) => getPoint(i, stats[key]));\n const polygonPoints = points.map((p) => `${p.x},${p.y}`).join(\" \");\n\n const gridLevels = [20, 40, 60, 80, 100];\n\n return (\n <div className=\"flex items-center justify-center\">\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n {gridLevels.map((level) => {\n const gridPoints = STAT_KEYS.map((_, i) => getPoint(i, level));\n const gridPolygon = gridPoints.map((p) => `${p.x},${p.y}`).join(\" \");\n return (\n <polygon\n key={level}\n points={gridPolygon}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n className=\"text-base-300\"\n />\n );\n })}\n\n {STAT_KEYS.map((_, i) => {\n const endPoint = getPoint(i, 100);\n return (\n <line\n key={i}\n x1={center}\n y1={center}\n x2={endPoint.x}\n y2={endPoint.y}\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n className=\"text-base-300\"\n />\n );\n })}\n\n <polygon\n points={polygonPoints}\n fill=\"currentColor\"\n fillOpacity=\"0.3\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"text-secondary\"\n />\n\n {points.map((point, i) => (\n <circle\n key={i}\n cx={point.x}\n cy={point.y}\n r=\"3\"\n fill=\"currentColor\"\n className=\"text-secondary\"\n />\n ))}\n\n {STAT_KEYS.map((key, i) => {\n const pos = getLabelPosition(i);\n return (\n <g key={key}>\n <text\n x={pos.x}\n y={pos.y - 8}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-label-l fill-base-content font-medium\"\n >\n {t(`aidol:casting.abilities.${key}`)}\n </text>\n <text\n x={pos.x}\n y={pos.y + 10}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-label-l fill-secondary font-medium\"\n >\n {stats[key]}\n </text>\n </g>\n );\n })}\n </svg>\n </div>\n );\n}\n","import { useTranslation } from \"react-i18next\";\n\nimport type { Companion } from \"@/schemas/companion\";\n\nimport { ImagePreview } from \"./ImagePreview\";\nimport { RadarChart } from \"./RadarChart\";\n\ninterface ProfileContentProps {\n companion: Companion;\n /** 바이오그래피 표시 여부 (기본: true) */\n showBiography?: boolean;\n /** 능력치 표시 여부 (기본: true) */\n showStats?: boolean;\n}\n\nexport function ProfileContent({\n companion,\n showBiography = true,\n showStats = true,\n}: ProfileContentProps) {\n const { t } = useTranslation();\n const { name, profilePictureUrl, grade, mbti, biography, stats } = companion;\n\n return (\n <div className=\"flex flex-col items-center gap-6\">\n <ImagePreview url={profilePictureUrl ?? null} alt={name ?? \"\"} />\n <div className=\"flex flex-col gap-2 self-start\">\n <h2 className=\"text-title-s text-base-content font-semibold\">\n {name ?? \"\"}\n </h2>\n {(grade || mbti) && (\n <div className=\"flex gap-2\">\n {grade && (\n <span className=\"text-label-l bg-base-content text-base-100 rounded-lg px-2 py-1\">\n {t(\"aidol:companion.grade\", { grade })}\n </span>\n )}\n {mbti && (\n <span className=\"text-label-l bg-base-content text-base-100 rounded-lg px-2 py-1\">\n {mbti}\n </span>\n )}\n </div>\n )}\n </div>\n\n {showBiography && biography && (\n <p className=\"text-body-s text-base-content\">{biography}</p>\n )}\n\n {showStats && stats && <RadarChart stats={stats} />}\n </div>\n );\n}\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PromptInputProps {\n placeholder?: string;\n maxLength?: number;\n charCount?: number;\n}\n\n/**\n * Textarea for entering companion system prompt or personality description.\n * Supports react-hook-form register() via forwardRef.\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n ({ placeholder, maxLength = 500, charCount, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"w-full\">\n <textarea\n ref={ref}\n placeholder={placeholder ?? t(\"aidol:companion.promptPlaceholder\")}\n maxLength={maxLength}\n className=\"textarea bg-base-100 text-base-content placeholder:text-base-content/50 focus:border-primary h-32 w-full resize-none focus:outline-hidden\"\n {...props}\n />\n <div className=\"text-label-s text-base-content/50 mt-1 text-right\">\n {charCount ?? 0}/{maxLength}\n </div>\n </div>\n );\n },\n);\n\nPromptInput.displayName = \"PromptInput\";\n","import { useTranslation } from \"react-i18next\";\n\ninterface BiographyInputProps {\n value: string;\n onChange: (value: string) => void;\n}\n\nexport function BiographyInput({ value, onChange }: BiographyInputProps) {\n const { t } = useTranslation();\n\n return (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t(\"aidol:companionCreate.complete.bioPlaceholder\")}\n className=\"input w-full bg-white text-black\"\n />\n );\n}\n","import type { ReactNode } from \"react\";\n\ninterface HeaderProps {\n title: string;\n rightContent?: ReactNode;\n}\n\nexport function Header({ title, rightContent }: HeaderProps) {\n return (\n <header className=\"h-header bg-base-100 flex shrink-0 items-center justify-between px-6 py-4\">\n <h1 className=\"text-headline-s text-base-content\">{title}</h1>\n {rightContent && (\n <div className=\"flex max-w-40 shrink-0 items-center\">\n {rightContent}\n </div>\n )}\n </header>\n );\n}\n","interface ProgressBarProps {\n progress: number;\n}\n\nexport function ProgressBar({ progress }: ProgressBarProps) {\n const clampedProgress = Math.min(100, Math.max(0, progress));\n\n return (\n <div className=\"bg-primary/20 h-3 w-full overflow-hidden rounded-full\">\n <div\n className=\"bg-primary h-full rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${clampedProgress}%` }}\n />\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Header } from \"@/components/Header\";\n\nimport { ProgressBar } from \"./ProgressBar\";\n\ninterface CompanionCreateLayoutProps {\n step: number;\n totalSteps: number;\n children: ReactNode;\n bottomButton: ReactNode;\n}\n\nexport function CompanionCreateLayout({\n step,\n totalSteps,\n children,\n bottomButton,\n}: CompanionCreateLayoutProps) {\n const { t } = useTranslation();\n const progress = (step / totalSteps) * 100;\n\n return (\n <div className=\"flex min-h-dvh flex-col\">\n <Header title={t(\"aidol:companionCreate.title\")} />\n <div className=\"px-6 py-4\">\n <ProgressBar progress={progress} />\n </div>\n <div className=\"flex flex-1 flex-col gap-6 p-6\">{children}</div>\n <div className=\"sticky bottom-0 p-6\">{bottomButton}</div>\n </div>\n );\n}\n","import { useTranslation } from \"react-i18next\";\n\ninterface CompanionNameInputProps {\n value: string;\n onChange: (value: string) => void;\n maxLength?: number;\n}\n\nconst SPECIAL_CHARS_REGEX = /[!@#$%^&*()+=[\\]{}|\\\\;:'\",.<>?/`~_]/g;\n\nexport function CompanionNameInput({\n value,\n onChange,\n maxLength = 10,\n}: CompanionNameInputProps) {\n const { t } = useTranslation();\n\n return (\n <input\n type=\"text\"\n value={value}\n onChange={(e) =>\n onChange(\n e.target.value.replace(SPECIAL_CHARS_REGEX, \"\").slice(0, maxLength),\n )\n }\n placeholder={t(\"aidol:companionCreate.complete.namePlaceholder\")}\n className=\"input w-full bg-white text-black\"\n />\n );\n}\n","import { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ConceptOption {\n value: string;\n label: string;\n}\n\ninterface ConceptSelectorProps {\n options: ConceptOption[];\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\n/**\n * Dropdown selector for AIdol group concept.\n * Supports react-hook-form via forwardRef.\n */\nexport const ConceptSelector = forwardRef<\n HTMLSelectElement,\n ConceptSelectorProps\n>(({ options, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.concept\")}</label>\n <select\n ref={ref}\n className=\"select bg-base-100 text-base-content w-full\"\n {...props}\n >\n <option value=\"\">{t(\"aidol:creation.selectConcept\")}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </fieldset>\n );\n});\n\nConceptSelector.displayName = \"ConceptSelector\";\n","import clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\nimport type { Gender } from \"@/schemas/companion\";\n\ninterface GenderSelectorProps {\n value: Gender | null;\n onChange: (gender: Gender) => void;\n}\n\nexport function GenderSelector({ value, onChange }: GenderSelectorProps) {\n const { t } = useTranslation();\n\n const options: { gender: Gender; label: string }[] = [\n { gender: \"female\", label: t(\"aidol:companionCreate.gender.female\") },\n { gender: \"male\", label: t(\"aidol:companionCreate.gender.male\") },\n ];\n\n return (\n <div className=\"flex gap-4\">\n {options.map(({ gender, label }) => (\n <button\n key={gender}\n type=\"button\"\n onClick={() => onChange(gender)}\n className={clsx(\n \"text-label-l flex-1 rounded-lg border px-6 py-3 transition-colors\",\n value === gender\n ? \"border-primary text-primary bg-white\"\n : \"border-base-300 text-base-content bg-white\",\n )}\n >\n {label}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface EmblemGeneratorProps {\n onGenerate: (prompt: string) => void;\n isGenerating: boolean;\n disabled?: boolean;\n}\n\n/**\n * Emblem image generation input (Presentational)\n * Follows ImageUpload pattern: input + loading state only\n * Preview is handled by parent component\n */\nexport function EmblemGenerator({\n onGenerate,\n isGenerating,\n disabled,\n}: EmblemGeneratorProps) {\n const { t } = useTranslation();\n const [prompt, setPrompt] = useState(\"\");\n\n const handleGenerate = () => {\n if (prompt.trim()) {\n onGenerate(prompt);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && prompt.trim() && !isGenerating && !disabled) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n return (\n <fieldset className=\"fieldset w-full\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={t(\"aidol:creation.emblemPromptPlaceholder\")}\n maxLength={200}\n className=\"input flex-1\"\n disabled={disabled || isGenerating}\n data-testid=\"emblem-prompt-input\"\n />\n <button\n type=\"button\"\n onClick={handleGenerate}\n disabled={disabled || isGenerating || !prompt.trim()}\n className=\"btn btn-secondary\"\n data-testid=\"emblem-generate-button\"\n >\n {isGenerating ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.generate\")\n )}\n </button>\n </div>\n {isGenerating && (\n <div className=\"mt-2\">\n <progress className=\"progress w-full\"></progress>\n </div>\n )}\n </fieldset>\n );\n}\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface GroupNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for AIdol group name.\n * Supports react-hook-form via forwardRef.\n */\nexport const GroupNameInput = forwardRef<HTMLInputElement, GroupNameInputProps>(\n ({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.groupName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.groupNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n },\n);\n\nGroupNameInput.displayName = \"GroupNameInput\";\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface MemberNameInputProps {\n error?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Input field for companion member name.\n * Supports react-hook-form via forwardRef.\n */\nexport const MemberNameInput = forwardRef<\n HTMLInputElement,\n MemberNameInputProps\n>(({ error, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.memberName\")}</label>\n <input\n ref={ref}\n type=\"text\"\n placeholder={t(\"aidol:creation.memberNamePlaceholder\")}\n className={clsx(\n \"input bg-base-100 text-base-content placeholder:text-base-content/50 w-full\",\n error && \"input-error\",\n )}\n {...props}\n />\n {error && <span className=\"text-label-m text-error\">{error}</span>}\n </fieldset>\n );\n});\n\nMemberNameInput.displayName = \"MemberNameInput\";\n","\"use client\";\n\nimport clsx from \"clsx\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface PersonalityOption {\n value: string;\n label: string;\n description?: string;\n}\n\ninterface PersonalitySelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: PersonalityOption[];\n}\n\n/**\n * Radio group selector for companion personality.\n */\nexport function PersonalitySelector({\n value,\n onChange,\n options,\n}: PersonalitySelectorProps) {\n const { t } = useTranslation();\n\n return (\n <fieldset className=\"fieldset w-full\">\n <label className=\"label\">{t(\"aidol:creation.personality\")}</label>\n <div className=\"space-y-2\">\n {options.map((option) => (\n <label\n key={option.value}\n className={clsx(\n \"flex cursor-pointer items-start gap-3 rounded-lg border p-4 transition-colors\",\n value === option.value\n ? \"border-primary bg-primary/10\"\n : \"border-base-300 hover:border-base-content/30\",\n )}\n >\n <input\n type=\"radio\"\n name=\"personality\"\n value={option.value}\n checked={value === option.value}\n onChange={(e) => onChange(e.target.value)}\n className=\"radio-primary radio mt-0.5\"\n />\n <div>\n <div className=\"text-base-content font-medium\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-body-s text-base-content/70 mt-1\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport clsx from \"clsx\";\n\ninterface StepIndicatorProps {\n currentStep: number;\n totalSteps: number;\n labels?: string[];\n}\n\n/**\n * Step indicator for multi-step creation flow.\n * Uses DaisyUI steps component.\n */\nexport function StepIndicator({\n currentStep,\n totalSteps,\n labels,\n}: StepIndicatorProps) {\n return (\n <ul className=\"steps w-full\">\n {Array.from({ length: totalSteps }, (_, index) => {\n const stepNumber = index + 1;\n const isCompleted = stepNumber < currentStep;\n const isCurrent = stepNumber === currentStep;\n\n return (\n <li\n key={stepNumber}\n className={clsx(\n \"step\",\n (isCompleted || isCurrent) && \"step-primary\",\n )}\n >\n {labels?.[index] ?? \"\"}\n </li>\n );\n })}\n </ul>\n );\n}\n","\"use client\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { AddMemberButton } from \"@/components/companion/AddMemberButton\";\nimport { ImagePreview } from \"@/components/companion/ImagePreview\";\nimport { PromptInput } from \"@/components/companion/PromptInput\";\nimport { ConceptSelector } from \"@/components/creation/ConceptSelector\";\nimport { EmblemGenerator } from \"@/components/creation/EmblemGenerator\";\nimport { GroupNameInput } from \"@/components/creation/GroupNameInput\";\nimport { MemberNameInput } from \"@/components/creation/MemberNameInput\";\nimport { PersonalitySelector } from \"@/components/creation/PersonalitySelector\";\nimport { StepIndicator } from \"@/components/creation/StepIndicator\";\nimport {\n groupCreationSchema,\n type GroupCreationFormData,\n} from \"@/schemas/aidol\";\n\nexport type { GroupCreationFormData };\n\nexport interface GroupCreationProps {\n onSubmit: (data: GroupCreationFormData) => Promise<void>;\n onComplete: () => void;\n onGenerateImage: (prompt: string) => Promise<string | null>;\n isLoading: boolean;\n isGeneratingImage: boolean;\n isCompleted: boolean;\n}\n\nconst CONCEPT_KEYS = [\"cute\", \"cool\", \"elegant\", \"powerful\"] as const;\nconst PERSONALITY_KEYS = [\"cheerful\", \"cool\", \"tsundere\", \"gentle\"] as const;\n\n/**\n * AIdol 그룹 생성 멀티스텝 폼 (Presentational)\n * react-hook-form + zod validation\n */\nexport function GroupCreation({\n onSubmit,\n onComplete,\n onGenerateImage,\n isLoading,\n isGeneratingImage,\n isCompleted,\n}: GroupCreationProps): JSX.Element {\n const { t } = useTranslation();\n const [step, setStep] = useState(isCompleted ? 3 : 1);\n\n const conceptOptions = useMemo(\n () =>\n CONCEPT_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.concepts.${key}`),\n })),\n [t],\n );\n\n const personalityOptions = useMemo(\n () =>\n PERSONALITY_KEYS.map((key) => ({\n value: key,\n label: t(`aidol:creation.personalities.${key}.label`),\n description: t(`aidol:creation.personalities.${key}.description`),\n })),\n [t],\n );\n\n const {\n register,\n control,\n handleSubmit,\n trigger,\n watch,\n setValue,\n formState: { errors },\n } = useForm<GroupCreationFormData>({\n resolver: zodResolver(groupCreationSchema),\n defaultValues: {\n groupName: \"\",\n concept: \"\",\n profileImageUrl: \"\",\n members: [{ name: \"\", personality: \"\", systemPrompt: \"\" }],\n },\n });\n\n const profileImageUrl = watch(\"profileImageUrl\");\n\n const { fields, append } = useFieldArray({\n control,\n name: \"members\",\n });\n\n const members = watch(\"members\");\n\n const handleGenerateEmblem = async (prompt: string) => {\n const imageUrl = await onGenerateImage(prompt);\n if (imageUrl) {\n setValue(\"profileImageUrl\", imageUrl);\n }\n };\n\n const handleStep1Next = async () => {\n const isValid = await trigger([\"groupName\", \"profileImageUrl\"]);\n if (isValid) {\n setStep(2);\n }\n };\n\n const handleStep2Submit = handleSubmit(async (data) => {\n // Filter out empty members before submit\n const validMembers = data.members.filter((m) => m.name.trim());\n await onSubmit({ ...data, members: validMembers });\n setStep(3);\n });\n\n const handleAddMember = () => {\n append({ name: \"\", personality: \"\", systemPrompt: \"\" });\n };\n\n return (\n <main className=\"bg-base-100 flex min-h-dvh w-full flex-col items-center px-6 py-20\">\n <div className=\"w-full max-w-lg\">\n <StepIndicator\n currentStep={step}\n totalSteps={3}\n labels={[\n t(\"aidol:creation.step1\"),\n t(\"aidol:creation.step2\"),\n t(\"aidol:creation.step3\"),\n ]}\n />\n\n <div className=\"mt-8\">\n {/* Step 1: Group Info */}\n {step === 1 && (\n <div className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step1Title\")}\n </h2>\n <GroupNameInput\n {...register(\"groupName\")}\n error={\n errors.groupName?.message\n ? t(errors.groupName.message, { ns: \"aidol\" })\n : undefined\n }\n />\n <ConceptSelector\n {...register(\"concept\")}\n options={conceptOptions}\n />\n\n {/* Emblem Image Generation (follows ImageUpload pattern) */}\n <fieldset className=\"fieldset\">\n <label className=\"label\">{t(\"aidol:creation.emblem\")}</label>\n <EmblemGenerator\n onGenerate={handleGenerateEmblem}\n isGenerating={isGeneratingImage}\n disabled={isLoading}\n />\n {profileImageUrl && (\n <div className=\"mt-2 flex justify-center\">\n <ImagePreview\n url={profileImageUrl}\n alt={t(\"aidol:creation.emblem\")}\n />\n </div>\n )}\n {errors.profileImageUrl?.message && (\n <p className=\"text-label-m text-error mt-1\">\n {t(errors.profileImageUrl.message, { ns: \"aidol\" })}\n </p>\n )}\n </fieldset>\n\n <button\n type=\"button\"\n onClick={handleStep1Next}\n disabled={!profileImageUrl}\n className=\"btn btn-primary w-full\"\n >\n {t(\"aidol:creation.next\")}\n </button>\n </div>\n )}\n\n {/* Step 2: Members */}\n {step === 2 && (\n <form onSubmit={handleStep2Submit} className=\"space-y-6\">\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.step2Title\")}\n </h2>\n\n {fields.map((field, index) => (\n <div\n key={field.id}\n className=\"border-base-300 space-y-4 rounded-lg border p-4\"\n >\n <div className=\"flex items-center gap-4\">\n <ImagePreview url={null} alt={members[index]?.name ?? \"\"} />\n <div className=\"flex-1\">\n <MemberNameInput\n {...register(`members.${index}.name`)}\n error={\n errors.members?.[index]?.name?.message\n ? t(errors.members?.[index]?.name?.message ?? \"\", {\n ns: \"aidol\",\n })\n : undefined\n }\n />\n </div>\n </div>\n <Controller\n name={`members.${index}.personality`}\n control={control}\n render={({ field: controllerField }) => (\n <PersonalitySelector\n value={controllerField.value ?? \"\"}\n onChange={controllerField.onChange}\n options={personalityOptions}\n />\n )}\n />\n <PromptInput\n {...register(`members.${index}.systemPrompt`)}\n charCount={members[index]?.systemPrompt?.length ?? 0}\n />\n </div>\n ))}\n\n <AddMemberButton onClick={handleAddMember} isLoading={false} />\n\n {errors.members?.root?.message && (\n <p className=\"text-error text-center\">\n {t(errors.members.root.message, { ns: \"aidol\" })}\n </p>\n )}\n\n <div className=\"flex gap-4\">\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className=\"btn btn-ghost flex-1\"\n disabled={isLoading}\n >\n {t(\"aidol:creation.back\")}\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary flex-1\"\n disabled={isLoading}\n >\n {isLoading ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n t(\"aidol:creation.create\")\n )}\n </button>\n </div>\n </form>\n )}\n\n {/* Step 3: Complete */}\n {step === 3 && (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-display-l\">🎉</div>\n <h2 className=\"text-display-s font-bold\">\n {t(\"aidol:creation.completeTitle\")}\n </h2>\n <p className=\"text-body-l text-base-content/70\">\n {t(\"aidol:creation.completeDescription\")}\n </p>\n <button onClick={onComplete} className=\"btn btn-primary w-full\">\n {t(\"aidol:creation.viewProfile\")}\n </button>\n </div>\n )}\n </div>\n </div>\n </main>\n );\n}\n","interface MbtiSliderProps {\n label: string;\n leftLabel: string;\n rightLabel: string;\n value: number;\n onChange: (value: number) => void;\n}\n\nexport function MbtiSlider({\n label,\n leftLabel,\n rightLabel,\n value,\n onChange,\n}: MbtiSliderProps) {\n return (\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-label-l text-base-content\">{label}</span>\n <input\n type=\"range\"\n min={1}\n max={10}\n step={1}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n className=\"range range-primary range-sm\"\n />\n <div className=\"flex justify-between\">\n <span className=\"text-label-m text-primary\">{leftLabel}</span>\n <span className=\"text-label-m text-primary\">{rightLabel}</span>\n </div>\n </div>\n );\n}\n","import { useTranslation } from \"react-i18next\";\n\nimport { MbtiSlider } from \"./MbtiSlider\";\n\nexport interface MbtiValues {\n energy: number;\n perception: number;\n judgment: number;\n lifestyle: number;\n}\n\ninterface MbtiFormProps {\n values: MbtiValues;\n onChange: (values: MbtiValues) => void;\n}\n\nexport function MbtiForm({ values, onChange }: MbtiFormProps) {\n const { t } = useTranslation();\n\n const axes: {\n key: keyof MbtiValues;\n label: string;\n leftLabel: string;\n rightLabel: string;\n }[] = [\n {\n key: \"energy\",\n label: t(\"aidol:companionCreate.personality.energy\"),\n leftLabel: t(\"aidol:companionCreate.personality.energyLeft\"),\n rightLabel: t(\"aidol:companionCreate.personality.energyRight\"),\n },\n {\n key: \"perception\",\n label: t(\"aidol:companionCreate.personality.perception\"),\n leftLabel: t(\"aidol:companionCreate.personality.perceptionLeft\"),\n rightLabel: t(\"aidol:companionCreate.personality.perceptionRight\"),\n },\n {\n key: \"judgment\",\n label: t(\"aidol:companionCreate.personality.judgment\"),\n leftLabel: t(\"aidol:companionCreate.personality.judgmentLeft\"),\n rightLabel: t(\"aidol:companionCreate.personality.judgmentRight\"),\n },\n {\n key: \"lifestyle\",\n label: t(\"aidol:companionCreate.personality.lifestyle\"),\n leftLabel: t(\"aidol:companionCreate.personality.lifestyleLeft\"),\n rightLabel: t(\"aidol:companionCreate.personality.lifestyleRight\"),\n },\n ];\n\n return (\n <div className=\"flex flex-col gap-6\">\n {axes.map(({ key, label, leftLabel, rightLabel }) => (\n <MbtiSlider\n key={key}\n label={label}\n leftLabel={leftLabel}\n rightLabel={rightLabel}\n value={values[key]}\n onChange={(v) => onChange({ ...values, [key]: v })}\n />\n ))}\n </div>\n );\n}\n","import { SparklesIcon } from \"@heroicons/react/24/outline\";\nimport Image from \"next/image\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ProfileImageGeneratorProps {\n prompt: string;\n onPromptChange: (prompt: string) => void;\n onGenerate: () => void;\n isGenerating: boolean;\n imageUrl: string | null;\n hasGenerated: boolean;\n}\n\nexport function ProfileImageGenerator({\n prompt,\n onPromptChange,\n onGenerate,\n isGenerating,\n imageUrl,\n hasGenerated,\n}: ProfileImageGeneratorProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"flex flex-col gap-4\">\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => onPromptChange(e.target.value)}\n placeholder={t(\"aidol:companionCreate.image.promptPlaceholder\")}\n className=\"input w-full bg-white text-black\"\n />\n <button\n type=\"button\"\n onClick={onGenerate}\n disabled={isGenerating || !prompt.trim()}\n className=\"btn btn-primary w-full\"\n >\n {isGenerating && <span className=\"loading loading-spinner\" />}\n {hasGenerated\n ? t(\"aidol:companionCreate.image.regenerate\")\n : t(\"aidol:companionCreate.image.generate\")}\n </button>\n\n {imageUrl ? (\n <div className=\"relative aspect-square w-full overflow-hidden rounded-lg\">\n <Image\n src={imageUrl}\n alt=\"Generated profile\"\n fill\n className=\"object-cover\"\n />\n </div>\n ) : (\n <div className=\"border-base-300 bg-base-100 flex aspect-square w-full flex-col items-center justify-center gap-4 rounded-lg border\">\n <SparklesIcon className=\"text-neutral size-6\" />\n <p className=\"text-body-m text-neutral text-center whitespace-pre-line\">\n {t(\"aidol:companionCreate.image.placeholder\")}\n </p>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\ninterface StepCardProps {\n step: number;\n title: string;\n children: ReactNode;\n}\n\nexport function StepCard({ step, title, children }: StepCardProps) {\n const formattedStep = step.toString().padStart(2, \"0\");\n\n return (\n <div className=\"bg-base-200 flex w-full flex-col gap-6 rounded-lg p-6\">\n <span className=\"text-title-s text-primary\">{formattedStep}</span>\n <h3 className=\"text-title-s text-base-content\">{title}</h3>\n <div className=\"flex flex-col gap-4\">{children}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport { motion, Variants } from \"framer-motion\";\nimport Image from \"next/image\";\nimport { useTranslation } from \"react-i18next\";\n\nconst fadeInUp: Variants = {\n initial: { y: 40, opacity: 0 },\n animate: {\n y: 0,\n opacity: 1,\n transition: {\n duration: 0.8,\n ease: \"easeInOut\",\n },\n },\n};\n\nconst staggerContainer: Variants = {\n animate: {\n transition: {\n staggerChildren: 0.15,\n },\n },\n};\n\ninterface HeroSectionProps {\n onGetStarted: () => void;\n}\n\n/**\n * Hero section for AIdol landing page.\n */\nexport function HeroSection({ onGetStarted }: HeroSectionProps) {\n const { t } = useTranslation();\n\n return (\n <section className=\"bg-base-100 flex min-h-screen w-full flex-col items-center px-6 pt-12 pb-8\">\n <motion.div\n variants={staggerContainer}\n initial=\"initial\"\n animate=\"animate\"\n className=\"flex w-full flex-col items-center text-center\"\n >\n <motion.div variants={fadeInUp} className=\"mb-6\">\n <Image\n src=\"/images/logo.svg\"\n alt=\"AIdol\"\n width={92}\n height={28}\n priority\n />\n </motion.div>\n\n <motion.h1 variants={fadeInUp} className=\"text-display-s mb-3\">\n {t(\"aidol:landing.hero.title.line1\")}\n <br />\n {t(\"aidol:landing.hero.title.line2\")}\n </motion.h1>\n\n <motion.div\n variants={fadeInUp}\n className=\"text-headline-s text-base-content mb-8 flex flex-col\"\n >\n <p className=\"text-neutral\">{t(\"aidol:landing.hero.line1\")}</p>\n <p className=\"text-neutral\">{t(\"aidol:landing.hero.line2\")}</p>\n <p>{t(\"aidol:landing.hero.line3\")}</p>\n <p>{t(\"aidol:landing.hero.line4\")}</p>\n </motion.div>\n\n <motion.div\n variants={fadeInUp}\n className=\"bg-base-200 relative mb-6 aspect-[345/368] w-full overflow-hidden rounded-lg\"\n />\n\n <motion.div variants={fadeInUp} className=\"w-full\">\n <button\n onClick={onGetStarted}\n className=\"btn btn-primary btn-lg text-label-l w-full rounded-lg\"\n >\n {t(\"aidol:landing.hero.cta\")}\n </button>\n </motion.div>\n </motion.div>\n </section>\n );\n}\n","import clsx from \"clsx\";\nimport type { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ModalAction {\n label: string;\n onClick: () => void;\n variant?: \"primary\" | \"neutral\";\n}\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n children: ReactNode;\n action?: ModalAction;\n}\n\nexport function Modal({ isOpen, onClose, children, action }: ModalProps) {\n const { t } = useTranslation();\n\n if (!isOpen) return null;\n\n return (\n <>\n <div\n className=\"fixed top-0 left-0 z-40 h-screen w-screen bg-black/80\"\n onClick={onClose}\n />\n <div\n className=\"max-w-mobile fixed inset-0 z-50 mx-auto flex items-center justify-center p-6\"\n onClick={onClose}\n >\n <div\n className=\"bg-base-200 relative flex max-h-170 min-h-90 w-full flex-col gap-6 overflow-hidden rounded-lg p-6\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* 모달 내용 */}\n <div className=\"scrollbar-hide flex-1 overflow-y-auto pb-20\">\n {children}\n </div>\n\n {/* 모달 하단 버튼 */}\n <div className=\"absolute inset-x-6 bottom-6 flex shrink-0 gap-4\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"btn btn-lg bg-base-300 text-label-l text-base-content rounded-lg p-4\"\n >\n {t(\"aidol:common.close\")}\n </button>\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className={clsx(\n \"btn btn-lg text-label-l flex-1\",\n action.variant === \"neutral\" ? \"btn-neutral\" : \"btn-primary\",\n )}\n >\n {action.label}\n </button>\n )}\n </div>\n </div>\n </div>\n </>\n );\n}\n","\"use client\";\n\nimport { CheckIcon, ShareIcon } from \"@heroicons/react/24/outline\";\nimport { useCallback, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ShareButtonProps {\n url: string;\n onCopySuccess?: () => void;\n}\n\n/**\n * Share button that copies URL to clipboard.\n * Shows a check icon briefly after successful copy.\n */\nexport function ShareButton({ url, onCopySuccess }: ShareButtonProps) {\n const { t } = useTranslation();\n const [copied, setCopied] = useState(false);\n\n const handleShare = useCallback(async () => {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n onCopySuccess?.();\n setTimeout(() => setCopied(false), 2000);\n }, [url, onCopySuccess]);\n\n return (\n <button\n onClick={handleShare}\n className=\"btn btn-circle btn-ghost\"\n aria-label={t(\"aidol:share\")}\n >\n {copied ? (\n <CheckIcon className=\"text-success size-6\" />\n ) : (\n <ShareIcon className=\"size-6\" />\n )}\n </button>\n );\n}\n"],"names":["r","e","t","f","n","o","clsx","CheckIcon","title","titleId","props","svgRef","React","ForwardRef","PlusIcon","ShareIcon","SparklesIcon","UserGroupIcon","UserIcon","SIZE_CLASSES","ImagePreview","url","alt","variant","jsx","Image","Card","companion","onClick","useTranslation","showSignedOverlay","isClickable","gradientOpacity","badgeText","jsxs","Fragment","CompanionGrid","companions","onCompanionClick","GroupHeader","aidol","AddMemberButton","isLoading","STAT_KEYS","RadarChart","stats","size","center","maxRadius","labelRadius","getPoint","index","value","angle","radius","getLabelPosition","points","key","i","polygonPoints","p","gridLevels","level","gridPolygon","_","endPoint","point","pos","ProfileContent","showBiography","showStats","name","profilePictureUrl","grade","mbti","biography","PromptInput","forwardRef","placeholder","maxLength","charCount","ref","BiographyInput","onChange","Header","rightContent","ProgressBar","progress","clampedProgress","CompanionCreateLayout","step","totalSteps","children","bottomButton","SPECIAL_CHARS_REGEX","CompanionNameInput","ConceptSelector","options","option","GenderSelector","gender","label","EmblemGenerator","onGenerate","isGenerating","disabled","prompt","setPrompt","useState","handleGenerate","handleKeyDown","s","a","u","GroupNameInput","error","MemberNameInput","PersonalitySelector","StepIndicator","currentStep","labels","stepNumber","isCompleted","isCurrent","CONCEPT_KEYS","PERSONALITY_KEYS","GroupCreation","onSubmit","onComplete","onGenerateImage","isGeneratingImage","setStep","conceptOptions","useMemo","personalityOptions","register","control","handleSubmit","trigger","watch","setValue","errors","useForm","zodResolver","groupCreationSchema","profileImageUrl","fields","append","useFieldArray","members","handleGenerateEmblem","imageUrl","handleStep1Next","handleStep2Submit","data","validMembers","m","handleAddMember","field","Controller","controllerField","MbtiSlider","leftLabel","rightLabel","MbtiForm","values","axes","v","ProfileImageGenerator","onPromptChange","hasGenerated","StepCard","formattedStep","fadeInUp","staggerContainer","HeroSection","onGetStarted","motion","Modal","isOpen","onClose","action","ShareButton","onCopySuccess","copied","setCopied","handleShare","useCallback"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,23]}