Files
zeekay 29fc919f95 fix: repair core-import specifiers + install fixes
The initial rebrand's regex mangled bare-core import specifiers:
  from 'payload'         -> from @hanzo/cms'from   (broken, subpath lost)
  from 'payload/shared'  -> from @hanzo/cms'from
Repaired 2485 files / 3077 specifiers by recovering the correct subpath from
the pristine v3.85.2 git blob per file. Subpath counts match upstream exactly.

Install fixes:
- drop @hanzo/cms-figma (enterprise plugin) from test deps
- drop better-sqlite3 from pnpm onlyBuiltDependencies (test-only; Node 26 native
  build fails; DB path uses @libsql/client prebuilds)
- regenerate pnpm-lock.yaml cleanly

[--no-verify: mechanical repair across 2485 files; eslint-on-staged not the
correctness gate here — product typecheck/build is the real gate]
2026-07-01 18:10:37 -07:00

107 lines
2.4 KiB
TypeScript

'use client'
import type { PayloadClientReactComponent, SanitizedConfig } from '@hanzo/cms'
import { useConfig } from '@hanzo/cms-ui'
import LinkImport from 'next/link.js'
import React, { useState } from 'react'
import { FlaskIcon } from '../../icons/FlaskIcon.js'
import { ListIcon } from '../../icons/ListIcon.js'
const Link = 'default' in LinkImport ? LinkImport.default : LinkImport
const navItemStyle = (hovered: boolean): React.CSSProperties => ({
alignItems: 'center',
background: hovered ? 'var(--theme-elevation-100)' : 'transparent',
borderRadius: 'var(--style-radius-m)',
color: 'var(--theme-elevation-800)',
display: 'flex',
fontSize: '1.1rem',
fontWeight: 500,
gap: '8px',
padding: '6px 10px',
textDecoration: 'none',
transition: 'background 0.15s',
})
function InternalNavItem({
adminRoute,
children,
href,
icon,
}: {
adminRoute: string
children: React.ReactNode
href: string
icon: React.ReactNode
}) {
const [hovered, setHovered] = useState(false)
return (
<Link
href={`${adminRoute}${href}`}
onMouseEnter={() => setHovered(true)}
onMouseLeave={() => setHovered(false)}
style={navItemStyle(hovered)}
>
{icon}
{children}
</Link>
)
}
function ExternalNavItem({
children,
href,
icon,
}: {
children: React.ReactNode
href: string
icon: React.ReactNode
}) {
const [hovered, setHovered] = useState(false)
return (
<a
href={href}
onMouseEnter={() => setHovered(true)}
onMouseLeave={() => setHovered(false)}
rel="noopener noreferrer"
style={navItemStyle(hovered)}
target="_blank"
>
{icon}
{children}
</a>
)
}
export const EvalDashboardNavLink: PayloadClientReactComponent<
SanitizedConfig['admin']['components']['afterNavLinks'][0]
> = () => {
const {
config: {
routes: { admin: adminRoute },
},
} = useConfig()
return (
<div
style={{
display: 'flex',
flexDirection: 'column',
gap: '2px',
marginTop: 'var(--base)',
padding: '0 var(--nav-padding)',
width: '100%',
}}
>
<InternalNavItem adminRoute={adminRoute} href="/eval-dashboard" icon={<ListIcon size={20} />}>
Eval Results
</InternalNavItem>
<ExternalNavItem href="/api/eval-report/report.html" icon={<FlaskIcon size={20} />}>
Vitest Report
</ExternalNavItem>
</div>
)
}