From 81a426af2851cf6860dc42cde129d13566da65f8 Mon Sep 17 00:00:00 2001 From: Till JS Date: Wed, 22 Apr 2026 18:04:59 +0200 Subject: [PATCH] =?UTF-8?q?feat(spaces):=20Phase=202d.5b=20=E2=80=94=20tag?= =?UTF-8?q?-source=20picker=20in=20SpaceCreateDialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wires the Phase 2d.5a helpers (applyPresetToSpace, copyTagsBetweenSpaces) into the new-Space UX so users get a familiar tag taxonomy in every Space they create, without manual re-entry. The dialog gains a "Tag-Set" dropdown: - "Leer starten" — new Space starts without any tags - "Aus kopieren" — clones the user's active Space's globalTags + tagGroups as a one-shot snapshot (fresh ids, no live link back to the source) - — applies a userTagPreset snapshot, creating tagGroups for each distinct groupName so the user's familiar grouping carries over Default pick (when the dropdown first renders): - If the user has a default preset → that preset - Else if currently in Personal → "copy-current" - Else "empty" (safer inside shared Spaces — don't leak Team/Family taxonomy into a new one by default) Seeding runs BEFORE the Space activation switches context, so copyTagsBetweenSpaces still sees the source-Space's tags as read-scope. Seeding failures are caught and logged but deliberately non-fatal — the Space is already created, the user can seed later from inside it. ` + + {#if activeSpace} + + {/if} + {#each presets.value as preset (preset.id)} + + {/each} + + + {locale === 'de' + ? 'Tags werden einmalig kopiert — der neue Space entwickelt sich unabhängig weiter.' + : 'Tags get one-shot-copied — the new Space then evolves independently.'} + + + {#if error}
{error}
{/if} @@ -369,7 +440,8 @@ } .field input, - .field textarea { + .field textarea, + .field select { padding: 0.5rem 0.75rem; border: 1px solid hsl(var(--color-border)); border-radius: 8px; @@ -391,7 +463,8 @@ } .field input:focus, - .field textarea:focus { + .field textarea:focus, + .field select:focus { outline: none; border-color: var(--pill-primary-color, hsl(var(--color-primary, 230 80% 55%))); box-shadow: 0 0 0 3px