Design surface: starter roles, theme literals, and the view that could only inspect itself #97

Merged
bvandeusen merged 11 commits from dev into main 2026-08-04 11:02:42 -04:00
Showing only changes of commit 4d2be27935 - Show all commits
+24 -12
View File
@@ -6,7 +6,7 @@ import { useShortcuts } from "@/composables/useShortcuts";
import { useAuthStore } from "@/stores/auth"; import { useAuthStore } from "@/stores/auth";
import AppLogo from "@/components/AppLogo.vue"; import AppLogo from "@/components/AppLogo.vue";
import NotificationBell from "@/components/NotificationBell.vue"; import NotificationBell from "@/components/NotificationBell.vue";
import { Sun, Moon, Palette, Settings, Trash2 } from "lucide-vue-next"; import { Sun, Moon, Settings, Trash2 } from "lucide-vue-next";
const { theme, toggleTheme } = useTheme(); const { theme, toggleTheme } = useTheme();
const { toggleShortcuts } = useShortcuts(); const { toggleShortcuts } = useShortcuts();
@@ -50,6 +50,12 @@ router.afterEach(() => {
<router-link to="/projects" class="nav-link">Projects</router-link> <router-link to="/projects" class="nav-link">Projects</router-link>
<router-link to="/snippets" class="nav-link">Snippets</router-link> <router-link to="/snippets" class="nav-link">Snippets</router-link>
<router-link to="/rules" class="nav-link">Rulebooks</router-link> <router-link to="/rules" class="nav-link">Rulebooks</router-link>
<!-- A design system is a RECORD you author, not a setting. It sat in
the utility cluster with Trash and Settings while /design was a
read-only gallery, and stayed there after it became a record type
with its own table, sharing and MCP tools. Content, by the same
rule that puts Snippets and Rulebooks here. -->
<router-link to="/design-systems" class="nav-link">Design</router-link>
</div> </div>
</div> </div>
@@ -64,16 +70,6 @@ router.afterEach(() => {
<Moon v-else :size="16" /> <Moon v-else :size="16" />
</button> </button>
<!-- Design. An icon rather than a sixth primary nav link: it's a
meta-surface like Trash and Settings, but hiding it entirely would
defeat the point of having somewhere the design system is visible.
Points at the RECORD, not the live-token view — the record is what
you work with; the live view is the check on it, and it's a tab
away. -->
<router-link to="/design-systems" class="btn-icon" aria-label="Design" title="Design">
<Palette :size="16" />
</router-link>
<!-- Trash link --> <!-- Trash link -->
<router-link to="/trash" class="btn-icon" aria-label="Trash" title="Trash"> <router-link to="/trash" class="btn-icon" aria-label="Trash" title="Trash">
<Trash2 :size="16" /> <Trash2 :size="16" />
@@ -106,9 +102,9 @@ router.afterEach(() => {
<router-link to="/projects" class="nav-link">Projects</router-link> <router-link to="/projects" class="nav-link">Projects</router-link>
<router-link to="/snippets" class="nav-link">Snippets</router-link> <router-link to="/snippets" class="nav-link">Snippets</router-link>
<router-link to="/rules" class="nav-link">Rulebooks</router-link> <router-link to="/rules" class="nav-link">Rulebooks</router-link>
<router-link to="/design-systems" class="nav-link">Design</router-link>
<router-link to="/shared" class="nav-link">Shared</router-link> <router-link to="/shared" class="nav-link">Shared</router-link>
<div class="mobile-divider"></div> <div class="mobile-divider"></div>
<router-link to="/design-systems" class="nav-link">Design</router-link>
<router-link to="/trash" class="nav-link">Trash</router-link> <router-link to="/trash" class="nav-link">Trash</router-link>
<router-link to="/settings" class="nav-link">Settings</router-link> <router-link to="/settings" class="nav-link">Settings</router-link>
<div class="mobile-divider"></div> <div class="mobile-divider"></div>
@@ -346,6 +342,22 @@ router.afterEach(() => {
margin-top: 0.25rem; margin-top: 0.25rem;
} }
/* The pill bar is absolutely centred, so when the header runs out of room it
OVERLAPS the brand and the utility cluster rather than pushing them — nothing
wraps, it just collides. Six primary links reach that point sooner than five
did, so reclaim the width here instead of leaving one out of the bar.
The wordmark goes first: the logo beside it says the same thing and is still
the link home. */
@media (max-width: 1150px) {
.brand-text {
display: none;
}
.nav-link {
padding: 0.3rem 0.5rem;
font-size: 0.78rem;
}
}
@media (max-width: 768px) { @media (max-width: 768px) {
.nav-center { .nav-center {
display: none; display: none;