diff --git a/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte b/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte index dacc6112b..d9c0828be 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte @@ -1,15 +1,53 @@
- + + +
+ {#if activeTab === 'stories'} + + {:else} + + {/if} +
diff --git a/apps/mana/apps/web/src/lib/modules/comic/components/CharacterCard.svelte b/apps/mana/apps/web/src/lib/modules/comic/components/CharacterCard.svelte new file mode 100644 index 000000000..dbe7eadd7 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/comic/components/CharacterCard.svelte @@ -0,0 +1,78 @@ + + + + +
+ {#if cover?.publicUrl} + {character.name} + {:else} +
+ + Noch keine Variante +
+ {/if} + + + {STYLE_LABELS[character.style].de} + + + {#if character.isFavorite} + + + + {/if} + + {#if !isPinned && variantCount > 0} + + Pin offen + + {/if} +
+ +
+

{character.name}

+

+ {variantCount} + {variantCount === 1 ? 'Variante' : 'Varianten'} +

+
+
diff --git a/apps/mana/apps/web/src/lib/modules/comic/components/VariantTile.svelte b/apps/mana/apps/web/src/lib/modules/comic/components/VariantTile.svelte new file mode 100644 index 000000000..fd17c2070 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/comic/components/VariantTile.svelte @@ -0,0 +1,98 @@ + + + +
+ {#if image?.publicUrl} + Variante {variantIndex + 1} + {:else if image$.loading} +
+ Lädt… +
+ {:else} +
+ Variante nicht gefunden +
+ {/if} + + + + #{variantIndex + 1} + + + + {#if isPinned} + + + + {/if} + + +
+ {#if !isPinned} + + {:else} + Aktiv + {/if} + + {#if onRemove} + + {/if} +
+
diff --git a/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte b/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte new file mode 100644 index 000000000..b0564314d --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte @@ -0,0 +1,77 @@ + + + +
+
+
+

Deine Comic-Characters

+

+ {characters.length} + {characters.length === 1 ? 'Character' : 'Characters'} in + {activeSpace?.name ?? 'diesem Space'} +

+
+ + + Neuer Character + +
+ + {#if !hasFace && !face$.loading} +
+
+ +
+

Lade erst dein Gesichtsbild hoch

+

+ Charakter-Generierung braucht ein Face-Bild als Source. Hochladen in + Profil → Bilder. +

+
+
+
+ {/if} + + {#if characters.length > 0} +
+ {#each characters as character (character.id)} + + {/each} +
+ {:else if !characters$.loading} +
+

Noch keine Characters.

+

+ Bau deinen ersten Comic-Character aus deinem Foto — Stil wählen, 4 Varianten generieren, + beste pinnen, fertig. +

+ + + Ersten Character bauen + +
+ {/if} +
diff --git a/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte b/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte new file mode 100644 index 000000000..ae7744b33 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte @@ -0,0 +1,214 @@ + + + +
+ + + {#if !character} + {#if character$.loading} +

Lädt…

+ {:else} +
+

Character nicht gefunden.

+

Gelöscht oder in einem anderen Space.

+
+ {/if} + {:else} + +
+
+
+

{character.name}

+
+ + {STYLE_LABELS[character.style].de} + + + {character.variantMediaIds.length} + {character.variantMediaIds.length === 1 ? 'Variante' : 'Varianten'} + + {#if !character.pinnedVariantId && character.variantMediaIds.length > 0} + Pin offen + {/if} +
+
+ +
+ + {#if character.description} +

{character.description}

+ {/if} + + {#if character.addPrompt} +
+ Prompt-Add: + {character.addPrompt} +
+ {/if} +
+ + +
+
+

+ Varianten +

+ {#if !showBuilder && !character.isArchived} + + {/if} +
+ + {#if character.variantMediaIds.length === 0} +
+

Noch keine Varianten.

+

+ Klick oben rechts auf + Mehr Varianten, um die + ersten 4 zu generieren. +

+
+ {:else} +
+ {#each character.variantMediaIds as variantId, index (variantId)} + handlePin(variantId)} + onRemove={character.variantMediaIds.length > 1 + ? () => handleRemove(variantId) + : undefined} + /> + {/each} +
+ {/if} + + {#if showBuilder && !character.isArchived} + (showBuilder = false)} + onCreated={() => { + // Keep the builder open so the user can iterate without + // having to re-open. New variants append + appear in + // the grid above via the liveQuery. + }} + /> + {/if} +
+ + +
+ + +
+ + {#if character.isArchived} +

+ Archivierter Character — keine Variant-Generierung möglich, + bis wieder aktiviert. +

+ {/if} + {/if} +
diff --git a/apps/mana/apps/web/src/routes/(app)/comic/character/+page.svelte b/apps/mana/apps/web/src/routes/(app)/comic/character/+page.svelte new file mode 100644 index 000000000..dfb03b8a7 --- /dev/null +++ b/apps/mana/apps/web/src/routes/(app)/comic/character/+page.svelte @@ -0,0 +1,14 @@ + + + + Comic-Characters · Mana + + + +
+ +
+
diff --git a/apps/mana/apps/web/src/routes/(app)/comic/character/[id]/+page.svelte b/apps/mana/apps/web/src/routes/(app)/comic/character/[id]/+page.svelte new file mode 100644 index 000000000..a4fbe52ca --- /dev/null +++ b/apps/mana/apps/web/src/routes/(app)/comic/character/[id]/+page.svelte @@ -0,0 +1,17 @@ + + + + Comic-Character · Mana + + + + {#key id} + + {/key} + diff --git a/apps/mana/apps/web/src/routes/(app)/comic/character/new/+page.svelte b/apps/mana/apps/web/src/routes/(app)/comic/character/new/+page.svelte new file mode 100644 index 000000000..545b0b34c --- /dev/null +++ b/apps/mana/apps/web/src/routes/(app)/comic/character/new/+page.svelte @@ -0,0 +1,21 @@ + + + + Neuer Comic-Character · Mana + + + +
+
+

Neuer Comic-Character

+

+ Wähle Stil + optionalen Add-Prompt — wir rendern direkt 4 Varianten zur Auswahl. Aus dem + Detail kannst du jederzeit weitere generieren. +

+
+ +
+