- Chat mode: AIUI loads in sandboxed iframe at /dashboard/chat with transparent bg - Mode switcher: Easy + Pro tabs only, Chat is a launcher button - Keyboard shortcuts: Cmd+1 (Easy), Cmd+2 (Pro), Cmd+3 (Chat), Cmd+M (cycle) - Directional transitions: chat slides from/to left, dashboard from/to right - Context broker: postMessage protocol for quarantined AIUI communication - AI permissions store: user-controlled toggles for data access categories - Settings UI: AI Data Access section with per-category toggles - AIUI container manifest and nginx proxy config for /aiui/ - Deploy script builds AIUI with /aiui/ base path - Overnight loop infrastructure (loop.sh, prepare.sh, plan.md, prompt.md) - Security hooks for autonomous overnight runs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import type { UIMode } from '@/types/api'
|
|
|
|
const STORAGE_KEY = 'archipelago-ui-mode'
|
|
|
|
export const useUIModeStore = defineStore('uiMode', () => {
|
|
const mode = ref<UIMode>(loadFromStorage())
|
|
|
|
function loadFromStorage(): UIMode {
|
|
const stored = localStorage.getItem(STORAGE_KEY)
|
|
if (stored === 'gamer' || stored === 'easy' || stored === 'chat') return stored
|
|
return 'gamer'
|
|
}
|
|
|
|
function syncFromBackend(backendMode: UIMode | undefined) {
|
|
if (backendMode && ['gamer', 'easy', 'chat'].includes(backendMode)) {
|
|
mode.value = backendMode
|
|
localStorage.setItem(STORAGE_KEY, backendMode)
|
|
}
|
|
}
|
|
|
|
function setMode(newMode: UIMode) {
|
|
mode.value = newMode
|
|
localStorage.setItem(STORAGE_KEY, newMode)
|
|
}
|
|
|
|
function cycleMode(): UIMode {
|
|
const order: UIMode[] = ['easy', 'gamer']
|
|
const idx = order.indexOf(mode.value)
|
|
const next = order[(idx >= 0 ? idx + 1 : 0) % order.length] as UIMode
|
|
setMode(next)
|
|
return next
|
|
}
|
|
|
|
const isGamer = computed(() => mode.value === 'gamer')
|
|
const isEasy = computed(() => mode.value === 'easy')
|
|
const isChat = computed(() => mode.value === 'chat')
|
|
|
|
return { mode, setMode, cycleMode, syncFromBackend, isGamer, isEasy, isChat }
|
|
})
|