@kokoa/clotho-editor 0.1.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 @@
1
+ {"version":3,"sources":["../src/legacy/state/internals.ts","../src/legacy/state/core.ts","../src/legacy/state/history.ts","../src/legacy/state/elements.ts","../src/legacy/state/timeline.ts","../src/legacy/state/meta.ts","../src/legacy/studio-groups.ts","../src/legacy/host.ts","../src/legacy/api.ts"],"names":["next","id","animationDocumentSchema"],"mappings":"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","file":"chunk-UE32Q6U5.js","sourcesContent":["import type { AnimationDocument } from \"@kokoa/clotho\";\nimport { animationDocumentSchema } from \"@kokoa/clotho\";\nimport type {\n HistoryEntry,\n HistoryKind,\n InternalState,\n Listener,\n} from \"./types\";\n\nconst listeners = new Set<Listener>();\n\nexport const state: InternalState = {\n def: null,\n dirty: false,\n selection: { kind: \"none\" },\n currentTime: 0,\n isDraft: false,\n};\n\nconst HISTORY_LIMIT = 60;\n\nexport const past: HistoryEntry[] = [];\nexport const future: HistoryEntry[] = [];\n\nlet inTransient = false;\n\nexport function snapshotJson(): string | null {\n return state.def ? JSON.stringify(state.def) : null;\n}\n\nexport function pushHistory(label: string, kind: HistoryKind): void {\n const snap = snapshotJson();\n if (snap === null) return;\n past.push({ snap, label, kind, timestamp: Date.now() });\n if (past.length > HISTORY_LIMIT) past.shift();\n future.length = 0;\n}\n\nexport function setInTransient(value: boolean): void {\n inTransient = value;\n}\n\nexport function subscribe(fn: Listener): () => void {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport function emit(): void {\n for (const fn of listeners) fn();\n}\n\nexport function mutateDef(\n fn: (def: AnimationDocument) => void,\n label = \"edit\",\n kind: HistoryKind = \"other\",\n): void {\n if (!state.def) return;\n if (!inTransient) pushHistory(label, kind);\n const cloned = JSON.parse(JSON.stringify(state.def));\n fn(cloned);\n const parsed = animationDocumentSchema.safeParse(cloned);\n if (!parsed.success) {\n past.pop();\n console.warn(\"[studio.state] invalid mutation\", parsed.error.issues);\n return;\n }\n state.def = parsed.data;\n state.dirty = true;\n emit();\n}\n","import type { AnimationDocument, SnapshotMap } from \"@kokoa/clotho\";\nimport { computeSnapshot } from \"@kokoa/clotho\";\nimport type { Selection } from \"./types\";\nimport { emit, state, past, future } from \"./internals\";\n\nexport function isDraft(): boolean {\n return state.isDraft;\n}\n\nexport function setDraft(def: AnimationDocument): void {\n state.def = def;\n state.dirty = false;\n state.isDraft = true;\n state.selection = { kind: \"none\" };\n state.currentTime = 0;\n past.length = 0;\n future.length = 0;\n emit();\n}\n\nexport function promoteDraftToSaved(): void {\n state.isDraft = false;\n emit();\n}\n\nexport function getDef(): AnimationDocument | null {\n return state.def;\n}\n\nexport function getSelection(): Selection {\n return state.selection;\n}\n\nexport function isDirty(): boolean {\n return state.dirty;\n}\n\nexport function getCurrentTime(): number {\n return state.currentTime;\n}\n\nexport function setCurrentTime(time: number): void {\n state.currentTime = Math.max(0, Math.round(time));\n emit();\n}\n\nexport function setDef(def: AnimationDocument | null, markDirty = false): void {\n state.def = def;\n state.dirty = markDirty;\n state.isDraft = false;\n state.selection = { kind: \"none\" };\n state.currentTime = 0;\n past.length = 0;\n future.length = 0;\n emit();\n}\n\nexport function markClean(): void {\n state.dirty = false;\n emit();\n}\n\nexport function setSelection(sel: Selection): void {\n state.selection = sel;\n emit();\n}\n\nexport function getSelectedElementIds(sel: Selection): string[] {\n if (sel.kind === \"element\") return [sel.elementId];\n if (sel.kind === \"elements\") return sel.elementIds;\n return [];\n}\n\nexport function isElementSelected(sel: Selection, id: string): boolean {\n if (sel.kind === \"element\") return sel.elementId === id;\n if (sel.kind === \"elements\") return sel.elementIds.includes(id);\n return false;\n}\n\nexport function toggleSelectionFor(sel: Selection, id: string): Selection {\n const cur = getSelectedElementIds(sel);\n if (cur.includes(id)) {\n const next = cur.filter((x) => x !== id);\n if (next.length === 0) return { kind: \"none\" };\n if (next.length === 1) return { kind: \"element\", elementId: next[0] };\n return { kind: \"elements\", elementIds: next };\n }\n const next = [...cur, id];\n if (next.length === 1) return { kind: \"element\", elementId: next[0] };\n return { kind: \"elements\", elementIds: next };\n}\n\nexport function getCurrentSnapshot(): SnapshotMap {\n if (!state.def) return new Map();\n return computeSnapshot(state.def, state.currentTime);\n}\n","import type { HistoryEntry, HistoryKind } from \"./types\";\nimport {\n emit,\n future,\n past,\n pushHistory,\n setInTransient,\n snapshotJson,\n state,\n} from \"./internals\";\n\nexport function beginTransient(\n label = \"edit\",\n kind: HistoryKind = \"other\",\n): void {\n if (!state.def) return;\n pushHistory(label, kind);\n setInTransient(true);\n}\n\nexport function endTransient(): void {\n setInTransient(false);\n}\n\nexport function canUndo(): boolean {\n return past.length > 0;\n}\n\nexport function canRedo(): boolean {\n return future.length > 0;\n}\n\nexport function undo(): void {\n if (past.length === 0) return;\n const prev = past[past.length - 1]!;\n const cur = snapshotJson();\n if (cur !== null) {\n future.push({\n snap: cur,\n label: prev.label,\n kind: prev.kind,\n timestamp: prev.timestamp,\n });\n }\n past.pop();\n state.def = JSON.parse(prev.snap);\n state.dirty = true;\n emit();\n}\n\nexport function redo(): void {\n if (future.length === 0) return;\n const next = future[future.length - 1]!;\n const cur = snapshotJson();\n if (cur !== null) {\n past.push({\n snap: cur,\n label: next.label,\n kind: next.kind,\n timestamp: next.timestamp,\n });\n }\n future.pop();\n state.def = JSON.parse(next.snap);\n state.dirty = true;\n emit();\n}\n\nexport function resetHistory(): void {\n past.length = 0;\n future.length = 0;\n}\n\nexport function getHistory(): {\n past: readonly HistoryEntry[];\n future: readonly HistoryEntry[];\n} {\n return { past, future };\n}\n\nexport function jumpBack(steps: number): void {\n if (steps <= 0 || past.length === 0) return;\n const n = Math.min(steps, past.length);\n for (let i = 0; i < n; i += 1) undo();\n}\n\nexport function jumpForward(steps: number): void {\n if (steps <= 0 || future.length === 0) return;\n const n = Math.min(steps, future.length);\n for (let i = 0; i < n; i += 1) redo();\n}\n","import type {\n AnimationDocument,\n AnimationElement,\n Appearance,\n PropertyTrack,\n TrackKeyframe,\n} from \"@kokoa/clotho\";\nimport type { HistoryKind } from \"./types\";\nimport { emit, mutateDef, state } from \"./internals\";\n\nfunction ensureAppearance(el: AnimationElement, def: AnimationDocument): void {\n if (!el.appearances || el.appearances.length === 0) {\n el.appearances = [\n { start: 0, end: def.duration, entryDuration: 300, exitDuration: 300 },\n ];\n }\n}\n\nexport function addElement(el: AnimationElement): void {\n const kind: HistoryKind = el.type === \"group\" ? \"group\" : \"add\";\n const label = el.type === \"group\" ? \"그룹 생성\" : `요소 추가: ${el.type}`;\n mutateDef(\n (def) => {\n const cloned = JSON.parse(JSON.stringify(el)) as AnimationElement;\n ensureAppearance(cloned, def);\n if (!cloned.tracks) cloned.tracks = [];\n def.elements.push(cloned);\n },\n label,\n kind,\n );\n state.selection = { kind: \"element\", elementId: el.id };\n emit();\n}\n\nexport function deleteElement(id: string): void {\n const targetEl = state.def?.elements.find((e) => e.id === id);\n const isGroupKind = targetEl?.type === \"group\";\n mutateDef(\n (def) => {\n def.elements = def.elements.filter((e) => e.id !== id);\n def.effects = def.effects.filter((e) => e.elementId !== id);\n // Anything that pointed at the deleted element is re-rooted. A dangling parentId\n // would make the tree builder report a missing parent on every render.\n for (const el of def.elements) {\n if (el.parentId === id) delete el.parentId;\n }\n },\n isGroupKind ? `그룹 해제` : `요소 삭제: ${id}`,\n isGroupKind ? \"group\" : \"delete\",\n );\n if (state.selection.kind === \"element\" && state.selection.elementId === id) {\n state.selection = { kind: \"none\" };\n } else if (state.selection.kind === \"elements\") {\n const remaining = state.selection.elementIds.filter((x) => x !== id);\n if (remaining.length === 0) state.selection = { kind: \"none\" };\n else if (remaining.length === 1)\n state.selection = { kind: \"element\", elementId: remaining[0] };\n else state.selection = { kind: \"elements\", elementIds: remaining };\n }\n emit();\n}\n\nfunction labelForPatch(\n id: string,\n patch: Record<string, unknown>,\n): { label: string; kind: HistoryKind } {\n const keys = Object.keys(patch);\n if (keys.length === 0) return { label: `요소 수정: ${id}`, kind: \"other\" };\n const posKeys = [\"x\", \"y\", \"cx\", \"cy\", \"x1\", \"y1\", \"x2\", \"y2\", \"points\"];\n const sizeKeys = [\"width\", \"height\", \"r\", \"fontSize\", \"cellWidth\"];\n const styleKeys = [\n \"fill\",\n \"stroke\",\n \"strokeWidth\",\n \"color\",\n \"opacity\",\n \"cornerRadius\",\n \"labelColor\",\n \"labelSize\",\n ];\n if (keys.some((k) => posKeys.includes(k)))\n return { label: `이동: ${id}`, kind: \"move\" };\n if (keys.some((k) => sizeKeys.includes(k)))\n return { label: `크기 변경: ${id}`, kind: \"resize\" };\n if (keys.includes(\"rotation\"))\n return { label: `회전: ${id}`, kind: \"rotate\" };\n if (keys.some((k) => styleKeys.includes(k)))\n return { label: `스타일: ${id} (${keys.join(\", \")})`, kind: \"style\" };\n if (keys.includes(\"name\")) return { label: `이름 변경: ${id}`, kind: \"meta\" };\n return { label: `요소 수정: ${id} (${keys.join(\", \")})`, kind: \"other\" };\n}\n\nexport function updateElementBase(\n id: string,\n patch: Record<string, unknown>,\n): void {\n const { label, kind } = labelForPatch(id, patch);\n mutateDef(\n (def) => {\n const idx = def.elements.findIndex((e) => e.id === id);\n if (idx < 0) return;\n const baseEl = def.elements[idx];\n const merged: Record<string, unknown> = {\n ...(baseEl as unknown as Record<string, unknown>),\n };\n for (const [k, v] of Object.entries(patch)) {\n if (v === null || v === undefined) delete merged[k];\n else merged[k] = v;\n }\n def.elements[idx] = merged as unknown as AnimationElement;\n },\n label,\n kind,\n );\n}\n\nexport function reorderElement(\n sourceId: string,\n targetId: string,\n position: \"before\" | \"after\",\n): void {\n mutateDef(\n (def) => {\n const srcIdx = def.elements.findIndex((e) => e.id === sourceId);\n if (srcIdx < 0) return;\n const [moved] = def.elements.splice(srcIdx, 1);\n let targetIdx = def.elements.findIndex((e) => e.id === targetId);\n if (targetIdx < 0) {\n def.elements.push(moved);\n return;\n }\n if (position === \"after\") targetIdx += 1;\n def.elements.splice(targetIdx, 0, moved);\n },\n `순서 변경: ${sourceId}`,\n \"reorder\",\n );\n}\n\nexport function moveElementToEnd(id: string): void {\n mutateDef(\n (def) => {\n const idx = def.elements.findIndex((e) => e.id === id);\n if (idx < 0) return;\n const [moved] = def.elements.splice(idx, 1);\n def.elements.push(moved);\n },\n `맨 앞으로: ${id}`,\n \"reorder\",\n );\n}\n\nexport function moveElementToFront(id: string): void {\n mutateDef(\n (def) => {\n const idx = def.elements.findIndex((e) => e.id === id);\n if (idx < 0) return;\n const [moved] = def.elements.splice(idx, 1);\n def.elements.unshift(moved);\n },\n `맨 뒤로: ${id}`,\n \"reorder\",\n );\n}\n\nexport function addAppearance(id: string, ap: Appearance): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === id);\n if (!el) return;\n el.appearances.push(ap);\n el.appearances.sort((a, b) => a.start - b.start);\n },\n `출현 추가: ${id}`,\n \"appearance\",\n );\n}\n\nexport function updateAppearance(\n id: string,\n apIdx: number,\n patch: Partial<Appearance>,\n): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === id);\n if (!el || !el.appearances[apIdx]) return;\n el.appearances[apIdx] = { ...el.appearances[apIdx], ...patch };\n el.appearances.sort((a, b) => a.start - b.start);\n },\n `출현 조정: ${id}`,\n \"appearance\",\n );\n}\n\nexport function removeAppearance(id: string, apIdx: number): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === id);\n if (!el) return;\n el.appearances.splice(apIdx, 1);\n if (el.appearances.length === 0) ensureAppearance(el, def);\n },\n `출현 삭제: ${id}`,\n \"appearance\",\n );\n}\n\nfunction findTrack(\n el: AnimationElement,\n property: string,\n): PropertyTrack | undefined {\n return el.tracks.find((t) => t.property === property);\n}\n\nexport function setTrackKeyframe(\n elementId: string,\n property: string,\n time: number,\n value: TrackKeyframe[\"value\"],\n): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === elementId);\n if (!el) return;\n let track = findTrack(el, property);\n if (!track) {\n track = { property, keyframes: [] };\n el.tracks.push(track);\n }\n const existing = track.keyframes.find((k) => k.time === time);\n if (existing) {\n existing.value = value;\n } else {\n track.keyframes.push({ time, value });\n track.keyframes.sort((a, b) => a.time - b.time);\n }\n },\n `keyframe ${property} @ ${time}ms`,\n \"track\",\n );\n}\n\nexport function removeTrackKeyframe(\n elementId: string,\n property: string,\n time: number,\n): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === elementId);\n if (!el) return;\n const track = findTrack(el, property);\n if (!track) return;\n track.keyframes = track.keyframes.filter((k) => k.time !== time);\n if (track.keyframes.length === 0) {\n el.tracks = el.tracks.filter((t) => t.property !== property);\n }\n },\n `keyframe 삭제 ${property} @ ${time}ms`,\n \"track\",\n );\n}\n\nexport function setElementValueAtTime(\n elementId: string,\n patch: Record<string, unknown>,\n): void {\n const time = state.currentTime;\n if (time <= 0) {\n updateElementBase(elementId, patch);\n return;\n }\n if (!state.def) return;\n const el = state.def.elements.find((e) => e.id === elementId);\n if (!el) return;\n for (const [prop, value] of Object.entries(patch)) {\n if (value === null || value === undefined) continue;\n if (\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n )\n continue;\n const hasTrack = el.tracks.some((t) => t.property === prop);\n if (!hasTrack) {\n const baseVal = (el as unknown as Record<string, unknown>)[prop];\n if (\n typeof baseVal === \"string\" ||\n typeof baseVal === \"number\" ||\n typeof baseVal === \"boolean\"\n ) {\n setTrackKeyframe(elementId, prop, 0, baseVal);\n }\n }\n setTrackKeyframe(elementId, prop, time, value);\n }\n}\n\nexport function removeTrack(elementId: string, property: string): void {\n mutateDef(\n (def) => {\n const el = def.elements.find((e) => e.id === elementId);\n if (!el) return;\n el.tracks = el.tracks.filter((t) => t.property !== property);\n },\n `트랙 삭제: ${property}`,\n \"track\",\n );\n}\n","import type { AnimationEffect, Chapter } from \"@kokoa/clotho\";\nimport { emit, mutateDef, state } from \"./internals\";\n\nexport function addChapter(c: Chapter): void {\n mutateDef(\n (def) => {\n def.chapters.push(c);\n def.chapters.sort((a, b) => a.time - b.time);\n },\n `Chapter 추가: ${c.label || c.id}`,\n \"chapter\",\n );\n state.selection = { kind: \"chapter\", chapterId: c.id };\n emit();\n}\n\nexport function updateChapter(id: string, patch: Partial<Chapter>): void {\n const keys = Object.keys(patch).join(\", \");\n mutateDef(\n (def) => {\n const idx = def.chapters.findIndex((c) => c.id === id);\n if (idx < 0) return;\n def.chapters[idx] = { ...def.chapters[idx], ...patch };\n def.chapters.sort((a, b) => a.time - b.time);\n },\n `Chapter 수정: ${id} (${keys})`,\n \"chapter\",\n );\n}\n\nexport function deleteChapter(id: string): void {\n mutateDef(\n (def) => {\n def.chapters = def.chapters.filter((c) => c.id !== id);\n },\n `Chapter 삭제: ${id}`,\n \"chapter\",\n );\n if (state.selection.kind === \"chapter\" && state.selection.chapterId === id) {\n state.selection = { kind: \"none\" };\n }\n emit();\n}\n\nexport function addEffect(eff: AnimationEffect): void {\n mutateDef(\n (def) => {\n def.effects.push(eff);\n def.effects.sort((a, b) => a.time - b.time);\n },\n `효과 추가: ${eff.type}`,\n \"effect\",\n );\n}\n\nexport function updateEffect(\n id: string,\n patch: Partial<AnimationEffect>,\n): void {\n mutateDef(\n (def) => {\n const idx = def.effects.findIndex((e) => e.id === id);\n if (idx < 0) return;\n def.effects[idx] = { ...def.effects[idx], ...patch } as AnimationEffect;\n def.effects.sort((a, b) => a.time - b.time);\n },\n `효과 수정: ${id}`,\n \"effect\",\n );\n}\n\nexport function deleteEffect(id: string): void {\n mutateDef(\n (def) => {\n def.effects = def.effects.filter((e) => e.id !== id);\n },\n `효과 삭제: ${id}`,\n \"effect\",\n );\n if (state.selection.kind === \"effect\" && state.selection.effectId === id) {\n state.selection = { kind: \"none\" };\n }\n emit();\n}\n\nexport function updateDuration(ms: number): void {\n mutateDef(\n (def) => {\n def.duration = Math.max(0, Math.round(ms));\n for (const el of def.elements) {\n for (const ap of el.appearances) {\n if (ap.end > def.duration) ap.end = def.duration;\n if (ap.start > def.duration) ap.start = def.duration;\n }\n }\n for (const ch of def.chapters) {\n if (ch.time > def.duration) ch.time = def.duration;\n }\n for (const eff of def.effects) {\n if (eff.time > def.duration) eff.time = def.duration;\n }\n },\n `duration: ${ms} ms`,\n \"meta\",\n );\n if (state.currentTime > ms) state.currentTime = ms;\n}\n","import type { AnimationDocument } from \"@kokoa/clotho\";\nimport { encodeImageAsset, inlineAssetFromDataUri } from \"@kokoa/clotho\";\nimport { mutateDef, state } from \"./internals\";\nimport { getDef } from \"./core\";\n\nexport function updateMeta(\n patch: Partial<Pick<AnimationDocument, \"title\" | \"description\">>,\n): void {\n const keys = Object.keys(patch).join(\", \");\n mutateDef(\n (def) => {\n Object.assign(def, patch);\n },\n `메타 수정: ${keys}`,\n \"meta\",\n );\n}\n\nexport function updateCanvas(\n patch: Partial<AnimationDocument[\"canvas\"]>,\n): void {\n const keys = Object.keys(patch).join(\", \");\n mutateDef(\n (def) => {\n def.canvas = { ...def.canvas, ...patch };\n },\n `캔버스: ${keys}`,\n \"canvas\",\n );\n}\n\nexport function updateSettings(\n patch: Partial<AnimationDocument[\"settings\"]>,\n): void {\n const keys = Object.keys(patch).join(\", \");\n mutateDef(\n (def) => {\n def.settings = { ...def.settings, ...patch };\n },\n `설정: ${keys}`,\n \"settings\",\n );\n}\n\nexport function uniqueElementId(type: string): string {\n if (!state.def) return type + \"-1\";\n const used = new Set(state.def.elements.map((e) => e.id));\n let i = 1;\n while (used.has(`${type}-${i}`)) i += 1;\n return `${type}-${i}`;\n}\n\nexport function uniqueChapterId(): string {\n if (!state.def) return \"chapter-1\";\n const used = new Set(state.def.chapters.map((c) => c.id));\n let i = 1;\n while (used.has(`chapter-${i}`)) i += 1;\n return `chapter-${i}`;\n}\n\nexport function uniqueEffectId(): string {\n if (!state.def) return \"effect-1\";\n const used = new Set(state.def.effects.map((e) => e.id));\n let i = 1;\n while (used.has(`effect-${i}`)) i += 1;\n return `effect-${i}`;\n}\n\n/**\n * Register an external image URL as a document asset and return its id.\n *\n * clotho v1 keeps image sources in a document-level `assets` registry rather than on the\n * element, so a document can be self-contained or host-resolved rather than tied to one\n * site's paths. An identical URL reuses its entry, so dropping the same image twice does\n * not grow the document.\n */\nexport function registerExternalAsset(url: string): string {\n const def = getDef();\n if (def) {\n for (const [id, asset] of Object.entries(def.assets)) {\n if (asset.kind === \"external\" && asset.url === url) return id;\n }\n }\n const id = uniqueAssetId();\n mutateDef(\n (draft) => {\n draft.assets[id] = { kind: \"external\", url };\n },\n `에셋 등록: ${id}`,\n \"asset\",\n );\n return id;\n}\n\n/** Register raw image bytes as an inline (base64) asset and return its id. */\nexport function registerInlineAsset(bytes: Uint8Array, mime: string): string {\n const { asset } = encodeImageAsset(bytes, mime);\n const id = uniqueAssetId();\n mutateDef(\n (draft) => {\n draft.assets[id] = asset;\n },\n `에셋 등록: ${id}`,\n \"asset\",\n );\n return id;\n}\n\nfunction uniqueAssetId(): string {\n const def = getDef();\n const existing = def ? new Set(Object.keys(def.assets)) : new Set<string>();\n let n = 1;\n while (existing.has(`asset-${n}`)) n += 1;\n return `asset-${n}`;\n}\n\n/**\n * Register a `data:` URI as an inline asset and return its id.\n *\n * What a dropped or pasted file becomes. Storing it inline keeps the document\n * self-contained; a non-image or non-base64 URI falls back to an external reference so\n * the element still points at something.\n */\nexport function registerDataUriAsset(dataUri: string): string {\n const inline = inlineAssetFromDataUri(dataUri);\n if (!inline) return registerExternalAsset(dataUri);\n const id = uniqueAssetId();\n mutateDef(\n (draft) => {\n draft.assets[id] = inline;\n },\n `에셋 등록: ${id}`,\n \"asset\",\n );\n return id;\n}\n","import type { AnimationElement, GroupElement } from \"@kokoa/clotho\";\nimport {\n addElement,\n deleteElement,\n getDef,\n setSelection,\n uniqueElementId,\n updateElementBase,\n} from \"./state\";\n\nexport function isGroup(el: AnimationElement): el is GroupElement {\n return el.type === \"group\";\n}\n\n/** Direct children of a group, in document order (which is also paint order). */\nexport function childIdsOf(groupId: string): string[] {\n const def = getDef();\n if (!def) return [];\n return def.elements\n .filter((el) => el.parentId === groupId)\n .map((el) => el.id);\n}\n\n/**\n * The outermost group containing `elementId`, or null when it is at the root.\n *\n * clotho v1 groups by `parentId` on the child rather than `group.childIds`. The old\n * model could not work: a reference list produces no nested `<g>`, so a group's\n * transform never reached its children — and the legacy renderer had no `group` branch\n * at all. Grouping does something for the first time here.\n */\nexport function findContainingGroup(elementId: string): GroupElement | null {\n const def = getDef();\n if (!def) return null;\n const element = def.elements.find((el) => el.id === elementId);\n const parentId = element?.parentId;\n if (parentId === undefined) return null;\n const parent = def.elements.find((el) => el.id === parentId);\n if (!parent || !isGroup(parent)) return null;\n return findContainingGroup(parent.id) ?? parent;\n}\n\nexport function expandToLeafIds(ids: string[]): string[] {\n const def = getDef();\n if (!def) return ids;\n const seen = new Set<string>();\n const stack = [...ids];\n while (stack.length) {\n const id = stack.pop()!;\n if (seen.has(id)) continue;\n seen.add(id);\n const el = def.elements.find((e) => e.id === id);\n if (el && isGroup(el)) {\n for (const childId of childIdsOf(el.id)) stack.push(childId);\n }\n }\n const out: string[] = [];\n for (const id of seen) {\n const el = def.elements.find((e) => e.id === id);\n if (el && !isGroup(el)) out.push(id);\n }\n return out;\n}\n\nexport function groupBbox(\n groupId: string,\n): { x: number; y: number; w: number; h: number } | null {\n const def = getDef();\n if (!def) return null;\n const leafIds = expandToLeafIds([groupId]);\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n let any = false;\n for (const id of leafIds) {\n const el = def.elements.find((e) => e.id === id);\n if (!el) continue;\n const b = elementBbox(el);\n if (!b) continue;\n any = true;\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n if (b.x + b.w > maxX) maxX = b.x + b.w;\n if (b.y + b.h > maxY) maxY = b.y + b.h;\n }\n return any ? { x: minX, y: minY, w: maxX - minX, h: maxY - minY } : null;\n}\n\nfunction elementBbox(\n el: AnimationElement,\n): { x: number; y: number; w: number; h: number } | null {\n if (el.type === \"rect\" || el.type === \"image\")\n return { x: el.x, y: el.y, w: el.width, h: el.height };\n if (el.type === \"circle\")\n return { x: el.cx - el.r, y: el.cy - el.r, w: el.r * 2, h: el.r * 2 };\n if (el.type === \"text\")\n return {\n x: el.x - 40,\n y: el.y - (el.fontSize ?? 16),\n w: 80,\n h: el.fontSize ?? 16,\n };\n if (el.type === \"line\" || el.type === \"arrow\") {\n if (\n typeof el.x1 !== \"number\" ||\n typeof el.x2 !== \"number\" ||\n typeof el.y1 !== \"number\" ||\n typeof el.y2 !== \"number\"\n )\n return null;\n return {\n x: Math.min(el.x1, el.x2),\n y: Math.min(el.y1, el.y2),\n w: Math.abs(el.x2 - el.x1),\n h: Math.abs(el.y2 - el.y1),\n };\n }\n if (el.type === \"polygon\") {\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n let any = false;\n for (const pair of el.points.trim().split(/\\s+/)) {\n const [x, y] = pair.split(\",\").map(Number);\n if (!Number.isFinite(x) || !Number.isFinite(y)) continue;\n any = true;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n return any ? { x: minX, y: minY, w: maxX - minX, h: maxY - minY } : null;\n }\n if (el.type === \"path\") return { x: el.x ?? 0, y: el.y ?? 0, w: 60, h: 60 };\n return null;\n}\n\nfunction shiftLeafBy(el: AnimationElement, dx: number, dy: number): void {\n if (dx === 0 && dy === 0) return;\n if (el.type === \"rect\" || el.type === \"image\" || el.type === \"text\") {\n updateElementBase(el.id, { x: el.x + dx, y: el.y + dy });\n } else if (el.type === \"circle\") {\n updateElementBase(el.id, { cx: el.cx + dx, cy: el.cy + dy });\n } else if (el.type === \"line\" || el.type === \"arrow\") {\n const patch: Record<string, unknown> = {};\n if (typeof el.x1 === \"number\") patch.x1 = el.x1 + dx;\n if (typeof el.y1 === \"number\") patch.y1 = el.y1 + dy;\n if (typeof el.x2 === \"number\") patch.x2 = el.x2 + dx;\n if (typeof el.y2 === \"number\") patch.y2 = el.y2 + dy;\n updateElementBase(el.id, patch);\n } else if (el.type === \"path\") {\n updateElementBase(el.id, { x: (el.x ?? 0) + dx, y: (el.y ?? 0) + dy });\n } else if (el.type === \"polygon\") {\n const shifted = el.points\n .trim()\n .split(/\\s+/)\n .map((pair) => {\n const [x, y] = pair.split(\",\").map(Number);\n if (Number.isFinite(x) && Number.isFinite(y))\n return `${(x + dx).toFixed(1)},${(y + dy).toFixed(1)}`;\n return pair;\n })\n .join(\" \");\n updateElementBase(el.id, { points: shifted });\n }\n}\n\nexport function moveGroupBy(groupId: string, dx: number, dy: number): void {\n const def = getDef();\n if (!def) return;\n const leafIds = expandToLeafIds([groupId]);\n for (const id of leafIds) {\n const el = def.elements.find((e) => e.id === id);\n if (el) shiftLeafBy(el, dx, dy);\n }\n const group = def.elements.find((e) => e.id === groupId);\n if (group && isGroup(group)) {\n updateElementBase(groupId, { x: group.x + dx, y: group.y + dy });\n }\n}\n\nexport function groupElements(ids: string[]): string | null {\n if (ids.length < 2) return null;\n const def = getDef();\n if (!def) return null;\n const valid = ids.filter((id) => def.elements.some((e) => e.id === id));\n if (valid.length < 2) return null;\n const newId = uniqueElementId(\"group\");\n const bbox = (() => {\n let minX = Infinity,\n minY = Infinity;\n for (const id of valid) {\n const el = def.elements.find((e) => e.id === id);\n if (!el) continue;\n const b = elementBbox(el);\n if (!b) continue;\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n }\n return {\n x: Number.isFinite(minX) ? minX : 0,\n y: Number.isFinite(minY) ? minY : 0,\n };\n })();\n const group: GroupElement = {\n type: \"group\",\n id: newId,\n name: `Group ${newId.split(\"-\")[1] ?? \"\"}`.trim(),\n rotation: 0,\n appearances: [],\n tracks: [],\n // Children keep their absolute coordinates, so the group's own transform starts at\n // the identity. Setting x/y here would shift every member on the next render.\n x: 0,\n y: 0,\n };\n addElement(group);\n for (const id of valid) updateElementBase(id, { parentId: newId });\n setSelection({ kind: \"element\", elementId: newId });\n return newId;\n}\n\nexport function ungroupElement(groupId: string): string[] {\n const def = getDef();\n if (!def) return [];\n const group = def.elements.find((e) => e.id === groupId);\n if (!group || !isGroup(group)) return [];\n const childIds = childIdsOf(groupId);\n // Clear the pointers before removing the group, or the children would be re-rooted\n // by the tree builder and reported as having a missing parent.\n for (const id of childIds) updateElementBase(id, { parentId: undefined });\n deleteElement(groupId);\n if (childIds.length === 1) {\n setSelection({ kind: \"element\", elementId: childIds[0] });\n } else if (childIds.length > 1) {\n setSelection({ kind: \"elements\", elementIds: childIds });\n } else {\n setSelection({ kind: \"none\" });\n }\n return childIds;\n}\n","// Host-supplied resources.\n//\n// The Studio grew inside a blog, so a few of its paths were that blog's: the admin API\n// route, the uploads directory. A package cannot assume any of them. Each is now a\n// setting with the original value as the default, so an existing host keeps working\n// without changing anything and a new one is not stuck with someone else's layout.\n\nlet placeholderUrl = \"/uploads/placeholder.png\";\n\nexport interface HostOptions {\n /** Image used when inserting a placeholder image element. */\n readonly placeholderImageUrl?: string;\n}\n\nexport function configureHost(options: HostOptions): void {\n if (options.placeholderImageUrl) placeholderUrl = options.placeholderImageUrl;\n}\n\nexport function placeholderImageUrl(): string {\n return placeholderUrl;\n}\n","import { animationDocumentSchema, type AnimationDocument } from \"@kokoa/clotho\";\n\n// Where documents live is the host's business, not the editor's.\n//\n// This was hardcoded to one blog's admin route. A standalone editor cannot assume any\n// particular backend, so the base is configurable and defaults to the previous value —\n// existing hosts keep working without a change.\nconst DEFAULT_BASE = \"/api/admin/animations\";\nlet BASE = DEFAULT_BASE;\n\n/** Point the editor at the host's animation endpoints. Call once at startup. */\nexport function configureApi(options: { baseUrl?: string }): void {\n if (options.baseUrl) BASE = options.baseUrl.replace(/\\/+$/, \"\");\n}\n\n/** The base currently in use, for hosts that need to build matching links. */\nexport function apiBaseUrl(): string {\n return BASE;\n}\n\nconst revisions = new Map<string, number>();\n\nexport interface AnimationSummary {\n id: string;\n title: string;\n description: string;\n updatedAt?: string;\n}\n\nexport class MissingAnimationRevisionError extends Error {}\nexport class AnimationStudioApiError extends Error {}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nasync function readJson(res: Response): Promise<unknown> {\n if (!res.ok) {\n const text = await res.text();\n throw new AnimationStudioApiError(`HTTP ${res.status}: ${text}`);\n }\n return res.json();\n}\n\nfunction parseRevision(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 1) {\n throw new TypeError(\"Animation revision is malformed\");\n }\n return value;\n}\n\nfunction parseAnimationEnvelope(value: unknown): {\n readonly def: AnimationDocument;\n readonly revision: number;\n} {\n if (!isRecord(value)) throw new TypeError(\"Animation response is malformed\");\n return {\n def: animationDocumentSchema.parse(value.def),\n revision: parseRevision(value.revision),\n };\n}\n\nexport async function listAnimations(): Promise<AnimationSummary[]> {\n const res = await fetch(BASE);\n const data = await readJson(res);\n if (!isRecord(data) || !Array.isArray(data.items))\n throw new TypeError(\"Animation list response is malformed\");\n return data.items.map((item) => {\n if (\n !isRecord(item) ||\n typeof item.id !== \"string\" ||\n typeof item.title !== \"string\" ||\n typeof item.description !== \"string\"\n ) {\n throw new TypeError(\"Animation summary is malformed\");\n }\n return {\n id: item.id,\n title: item.title,\n description: item.description,\n ...(typeof item.updatedAt === \"string\"\n ? { updatedAt: item.updatedAt }\n : {}),\n };\n });\n}\n\nexport async function loadAnimation(id: string): Promise<AnimationDocument> {\n const res = await fetch(`${BASE}/${encodeURIComponent(id)}`);\n const data = parseAnimationEnvelope(await readJson(res));\n revisions.set(data.def.id, data.revision);\n return data.def;\n}\n\nexport async function saveAnimation(\n def: AnimationDocument,\n): Promise<AnimationDocument> {\n const revision = revisions.get(def.id);\n if (revision === undefined)\n throw new MissingAnimationRevisionError(\n `Animation '${def.id}' has no loaded revision`,\n );\n const res = await fetch(`${BASE}/${encodeURIComponent(def.id)}`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ def, revision }),\n });\n const data = parseAnimationEnvelope(await readJson(res));\n revisions.set(data.def.id, data.revision);\n return data.def;\n}\n\nexport async function createAnimation(\n id: string,\n title: string,\n): Promise<AnimationDocument> {\n const res = await fetch(BASE, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id, title }),\n });\n const data = parseAnimationEnvelope(await readJson(res));\n revisions.set(data.def.id, data.revision);\n return data.def;\n}\n\nexport async function deleteAnimation(id: string): Promise<void> {\n const res = await fetch(`${BASE}/${encodeURIComponent(id)}`, {\n method: \"DELETE\",\n });\n await readJson(res);\n revisions.delete(id);\n}\n\nexport async function duplicateAnimation(\n sourceId: string,\n newId: string,\n newTitle: string,\n): Promise<AnimationDocument> {\n const source = await loadAnimation(sourceId);\n const cloned: AnimationDocument = { ...source, id: newId, title: newTitle };\n await createAnimation(newId, newTitle);\n return await saveAnimation(cloned);\n}\n"]}