From 27173e07618e14df66f1c1f7f4f318792861439c Mon Sep 17 00:00:00 2001 From: "similai.tw" Date: Mon, 22 Jun 2026 18:11:27 +0800 Subject: [PATCH] Add static subject designer catalog --- .gitignore | 1 + README.md | 2 + package-lock.json | 4 +- package.json | 2 +- src/components/SettingsPanel.tsx | 3 +- src/components/SubjectDesigner.tsx | 23 ++++++++ src/components/TaskPanel.tsx | 3 ++ src/domain/project.test.ts | 7 +-- src/domain/project.ts | 34 ++++++++---- src/domain/subjectCatalog.test.ts | 8 +++ src/domain/subjectCatalog.ts | 77 +++++++++++++++++++++++++++ src/domain/subjectDescription.test.ts | 9 ++++ src/domain/subjectDescription.ts | 36 +++++++++++++ src/domain/types.ts | 16 +++++- src/domain/validation.ts | 2 + src/providers/tasks.test.ts | 4 +- src/providers/tasks.ts | 13 +++-- src/styles.css | 1 + tests/e2e/smoke.spec.ts | 14 +++-- 19 files changed, 232 insertions(+), 27 deletions(-) create mode 100644 src/components/SubjectDesigner.tsx create mode 100644 src/domain/subjectCatalog.test.ts create mode 100644 src/domain/subjectCatalog.ts create mode 100644 src/domain/subjectDescription.test.ts create mode 100644 src/domain/subjectDescription.ts diff --git a/.gitignore b/.gitignore index 6451a32..773fd31 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ playwright-report/ .env.* !.env.example .vercel +firebase-debug.log* diff --git a/README.md b/README.md index 2a9c81e..9dafd87 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ - 靜態、動態、自訂文字、訊息、大貼圖、彈出式與特效背景七種類型。 - 每個專案只需一份 ChatGPT/Gemini 完整 Markdown 任務,可下載、重新匯入及保存產圖紀錄。 - 最多 5 張人物、寵物或角色參考照片,本機 IndexedDB 保存並隨專案 ZIP 備份。 +- v5 靜態角色題材設計:6 大類、110 個原創子項目、角色設定、個性與道具組合。 +- 有照片時自動建立安全的外觀分析指令;無照片時可選熱門趨勢題材或完全自訂主體。 - 2–8 行列候選網格,預設 3×3 生成 9 張候選並選出 8 張 LINE 貼圖。 - 40 個分類、400 組台灣繁中常用語,以及自訂詞庫匯入/匯出。 - 16 種主風格與配色、描邊、上色、造型組合。 diff --git a/package-lock.json b/package-lock.json index 3012ac5..ddcf8e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "line-sticker-studio", - "version": "4.0.0", + "version": "5.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "line-sticker-studio", - "version": "4.0.0", + "version": "5.0.0", "license": "MIT", "dependencies": { "@vitejs/plugin-react": "latest", diff --git a/package.json b/package.json index 997fac6..5fb7bdc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "line-sticker-studio", - "version": "4.0.0", + "version": "5.0.0", "private": true, "description": "ChatGPT and Gemini assisted LINE sticker creation studio with local compliance validation", "license": "MIT", diff --git a/src/components/SettingsPanel.tsx b/src/components/SettingsPanel.tsx index 0a9c1c1..2a2b574 100644 --- a/src/components/SettingsPanel.tsx +++ b/src/components/SettingsPanel.tsx @@ -1,6 +1,7 @@ import { getSpec } from '../domain/specs'; import { fillCaptionSlots, RECOMMENDED_GRIDS } from '../domain/project'; import { useProject } from '../state/ProjectContext'; +import { SubjectDesigner } from './SubjectDesigner'; export function SettingsPanel() { const { project, updateSettings, dispatch } = useProject(); const { settings } = project; const spec = getSpec(project.type); const cellCount = settings.rows * settings.columns; @@ -11,7 +12,7 @@ export function SettingsPanel() { dispatch({ type: 'update', patch: { settings: { ...settings, rows, columns }, captionSlots: fillCaptionSlots(project.captionSlots, cells), stickers: [] } }); } return