feat: Move dynamic canvas to /dynamic/canvas route

Separates dynamic canvas from homepage to avoid conflicts with default canvas.
- Changed route from /dynamic-canvas to /dynamic/canvas
- Added toolbar button for quick access to dynamic canvas
- Updated navigate_to tool with dynamic-canvas option
This commit is contained in:
2026-02-13 07:21:42 -06:00
parent 2a2100bbb2
commit ccbf542480
3 changed files with 24 additions and 3 deletions

View File

@@ -49,6 +49,14 @@ onMounted(() => {
</svg> </svg>
</RouterLink> </RouterLink>
<RouterLink to="/dynamic/canvas" class="toolbar-btn" :class="{ active: route.path === '/dynamic/canvas' }" title="Dynamic Canvas">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="3" y="3" width="18" height="18" rx="2"/>
<path d="M3 9h18"/>
<path d="M9 21V9"/>
</svg>
</RouterLink>
<!-- Canvas dinamicos de la toolbar --> <!-- Canvas dinamicos de la toolbar -->
<RouterLink <RouterLink
v-for="canvas in projectCanvasStore.toolbarCanvases" v-for="canvas in projectCanvasStore.toolbarCanvases"
@@ -110,6 +118,13 @@ onMounted(() => {
<polyline points="8 6 2 12 8 18"/> <polyline points="8 6 2 12 8 18"/>
</svg> </svg>
</RouterLink> </RouterLink>
<RouterLink to="/terminal" class="toolbar-btn" :class="{ active: route.path === '/terminal' }" title="Terminal">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="4 17 10 11 4 5"/>
<line x1="12" y1="19" x2="20" y2="19"/>
</svg>
</RouterLink>
</div> </div>
<div class="toolbar-divider"></div> <div class="toolbar-divider"></div>

View File

@@ -9,7 +9,7 @@ const router = createRouter({
component: () => import('../pages/HomePage.vue') component: () => import('../pages/HomePage.vue')
}, },
{ {
path: '/dynamic-canvas', path: '/dynamic/canvas',
name: 'canvas', name: 'canvas',
component: () => import('../pages/CanvasPage.vue') component: () => import('../pages/CanvasPage.vue')
}, },
@@ -43,6 +43,11 @@ const router = createRouter({
path: '/source', path: '/source',
name: 'source', name: 'source',
component: () => import('../pages/SourceCodePage.vue') component: () => import('../pages/SourceCodePage.vue')
},
{
path: '/terminal',
name: 'terminal',
component: () => import('../pages/TerminalPage.vue')
} }
] ]
}) })

View File

@@ -52,7 +52,7 @@ export function registerGlobalTools() {
properties: { properties: {
page: { page: {
type: 'string', type: 'string',
enum: ['canvas', 'components', 'themes'], enum: ['canvas', 'dynamic-canvas', 'components', 'themes'],
description: 'Página a la que navegar' description: 'Página a la que navegar'
} }
}, },
@@ -65,13 +65,14 @@ export function registerGlobalTools() {
const routes: Record<string, string> = { const routes: Record<string, string> = {
canvas: '/', canvas: '/',
'dynamic-canvas': '/dynamic/canvas',
components: '/components', components: '/components',
themes: '/themes' themes: '/themes'
} }
const path = routes[args.page] const path = routes[args.page]
if (!path) { if (!path) {
return `Error: Página "${args.page}" no válida. Opciones: canvas, components, themes` return `Error: Página "${args.page}" no válida. Opciones: canvas, dynamic-canvas, components, themes`
} }
try { try {