mirror of
https://github.com/jakejarvis/stanza.git
synced 2026-10-16 07:25:43 -04:00
- **Module logos**: `registry-build.ts` now auto-detects `logo.svg` / `logo-light.svg` + `logo-dark.svg` in each module directory and inlines them as `mod.logo` (string or `{ light, dark }`) — no `module.ts` declarations needed; first-party SVGs added for all current modules
- **Codemod bundling**: `registry-build.ts` bundles each module's `codemods/index.ts` via `Bun.build` (ESM, externals: `@stanza/codemods`, `ts-morph`, `node:*`) and embeds the output as `mod.codemodBundle`; the CLI runner materializes it to `node_modules/.cache/stanza-codemods/` so externals resolve normally, replacing the old "first-party only" approach
- **Web builder UI**: split monolithic `builder.tsx` into `builder/{index,slot-cards,command-bar,file-preview}.tsx`; add `Header`, `Footer`, `ModeToggle`, `ThemeProvider`; scaffold shadcn `Badge`, `Card`, `DropdownMenu`, `Input`, `Separator`, `Sonner`, `Tabs`, `Tooltip` components
- **Server-side Shiki**: `apps/web/src/server/highlighter.ts` keeps a warm Shiki instance; `builder-state.ts` (`createServerFn`) computes selections from URL params and pre-renders `{ light, dark }` HTML per file — Shiki is never imported client-side
- **Selection logic**: new `apps/web/src/lib/selection.ts` with full unit tests
- **copy-registry script**: `predev`/`prebuild` hook copies `dist/registry/` → `apps/web/public/registry/` so the same-domain registry path resolves without a separate CDN
- Add `shiki`, `sonner`, `@pierre/trees`, `@fontsource-variable/geist-mono` to `apps/web`; update oxfmt ignore patterns and swap `react-hooks` for `react-perf` + `promise` in oxlint web config
56 lines
1.6 KiB
JSON
56 lines
1.6 KiB
JSON
{
|
|
"name": "@stanza/web",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"license": "MIT",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite dev",
|
|
"predev": "bun run scripts/copy-registry.ts",
|
|
"build": "vite build",
|
|
"prebuild": "bun run scripts/copy-registry.ts",
|
|
"start": "node .output/server/index.mjs",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@base-ui/react": "^1.5.0",
|
|
"@fontsource-variable/geist": "^5.2.9",
|
|
"@fontsource-variable/geist-mono": "^5.2.8",
|
|
"@pierre/trees": "1.0.0-beta.4",
|
|
"@stanza/registry": "workspace:*",
|
|
"@tabler/icons-react": "^3.44.0",
|
|
"@tailwindcss/vite": "^4.3.0",
|
|
"@tanstack/react-devtools": "^0.10.5",
|
|
"@tanstack/react-router": "^1.170.5",
|
|
"@tanstack/react-router-devtools": "^1.167.0",
|
|
"@tanstack/react-router-ssr-query": "^1.167.0",
|
|
"@tanstack/react-start": "^1.168.7",
|
|
"@tanstack/router-plugin": "^1.168.7",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"nitro": "^3.0.260429-beta",
|
|
"react": "^19.2.6",
|
|
"react-dom": "^19.2.6",
|
|
"shadcn": "^4.7.0",
|
|
"shiki": "^4.1.0",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tailwindcss": "^4.3.0",
|
|
"tw-animate-css": "^1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@tanstack/devtools-vite": "^0.7.0",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/node": "^25.9.1",
|
|
"@types/react": "^19.2.15",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.2",
|
|
"jsdom": "^29.1.1",
|
|
"typescript": "^6.0.3",
|
|
"vite": "^8.0.13",
|
|
"vitest": "^4.1.7",
|
|
"web-vitals": "^5.2.0"
|
|
}
|
|
}
|