Skip to content

feat(nav,motion): NavRail, TabBar, MoreSheet, WorkspaceSwitcher, PluginCard, StatusPill, SchemaForm + motion en 10 primitivos - #36

Merged
A-PachecoT merged 7 commits into
mainfrom
feat/nav-motion-components
Sep 30, 2026
Merged

A-PachecoT merged 7 commits into
mainfrom
feat/nav-motion-components

Conversation

@A-PachecoT

Copy link
Copy Markdown
Member

Sale del prototipo de navegación de Fovente (inbox-ai rama design/plugin-nav, frontend/src/app/dev/plugin-nav/handoff.md).

Nuevos (9): NavRail/NavRailItem/NavRailSection (con expandOnHover y pinned) · NavRailOverflow · TabBar/TabBarItem · MoreSheet · WorkspaceSwitcher/WorkspaceMark · NewDot/NewChip · PluginCard/PluginSheet · StatusPill · SchemaForm.
Motion en existentes (10): Sheet · DropdownMenu · Tooltip · Sidebar (activeIndicator opt-in) · Button (loading) · Switch · Collapsible (CollapsibleChevron) · Toast · Badge (count) · Skeleton (animation).

  • Todo el motion sale de src/lib/spring.ts / --cf-spring-*; reduced-motion en cada componente (SO + MotionConfig).
  • Se quitaron animate-in/zoom-*/slide-*: sin tw-animate instalado, no hacían nada (el Sheet, por ejemplo, no tenía animación).
  • APIs públicas intactas; todo lo nuevo es opcional. Cambio visible por default: Skeleton pasa de pulse a shimmer (animation="pulse" lo devuelve).

Verificación: tsc sin errores nuevos (los 4 de hero-shader/chat-sim ya están en main). vitest 945/948: los 3 rojos (ChatInput «send button», chat-sim tsc y capture lifecycle) fallan igual en main. Cada componente tiene story y un filmstrip revisado (~/.herdr/design-runs/ui-nav-motion/fs/); preview en vivo: http://100.84.249.22:12393/.

Seguimiento (no en este PR): subir a index.css los bloques CSS que hoy se inyectan en runtime (TOASTER_CSS, keyframes de tooltip y dropdown); tokens propuestos --cf-nav-active-bg/fg, --cf-skeleton-*, --cf-dd-exit; .cf-btn[data-pressed] a scale .96; perilla del Switch apagado casi negra en claro; PluginCard → usar StatusPill; drag-to-dismiss en MoreSheet.

🤖 Generated with Claude Code

A-PachecoT and others added 7 commits September 29, 2026 18:28
Nuevos: NavRail/NavRailItem/NavRailSection (expandOnHover), NavRailOverflow,
TabBar/TabBarItem, MoreSheet, WorkspaceSwitcher/WorkspaceMark, NewDot/NewChip,
PluginCard/PluginSheet, StatusPill, SchemaForm.
Motion con SPRINGS del paquete (sin curvas propias) y reduced-motion en:
Sheet (velo 28 %, gentle), DropdownMenu (nace del trigger, highlight que
viaja), Tooltip (vecinos sin delay), Sidebar (activeIndicator opt-in),
Button (loading + presión), Switch (reduced + disabled), Collapsible (alto),
Toast (pila sin saltos), Badge (count con pop), Skeleton (shimmer).
Quita las clases animate-in/zoom-*/slide-* que no hacían nada (no hay
tw-animate). APIs públicas intactas; props nuevas opcionales.
tsc: sin errores nuevos (los 4 de hero-shader/chat-sim ya están en main).
vitest: 945/948; los 3 rojos (ChatInput send button, chat-sim tsc y
capture lifecycle) fallan igual en main.

Co-Authored-By: Claude <noreply@anthropic.com>
…o motion value

Eran dos springs en dos propiedades (clip-path y x) más una sombra que
prendía en el frame 0: al empezar y al terminar el hover se desfasaban un
frame y se veía una barra del panel. Ahora comparten cada frame y la sombra
crece con el despliegue.

Co-Authored-By: Claude <noreply@anthropic.com>
Al abrir entraba con el spring smooth + delay y a mitad del despliegue
seguía casi transparente; al cerrar se apagaba antes de plegar. Ahora llega
a opacidad 1 en ~170 ms y al cerrar queda visible, recortado por la caja,
apagándose sólo en el último tramo. Medido en tiempo real (probe de 35 ms).

Co-Authored-By: Claude <noreply@anthropic.com>
…uete

Las 19 lanes corrieron en paralelo y ninguna pudo usar a las otras. Ahora:
- NavRail y TabBar usan NewDot y Badge count; layoutId del riel con useId.
- useEdgeIndicator extraído (Tabs, TabBar y el segmented de SchemaForm).
- NavRailOverflow y WorkspaceSwitcher usan DropdownMenu del paquete (se
  borran el popover y el hover hechos a mano); NavListRow compartido por
  «+N» y MoreSheet (NavRailOverflowRow/MoreSheetRow quedan como alias).
- PluginCard usa StatusPill; SchemaForm usa Collapsible, Input y EdgeLayers.
- WorkspaceMark cae a iniciales si el logo falla (Avatar).
- El CSS inyectado en runtime (dropdown, tooltip, toaster, skeleton) pasa a
  index.css; tokens --cf-nav-active-bg/fg, --cf-nav-hover-bg,
  --cf-shadow-float, --cf-stagger-row, --cf-skeleton-*, --cf-dd-exit;
  .cf-btn[data-pressed] a .96; fuera animate-in/zoom/slide muertos de
  dialog y select.
tsc: sólo los 4 errores de main. vitest 945/948 (los 3 rojos, iguales en main).

Co-Authored-By: Claude <noreply@anthropic.com>
…o siga

DropdownMenu, Tooltip, Sheet, Toast y los popovers se montan en <body>,
fuera del wrapper con data-theme, y en Storybook salían siempre oscuros
aunque el toolbar dijera Light (el menú del WorkspaceSwitcher, por ejemplo).
En una app real el tema ya vive en <html>; ahora Storybook hace lo mismo.

Co-Authored-By: Claude <noreply@anthropic.com>
Basalt, su único usuario, lo eliminó en su PR #197; en el workspace sólo
queda mencionado en comentarios. Se van el componente, su test, su story,
los exports (WorkspaceShell*, WorkspaceShell*Props) y su línea en
COMPONENTS.md. Pedido de André. tsc: sólo los 4 errores de main; vitest
937/940 (los mismos 3 rojos de main; 8 tests menos = los de WorkspaceShell).

BREAKING CHANGE: se quitan los exports WorkspaceShell, WorkspaceShellRail,
WorkspaceShellIdentity, WorkspaceShellNav, WorkspaceShellNavItem,
WorkspaceShellRailFooter, WorkspaceShellWell y sus tipos.

Co-Authored-By: Claude <noreply@anthropic.com>
…umirlo desde Fovente

- src/styles/motion.css (importado por index.css, export ./motion.css): tokens de springs y
  coreografía, --cf-nav-*/--cf-shadow-float por tema, pop-in/out, superficies de tooltip y
  dropdown, toaster, skeleton sweep, presión de Button/Switch/Tabs. Un consumidor con su
  propio puente de tokens (Fovente) importa sólo el motion.
- "use client" en 18 archivos: en un layout server de Next daban 500 (createContext).
- NavRailOverflow: Array.from al iterar el Map (fallaba el tsc de Fovente, target menor).
- Workspace.color: las iniciales de cada negocio con SU color, no el del negocio activo.
tsc: sólo los 4 de main. vitest 937/940 (los 3 rojos de main).

Co-Authored-By: Claude <noreply@anthropic.com>
@A-PachecoT
A-PachecoT merged commit 9e21c56 into main Sep 30, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant