From c0bf263cfb3bcdda88aea54a51f2381de1452e70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20Hortob=C3=A1gyi?= Date: Fri, 28 Nov 2025 20:47:40 +0100 Subject: [PATCH] feat: add UI component library and type definitions --- .../shared/action-confirmation-dialog.tsx | 225 ++++++ .../components/shared/error-boundary.tsx | 97 +++ .../components/shared/feature-flag.tsx | 46 ++ .../components/shared/global-search.tsx | 95 +++ .../components/shared/inventory-sync.tsx | 54 ++ .../shared/keyboard-shortcuts-dialog.tsx | 84 ++ .../components/shared/loading-skeleton.tsx | 49 ++ .../components/shared/mobile-nav.tsx | 30 + .../components/shared/notification-center.tsx | 162 ++++ .../components/shared/tooltip-help.tsx | 27 + .../components/ui/accordion.tsx | 66 ++ .../components/ui/alert-dialog.tsx | 157 ++++ apps/fabrikanabytok/components/ui/alert.tsx | 66 ++ .../components/ui/aspect-ratio.tsx | 11 + apps/fabrikanabytok/components/ui/avatar.tsx | 53 ++ apps/fabrikanabytok/components/ui/badge.tsx | 46 ++ .../components/ui/breadcrumb.tsx | 109 +++ .../components/ui/button-group.tsx | 83 ++ apps/fabrikanabytok/components/ui/button.tsx | 60 ++ .../fabrikanabytok/components/ui/calendar.tsx | 213 +++++ apps/fabrikanabytok/components/ui/card.tsx | 92 +++ .../fabrikanabytok/components/ui/carousel.tsx | 241 ++++++ apps/fabrikanabytok/components/ui/chart.tsx | 353 +++++++++ .../fabrikanabytok/components/ui/checkbox.tsx | 32 + .../components/ui/collapsible.tsx | 33 + apps/fabrikanabytok/components/ui/command.tsx | 184 +++++ .../components/ui/context-menu.tsx | 252 ++++++ apps/fabrikanabytok/components/ui/dialog.tsx | 143 ++++ apps/fabrikanabytok/components/ui/drawer.tsx | 135 ++++ .../components/ui/dropdown-menu.tsx | 257 +++++++ apps/fabrikanabytok/components/ui/empty.tsx | 104 +++ apps/fabrikanabytok/components/ui/field.tsx | 244 ++++++ apps/fabrikanabytok/components/ui/form.tsx | 167 ++++ .../components/ui/hover-card.tsx | 44 ++ .../components/ui/input-group.tsx | 169 ++++ .../components/ui/input-otp.tsx | 77 ++ apps/fabrikanabytok/components/ui/input.tsx | 21 + apps/fabrikanabytok/components/ui/item.tsx | 193 +++++ apps/fabrikanabytok/components/ui/kbd.tsx | 28 + apps/fabrikanabytok/components/ui/label.tsx | 24 + apps/fabrikanabytok/components/ui/menubar.tsx | 276 +++++++ .../components/ui/navigation-menu.tsx | 166 ++++ .../components/ui/pagination.tsx | 127 +++ apps/fabrikanabytok/components/ui/popover.tsx | 48 ++ .../fabrikanabytok/components/ui/progress.tsx | 31 + .../components/ui/radio-group.tsx | 45 ++ .../components/ui/resizable.tsx | 56 ++ .../components/ui/scroll-area.tsx | 58 ++ apps/fabrikanabytok/components/ui/select.tsx | 185 +++++ .../components/ui/separator.tsx | 28 + apps/fabrikanabytok/components/ui/sheet.tsx | 139 ++++ apps/fabrikanabytok/components/ui/sidebar.tsx | 726 ++++++++++++++++++ .../fabrikanabytok/components/ui/skeleton.tsx | 13 + apps/fabrikanabytok/components/ui/slider.tsx | 63 ++ apps/fabrikanabytok/components/ui/sonner.tsx | 25 + apps/fabrikanabytok/components/ui/spinner.tsx | 16 + apps/fabrikanabytok/components/ui/switch.tsx | 31 + apps/fabrikanabytok/components/ui/table.tsx | 116 +++ apps/fabrikanabytok/components/ui/tabs.tsx | 66 ++ .../fabrikanabytok/components/ui/textarea.tsx | 18 + apps/fabrikanabytok/components/ui/toast.tsx | 129 ++++ apps/fabrikanabytok/components/ui/toaster.tsx | 35 + .../components/ui/toggle-group.tsx | 73 ++ apps/fabrikanabytok/components/ui/toggle.tsx | 47 ++ apps/fabrikanabytok/components/ui/tooltip.tsx | 61 ++ .../components/ui/use-mobile.tsx | 19 + .../fabrikanabytok/components/ui/use-toast.ts | 191 +++++ apps/fabrikanabytok/hooks/index.ts | 29 + .../hooks/use-advanced-three.ts | 353 +++++++++ .../hooks/use-ai-chat-drawer.ts | 22 + apps/fabrikanabytok/hooks/use-autosave.ts | 93 +++ apps/fabrikanabytok/hooks/use-design-sync.ts | 49 ++ .../hooks/use-kitchen-designer.ts | 74 ++ apps/fabrikanabytok/hooks/use-mobile.ts | 19 + .../hooks/use-planner-collaboration.ts | 208 +++++ .../hooks/use-planner-export.ts | 183 +++++ apps/fabrikanabytok/hooks/use-toast.ts | 191 +++++ .../lib/schemas/accessory.schemas.ts | 84 ++ .../lib/schemas/coupon.schemas.ts | 63 ++ .../lib/schemas/customer.schemas.ts | 84 ++ .../lib/schemas/invoice.schemas.ts | 24 + .../schemas/manufacturing-order.schemas.ts | 91 +++ .../lib/schemas/worktop.schemas.ts | 63 ++ .../lib/types/accessory.types.ts | 398 ++++++++++ apps/fabrikanabytok/lib/types/admin.types.ts | 96 +++ apps/fabrikanabytok/lib/types/ai.types.ts | 68 ++ apps/fabrikanabytok/lib/types/chat.types.ts | 43 ++ .../lib/types/customer.types.ts | 179 +++++ .../lib/types/discount-coupon.types.ts | 410 ++++++++++ .../lib/types/email-template.types.ts | 175 +++++ .../lib/types/employee-portal.types.ts | 254 ++++++ .../lib/types/employee.types.ts | 236 ++++++ .../lib/types/excel-import.types.ts | 420 ++++++++++ .../lib/types/file-manager.types.ts | 154 ++++ .../lib/types/import-log.types.ts | 54 ++ apps/fabrikanabytok/lib/types/import.types.ts | 81 ++ .../lib/types/inventory.types.ts | 218 ++++++ .../fabrikanabytok/lib/types/invoice.types.ts | 428 +++++++++++ .../lib/types/location.types.ts | 76 ++ .../lib/types/manufacturing-order.types.ts | 296 +++++++ .../lib/types/microservice.types.ts | 155 ++++ apps/fabrikanabytok/lib/types/model.types.ts | 98 +++ apps/fabrikanabytok/lib/types/next-auth.d.ts | 61 ++ .../lib/types/order-picking.types.ts | 128 +++ apps/fabrikanabytok/lib/types/order.types.ts | 74 ++ .../lib/types/outsource.types.ts | 40 + .../fabrikanabytok/lib/types/planner.types.ts | 234 ++++++ .../fabrikanabytok/lib/types/product.types.ts | 203 +++++ .../lib/types/progress.types.ts | 63 ++ .../lib/types/role-management.types.ts | 126 +++ .../lib/types/settings.types.ts | 361 +++++++++ .../lib/types/shipping.types.ts | 149 ++++ apps/fabrikanabytok/lib/types/socket.types.ts | 192 +++++ .../lib/types/subscription.types.ts | 66 ++ apps/fabrikanabytok/lib/types/user.types.ts | 94 +++ .../fabrikanabytok/lib/types/worktop.types.ts | 292 +++++++ .../lib/utils/activity-tracker.ts | 293 +++++++ .../fabrikanabytok/lib/utils/cache-manager.ts | 164 ++++ .../fabrikanabytok/lib/utils/canvas-export.ts | 134 ++++ apps/fabrikanabytok/lib/utils/csv-parser.ts | 122 +++ apps/fabrikanabytok/lib/utils/data-export.ts | 76 ++ .../lib/utils/employee-logger.ts | 351 +++++++++ apps/fabrikanabytok/lib/utils/glb-export.ts | 170 ++++ .../fabrikanabytok/lib/utils/glb-validator.ts | 334 ++++++++ .../lib/utils/image-downloader.ts | 123 +++ .../fabrikanabytok/lib/utils/import-parser.ts | 435 +++++++++++ apps/fabrikanabytok/lib/utils/jwt.ts | 13 + apps/fabrikanabytok/lib/utils/logger.ts | 58 ++ .../fabrikanabytok/lib/utils/pdf-generator.ts | 231 ++++++ apps/fabrikanabytok/lib/utils/performance.ts | 144 ++++ apps/fabrikanabytok/lib/utils/permissions.ts | 192 +++++ .../lib/utils/physics-system.ts | 403 ++++++++++ .../lib/utils/product-to-planner.ts | 175 +++++ .../fabrikanabytok/lib/utils/serialization.ts | 131 ++++ apps/fabrikanabytok/lib/utils/snap-helpers.ts | 423 ++++++++++ .../lib/utils/testing-helpers.ts | 169 ++++ 136 files changed, 19007 insertions(+) create mode 100644 apps/fabrikanabytok/components/shared/action-confirmation-dialog.tsx create mode 100644 apps/fabrikanabytok/components/shared/error-boundary.tsx create mode 100644 apps/fabrikanabytok/components/shared/feature-flag.tsx create mode 100644 apps/fabrikanabytok/components/shared/global-search.tsx create mode 100644 apps/fabrikanabytok/components/shared/inventory-sync.tsx create mode 100644 apps/fabrikanabytok/components/shared/keyboard-shortcuts-dialog.tsx create mode 100644 apps/fabrikanabytok/components/shared/loading-skeleton.tsx create mode 100644 apps/fabrikanabytok/components/shared/mobile-nav.tsx create mode 100644 apps/fabrikanabytok/components/shared/notification-center.tsx create mode 100644 apps/fabrikanabytok/components/shared/tooltip-help.tsx create mode 100644 apps/fabrikanabytok/components/ui/accordion.tsx create mode 100644 apps/fabrikanabytok/components/ui/alert-dialog.tsx create mode 100644 apps/fabrikanabytok/components/ui/alert.tsx create mode 100644 apps/fabrikanabytok/components/ui/aspect-ratio.tsx create mode 100644 apps/fabrikanabytok/components/ui/avatar.tsx create mode 100644 apps/fabrikanabytok/components/ui/badge.tsx create mode 100644 apps/fabrikanabytok/components/ui/breadcrumb.tsx create mode 100644 apps/fabrikanabytok/components/ui/button-group.tsx create mode 100644 apps/fabrikanabytok/components/ui/button.tsx create mode 100644 apps/fabrikanabytok/components/ui/calendar.tsx create mode 100644 apps/fabrikanabytok/components/ui/card.tsx create mode 100644 apps/fabrikanabytok/components/ui/carousel.tsx create mode 100644 apps/fabrikanabytok/components/ui/chart.tsx create mode 100644 apps/fabrikanabytok/components/ui/checkbox.tsx create mode 100644 apps/fabrikanabytok/components/ui/collapsible.tsx create mode 100644 apps/fabrikanabytok/components/ui/command.tsx create mode 100644 apps/fabrikanabytok/components/ui/context-menu.tsx create mode 100644 apps/fabrikanabytok/components/ui/dialog.tsx create mode 100644 apps/fabrikanabytok/components/ui/drawer.tsx create mode 100644 apps/fabrikanabytok/components/ui/dropdown-menu.tsx create mode 100644 apps/fabrikanabytok/components/ui/empty.tsx create mode 100644 apps/fabrikanabytok/components/ui/field.tsx create mode 100644 apps/fabrikanabytok/components/ui/form.tsx create mode 100644 apps/fabrikanabytok/components/ui/hover-card.tsx create mode 100644 apps/fabrikanabytok/components/ui/input-group.tsx create mode 100644 apps/fabrikanabytok/components/ui/input-otp.tsx create mode 100644 apps/fabrikanabytok/components/ui/input.tsx create mode 100644 apps/fabrikanabytok/components/ui/item.tsx create mode 100644 apps/fabrikanabytok/components/ui/kbd.tsx create mode 100644 apps/fabrikanabytok/components/ui/label.tsx create mode 100644 apps/fabrikanabytok/components/ui/menubar.tsx create mode 100644 apps/fabrikanabytok/components/ui/navigation-menu.tsx create mode 100644 apps/fabrikanabytok/components/ui/pagination.tsx create mode 100644 apps/fabrikanabytok/components/ui/popover.tsx create mode 100644 apps/fabrikanabytok/components/ui/progress.tsx create mode 100644 apps/fabrikanabytok/components/ui/radio-group.tsx create mode 100644 apps/fabrikanabytok/components/ui/resizable.tsx create mode 100644 apps/fabrikanabytok/components/ui/scroll-area.tsx create mode 100644 apps/fabrikanabytok/components/ui/select.tsx create mode 100644 apps/fabrikanabytok/components/ui/separator.tsx create mode 100644 apps/fabrikanabytok/components/ui/sheet.tsx create mode 100644 apps/fabrikanabytok/components/ui/sidebar.tsx create mode 100644 apps/fabrikanabytok/components/ui/skeleton.tsx create mode 100644 apps/fabrikanabytok/components/ui/slider.tsx create mode 100644 apps/fabrikanabytok/components/ui/sonner.tsx create mode 100644 apps/fabrikanabytok/components/ui/spinner.tsx create mode 100644 apps/fabrikanabytok/components/ui/switch.tsx create mode 100644 apps/fabrikanabytok/components/ui/table.tsx create mode 100644 apps/fabrikanabytok/components/ui/tabs.tsx create mode 100644 apps/fabrikanabytok/components/ui/textarea.tsx create mode 100644 apps/fabrikanabytok/components/ui/toast.tsx create mode 100644 apps/fabrikanabytok/components/ui/toaster.tsx create mode 100644 apps/fabrikanabytok/components/ui/toggle-group.tsx create mode 100644 apps/fabrikanabytok/components/ui/toggle.tsx create mode 100644 apps/fabrikanabytok/components/ui/tooltip.tsx create mode 100644 apps/fabrikanabytok/components/ui/use-mobile.tsx create mode 100644 apps/fabrikanabytok/components/ui/use-toast.ts create mode 100644 apps/fabrikanabytok/hooks/index.ts create mode 100644 apps/fabrikanabytok/hooks/use-advanced-three.ts create mode 100644 apps/fabrikanabytok/hooks/use-ai-chat-drawer.ts create mode 100644 apps/fabrikanabytok/hooks/use-autosave.ts create mode 100644 apps/fabrikanabytok/hooks/use-design-sync.ts create mode 100644 apps/fabrikanabytok/hooks/use-kitchen-designer.ts create mode 100644 apps/fabrikanabytok/hooks/use-mobile.ts create mode 100644 apps/fabrikanabytok/hooks/use-planner-collaboration.ts create mode 100644 apps/fabrikanabytok/hooks/use-planner-export.ts create mode 100644 apps/fabrikanabytok/hooks/use-toast.ts create mode 100644 apps/fabrikanabytok/lib/schemas/accessory.schemas.ts create mode 100644 apps/fabrikanabytok/lib/schemas/coupon.schemas.ts create mode 100644 apps/fabrikanabytok/lib/schemas/customer.schemas.ts create mode 100644 apps/fabrikanabytok/lib/schemas/invoice.schemas.ts create mode 100644 apps/fabrikanabytok/lib/schemas/manufacturing-order.schemas.ts create mode 100644 apps/fabrikanabytok/lib/schemas/worktop.schemas.ts create mode 100644 apps/fabrikanabytok/lib/types/accessory.types.ts create mode 100644 apps/fabrikanabytok/lib/types/admin.types.ts create mode 100644 apps/fabrikanabytok/lib/types/ai.types.ts create mode 100644 apps/fabrikanabytok/lib/types/chat.types.ts create mode 100644 apps/fabrikanabytok/lib/types/customer.types.ts create mode 100644 apps/fabrikanabytok/lib/types/discount-coupon.types.ts create mode 100644 apps/fabrikanabytok/lib/types/email-template.types.ts create mode 100644 apps/fabrikanabytok/lib/types/employee-portal.types.ts create mode 100644 apps/fabrikanabytok/lib/types/employee.types.ts create mode 100644 apps/fabrikanabytok/lib/types/excel-import.types.ts create mode 100644 apps/fabrikanabytok/lib/types/file-manager.types.ts create mode 100644 apps/fabrikanabytok/lib/types/import-log.types.ts create mode 100644 apps/fabrikanabytok/lib/types/import.types.ts create mode 100644 apps/fabrikanabytok/lib/types/inventory.types.ts create mode 100644 apps/fabrikanabytok/lib/types/invoice.types.ts create mode 100644 apps/fabrikanabytok/lib/types/location.types.ts create mode 100644 apps/fabrikanabytok/lib/types/manufacturing-order.types.ts create mode 100644 apps/fabrikanabytok/lib/types/microservice.types.ts create mode 100644 apps/fabrikanabytok/lib/types/model.types.ts create mode 100644 apps/fabrikanabytok/lib/types/next-auth.d.ts create mode 100644 apps/fabrikanabytok/lib/types/order-picking.types.ts create mode 100644 apps/fabrikanabytok/lib/types/order.types.ts create mode 100644 apps/fabrikanabytok/lib/types/outsource.types.ts create mode 100644 apps/fabrikanabytok/lib/types/planner.types.ts create mode 100644 apps/fabrikanabytok/lib/types/product.types.ts create mode 100644 apps/fabrikanabytok/lib/types/progress.types.ts create mode 100644 apps/fabrikanabytok/lib/types/role-management.types.ts create mode 100644 apps/fabrikanabytok/lib/types/settings.types.ts create mode 100644 apps/fabrikanabytok/lib/types/shipping.types.ts create mode 100644 apps/fabrikanabytok/lib/types/socket.types.ts create mode 100644 apps/fabrikanabytok/lib/types/subscription.types.ts create mode 100644 apps/fabrikanabytok/lib/types/user.types.ts create mode 100644 apps/fabrikanabytok/lib/types/worktop.types.ts create mode 100644 apps/fabrikanabytok/lib/utils/activity-tracker.ts create mode 100644 apps/fabrikanabytok/lib/utils/cache-manager.ts create mode 100644 apps/fabrikanabytok/lib/utils/canvas-export.ts create mode 100644 apps/fabrikanabytok/lib/utils/csv-parser.ts create mode 100644 apps/fabrikanabytok/lib/utils/data-export.ts create mode 100644 apps/fabrikanabytok/lib/utils/employee-logger.ts create mode 100644 apps/fabrikanabytok/lib/utils/glb-export.ts create mode 100644 apps/fabrikanabytok/lib/utils/glb-validator.ts create mode 100644 apps/fabrikanabytok/lib/utils/image-downloader.ts create mode 100644 apps/fabrikanabytok/lib/utils/import-parser.ts create mode 100644 apps/fabrikanabytok/lib/utils/jwt.ts create mode 100644 apps/fabrikanabytok/lib/utils/logger.ts create mode 100644 apps/fabrikanabytok/lib/utils/pdf-generator.ts create mode 100644 apps/fabrikanabytok/lib/utils/performance.ts create mode 100644 apps/fabrikanabytok/lib/utils/permissions.ts create mode 100644 apps/fabrikanabytok/lib/utils/physics-system.ts create mode 100644 apps/fabrikanabytok/lib/utils/product-to-planner.ts create mode 100644 apps/fabrikanabytok/lib/utils/serialization.ts create mode 100644 apps/fabrikanabytok/lib/utils/snap-helpers.ts create mode 100644 apps/fabrikanabytok/lib/utils/testing-helpers.ts diff --git a/apps/fabrikanabytok/components/shared/action-confirmation-dialog.tsx b/apps/fabrikanabytok/components/shared/action-confirmation-dialog.tsx new file mode 100644 index 0000000..2ca3883 --- /dev/null +++ b/apps/fabrikanabytok/components/shared/action-confirmation-dialog.tsx @@ -0,0 +1,225 @@ +"use client" + +import { useState } from "react" +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog" +import { Button } from "@/components/ui/button" +import { Textarea } from "@/components/ui/textarea" +import { Label } from "@/components/ui/label" +import { Badge } from "@/components/ui/badge" +import { AlertTriangle, Info, CheckCircle, Loader2 } from "lucide-react" +import { cn } from "@/lib/utils" + +interface ActionConfirmationDialogProps { + open: boolean + onOpenChange: (open: boolean) => void + title: string + description: string + actionType: "info" | "warning" | "danger" + requireReason?: boolean + currentState?: any + newState?: any + onConfirm: (reason?: string) => Promise +} + +export function ActionConfirmationDialog({ + open, + onOpenChange, + title, + description, + actionType = "warning", + requireReason = false, + currentState, + newState, + onConfirm, +}: ActionConfirmationDialogProps) { + const [reason, setReason] = useState("") + const [loading, setLoading] = useState(false) + + const handleConfirm = async () => { + if (requireReason && !reason.trim()) { + return + } + + setLoading(true) + try { + await onConfirm(reason.trim() || undefined) + onOpenChange(false) + setReason("") + } catch (error) { + // Error will be handled by parent + } finally { + setLoading(false) + } + } + + const getIcon = () => { + if (actionType === "danger") return + if (actionType === "warning") return + return + } + + const getButtonVariant = () => { + if (actionType === "danger") return "destructive" + if (actionType === "warning") return "default" + return "default" + } + + return ( + + + +
+ {getIcon()} +
+ {title} + {description} +
+
+
+ +
+ {/* Current vs New State Comparison */} + {(currentState || newState) && ( +
+ {currentState && ( +
+ +
+
+                      {JSON.stringify(currentState, null, 2)}
+                    
+
+
+ )} + + {newState && ( +
+ +
+
+                      {JSON.stringify(newState, null, 2)}
+                    
+
+
+ )} +
+ )} + + {/* Reason Input */} + {requireReason && ( +
+ +