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) =>