aidol 0.3.0 → 0.4.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.
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from 'react';
2
+ interface ModalAction {
3
+ label: string;
4
+ onClick: () => void;
5
+ variant?: "primary" | "neutral";
6
+ }
7
+ interface ModalProps {
8
+ isOpen: boolean;
9
+ onClose: () => void;
10
+ children: ReactNode;
11
+ action?: ModalAction;
12
+ }
13
+ export declare function Modal({ isOpen, onClose, children, action }: ModalProps): import("react").JSX.Element | null;
14
+ export {};
15
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,sCAkDtE"}
@@ -0,0 +1,7 @@
1
+ import { Companion } from '../../schemas/companion';
2
+ interface ProfileContentProps {
3
+ companion: Companion;
4
+ }
5
+ export declare function ProfileContent({ companion }: ProfileContentProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=ProfileContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileContent.d.ts","sourceRoot":"","sources":["../../../src/components/companion/ProfileContent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE,mBAAmB,+BA6BhE"}
@@ -1,5 +1,6 @@
1
1
  export { AddMemberButton } from './AddMemberButton';
2
2
  export { Card } from './Card';
3
+ export { ProfileContent } from './ProfileContent';
3
4
  export { ImagePreview } from './ImagePreview';
4
5
  export { PromptInput } from './PromptInput';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/companion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/companion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ interface StepCardProps {
3
+ step: number;
4
+ title: string;
5
+ children: ReactNode;
6
+ }
7
+ export declare function StepCard({ step, title, children }: StepCardProps): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=StepCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepCard.d.ts","sourceRoot":"","sources":["../../../src/components/creation/StepCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,+BAUhE"}
@@ -4,5 +4,6 @@ export { GroupCreation } from './GroupCreation';
4
4
  export { GroupNameInput } from './GroupNameInput';
5
5
  export { MemberNameInput } from './MemberNameInput';
6
6
  export { PersonalitySelector } from './PersonalitySelector';
7
+ export { StepCard } from './StepCard';
7
8
  export { StepIndicator } from './StepIndicator';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/creation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/creation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -2,5 +2,7 @@ export * from './aidol';
2
2
  export * from './companion';
3
3
  export * from './creation';
4
4
  export * from './landing';
5
+ export { Header } from './Header';
6
+ export { Modal } from './Modal';
5
7
  export { ShareButton } from './ShareButton';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -20,6 +20,9 @@ export declare const AIDOL_NS = "aidol";
20
20
  */
21
21
  export declare const aidolTranslations: {
22
22
  en: {
23
+ common: {
24
+ close: string;
25
+ };
23
26
  share: string;
24
27
  urlCopied: string;
25
28
  companion: {
@@ -97,6 +100,9 @@ export declare const aidolTranslations: {
97
100
  };
98
101
  };
99
102
  es: {
103
+ common: {
104
+ close: string;
105
+ };
100
106
  share: string;
101
107
  urlCopied: string;
102
108
  companion: {
@@ -174,6 +180,9 @@ export declare const aidolTranslations: {
174
180
  };
175
181
  };
176
182
  id: {
183
+ common: {
184
+ close: string;
185
+ };
177
186
  share: string;
178
187
  urlCopied: string;
179
188
  companion: {
@@ -251,6 +260,9 @@ export declare const aidolTranslations: {
251
260
  };
252
261
  };
253
262
  ja: {
263
+ common: {
264
+ close: string;
265
+ };
254
266
  share: string;
255
267
  urlCopied: string;
256
268
  companion: {
@@ -328,6 +340,9 @@ export declare const aidolTranslations: {
328
340
  };
329
341
  };
330
342
  ko: {
343
+ common: {
344
+ close: string;
345
+ };
331
346
  share: string;
332
347
  urlCopied: string;
333
348
  companion: {
@@ -405,6 +420,9 @@ export declare const aidolTranslations: {
405
420
  };
406
421
  };
407
422
  th: {
423
+ common: {
424
+ close: string;
425
+ };
408
426
  share: string;
409
427
  urlCopied: string;
410
428
  companion: {
@@ -482,6 +500,9 @@ export declare const aidolTranslations: {
482
500
  };
483
501
  };
484
502
  tl: {
503
+ common: {
504
+ close: string;
505
+ };
485
506
  share: string;
486
507
  urlCopied: string;
487
508
  companion: {
@@ -559,6 +580,9 @@ export declare const aidolTranslations: {
559
580
  };
560
581
  };
561
582
  vi: {
583
+ common: {
584
+ close: string;
585
+ };
562
586
  share: string;
563
587
  urlCopied: string;
564
588
  companion: {
@@ -636,6 +660,9 @@ export declare const aidolTranslations: {
636
660
  };
637
661
  };
638
662
  zh: {
663
+ common: {
664
+ close: string;
665
+ };
639
666
  share: string;
640
667
  urlCopied: string;
641
668
  companion: {
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/i18n/translations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,sBAAsB;AACtB,eAAO,MAAM,QAAQ,UAAU,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/i18n/translations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,sBAAsB;AACtB,eAAO,MAAM,QAAQ,UAAU,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@aioia/core"),a=require("./aidol-gZjlTwTe.js"),e=require("zod"),n=e.z.object({id:e.z.string(),aidolId:e.z.string().nullable().optional(),name:e.z.string(),biography:e.z.string().nullable().optional(),profilePictureUrl:e.z.string().nullable().optional(),grade:e.z.string().nullable(),position:e.z.string().nullable(),createdAt:e.z.string(),updatedAt:e.z.string()});class s extends o.BaseCrudRepository{constructor(){super(...arguments),this.resource="aidol/aidols"}getDataSchema(){return a.aidolSchema}async generateImage(r,i){const l=this.apiService.buildUrl(`${this.resource}/images`),m=await this.apiService.request(l,{...i,method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return this.validateResponse(m,a.imageGenerationResponseSchema)}}class c extends o.BaseCrudRepository{constructor(){super(...arguments),this.resource="aidol/companions"}getDataSchema(){return n}}const d="Share",p="URL copied!",u={promptPlaceholder:"How does your idol talk? Describe their vibe...",addMember:"Add Member",signed:"Signed 🥺",grade:"Grade {{grade}}"},g={notFound:"Group not found",members:"Members",noMembers:"No members yet"},b={groupName:"Group Name",groupNamePlaceholder:"e.g. DREAMERS, STARLIGHT",memberName:"Member Name",memberNamePlaceholder:"e.g. Luna, Kai",concept:"Concept",selectConcept:"Select a concept",personality:"Personality",concepts:{cute:"Cute",cool:"Cool",elegant:"Elegant",powerful:"Powerful"},personalities:{cheerful:{label:"Cheerful",description:"Always bright and positive"},cool:{label:"Cool",description:"Calm and collected"},tsundere:{label:"Tsundere",description:"Cold outside, warm inside"},gentle:{label:"Gentle",description:"Kind and caring"}},step1:"Group",step2:"Members",step3:"Done",step1Title:"Create Your Group",step2Title:"Add Members",groupNameRequired:"Please enter a group name",memberNameRequired:"Please enter a member name",memberRequired:"Please add at least one member",emblem:"Emblem",emblemPromptPlaceholder:"Describe your group's emblem...",emblemRequired:"Please generate an emblem image",generate:"Generate",next:"Next",back:"Back",create:"Create",completeTitle:"Your Idol is Ready!",completeDescription:"Start chatting with your dream idol now",viewProfile:"View Profile"},h={hero:{title:"Create Your Dream Idol",description:"Design your perfect idol and chat like a real fan",cta:"Start Creating"},demo:{title:"Your Imagination, Your Idol",description:"Create idols with unique personalities and build your connection"}},T={share:d,urlCopied:p,companion:u,aidol:g,creation:b,landing:h},P="Compartir",R="¡URL copiada!",N={promptPlaceholder:"¿Cómo habla tu idol? Describe su personalidad...",addMember:"Añadir Miembro",signed:"Firmado 🥺",grade:"Grado {{grade}}"},y={notFound:"Grupo no encontrado",members:"Miembros",noMembers:"Aún no hay miembros"},M={groupName:"Nombre del Grupo",groupNamePlaceholder:"ej: DREAMERS, STARLIGHT",memberName:"Nombre del Miembro",memberNamePlaceholder:"ej: Luna, Kai",concept:"Concepto",selectConcept:"Selecciona un concepto",personality:"Personalidad",concepts:{cute:"Lindo",cool:"Genial",elegant:"Elegante",powerful:"Poderoso"},personalities:{cheerful:{label:"Alegre",description:"Siempre brillante y positivo"},cool:{label:"Genial",description:"Tranquilo y sereno"},tsundere:{label:"Tsundere",description:"Frío por fuera, cálido por dentro"},gentle:{label:"Amable",description:"Bondadoso y cariñoso"}},step1:"Grupo",step2:"Miembros",step3:"Listo",step1Title:"Crea Tu Grupo",step2Title:"Añade Miembros",groupNameRequired:"Por favor ingresa un nombre de grupo",memberNameRequired:"Por favor ingresa un nombre de miembro",memberRequired:"Por favor añade al menos un miembro",emblem:"Emblema",emblemPromptPlaceholder:"Describe el emblema de tu grupo...",emblemRequired:"Por favor genera una imagen de emblema",generate:"Generar",next:"Siguiente",back:"Atrás",create:"Crear",completeTitle:"¡Tu Idol Está Listo!",completeDescription:"Empieza a chatear con tu idol soñado ahora",viewProfile:"Ver Perfil"},C={hero:{title:"Crea Tu Idol Soñado",description:"Diseña tu idol perfecto y chatea como un verdadero fan",cta:"Empezar a Crear"},demo:{title:"Tu Imaginación, Tu Idol",description:"Crea idols únicos y construye una conexión especial"}},k={share:P,urlCopied:R,companion:N,aidol:y,creation:M,landing:C},S="Bagikan",f="URL disalin!",$={promptPlaceholder:"Gimana idol kamu ngobrol? Ceritain kepribadiannya...",addMember:"Tambah Anggota",signed:"Sudah Dikontrak 🥺",grade:"Grade {{grade}}"},q={notFound:"Grup tidak ditemukan",members:"Anggota",noMembers:"Belum ada anggota"},I={groupName:"Nama Grup",groupNamePlaceholder:"cth: DREAMERS, STARLIGHT",memberName:"Nama Anggota",memberNamePlaceholder:"cth: Luna, Kai",concept:"Konsep",selectConcept:"Pilih konsep",personality:"Kepribadian",concepts:{cute:"Imut",cool:"Keren",elegant:"Elegan",powerful:"Kuat"},personalities:{cheerful:{label:"Ceria",description:"Selalu cerah dan positif"},cool:{label:"Keren",description:"Tenang dan kalem"},tsundere:{label:"Tsundere",description:"Dingin di luar, hangat di dalam"},gentle:{label:"Lembut",description:"Baik hati dan perhatian"}},step1:"Grup",step2:"Anggota",step3:"Selesai",step1Title:"Buat Grup Kamu",step2Title:"Tambah Anggota",groupNameRequired:"Masukkan nama grup",memberNameRequired:"Masukkan nama anggota",memberRequired:"Tambahkan minimal satu anggota",emblem:"Emblem",emblemPromptPlaceholder:"Deskripsikan emblem grup kamu...",emblemRequired:"Buat gambar emblem dulu",generate:"Buat",next:"Lanjut",back:"Kembali",create:"Buat",completeTitle:"Idol Kamu Siap!",completeDescription:"Langsung ngobrol sama idol impianmu sekarang",viewProfile:"Lihat Profil"},G={hero:{title:"Buat Idol Impianmu",description:"Desain idol sempurnamu dan ngobrol kayak fans beneran",cta:"Mulai Buat"},demo:{title:"Imajinasimu Jadi Idol",description:"Buat idol unik dan bangun koneksi spesial"}},L={share:S,urlCopied:f,companion:$,aidol:q,creation:I,landing:G},A="共有",D="URLがコピーされました!",v={promptPlaceholder:"どんな話し方をする?性格を教えてね...",addMember:"メンバー追加",signed:"契約完了 🥺",grade:"{{grade}} ランク"},w={notFound:"グループが見つかりません",members:"メンバー",noMembers:"まだメンバーがいません"},E={groupName:"グループ名",groupNamePlaceholder:"例: DREAMERS, STARLIGHT",memberName:"メンバー名",memberNamePlaceholder:"例: ルナ, カイ",concept:"コンセプト",selectConcept:"コンセプトを選択",personality:"性格",concepts:{cute:"キュート",cool:"クール",elegant:"エレガント",powerful:"パワフル"},personalities:{cheerful:{label:"明るい",description:"いつも元気でポジティブ"},cool:{label:"クール",description:"冷静で落ち着いている"},tsundere:{label:"ツンデレ",description:"外は冷たく中は温かい"},gentle:{label:"優しい",description:"親切で思いやりがある"}},step1:"グループ",step2:"メンバー",step3:"完了",step1Title:"グループを作ろう",step2Title:"メンバーを追加",groupNameRequired:"グループ名を入力してください",memberNameRequired:"メンバー名を入力してください",memberRequired:"メンバーを1人以上追加してください",emblem:"エンブレム",emblemPromptPlaceholder:"グループのエンブレムを説明してください...",emblemRequired:"エンブレム画像を生成してください",generate:"生成",next:"次へ",back:"戻る",create:"作成",completeTitle:"アイドル完成!",completeDescription:"さっそく推しと会話しよう",viewProfile:"プロフィールを見る"},B={hero:{title:"夢のアイドルを作ろう",description:"理想のアイドルを作って、本物のファンみたいに会話しよう",cta:"作り始める"},demo:{title:"想像がアイドルになる",description:"あなただけのアイドルを作り、特別な絆を築こう"}},K={share:A,urlCopied:D,companion:v,aidol:w,creation:E,landing:B},x="공유",z="URL이 복사되었습니다!",H={promptPlaceholder:"어떤 말투로 대화할까요? 성격을 설명해 주세요...",addMember:"멤버 추가",signed:"계약 완료 🥺",grade:"{{grade}} 등급"},V={notFound:"그룹을 찾을 수 없습니다",members:"멤버",noMembers:"아직 멤버가 없습니다"},F={groupName:"그룹 이름",groupNamePlaceholder:"예: 드리머즈, 스타라이트",memberName:"멤버 이름",memberNamePlaceholder:"예: 루나, 카이",concept:"컨셉",selectConcept:"컨셉을 선택하세요",personality:"성격",concepts:{cute:"큐트",cool:"쿨",elegant:"우아한",powerful:"파워풀"},personalities:{cheerful:{label:"활발한",description:"항상 밝고 긍정적인"},cool:{label:"쿨한",description:"차분하고 침착한"},tsundere:{label:"츤데레",description:"겉은 차갑지만 속은 따뜻한"},gentle:{label:"다정한",description:"친절하고 배려심 깊은"}},step1:"그룹",step2:"멤버",step3:"완료",step1Title:"그룹 만들기",step2Title:"멤버 추가하기",groupNameRequired:"그룹 이름을 입력해 주세요",memberNameRequired:"멤버 이름을 입력해 주세요",memberRequired:"멤버를 한 명 이상 추가해 주세요",emblem:"엠블럼",emblemPromptPlaceholder:"그룹의 엠블럼을 설명해 주세요...",emblemRequired:"엠블럼 이미지를 생성해 주세요",generate:"생성",next:"다음",back:"이전",create:"만들기",completeTitle:"아이돌 완성!",completeDescription:"지금 바로 나만의 아이돌과 대화해 보세요",viewProfile:"프로필 보기"},U={hero:{title:"꿈꾸던 아이돌, 직접 만들기",description:"나만의 아이돌을 만들고 진짜 팬처럼 대화하세요",cta:"만들기 시작"},demo:{title:"상상 속 아이돌이 현실로",description:"나만의 아이돌을 만들고 특별한 관계를 쌓아보세요"}},j={share:x,urlCopied:z,companion:H,aidol:V,creation:F,landing:U},O="แชร์",Y="คัดลอก URL แล้ว!",J={promptPlaceholder:"ไอดอลของคุณพูดยังไง? บรรยายบุคลิกสักนิด...",addMember:"เพิ่มสมาชิก",signed:"เซ็นสัญญาแล้ว 🥺",grade:"เกรด {{grade}}"},X={notFound:"ไม่พบกลุ่ม",members:"สมาชิก",noMembers:"ยังไม่มีสมาชิก"},_={groupName:"ชื่อกลุ่ม",groupNamePlaceholder:"เช่น: DREAMERS, STARLIGHT",memberName:"ชื่อสมาชิก",memberNamePlaceholder:"เช่น: Luna, Kai",concept:"คอนเซ็ปต์",selectConcept:"เลือกคอนเซ็ปต์",personality:"บุคลิกภาพ",concepts:{cute:"น่ารัก",cool:"เท่",elegant:"สง่างาม",powerful:"ทรงพลัง"},personalities:{cheerful:{label:"ร่าเริง",description:"สดใสและเป็นบวกเสมอ"},cool:{label:"เท่",description:"สงบและเยือกเย็น"},tsundere:{label:"ซึนเดเระ",description:"ภายนอกเย็นชา ภายในอบอุ่น"},gentle:{label:"อ่อนโยน",description:"ใจดีและเอาใจใส่"}},step1:"กลุ่ม",step2:"สมาชิก",step3:"เสร็จ",step1Title:"สร้างกลุ่มของคุณ",step2Title:"เพิ่มสมาชิก",groupNameRequired:"กรุณาใส่ชื่อกลุ่ม",memberNameRequired:"กรุณาใส่ชื่อสมาชิก",memberRequired:"กรุณาเพิ่มสมาชิกอย่างน้อย 1 คน",emblem:"ตราสัญลักษณ์",emblemPromptPlaceholder:"อธิบายตราสัญลักษณ์กลุ่ม...",emblemRequired:"กรุณาสร้างภาพตราสัญลักษณ์",generate:"สร้าง",next:"ถัดไป",back:"กลับ",create:"สร้าง",completeTitle:"ไอดอลพร้อมแล้ว!",completeDescription:"เริ่มแชทกับไอดอลในฝันของคุณได้เลย",viewProfile:"ดูโปรไฟล์"},Q={hero:{title:"สร้างไอดอลในฝัน",description:"ออกแบบไอดอลในอุดมคติและแชทเหมือนแฟนคลับตัวจริง",cta:"เริ่มสร้าง"},demo:{title:"จินตนาการกลายเป็นไอดอล",description:"สร้างไอดอลที่มีเอกลักษณ์และสร้างสายสัมพันธ์พิเศษ"}},W={share:O,urlCopied:Y,companion:J,aidol:X,creation:_,landing:Q},Z="I-share",ee="Nakopya ang URL!",ae={promptPlaceholder:"Paano nagsasalita ang idol mo? Ilarawan ang personality...",addMember:"Magdagdag ng Miyembro",signed:"Naka-kontrata na 🥺",grade:"Grade {{grade}}"},oe={notFound:"Hindi nahanap ang grupo",members:"Miyembro",noMembers:"Wala pang miyembro"},ne={groupName:"Pangalan ng Grupo",groupNamePlaceholder:"hal: DREAMERS, STARLIGHT",memberName:"Pangalan ng Miyembro",memberNamePlaceholder:"hal: Luna, Kai",concept:"Konsepto",selectConcept:"Pumili ng konsepto",personality:"Personalidad",concepts:{cute:"Cute",cool:"Cool",elegant:"Elegante",powerful:"Malakas"},personalities:{cheerful:{label:"Masayahin",description:"Palaging masaya at positibo"},cool:{label:"Cool",description:"Kalmado at mahinahon"},tsundere:{label:"Tsundere",description:"Malamig sa labas, mainit sa loob"},gentle:{label:"Mabait",description:"Maalalahanin at mapagmahal"}},step1:"Grupo",step2:"Miyembro",step3:"Tapos",step1Title:"Gumawa ng Grupo",step2Title:"Magdagdag ng Miyembro",groupNameRequired:"Maglagay ng pangalan ng grupo",memberNameRequired:"Maglagay ng pangalan ng miyembro",memberRequired:"Magdagdag ng kahit isang miyembro",emblem:"Emblema",emblemPromptPlaceholder:"Ilarawan ang emblema ng grupo...",emblemRequired:"Gumawa ng imahe ng emblema",generate:"Lumikha",next:"Susunod",back:"Bumalik",create:"Gumawa",completeTitle:"Handa na ang Idol Mo!",completeDescription:"Mag-chat na sa iyong dream idol ngayon",viewProfile:"Tingnan ang Profile"},te={hero:{title:"Likhain ang Idol ng Iyong Pangarap",description:"I-design ang perpektong idol at mag-chat na parang tunay na fan",cta:"Magsimulang Lumikha"},demo:{title:"Ang Imahinasyon Mo, Ang Idol Mo",description:"Lumikha ng mga natatanging idol at magtayo ng koneksyon"}},re={share:Z,urlCopied:ee,companion:ae,aidol:oe,creation:ne,landing:te},ie="Chia sẻ",le="Đã sao chép URL!",me={promptPlaceholder:"Idol của bạn nói chuyện như thế nào? Mô tả tính cách...",addMember:"Thêm Thành Viên",signed:"Đã ký hợp đồng 🥺",grade:"Hạng {{grade}}"},se={notFound:"Không tìm thấy nhóm",members:"Thành Viên",noMembers:"Chưa có thành viên"},ce={groupName:"Tên Nhóm",groupNamePlaceholder:"vd: DREAMERS, STARLIGHT",memberName:"Tên Thành Viên",memberNamePlaceholder:"vd: Luna, Kai",concept:"Concept",selectConcept:"Chọn concept",personality:"Tính Cách",concepts:{cute:"Dễ thương",cool:"Ngầu",elegant:"Thanh lịch",powerful:"Mạnh mẽ"},personalities:{cheerful:{label:"Vui vẻ",description:"Luôn tươi sáng và tích cực"},cool:{label:"Ngầu",description:"Bình tĩnh và điềm đạm"},tsundere:{label:"Tsundere",description:"Lạnh lùng bên ngoài, ấm áp bên trong"},gentle:{label:"Dịu dàng",description:"Tốt bụng và quan tâm"}},step1:"Nhóm",step2:"Thành Viên",step3:"Xong",step1Title:"Tạo Nhóm",step2Title:"Thêm Thành Viên",groupNameRequired:"Vui lòng nhập tên nhóm",memberNameRequired:"Vui lòng nhập tên thành viên",memberRequired:"Vui lòng thêm ít nhất một thành viên",emblem:"Biểu tượng",emblemPromptPlaceholder:"Mô tả biểu tượng nhóm...",emblemRequired:"Vui lòng tạo hình biểu tượng",generate:"Tạo",next:"Tiếp",back:"Quay lại",create:"Tạo",completeTitle:"Idol Đã Sẵn Sàng!",completeDescription:"Bắt đầu trò chuyện với idol mơ ước ngay",viewProfile:"Xem Hồ Sơ"},de={hero:{title:"Tạo Idol Mơ Ước",description:"Thiết kế idol hoàn hảo và trò chuyện như fan thật sự",cta:"Bắt Đầu Tạo"},demo:{title:"Trí Tưởng Tượng Thành Idol",description:"Tạo idol độc đáo và xây dựng mối liên kết đặc biệt"}},pe={share:ie,urlCopied:le,companion:me,aidol:se,creation:ce,landing:de},ue="分享",ge="URL已复制!",be={promptPlaceholder:"你的偶像怎么说话?描述一下性格...",addMember:"添加成员",signed:"已签约 🥺",grade:"{{grade}} 级"},he={notFound:"找不到该组合",members:"成员",noMembers:"暂无成员"},Te={groupName:"组合名",groupNamePlaceholder:"例如: DREAMERS, STARLIGHT",memberName:"成员名",memberNamePlaceholder:"例如: Luna, Kai",concept:"概念",selectConcept:"选择概念",personality:"性格",concepts:{cute:"可爱",cool:"酷",elegant:"优雅",powerful:"有力"},personalities:{cheerful:{label:"开朗",description:"总是阳光积极"},cool:{label:"冷酷",description:"冷静沉着"},tsundere:{label:"傲娇",description:"外冷内热"},gentle:{label:"温柔",description:"善良体贴"}},step1:"组合",step2:"成员",step3:"完成",step1Title:"创建组合",step2Title:"添加成员",groupNameRequired:"请输入组合名",memberNameRequired:"请输入成员名",memberRequired:"请至少添加一名成员",emblem:"徽章",emblemPromptPlaceholder:"描述你的组合徽章...",emblemRequired:"请生成徽章图片",generate:"生成",next:"下一步",back:"上一步",create:"创建",completeTitle:"偶像创建完成!",completeDescription:"现在就和你的梦想偶像聊天吧",viewProfile:"查看资料"},Pe={hero:{title:"创造你的梦想偶像",description:"设计你的理想偶像,像真正的粉丝一样聊天",cta:"开始创作"},demo:{title:"让想象变成偶像",description:"创建独特的偶像,建立特别的羁绊"}},Re={share:ue,urlCopied:ge,companion:be,aidol:he,creation:Te,landing:Pe},Ne="aidol",ye={en:T,es:k,id:L,ja:K,ko:j,th:W,tl:re,vi:pe,zh:Re};exports.aidolSchema=a.aidolSchema;exports.imageGenerationResponseSchema=a.imageGenerationResponseSchema;exports.AIDOL_NS=Ne;exports.AIdolRepository=s;exports.CompanionRepository=c;exports.aidolTranslations=ye;exports.companionSchema=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@aioia/core"),o=require("./aidol-gZjlTwTe.js"),e=require("zod"),n=e.z.object({id:e.z.string(),aidolId:e.z.string().nullable().optional(),name:e.z.string(),biography:e.z.string().nullable().optional(),profilePictureUrl:e.z.string().nullable().optional(),grade:e.z.string().nullable().optional(),position:e.z.string().nullable().optional(),mbti:e.z.string().nullable().optional(),createdAt:e.z.string(),updatedAt:e.z.string()});class c extends a.BaseCrudRepository{constructor(){super(...arguments),this.resource="aidol/aidols"}getDataSchema(){return o.aidolSchema}async generateImage(r,i){const l=this.apiService.buildUrl(`${this.resource}/images`),m=await this.apiService.request(l,{...i,method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return this.validateResponse(m,o.imageGenerationResponseSchema)}}class s extends a.BaseCrudRepository{constructor(){super(...arguments),this.resource="aidol/companions"}getDataSchema(){return n}}const d={close:"Close"},p="Share",u="URL copied!",g={promptPlaceholder:"How does your idol talk? Describe their vibe...",addMember:"Add Member",signed:"Signed 🥺",grade:"Grade {{grade}}"},b={notFound:"Group not found",members:"Members",noMembers:"No members yet"},h={groupName:"Group Name",groupNamePlaceholder:"e.g. DREAMERS, STARLIGHT",memberName:"Member Name",memberNamePlaceholder:"e.g. Luna, Kai",concept:"Concept",selectConcept:"Select a concept",personality:"Personality",concepts:{cute:"Cute",cool:"Cool",elegant:"Elegant",powerful:"Powerful"},personalities:{cheerful:{label:"Cheerful",description:"Always bright and positive"},cool:{label:"Cool",description:"Calm and collected"},tsundere:{label:"Tsundere",description:"Cold outside, warm inside"},gentle:{label:"Gentle",description:"Kind and caring"}},step1:"Group",step2:"Members",step3:"Done",step1Title:"Create Your Group",step2Title:"Add Members",groupNameRequired:"Please enter a group name",memberNameRequired:"Please enter a member name",memberRequired:"Please add at least one member",emblem:"Emblem",emblemPromptPlaceholder:"Describe your group's emblem...",emblemRequired:"Please generate an emblem image",generate:"Generate",next:"Next",back:"Back",create:"Create",completeTitle:"Your Idol is Ready!",completeDescription:"Start chatting with your dream idol now",viewProfile:"View Profile"},T={hero:{title:"Create Your Dream Idol",description:"Design your perfect idol and chat like a real fan",cta:"Start Creating"},demo:{title:"Your Imagination, Your Idol",description:"Create idols with unique personalities and build your connection"}},P={common:d,share:p,urlCopied:u,companion:g,aidol:b,creation:h,landing:T},R={close:"Cerrar"},N="Compartir",y="¡URL copiada!",M={promptPlaceholder:"¿Cómo habla tu idol? Describe su personalidad...",addMember:"Añadir Miembro",signed:"Firmado 🥺",grade:"Grado {{grade}}"},C={notFound:"Grupo no encontrado",members:"Miembros",noMembers:"Aún no hay miembros"},$={groupName:"Nombre del Grupo",groupNamePlaceholder:"ej: DREAMERS, STARLIGHT",memberName:"Nombre del Miembro",memberNamePlaceholder:"ej: Luna, Kai",concept:"Concepto",selectConcept:"Selecciona un concepto",personality:"Personalidad",concepts:{cute:"Lindo",cool:"Genial",elegant:"Elegante",powerful:"Poderoso"},personalities:{cheerful:{label:"Alegre",description:"Siempre brillante y positivo"},cool:{label:"Genial",description:"Tranquilo y sereno"},tsundere:{label:"Tsundere",description:"Frío por fuera, cálido por dentro"},gentle:{label:"Amable",description:"Bondadoso y cariñoso"}},step1:"Grupo",step2:"Miembros",step3:"Listo",step1Title:"Crea Tu Grupo",step2Title:"Añade Miembros",groupNameRequired:"Por favor ingresa un nombre de grupo",memberNameRequired:"Por favor ingresa un nombre de miembro",memberRequired:"Por favor añade al menos un miembro",emblem:"Emblema",emblemPromptPlaceholder:"Describe el emblema de tu grupo...",emblemRequired:"Por favor genera una imagen de emblema",generate:"Generar",next:"Siguiente",back:"Atrás",create:"Crear",completeTitle:"¡Tu Idol Está Listo!",completeDescription:"Empieza a chatear con tu idol soñado ahora",viewProfile:"Ver Perfil"},k={hero:{title:"Crea Tu Idol Soñado",description:"Diseña tu idol perfecto y chatea como un verdadero fan",cta:"Empezar a Crear"},demo:{title:"Tu Imaginación, Tu Idol",description:"Crea idols únicos y construye una conexión especial"}},S={common:R,share:N,urlCopied:y,companion:M,aidol:C,creation:$,landing:k},f={close:"Tutup"},q="Bagikan",I="URL disalin!",G={promptPlaceholder:"Gimana idol kamu ngobrol? Ceritain kepribadiannya...",addMember:"Tambah Anggota",signed:"Sudah Dikontrak 🥺",grade:"Grade {{grade}}"},L={notFound:"Grup tidak ditemukan",members:"Anggota",noMembers:"Belum ada anggota"},A={groupName:"Nama Grup",groupNamePlaceholder:"cth: DREAMERS, STARLIGHT",memberName:"Nama Anggota",memberNamePlaceholder:"cth: Luna, Kai",concept:"Konsep",selectConcept:"Pilih konsep",personality:"Kepribadian",concepts:{cute:"Imut",cool:"Keren",elegant:"Elegan",powerful:"Kuat"},personalities:{cheerful:{label:"Ceria",description:"Selalu cerah dan positif"},cool:{label:"Keren",description:"Tenang dan kalem"},tsundere:{label:"Tsundere",description:"Dingin di luar, hangat di dalam"},gentle:{label:"Lembut",description:"Baik hati dan perhatian"}},step1:"Grup",step2:"Anggota",step3:"Selesai",step1Title:"Buat Grup Kamu",step2Title:"Tambah Anggota",groupNameRequired:"Masukkan nama grup",memberNameRequired:"Masukkan nama anggota",memberRequired:"Tambahkan minimal satu anggota",emblem:"Emblem",emblemPromptPlaceholder:"Deskripsikan emblem grup kamu...",emblemRequired:"Buat gambar emblem dulu",generate:"Buat",next:"Lanjut",back:"Kembali",create:"Buat",completeTitle:"Idol Kamu Siap!",completeDescription:"Langsung ngobrol sama idol impianmu sekarang",viewProfile:"Lihat Profil"},D={hero:{title:"Buat Idol Impianmu",description:"Desain idol sempurnamu dan ngobrol kayak fans beneran",cta:"Mulai Buat"},demo:{title:"Imajinasimu Jadi Idol",description:"Buat idol unik dan bangun koneksi spesial"}},v={common:f,share:q,urlCopied:I,companion:G,aidol:L,creation:A,landing:D},w={close:"閉じる"},E="共有",B="URLがコピーされました!",K={promptPlaceholder:"どんな話し方をする?性格を教えてね...",addMember:"メンバー追加",signed:"契約完了 🥺",grade:"{{grade}} ランク"},z={notFound:"グループが見つかりません",members:"メンバー",noMembers:"まだメンバーがいません"},x={groupName:"グループ名",groupNamePlaceholder:"例: DREAMERS, STARLIGHT",memberName:"メンバー名",memberNamePlaceholder:"例: ルナ, カイ",concept:"コンセプト",selectConcept:"コンセプトを選択",personality:"性格",concepts:{cute:"キュート",cool:"クール",elegant:"エレガント",powerful:"パワフル"},personalities:{cheerful:{label:"明るい",description:"いつも元気でポジティブ"},cool:{label:"クール",description:"冷静で落ち着いている"},tsundere:{label:"ツンデレ",description:"外は冷たく中は温かい"},gentle:{label:"優しい",description:"親切で思いやりがある"}},step1:"グループ",step2:"メンバー",step3:"完了",step1Title:"グループを作ろう",step2Title:"メンバーを追加",groupNameRequired:"グループ名を入力してください",memberNameRequired:"メンバー名を入力してください",memberRequired:"メンバーを1人以上追加してください",emblem:"エンブレム",emblemPromptPlaceholder:"グループのエンブレムを説明してください...",emblemRequired:"エンブレム画像を生成してください",generate:"生成",next:"次へ",back:"戻る",create:"作成",completeTitle:"アイドル完成!",completeDescription:"さっそく推しと会話しよう",viewProfile:"プロフィールを見る"},H={hero:{title:"夢のアイドルを作ろう",description:"理想のアイドルを作って、本物のファンみたいに会話しよう",cta:"作り始める"},demo:{title:"想像がアイドルになる",description:"あなただけのアイドルを作り、特別な絆を築こう"}},V={common:w,share:E,urlCopied:B,companion:K,aidol:z,creation:x,landing:H},F={close:"닫기"},U="공유",j="URL이 복사되었습니다!",O={promptPlaceholder:"어떤 말투로 대화할까요? 성격을 설명해 주세요...",addMember:"멤버 추가",signed:"계약 완료 🥺",grade:"{{grade}} 등급"},Y={notFound:"그룹을 찾을 수 없습니다",members:"멤버",noMembers:"아직 멤버가 없습니다"},J={groupName:"그룹 이름",groupNamePlaceholder:"예: 드리머즈, 스타라이트",memberName:"멤버 이름",memberNamePlaceholder:"예: 루나, 카이",concept:"컨셉",selectConcept:"컨셉을 선택하세요",personality:"성격",concepts:{cute:"큐트",cool:"쿨",elegant:"우아한",powerful:"파워풀"},personalities:{cheerful:{label:"활발한",description:"항상 밝고 긍정적인"},cool:{label:"쿨한",description:"차분하고 침착한"},tsundere:{label:"츤데레",description:"겉은 차갑지만 속은 따뜻한"},gentle:{label:"다정한",description:"친절하고 배려심 깊은"}},step1:"그룹",step2:"멤버",step3:"완료",step1Title:"그룹 만들기",step2Title:"멤버 추가하기",groupNameRequired:"그룹 이름을 입력해 주세요",memberNameRequired:"멤버 이름을 입력해 주세요",memberRequired:"멤버를 한 명 이상 추가해 주세요",emblem:"엠블럼",emblemPromptPlaceholder:"그룹의 엠블럼을 설명해 주세요...",emblemRequired:"엠블럼 이미지를 생성해 주세요",generate:"생성",next:"다음",back:"이전",create:"만들기",completeTitle:"아이돌 완성!",completeDescription:"지금 바로 나만의 아이돌과 대화해 보세요",viewProfile:"프로필 보기"},X={hero:{title:"꿈꾸던 아이돌, 직접 만들기",description:"나만의 아이돌을 만들고 진짜 팬처럼 대화하세요",cta:"만들기 시작"},demo:{title:"상상 속 아이돌이 현실로",description:"나만의 아이돌을 만들고 특별한 관계를 쌓아보세요"}},_={common:F,share:U,urlCopied:j,companion:O,aidol:Y,creation:J,landing:X},Q={close:"ปิด"},W="แชร์",Z="คัดลอก URL แล้ว!",ee={promptPlaceholder:"ไอดอลของคุณพูดยังไง? บรรยายบุคลิกสักนิด...",addMember:"เพิ่มสมาชิก",signed:"เซ็นสัญญาแล้ว 🥺",grade:"เกรด {{grade}}"},oe={notFound:"ไม่พบกลุ่ม",members:"สมาชิก",noMembers:"ยังไม่มีสมาชิก"},ae={groupName:"ชื่อกลุ่ม",groupNamePlaceholder:"เช่น: DREAMERS, STARLIGHT",memberName:"ชื่อสมาชิก",memberNamePlaceholder:"เช่น: Luna, Kai",concept:"คอนเซ็ปต์",selectConcept:"เลือกคอนเซ็ปต์",personality:"บุคลิกภาพ",concepts:{cute:"น่ารัก",cool:"เท่",elegant:"สง่างาม",powerful:"ทรงพลัง"},personalities:{cheerful:{label:"ร่าเริง",description:"สดใสและเป็นบวกเสมอ"},cool:{label:"เท่",description:"สงบและเยือกเย็น"},tsundere:{label:"ซึนเดเระ",description:"ภายนอกเย็นชา ภายในอบอุ่น"},gentle:{label:"อ่อนโยน",description:"ใจดีและเอาใจใส่"}},step1:"กลุ่ม",step2:"สมาชิก",step3:"เสร็จ",step1Title:"สร้างกลุ่มของคุณ",step2Title:"เพิ่มสมาชิก",groupNameRequired:"กรุณาใส่ชื่อกลุ่ม",memberNameRequired:"กรุณาใส่ชื่อสมาชิก",memberRequired:"กรุณาเพิ่มสมาชิกอย่างน้อย 1 คน",emblem:"ตราสัญลักษณ์",emblemPromptPlaceholder:"อธิบายตราสัญลักษณ์กลุ่ม...",emblemRequired:"กรุณาสร้างภาพตราสัญลักษณ์",generate:"สร้าง",next:"ถัดไป",back:"กลับ",create:"สร้าง",completeTitle:"ไอดอลพร้อมแล้ว!",completeDescription:"เริ่มแชทกับไอดอลในฝันของคุณได้เลย",viewProfile:"ดูโปรไฟล์"},ne={hero:{title:"สร้างไอดอลในฝัน",description:"ออกแบบไอดอลในอุดมคติและแชทเหมือนแฟนคลับตัวจริง",cta:"เริ่มสร้าง"},demo:{title:"จินตนาการกลายเป็นไอดอล",description:"สร้างไอดอลที่มีเอกลักษณ์และสร้างสายสัมพันธ์พิเศษ"}},te={common:Q,share:W,urlCopied:Z,companion:ee,aidol:oe,creation:ae,landing:ne},re={close:"Isara"},ie="I-share",le="Nakopya ang URL!",me={promptPlaceholder:"Paano nagsasalita ang idol mo? Ilarawan ang personality...",addMember:"Magdagdag ng Miyembro",signed:"Naka-kontrata na 🥺",grade:"Grade {{grade}}"},ce={notFound:"Hindi nahanap ang grupo",members:"Miyembro",noMembers:"Wala pang miyembro"},se={groupName:"Pangalan ng Grupo",groupNamePlaceholder:"hal: DREAMERS, STARLIGHT",memberName:"Pangalan ng Miyembro",memberNamePlaceholder:"hal: Luna, Kai",concept:"Konsepto",selectConcept:"Pumili ng konsepto",personality:"Personalidad",concepts:{cute:"Cute",cool:"Cool",elegant:"Elegante",powerful:"Malakas"},personalities:{cheerful:{label:"Masayahin",description:"Palaging masaya at positibo"},cool:{label:"Cool",description:"Kalmado at mahinahon"},tsundere:{label:"Tsundere",description:"Malamig sa labas, mainit sa loob"},gentle:{label:"Mabait",description:"Maalalahanin at mapagmahal"}},step1:"Grupo",step2:"Miyembro",step3:"Tapos",step1Title:"Gumawa ng Grupo",step2Title:"Magdagdag ng Miyembro",groupNameRequired:"Maglagay ng pangalan ng grupo",memberNameRequired:"Maglagay ng pangalan ng miyembro",memberRequired:"Magdagdag ng kahit isang miyembro",emblem:"Emblema",emblemPromptPlaceholder:"Ilarawan ang emblema ng grupo...",emblemRequired:"Gumawa ng imahe ng emblema",generate:"Lumikha",next:"Susunod",back:"Bumalik",create:"Gumawa",completeTitle:"Handa na ang Idol Mo!",completeDescription:"Mag-chat na sa iyong dream idol ngayon",viewProfile:"Tingnan ang Profile"},de={hero:{title:"Likhain ang Idol ng Iyong Pangarap",description:"I-design ang perpektong idol at mag-chat na parang tunay na fan",cta:"Magsimulang Lumikha"},demo:{title:"Ang Imahinasyon Mo, Ang Idol Mo",description:"Lumikha ng mga natatanging idol at magtayo ng koneksyon"}},pe={common:re,share:ie,urlCopied:le,companion:me,aidol:ce,creation:se,landing:de},ue={close:"Đóng"},ge="Chia sẻ",be="Đã sao chép URL!",he={promptPlaceholder:"Idol của bạn nói chuyện như thế nào? Mô tả tính cách...",addMember:"Thêm Thành Viên",signed:"Đã ký hợp đồng 🥺",grade:"Hạng {{grade}}"},Te={notFound:"Không tìm thấy nhóm",members:"Thành Viên",noMembers:"Chưa có thành viên"},Pe={groupName:"Tên Nhóm",groupNamePlaceholder:"vd: DREAMERS, STARLIGHT",memberName:"Tên Thành Viên",memberNamePlaceholder:"vd: Luna, Kai",concept:"Concept",selectConcept:"Chọn concept",personality:"Tính Cách",concepts:{cute:"Dễ thương",cool:"Ngầu",elegant:"Thanh lịch",powerful:"Mạnh mẽ"},personalities:{cheerful:{label:"Vui vẻ",description:"Luôn tươi sáng và tích cực"},cool:{label:"Ngầu",description:"Bình tĩnh và điềm đạm"},tsundere:{label:"Tsundere",description:"Lạnh lùng bên ngoài, ấm áp bên trong"},gentle:{label:"Dịu dàng",description:"Tốt bụng và quan tâm"}},step1:"Nhóm",step2:"Thành Viên",step3:"Xong",step1Title:"Tạo Nhóm",step2Title:"Thêm Thành Viên",groupNameRequired:"Vui lòng nhập tên nhóm",memberNameRequired:"Vui lòng nhập tên thành viên",memberRequired:"Vui lòng thêm ít nhất một thành viên",emblem:"Biểu tượng",emblemPromptPlaceholder:"Mô tả biểu tượng nhóm...",emblemRequired:"Vui lòng tạo hình biểu tượng",generate:"Tạo",next:"Tiếp",back:"Quay lại",create:"Tạo",completeTitle:"Idol Đã Sẵn Sàng!",completeDescription:"Bắt đầu trò chuyện với idol mơ ước ngay",viewProfile:"Xem Hồ Sơ"},Re={hero:{title:"Tạo Idol Mơ Ước",description:"Thiết kế idol hoàn hảo và trò chuyện như fan thật sự",cta:"Bắt Đầu Tạo"},demo:{title:"Trí Tưởng Tượng Thành Idol",description:"Tạo idol độc đáo và xây dựng mối liên kết đặc biệt"}},Ne={common:ue,share:ge,urlCopied:be,companion:he,aidol:Te,creation:Pe,landing:Re},ye={close:"关闭"},Me="分享",Ce="URL已复制!",$e={promptPlaceholder:"你的偶像怎么说话?描述一下性格...",addMember:"添加成员",signed:"已签约 🥺",grade:"{{grade}} 级"},ke={notFound:"找不到该组合",members:"成员",noMembers:"暂无成员"},Se={groupName:"组合名",groupNamePlaceholder:"例如: DREAMERS, STARLIGHT",memberName:"成员名",memberNamePlaceholder:"例如: Luna, Kai",concept:"概念",selectConcept:"选择概念",personality:"性格",concepts:{cute:"可爱",cool:"酷",elegant:"优雅",powerful:"有力"},personalities:{cheerful:{label:"开朗",description:"总是阳光积极"},cool:{label:"冷酷",description:"冷静沉着"},tsundere:{label:"傲娇",description:"外冷内热"},gentle:{label:"温柔",description:"善良体贴"}},step1:"组合",step2:"成员",step3:"完成",step1Title:"创建组合",step2Title:"添加成员",groupNameRequired:"请输入组合名",memberNameRequired:"请输入成员名",memberRequired:"请至少添加一名成员",emblem:"徽章",emblemPromptPlaceholder:"描述你的组合徽章...",emblemRequired:"请生成徽章图片",generate:"生成",next:"下一步",back:"上一步",create:"创建",completeTitle:"偶像创建完成!",completeDescription:"现在就和你的梦想偶像聊天吧",viewProfile:"查看资料"},fe={hero:{title:"创造你的梦想偶像",description:"设计你的理想偶像,像真正的粉丝一样聊天",cta:"开始创作"},demo:{title:"让想象变成偶像",description:"创建独特的偶像,建立特别的羁绊"}},qe={common:ye,share:Me,urlCopied:Ce,companion:$e,aidol:ke,creation:Se,landing:fe},Ie="aidol",Ge={en:P,es:S,id:v,ja:V,ko:_,th:te,tl:pe,vi:Ne,zh:qe};exports.aidolSchema=o.aidolSchema;exports.imageGenerationResponseSchema=o.imageGenerationResponseSchema;exports.AIDOL_NS=Ie;exports.AIdolRepository=c;exports.CompanionRepository=s;exports.aidolTranslations=Ge;exports.companionSchema=n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/schemas/companion.ts","../src/repositories/AIdolRepository.ts","../src/repositories/CompanionRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.string().nullable(),\n position: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: string | null;\n position?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n AIdol,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { aidolSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/**\n * Repository for AIdol (group) entities\n */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidol/aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n /**\n * Generate image for AIdol emblem or Companion profile\n */\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type { Companion } from \"../schemas\";\nimport { companionSchema } from \"../schemas\";\n\n/**\n * Repository for Companion (member) entities\n */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"aidol/companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n}\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["companionSchema","z","AIdolRepository","BaseCrudRepository","aidolSchema","request","fetchOptions","url","rawResponse","imageGenerationResponseSchema","CompanionRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":"iKAWaA,EAAkBC,EAAAA,EAAE,OAAO,CACtC,GAAIA,EAAAA,EAAE,OAAA,EACN,QAASA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAC/B,KAAMA,EAAAA,EAAE,OAAA,EACR,UAAWA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EACjC,kBAAmBA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EACzC,MAAOA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAClB,SAAUA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACrB,UAAWA,EAAAA,EAAE,OAAA,EACb,UAAWA,EAAAA,EAAE,OAAA,CACf,CAAC,ECTM,MAAMC,UAAwBC,EAAAA,kBAA0B,CAAxD,aAAA,CAAA,MAAA,GAAA,SAAA,EACL,KAAS,SAAW,cAAA,CAEV,eAAgB,CACxB,OAAOC,EAAAA,WACT,CAKA,MAAM,cACJC,EACAC,EACkC,CAClC,MAAMC,EAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,EACxDC,EAAc,MAAM,KAAK,WAAW,QAAQD,EAAK,CACrD,GAAGD,EACH,OAAQ,OACR,QAAS,CACP,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAUD,CAAO,CAAA,CAC7B,EAED,OAAO,KAAK,iBAAiBG,EAAaC,+BAA6B,CACzE,CACF,CC9BO,MAAMC,UAA4BP,EAAAA,kBAA8B,CAAhE,aAAA,CAAA,MAAA,GAAA,SAAA,EACL,KAAS,SAAW,kBAAA,CAEV,eAAgB,CACxB,OAAOH,CACT,CACF,s8aCIaW,GAAW,QAcXC,GAAoB,CAC/B,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,GACA,GAAAC,GACA,GAAAC,EACF"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/schemas/companion.ts","../src/repositories/AIdolRepository.ts","../src/repositories/CompanionRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.string().nullable().optional(),\n position: z.string().nullable().optional(),\n mbti: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: string | null;\n position?: string | null;\n mbti?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n AIdol,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { aidolSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/**\n * Repository for AIdol (group) entities\n */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidol/aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n /**\n * Generate image for AIdol emblem or Companion profile\n */\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type { Companion } from \"../schemas\";\nimport { companionSchema } from \"../schemas\";\n\n/**\n * Repository for Companion (member) entities\n */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"aidol/companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n}\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["companionSchema","z","AIdolRepository","BaseCrudRepository","aidolSchema","request","fetchOptions","url","rawResponse","imageGenerationResponseSchema","CompanionRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":"iKAWaA,EAAkBC,EAAAA,EAAE,OAAO,CACtC,GAAIA,EAAAA,EAAE,OAAA,EACN,QAASA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAC/B,KAAMA,EAAAA,EAAE,OAAA,EACR,UAAWA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EACjC,kBAAmBA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EACzC,MAAOA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAC7B,SAAUA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAChC,KAAMA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAC5B,UAAWA,EAAAA,EAAE,OAAA,EACb,UAAWA,EAAAA,EAAE,OAAA,CACf,CAAC,ECVM,MAAMC,UAAwBC,EAAAA,kBAA0B,CAAxD,aAAA,CAAA,MAAA,GAAA,SAAA,EACL,KAAS,SAAW,cAAA,CAEV,eAAgB,CACxB,OAAOC,EAAAA,WACT,CAKA,MAAM,cACJC,EACAC,EACkC,CAClC,MAAMC,EAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,EACxDC,EAAc,MAAM,KAAK,WAAW,QAAQD,EAAK,CACrD,GAAGD,EACH,OAAQ,OACR,QAAS,CACP,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAUD,CAAO,CAAA,CAC7B,EAED,OAAO,KAAK,iBAAiBG,EAAaC,+BAA6B,CACzE,CACF,CC9BO,MAAMC,UAA4BP,EAAAA,kBAA8B,CAAhE,aAAA,CAAA,MAAA,GAAA,SAAA,EACL,KAAS,SAAW,kBAAA,CAEV,eAAgB,CACxB,OAAOH,CACT,CACF,gsbCIaW,GAAW,QAcXC,GAAoB,CAC/B,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,EACF"}
package/dist/index.js CHANGED
@@ -1,18 +1,19 @@
1
- import { BaseCrudRepository as a } from "@aioia/core";
1
+ import { BaseCrudRepository as o } from "@aioia/core";
2
2
  import { a as l, i as m } from "./aidol-D1U55wfr.mjs";
3
3
  import { z as e } from "zod";
4
- const s = e.object({
4
+ const c = e.object({
5
5
  id: e.string(),
6
6
  aidolId: e.string().nullable().optional(),
7
7
  name: e.string(),
8
8
  biography: e.string().nullable().optional(),
9
9
  profilePictureUrl: e.string().nullable().optional(),
10
- grade: e.string().nullable(),
11
- position: e.string().nullable(),
10
+ grade: e.string().nullable().optional(),
11
+ position: e.string().nullable().optional(),
12
+ mbti: e.string().nullable().optional(),
12
13
  createdAt: e.string(),
13
14
  updatedAt: e.string()
14
15
  });
15
- class Me extends a {
16
+ class Ge extends o {
16
17
  constructor() {
17
18
  super(...arguments), this.resource = "aidol/aidols";
18
19
  }
@@ -34,95 +35,104 @@ class Me extends a {
34
35
  return this.validateResponse(i, m);
35
36
  }
36
37
  }
37
- class Ce extends a {
38
+ class Ae extends o {
38
39
  constructor() {
39
40
  super(...arguments), this.resource = "aidol/companions";
40
41
  }
41
42
  getDataSchema() {
42
- return s;
43
+ return c;
43
44
  }
44
45
  }
45
- const c = "Share", d = "URL copied!", p = { promptPlaceholder: "How does your idol talk? Describe their vibe...", addMember: "Add Member", signed: "Signed 🥺", grade: "Grade {{grade}}" }, u = { notFound: "Group not found", members: "Members", noMembers: "No members yet" }, g = { groupName: "Group Name", groupNamePlaceholder: "e.g. DREAMERS, STARLIGHT", memberName: "Member Name", memberNamePlaceholder: "e.g. Luna, Kai", concept: "Concept", selectConcept: "Select a concept", personality: "Personality", concepts: { cute: "Cute", cool: "Cool", elegant: "Elegant", powerful: "Powerful" }, personalities: { cheerful: { label: "Cheerful", description: "Always bright and positive" }, cool: { label: "Cool", description: "Calm and collected" }, tsundere: { label: "Tsundere", description: "Cold outside, warm inside" }, gentle: { label: "Gentle", description: "Kind and caring" } }, step1: "Group", step2: "Members", step3: "Done", step1Title: "Create Your Group", step2Title: "Add Members", groupNameRequired: "Please enter a group name", memberNameRequired: "Please enter a member name", memberRequired: "Please add at least one member", emblem: "Emblem", emblemPromptPlaceholder: "Describe your group's emblem...", emblemRequired: "Please generate an emblem image", generate: "Generate", next: "Next", back: "Back", create: "Create", completeTitle: "Your Idol is Ready!", completeDescription: "Start chatting with your dream idol now", viewProfile: "View Profile" }, b = { hero: { title: "Create Your Dream Idol", description: "Design your perfect idol and chat like a real fan", cta: "Start Creating" }, demo: { title: "Your Imagination, Your Idol", description: "Create idols with unique personalities and build your connection" } }, h = {
46
- share: c,
47
- urlCopied: d,
48
- companion: p,
49
- aidol: u,
50
- creation: g,
51
- landing: b
52
- }, T = "Compartir", P = "¡URL copiada!", R = { promptPlaceholder: "¿Cómo habla tu idol? Describe su personalidad...", addMember: "Añadir Miembro", signed: "Firmado 🥺", grade: "Grado {{grade}}" }, N = { notFound: "Grupo no encontrado", members: "Miembros", noMembers: "Aún no hay miembros" }, y = { groupName: "Nombre del Grupo", groupNamePlaceholder: "ej: DREAMERS, STARLIGHT", memberName: "Nombre del Miembro", memberNamePlaceholder: "ej: Luna, Kai", concept: "Concepto", selectConcept: "Selecciona un concepto", personality: "Personalidad", concepts: { cute: "Lindo", cool: "Genial", elegant: "Elegante", powerful: "Poderoso" }, personalities: { cheerful: { label: "Alegre", description: "Siempre brillante y positivo" }, cool: { label: "Genial", description: "Tranquilo y sereno" }, tsundere: { label: "Tsundere", description: "Frío por fuera, cálido por dentro" }, gentle: { label: "Amable", description: "Bondadoso y cariñoso" } }, step1: "Grupo", step2: "Miembros", step3: "Listo", step1Title: "Crea Tu Grupo", step2Title: "Añade Miembros", groupNameRequired: "Por favor ingresa un nombre de grupo", memberNameRequired: "Por favor ingresa un nombre de miembro", memberRequired: "Por favor añade al menos un miembro", emblem: "Emblema", emblemPromptPlaceholder: "Describe el emblema de tu grupo...", emblemRequired: "Por favor genera una imagen de emblema", generate: "Generar", next: "Siguiente", back: "Atrás", create: "Crear", completeTitle: "¡Tu Idol Está Listo!", completeDescription: "Empieza a chatear con tu idol soñado ahora", viewProfile: "Ver Perfil" }, M = { hero: { title: "Crea Tu Idol Soñado", description: "Diseña tu idol perfecto y chatea como un verdadero fan", cta: "Empezar a Crear" }, demo: { title: "Tu Imaginación, Tu Idol", description: "Crea idols únicos y construye una conexión especial" } }, C = {
53
- share: T,
54
- urlCopied: P,
55
- companion: R,
56
- aidol: N,
57
- creation: y,
58
- landing: M
59
- }, k = "Bagikan", f = "URL disalin!", $ = { promptPlaceholder: "Gimana idol kamu ngobrol? Ceritain kepribadiannya...", addMember: "Tambah Anggota", signed: "Sudah Dikontrak 🥺", grade: "Grade {{grade}}" }, S = { notFound: "Grup tidak ditemukan", members: "Anggota", noMembers: "Belum ada anggota" }, q = { groupName: "Nama Grup", groupNamePlaceholder: "cth: DREAMERS, STARLIGHT", memberName: "Nama Anggota", memberNamePlaceholder: "cth: Luna, Kai", concept: "Konsep", selectConcept: "Pilih konsep", personality: "Kepribadian", concepts: { cute: "Imut", cool: "Keren", elegant: "Elegan", powerful: "Kuat" }, personalities: { cheerful: { label: "Ceria", description: "Selalu cerah dan positif" }, cool: { label: "Keren", description: "Tenang dan kalem" }, tsundere: { label: "Tsundere", description: "Dingin di luar, hangat di dalam" }, gentle: { label: "Lembut", description: "Baik hati dan perhatian" } }, step1: "Grup", step2: "Anggota", step3: "Selesai", step1Title: "Buat Grup Kamu", step2Title: "Tambah Anggota", groupNameRequired: "Masukkan nama grup", memberNameRequired: "Masukkan nama anggota", memberRequired: "Tambahkan minimal satu anggota", emblem: "Emblem", emblemPromptPlaceholder: "Deskripsikan emblem grup kamu...", emblemRequired: "Buat gambar emblem dulu", generate: "Buat", next: "Lanjut", back: "Kembali", create: "Buat", completeTitle: "Idol Kamu Siap!", completeDescription: "Langsung ngobrol sama idol impianmu sekarang", viewProfile: "Lihat Profil" }, I = { hero: { title: "Buat Idol Impianmu", description: "Desain idol sempurnamu dan ngobrol kayak fans beneran", cta: "Mulai Buat" }, demo: { title: "Imajinasimu Jadi Idol", description: "Buat idol unik dan bangun koneksi spesial" } }, L = {
60
- share: k,
61
- urlCopied: f,
62
- companion: $,
63
- aidol: S,
64
- creation: q,
65
- landing: I
66
- }, G = "共有", A = "URLがコピーされました!", D = { promptPlaceholder: "どんな話し方をする?性格を教えてね...", addMember: "メンバー追加", signed: "契約完了 🥺", grade: "{{grade}} ランク" }, v = { notFound: "グループが見つかりません", members: "メンバー", noMembers: "まだメンバーがいません" }, w = { groupName: "グループ名", groupNamePlaceholder: "例: DREAMERS, STARLIGHT", memberName: "メンバー名", memberNamePlaceholder: "例: ルナ, カイ", concept: "コンセプト", selectConcept: "コンセプトを選択", personality: "性格", concepts: { cute: "キュート", cool: "クール", elegant: "エレガント", powerful: "パワフル" }, personalities: { cheerful: { label: "明るい", description: "いつも元気でポジティブ" }, cool: { label: "クール", description: "冷静で落ち着いている" }, tsundere: { label: "ツンデレ", description: "外は冷たく中は温かい" }, gentle: { label: "優しい", description: "親切で思いやりがある" } }, step1: "グループ", step2: "メンバー", step3: "完了", step1Title: "グループを作ろう", step2Title: "メンバーを追加", groupNameRequired: "グループ名を入力してください", memberNameRequired: "メンバー名を入力してください", memberRequired: "メンバーを1人以上追加してください", emblem: "エンブレム", emblemPromptPlaceholder: "グループのエンブレムを説明してください...", emblemRequired: "エンブレム画像を生成してください", generate: "生成", next: "次へ", back: "戻る", create: "作成", completeTitle: "アイドル完成!", completeDescription: "さっそく推しと会話しよう", viewProfile: "プロフィールを見る" }, E = { hero: { title: "夢のアイドルを作ろう", description: "理想のアイドルを作って、本物のファンみたいに会話しよう", cta: "作り始める" }, demo: { title: "想像がアイドルになる", description: "あなただけのアイドルを作り、特別な絆を築こう" } }, K = {
67
- share: G,
68
- urlCopied: A,
69
- companion: D,
70
- aidol: v,
71
- creation: w,
72
- landing: E
73
- }, B = "공유", x = "URL이 복사되었습니다!", H = { promptPlaceholder: "어떤 말투로 대화할까요? 성격을 설명해 주세요...", addMember: "멤버 추가", signed: "계약 완료 🥺", grade: "{{grade}} 등급" }, V = { notFound: "그룹을 찾을 수 없습니다", members: "멤버", noMembers: "아직 멤버가 없습니다" }, F = { groupName: "그룹 이름", groupNamePlaceholder: "예: 드리머즈, 스타라이트", memberName: "멤버 이름", memberNamePlaceholder: "예: 루나, 카이", concept: "컨셉", selectConcept: "컨셉을 선택하세요", personality: "성격", concepts: { cute: "큐트", cool: "쿨", elegant: "우아한", powerful: "파워풀" }, personalities: { cheerful: { label: "활발한", description: "항상 밝고 긍정적인" }, cool: { label: "쿨한", description: "차분하고 침착한" }, tsundere: { label: "츤데레", description: "겉은 차갑지만 속은 따뜻한" }, gentle: { label: "다정한", description: "친절하고 배려심 깊은" } }, step1: "그룹", step2: "멤버", step3: "완료", step1Title: "그룹 만들기", step2Title: "멤버 추가하기", groupNameRequired: "그룹 이름을 입력해 주세요", memberNameRequired: "멤버 이름을 입력해 주세요", memberRequired: "멤버를 한 명 이상 추가해 주세요", emblem: "엠블럼", emblemPromptPlaceholder: "그룹의 엠블럼을 설명해 주세요...", emblemRequired: "엠블럼 이미지를 생성해 주세요", generate: "생성", next: "다음", back: "이전", create: "만들기", completeTitle: "아이돌 완성!", completeDescription: "지금 바로 나만의 아이돌과 대화해 보세요", viewProfile: "프로필 보기" }, U = { hero: { title: "꿈꾸던 아이돌, 직접 만들기", description: "나만의 아이돌을 만들고 진짜 팬처럼 대화하세요", cta: "만들기 시작" }, demo: { title: "상상 속 아이돌이 현실로", description: "나만의 아이돌을 만들고 특별한 관계를 쌓아보세요" } }, j = {
74
- share: B,
75
- urlCopied: x,
76
- companion: H,
77
- aidol: V,
78
- creation: F,
79
- landing: U
80
- }, Y = "แชร์", z = "คัดลอก URL แล้ว!", O = { promptPlaceholder: "ไอดอลของคุณพูดยังไง? บรรยายบุคลิกสักนิด...", addMember: "เพิ่มสมาชิก", signed: "เซ็นสัญญาแล้ว 🥺", grade: "เกรด {{grade}}" }, J = { notFound: "ไม่พบกลุ่ม", members: "สมาชิก", noMembers: "ยังไม่มีสมาชิก" }, X = { groupName: "ชื่อกลุ่ม", groupNamePlaceholder: "เช่น: DREAMERS, STARLIGHT", memberName: "ชื่อสมาชิก", memberNamePlaceholder: "เช่น: Luna, Kai", concept: "คอนเซ็ปต์", selectConcept: "เลือกคอนเซ็ปต์", personality: "บุคลิกภาพ", concepts: { cute: "น่ารัก", cool: "เท่", elegant: "สง่างาม", powerful: "ทรงพลัง" }, personalities: { cheerful: { label: "ร่าเริง", description: "สดใสและเป็นบวกเสมอ" }, cool: { label: "เท่", description: "สงบและเยือกเย็น" }, tsundere: { label: "ซึนเดเระ", description: "ภายนอกเย็นชา ภายในอบอุ่น" }, gentle: { label: "อ่อนโยน", description: "ใจดีและเอาใจใส่" } }, step1: "กลุ่ม", step2: "สมาชิก", step3: "เสร็จ", step1Title: "สร้างกลุ่มของคุณ", step2Title: "เพิ่มสมาชิก", groupNameRequired: "กรุณาใส่ชื่อกลุ่ม", memberNameRequired: "กรุณาใส่ชื่อสมาชิก", memberRequired: "กรุณาเพิ่มสมาชิกอย่างน้อย 1 คน", emblem: "ตราสัญลักษณ์", emblemPromptPlaceholder: "อธิบายตราสัญลักษณ์กลุ่ม...", emblemRequired: "กรุณาสร้างภาพตราสัญลักษณ์", generate: "สร้าง", next: "ถัดไป", back: "กลับ", create: "สร้าง", completeTitle: "ไอดอลพร้อมแล้ว!", completeDescription: "เริ่มแชทกับไอดอลในฝันของคุณได้เลย", viewProfile: "ดูโปรไฟล์" }, Q = { hero: { title: "สร้างไอดอลในฝัน", description: "ออกแบบไอดอลในอุดมคติและแชทเหมือนแฟนคลับตัวจริง", cta: "เริ่มสร้าง" }, demo: { title: "จินตนาการกลายเป็นไอดอล", description: "สร้างไอดอลที่มีเอกลักษณ์และสร้างสายสัมพันธ์พิเศษ" } }, W = {
81
- share: Y,
82
- urlCopied: z,
83
- companion: O,
84
- aidol: J,
85
- creation: X,
86
- landing: Q
87
- }, _ = "I-share", Z = "Nakopya ang URL!", ee = { promptPlaceholder: "Paano nagsasalita ang idol mo? Ilarawan ang personality...", addMember: "Magdagdag ng Miyembro", signed: "Naka-kontrata na 🥺", grade: "Grade {{grade}}" }, ae = { notFound: "Hindi nahanap ang grupo", members: "Miyembro", noMembers: "Wala pang miyembro" }, oe = { groupName: "Pangalan ng Grupo", groupNamePlaceholder: "hal: DREAMERS, STARLIGHT", memberName: "Pangalan ng Miyembro", memberNamePlaceholder: "hal: Luna, Kai", concept: "Konsepto", selectConcept: "Pumili ng konsepto", personality: "Personalidad", concepts: { cute: "Cute", cool: "Cool", elegant: "Elegante", powerful: "Malakas" }, personalities: { cheerful: { label: "Masayahin", description: "Palaging masaya at positibo" }, cool: { label: "Cool", description: "Kalmado at mahinahon" }, tsundere: { label: "Tsundere", description: "Malamig sa labas, mainit sa loob" }, gentle: { label: "Mabait", description: "Maalalahanin at mapagmahal" } }, step1: "Grupo", step2: "Miyembro", step3: "Tapos", step1Title: "Gumawa ng Grupo", step2Title: "Magdagdag ng Miyembro", groupNameRequired: "Maglagay ng pangalan ng grupo", memberNameRequired: "Maglagay ng pangalan ng miyembro", memberRequired: "Magdagdag ng kahit isang miyembro", emblem: "Emblema", emblemPromptPlaceholder: "Ilarawan ang emblema ng grupo...", emblemRequired: "Gumawa ng imahe ng emblema", generate: "Lumikha", next: "Susunod", back: "Bumalik", create: "Gumawa", completeTitle: "Handa na ang Idol Mo!", completeDescription: "Mag-chat na sa iyong dream idol ngayon", viewProfile: "Tingnan ang Profile" }, ne = { hero: { title: "Likhain ang Idol ng Iyong Pangarap", description: "I-design ang perpektong idol at mag-chat na parang tunay na fan", cta: "Magsimulang Lumikha" }, demo: { title: "Ang Imahinasyon Mo, Ang Idol Mo", description: "Lumikha ng mga natatanging idol at magtayo ng koneksyon" } }, te = {
88
- share: _,
89
- urlCopied: Z,
90
- companion: ee,
91
- aidol: ae,
46
+ const s = { close: "Close" }, d = "Share", p = "URL copied!", u = { promptPlaceholder: "How does your idol talk? Describe their vibe...", addMember: "Add Member", signed: "Signed 🥺", grade: "Grade {{grade}}" }, g = { notFound: "Group not found", members: "Members", noMembers: "No members yet" }, b = { groupName: "Group Name", groupNamePlaceholder: "e.g. DREAMERS, STARLIGHT", memberName: "Member Name", memberNamePlaceholder: "e.g. Luna, Kai", concept: "Concept", selectConcept: "Select a concept", personality: "Personality", concepts: { cute: "Cute", cool: "Cool", elegant: "Elegant", powerful: "Powerful" }, personalities: { cheerful: { label: "Cheerful", description: "Always bright and positive" }, cool: { label: "Cool", description: "Calm and collected" }, tsundere: { label: "Tsundere", description: "Cold outside, warm inside" }, gentle: { label: "Gentle", description: "Kind and caring" } }, step1: "Group", step2: "Members", step3: "Done", step1Title: "Create Your Group", step2Title: "Add Members", groupNameRequired: "Please enter a group name", memberNameRequired: "Please enter a member name", memberRequired: "Please add at least one member", emblem: "Emblem", emblemPromptPlaceholder: "Describe your group's emblem...", emblemRequired: "Please generate an emblem image", generate: "Generate", next: "Next", back: "Back", create: "Create", completeTitle: "Your Idol is Ready!", completeDescription: "Start chatting with your dream idol now", viewProfile: "View Profile" }, h = { hero: { title: "Create Your Dream Idol", description: "Design your perfect idol and chat like a real fan", cta: "Start Creating" }, demo: { title: "Your Imagination, Your Idol", description: "Create idols with unique personalities and build your connection" } }, T = {
47
+ common: s,
48
+ share: d,
49
+ urlCopied: p,
50
+ companion: u,
51
+ aidol: g,
52
+ creation: b,
53
+ landing: h
54
+ }, P = { close: "Cerrar" }, R = "Compartir", N = "¡URL copiada!", y = { promptPlaceholder: "¿Cómo habla tu idol? Describe su personalidad...", addMember: "Añadir Miembro", signed: "Firmado 🥺", grade: "Grado {{grade}}" }, M = { notFound: "Grupo no encontrado", members: "Miembros", noMembers: "Aún no hay miembros" }, C = { groupName: "Nombre del Grupo", groupNamePlaceholder: "ej: DREAMERS, STARLIGHT", memberName: "Nombre del Miembro", memberNamePlaceholder: "ej: Luna, Kai", concept: "Concepto", selectConcept: "Selecciona un concepto", personality: "Personalidad", concepts: { cute: "Lindo", cool: "Genial", elegant: "Elegante", powerful: "Poderoso" }, personalities: { cheerful: { label: "Alegre", description: "Siempre brillante y positivo" }, cool: { label: "Genial", description: "Tranquilo y sereno" }, tsundere: { label: "Tsundere", description: "Frío por fuera, cálido por dentro" }, gentle: { label: "Amable", description: "Bondadoso y cariñoso" } }, step1: "Grupo", step2: "Miembros", step3: "Listo", step1Title: "Crea Tu Grupo", step2Title: "Añade Miembros", groupNameRequired: "Por favor ingresa un nombre de grupo", memberNameRequired: "Por favor ingresa un nombre de miembro", memberRequired: "Por favor añade al menos un miembro", emblem: "Emblema", emblemPromptPlaceholder: "Describe el emblema de tu grupo...", emblemRequired: "Por favor genera una imagen de emblema", generate: "Generar", next: "Siguiente", back: "Atrás", create: "Crear", completeTitle: "¡Tu Idol Está Listo!", completeDescription: "Empieza a chatear con tu idol soñado ahora", viewProfile: "Ver Perfil" }, $ = { hero: { title: "Crea Tu Idol Soñado", description: "Diseña tu idol perfecto y chatea como un verdadero fan", cta: "Empezar a Crear" }, demo: { title: "Tu Imaginación, Tu Idol", description: "Crea idols únicos y construye una conexión especial" } }, k = {
55
+ common: P,
56
+ share: R,
57
+ urlCopied: N,
58
+ companion: y,
59
+ aidol: M,
60
+ creation: C,
61
+ landing: $
62
+ }, f = { close: "Tutup" }, S = "Bagikan", q = "URL disalin!", I = { promptPlaceholder: "Gimana idol kamu ngobrol? Ceritain kepribadiannya...", addMember: "Tambah Anggota", signed: "Sudah Dikontrak 🥺", grade: "Grade {{grade}}" }, L = { notFound: "Grup tidak ditemukan", members: "Anggota", noMembers: "Belum ada anggota" }, G = { groupName: "Nama Grup", groupNamePlaceholder: "cth: DREAMERS, STARLIGHT", memberName: "Nama Anggota", memberNamePlaceholder: "cth: Luna, Kai", concept: "Konsep", selectConcept: "Pilih konsep", personality: "Kepribadian", concepts: { cute: "Imut", cool: "Keren", elegant: "Elegan", powerful: "Kuat" }, personalities: { cheerful: { label: "Ceria", description: "Selalu cerah dan positif" }, cool: { label: "Keren", description: "Tenang dan kalem" }, tsundere: { label: "Tsundere", description: "Dingin di luar, hangat di dalam" }, gentle: { label: "Lembut", description: "Baik hati dan perhatian" } }, step1: "Grup", step2: "Anggota", step3: "Selesai", step1Title: "Buat Grup Kamu", step2Title: "Tambah Anggota", groupNameRequired: "Masukkan nama grup", memberNameRequired: "Masukkan nama anggota", memberRequired: "Tambahkan minimal satu anggota", emblem: "Emblem", emblemPromptPlaceholder: "Deskripsikan emblem grup kamu...", emblemRequired: "Buat gambar emblem dulu", generate: "Buat", next: "Lanjut", back: "Kembali", create: "Buat", completeTitle: "Idol Kamu Siap!", completeDescription: "Langsung ngobrol sama idol impianmu sekarang", viewProfile: "Lihat Profil" }, A = { hero: { title: "Buat Idol Impianmu", description: "Desain idol sempurnamu dan ngobrol kayak fans beneran", cta: "Mulai Buat" }, demo: { title: "Imajinasimu Jadi Idol", description: "Buat idol unik dan bangun koneksi spesial" } }, D = {
63
+ common: f,
64
+ share: S,
65
+ urlCopied: q,
66
+ companion: I,
67
+ aidol: L,
68
+ creation: G,
69
+ landing: A
70
+ }, v = { close: "閉じる" }, w = "共有", E = "URLがコピーされました!", K = { promptPlaceholder: "どんな話し方をする?性格を教えてね...", addMember: "メンバー追加", signed: "契約完了 🥺", grade: "{{grade}} ランク" }, B = { notFound: "グループが見つかりません", members: "メンバー", noMembers: "まだメンバーがいません" }, x = { groupName: "グループ名", groupNamePlaceholder: "例: DREAMERS, STARLIGHT", memberName: "メンバー名", memberNamePlaceholder: "例: ルナ, カイ", concept: "コンセプト", selectConcept: "コンセプトを選択", personality: "性格", concepts: { cute: "キュート", cool: "クール", elegant: "エレガント", powerful: "パワフル" }, personalities: { cheerful: { label: "明るい", description: "いつも元気でポジティブ" }, cool: { label: "クール", description: "冷静で落ち着いている" }, tsundere: { label: "ツンデレ", description: "外は冷たく中は温かい" }, gentle: { label: "優しい", description: "親切で思いやりがある" } }, step1: "グループ", step2: "メンバー", step3: "完了", step1Title: "グループを作ろう", step2Title: "メンバーを追加", groupNameRequired: "グループ名を入力してください", memberNameRequired: "メンバー名を入力してください", memberRequired: "メンバーを1人以上追加してください", emblem: "エンブレム", emblemPromptPlaceholder: "グループのエンブレムを説明してください...", emblemRequired: "エンブレム画像を生成してください", generate: "生成", next: "次へ", back: "戻る", create: "作成", completeTitle: "アイドル完成!", completeDescription: "さっそく推しと会話しよう", viewProfile: "プロフィールを見る" }, H = { hero: { title: "夢のアイドルを作ろう", description: "理想のアイドルを作って、本物のファンみたいに会話しよう", cta: "作り始める" }, demo: { title: "想像がアイドルになる", description: "あなただけのアイドルを作り、特別な絆を築こう" } }, V = {
71
+ common: v,
72
+ share: w,
73
+ urlCopied: E,
74
+ companion: K,
75
+ aidol: B,
76
+ creation: x,
77
+ landing: H
78
+ }, F = { close: "닫기" }, U = "공유", j = "URL이 복사되었습니다!", Y = { promptPlaceholder: "어떤 말투로 대화할까요? 성격을 설명해 주세요...", addMember: "멤버 추가", signed: "계약 완료 🥺", grade: "{{grade}} 등급" }, z = { notFound: "그룹을 찾을 수 없습니다", members: "멤버", noMembers: "아직 멤버가 없습니다" }, O = { groupName: "그룹 이름", groupNamePlaceholder: "예: 드리머즈, 스타라이트", memberName: "멤버 이름", memberNamePlaceholder: "예: 루나, 카이", concept: "컨셉", selectConcept: "컨셉을 선택하세요", personality: "성격", concepts: { cute: "큐트", cool: "쿨", elegant: "우아한", powerful: "파워풀" }, personalities: { cheerful: { label: "활발한", description: "항상 밝고 긍정적인" }, cool: { label: "쿨한", description: "차분하고 침착한" }, tsundere: { label: "츤데레", description: "겉은 차갑지만 속은 따뜻한" }, gentle: { label: "다정한", description: "친절하고 배려심 깊은" } }, step1: "그룹", step2: "멤버", step3: "완료", step1Title: "그룹 만들기", step2Title: "멤버 추가하기", groupNameRequired: "그룹 이름을 입력해 주세요", memberNameRequired: "멤버 이름을 입력해 주세요", memberRequired: "멤버를 한 명 이상 추가해 주세요", emblem: "엠블럼", emblemPromptPlaceholder: "그룹의 엠블럼을 설명해 주세요...", emblemRequired: "엠블럼 이미지를 생성해 주세요", generate: "생성", next: "다음", back: "이전", create: "만들기", completeTitle: "아이돌 완성!", completeDescription: "지금 바로 나만의 아이돌과 대화해 보세요", viewProfile: "프로필 보기" }, J = { hero: { title: "꿈꾸던 아이돌, 직접 만들기", description: "나만의 아이돌을 만들고 진짜 팬처럼 대화하세요", cta: "만들기 시작" }, demo: { title: "상상 속 아이돌이 현실로", description: "나만의 아이돌을 만들고 특별한 관계를 쌓아보세요" } }, X = {
79
+ common: F,
80
+ share: U,
81
+ urlCopied: j,
82
+ companion: Y,
83
+ aidol: z,
84
+ creation: O,
85
+ landing: J
86
+ }, Q = { close: "ปิด" }, W = "แชร์", _ = "คัดลอก URL แล้ว!", Z = { promptPlaceholder: "ไอดอลของคุณพูดยังไง? บรรยายบุคลิกสักนิด...", addMember: "เพิ่มสมาชิก", signed: "เซ็นสัญญาแล้ว 🥺", grade: "เกรด {{grade}}" }, ee = { notFound: "ไม่พบกลุ่ม", members: "สมาชิก", noMembers: "ยังไม่มีสมาชิก" }, oe = { groupName: "ชื่อกลุ่ม", groupNamePlaceholder: "เช่น: DREAMERS, STARLIGHT", memberName: "ชื่อสมาชิก", memberNamePlaceholder: "เช่น: Luna, Kai", concept: "คอนเซ็ปต์", selectConcept: "เลือกคอนเซ็ปต์", personality: "บุคลิกภาพ", concepts: { cute: "น่ารัก", cool: "เท่", elegant: "สง่างาม", powerful: "ทรงพลัง" }, personalities: { cheerful: { label: "ร่าเริง", description: "สดใสและเป็นบวกเสมอ" }, cool: { label: "เท่", description: "สงบและเยือกเย็น" }, tsundere: { label: "ซึนเดเระ", description: "ภายนอกเย็นชา ภายในอบอุ่น" }, gentle: { label: "อ่อนโยน", description: "ใจดีและเอาใจใส่" } }, step1: "กลุ่ม", step2: "สมาชิก", step3: "เสร็จ", step1Title: "สร้างกลุ่มของคุณ", step2Title: "เพิ่มสมาชิก", groupNameRequired: "กรุณาใส่ชื่อกลุ่ม", memberNameRequired: "กรุณาใส่ชื่อสมาชิก", memberRequired: "กรุณาเพิ่มสมาชิกอย่างน้อย 1 คน", emblem: "ตราสัญลักษณ์", emblemPromptPlaceholder: "อธิบายตราสัญลักษณ์กลุ่ม...", emblemRequired: "กรุณาสร้างภาพตราสัญลักษณ์", generate: "สร้าง", next: "ถัดไป", back: "กลับ", create: "สร้าง", completeTitle: "ไอดอลพร้อมแล้ว!", completeDescription: "เริ่มแชทกับไอดอลในฝันของคุณได้เลย", viewProfile: "ดูโปรไฟล์" }, ae = { hero: { title: "สร้างไอดอลในฝัน", description: "ออกแบบไอดอลในอุดมคติและแชทเหมือนแฟนคลับตัวจริง", cta: "เริ่มสร้าง" }, demo: { title: "จินตนาการกลายเป็นไอดอล", description: "สร้างไอดอลที่มีเอกลักษณ์และสร้างสายสัมพันธ์พิเศษ" } }, ne = {
87
+ common: Q,
88
+ share: W,
89
+ urlCopied: _,
90
+ companion: Z,
91
+ aidol: ee,
92
92
  creation: oe,
93
- landing: ne
94
- }, re = "Chia sẻ", ie = "Đã sao chép URL!", le = { promptPlaceholder: "Idol của bạn nói chuyện như thế nào? tả tính cách...", addMember: "Thêm Thành Viên", signed: "Đã hợp đồng 🥺", grade: "Hạng {{grade}}" }, me = { notFound: "Không tìm thấy nhóm", members: "Thành Viên", noMembers: "Chưa thành viên" }, se = { groupName: "Tên Nhóm", groupNamePlaceholder: "vd: DREAMERS, STARLIGHT", memberName: "Tên Thành Viên", memberNamePlaceholder: "vd: Luna, Kai", concept: "Concept", selectConcept: "Chọn concept", personality: "Tính Cách", concepts: { cute: "Dễ thương", cool: "Ngầu", elegant: "Thanh lịch", powerful: "Mạnh mẽ" }, personalities: { cheerful: { label: "Vui vẻ", description: "Luôn tươi sáng và tích cực" }, cool: { label: "Ngầu", description: "Bình tĩnh và điềm đạm" }, tsundere: { label: "Tsundere", description: "Lạnh lùng bên ngoài, ấm áp bên trong" }, gentle: { label: "Dịu dàng", description: "Tốt bụng và quan tâm" } }, step1: "Nhóm", step2: "Thành Viên", step3: "Xong", step1Title: "Tạo Nhóm", step2Title: "Thêm Thành Viên", groupNameRequired: "Vui lòng nhập tên nhóm", memberNameRequired: "Vui lòng nhập tên thành viên", memberRequired: "Vui lòng thêm ít nhất một thành viên", emblem: "Biểu tượng", emblemPromptPlaceholder: " tả biểu tượng nhóm...", emblemRequired: "Vui lòng tạo hình biểu tượng", generate: "Tạo", next: "Tiếp", back: "Quay lại", create: "Tạo", completeTitle: "Idol Đã Sẵn Sàng!", completeDescription: "Bắt đầu trò chuyện với idol mơ ước ngay", viewProfile: "Xem Hồ " }, ce = { hero: { title: "Tạo Idol Ước", description: "Thiết kế idol hoàn hảo trò chuyện như fan thật sự", cta: "Bắt Đầu Tạo" }, demo: { title: "Trí Tưởng Tượng Thành Idol", description: "Tạo idol độc đáo xây dựng mối liên kết đặc biệt" } }, de = {
93
+ landing: ae
94
+ }, te = { close: "Isara" }, re = "I-share", ie = "Nakopya ang URL!", le = { promptPlaceholder: "Paano nagsasalita ang idol mo? Ilarawan ang personality...", addMember: "Magdagdag ng Miyembro", signed: "Naka-kontrata na 🥺", grade: "Grade {{grade}}" }, me = { notFound: "Hindi nahanap ang grupo", members: "Miyembro", noMembers: "Wala pang miyembro" }, ce = { groupName: "Pangalan ng Grupo", groupNamePlaceholder: "hal: DREAMERS, STARLIGHT", memberName: "Pangalan ng Miyembro", memberNamePlaceholder: "hal: Luna, Kai", concept: "Konsepto", selectConcept: "Pumili ng konsepto", personality: "Personalidad", concepts: { cute: "Cute", cool: "Cool", elegant: "Elegante", powerful: "Malakas" }, personalities: { cheerful: { label: "Masayahin", description: "Palaging masaya at positibo" }, cool: { label: "Cool", description: "Kalmado at mahinahon" }, tsundere: { label: "Tsundere", description: "Malamig sa labas, mainit sa loob" }, gentle: { label: "Mabait", description: "Maalalahanin at mapagmahal" } }, step1: "Grupo", step2: "Miyembro", step3: "Tapos", step1Title: "Gumawa ng Grupo", step2Title: "Magdagdag ng Miyembro", groupNameRequired: "Maglagay ng pangalan ng grupo", memberNameRequired: "Maglagay ng pangalan ng miyembro", memberRequired: "Magdagdag ng kahit isang miyembro", emblem: "Emblema", emblemPromptPlaceholder: "Ilarawan ang emblema ng grupo...", emblemRequired: "Gumawa ng imahe ng emblema", generate: "Lumikha", next: "Susunod", back: "Bumalik", create: "Gumawa", completeTitle: "Handa na ang Idol Mo!", completeDescription: "Mag-chat na sa iyong dream idol ngayon", viewProfile: "Tingnan ang Profile" }, se = { hero: { title: "Likhain ang Idol ng Iyong Pangarap", description: "I-design ang perpektong idol at mag-chat na parang tunay na fan", cta: "Magsimulang Lumikha" }, demo: { title: "Ang Imahinasyon Mo, Ang Idol Mo", description: "Lumikha ng mga natatanging idol at magtayo ng koneksyon" } }, de = {
95
+ common: te,
95
96
  share: re,
96
97
  urlCopied: ie,
97
98
  companion: le,
98
99
  aidol: me,
99
- creation: se,
100
- landing: ce
101
- }, pe = "分享", ue = "URL已复制!", ge = { promptPlaceholder: "你的偶像怎么说话?描述一下性格...", addMember: "添加成员", signed: "已签约 🥺", grade: "{{grade}}" }, be = { notFound: "找不到该组合", members: "成员", noMembers: "暂无成员" }, he = { groupName: "组合名", groupNamePlaceholder: "例如: DREAMERS, STARLIGHT", memberName: "成员名", memberNamePlaceholder: "例如: Luna, Kai", concept: "概念", selectConcept: "选择概念", personality: "性格", concepts: { cute: "可爱", cool: "", elegant: "优雅", powerful: "有力" }, personalities: { cheerful: { label: "开朗", description: "总是阳光积极" }, cool: { label: "冷酷", description: "冷静沉着" }, tsundere: { label: "傲娇", description: "外冷内热" }, gentle: { label: "温柔", description: "善良体贴" } }, step1: "组合", step2: "成员", step3: "完成", step1Title: "创建组合", step2Title: "添加成员", groupNameRequired: "请输入组合名", memberNameRequired: "请输入成员名", memberRequired: "请至少添加一名成员", emblem: "徽章", emblemPromptPlaceholder: "描述你的组合徽章...", emblemRequired: "请生成徽章图片", generate: "生成", next: "下一步", back: "上一步", create: "创建", completeTitle: "偶像创建完成!", completeDescription: "现在就和你的梦想偶像聊天吧", viewProfile: "查看资料" }, Te = { hero: { title: "创造你的梦想偶像", description: "设计你的理想偶像,像真正的粉丝一样聊天", cta: "开始创作" }, demo: { title: "让想象变成偶像", description: "创建独特的偶像,建立特别的羁绊" } }, Pe = {
102
- share: pe,
103
- urlCopied: ue,
104
- companion: ge,
105
- aidol: be,
106
- creation: he,
107
- landing: Te
108
- }, ke = "aidol", fe = {
109
- en: h,
110
- es: C,
111
- id: L,
112
- ja: K,
113
- ko: j,
114
- th: W,
115
- tl: te,
116
- vi: de,
117
- zh: Pe
100
+ creation: ce,
101
+ landing: se
102
+ }, pe = { close: "Đóng" }, ue = "Chia sẻ", ge = "Đã sao chép URL!", be = { promptPlaceholder: "Idol của bạn nói chuyện như thế nào? Mô tả tính cách...", addMember: "Thêm Thành Viên", signed: "Đã ký hợp đồng 🥺", grade: "Hạng {{grade}}" }, he = { notFound: "Không tìm thấy nhóm", members: "Thành Viên", noMembers: "Chưa có thành viên" }, Te = { groupName: "Tên Nhóm", groupNamePlaceholder: "vd: DREAMERS, STARLIGHT", memberName: "Tên Thành Viên", memberNamePlaceholder: "vd: Luna, Kai", concept: "Concept", selectConcept: "Chọn concept", personality: "Tính Cách", concepts: { cute: "Dễ thương", cool: "Ngầu", elegant: "Thanh lịch", powerful: "Mạnh mẽ" }, personalities: { cheerful: { label: "Vui vẻ", description: "Luôn tươi sáng và tích cực" }, cool: { label: "Ngầu", description: "Bình tĩnh và điềm đạm" }, tsundere: { label: "Tsundere", description: "Lạnh lùng bên ngoài, ấm áp bên trong" }, gentle: { label: "Dịu dàng", description: "Tốt bụng và quan tâm" } }, step1: "Nhóm", step2: "Thành Viên", step3: "Xong", step1Title: "Tạo Nhóm", step2Title: "Thêm Thành Viên", groupNameRequired: "Vui lòng nhập tên nhóm", memberNameRequired: "Vui lòng nhập tên thành viên", memberRequired: "Vui lòng thêm ít nhất một thành viên", emblem: "Biểu tượng", emblemPromptPlaceholder: "Mô tả biểu tượng nhóm...", emblemRequired: "Vui lòng tạo hình biểu tượng", generate: "Tạo", next: "Tiếp", back: "Quay lại", create: "Tạo", completeTitle: "Idol Đã Sẵn Sàng!", completeDescription: "Bắt đầu trò chuyện với idol mơ ước ngay", viewProfile: "Xem Hồ Sơ" }, Pe = { hero: { title: "Tạo Idol Mơ Ước", description: "Thiết kế idol hoàn hảo và trò chuyện như fan thật sự", cta: "Bắt Đầu Tạo" }, demo: { title: "Trí Tưởng Tượng Thành Idol", description: "Tạo idol độc đáo và xây dựng mối liên kết đặc biệt" } }, Re = {
103
+ common: pe,
104
+ share: ue,
105
+ urlCopied: ge,
106
+ companion: be,
107
+ aidol: he,
108
+ creation: Te,
109
+ landing: Pe
110
+ }, Ne = { close: "关闭" }, ye = "分享", Me = "URL已复制!", Ce = { promptPlaceholder: "你的偶像怎么说话?描述一下性格...", addMember: "添加成员", signed: "已签约 🥺", grade: "{{grade}} 级" }, $e = { notFound: "找不到该组合", members: "成员", noMembers: "暂无成员" }, ke = { groupName: "组合名", groupNamePlaceholder: "例如: DREAMERS, STARLIGHT", memberName: "成员名", memberNamePlaceholder: "例如: Luna, Kai", concept: "概念", selectConcept: "选择概念", personality: "性格", concepts: { cute: "可爱", cool: "酷", elegant: "优雅", powerful: "有力" }, personalities: { cheerful: { label: "开朗", description: "总是阳光积极" }, cool: { label: "冷酷", description: "冷静沉着" }, tsundere: { label: "傲娇", description: "外冷内热" }, gentle: { label: "温柔", description: "善良体贴" } }, step1: "组合", step2: "成员", step3: "完成", step1Title: "创建组合", step2Title: "添加成员", groupNameRequired: "请输入组合名", memberNameRequired: "请输入成员名", memberRequired: "请至少添加一名成员", emblem: "徽章", emblemPromptPlaceholder: "描述你的组合徽章...", emblemRequired: "请生成徽章图片", generate: "生成", next: "下一步", back: "上一步", create: "创建", completeTitle: "偶像创建完成!", completeDescription: "现在就和你的梦想偶像聊天吧", viewProfile: "查看资料" }, fe = { hero: { title: "创造你的梦想偶像", description: "设计你的理想偶像,像真正的粉丝一样聊天", cta: "开始创作" }, demo: { title: "让想象变成偶像", description: "创建独特的偶像,建立特别的羁绊" } }, Se = {
111
+ common: Ne,
112
+ share: ye,
113
+ urlCopied: Me,
114
+ companion: Ce,
115
+ aidol: $e,
116
+ creation: ke,
117
+ landing: fe
118
+ }, De = "aidol", ve = {
119
+ en: T,
120
+ es: k,
121
+ id: D,
122
+ ja: V,
123
+ ko: X,
124
+ th: ne,
125
+ tl: de,
126
+ vi: Re,
127
+ zh: Se
118
128
  };
119
129
  export {
120
- ke as AIDOL_NS,
121
- Me as AIdolRepository,
122
- Ce as CompanionRepository,
130
+ De as AIDOL_NS,
131
+ Ge as AIdolRepository,
132
+ Ae as CompanionRepository,
123
133
  l as aidolSchema,
124
- fe as aidolTranslations,
125
- s as companionSchema,
134
+ ve as aidolTranslations,
135
+ c as companionSchema,
126
136
  m as imageGenerationResponseSchema
127
137
  };
128
138
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/schemas/companion.ts","../src/repositories/AIdolRepository.ts","../src/repositories/CompanionRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.string().nullable(),\n position: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: string | null;\n position?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n AIdol,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { aidolSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/**\n * Repository for AIdol (group) entities\n */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidol/aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n /**\n * Generate image for AIdol emblem or Companion profile\n */\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type { Companion } from \"../schemas\";\nimport { companionSchema } from \"../schemas\";\n\n/**\n * Repository for Companion (member) entities\n */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"aidol/companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n}\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["companionSchema","z","AIdolRepository","BaseCrudRepository","aidolSchema","request","fetchOptions","url","rawResponse","imageGenerationResponseSchema","CompanionRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":";;;AAWO,MAAMA,IAAkBC,EAAE,OAAO;AAAA,EACtC,IAAIA,EAAE,OAAA;AAAA,EACN,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,MAAMA,EAAE,OAAA;AAAA,EACR,WAAWA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACjC,mBAAmBA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACzC,OAAOA,EAAE,OAAA,EAAS,SAAA;AAAA,EAClB,UAAUA,EAAE,OAAA,EAAS,SAAA;AAAA,EACrB,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC;ACTM,MAAMC,WAAwBC,EAA0B;AAAA,EAAxD,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJC,GACAC,GACkC;AAClC,UAAMC,IAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,GACxDC,IAAc,MAAM,KAAK,WAAW,QAAQD,GAAK;AAAA,MACrD,GAAGD;AAAA,MACH,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAAA;AAAA,MAElB,MAAM,KAAK,UAAUD,CAAO;AAAA,IAAA,CAC7B;AAED,WAAO,KAAK,iBAAiBG,GAAaC,CAA6B;AAAA,EACzE;AACF;AC9BO,MAAMC,WAA4BP,EAA8B;AAAA,EAAhE,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOH;AAAA,EACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCIaW,KAAW,SAcXC,KAAoB;AAAA,EAC/B,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AACF;"}
1
+ {"version":3,"file":"index.js","sources":["../src/schemas/companion.ts","../src/repositories/AIdolRepository.ts","../src/repositories/CompanionRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.string().nullable().optional(),\n position: z.string().nullable().optional(),\n mbti: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: string | null;\n position?: string | null;\n mbti?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n AIdol,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { aidolSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/**\n * Repository for AIdol (group) entities\n */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidol/aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n /**\n * Generate image for AIdol emblem or Companion profile\n */\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type { Companion } from \"../schemas\";\nimport { companionSchema } from \"../schemas\";\n\n/**\n * Repository for Companion (member) entities\n */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"aidol/companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n}\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["companionSchema","z","AIdolRepository","BaseCrudRepository","aidolSchema","request","fetchOptions","url","rawResponse","imageGenerationResponseSchema","CompanionRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":";;;AAWO,MAAMA,IAAkBC,EAAE,OAAO;AAAA,EACtC,IAAIA,EAAE,OAAA;AAAA,EACN,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,MAAMA,EAAE,OAAA;AAAA,EACR,WAAWA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACjC,mBAAmBA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACzC,OAAOA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC7B,UAAUA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAChC,MAAMA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC5B,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC;ACVM,MAAMC,WAAwBC,EAA0B;AAAA,EAAxD,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJC,GACAC,GACkC;AAClC,UAAMC,IAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,GACxDC,IAAc,MAAM,KAAK,WAAW,QAAQD,GAAK;AAAA,MACrD,GAAGD;AAAA,MACH,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAAA;AAAA,MAElB,MAAM,KAAK,UAAUD,CAAO;AAAA,IAAA,CAC7B;AAED,WAAO,KAAK,iBAAiBG,GAAaC,CAA6B;AAAA,EACzE;AACF;AC9BO,MAAMC,WAA4BP,EAA8B;AAAA,EAAhE,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOH;AAAA,EACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCIaW,KAAW,SAcXC,KAAoB;AAAA,EAC/B,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AACF;"}
@@ -11,30 +11,33 @@ export declare class CompanionRepository extends BaseCrudRepository<Companion> {
11
11
  name: import('zod').ZodString;
12
12
  biography: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
13
13
  profilePictureUrl: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
14
- grade: import('zod').ZodNullable<import('zod').ZodString>;
15
- position: import('zod').ZodNullable<import('zod').ZodString>;
14
+ grade: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
15
+ position: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
16
+ mbti: import('zod').ZodOptional<import('zod').ZodNullable<import('zod').ZodString>>;
16
17
  createdAt: import('zod').ZodString;
17
18
  updatedAt: import('zod').ZodString;
18
19
  }, "strip", import('zod').ZodTypeAny, {
19
20
  id: string;
20
21
  name: string;
21
- grade: string | null;
22
- position: string | null;
23
22
  createdAt: string;
24
23
  updatedAt: string;
25
24
  aidolId?: string | null | undefined;
26
25
  biography?: string | null | undefined;
27
26
  profilePictureUrl?: string | null | undefined;
27
+ grade?: string | null | undefined;
28
+ position?: string | null | undefined;
29
+ mbti?: string | null | undefined;
28
30
  }, {
29
31
  id: string;
30
32
  name: string;
31
- grade: string | null;
32
- position: string | null;
33
33
  createdAt: string;
34
34
  updatedAt: string;
35
35
  aidolId?: string | null | undefined;
36
36
  biography?: string | null | undefined;
37
37
  profilePictureUrl?: string | null | undefined;
38
+ grade?: string | null | undefined;
39
+ position?: string | null | undefined;
40
+ mbti?: string | null | undefined;
38
41
  }>;
39
42
  }
40
43
  //# sourceMappingURL=CompanionRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompanionRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/CompanionRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB,CAAC,SAAS,CAAC;IACpE,QAAQ,CAAC,QAAQ,sBAAsB;IAEvC,SAAS,CAAC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxB"}
1
+ {"version":3,"file":"CompanionRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/CompanionRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB,CAAC,SAAS,CAAC;IACpE,QAAQ,CAAC,QAAQ,sBAAsB;IAEvC,SAAS,CAAC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxB"}
@@ -9,30 +9,33 @@ export declare const companionSchema: z.ZodObject<{
9
9
  name: z.ZodString;
10
10
  biography: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
11
  profilePictureUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
- grade: z.ZodNullable<z.ZodString>;
13
- position: z.ZodNullable<z.ZodString>;
12
+ grade: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ position: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
+ mbti: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
15
  createdAt: z.ZodString;
15
16
  updatedAt: z.ZodString;
16
17
  }, "strip", z.ZodTypeAny, {
17
18
  id: string;
18
19
  name: string;
19
- grade: string | null;
20
- position: string | null;
21
20
  createdAt: string;
22
21
  updatedAt: string;
23
22
  aidolId?: string | null | undefined;
24
23
  biography?: string | null | undefined;
25
24
  profilePictureUrl?: string | null | undefined;
25
+ grade?: string | null | undefined;
26
+ position?: string | null | undefined;
27
+ mbti?: string | null | undefined;
26
28
  }, {
27
29
  id: string;
28
30
  name: string;
29
- grade: string | null;
30
- position: string | null;
31
31
  createdAt: string;
32
32
  updatedAt: string;
33
33
  aidolId?: string | null | undefined;
34
34
  biography?: string | null | undefined;
35
35
  profilePictureUrl?: string | null | undefined;
36
+ grade?: string | null | undefined;
37
+ position?: string | null | undefined;
38
+ mbti?: string | null | undefined;
36
39
  }>;
37
40
  export interface Companion extends BaseRecord {
38
41
  id: string;
@@ -42,6 +45,7 @@ export interface Companion extends BaseRecord {
42
45
  profilePictureUrl?: string | null;
43
46
  grade?: string | null;
44
47
  position?: string | null;
48
+ mbti?: string | null;
45
49
  createdAt: string;
46
50
  updatedAt: string;
47
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../src/schemas/companion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1B,CAAC;AAEH,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
1
+ {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../../src/schemas/companion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW1B,CAAC;AAEH,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidol",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "React components for AIdol - Create and chat with your own AI idol group",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",