From cba49ae12a662302ecdc2f05e00f85cbb45ca66b Mon Sep 17 00:00:00 2001 From: John Leider Date: Wed, 11 Feb 2026 22:50:19 -0600 Subject: [PATCH 01/39] docs(editor): add v0 REPL editor page Vue REPL with Monaco editor, @vuetify/v0 import map, and fullscreen layout. Initial working layout with h-screen + absolute positioning for proper sizing. --- apps/docs/src/data/editor-defaults.ts | 124 +++++++++++++++++++++++ apps/docs/src/pages/editor.vue | 136 ++++++++++++++++++++++++++ knip.json | 4 + 3 files changed, 264 insertions(+) create mode 100644 apps/docs/src/data/editor-defaults.ts create mode 100644 apps/docs/src/pages/editor.vue diff --git a/apps/docs/src/data/editor-defaults.ts b/apps/docs/src/data/editor-defaults.ts new file mode 100644 index 000000000..1ce728e3d --- /dev/null +++ b/apps/docs/src/data/editor-defaults.ts @@ -0,0 +1,124 @@ +export const DEFAULT_CODE = ` + + +` diff --git a/apps/docs/src/pages/editor.vue b/apps/docs/src/pages/editor.vue new file mode 100644 index 000000000..2ca4d2479 --- /dev/null +++ b/apps/docs/src/pages/editor.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/knip.json b/knip.json index 2b83edcb5..3fb0d7621 100644 --- a/knip.json +++ b/knip.json @@ -32,8 +32,12 @@ "src/components/docs/DocsBrowserSupport.vue", "src/skillz/tours/**/index.ts", "src/stores/skillz.ts", + "src/data/**", "src/examples/**" ], + "ignoreDependencies": [ + "@vue/repl" + ], "paths": { "@/*": [ "src/*" From cb756e8771491761720422906bd9ff3753acef6e Mon Sep 17 00:00:00 2001 From: John Leider Date: Thu, 12 Feb 2026 11:15:03 -0600 Subject: [PATCH 02/39] docs(editor): add v0 theme and UnoCSS runtime to REPL editor Set up multi-file REPL matching Vuetify Play's v0 template: main.ts with createThemePlugin, uno.config.ts with presetWind4 runtime and v0 color token mapping. Updated default example to use UnoCSS utility classes. Added scrollbar-gutter override for fullscreen layout. --- apps/docs/src/data/editor-defaults.ts | 183 +++++++++++++++++++------- apps/docs/src/layouts/fullscreen.vue | 91 +------------ apps/docs/src/pages/editor.vue | 117 +++++++++------- 3 files changed, 214 insertions(+), 177 deletions(-) diff --git a/apps/docs/src/data/editor-defaults.ts b/apps/docs/src/data/editor-defaults.ts index 1ce728e3d..16bbfb244 100644 --- a/apps/docs/src/data/editor-defaults.ts +++ b/apps/docs/src/data/editor-defaults.ts @@ -1,3 +1,119 @@ +// ── Template files (matching Vuetify Play's v0 template) ──────────────── + +export const MAIN_TS = `import { createApp } from 'vue' +import App from './App.vue' +import { createThemePlugin } from '@vuetify/v0' +import './uno.config.ts' + +const theme = createThemePlugin({ + default: 'light', + themes: { + light: { + dark: false, + colors: { + 'primary': '#3b82f6', + 'secondary': '#64748b', + 'accent': '#6366f1', + 'error': '#ef4444', + 'info': '#1867c0', + 'success': '#22c55e', + 'warning': '#f59e0b', + 'background': '#ffffff', + 'surface': '#ffffff', + 'surface-tint': '#f5f5f5', + 'surface-variant': '#e8e8e8', + 'divider': '#e0e0e0', + 'on-primary': '#ffffff', + 'on-secondary': '#ffffff', + 'on-accent': '#1a1a1a', + 'on-error': '#ffffff', + 'on-info': '#ffffff', + 'on-success': '#1a1a1a', + 'on-warning': '#1a1a1a', + 'on-background': '#212121', + 'on-surface': '#212121', + 'on-surface-variant': '#666666', + }, + }, + dark: { + dark: true, + colors: { + 'primary': '#c4b5fd', + 'secondary': '#94a3b8', + 'accent': '#c084fc', + 'error': '#f87171', + 'info': '#38bdf8', + 'success': '#4ade80', + 'warning': '#fb923c', + 'background': '#121212', + 'surface': '#1a1a1a', + 'surface-tint': '#2a2a2a', + 'surface-variant': '#1e1e1e', + 'divider': '#404040', + 'on-primary': '#1a1a1a', + 'on-secondary': '#ffffff', + 'on-accent': '#ffffff', + 'on-error': '#1a1a1a', + 'on-info': '#1a1a1a', + 'on-success': '#1a1a1a', + 'on-warning': '#1a1a1a', + 'on-background': '#e0e0e0', + 'on-surface': '#e0e0e0', + 'on-surface-variant': '#a0a0a0', + }, + }, + }, +}) + +const app = createApp(App) +app.use(theme) +app.mount('#app') +` + +export const UNO_CONFIG_TS = `// @ts-expect-error - esm.sh import +import defineConfig from 'https://esm.sh/@unocss/runtime' +// @ts-expect-error - esm.sh import +import presetWind4 from 'https://esm.sh/@unocss/preset-wind4' + +defineConfig({ + defaults: { + presets: [presetWind4()], + theme: { + colors: { + 'primary': 'var(--v0-primary)', + 'secondary': 'var(--v0-secondary)', + 'accent': 'var(--v0-accent)', + 'error': 'var(--v0-error)', + 'info': 'var(--v0-info)', + 'success': 'var(--v0-success)', + 'warning': 'var(--v0-warning)', + 'background': 'var(--v0-background)', + 'surface': 'var(--v0-surface)', + 'surface-tint': 'var(--v0-surface-tint)', + 'surface-variant': 'var(--v0-surface-variant)', + 'divider': 'var(--v0-divider)', + 'pre': 'var(--v0-pre)', + 'on-primary': 'var(--v0-on-primary)', + 'on-secondary': 'var(--v0-on-secondary)', + 'on-accent': 'var(--v0-on-accent)', + 'on-error': 'var(--v0-on-error)', + 'on-info': 'var(--v0-on-info)', + 'on-success': 'var(--v0-on-success)', + 'on-warning': 'var(--v0-on-warning)', + 'on-background': 'var(--v0-on-background)', + 'on-surface': 'var(--v0-on-surface)', + 'on-surface-variant': 'var(--v0-on-surface-variant)', + }, + borderColor: { + DEFAULT: 'var(--v0-divider)', + }, + }, + }, +}) +` + +// ── Default App.vue ───────────────────────────────────────────────────── + export const DEFAULT_CODE = `