diff --git a/apps/web/components/AppShell.vue b/apps/web/components/AppShell.vue index 6022409..84a41f7 100644 --- a/apps/web/components/AppShell.vue +++ b/apps/web/components/AppShell.vue @@ -1,6 +1,17 @@ - + PRIVATE ALPHA / {{ section }} @@ -28,9 +102,35 @@ const avatarUrl = computed(() => { + + + + {{ contextCampaignId ? 'UNIVERSE CONTROL' : 'D&G COMMANDS' }} + {{ contextCampaignTitle || 'QUICK ACCESS' }} + + + ✎ RENAME UNIVERSE + × DELETE UNIVERSE + + + ◎ EDIT PROFILE + ← PREVIOUS PAGE + ⚙ SETTINGS + + + + diff --git a/apps/web/pages/dashboard.vue b/apps/web/pages/dashboard.vue index bc36a8f..a0c3c82 100644 --- a/apps/web/pages/dashboard.vue +++ b/apps/web/pages/dashboard.vue @@ -21,7 +21,6 @@ const campaigns = ref([]) const drafts = ref([]) const loading = ref(true) const error = ref('') -const editingCampaignId = ref(null) const renamingCampaignId = ref(null) const newName = ref('') @@ -44,19 +43,18 @@ function draftSummary(draft: DraftSession) { || 'Continue your conversation with the coauthor.' } -function toggleEdit(campaign: CampaignRow) { - if (editingCampaignId.value === campaign.id) { - editingCampaignId.value = null - } else { - editingCampaignId.value = campaign.id - } -} - function openRename(campaign: CampaignRow) { renamingCampaignId.value = campaign.id newName.value = campaign.title } +function handleCampaignAction(payload: { action: 'rename' | 'delete'; campaignId: string }) { + const campaign = campaigns.value.find(item => item.id === payload.campaignId) + if (!campaign) return + if (payload.action === 'rename') openRename(campaign) + else void requestDelete(campaign) +} + async function confirmRename() { if (!renamingCampaignId.value || !newName.value.trim()) return try { @@ -92,7 +90,7 @@ onMounted(async () => { - + WELCOME BACK, {{ displayName.toUpperCase() }}YOUR UNIVERSES.Every world remembers where you left it. @@ -107,17 +105,16 @@ onMounted(async () => { RECEIVING PRIVATE CAMPAIGNS… {{ error }} SIGN IN AGAIN - + {{ campaign.status.toUpperCase() }} CAMPAIGN PRIVATE MULTIPLAYER{{ campaign.title }}{{ campaign.current_scene }}CONTINUE STORY{{ new Date(campaign.updated_at).toLocaleDateString() }} - - - ✎ - ✕ - DONE - - EDIT - {{ draft.status.toUpperCase() }} DRAFT @@ -183,12 +180,6 @@ onMounted(async () => { .system-strip{margin-top:32px;padding:18px 0;border-top:1px solid var(--line);display:flex;justify-content:space-between;font:500 8px var(--mono);letter-spacing:.12em;color:var(--muted)} .system-strip i{display:inline-block;width:6px;height:6px;background:var(--acid);border-radius:50%;margin-right:8px} .system-strip b{color:var(--acid)} -.card-actions{position:absolute;top:12px;right:12px;display:flex;gap:6px;z-index:2;opacity:0;pointer-events:none;transition:opacity .2s ease} -.card-actions.active{opacity:1;pointer-events:auto} -.card-actions button{height:34px;border:1px solid var(--line);background:rgba(10,10,10,.75);color:var(--muted);font:600 8px var(--mono);letter-spacing:.1em;line-height:1;display:grid;place-items:center;padding:0 12px;transition:all .2s ease;cursor:pointer} -.card-actions button.icon-btn{width:34px;font-size:14px} -.card-actions button:hover,.card-actions button.active-item{border-color:var(--acid);color:var(--acid);background:rgba(217,247,95,.08)} -.card-actions button.ghost-action{border-color:transparent;color:var(--muted)} .rename-dialog{position:fixed;inset:0;margin:auto;z-index:1000;width:min(440px,calc(100vw - 40px));padding:0;border:1px solid var(--line);background:#0a0a0a;color:var(--ink);box-shadow:0 60px 120px rgba(0,0,0,.7);font-family:inherit;display:grid} .rename-dialog::backdrop{background:rgba(0,0,0,.55)} .rename-panel{padding:32px;display:grid;gap:18px} diff --git a/apps/web/pages/profile/index.vue b/apps/web/pages/profile/index.vue index c415330..1673650 100644 --- a/apps/web/pages/profile/index.vue +++ b/apps/web/pages/profile/index.vue @@ -204,14 +204,14 @@ onBeforeUnmount(clearPreview) - + 01PUBLIC IDENTITYNAME & DESCRIPTION DISPLAY NAME PROFILE DESCRIPTION{{ description.length }} / 500 {{ saving ? 'SAVING PROFILE…' : avatarFile ? 'SAVE PROFILE & PICTURE →' : 'SAVE PROFILE →' }} - + 02SECURITYPASSWORD MANAGER Choose a new password for this account. Your current signed-in session authorizes the change. NEW PASSWORDCONFIRM PASSWORD
WELCOME BACK, {{ displayName.toUpperCase() }}
Every world remembers where you left it.
RECEIVING PRIVATE CAMPAIGNS…
{{ error }} SIGN IN AGAIN
{{ campaign.current_scene }}
Choose a new password for this account. Your current signed-in session authorizes the change.