create-project-arch 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +58 -0
  2. package/dist/cli.js +232 -0
  3. package/dist/cli.test.js +8 -0
  4. package/package.json +29 -0
  5. package/templates/arch-ui/.arch/edges/decision_to_domain.json +4 -0
  6. package/templates/arch-ui/.arch/edges/milestone_to_task.json +4 -0
  7. package/templates/arch-ui/.arch/edges/task_to_decision.json +4 -0
  8. package/templates/arch-ui/.arch/edges/task_to_module.json +4 -0
  9. package/templates/arch-ui/.arch/graph.json +17 -0
  10. package/templates/arch-ui/.arch/nodes/decisions.json +4 -0
  11. package/templates/arch-ui/.arch/nodes/domains.json +4 -0
  12. package/templates/arch-ui/.arch/nodes/milestones.json +4 -0
  13. package/templates/arch-ui/.arch/nodes/modules.json +4 -0
  14. package/templates/arch-ui/.arch/nodes/tasks.json +4 -0
  15. package/templates/arch-ui/app/api/architecture/map/route.ts +13 -0
  16. package/templates/arch-ui/app/api/decisions/route.ts +23 -0
  17. package/templates/arch-ui/app/api/domain-docs/route.ts +89 -0
  18. package/templates/arch-ui/app/api/domains/route.ts +10 -0
  19. package/templates/arch-ui/app/api/graph/route.ts +16 -0
  20. package/templates/arch-ui/app/api/health/route.ts +44 -0
  21. package/templates/arch-ui/app/api/node-files/route.ts +173 -0
  22. package/templates/arch-ui/app/api/phases/route.ts +10 -0
  23. package/templates/arch-ui/app/api/route.ts +22 -0
  24. package/templates/arch-ui/app/api/search/route.ts +56 -0
  25. package/templates/arch-ui/app/api/task-doc/[taskId]/route.ts +60 -0
  26. package/templates/arch-ui/app/api/tasks/route.ts +36 -0
  27. package/templates/arch-ui/app/api/trace/file/route.ts +40 -0
  28. package/templates/arch-ui/app/api/trace/task/[taskId]/route.ts +12 -0
  29. package/templates/arch-ui/app/architecture/page.tsx +5 -0
  30. package/templates/arch-ui/app/globals.css +240 -0
  31. package/templates/arch-ui/app/health/page.tsx +48 -0
  32. package/templates/arch-ui/app/layout.tsx +19 -0
  33. package/templates/arch-ui/app/page.tsx +5 -0
  34. package/templates/arch-ui/app/work/page.tsx +265 -0
  35. package/templates/arch-ui/components/app-shell.tsx +171 -0
  36. package/templates/arch-ui/components/error-boundary.tsx +53 -0
  37. package/templates/arch-ui/components/graph/arch-node.tsx +77 -0
  38. package/templates/arch-ui/components/graph/build-graph-from-dataset.ts +196 -0
  39. package/templates/arch-ui/components/graph/build-initial-graph.ts +245 -0
  40. package/templates/arch-ui/components/graph/graph-context-menu.tsx +84 -0
  41. package/templates/arch-ui/components/graph/graph-doc-panel.tsx +46 -0
  42. package/templates/arch-ui/components/graph/graph-types.ts +82 -0
  43. package/templates/arch-ui/components/graph/use-auto-layout.ts +65 -0
  44. package/templates/arch-ui/components/graph/use-connection-validation.ts +62 -0
  45. package/templates/arch-ui/components/graph/use-flow-persistence.ts +48 -0
  46. package/templates/arch-ui/components/graph-canvas.tsx +670 -0
  47. package/templates/arch-ui/components/health-panel.tsx +49 -0
  48. package/templates/arch-ui/components/inspector-context.tsx +35 -0
  49. package/templates/arch-ui/components/inspector.tsx +895 -0
  50. package/templates/arch-ui/components/markdown-viewer.tsx +74 -0
  51. package/templates/arch-ui/components/sidebar.tsx +531 -0
  52. package/templates/arch-ui/components/topbar.tsx +187 -0
  53. package/templates/arch-ui/components/work-table.tsx +57 -0
  54. package/templates/arch-ui/components/workspace-context.tsx +274 -0
  55. package/templates/arch-ui/eslint.config.js +2 -0
  56. package/templates/arch-ui/global.d.ts +1 -0
  57. package/templates/arch-ui/lib/api.ts +93 -0
  58. package/templates/arch-ui/lib/arch-model.ts +113 -0
  59. package/templates/arch-ui/lib/graph-dataset.ts +756 -0
  60. package/templates/arch-ui/lib/graph-schema.ts +408 -0
  61. package/templates/arch-ui/lib/project-root.ts +52 -0
  62. package/templates/arch-ui/lib/types.ts +116 -0
  63. package/templates/arch-ui/next-env.d.ts +6 -0
  64. package/templates/arch-ui/next.config.js +17 -0
  65. package/templates/arch-ui/package.json +38 -0
  66. package/templates/arch-ui/postcss.config.mjs +6 -0
  67. package/templates/arch-ui/tailwind.config.ts +11 -0
  68. package/templates/arch-ui/tsconfig.json +21 -0
  69. package/templates/ui-package/eslint.config.mjs +4 -0
  70. package/templates/ui-package/package.json +26 -0
  71. package/templates/ui-package/src/accordion.tsx +10 -0
  72. package/templates/ui-package/src/badge.tsx +12 -0
  73. package/templates/ui-package/src/button.tsx +32 -0
  74. package/templates/ui-package/src/card.tsx +22 -0
  75. package/templates/ui-package/src/code.tsx +6 -0
  76. package/templates/ui-package/src/command.tsx +18 -0
  77. package/templates/ui-package/src/dialog.tsx +6 -0
  78. package/templates/ui-package/src/dropdown-menu.tsx +10 -0
  79. package/templates/ui-package/src/input.tsx +6 -0
  80. package/templates/ui-package/src/navigation-menu.tsx +6 -0
  81. package/templates/ui-package/src/scroll-area.tsx +6 -0
  82. package/templates/ui-package/src/select.tsx +6 -0
  83. package/templates/ui-package/src/separator.tsx +6 -0
  84. package/templates/ui-package/src/sheet.tsx +6 -0
  85. package/templates/ui-package/src/skeleton.tsx +6 -0
  86. package/templates/ui-package/src/table.tsx +26 -0
  87. package/templates/ui-package/src/tabs.tsx +14 -0
  88. package/templates/ui-package/src/toggle-group.tsx +10 -0
  89. package/templates/ui-package/src/utils.ts +3 -0
  90. package/templates/ui-package/tsconfig.json +10 -0
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@repo/ui",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "exports": {
6
+ "./*": "./src/*.tsx"
7
+ },
8
+ "scripts": {
9
+ "lint": "eslint . --max-warnings 0",
10
+ "generate:component": "turbo gen react-component",
11
+ "check-types": "tsc --noEmit"
12
+ },
13
+ "devDependencies": {
14
+ "@repo/eslint-config": "workspace:*",
15
+ "@repo/typescript-config": "workspace:*",
16
+ "@types/node": "^22.15.3",
17
+ "@types/react": "19.2.2",
18
+ "@types/react-dom": "19.2.2",
19
+ "eslint": "^9.39.1",
20
+ "typescript": "5.9.2"
21
+ },
22
+ "dependencies": {
23
+ "react": "^19.2.0",
24
+ "react-dom": "^19.2.0"
25
+ }
26
+ }
@@ -0,0 +1,10 @@
1
+ import { DetailsHTMLAttributes, HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Accordion({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-accordion", className)} {...props} />;
6
+ }
7
+
8
+ export function AccordionItem({ className, ...props }: DetailsHTMLAttributes<HTMLDetailsElement>) {
9
+ return <details className={cn("ui-accordion-item", className)} {...props} />;
10
+ }
@@ -0,0 +1,12 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ type BadgeVariant = "default" | "success" | "warning" | "danger" | "secondary";
5
+
6
+ export function Badge({
7
+ className,
8
+ variant = "default",
9
+ ...props
10
+ }: HTMLAttributes<HTMLSpanElement> & { variant?: BadgeVariant }) {
11
+ return <span className={cn("ui-badge", `ui-badge-${variant}`, className)} {...props} />;
12
+ }
@@ -0,0 +1,32 @@
1
+ import { ButtonHTMLAttributes, ReactNode } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ type ButtonVariant = "default" | "secondary" | "ghost" | "outline";
5
+
6
+ type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
7
+ children: ReactNode;
8
+ variant?: ButtonVariant;
9
+ appName?: string;
10
+ };
11
+
12
+ const variantClass: Record<ButtonVariant, string> = {
13
+ default: "ui-btn ui-btn-default",
14
+ secondary: "ui-btn ui-btn-secondary",
15
+ ghost: "ui-btn ui-btn-ghost",
16
+ outline: "ui-btn ui-btn-outline",
17
+ };
18
+
19
+ export function Button({
20
+ children,
21
+ className,
22
+ variant = "default",
23
+ appName,
24
+ ...props
25
+ }: ButtonProps) {
26
+ void appName;
27
+ return (
28
+ <button className={cn(variantClass[variant], className)} {...props}>
29
+ {children}
30
+ </button>
31
+ );
32
+ }
@@ -0,0 +1,22 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Card({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-card", className)} {...props} />;
6
+ }
7
+
8
+ export function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
9
+ return <div className={cn("ui-card-header", className)} {...props} />;
10
+ }
11
+
12
+ export function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {
13
+ return <h3 className={cn("ui-card-title", className)} {...props} />;
14
+ }
15
+
16
+ export function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {
17
+ return <p className={cn("ui-card-description", className)} {...props} />;
18
+ }
19
+
20
+ export function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
21
+ return <div className={cn("ui-card-content", className)} {...props} />;
22
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Code({ className, ...props }: HTMLAttributes<HTMLElement>) {
5
+ return <code className={cn("ui-code", className)} {...props} />;
6
+ }
@@ -0,0 +1,18 @@
1
+ import { HTMLAttributes, InputHTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Command({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-command", className)} {...props} />;
6
+ }
7
+
8
+ export function CommandInput({ className, ...props }: InputHTMLAttributes<HTMLInputElement>) {
9
+ return <input className={cn("ui-input", className)} {...props} />;
10
+ }
11
+
12
+ export function CommandList({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
13
+ return <div className={cn("ui-command-list", className)} {...props} />;
14
+ }
15
+
16
+ export function CommandItem({ className, ...props }: HTMLAttributes<HTMLButtonElement>) {
17
+ return <button type="button" className={cn("ui-command-item", className)} {...props} />;
18
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Dialog({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-dialog", className)} {...props} />;
6
+ }
@@ -0,0 +1,10 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function DropdownMenu({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-dropdown", className)} {...props} />;
6
+ }
7
+
8
+ export function DropdownMenuItem({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {
9
+ return <span className={cn("ui-dropdown-item", className)} {...props} />;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { InputHTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Input({ className, ...props }: InputHTMLAttributes<HTMLInputElement>) {
5
+ return <input className={cn("ui-input", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function NavigationMenu({ className, ...props }: HTMLAttributes<HTMLElement>) {
5
+ return <nav className={cn("ui-nav-menu", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function ScrollArea({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-scroll-area", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { SelectHTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Select({ className, ...props }: SelectHTMLAttributes<HTMLSelectElement>) {
5
+ return <select className={cn("ui-input", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Separator({ className, ...props }: HTMLAttributes<HTMLHRElement>) {
5
+ return <hr className={cn("ui-separator", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Sheet({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-sheet", className)} {...props} />;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-skeleton", className)} {...props} />;
6
+ }
@@ -0,0 +1,26 @@
1
+ import { HTMLAttributes, TableHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Table({ className, ...props }: TableHTMLAttributes<HTMLTableElement>) {
5
+ return <table className={cn("ui-table", className)} {...props} />;
6
+ }
7
+
8
+ export function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {
9
+ return <thead className={cn("ui-table-header", className)} {...props} />;
10
+ }
11
+
12
+ export function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {
13
+ return <tbody className={cn("ui-table-body", className)} {...props} />;
14
+ }
15
+
16
+ export function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>) {
17
+ return <tr className={cn("ui-table-row", className)} {...props} />;
18
+ }
19
+
20
+ export function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>) {
21
+ return <th className={cn("ui-table-head", className)} {...props} />;
22
+ }
23
+
24
+ export function TableCell({ className, ...props }: TdHTMLAttributes<HTMLTableCellElement>) {
25
+ return <td className={cn("ui-table-cell", className)} {...props} />;
26
+ }
@@ -0,0 +1,14 @@
1
+ import { ButtonHTMLAttributes, HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function Tabs({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-tabs", className)} {...props} />;
6
+ }
7
+
8
+ export function TabsList({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
9
+ return <div className={cn("ui-tabs-list", className)} {...props} />;
10
+ }
11
+
12
+ export function TabsTrigger({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) {
13
+ return <button type="button" className={cn("ui-tabs-trigger", className)} {...props} />;
14
+ }
@@ -0,0 +1,10 @@
1
+ import { ButtonHTMLAttributes, HTMLAttributes } from "react";
2
+ import { cn } from "./utils";
3
+
4
+ export function ToggleGroup({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
5
+ return <div className={cn("ui-toggle-group", className)} {...props} />;
6
+ }
7
+
8
+ export function ToggleGroupItem({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) {
9
+ return <button type="button" className={cn("ui-toggle-item", className)} {...props} />;
10
+ }
@@ -0,0 +1,3 @@
1
+ export function cn(...values: Array<string | false | null | undefined>): string {
2
+ return values.filter(Boolean).join(" ");
3
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "@repo/typescript-config/react-library.json",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "outDir": "dist",
6
+ "strictNullChecks": true
7
+ },
8
+ "include": ["src"],
9
+ "exclude": ["node_modules", "dist"]
10
+ }