reend-components 0.1.0 → 0.2.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.
- package/README.md +106 -8
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.ts +100 -0
- package/dist/lib/index.mjs +669 -142
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/style.css +1 -1
- package/package.json +33 -13
- package/src/styles/variables.css +71 -1
- package/src/tailwind-preset.ts +189 -2
package/dist/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster, toast };\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/signature/glitch-text.tsx","../../src/components/ui/signature/diamond-loader.tsx","../../src/components/ui/signature/tactical-panel.tsx","../../src/components/ui/signature/holo-card.tsx","../../src/components/ui/signature/data-stream.tsx","../../src/components/ui/signature/tactical-badge.tsx","../../src/components/ui/signature/warning-banner.tsx","../../src/components/ui/signature/scan-divider.tsx","../../src/components/ui/signature/coordinate-tag.tsx","../../src/components/ui/signature/radar-chart.tsx","../../src/components/ui/signature/hud-overlay.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster, toast };\n","import * as React from \"react\";\n\nexport interface GlitchTextProps {\n children: string;\n className?: string;\n}\n\nexport const GlitchText = React.forwardRef<HTMLSpanElement, GlitchTextProps>(\n ({ children, className = \"\" }, ref) => (\n <span ref={ref} className={`relative inline-block ${className}`}>\n <span className=\"relative z-10\">{children}</span>\n <span\n aria-hidden\n className=\"absolute inset-0 text-ef-cyan opacity-70 animate-glitch\"\n style={{\n clipPath: \"inset(20% 0 50% 0)\",\n transform: \"translate(-2px, 0)\",\n }}\n >\n {children}\n </span>\n <span\n aria-hidden\n className=\"absolute inset-0 text-ef-red opacity-70 animate-glitch\"\n style={{\n clipPath: \"inset(50% 0 20% 0)\",\n transform: \"translate(2px, 0)\",\n animationDelay: \"0.1s\",\n }}\n >\n {children}\n </span>\n </span>\n ),\n);\nGlitchText.displayName = \"GlitchText\";\n","import * as React from \"react\";\n\nexport interface DiamondLoaderProps {\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n className?: string;\n}\n\nconst SIZE_MAP = { sm: 16, md: 28, lg: 44 } as const;\n\nexport const DiamondLoader = React.forwardRef<\n HTMLDivElement,\n DiamondLoaderProps\n>(({ size = \"md\", label, className }, ref) => {\n const s = SIZE_MAP[size];\n return (\n <div\n ref={ref}\n className={`flex flex-col items-center gap-3${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"relative\" style={{ width: s * 2, height: s * 2 }}>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"absolute inset-0 border-2 border-primary\"\n style={{\n transform: `rotate(45deg) scale(${1 - i * 0.25})`,\n animation: `diamondSpin ${1.2 + i * 0.4}s linear infinite${i === 1 ? \" reverse\" : \"\"}`,\n opacity: 1 - i * 0.25,\n }}\n />\n ))}\n </div>\n {label && (\n <span className=\"font-mono text-xs text-muted-foreground tracking-[0.15em] uppercase\">\n {label}\n </span>\n )}\n </div>\n );\n});\nDiamondLoader.displayName = \"DiamondLoader\";\n","import * as React from \"react\";\nimport { Crosshair } from \"lucide-react\";\n\nexport interface TacticalPanelProps {\n title: string;\n status?: \"online\" | \"warning\" | \"offline\" | \"scanning\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n online: \"ONLINE\",\n warning: \"CAUTION\",\n offline: \"OFFLINE\",\n scanning: \"SCANNING\",\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"bg-ef-green\",\n warning: \"bg-ef-yellow\",\n offline: \"bg-ef-red\",\n scanning: \"bg-ef-cyan animate-pulse\",\n};\n\nexport const TacticalPanel = React.forwardRef<\n HTMLDivElement,\n TacticalPanelProps\n>(({ title, status = \"online\", children, className }, ref) => (\n <div\n ref={ref}\n className={`relative border border-border bg-surface-1 scanline-overlay${className ? ` ${className}` : \"\"}`}\n >\n {/* HUD Header */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0\">\n <div className=\"flex items-center gap-3\">\n <Crosshair className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-foreground\">\n {title}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <div\n className={`w-2 h-2 ${STATUS_COLORS[status]}`}\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground\">\n {STATUS_LABELS[status]}\n </span>\n </div>\n </div>\n {/* Corner accents */}\n <div className=\"absolute top-0 left-0 w-6 h-6 border-t-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute top-0 right-0 w-6 h-6 border-t-2 border-r-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 left-0 w-6 h-6 border-b-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 right-0 w-6 h-6 border-b-2 border-r-2 border-primary/40 pointer-events-none\" />\n {/* Content */}\n <div className=\"p-5\">{children}</div>\n </div>\n));\nTacticalPanel.displayName = \"TacticalPanel\";\n","import * as React from \"react\";\n\nexport interface HoloCardProps {\n title: string;\n subtitle: string;\n icon: React.ElementType;\n value?: string;\n className?: string;\n}\n\nexport const HoloCard = React.forwardRef<HTMLDivElement, HoloCardProps>(\n ({ title, subtitle, icon: Icon, value, className }, ref) => {\n const [hovering, setHovering] = React.useState(false);\n return (\n <div\n ref={ref}\n className={`relative clip-corner border border-border bg-surface-1 p-6 overflow-hidden group cursor-pointer transition-all duration-500 hover:border-primary/30${className ? ` ${className}` : \"\"}`}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n {/* Scan line */}\n <div\n className=\"absolute left-0 right-0 h-px bg-gradient-to-r from-transparent via-primary/60 to-transparent pointer-events-none transition-all\"\n style={{\n top: hovering ? \"100%\" : \"-10%\",\n opacity: hovering ? 1 : 0,\n transitionDuration: \"2000ms\",\n }}\n />\n {/* Holographic shimmer */}\n <div\n className=\"absolute inset-0 pointer-events-none transition-opacity duration-500\"\n style={{\n background:\n \"linear-gradient(135deg, transparent 0%, hsl(var(--primary) / 0.03) 40%, transparent 60%)\",\n opacity: hovering ? 1 : 0,\n }}\n />\n <div className=\"relative z-10\">\n <Icon className=\"w-5 h-5 text-primary mb-4 group-hover:drop-shadow-[0_0_8px_hsl(var(--primary)/0.5)] transition-all\" />\n {value && (\n <p className=\"font-display text-3xl font-bold text-primary mb-1\">\n {value}\n </p>\n )}\n <h4 className=\"font-display text-sm font-bold tracking-[0.05em] uppercase text-foreground mb-1\">\n {title}\n </h4>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n {/* Bottom diamond */}\n <div className=\"absolute bottom-3 right-3 text-primary/20 group-hover:text-primary/60 transition-colors text-xs\">\n ◆\n </div>\n </div>\n );\n },\n);\nHoloCard.displayName = \"HoloCard\";\n","import * as React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Terminal } from \"lucide-react\";\n\nconst DEFAULT_MESSAGES = [\n \"[SYS] Initializing ENDFIELD protocol...\",\n \"[NET] Connection established — latency: 12ms\",\n \"[SEC] Authentication verified ◆ Level: ALPHA\",\n \"[DAT] Loading design tokens: 94 variables mapped\",\n \"[GPU] Render pipeline: Optimized (60fps locked)\",\n \"[SYS] Component registry: 70 modules online\",\n \"[NET] Sync complete — all nodes operational\",\n \"[DAT] Color system: HSL-based, 9 neutrals, 9 accents\",\n \"[SEC] Encryption: AES-256 ◆ Status: ACTIVE\",\n \"[SYS] ENDFIELD DESIGN SYSTEM v2.0 ◆ READY\",\n];\n\nexport interface DataStreamProps {\n messages?: string[];\n className?: string;\n}\n\nexport const DataStream = React.forwardRef<HTMLDivElement, DataStreamProps>(\n ({ messages = DEFAULT_MESSAGES, className }, ref) => {\n const [lines, setLines] = React.useState<string[]>([]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n let i = 0;\n const interval = setInterval(() => {\n setLines((prev) => {\n const next = [...prev, messages[i % messages.length]];\n return next.length > 8 ? next.slice(-8) : next;\n });\n i++;\n }, 1200);\n return () => clearInterval(interval);\n }, [messages]);\n\n React.useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [lines]);\n\n return (\n <div\n ref={ref}\n className={`border border-border bg-background clip-corner overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-border bg-surface-0\">\n <Terminal className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground uppercase\">\n LIVE FEED\n </span>\n <div className=\"ml-auto flex items-center gap-1.5\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green animate-pulse\"\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[10px] text-ef-green\">ACTIVE</span>\n </div>\n </div>\n <div\n ref={containerRef}\n className=\"p-4 h-48 overflow-y-auto font-mono text-xs space-y-1\"\n >\n <AnimatePresence>\n {lines.map((line, i) => (\n <motion.div\n key={`${line}-${i}`}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n className={\n line.includes(\"[SEC]\")\n ? \"text-ef-green\"\n : line.includes(\"[NET]\")\n ? \"text-ef-blue\"\n : line.includes(\"[DAT]\")\n ? \"text-ef-cyan\"\n : line.includes(\"[GPU]\")\n ? \"text-ef-purple\"\n : \"text-muted-foreground\"\n }\n >\n {line}\n </motion.div>\n ))}\n </AnimatePresence>\n <span className=\"inline-block w-2 h-4 bg-primary animate-cursor-blink\" />\n </div>\n </div>\n );\n },\n);\nDataStream.displayName = \"DataStream\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nexport const tacticalBadgeVariants = cva(\n \"inline-flex items-center gap-1.5 clip-corner-sm border px-3 py-1 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n {\n variants: {\n variant: {\n default: \"border-primary/40 text-primary bg-primary/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-yellow/40 text-ef-yellow bg-ef-yellow/10\",\n danger: \"border-ef-red/40 text-ef-red bg-ef-red/10\",\n info: \"border-ef-cyan/40 text-ef-cyan bg-ef-cyan/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface TacticalBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof tacticalBadgeVariants> {}\n\nexport const TacticalBadge = React.forwardRef<\n HTMLSpanElement,\n TacticalBadgeProps\n>(({ variant, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(tacticalBadgeVariants({ variant }), className)}\n {...props}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {children}\n </span>\n));\nTacticalBadge.displayName = \"TacticalBadge\";\n","import * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\n\nexport interface WarningBannerProps {\n level?: \"caution\" | \"alert\" | \"critical\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst WARNING_STYLES = {\n caution: {\n border: \"border-ef-yellow/30\",\n bg: \"bg-ef-yellow/5\",\n icon: \"text-ef-yellow\",\n label: \"CAUTION\",\n },\n alert: {\n border: \"border-ef-orange/30\",\n bg: \"bg-ef-orange/5\",\n icon: \"text-ef-orange\",\n label: \"ALERT\",\n },\n critical: {\n border: \"border-ef-red/30\",\n bg: \"bg-ef-red/5\",\n icon: \"text-ef-red\",\n label: \"CRITICAL\",\n },\n} as const;\n\nexport const WarningBanner = React.forwardRef<\n HTMLDivElement,\n WarningBannerProps\n>(({ level = \"caution\", children, className }, ref) => {\n const s = WARNING_STYLES[level];\n return (\n <div\n ref={ref}\n className={`clip-corner border ${s.border} ${s.bg} p-4 flex items-start gap-3${className ? ` ${className}` : \"\"}`}\n >\n <AlertTriangle className={`w-5 h-5 ${s.icon} shrink-0 mt-0.5`} />\n <div>\n <span\n className={`font-display text-[11px] font-bold tracking-[0.15em] ${s.icon}`}\n >\n {s.label}\n </span>\n <p className=\"text-sm text-muted-foreground mt-1\">{children}</p>\n </div>\n </div>\n );\n});\nWarningBanner.displayName = \"WarningBanner\";\n","import * as React from \"react\";\n\nexport interface ScanDividerProps {\n label?: string;\n className?: string;\n}\n\nexport const ScanDivider = React.forwardRef<HTMLDivElement, ScanDividerProps>(\n ({ label, className }, ref) => (\n <div\n ref={ref}\n className={`relative flex items-center gap-4 py-2${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n {label && (\n <span className=\"font-display text-[10px] font-bold tracking-[0.2em] uppercase text-primary/60 flex items-center gap-2\">\n <span style={{ fontSize: \"6px\" }}>◆</span> {label}{\" \"}\n <span style={{ fontSize: \"6px\" }}>◆</span>\n </span>\n )}\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n </div>\n ),\n);\nScanDivider.displayName = \"ScanDivider\";\n","import * as React from \"react\";\n\nexport interface CoordinateTagProps {\n label: string;\n value: string;\n unit?: string;\n className?: string;\n}\n\nexport const CoordinateTag = React.forwardRef<\n HTMLDivElement,\n CoordinateTagProps\n>(({ label, value, unit, className }, ref) => (\n <div\n ref={ref}\n className={`inline-flex items-center border border-border bg-surface-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <span className=\"font-mono text-[10px] tracking-[0.1em] uppercase text-muted-foreground bg-surface-2 px-2.5 py-1.5 border-r border-border\">\n {label}\n </span>\n <span className=\"font-mono text-xs text-primary px-2.5 py-1.5 font-bold\">\n {value}\n </span>\n {unit && (\n <span className=\"font-mono text-[10px] text-muted-foreground pr-2.5\">\n {unit}\n </span>\n )}\n </div>\n));\nCoordinateTag.displayName = \"CoordinateTag\";\n","import * as React from \"react\";\nimport { motion, useInView } from \"framer-motion\";\n\nexport interface RadarChartDataPoint {\n label: string;\n value: number;\n}\n\nexport interface RadarChartProps {\n data: RadarChartDataPoint[];\n size?: number;\n color?: \"primary\" | \"cyan\";\n className?: string;\n}\n\nexport const RadarChart = React.forwardRef<HTMLDivElement, RadarChartProps>(\n ({ data, size = 260, color = \"primary\", className }, forwardedRef) => {\n // useInView requires a RefObject — maintain an internal ref and merge with\n // the forwarded ref via a callback so both are kept in sync.\n const innerRef = React.useRef<HTMLDivElement>(null);\n const isInView = useInView(innerRef, { once: true });\n\n const mergeRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el;\n }\n },\n [forwardedRef],\n );\n\n const cx = size / 2;\n const cy = size / 2;\n const r = size * 0.38;\n const levels = 4;\n const n = data.length;\n const angleStep = (Math.PI * 2) / n;\n\n const colorVar = color === \"cyan\" ? \"--ef-cyan\" : \"--primary\";\n\n const getPoint = (i: number, radius: number) => ({\n x: cx + radius * Math.sin(i * angleStep),\n y: cy - radius * Math.cos(i * angleStep),\n });\n\n const gridPolygons = Array.from({ length: levels }, (_, level) => {\n const lr = r * ((level + 1) / levels);\n return data\n .map((_, i) => getPoint(i, lr))\n .map((p) => `${p.x},${p.y}`)\n .join(\" \");\n });\n\n const dataPoints = data.map((d, i) => getPoint(i, (d.value / 100) * r));\n const dataPath = dataPoints.map((p) => `${p.x},${p.y}`).join(\" \");\n const centerPath = data.map(() => `${cx},${cy}`).join(\" \");\n\n return (\n <div\n ref={mergeRef}\n className={`flex flex-col items-center w-full${className ? ` ${className}` : \"\"}`}\n >\n <svg\n viewBox={`0 0 ${size} ${size}`}\n className=\"w-full max-w-[260px] h-auto overflow-visible\"\n >\n {/* Grid rings */}\n {gridPolygons.map((pts, i) => (\n <polygon\n key={i}\n points={pts}\n fill=\"none\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.5}\n />\n ))}\n {/* Axes */}\n {data.map((_, i) => {\n const p = getPoint(i, r);\n return (\n <line\n key={i}\n x1={cx}\n y1={cy}\n x2={p.x}\n y2={p.y}\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.3}\n />\n );\n })}\n {/* Data area */}\n <motion.polygon\n points={isInView ? dataPath : centerPath}\n fill={`hsl(var(${colorVar}) / 0.15)`}\n stroke={`hsl(var(${colorVar}))`}\n strokeWidth={2}\n initial={false}\n animate={{ points: isInView ? dataPath : centerPath }}\n transition={{ duration: 0.8, ease: [0.25, 0.8, 0.25, 1] }}\n style={{\n filter: `drop-shadow(0 0 8px hsl(var(${colorVar}) / 0.3))`,\n }}\n />\n {/* Data points */}\n {dataPoints.map((p, i) => (\n <motion.circle\n key={i}\n cx={cx}\n cy={cy}\n r={4}\n fill={`hsl(var(${colorVar}))`}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n initial={false}\n animate={{ cx: isInView ? p.x : cx, cy: isInView ? p.y : cy }}\n transition={{ duration: 0.8, delay: i * 0.05 }}\n style={{\n filter: `drop-shadow(0 0 4px hsl(var(${colorVar}) / 0.5))`,\n }}\n />\n ))}\n {/* Labels */}\n {data.map((d, i) => {\n const p = getPoint(i, r + 20);\n return (\n <text\n key={i}\n x={p.x}\n y={p.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"font-display text-[9px] font-bold tracking-[0.1em] uppercase\"\n fill=\"hsl(var(--muted-foreground))\"\n >\n {d.label}\n </text>\n );\n })}\n </svg>\n </div>\n );\n },\n);\nRadarChart.displayName = \"RadarChart\";\n","import * as React from \"react\";\n\nexport interface HUDOverlayProps {\n children?: React.ReactNode;\n systemLabel?: string;\n lat?: string;\n lon?: string;\n showCoords?: boolean;\n showCrosshair?: boolean;\n className?: string;\n}\n\nexport const HUDOverlay = React.forwardRef<HTMLDivElement, HUDOverlayProps>(\n (\n {\n children,\n systemLabel = \"SYS::ENDFIELD v2.0\",\n lat = \"LAT 37.7749°N\",\n lon = \"LON 122.4194°W\",\n showCoords = true,\n showCrosshair = true,\n className,\n },\n ref,\n ) => {\n const [time, setTime] = React.useState(\"\");\n\n React.useEffect(() => {\n const tick = () => setTime(new Date().toLocaleTimeString(\"en-GB\"));\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, []);\n\n return (\n <div\n ref={ref}\n className={`relative border border-border bg-surface-0 aspect-video flex items-center justify-center overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n {/* Scanline overlay */}\n <div className=\"absolute inset-0 scanline-overlay\" />\n {/* Corner brackets */}\n {(\n [\n \"top-3 left-3 border-t-2 border-l-2\",\n \"top-3 right-3 border-t-2 border-r-2\",\n \"bottom-3 left-3 border-b-2 border-l-2\",\n \"bottom-3 right-3 border-b-2 border-r-2\",\n ] as const\n ).map((pos, i) => (\n <div\n key={i}\n className={`absolute w-8 h-8 ${pos} border-primary/40 pointer-events-none`}\n />\n ))}\n {/* Crosshair */}\n {showCrosshair && (\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\">\n <div\n className=\"w-6 h-px bg-primary/20\"\n style={{ position: \"absolute\", top: \"50%\", left: \"-12px\" }}\n />\n <div\n className=\"h-6 w-px bg-primary/20\"\n style={{ position: \"absolute\", left: \"50%\", top: \"-12px\" }}\n />\n </div>\n )}\n {/* Top-left: system label + live time */}\n {showCoords && (\n <div className=\"absolute top-4 left-12 font-mono text-[9px] text-muted-foreground/60 space-y-0.5\">\n <div>{systemLabel}</div>\n <div className=\"text-primary/60\">{time}</div>\n </div>\n )}\n {/* Top-right: coordinates */}\n {showCoords && (\n <div className=\"absolute top-4 right-12 font-mono text-[9px] text-muted-foreground/60 text-right space-y-0.5\">\n <div>{lat}</div>\n <div>{lon}</div>\n </div>\n )}\n {/* Bottom status bar */}\n <div className=\"absolute bottom-4 left-12 right-12 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green\"\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n <span className=\"font-mono text-[9px] text-ef-green/80\">\n LINK ACTIVE\n </span>\n </div>\n <div className=\"flex gap-4\">\n {[\"FPS:60\", \"MEM:47%\", \"NET:12ms\"].map((s) => (\n <span\n key={s}\n className=\"font-mono text-[9px] text-muted-foreground/50\"\n >\n {s}\n </span>\n ))}\n </div>\n </div>\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n },\n);\nHUDOverlay.displayName = \"HUDOverlay\";\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner","GlitchText","children","SIZE_MAP","DiamondLoader","size","label","i","STATUS_LABELS","STATUS_COLORS","TacticalPanel","status","Crosshair","HoloCard","subtitle","Icon","value","hovering","setHovering","DEFAULT_MESSAGES","DataStream","messages","lines","setLines","containerRef","interval","prev","next","Terminal","AnimatePresence","line","motion","tacticalBadgeVariants","TacticalBadge","WARNING_STYLES","WarningBanner","level","AlertTriangle","ScanDivider","CoordinateTag","unit","RadarChart","data","color","forwardedRef","innerRef","isInView","useInView","mergeRef","el","cx","cy","r","levels","n","angleStep","colorVar","getPoint","radius","gridPolygons","_","lr","p","dataPoints","dataPath","centerPath","pts","HUDOverlay","systemLabel","lat","lon","showCoords","showCrosshair","time","setTime","tick","pos","s"],"mappings":"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"}
|
package/dist/lib/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--ef-black: 0 0% 4%;--ef-black-soft: 0 0% 6.7%;--ef-black-muted: 0 0% 10%;--ef-dark-gray: 0 0% 13.3%;--ef-gray: 0 0% 20%;--ef-gray-mid: 0 0% 40%;--ef-gray-light: 0 0% 60%;--ef-white-muted: 0 0% 80%;--ef-white-soft: 0 0% 87.8%;--ef-white: 0 0% 94.1%;--ef-pure-white: 0 0% 100%;--ef-yellow: 48 100% 58%;--ef-yellow-dark: 48 85% 39%;--ef-
|
|
1
|
+
:root{--ef-black: 0 0% 4%;--ef-black-soft: 0 0% 6.7%;--ef-black-muted: 0 0% 10%;--ef-dark-gray: 0 0% 13.3%;--ef-gray: 0 0% 20%;--ef-gray-mid: 0 0% 40%;--ef-gray-light: 0 0% 60%;--ef-white-muted: 0 0% 80%;--ef-white-soft: 0 0% 87.8%;--ef-white: 0 0% 94.1%;--ef-pure-white: 0 0% 100%;--ef-yellow: 48 100% 58%;--ef-yellow-dark: 48 85% 39%;--ef-blue: 201 66% 58%;--ef-blue-light: 196 64% 69%;--ef-blue-dark: 202 56% 38%;--ef-cyan: 186 100% 50%;--ef-red: 355 100% 64%;--ef-green: 145 67% 51%;--ef-orange: 39 100% 50%;--ef-purple: 270 77% 64%;--background: 0 0% 4%;--foreground: 0 0% 94.1%;--card: 0 0% 7.8%;--card-foreground: 0 0% 87.8%;--popover: 0 0% 10%;--popover-foreground: 0 0% 87.8%;--primary: 48 100% 58%;--primary-foreground: 0 0% 4%;--secondary: 0 0% 10%;--secondary-foreground: 0 0% 87.8%;--muted: 0 0% 13.3%;--muted-foreground: 0 0% 60%;--accent: 0 0% 10%;--accent-foreground: 48 100% 58%;--destructive: 355 100% 64%;--destructive-foreground: 0 0% 100%;--border: 0 0% 100% / .06;--border-strong: 0 0% 100% / .12;--border-accent: 48 100% 58% / .4;--input: 0 0% 100% / .1;--ring: 48 100% 58%;--radius: 0px;--radius-none: 0px;--radius-sm: 2px;--radius-md: 4px;--surface-canvas: 0 0% 4%;--surface-0: 0 0% 5.9%;--surface-1: 0 0% 7.8%;--surface-2: 0 0% 10%;--surface-3: 0 0% 13.3%;--surface-hover: 0 0% 11.8%;--surface-active: 0 0% 14.5%;--header-height: 64px;--sidebar-width: 280px;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .3);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5), 0 4px 6px -4px rgb(0 0 0 / .4);--shadow-glow: 0 0 20px hsl(var(--primary) / .2);--z-base: 0;--z-dropdown: 10;--z-sticky: 20;--z-overlay: 30;--z-modal: 40;--z-popover: 50;--z-toast: 60;--z-tooltip: 70;--ease-default: cubic-bezier(.25, .8, .25, 1);--ease-bounce: cubic-bezier(.34, 1.56, .64, 1);--ease-sharp: cubic-bezier(.4, 0, .2, 1);--ease-smooth: cubic-bezier(.45, 0, .55, 1);--duration-instant: .1s;--duration-fast: .15s;--duration-normal: .25s;--duration-slow: .4s;--duration-slower: .7s}.light{--ef-black: 0 0% 96%;--ef-black-soft: 0 0% 93%;--ef-black-muted: 0 0% 90%;--ef-dark-gray: 0 0% 87%;--ef-gray: 0 0% 80%;--ef-gray-mid: 0 0% 50%;--ef-gray-light: 0 0% 35%;--ef-white-muted: 0 0% 25%;--ef-white-soft: 0 0% 15%;--ef-white: 0 0% 8%;--ef-pure-white: 0 0% 0%;--ef-yellow: 42 90% 42%;--ef-yellow-dark: 42 85% 30%;--ef-blue-light: 196 50% 55%;--ef-blue-dark: 202 56% 30%;--ef-cyan: 186 80% 35%;--ef-red: 355 85% 48%;--ef-green: 145 60% 38%;--ef-orange: 39 90% 38%;--ef-purple: 270 65% 50%;--background: 0 0% 97%;--foreground: 0 0% 8%;--card: 0 0% 100%;--card-foreground: 0 0% 15%;--popover: 0 0% 100%;--popover-foreground: 0 0% 15%;--primary: 42 90% 42%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 93%;--secondary-foreground: 0 0% 15%;--muted: 0 0% 93%;--muted-foreground: 0 0% 42%;--accent: 0 0% 93%;--accent-foreground: 42 90% 42%;--destructive: 355 80% 50%;--destructive-foreground: 0 0% 100%;--border: 0 0% 0% / .1;--border-strong: 0 0% 0% / .18;--border-accent: 42 90% 42% / .4;--input: 0 0% 0% / .12;--ring: 42 90% 42%;--surface-canvas: 0 0% 97%;--surface-0: 0 0% 95%;--surface-1: 0 0% 100%;--surface-2: 0 0% 97%;--surface-3: 0 0% 93%;--surface-hover: 0 0% 92%;--surface-active: 0 0% 88%;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .08);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .08);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .12), 0 4px 6px -4px rgb(0 0 0 / .08);--shadow-glow: 0 0 20px hsl(var(--primary) / .25)}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reend-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Tactical, sci-fi, and gaming-inspired React component library — Arknights: Endfield Design System",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/lib/index.cjs",
|
|
8
8
|
"module": "./dist/lib/index.mjs",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"default": "./dist/lib/index.mjs"
|
|
15
15
|
},
|
|
16
16
|
"require": {
|
|
17
|
-
"types": "./dist/lib/index.d.
|
|
17
|
+
"types": "./dist/lib/index.d.ts",
|
|
18
18
|
"default": "./dist/lib/index.cjs"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
@@ -54,19 +54,33 @@
|
|
|
54
54
|
"arknights",
|
|
55
55
|
"endfield",
|
|
56
56
|
"typescript",
|
|
57
|
-
"radix-ui"
|
|
57
|
+
"radix-ui",
|
|
58
|
+
"sci-fi",
|
|
59
|
+
"dark-theme",
|
|
60
|
+
"gaming",
|
|
61
|
+
"dashboard",
|
|
62
|
+
"hud"
|
|
58
63
|
],
|
|
59
64
|
"peerDependencies": {
|
|
60
65
|
"react": "^18.0.0 || ^19.0.0",
|
|
61
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
66
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
67
|
+
"framer-motion": ">=10.0.0",
|
|
68
|
+
"lucide-react": ">=0.400.0"
|
|
62
69
|
},
|
|
63
70
|
"peerDependenciesMeta": {
|
|
64
71
|
"tailwindcss": {
|
|
65
72
|
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"framer-motion": {
|
|
75
|
+
"optional": true
|
|
76
|
+
},
|
|
77
|
+
"lucide-react": {
|
|
78
|
+
"optional": true
|
|
66
79
|
}
|
|
67
80
|
},
|
|
68
81
|
"scripts": {
|
|
69
82
|
"dev": "vite",
|
|
83
|
+
"prebuild": "node --experimental-strip-types scripts/generate-llms.ts",
|
|
70
84
|
"build": "vite build",
|
|
71
85
|
"build:dev": "vite build --mode development",
|
|
72
86
|
"build:lib": "vite build --config vite.lib.config.ts",
|
|
@@ -74,6 +88,7 @@
|
|
|
74
88
|
"lint": "eslint .",
|
|
75
89
|
"preview": "vite preview",
|
|
76
90
|
"test": "vitest run",
|
|
91
|
+
"test:coverage": "vitest run --coverage",
|
|
77
92
|
"test:watch": "vitest"
|
|
78
93
|
},
|
|
79
94
|
"dependencies": {
|
|
@@ -81,33 +96,38 @@
|
|
|
81
96
|
"@radix-ui/react-tooltip": "^1.2.7",
|
|
82
97
|
"class-variance-authority": "^0.7.1",
|
|
83
98
|
"clsx": "^2.1.1",
|
|
84
|
-
"framer-motion": "^12.34.0",
|
|
85
|
-
"fuse.js": "^7.1.0",
|
|
86
|
-
"lucide-react": "^0.462.0",
|
|
87
|
-
"react": "^18.3.1",
|
|
88
|
-
"react-dom": "^18.3.1",
|
|
89
|
-
"react-error-boundary": "^6.1.1",
|
|
90
|
-
"react-router-dom": "^6.30.1",
|
|
91
|
-
"shiki": "^3.22.0",
|
|
92
99
|
"sonner": "^1.7.4",
|
|
93
100
|
"tailwind-merge": "^2.6.0",
|
|
94
101
|
"tailwindcss-animate": "^1.0.7"
|
|
95
102
|
},
|
|
96
103
|
"devDependencies": {
|
|
97
104
|
"@eslint/js": "^9.32.0",
|
|
105
|
+
"@testing-library/dom": "^10.4.1",
|
|
98
106
|
"@testing-library/jest-dom": "^6.6.0",
|
|
99
107
|
"@testing-library/react": "^16.0.0",
|
|
100
108
|
"@types/node": "^22.16.5",
|
|
101
109
|
"@types/react": "^18.3.23",
|
|
102
110
|
"@types/react-dom": "^18.3.7",
|
|
103
111
|
"@vitejs/plugin-react-swc": "^3.11.0",
|
|
112
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
104
113
|
"autoprefixer": "^10.4.21",
|
|
105
114
|
"eslint": "^9.32.0",
|
|
106
115
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
107
116
|
"eslint-plugin-react-refresh": "^0.4.20",
|
|
117
|
+
"framer-motion": "^12.34.0",
|
|
118
|
+
"fuse.js": "^7.1.0",
|
|
108
119
|
"globals": "^15.15.0",
|
|
120
|
+
"i18next": "^25.8.10",
|
|
121
|
+
"i18next-browser-languagedetector": "^8.2.1",
|
|
109
122
|
"jsdom": "^20.0.3",
|
|
123
|
+
"lucide-react": "^0.462.0",
|
|
110
124
|
"postcss": "^8.5.6",
|
|
125
|
+
"react": "^18.3.1",
|
|
126
|
+
"react-dom": "^18.3.1",
|
|
127
|
+
"react-error-boundary": "^6.1.1",
|
|
128
|
+
"react-i18next": "^16.5.4",
|
|
129
|
+
"react-router-dom": "^6.30.1",
|
|
130
|
+
"shiki": "^3.22.0",
|
|
111
131
|
"tailwindcss": "^3.4.17",
|
|
112
132
|
"typescript": "^5.8.3",
|
|
113
133
|
"typescript-eslint": "^8.38.0",
|
package/src/styles/variables.css
CHANGED
|
@@ -7,6 +7,22 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Dark mode: default (no class needed)
|
|
9
9
|
* Light mode: add class="light" to <html> or <body>
|
|
10
|
+
*
|
|
11
|
+
* ─── Token Reference: Hex ↔ HSL ────────────────────────────────────────────
|
|
12
|
+
* HSL format is used to enable dynamic opacity modifiers: hsl(var(--token) / 0.3)
|
|
13
|
+
*
|
|
14
|
+
* Token Hex HSL
|
|
15
|
+
* --ef-yellow #FFD429 48 100% 58%
|
|
16
|
+
* --ef-yellow-dark #C28C00 48 85% 39%
|
|
17
|
+
* --ef-blue #4DA8DA 201 66% 58%
|
|
18
|
+
* --ef-blue-light #6BBFE8 196 64% 69%
|
|
19
|
+
* --ef-blue-dark #2A6A8F 202 56% 38%
|
|
20
|
+
* --ef-cyan #00E5FF 186 100% 50%
|
|
21
|
+
* --ef-red #FF4757 355 100% 64%
|
|
22
|
+
* --ef-green #2ED573 145 67% 51%
|
|
23
|
+
* --ef-orange #FFA502 39 100% 50%
|
|
24
|
+
* --ef-purple #A55EEA 270 77% 64%
|
|
25
|
+
* ───────────────────────────────────────────────────────────────────────────
|
|
10
26
|
*/
|
|
11
27
|
|
|
12
28
|
:root {
|
|
@@ -26,7 +42,6 @@
|
|
|
26
42
|
/* Accents */
|
|
27
43
|
--ef-yellow: 48 100% 58%;
|
|
28
44
|
--ef-yellow-dark: 48 85% 39%;
|
|
29
|
-
--ef-yellow-glow: 48 100% 58% / 0.25;
|
|
30
45
|
--ef-blue: 201 66% 58%;
|
|
31
46
|
--ef-blue-light: 196 64% 69%;
|
|
32
47
|
--ef-blue-dark: 202 56% 38%;
|
|
@@ -62,10 +77,15 @@
|
|
|
62
77
|
--destructive-foreground: 0 0% 100%;
|
|
63
78
|
|
|
64
79
|
--border: 0 0% 100% / 0.06;
|
|
80
|
+
--border-strong: 0 0% 100% / 0.12;
|
|
81
|
+
--border-accent: 48 100% 58% / 0.4;
|
|
65
82
|
--input: 0 0% 100% / 0.1;
|
|
66
83
|
--ring: 48 100% 58%;
|
|
67
84
|
|
|
68
85
|
--radius: 0px;
|
|
86
|
+
--radius-none: 0px;
|
|
87
|
+
--radius-sm: 2px;
|
|
88
|
+
--radius-md: 4px;
|
|
69
89
|
|
|
70
90
|
/* ═══ SURFACES ═══ */
|
|
71
91
|
--surface-canvas: 0 0% 4%;
|
|
@@ -75,6 +95,39 @@
|
|
|
75
95
|
--surface-3: 0 0% 13.3%;
|
|
76
96
|
--surface-hover: 0 0% 11.8%;
|
|
77
97
|
--surface-active: 0 0% 14.5%;
|
|
98
|
+
|
|
99
|
+
/* ═══ LAYOUT ═══ */
|
|
100
|
+
--header-height: 64px;
|
|
101
|
+
--sidebar-width: 280px;
|
|
102
|
+
|
|
103
|
+
/* ═══ SHADOWS ═══ */
|
|
104
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
|
|
105
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3);
|
|
106
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4);
|
|
107
|
+
--shadow-glow: 0 0 20px hsl(var(--primary) / 0.2);
|
|
108
|
+
|
|
109
|
+
/* ═══ Z-INDEX ═══ */
|
|
110
|
+
--z-base: 0;
|
|
111
|
+
--z-dropdown: 10;
|
|
112
|
+
--z-sticky: 20;
|
|
113
|
+
--z-overlay: 30;
|
|
114
|
+
--z-modal: 40;
|
|
115
|
+
--z-popover: 50;
|
|
116
|
+
--z-toast: 60;
|
|
117
|
+
--z-tooltip: 70;
|
|
118
|
+
|
|
119
|
+
/* ═══ ANIMATION — EASING ═══ */
|
|
120
|
+
--ease-default: cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
121
|
+
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
122
|
+
--ease-sharp: cubic-bezier(0.4, 0, 0.2, 1);
|
|
123
|
+
--ease-smooth: cubic-bezier(0.45, 0, 0.55, 1);
|
|
124
|
+
|
|
125
|
+
/* ═══ ANIMATION — DURATION ═══ */
|
|
126
|
+
--duration-instant: 100ms;
|
|
127
|
+
--duration-fast: 150ms;
|
|
128
|
+
--duration-normal: 250ms;
|
|
129
|
+
--duration-slow: 400ms;
|
|
130
|
+
--duration-slower: 700ms;
|
|
78
131
|
}
|
|
79
132
|
|
|
80
133
|
/* ═══ LIGHT MODE ═══ */
|
|
@@ -94,6 +147,15 @@
|
|
|
94
147
|
--ef-yellow: 42 90% 42%;
|
|
95
148
|
--ef-yellow-dark: 42 85% 30%;
|
|
96
149
|
|
|
150
|
+
/* Accent colors adjusted for light mode readability */
|
|
151
|
+
--ef-blue-light: 196 50% 55%;
|
|
152
|
+
--ef-blue-dark: 202 56% 30%;
|
|
153
|
+
--ef-cyan: 186 80% 35%;
|
|
154
|
+
--ef-red: 355 85% 48%;
|
|
155
|
+
--ef-green: 145 60% 38%;
|
|
156
|
+
--ef-orange: 39 90% 38%;
|
|
157
|
+
--ef-purple: 270 65% 50%;
|
|
158
|
+
|
|
97
159
|
--background: 0 0% 97%;
|
|
98
160
|
--foreground: 0 0% 8%;
|
|
99
161
|
|
|
@@ -119,6 +181,8 @@
|
|
|
119
181
|
--destructive-foreground: 0 0% 100%;
|
|
120
182
|
|
|
121
183
|
--border: 0 0% 0% / 0.1;
|
|
184
|
+
--border-strong: 0 0% 0% / 0.18;
|
|
185
|
+
--border-accent: 42 90% 42% / 0.4;
|
|
122
186
|
--input: 0 0% 0% / 0.12;
|
|
123
187
|
--ring: 42 90% 42%;
|
|
124
188
|
|
|
@@ -129,6 +193,12 @@
|
|
|
129
193
|
--surface-3: 0 0% 93%;
|
|
130
194
|
--surface-hover: 0 0% 92%;
|
|
131
195
|
--surface-active: 0 0% 88%;
|
|
196
|
+
|
|
197
|
+
/* Shadow adjustments for light mode */
|
|
198
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.08);
|
|
199
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.08);
|
|
200
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.12), 0 4px 6px -4px rgb(0 0 0 / 0.08);
|
|
201
|
+
--shadow-glow: 0 0 20px hsl(var(--primary) / 0.25);
|
|
132
202
|
}
|
|
133
203
|
|
|
134
204
|
/* ═══ BASE STYLES ═══ */
|