diff --git a/.agents/agent_assets_metadata.toml b/.agents/agent_assets_metadata.toml
deleted file mode 100644
index 630c5c5..0000000
--- a/.agents/agent_assets_metadata.toml
+++ /dev/null
@@ -1,44 +0,0 @@
-uploads = []
-generated = []
-
-[[outputs]]
-id = "x31gBYdQKnMGZriV7IJ1v"
-uri = "file://DEPLOIEMENT.md"
-type = "text"
-title = "Guide d'auto-hébergement RockyLinux"
-
-[[outputs]]
-id = "QwHkF1SFkRpZFuyRMNI9h"
-uri = "file://docs/GITEA_TUTO.md"
-type = "text"
-title = "Tutoriel Gitea — inchangé"
-
-[[outputs]]
-id = "wdBpdE1lSme8lM2xYd3oJ"
-uri = "file://docs/DAT.md"
-type = "text"
-title = "DAT v1.3"
-
-[[outputs]]
-id = "NXFvDFOIzX862xNq15Mak"
-uri = "file://docs/DEX.md"
-type = "text"
-title = "DEX v1.3"
-
-[[outputs]]
-id = "kJNXgVnYp_LQmPcWr6Osb"
-uri = "file://docs/WIKI.md"
-type = "text"
-title = "Wiki v1.3"
-
-[[outputs]]
-id = "4toQ5OnXtI6PicOZHDKnP"
-uri = "file://docs/INSTALL_ROCKY.md"
-type = "text"
-title = "Guide d’installation RockyLinux"
-
-[[outputs]]
-id = "Gl9K70szTZifk6cTylypp"
-uri = "file://README.md"
-type = "text"
-title = "README.md — Gitea"
diff --git a/.replit b/.replit
deleted file mode 100644
index e5ed861..0000000
--- a/.replit
+++ /dev/null
@@ -1,29 +0,0 @@
-modules = ["nodejs-24", "python-3.11"]
-
-[[artifacts]]
-id = "artifacts/api-server"
-
-[[artifacts]]
-id = "artifacts/mockup-sandbox"
-
-[deployment]
-router = "application"
-deploymentTarget = "autoscale"
-
-[deployment.postBuild]
-args = ["pnpm", "store", "prune"]
-env = { "CI" = "true" }
-
-[workflows]
-runButton = "Project"
-
-[agent]
-stack = "PNPM_WORKSPACE"
-expertMode = true
-
-[postMerge]
-path = "scripts/post-merge.sh"
-timeoutMs = 20000
-
-[nix]
-channel = "stable-25_05"
diff --git a/.replitignore b/.replitignore
deleted file mode 100644
index 9eb019c..0000000
--- a/.replitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# The format of this file is identical to `.dockerignore`.
-# It is used to reduce the size of deployed images to make the process of publishing faster.
-
-# No need to store the pnpm store twice.
-.local
diff --git a/artifacts/mockup-sandbox/.replit-artifact/artifact.toml b/artifacts/mockup-sandbox/.replit-artifact/artifact.toml
deleted file mode 100644
index 8f94c25..0000000
--- a/artifacts/mockup-sandbox/.replit-artifact/artifact.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-kind = "design"
-previewPath = "/__mockup"
-title = "Canvas"
-version = "1.0.0"
-id = "XegfDyZt7HqfW2Bb8Ghoy"
-
-[[services]]
-localPort = 8081
-name = "Component Preview Server"
-paths = ["/__mockup"]
-
-[services.env]
-PORT = "8081"
-BASE_PATH = "/__mockup"
-
-[services.development]
-run = "pnpm --filter @workspace/mockup-sandbox run dev"
diff --git a/artifacts/mockup-sandbox/components.json b/artifacts/mockup-sandbox/components.json
deleted file mode 100644
index ba0c18c..0000000
--- a/artifacts/mockup-sandbox/components.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "$schema": "https://ui.shadcn.com/schema.json",
- "style": "new-york",
- "rsc": false,
- "tsx": true,
- "tailwind": {
- "config": "",
- "css": "src/index.css",
- "baseColor": "neutral",
- "cssVariables": true,
- "prefix": ""
- },
- "iconLibrary": "lucide",
- "aliases": {
- "components": "@/components",
- "utils": "@/lib/utils",
- "ui": "@/components/ui",
- "lib": "@/lib",
- "hooks": "@/hooks"
- }
-}
diff --git a/artifacts/mockup-sandbox/index.html b/artifacts/mockup-sandbox/index.html
deleted file mode 100644
index 1397a63..0000000
--- a/artifacts/mockup-sandbox/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Mockup Canvas
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/artifacts/mockup-sandbox/mockupPreviewPlugin.ts b/artifacts/mockup-sandbox/mockupPreviewPlugin.ts
deleted file mode 100644
index c09ed92..0000000
--- a/artifacts/mockup-sandbox/mockupPreviewPlugin.ts
+++ /dev/null
@@ -1,180 +0,0 @@
-import { mkdirSync, writeFileSync } from "fs";
-import path from "path";
-import glob from "fast-glob";
-import chokidar from "chokidar";
-import type { FSWatcher } from "chokidar";
-import type { Plugin } from "vite";
-
-const MOCKUPS_DIR = "src/components/mockups";
-const GENERATED_MODULE = "src/.generated/mockup-components.ts";
-
-interface DiscoveredComponent {
- globKey: string;
- importPath: string;
-}
-
-export function mockupPreviewPlugin(): Plugin {
- let root = "";
- let currentSource = "";
- let watcher: FSWatcher | null = null;
-
- function getMockupsAbsDir(): string {
- return path.join(root, MOCKUPS_DIR);
- }
-
- function getGeneratedModuleAbsPath(): string {
- return path.join(root, GENERATED_MODULE);
- }
-
- function isMockupFile(absolutePath: string): boolean {
- const rel = path.relative(getMockupsAbsDir(), absolutePath);
- return (
- !rel.startsWith("..") && !path.isAbsolute(rel) && rel.endsWith(".tsx")
- );
- }
-
- function isPreviewTarget(relativeToMockups: string): boolean {
- return relativeToMockups
- .split(path.sep)
- .every((segment) => !segment.startsWith("_"));
- }
-
- async function discoverComponents(): Promise> {
- const files = await glob(`${MOCKUPS_DIR}/**/*.tsx`, {
- cwd: root,
- ignore: ["**/_*/**", "**/_*.tsx"],
- });
-
- return files.map((f) => ({
- globKey: "./" + f.slice("src/".length),
- importPath: path.posix.relative("src/.generated", f),
- }));
- }
-
- function generateSource(components: Array): string {
- const entries = components
- .map(
- (c) =>
- ` ${JSON.stringify(c.globKey)}: () => import(${JSON.stringify(c.importPath)})`,
- )
- .join(",\n");
-
- return [
- "// This file is auto-generated by mockupPreviewPlugin.ts.",
- "type ModuleMap = Record Promise>>;",
- "export const modules: ModuleMap = {",
- entries,
- "};",
- "",
- ].join("\n");
- }
-
- function shouldAutoRescan(pathname: string): boolean {
- return (
- pathname.includes("/components/mockups/") ||
- pathname.includes("/.generated/mockup-components")
- );
- }
-
- let refreshInFlight = false;
- let refreshQueued = false;
-
- async function refresh(): Promise {
- if (refreshInFlight) {
- refreshQueued = true;
- return false;
- }
-
- refreshInFlight = true;
- let changed = false;
- try {
- const components = await discoverComponents();
- const newSource = generateSource(components);
- if (newSource !== currentSource) {
- currentSource = newSource;
- const generatedModuleAbsPath = getGeneratedModuleAbsPath();
- mkdirSync(path.dirname(generatedModuleAbsPath), { recursive: true });
- writeFileSync(generatedModuleAbsPath, currentSource);
- changed = true;
- }
- } finally {
- refreshInFlight = false;
- }
-
- if (refreshQueued) {
- refreshQueued = false;
- const followUp = await refresh();
- return changed || followUp;
- }
-
- return changed;
- }
-
- async function onFileAddedOrRemoved(): Promise {
- await refresh();
- }
-
- return {
- name: "mockup-preview",
- enforce: "pre",
-
- configResolved(config) {
- root = config.root;
- },
-
- async buildStart() {
- await refresh();
- },
-
- async configureServer(viteServer) {
- await refresh();
-
- const mockupsAbsDir = getMockupsAbsDir();
- mkdirSync(mockupsAbsDir, { recursive: true });
-
- watcher = chokidar.watch(mockupsAbsDir, {
- ignoreInitial: true,
- awaitWriteFinish: {
- stabilityThreshold: 100,
- pollInterval: 50,
- },
- });
-
- watcher.on("add", (file) => {
- if (
- isMockupFile(file) &&
- isPreviewTarget(path.relative(mockupsAbsDir, file))
- ) {
- void onFileAddedOrRemoved();
- }
- });
-
- watcher.on("unlink", (file) => {
- if (isMockupFile(file)) {
- void onFileAddedOrRemoved();
- }
- });
-
- viteServer.middlewares.use((req, res, next) => {
- const requestUrl = new URL(req.url ?? "/", "http://127.0.0.1");
- const pathname = requestUrl.pathname;
- const originalEnd = res.end.bind(res);
-
- res.end = ((...args: Parameters) => {
- if (res.statusCode === 404 && shouldAutoRescan(pathname)) {
- void refresh();
- }
- return originalEnd(...args);
- }) as typeof res.end;
-
- next();
- });
- },
-
- async closeWatcher() {
- if (watcher) {
- await watcher.close();
- }
- },
- };
-}
diff --git a/artifacts/mockup-sandbox/package.json b/artifacts/mockup-sandbox/package.json
deleted file mode 100644
index 01725c7..0000000
--- a/artifacts/mockup-sandbox/package.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "name": "@workspace/mockup-sandbox",
- "version": "2.0.0",
- "type": "module",
- "private": true,
- "scripts": {
- "dev": "vite dev",
- "build": "vite build",
- "preview": "vite preview",
- "typecheck": "tsc -p tsconfig.json --noEmit"
- },
- "devDependencies": {
- "@hookform/resolvers": "^3.10.0",
- "@radix-ui/react-accordion": "^1.2.12",
- "@radix-ui/react-alert-dialog": "^1.1.15",
- "@radix-ui/react-aspect-ratio": "^1.1.8",
- "@radix-ui/react-avatar": "^1.1.11",
- "@radix-ui/react-checkbox": "^1.3.3",
- "@radix-ui/react-collapsible": "^1.1.12",
- "@radix-ui/react-context-menu": "^2.2.16",
- "@radix-ui/react-dialog": "^1.1.15",
- "@radix-ui/react-dropdown-menu": "^2.1.16",
- "@radix-ui/react-hover-card": "^1.1.15",
- "@radix-ui/react-label": "^2.1.8",
- "@radix-ui/react-menubar": "^1.1.16",
- "@radix-ui/react-navigation-menu": "^1.2.14",
- "@radix-ui/react-popover": "^1.1.15",
- "@radix-ui/react-progress": "^1.1.8",
- "@radix-ui/react-radio-group": "^1.3.8",
- "@radix-ui/react-scroll-area": "^1.2.10",
- "@radix-ui/react-select": "^2.2.6",
- "@radix-ui/react-separator": "^1.1.8",
- "@radix-ui/react-slider": "^1.3.6",
- "@radix-ui/react-slot": "^1.2.4",
- "@radix-ui/react-switch": "^1.2.6",
- "@radix-ui/react-tabs": "^1.1.13",
- "@radix-ui/react-toast": "^1.2.7",
- "@radix-ui/react-toggle": "^1.1.10",
- "@radix-ui/react-toggle-group": "^1.1.11",
- "@radix-ui/react-tooltip": "^1.2.8",
- "@tailwindcss/vite": "catalog:",
- "@types/node": "catalog:",
- "@types/react": "catalog:",
- "@types/react-dom": "catalog:",
- "@vitejs/plugin-react": "catalog:",
- "chokidar": "^4.0.3",
- "class-variance-authority": "catalog:",
- "clsx": "catalog:",
- "cmdk": "^1.1.1",
- "date-fns": "^3.6.0",
- "embla-carousel-react": "^8.6.0",
- "fast-glob": "^3.3.3",
- "framer-motion": "catalog:",
- "input-otp": "^1.4.2",
- "lucide-react": "catalog:",
- "next-themes": "^0.4.6",
- "react": "catalog:",
- "react-day-picker": "^9.11.1",
- "react-dom": "catalog:",
- "react-hook-form": "^7.66.0",
- "react-resizable-panels": "^2.1.9",
- "recharts": "^2.15.4",
- "sonner": "^2.0.7",
- "tailwind-merge": "catalog:",
- "tailwindcss": "catalog:",
- "tailwindcss-animate": "^1.0.7",
- "tw-animate-css": "^1.4.0",
- "vaul": "^1.1.2",
- "vite": "catalog:",
- "zod": "catalog:"
- }
-}
diff --git a/artifacts/mockup-sandbox/src/.generated/mockup-components.ts b/artifacts/mockup-sandbox/src/.generated/mockup-components.ts
deleted file mode 100644
index 97c87e1..0000000
--- a/artifacts/mockup-sandbox/src/.generated/mockup-components.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file is auto-generated by mockupPreviewPlugin.ts.
-type ModuleMap = Record Promise>>;
-export const modules: ModuleMap = {
-
-};
diff --git a/artifacts/mockup-sandbox/src/App.tsx b/artifacts/mockup-sandbox/src/App.tsx
deleted file mode 100644
index d9c2317..0000000
--- a/artifacts/mockup-sandbox/src/App.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import { useEffect, useState, type ComponentType } from "react";
-
-import { modules as discoveredModules } from "./.generated/mockup-components";
-
-type ModuleMap = Record Promise>>;
-
-function _resolveComponent(
- mod: Record,
- name: string,
-): ComponentType | undefined {
- const fns = Object.values(mod).filter(
- (v) => typeof v === "function",
- ) as ComponentType[];
- return (
- (mod.default as ComponentType) ||
- (mod.Preview as ComponentType) ||
- (mod[name] as ComponentType) ||
- fns[fns.length - 1]
- );
-}
-
-function PreviewRenderer({
- componentPath,
- modules,
-}: {
- componentPath: string;
- modules: ModuleMap;
-}) {
- const [Component, setComponent] = useState(null);
- const [error, setError] = useState(null);
-
- useEffect(() => {
- let cancelled = false;
-
- setComponent(null);
- setError(null);
-
- async function loadComponent(): Promise {
- const key = `./components/mockups/${componentPath}.tsx`;
- const loader = modules[key];
- if (!loader) {
- setError(`No component found at ${componentPath}.tsx`);
- return;
- }
-
- try {
- const mod = await loader();
- if (cancelled) {
- return;
- }
- const name = componentPath.split("/").pop()!;
- const comp = _resolveComponent(mod, name);
- if (!comp) {
- setError(
- `No exported React component found in ${componentPath}.tsx\n\nMake sure the file has at least one exported function component.`,
- );
- return;
- }
- setComponent(() => comp);
- } catch (e) {
- if (cancelled) {
- return;
- }
-
- const message = e instanceof Error ? e.message : String(e);
- setError(`Failed to load preview.\n${message}`);
- }
- }
-
- void loadComponent();
-
- return () => {
- cancelled = true;
- };
- }, [componentPath, modules]);
-
- if (error) {
- return (
-
- {error}
-
- );
- }
-
- if (!Component) return null;
-
- return ;
-}
-
-function getBasePath(): string {
- return import.meta.env.BASE_URL.replace(/\/$/, "");
-}
-
-function getPreviewExamplePath(): string {
- const basePath = getBasePath();
- return `${basePath}/preview/ComponentName`;
-}
-
-function Gallery() {
- return (
-
-
-
- Component Preview Server
-
-
- This server renders individual components for the workspace canvas.
-
-
- Access component previews at{" "}
-
- {getPreviewExamplePath()}
-
-
-
-
- );
-}
-
-function getPreviewPath(): string | null {
- const basePath = getBasePath();
- const { pathname } = window.location;
- const local =
- basePath && pathname.startsWith(basePath)
- ? pathname.slice(basePath.length) || "/"
- : pathname;
- const match = local.match(/^\/preview\/(.+)$/);
- return match ? match[1] : null;
-}
-
-function App() {
- const previewPath = getPreviewPath();
-
- if (previewPath) {
- return (
-
- );
- }
-
- return ;
-}
-
-export default App;
diff --git a/artifacts/mockup-sandbox/src/components/ui/accordion.tsx b/artifacts/mockup-sandbox/src/components/ui/accordion.tsx
deleted file mode 100644
index e1797c9..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/accordion.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import * as React from "react"
-import * as AccordionPrimitive from "@radix-ui/react-accordion"
-import { ChevronDown } from "lucide-react"
-
-import { cn } from "@/lib/utils"
-
-const Accordion = AccordionPrimitive.Root
-
-const AccordionItem = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AccordionItem.displayName = "AccordionItem"
-
-const AccordionTrigger = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
- svg]:rotate-180",
- className
- )}
- {...props}
- >
- {children}
-
-
-
-))
-AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
-
-const AccordionContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
- {children}
-
-))
-AccordionContent.displayName = AccordionPrimitive.Content.displayName
-
-export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
diff --git a/artifacts/mockup-sandbox/src/components/ui/alert-dialog.tsx b/artifacts/mockup-sandbox/src/components/ui/alert-dialog.tsx
deleted file mode 100644
index fa2b442..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/alert-dialog.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import * as React from "react"
-import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
-
-import { cn } from "@/lib/utils"
-import { buttonVariants } from "@/components/ui/button"
-
-const AlertDialog = AlertDialogPrimitive.Root
-
-const AlertDialogTrigger = AlertDialogPrimitive.Trigger
-
-const AlertDialogPortal = AlertDialogPrimitive.Portal
-
-const AlertDialogOverlay = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
-
-const AlertDialogContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-
-))
-AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
-
-const AlertDialogHeader = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-)
-AlertDialogHeader.displayName = "AlertDialogHeader"
-
-const AlertDialogFooter = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-)
-AlertDialogFooter.displayName = "AlertDialogFooter"
-
-const AlertDialogTitle = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
-
-const AlertDialogDescription = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AlertDialogDescription.displayName =
- AlertDialogPrimitive.Description.displayName
-
-const AlertDialogAction = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
-
-const AlertDialogCancel = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
-
-export {
- AlertDialog,
- AlertDialogPortal,
- AlertDialogOverlay,
- AlertDialogTrigger,
- AlertDialogContent,
- AlertDialogHeader,
- AlertDialogFooter,
- AlertDialogTitle,
- AlertDialogDescription,
- AlertDialogAction,
- AlertDialogCancel,
-}
diff --git a/artifacts/mockup-sandbox/src/components/ui/alert.tsx b/artifacts/mockup-sandbox/src/components/ui/alert.tsx
deleted file mode 100644
index 5afd41d..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/alert.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import * as React from "react"
-import { cva, type VariantProps } from "class-variance-authority"
-
-import { cn } from "@/lib/utils"
-
-const alertVariants = cva(
- "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
- {
- variants: {
- variant: {
- default: "bg-background text-foreground",
- destructive:
- "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
- },
- },
- defaultVariants: {
- variant: "default",
- },
- }
-)
-
-const Alert = React.forwardRef<
- HTMLDivElement,
- React.HTMLAttributes & VariantProps
->(({ className, variant, ...props }, ref) => (
-
-))
-Alert.displayName = "Alert"
-
-const AlertTitle = React.forwardRef<
- HTMLParagraphElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-))
-AlertTitle.displayName = "AlertTitle"
-
-const AlertDescription = React.forwardRef<
- HTMLParagraphElement,
- React.HTMLAttributes
->(({ className, ...props }, ref) => (
-
-))
-AlertDescription.displayName = "AlertDescription"
-
-export { Alert, AlertTitle, AlertDescription }
diff --git a/artifacts/mockup-sandbox/src/components/ui/aspect-ratio.tsx b/artifacts/mockup-sandbox/src/components/ui/aspect-ratio.tsx
deleted file mode 100644
index c4abbf3..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/aspect-ratio.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
-
-const AspectRatio = AspectRatioPrimitive.Root
-
-export { AspectRatio }
diff --git a/artifacts/mockup-sandbox/src/components/ui/avatar.tsx b/artifacts/mockup-sandbox/src/components/ui/avatar.tsx
deleted file mode 100644
index 51e507b..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/avatar.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-"use client"
-
-import * as React from "react"
-import * as AvatarPrimitive from "@radix-ui/react-avatar"
-
-import { cn } from "@/lib/utils"
-
-const Avatar = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-Avatar.displayName = AvatarPrimitive.Root.displayName
-
-const AvatarImage = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AvatarImage.displayName = AvatarPrimitive.Image.displayName
-
-const AvatarFallback = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
-
-export { Avatar, AvatarImage, AvatarFallback }
diff --git a/artifacts/mockup-sandbox/src/components/ui/badge.tsx b/artifacts/mockup-sandbox/src/components/ui/badge.tsx
deleted file mode 100644
index cfd176a..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/badge.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as React from "react"
-import { cva, type VariantProps } from "class-variance-authority"
-
-import { cn } from "@/lib/utils"
-
-const badgeVariants = cva(
- "whitespace-nowrap inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2" +
- " hover-elevate ",
- {
- variants: {
- variant: {
- default:
- "border-transparent bg-primary text-primary-foreground shadow-xs",
- secondary:
- "border-transparent bg-secondary text-secondary-foreground",
- destructive:
- "border-transparent bg-destructive text-destructive-foreground shadow-xs",
- outline: "text-foreground border [border-color:var(--badge-outline)]",
- },
- },
- defaultVariants: {
- variant: "default",
- },
- }
-)
-
-export interface BadgeProps
- extends React.HTMLAttributes,
- VariantProps {}
-
-function Badge({ className, variant, ...props }: BadgeProps) {
- return (
-
- )
-}
-
-export { Badge, badgeVariants }
diff --git a/artifacts/mockup-sandbox/src/components/ui/breadcrumb.tsx b/artifacts/mockup-sandbox/src/components/ui/breadcrumb.tsx
deleted file mode 100644
index 60e6c96..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/breadcrumb.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import * as React from "react"
-import { Slot } from "@radix-ui/react-slot"
-import { ChevronRight, MoreHorizontal } from "lucide-react"
-
-import { cn } from "@/lib/utils"
-
-const Breadcrumb = React.forwardRef<
- HTMLElement,
- React.ComponentPropsWithoutRef<"nav"> & {
- separator?: React.ReactNode
- }
->(({ ...props }, ref) => )
-Breadcrumb.displayName = "Breadcrumb"
-
-const BreadcrumbList = React.forwardRef<
- HTMLOListElement,
- React.ComponentPropsWithoutRef<"ol">
->(({ className, ...props }, ref) => (
-
-))
-BreadcrumbList.displayName = "BreadcrumbList"
-
-const BreadcrumbItem = React.forwardRef<
- HTMLLIElement,
- React.ComponentPropsWithoutRef<"li">
->(({ className, ...props }, ref) => (
-
-))
-BreadcrumbItem.displayName = "BreadcrumbItem"
-
-const BreadcrumbLink = React.forwardRef<
- HTMLAnchorElement,
- React.ComponentPropsWithoutRef<"a"> & {
- asChild?: boolean
- }
->(({ asChild, className, ...props }, ref) => {
- const Comp = asChild ? Slot : "a"
-
- return (
-
- )
-})
-BreadcrumbLink.displayName = "BreadcrumbLink"
-
-const BreadcrumbPage = React.forwardRef<
- HTMLSpanElement,
- React.ComponentPropsWithoutRef<"span">
->(({ className, ...props }, ref) => (
-
-))
-BreadcrumbPage.displayName = "BreadcrumbPage"
-
-const BreadcrumbSeparator = ({
- children,
- className,
- ...props
-}: React.ComponentProps<"li">) => (
- svg]:w-3.5 [&>svg]:h-3.5", className)}
- {...props}
- >
- {children ?? }
-
-)
-BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
-
-const BreadcrumbEllipsis = ({
- className,
- ...props
-}: React.ComponentProps<"span">) => (
-
-
- More
-
-)
-BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"
-
-export {
- Breadcrumb,
- BreadcrumbList,
- BreadcrumbItem,
- BreadcrumbLink,
- BreadcrumbPage,
- BreadcrumbSeparator,
- BreadcrumbEllipsis,
-}
diff --git a/artifacts/mockup-sandbox/src/components/ui/button-group.tsx b/artifacts/mockup-sandbox/src/components/ui/button-group.tsx
deleted file mode 100644
index d6e7801..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/button-group.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { Slot } from "@radix-ui/react-slot"
-import { cva, type VariantProps } from "class-variance-authority"
-
-import { cn } from "@/lib/utils"
-import { Separator } from "@/components/ui/separator"
-
-const buttonGroupVariants = cva(
- "flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
- {
- variants: {
- orientation: {
- horizontal:
- "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
- vertical:
- "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none",
- },
- },
- defaultVariants: {
- orientation: "horizontal",
- },
- }
-)
-
-function ButtonGroup({
- className,
- orientation,
- ...props
-}: React.ComponentProps<"div"> & VariantProps) {
- return (
-
- )
-}
-
-function ButtonGroupText({
- className,
- asChild = false,
- ...props
-}: React.ComponentProps<"div"> & {
- asChild?: boolean
-}) {
- const Comp = asChild ? Slot : "div"
-
- return (
-
- )
-}
-
-function ButtonGroupSeparator({
- className,
- orientation = "vertical",
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
-
-export {
- ButtonGroup,
- ButtonGroupSeparator,
- ButtonGroupText,
- buttonGroupVariants,
-}
diff --git a/artifacts/mockup-sandbox/src/components/ui/button.tsx b/artifacts/mockup-sandbox/src/components/ui/button.tsx
deleted file mode 100644
index a471859..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/button.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import * as React from "react"
-import { Slot } from "@radix-ui/react-slot"
-import { cva, type VariantProps } from "class-variance-authority"
-
-import { cn } from "@/lib/utils"
-
-const buttonVariants = cva(
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0" +
-" hover-elevate active-elevate-2",
- {
- variants: {
- variant: {
- default:
- "bg-primary text-primary-foreground border border-primary-border",
- destructive:
- "bg-destructive text-destructive-foreground shadow-sm border-destructive-border",
- outline:
- "border [border-color:var(--button-outline)] shadow-xs active:shadow-none",
- secondary:
- "border bg-secondary text-secondary-foreground border border-secondary-border",
- ghost: "border border-transparent",
- link: "text-primary underline-offset-4 hover:underline",
- },
- size: {
- default: "min-h-9 px-4 py-2",
- sm: "min-h-8 rounded-md px-3 text-xs",
- lg: "min-h-10 rounded-md px-8",
- icon: "h-9 w-9",
- },
- },
- defaultVariants: {
- variant: "default",
- size: "default",
- },
- }
-)
-
-export interface ButtonProps
- extends React.ButtonHTMLAttributes,
- VariantProps {
- asChild?: boolean
-}
-
-const Button = React.forwardRef(
- ({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : "button"
- return (
-
- )
- }
-)
-Button.displayName = "Button"
-
-export { Button, buttonVariants }
diff --git a/artifacts/mockup-sandbox/src/components/ui/calendar.tsx b/artifacts/mockup-sandbox/src/components/ui/calendar.tsx
deleted file mode 100644
index a623682..0000000
--- a/artifacts/mockup-sandbox/src/components/ui/calendar.tsx
+++ /dev/null
@@ -1,213 +0,0 @@
-"use client"
-
-import * as React from "react"
-import {
- ChevronDownIcon,
- ChevronLeftIcon,
- ChevronRightIcon,
-} from "lucide-react"
-import { DayButton, DayPicker, getDefaultClassNames } from "react-day-picker"
-
-import { cn } from "@/lib/utils"
-import { Button, buttonVariants } from "@/components/ui/button"
-
-function Calendar({
- className,
- classNames,
- showOutsideDays = true,
- captionLayout = "label",
- buttonVariant = "ghost",
- formatters,
- components,
- ...props
-}: React.ComponentProps & {
- buttonVariant?: React.ComponentProps["variant"]
-}) {
- const defaultClassNames = getDefaultClassNames()
-
- return (
- svg]:rotate-180`,
- String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
- className
- )}
- captionLayout={captionLayout}
- formatters={{
- formatMonthDropdown: (date) =>
- date.toLocaleString("default", { month: "short" }),
- ...formatters,
- }}
- classNames={{
- root: cn("w-fit", defaultClassNames.root),
- months: cn(
- "relative flex flex-col gap-4 md:flex-row",
- defaultClassNames.months
- ),
- month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
- nav: cn(
- "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
- defaultClassNames.nav
- ),
- button_previous: cn(
- buttonVariants({ variant: buttonVariant }),
- "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
- defaultClassNames.button_previous
- ),
- button_next: cn(
- buttonVariants({ variant: buttonVariant }),
- "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
- defaultClassNames.button_next
- ),
- month_caption: cn(
- "flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",
- defaultClassNames.month_caption
- ),
- dropdowns: cn(
- "flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",
- defaultClassNames.dropdowns
- ),
- dropdown_root: cn(
- "has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",
- defaultClassNames.dropdown_root
- ),
- dropdown: cn(
- "bg-popover absolute inset-0 opacity-0",
- defaultClassNames.dropdown
- ),
- caption_label: cn(
- "select-none font-medium",
- captionLayout === "label"
- ? "text-sm"
- : "[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",
- defaultClassNames.caption_label
- ),
- table: "w-full border-collapse",
- weekdays: cn("flex", defaultClassNames.weekdays),
- weekday: cn(
- "text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",
- defaultClassNames.weekday
- ),
- week: cn("mt-2 flex w-full", defaultClassNames.week),
- week_number_header: cn(
- "w-[--cell-size] select-none",
- defaultClassNames.week_number_header
- ),
- week_number: cn(
- "text-muted-foreground select-none text-[0.8rem]",
- defaultClassNames.week_number
- ),
- day: cn(
- "group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",
- defaultClassNames.day
- ),
- range_start: cn(
- "bg-accent rounded-l-md",
- defaultClassNames.range_start
- ),
- range_middle: cn("rounded-none", defaultClassNames.range_middle),
- range_end: cn("bg-accent rounded-r-md", defaultClassNames.range_end),
- today: cn(
- "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
- defaultClassNames.today
- ),
- outside: cn(
- "text-muted-foreground aria-selected:text-muted-foreground",
- defaultClassNames.outside
- ),
- disabled: cn(
- "text-muted-foreground opacity-50",
- defaultClassNames.disabled
- ),
- hidden: cn("invisible", defaultClassNames.hidden),
- ...classNames,
- }}
- components={{
- Root: ({ className, rootRef, ...props }) => {
- return (
-
- )
- },
- Chevron: ({ className, orientation, ...props }) => {
- if (orientation === "left") {
- return (
-
- )
- }
-
- if (orientation === "right") {
- return (
-
- )
- }
-
- return (
-
- )
- },
- DayButton: CalendarDayButton,
- WeekNumber: ({ children, ...props }) => {
- return (
-
-
- {children}
-
- |
- )
- },
- ...components,
- }}
- {...props}
- />
- )
-}
-
-function CalendarDayButton({
- className,
- day,
- modifiers,
- ...props
-}: React.ComponentProps) {
- const defaultClassNames = getDefaultClassNames()
-
- const ref = React.useRef(null)
- React.useEffect(() => {
- if (modifiers.focused) ref.current?.focus()
- }, [modifiers.focused])
-
- return (
-