braid-ui 1.0.3 → 1.0.5

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/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as React13 from 'react';
2
2
  import { useState, useEffect, useCallback, useMemo } from 'react';
3
- import { createPortal } from 'react-dom';
4
- import { Slot } from '@radix-ui/react-slot';
5
3
  import { cva } from 'class-variance-authority';
6
4
  import { clsx } from 'clsx';
7
5
  import { twMerge } from 'tailwind-merge';
8
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
- import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Upload, FileText, Download, Plus, MessageSquare, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Zap, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Box, Settings, BarChart3, Key, Heart, User, AlertTriangle, XCircle, CheckCircle, Clock, Filter, ChevronLeft, Calendar as Calendar$1, CalendarIcon, CheckCircle2, Circle, UserPlus, ChevronsUpDown } from 'lucide-react';
7
+ import { Slot } from '@radix-ui/react-slot';
8
+ import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Plus, MessageSquare, Upload, FileText, Download, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Zap, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Box, Settings, BarChart3, Key, Heart, User, AlertTriangle, XCircle, CheckCircle, Clock, Filter, ChevronLeft, Calendar as Calendar$1, CalendarIcon, CheckCircle2, Circle, UserPlus, ChevronsUpDown } from 'lucide-react';
9
+ import { createPortal } from 'react-dom';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import * as DialogPrimitive from '@radix-ui/react-dialog';
12
12
  import { NavLink, useLocation, useParams, useNavigate } from 'react-router-dom';
@@ -26,10 +26,218 @@ import * as TabsPrimitive from '@radix-ui/react-tabs';
26
26
  import * as ToastPrimitives from '@radix-ui/react-toast';
27
27
  import { format } from 'date-fns';
28
28
 
29
- // src/components/alerts/AlertDocuments.tsx
29
+ // src/components/ui/form-card.tsx
30
30
  function cn(...inputs) {
31
31
  return twMerge(clsx(inputs));
32
32
  }
33
+ var cardVariants = cva(
34
+ "rounded-lg border bg-card text-card-foreground transition-all duration-200",
35
+ {
36
+ variants: {
37
+ variant: {
38
+ default: "shadow-sm",
39
+ elevated: "shadow-md hover:shadow-lg",
40
+ outlined: "border-2 shadow-none",
41
+ ghost: "border-transparent shadow-none bg-transparent",
42
+ subtle: "border-border/75 shadow-none"
43
+ },
44
+ size: {
45
+ sm: "p-3",
46
+ md: "p-4",
47
+ lg: "p-6",
48
+ none: "p-0"
49
+ },
50
+ fullHeight: {
51
+ true: "h-full flex flex-col",
52
+ false: ""
53
+ },
54
+ interactive: {
55
+ true: "cursor-pointer hover:shadow-md hover:scale-[1.02]",
56
+ false: ""
57
+ }
58
+ },
59
+ defaultVariants: {
60
+ variant: "default",
61
+ size: "none",
62
+ fullHeight: false,
63
+ interactive: false
64
+ }
65
+ }
66
+ );
67
+ var Card = React13.forwardRef(
68
+ ({ className, variant, size, fullHeight, interactive, ...props }, ref) => /* @__PURE__ */ jsx(
69
+ "div",
70
+ {
71
+ ref,
72
+ className: cn(cardVariants({ variant, size, fullHeight, interactive }), className),
73
+ ...props
74
+ }
75
+ )
76
+ );
77
+ Card.displayName = "Card";
78
+ var cardHeaderVariants = cva(
79
+ "flex flex-col space-y-1.5",
80
+ {
81
+ variants: {
82
+ size: {
83
+ sm: "px-3 pt-3 pb-2",
84
+ md: "px-4 pt-4 pb-3",
85
+ lg: "px-6 pt-6 pb-4"
86
+ },
87
+ align: {
88
+ start: "items-start",
89
+ center: "items-center",
90
+ end: "items-end"
91
+ },
92
+ direction: {
93
+ row: "flex-row justify-between items-center space-y-0 space-x-4",
94
+ column: "flex-col space-y-1.5"
95
+ }
96
+ },
97
+ defaultVariants: {
98
+ size: "lg",
99
+ align: "start",
100
+ direction: "column"
101
+ }
102
+ }
103
+ );
104
+ var CardHeader = React13.forwardRef(
105
+ ({ className, size, align, direction, ...props }, ref) => /* @__PURE__ */ jsx(
106
+ "div",
107
+ {
108
+ ref,
109
+ className: cn(cardHeaderVariants({ size, align, direction }), className),
110
+ ...props
111
+ }
112
+ )
113
+ );
114
+ CardHeader.displayName = "CardHeader";
115
+ var cardTitleVariants = cva(
116
+ "font-semibold leading-none tracking-tight",
117
+ {
118
+ variants: {
119
+ size: {
120
+ sm: "text-base",
121
+ md: "text-lg",
122
+ lg: "text-xl"
123
+ }
124
+ },
125
+ defaultVariants: {
126
+ size: "md"
127
+ }
128
+ }
129
+ );
130
+ var CardTitle = React13.forwardRef(
131
+ ({ className, size, ...props }, ref) => /* @__PURE__ */ jsx(
132
+ "h3",
133
+ {
134
+ ref,
135
+ className: cn(cardTitleVariants({ size }), className),
136
+ ...props
137
+ }
138
+ )
139
+ );
140
+ CardTitle.displayName = "CardTitle";
141
+ var CardDescription = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
142
+ "p",
143
+ {
144
+ ref,
145
+ className: cn("text-sm text-muted-foreground", className),
146
+ ...props
147
+ }
148
+ ));
149
+ CardDescription.displayName = "CardDescription";
150
+ var cardContentVariants = cva(
151
+ "",
152
+ {
153
+ variants: {
154
+ size: {
155
+ sm: "px-3 pb-2",
156
+ md: "px-4 pb-3",
157
+ lg: "px-6 pb-4"
158
+ },
159
+ fullHeight: {
160
+ true: "flex-1",
161
+ false: ""
162
+ }
163
+ },
164
+ defaultVariants: {
165
+ size: "lg",
166
+ fullHeight: false
167
+ }
168
+ }
169
+ );
170
+ var CardContent = React13.forwardRef(
171
+ ({ className, size, fullHeight, ...props }, ref) => /* @__PURE__ */ jsx(
172
+ "div",
173
+ {
174
+ ref,
175
+ className: cn(cardContentVariants({ size, fullHeight }), className),
176
+ ...props
177
+ }
178
+ )
179
+ );
180
+ CardContent.displayName = "CardContent";
181
+ var cardFooterVariants = cva(
182
+ "flex items-center pt-0",
183
+ {
184
+ variants: {
185
+ size: {
186
+ sm: "p-3 pt-0",
187
+ md: "p-4 pt-0",
188
+ lg: "p-6 pt-0"
189
+ },
190
+ justify: {
191
+ start: "justify-start",
192
+ center: "justify-center",
193
+ end: "justify-end",
194
+ between: "justify-between"
195
+ }
196
+ },
197
+ defaultVariants: {
198
+ size: "lg",
199
+ justify: "start"
200
+ }
201
+ }
202
+ );
203
+ var CardFooter = React13.forwardRef(
204
+ ({ className, size, justify, ...props }, ref) => /* @__PURE__ */ jsx(
205
+ "div",
206
+ {
207
+ ref,
208
+ className: cn(cardFooterVariants({ size, justify }), className),
209
+ ...props
210
+ }
211
+ )
212
+ );
213
+ CardFooter.displayName = "CardFooter";
214
+ var FormCard = React13.forwardRef(
215
+ ({ title, description, children, headerActions, className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsxs(
216
+ Card,
217
+ {
218
+ ref,
219
+ variant,
220
+ fullHeight: true,
221
+ className: cn("", className),
222
+ ...props,
223
+ children: [
224
+ /* @__PURE__ */ jsxs(
225
+ CardHeader,
226
+ {
227
+ direction: headerActions ? "row" : "column",
228
+ size: "md",
229
+ children: [
230
+ /* @__PURE__ */ jsx("div", { className: "space-y-1", children: /* @__PURE__ */ jsx(CardTitle, { size: "md", children: title }) }),
231
+ headerActions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: headerActions })
232
+ ]
233
+ }
234
+ ),
235
+ /* @__PURE__ */ jsx(CardContent, { size: "md", fullHeight: true, children })
236
+ ]
237
+ }
238
+ )
239
+ );
240
+ FormCard.displayName = "FormCard";
33
241
  var buttonVariants = cva(
34
242
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
35
243
  {
@@ -69,171 +277,92 @@ var Button = React13.forwardRef(
69
277
  }
70
278
  );
71
279
  Button.displayName = "Button";
72
- var TOAST_LIMIT = 1;
73
- var TOAST_REMOVE_DELAY = 1e6;
74
- var count = 0;
75
- function genId() {
76
- count = (count + 1) % Number.MAX_SAFE_INTEGER;
77
- return count.toString();
78
- }
79
- var toastTimeouts = /* @__PURE__ */ new Map();
80
- var addToRemoveQueue = (toastId) => {
81
- if (toastTimeouts.has(toastId)) {
82
- return;
83
- }
84
- const timeout = setTimeout(() => {
85
- toastTimeouts.delete(toastId);
86
- dispatch({
87
- type: "REMOVE_TOAST",
88
- toastId
89
- });
90
- }, TOAST_REMOVE_DELAY);
91
- toastTimeouts.set(toastId, timeout);
92
- };
93
- var reducer = (state, action) => {
94
- switch (action.type) {
95
- case "ADD_TOAST":
96
- return {
97
- ...state,
98
- toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT)
99
- };
100
- case "UPDATE_TOAST":
101
- return {
102
- ...state,
103
- toasts: state.toasts.map(
104
- (t) => t.id === action.toast.id ? { ...t, ...action.toast } : t
105
- )
106
- };
107
- case "DISMISS_TOAST": {
108
- const { toastId } = action;
109
- if (toastId) {
110
- addToRemoveQueue(toastId);
111
- } else {
112
- state.toasts.forEach((toast4) => {
113
- addToRemoveQueue(toast4.id);
114
- });
115
- }
116
- return {
117
- ...state,
118
- toasts: state.toasts.map(
119
- (t) => t.id === toastId || toastId === void 0 ? {
120
- ...t,
121
- open: false
122
- } : t
123
- )
124
- };
125
- }
126
- case "REMOVE_TOAST":
127
- if (action.toastId === void 0) {
128
- return {
129
- ...state,
130
- toasts: []
131
- };
132
- }
133
- return {
134
- ...state,
135
- toasts: state.toasts.filter((t) => t.id !== action.toastId)
136
- };
137
- }
138
- };
139
- var listeners = [];
140
- var memoryState = { toasts: [] };
141
- function dispatch(action) {
142
- memoryState = reducer(memoryState, action);
143
- listeners.forEach((listener) => {
144
- listener(memoryState);
145
- });
146
- }
147
- function toast({ ...props }) {
148
- const id = genId();
149
- const update = (props2) => dispatch({
150
- type: "UPDATE_TOAST",
151
- toast: { ...props2, id }
152
- });
153
- const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
154
- dispatch({
155
- type: "ADD_TOAST",
156
- toast: {
157
- ...props,
158
- id,
159
- open: true,
160
- onOpenChange: (open) => {
161
- if (!open) dismiss();
162
- }
163
- }
164
- });
165
- return {
166
- id,
167
- dismiss,
168
- update
169
- };
170
- }
171
- function useToast() {
172
- const [state, setState] = React13.useState(memoryState);
173
- React13.useEffect(() => {
174
- listeners.push(setState);
175
- return () => {
176
- const index = listeners.indexOf(setState);
177
- if (index > -1) {
178
- listeners.splice(index, 1);
179
- }
180
- };
181
- }, [state]);
182
- return {
183
- ...state,
184
- toast,
185
- dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId })
186
- };
187
- }
188
- var inputVariants = cva(
189
- "flex w-full rounded-md bg-form-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground transition-form",
280
+ var badgeVariants = cva(
281
+ "inline-flex items-center rounded-full 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",
190
282
  {
191
283
  variants: {
192
284
  variant: {
193
- default: "border border-form-border focus-visible:border-form-border-focus focus-visible:outline-none focus-visible:shadow-form-focus",
194
- error: "border border-form-border-error focus-visible:border-form-border-error focus-visible:outline-none focus-visible:shadow-form-error",
195
- success: "border border-form-border-success focus-visible:border-form-border-success focus-visible:outline-none",
196
- disabled: "border border-form-border bg-muted cursor-not-allowed opacity-50",
197
- readonly: "border border-form-border bg-muted/50 cursor-default"
198
- },
199
- size: {
200
- default: "h-10",
201
- sm: "h-9",
202
- lg: "h-11"
285
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
286
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
287
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
288
+ outline: "text-foreground",
289
+ success: "border-transparent bg-success text-success-foreground hover:bg-success/80",
290
+ warning: "border-transparent bg-warning text-warning-foreground hover:bg-warning/80",
291
+ // Business type specific variants
292
+ business: "border-blue-200 bg-blue-50 text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-300",
293
+ individual: "border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300",
294
+ government: "border-purple-200 bg-purple-50 text-purple-700 hover:bg-purple-100 dark:border-purple-800 dark:bg-purple-950 dark:text-purple-300",
295
+ nonprofit: "border-orange-200 bg-orange-50 text-orange-700 hover:bg-orange-100 dark:border-orange-800 dark:bg-orange-950 dark:text-orange-300",
296
+ // Business entity type variants
297
+ corporation: "border-slate-200 bg-slate-50 text-slate-700 hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300",
298
+ llc: "border-teal-200 bg-teal-50 text-teal-700 hover:bg-teal-100 dark:border-teal-800 dark:bg-teal-950 dark:text-teal-300",
299
+ partnership: "border-indigo-200 bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:border-indigo-800 dark:bg-indigo-950 dark:text-indigo-300",
300
+ sole_proprietorship: "border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-300",
301
+ // Status variants
302
+ active: "border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300",
303
+ inactive: "border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300",
304
+ pending: "border-yellow-200 bg-yellow-50 text-yellow-700 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-300",
305
+ suspended: "border-gray-200 bg-gray-50 text-gray-700 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300",
306
+ // Alert type subtle variants
307
+ "alert-ofac": "border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300 font-medium",
308
+ "alert-dual": "border-emerald-200 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300 font-medium",
309
+ "alert-monitoring": "border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-300 font-medium",
310
+ "alert-error": "border-rose-200 bg-rose-50 text-rose-700 hover:bg-rose-100 dark:border-rose-800 dark:bg-rose-950 dark:text-rose-300 font-medium"
203
311
  }
204
312
  },
205
313
  defaultVariants: {
206
- variant: "default",
207
- size: "default"
314
+ variant: "default"
208
315
  }
209
316
  }
210
317
  );
211
- var EnhancedInput = React13.forwardRef(
212
- ({ className, variant, size, label, hint, error, success, isLoading, ...props }, ref) => {
213
- const inputVariant = error ? "error" : success ? "success" : props.disabled ? "disabled" : props.readOnly ? "readonly" : variant;
214
- return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
215
- label && /* @__PURE__ */ jsxs("label", { className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: [
216
- label,
217
- props.required && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
318
+ function Badge({ className, variant, ...props }) {
319
+ return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
320
+ }
321
+ var AlertTimeline = ({ events }) => {
322
+ const getIcon = (action) => {
323
+ if (action.includes("Created")) return /* @__PURE__ */ jsx(Circle, { className: "h-4 w-4" });
324
+ if (action.includes("Assigned")) return /* @__PURE__ */ jsx(UserPlus, { className: "h-4 w-4" });
325
+ if (action.includes("Updated") || action.includes("Modified")) return /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4" });
326
+ if (action.includes("Closed") || action.includes("Resolved")) return /* @__PURE__ */ jsx(CheckCircle, { className: "h-4 w-4" });
327
+ if (action.includes("Rejected")) return /* @__PURE__ */ jsx(XCircle, { className: "h-4 w-4" });
328
+ return /* @__PURE__ */ jsx(Circle, { className: "h-4 w-4" });
329
+ };
330
+ const getStatusColor2 = (status) => {
331
+ switch (status) {
332
+ case "Unassigned":
333
+ return "text-destructive";
334
+ case "Closed":
335
+ return "text-success";
336
+ case "In Progress":
337
+ return "text-warning";
338
+ default:
339
+ return "text-muted-foreground";
340
+ }
341
+ };
342
+ if (events.length === 0) {
343
+ return /* @__PURE__ */ jsx("div", { className: "text-center py-8 text-muted-foreground", children: "No timeline events yet" });
344
+ }
345
+ return /* @__PURE__ */ jsx("div", { className: "space-y-3", children: events.map((event, index) => /* @__PURE__ */ jsxs("div", { className: "relative pl-6 pb-3", children: [
346
+ index !== events.length - 1 && /* @__PURE__ */ jsx("div", { className: "absolute left-[7px] top-5 bottom-0 w-[2px] bg-border" }),
347
+ /* @__PURE__ */ jsx("div", { className: cn(
348
+ "absolute left-0 top-0 flex-none",
349
+ getStatusColor2(event.status)
350
+ ), children: /* @__PURE__ */ jsx("div", { className: "h-4 w-4", children: getIcon(event.action) }) }),
351
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
352
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-foreground", children: event.action }),
353
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
354
+ "by ",
355
+ event.user
218
356
  ] }),
219
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
220
- /* @__PURE__ */ jsx(
221
- "input",
222
- {
223
- className: cn(inputVariants({ variant: inputVariant, size, className })),
224
- ref,
225
- ...props
226
- }
227
- ),
228
- isLoading && /* @__PURE__ */ jsx("div", { className: "absolute right-3 top-1/2 transform -translate-y-1/2", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent" }) })
357
+ event.details && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: event.details }),
358
+ event.status && /* @__PURE__ */ jsxs("p", { className: cn("text-xs font-medium", getStatusColor2(event.status)), children: [
359
+ "Status: ",
360
+ event.status
229
361
  ] }),
230
- hint && !error && !success && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: hint }),
231
- error && /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive", children: error }),
232
- success && /* @__PURE__ */ jsx("p", { className: "text-xs text-success", children: success })
233
- ] });
234
- }
235
- );
236
- EnhancedInput.displayName = "EnhancedInput";
362
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground/70 pt-0.5", children: event.timestamp })
363
+ ] })
364
+ ] }, event.id)) });
365
+ };
237
366
  var textareaVariants = cva(
238
367
  "flex min-h-[80px] w-full rounded-md bg-form-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground transition-form resize-y",
239
368
  {
@@ -330,179 +459,208 @@ var EnhancedSelect = React13.forwardRef(({ variant, label, hint, error, success,
330
459
  ] });
331
460
  });
332
461
  EnhancedSelect.displayName = "EnhancedSelect";
333
- var AlertDocuments = ({ alertId, documents }) => {
334
- const [isUploading, setIsUploading] = useState(false);
335
- const [showUploadDialog, setShowUploadDialog] = useState(false);
336
- const [selectedFile, setSelectedFile] = useState(null);
337
- const [documentName, setDocumentName] = useState("");
338
- const [description, setDescription] = useState("");
339
- const [documentType, setDocumentType] = useState("");
340
- const handleFileSelect = (e) => {
341
- const file = e.target.files?.[0];
342
- if (!file) return;
343
- setSelectedFile(file);
344
- setDocumentName(file.name);
345
- };
346
- const handleUploadSubmit = () => {
347
- if (!selectedFile || !documentName || !documentType) {
348
- toast({
349
- title: "Missing Information",
350
- description: "Please fill in all required fields",
351
- variant: "destructive"
352
- });
353
- return;
354
- }
355
- setIsUploading(true);
356
- setTimeout(() => {
357
- ({
358
- size: `${(selectedFile.size / 1024 / 1024).toFixed(1)} MB`,
359
- uploadedAt: (/* @__PURE__ */ new Date()).toISOString()
360
- });
361
- toast({
362
- title: "Upload Successful",
363
- description: `${documentName} uploaded successfully`
364
- });
365
- setIsUploading(false);
366
- setShowUploadDialog(false);
367
- resetForm();
368
- }, 1e3);
369
- };
370
- const resetForm = () => {
371
- setSelectedFile(null);
372
- setDocumentName("");
373
- setDescription("");
374
- setDocumentType("");
375
- const fileInput = document.getElementById("file-upload");
376
- if (fileInput) fileInput.value = "";
377
- };
378
- const handleCancelUpload = () => {
379
- setShowUploadDialog(false);
380
- resetForm();
381
- };
382
- const isImageType = (name) => {
383
- const imageExtensions = [".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"];
384
- return imageExtensions.some((ext) => name.toLowerCase().endsWith(ext));
385
- };
386
- const getFileIcon = (type) => {
387
- return /* @__PURE__ */ jsx(FileText, { className: "h-5 w-5" });
388
- };
389
- const getFileTypeColor = (type) => {
390
- switch (type.toUpperCase()) {
391
- case "PDF":
392
- return "text-red-500";
393
- case "DOCX":
394
- case "DOC":
395
- return "text-blue-500";
396
- case "XLSX":
397
- case "XLS":
398
- return "text-green-500";
399
- case "JPG":
400
- case "JPEG":
401
- case "PNG":
402
- return "text-purple-500";
403
- default:
404
- return "text-muted-foreground";
462
+ var TOAST_LIMIT = 1;
463
+ var TOAST_REMOVE_DELAY = 1e6;
464
+ var count = 0;
465
+ function genId() {
466
+ count = (count + 1) % Number.MAX_SAFE_INTEGER;
467
+ return count.toString();
468
+ }
469
+ var toastTimeouts = /* @__PURE__ */ new Map();
470
+ var addToRemoveQueue = (toastId) => {
471
+ if (toastTimeouts.has(toastId)) {
472
+ return;
473
+ }
474
+ const timeout = setTimeout(() => {
475
+ toastTimeouts.delete(toastId);
476
+ dispatch({
477
+ type: "REMOVE_TOAST",
478
+ toastId
479
+ });
480
+ }, TOAST_REMOVE_DELAY);
481
+ toastTimeouts.set(toastId, timeout);
482
+ };
483
+ var reducer = (state, action) => {
484
+ switch (action.type) {
485
+ case "ADD_TOAST":
486
+ return {
487
+ ...state,
488
+ toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT)
489
+ };
490
+ case "UPDATE_TOAST":
491
+ return {
492
+ ...state,
493
+ toasts: state.toasts.map(
494
+ (t) => t.id === action.toast.id ? { ...t, ...action.toast } : t
495
+ )
496
+ };
497
+ case "DISMISS_TOAST": {
498
+ const { toastId } = action;
499
+ if (toastId) {
500
+ addToRemoveQueue(toastId);
501
+ } else {
502
+ state.toasts.forEach((toast4) => {
503
+ addToRemoveQueue(toast4.id);
504
+ });
505
+ }
506
+ return {
507
+ ...state,
508
+ toasts: state.toasts.map(
509
+ (t) => t.id === toastId || toastId === void 0 ? {
510
+ ...t,
511
+ open: false
512
+ } : t
513
+ )
514
+ };
515
+ }
516
+ case "REMOVE_TOAST":
517
+ if (action.toastId === void 0) {
518
+ return {
519
+ ...state,
520
+ toasts: []
521
+ };
522
+ }
523
+ return {
524
+ ...state,
525
+ toasts: state.toasts.filter((t) => t.id !== action.toastId)
526
+ };
527
+ }
528
+ };
529
+ var listeners = [];
530
+ var memoryState = { toasts: [] };
531
+ function dispatch(action) {
532
+ memoryState = reducer(memoryState, action);
533
+ listeners.forEach((listener) => {
534
+ listener(memoryState);
535
+ });
536
+ }
537
+ function toast({ ...props }) {
538
+ const id = genId();
539
+ const update = (props2) => dispatch({
540
+ type: "UPDATE_TOAST",
541
+ toast: { ...props2, id }
542
+ });
543
+ const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
544
+ dispatch({
545
+ type: "ADD_TOAST",
546
+ toast: {
547
+ ...props,
548
+ id,
549
+ open: true,
550
+ onOpenChange: (open) => {
551
+ if (!open) dismiss();
552
+ }
405
553
  }
554
+ });
555
+ return {
556
+ id,
557
+ dismiss,
558
+ update
559
+ };
560
+ }
561
+ function useToast() {
562
+ const [state, setState] = React13.useState(memoryState);
563
+ React13.useEffect(() => {
564
+ listeners.push(setState);
565
+ return () => {
566
+ const index = listeners.indexOf(setState);
567
+ if (index > -1) {
568
+ listeners.splice(index, 1);
569
+ }
570
+ };
571
+ }, [state]);
572
+ return {
573
+ ...state,
574
+ toast,
575
+ dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId })
576
+ };
577
+ }
578
+ var NOTE_TYPE_OPTIONS = [
579
+ { value: "RFI Note", label: "RFI Note" },
580
+ { value: "Internal Note", label: "Internal Note" }
581
+ ];
582
+ var AlertNotes = ({ alertId, notes }) => {
583
+ const [showNoteDialog, setShowNoteDialog] = useState(false);
584
+ const [newNote, setNewNote] = useState("");
585
+ const [noteType, setNoteType] = useState("RFI Note");
586
+ const [isSubmitting, setIsSubmitting] = useState(false);
587
+ const resetForm = () => {
588
+ setNewNote("");
589
+ setNoteType("RFI Note");
590
+ };
591
+ const handleCancelNote = () => {
592
+ setShowNoteDialog(false);
593
+ resetForm();
594
+ };
595
+ const handleAddNote = async () => {
596
+ if (!newNote.trim()) {
597
+ toast({
598
+ title: "Error",
599
+ description: "Please enter a note before submitting",
600
+ variant: "destructive"
601
+ });
602
+ return;
603
+ }
604
+ setIsSubmitting(true);
605
+ setTimeout(() => {
606
+ toast({
607
+ title: "Note Added",
608
+ description: "Your note has been added successfully"
609
+ });
610
+ setShowNoteDialog(false);
611
+ resetForm();
612
+ setIsSubmitting(false);
613
+ }, 500);
614
+ };
615
+ const handleDeleteNote = (noteId, noteContent) => {
616
+ toast({
617
+ title: "Note Deleted",
618
+ description: `Note deleted successfully`
619
+ });
620
+ console.log("Deleting note:", noteId);
406
621
  };
407
- const documentTypeOptions = [
408
- { value: "ID_DOCUMENT_FRONT", label: "ID Document (Front)" },
409
- { value: "ID_DOCUMENT_BACK", label: "ID Document (Back)" },
410
- { value: "PASSPORT", label: "Passport" },
411
- { value: "PROOF_OF_ADDRESS", label: "Proof of Address" },
412
- { value: "BANK_STATEMENT", label: "Bank Statement" },
413
- { value: "BUSINESS_LICENSE", label: "Business License" },
414
- { value: "TAX_DOCUMENT", label: "Tax Document" },
415
- { value: "OTHER", label: "Other" }
416
- ];
417
622
  return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
418
- showUploadDialog && createPortal(
623
+ showNoteDialog && createPortal(
419
624
  /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-[100] flex items-center justify-center p-4", children: [
420
625
  /* @__PURE__ */ jsx(
421
626
  "div",
422
627
  {
423
628
  className: "fixed inset-0 bg-background/80 backdrop-blur-sm",
424
- onClick: handleCancelUpload
629
+ onClick: handleCancelNote
425
630
  }
426
631
  ),
427
632
  /* @__PURE__ */ jsxs("div", { className: "relative bg-card border rounded-lg shadow-lg max-w-lg w-full p-6 z-[101]", children: [
428
633
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-6", children: [
429
- /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold", children: "Upload Document" }),
634
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold", children: "Add Note" }),
430
635
  /* @__PURE__ */ jsx(
431
636
  Button,
432
637
  {
433
638
  variant: "ghost",
434
639
  size: "sm",
435
640
  className: "h-8 w-8 p-0",
436
- onClick: handleCancelUpload,
641
+ onClick: handleCancelNote,
437
642
  children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
438
643
  }
439
644
  )
440
645
  ] }),
441
646
  /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
442
- /* @__PURE__ */ jsxs("div", { className: "border-2 border-dashed rounded-lg p-6 text-center hover:border-primary/50 transition-colors", children: [
443
- /* @__PURE__ */ jsx(
444
- "input",
445
- {
446
- type: "file",
447
- id: "file-upload-dialog",
448
- className: "hidden",
449
- onChange: handleFileSelect,
450
- disabled: isUploading
451
- }
452
- ),
453
- /* @__PURE__ */ jsxs(
454
- "label",
455
- {
456
- htmlFor: "file-upload-dialog",
457
- className: cn(
458
- "cursor-pointer flex flex-col items-center gap-2",
459
- isUploading && "opacity-50 cursor-not-allowed"
460
- ),
461
- children: [
462
- /* @__PURE__ */ jsx(Upload, { className: "h-8 w-8 text-muted-foreground" }),
463
- /* @__PURE__ */ jsxs("div", { children: [
464
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: selectedFile ? "Change file" : "Click to upload or drag and drop" }),
465
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "PDF, DOC, DOCX, JPG, PNG up to 10MB" })
466
- ] })
467
- ]
468
- }
469
- )
470
- ] }),
471
- selectedFile && /* @__PURE__ */ jsxs("div", { className: "p-3 bg-muted/50 rounded-lg", children: [
472
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Selected file:" }),
473
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: selectedFile.name }),
474
- /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
475
- (selectedFile.size / 1024 / 1024).toFixed(2),
476
- " MB"
477
- ] })
478
- ] }),
479
647
  /* @__PURE__ */ jsx(
480
- EnhancedInput,
648
+ EnhancedSelect,
481
649
  {
482
- label: "Document name",
483
- value: documentName,
484
- onChange: (e) => setDocumentName(e.target.value),
485
- placeholder: "Enter document name"
650
+ label: "Note Type",
651
+ value: noteType,
652
+ onValueChange: (value) => setNoteType(value),
653
+ options: NOTE_TYPE_OPTIONS
486
654
  }
487
655
  ),
488
656
  /* @__PURE__ */ jsx(
489
657
  EnhancedTextarea,
490
658
  {
491
- label: "Description",
492
- value: description,
493
- onChange: (e) => setDescription(e.target.value),
494
- placeholder: "Enter document description (optional)",
495
- rows: 3
496
- }
497
- ),
498
- /* @__PURE__ */ jsx(
499
- EnhancedSelect,
500
- {
501
- label: "Document type",
502
- value: documentType,
503
- onValueChange: setDocumentType,
504
- placeholder: "Select document type",
505
- options: documentTypeOptions
659
+ label: "Note",
660
+ placeholder: "Enter your note here...",
661
+ value: newNote,
662
+ onChange: (e) => setNewNote(e.target.value),
663
+ rows: 6
506
664
  }
507
665
  )
508
666
  ] }),
@@ -511,8 +669,8 @@ var AlertDocuments = ({ alertId, documents }) => {
511
669
  Button,
512
670
  {
513
671
  variant: "outline",
514
- onClick: handleCancelUpload,
515
- disabled: isUploading,
672
+ onClick: handleCancelNote,
673
+ disabled: isSubmitting,
516
674
  className: "flex-1",
517
675
  children: "Cancel"
518
676
  }
@@ -520,10 +678,10 @@ var AlertDocuments = ({ alertId, documents }) => {
520
678
  /* @__PURE__ */ jsx(
521
679
  Button,
522
680
  {
523
- onClick: handleUploadSubmit,
524
- disabled: isUploading,
681
+ onClick: handleAddNote,
682
+ disabled: isSubmitting || !newNote.trim(),
525
683
  className: "flex-1",
526
- children: isUploading ? "Uploading..." : "Upload"
684
+ children: isSubmitting ? "Adding..." : "Add Note"
527
685
  }
528
686
  )
529
687
  ] })
@@ -531,224 +689,280 @@ var AlertDocuments = ({ alertId, documents }) => {
531
689
  ] }),
532
690
  document.body
533
691
  ),
534
- /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
692
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
535
693
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
536
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium text-foreground", children: "Uploaded Documents" }),
694
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium text-foreground", children: "Note History" }),
537
695
  /* @__PURE__ */ jsxs(
538
696
  Button,
539
697
  {
540
- onClick: () => setShowUploadDialog(true),
698
+ onClick: () => setShowNoteDialog(true),
541
699
  variant: "ghost",
542
700
  size: "sm",
543
701
  className: "gap-2 text-primary hover:text-primary",
544
702
  children: [
545
- /* @__PURE__ */ jsx(Upload, { className: "h-4 w-4" }),
546
- "Upload"
703
+ /* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" }),
704
+ "Add Note"
547
705
  ]
548
706
  }
549
707
  )
550
708
  ] }),
551
- documents.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8 text-muted-foreground", children: [
552
- /* @__PURE__ */ jsx(FileText, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
553
- /* @__PURE__ */ jsx("p", { children: "No documents uploaded yet" })
554
- ] }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: documents.map((doc) => /* @__PURE__ */ jsxs(
709
+ notes.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8 text-muted-foreground", children: [
710
+ /* @__PURE__ */ jsx(MessageSquare, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
711
+ /* @__PURE__ */ jsx("p", { children: "No notes yet" })
712
+ ] }) : /* @__PURE__ */ jsx("div", { className: "space-y-3", children: notes.map((note) => /* @__PURE__ */ jsxs(
555
713
  "div",
556
714
  {
557
- className: "border rounded-lg hover:bg-muted/30 transition-colors overflow-hidden",
715
+ className: "border rounded-lg p-4 bg-muted/30",
558
716
  children: [
559
- isImageType(doc.name) && doc.url && /* @__PURE__ */ jsx("div", { className: "w-full bg-muted/50", children: /* @__PURE__ */ jsx(
560
- "img",
561
- {
562
- src: doc.url,
563
- alt: doc.name,
564
- className: "w-full h-48 object-cover"
565
- }
566
- ) }),
567
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3", children: [
568
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
569
- !isImageType(doc.name) && /* @__PURE__ */ jsx("div", { className: cn(getFileTypeColor(doc.type)), children: getFileIcon(doc.type) }),
570
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
571
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
572
- /* @__PURE__ */ jsx("h4", { className: "font-medium text-sm truncate", children: doc.name }),
573
- /* @__PURE__ */ jsx("span", { className: cn("text-xs px-2 py-0.5 rounded-full bg-muted", getFileTypeColor(doc.type)), children: doc.type })
574
- ] }),
575
- doc.description && /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground mt-1", children: doc.description }),
576
- /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
577
- doc.size,
578
- " \u2022 Uploaded by ",
579
- doc.uploadedBy,
580
- " \u2022 ",
581
- new Date(doc.uploadedAt).toLocaleDateString()
582
- ] })
583
- ] })
717
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4 mb-2", children: [
718
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
719
+ /* @__PURE__ */ jsx("p", { className: "font-medium text-sm text-foreground", children: note.user }),
720
+ /* @__PURE__ */ jsx(Badge, { variant: note.type === "RFI Note" ? "default" : "outline", children: note.type })
584
721
  ] }),
585
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
586
- /* @__PURE__ */ jsx(
587
- Button,
588
- {
589
- variant: "ghost",
590
- size: "sm",
591
- className: "h-8 w-8 p-0",
592
- onClick: () => toast({ title: "Preview", description: `Viewing ${doc.name}` }),
593
- children: /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" })
594
- }
595
- ),
596
- /* @__PURE__ */ jsx(
597
- Button,
598
- {
599
- variant: "ghost",
600
- size: "sm",
601
- className: "h-8 w-8 p-0",
602
- onClick: () => toast({ title: "Download", description: `Downloading ${doc.name}` }),
603
- children: /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" })
604
- }
605
- ),
722
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
723
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground whitespace-nowrap", children: note.timestamp }),
606
724
  /* @__PURE__ */ jsx(
607
725
  Button,
608
726
  {
609
727
  variant: "ghost",
610
728
  size: "sm",
611
729
  className: "h-8 w-8 p-0 text-muted-foreground hover:text-foreground",
612
- onClick: () => toast({ title: "Delete", description: `Deleted ${doc.name}` }),
730
+ onClick: () => handleDeleteNote(note.id, note.content),
613
731
  children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" })
614
732
  }
615
733
  )
616
734
  ] })
617
- ] })
735
+ ] }),
736
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground", children: note.content })
618
737
  ]
619
738
  },
620
- doc.id
739
+ note.id
621
740
  )) })
622
741
  ] })
623
742
  ] });
624
743
  };
625
- var badgeVariants = cva(
626
- "inline-flex items-center rounded-full 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",
744
+ var inputVariants = cva(
745
+ "flex w-full rounded-md bg-form-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground transition-form",
627
746
  {
628
747
  variants: {
629
748
  variant: {
630
- default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
631
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
632
- destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
633
- outline: "text-foreground",
634
- success: "border-transparent bg-success text-success-foreground hover:bg-success/80",
635
- warning: "border-transparent bg-warning text-warning-foreground hover:bg-warning/80",
636
- // Business type specific variants
637
- business: "border-blue-200 bg-blue-50 text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-300",
638
- individual: "border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300",
639
- government: "border-purple-200 bg-purple-50 text-purple-700 hover:bg-purple-100 dark:border-purple-800 dark:bg-purple-950 dark:text-purple-300",
640
- nonprofit: "border-orange-200 bg-orange-50 text-orange-700 hover:bg-orange-100 dark:border-orange-800 dark:bg-orange-950 dark:text-orange-300",
641
- // Business entity type variants
642
- corporation: "border-slate-200 bg-slate-50 text-slate-700 hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300",
643
- llc: "border-teal-200 bg-teal-50 text-teal-700 hover:bg-teal-100 dark:border-teal-800 dark:bg-teal-950 dark:text-teal-300",
644
- partnership: "border-indigo-200 bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:border-indigo-800 dark:bg-indigo-950 dark:text-indigo-300",
645
- sole_proprietorship: "border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-300",
646
- // Status variants
647
- active: "border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300",
648
- inactive: "border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300",
649
- pending: "border-yellow-200 bg-yellow-50 text-yellow-700 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-300",
650
- suspended: "border-gray-200 bg-gray-50 text-gray-700 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300",
651
- // Alert type subtle variants
652
- "alert-ofac": "border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300 font-medium",
653
- "alert-dual": "border-emerald-200 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-300 font-medium",
654
- "alert-monitoring": "border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-300 font-medium",
655
- "alert-error": "border-rose-200 bg-rose-50 text-rose-700 hover:bg-rose-100 dark:border-rose-800 dark:bg-rose-950 dark:text-rose-300 font-medium"
749
+ default: "border border-form-border focus-visible:border-form-border-focus focus-visible:outline-none focus-visible:shadow-form-focus",
750
+ error: "border border-form-border-error focus-visible:border-form-border-error focus-visible:outline-none focus-visible:shadow-form-error",
751
+ success: "border border-form-border-success focus-visible:border-form-border-success focus-visible:outline-none",
752
+ disabled: "border border-form-border bg-muted cursor-not-allowed opacity-50",
753
+ readonly: "border border-form-border bg-muted/50 cursor-default"
754
+ },
755
+ size: {
756
+ default: "h-10",
757
+ sm: "h-9",
758
+ lg: "h-11"
656
759
  }
657
760
  },
658
761
  defaultVariants: {
659
- variant: "default"
762
+ variant: "default",
763
+ size: "default"
660
764
  }
661
765
  }
662
766
  );
663
- function Badge({ className, variant, ...props }) {
664
- return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
665
- }
666
- var NOTE_TYPE_OPTIONS = [
667
- { value: "RFI Note", label: "RFI Note" },
668
- { value: "Internal Note", label: "Internal Note" }
669
- ];
670
- var AlertNotes = ({ alertId, notes }) => {
671
- const [showNoteDialog, setShowNoteDialog] = useState(false);
672
- const [newNote, setNewNote] = useState("");
673
- const [noteType, setNoteType] = useState("RFI Note");
674
- const [isSubmitting, setIsSubmitting] = useState(false);
675
- const resetForm = () => {
676
- setNewNote("");
677
- setNoteType("RFI Note");
678
- };
679
- const handleCancelNote = () => {
680
- setShowNoteDialog(false);
681
- resetForm();
767
+ var EnhancedInput = React13.forwardRef(
768
+ ({ className, variant, size, label, hint, error, success, isLoading, ...props }, ref) => {
769
+ const inputVariant = error ? "error" : success ? "success" : props.disabled ? "disabled" : props.readOnly ? "readonly" : variant;
770
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
771
+ label && /* @__PURE__ */ jsxs("label", { className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: [
772
+ label,
773
+ props.required && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
774
+ ] }),
775
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
776
+ /* @__PURE__ */ jsx(
777
+ "input",
778
+ {
779
+ className: cn(inputVariants({ variant: inputVariant, size, className })),
780
+ ref,
781
+ ...props
782
+ }
783
+ ),
784
+ isLoading && /* @__PURE__ */ jsx("div", { className: "absolute right-3 top-1/2 transform -translate-y-1/2", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent" }) })
785
+ ] }),
786
+ hint && !error && !success && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: hint }),
787
+ error && /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive", children: error }),
788
+ success && /* @__PURE__ */ jsx("p", { className: "text-xs text-success", children: success })
789
+ ] });
790
+ }
791
+ );
792
+ EnhancedInput.displayName = "EnhancedInput";
793
+ var AlertDocuments = ({ alertId, documents }) => {
794
+ const [isUploading, setIsUploading] = useState(false);
795
+ const [showUploadDialog, setShowUploadDialog] = useState(false);
796
+ const [selectedFile, setSelectedFile] = useState(null);
797
+ const [documentName, setDocumentName] = useState("");
798
+ const [description, setDescription] = useState("");
799
+ const [documentType, setDocumentType] = useState("");
800
+ const handleFileSelect = (e) => {
801
+ const file = e.target.files?.[0];
802
+ if (!file) return;
803
+ setSelectedFile(file);
804
+ setDocumentName(file.name);
682
805
  };
683
- const handleAddNote = async () => {
684
- if (!newNote.trim()) {
806
+ const handleUploadSubmit = () => {
807
+ if (!selectedFile || !documentName || !documentType) {
685
808
  toast({
686
- title: "Error",
687
- description: "Please enter a note before submitting",
809
+ title: "Missing Information",
810
+ description: "Please fill in all required fields",
688
811
  variant: "destructive"
689
812
  });
690
813
  return;
691
814
  }
692
- setIsSubmitting(true);
815
+ setIsUploading(true);
693
816
  setTimeout(() => {
817
+ ({
818
+ size: `${(selectedFile.size / 1024 / 1024).toFixed(1)} MB`,
819
+ uploadedAt: (/* @__PURE__ */ new Date()).toISOString()
820
+ });
694
821
  toast({
695
- title: "Note Added",
696
- description: "Your note has been added successfully"
822
+ title: "Upload Successful",
823
+ description: `${documentName} uploaded successfully`
697
824
  });
698
- setShowNoteDialog(false);
825
+ setIsUploading(false);
826
+ setShowUploadDialog(false);
699
827
  resetForm();
700
- setIsSubmitting(false);
701
- }, 500);
828
+ }, 1e3);
702
829
  };
703
- const handleDeleteNote = (noteId, noteContent) => {
704
- toast({
705
- title: "Note Deleted",
706
- description: `Note deleted successfully`
707
- });
708
- console.log("Deleting note:", noteId);
830
+ const resetForm = () => {
831
+ setSelectedFile(null);
832
+ setDocumentName("");
833
+ setDescription("");
834
+ setDocumentType("");
835
+ const fileInput = document.getElementById("file-upload");
836
+ if (fileInput) fileInput.value = "";
837
+ };
838
+ const handleCancelUpload = () => {
839
+ setShowUploadDialog(false);
840
+ resetForm();
841
+ };
842
+ const isImageType = (name) => {
843
+ const imageExtensions = [".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"];
844
+ return imageExtensions.some((ext) => name.toLowerCase().endsWith(ext));
845
+ };
846
+ const getFileIcon = (type) => {
847
+ return /* @__PURE__ */ jsx(FileText, { className: "h-5 w-5" });
848
+ };
849
+ const getFileTypeColor = (type) => {
850
+ switch (type.toUpperCase()) {
851
+ case "PDF":
852
+ return "text-red-500";
853
+ case "DOCX":
854
+ case "DOC":
855
+ return "text-blue-500";
856
+ case "XLSX":
857
+ case "XLS":
858
+ return "text-green-500";
859
+ case "JPG":
860
+ case "JPEG":
861
+ case "PNG":
862
+ return "text-purple-500";
863
+ default:
864
+ return "text-muted-foreground";
865
+ }
709
866
  };
867
+ const documentTypeOptions = [
868
+ { value: "ID_DOCUMENT_FRONT", label: "ID Document (Front)" },
869
+ { value: "ID_DOCUMENT_BACK", label: "ID Document (Back)" },
870
+ { value: "PASSPORT", label: "Passport" },
871
+ { value: "PROOF_OF_ADDRESS", label: "Proof of Address" },
872
+ { value: "BANK_STATEMENT", label: "Bank Statement" },
873
+ { value: "BUSINESS_LICENSE", label: "Business License" },
874
+ { value: "TAX_DOCUMENT", label: "Tax Document" },
875
+ { value: "OTHER", label: "Other" }
876
+ ];
710
877
  return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
711
- showNoteDialog && createPortal(
878
+ showUploadDialog && createPortal(
712
879
  /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-[100] flex items-center justify-center p-4", children: [
713
880
  /* @__PURE__ */ jsx(
714
881
  "div",
715
882
  {
716
883
  className: "fixed inset-0 bg-background/80 backdrop-blur-sm",
717
- onClick: handleCancelNote
884
+ onClick: handleCancelUpload
718
885
  }
719
886
  ),
720
887
  /* @__PURE__ */ jsxs("div", { className: "relative bg-card border rounded-lg shadow-lg max-w-lg w-full p-6 z-[101]", children: [
721
888
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-6", children: [
722
- /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold", children: "Add Note" }),
889
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold", children: "Upload Document" }),
723
890
  /* @__PURE__ */ jsx(
724
891
  Button,
725
892
  {
726
893
  variant: "ghost",
727
894
  size: "sm",
728
895
  className: "h-8 w-8 p-0",
729
- onClick: handleCancelNote,
896
+ onClick: handleCancelUpload,
730
897
  children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
731
898
  }
732
899
  )
733
900
  ] }),
734
901
  /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
902
+ /* @__PURE__ */ jsxs("div", { className: "border-2 border-dashed rounded-lg p-6 text-center hover:border-primary/50 transition-colors", children: [
903
+ /* @__PURE__ */ jsx(
904
+ "input",
905
+ {
906
+ type: "file",
907
+ id: "file-upload-dialog",
908
+ className: "hidden",
909
+ onChange: handleFileSelect,
910
+ disabled: isUploading
911
+ }
912
+ ),
913
+ /* @__PURE__ */ jsxs(
914
+ "label",
915
+ {
916
+ htmlFor: "file-upload-dialog",
917
+ className: cn(
918
+ "cursor-pointer flex flex-col items-center gap-2",
919
+ isUploading && "opacity-50 cursor-not-allowed"
920
+ ),
921
+ children: [
922
+ /* @__PURE__ */ jsx(Upload, { className: "h-8 w-8 text-muted-foreground" }),
923
+ /* @__PURE__ */ jsxs("div", { children: [
924
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: selectedFile ? "Change file" : "Click to upload or drag and drop" }),
925
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "PDF, DOC, DOCX, JPG, PNG up to 10MB" })
926
+ ] })
927
+ ]
928
+ }
929
+ )
930
+ ] }),
931
+ selectedFile && /* @__PURE__ */ jsxs("div", { className: "p-3 bg-muted/50 rounded-lg", children: [
932
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Selected file:" }),
933
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: selectedFile.name }),
934
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
935
+ (selectedFile.size / 1024 / 1024).toFixed(2),
936
+ " MB"
937
+ ] })
938
+ ] }),
735
939
  /* @__PURE__ */ jsx(
736
- EnhancedSelect,
940
+ EnhancedInput,
737
941
  {
738
- label: "Note Type",
739
- value: noteType,
740
- onValueChange: (value) => setNoteType(value),
741
- options: NOTE_TYPE_OPTIONS
942
+ label: "Document name",
943
+ value: documentName,
944
+ onChange: (e) => setDocumentName(e.target.value),
945
+ placeholder: "Enter document name"
742
946
  }
743
947
  ),
744
948
  /* @__PURE__ */ jsx(
745
949
  EnhancedTextarea,
746
950
  {
747
- label: "Note",
748
- placeholder: "Enter your note here...",
749
- value: newNote,
750
- onChange: (e) => setNewNote(e.target.value),
751
- rows: 6
951
+ label: "Description",
952
+ value: description,
953
+ onChange: (e) => setDescription(e.target.value),
954
+ placeholder: "Enter document description (optional)",
955
+ rows: 3
956
+ }
957
+ ),
958
+ /* @__PURE__ */ jsx(
959
+ EnhancedSelect,
960
+ {
961
+ label: "Document type",
962
+ value: documentType,
963
+ onValueChange: setDocumentType,
964
+ placeholder: "Select document type",
965
+ options: documentTypeOptions
752
966
  }
753
967
  )
754
968
  ] }),
@@ -757,8 +971,8 @@ var AlertNotes = ({ alertId, notes }) => {
757
971
  Button,
758
972
  {
759
973
  variant: "outline",
760
- onClick: handleCancelNote,
761
- disabled: isSubmitting,
974
+ onClick: handleCancelUpload,
975
+ disabled: isUploading,
762
976
  className: "flex-1",
763
977
  children: "Cancel"
764
978
  }
@@ -766,10 +980,10 @@ var AlertNotes = ({ alertId, notes }) => {
766
980
  /* @__PURE__ */ jsx(
767
981
  Button,
768
982
  {
769
- onClick: handleAddNote,
770
- disabled: isSubmitting || !newNote.trim(),
983
+ onClick: handleUploadSubmit,
984
+ disabled: isUploading,
771
985
  className: "flex-1",
772
- children: isSubmitting ? "Adding..." : "Add Note"
986
+ children: isUploading ? "Uploading..." : "Upload"
773
987
  }
774
988
  )
775
989
  ] })
@@ -777,311 +991,97 @@ var AlertNotes = ({ alertId, notes }) => {
777
991
  ] }),
778
992
  document.body
779
993
  ),
780
- /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
994
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
781
995
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
782
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium text-foreground", children: "Note History" }),
996
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium text-foreground", children: "Uploaded Documents" }),
783
997
  /* @__PURE__ */ jsxs(
784
998
  Button,
785
999
  {
786
- onClick: () => setShowNoteDialog(true),
1000
+ onClick: () => setShowUploadDialog(true),
787
1001
  variant: "ghost",
788
1002
  size: "sm",
789
1003
  className: "gap-2 text-primary hover:text-primary",
790
1004
  children: [
791
- /* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" }),
792
- "Add Note"
1005
+ /* @__PURE__ */ jsx(Upload, { className: "h-4 w-4" }),
1006
+ "Upload"
793
1007
  ]
794
1008
  }
795
1009
  )
796
1010
  ] }),
797
- notes.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8 text-muted-foreground", children: [
798
- /* @__PURE__ */ jsx(MessageSquare, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
799
- /* @__PURE__ */ jsx("p", { children: "No notes yet" })
800
- ] }) : /* @__PURE__ */ jsx("div", { className: "space-y-3", children: notes.map((note) => /* @__PURE__ */ jsxs(
1011
+ documents.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8 text-muted-foreground", children: [
1012
+ /* @__PURE__ */ jsx(FileText, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
1013
+ /* @__PURE__ */ jsx("p", { children: "No documents uploaded yet" })
1014
+ ] }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: documents.map((doc) => /* @__PURE__ */ jsxs(
801
1015
  "div",
802
1016
  {
803
- className: "border rounded-lg p-4 bg-muted/30",
1017
+ className: "border rounded-lg hover:bg-muted/30 transition-colors overflow-hidden",
804
1018
  children: [
805
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4 mb-2", children: [
806
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
807
- /* @__PURE__ */ jsx("p", { className: "font-medium text-sm text-foreground", children: note.user }),
808
- /* @__PURE__ */ jsx(Badge, { variant: note.type === "RFI Note" ? "default" : "outline", children: note.type })
1019
+ isImageType(doc.name) && doc.url && /* @__PURE__ */ jsx("div", { className: "w-full bg-muted/50", children: /* @__PURE__ */ jsx(
1020
+ "img",
1021
+ {
1022
+ src: doc.url,
1023
+ alt: doc.name,
1024
+ className: "w-full h-48 object-cover"
1025
+ }
1026
+ ) }),
1027
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3", children: [
1028
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
1029
+ !isImageType(doc.name) && /* @__PURE__ */ jsx("div", { className: cn(getFileTypeColor(doc.type)), children: getFileIcon(doc.type) }),
1030
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
1031
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1032
+ /* @__PURE__ */ jsx("h4", { className: "font-medium text-sm truncate", children: doc.name }),
1033
+ /* @__PURE__ */ jsx("span", { className: cn("text-xs px-2 py-0.5 rounded-full bg-muted", getFileTypeColor(doc.type)), children: doc.type })
1034
+ ] }),
1035
+ doc.description && /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground mt-1", children: doc.description }),
1036
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
1037
+ doc.size,
1038
+ " \u2022 Uploaded by ",
1039
+ doc.uploadedBy,
1040
+ " \u2022 ",
1041
+ new Date(doc.uploadedAt).toLocaleDateString()
1042
+ ] })
1043
+ ] })
809
1044
  ] }),
810
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
811
- /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground whitespace-nowrap", children: note.timestamp }),
1045
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
812
1046
  /* @__PURE__ */ jsx(
813
1047
  Button,
814
1048
  {
815
1049
  variant: "ghost",
816
1050
  size: "sm",
817
- className: "h-8 w-8 p-0 text-muted-foreground hover:text-foreground",
818
- onClick: () => handleDeleteNote(note.id, note.content),
819
- children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" })
1051
+ className: "h-8 w-8 p-0",
1052
+ onClick: () => toast({ title: "Preview", description: `Viewing ${doc.name}` }),
1053
+ children: /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" })
820
1054
  }
821
- )
822
- ] })
823
- ] }),
824
- /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground", children: note.content })
825
- ]
826
- },
827
- note.id
828
- )) })
829
- ] })
830
- ] });
831
- };
832
- var AlertTimeline = ({ events }) => {
833
- const getIcon = (action) => {
834
- if (action.includes("Created")) return /* @__PURE__ */ jsx(Circle, { className: "h-4 w-4" });
835
- if (action.includes("Assigned")) return /* @__PURE__ */ jsx(UserPlus, { className: "h-4 w-4" });
836
- if (action.includes("Updated") || action.includes("Modified")) return /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4" });
837
- if (action.includes("Closed") || action.includes("Resolved")) return /* @__PURE__ */ jsx(CheckCircle, { className: "h-4 w-4" });
838
- if (action.includes("Rejected")) return /* @__PURE__ */ jsx(XCircle, { className: "h-4 w-4" });
839
- return /* @__PURE__ */ jsx(Circle, { className: "h-4 w-4" });
840
- };
841
- const getStatusColor2 = (status) => {
842
- switch (status) {
843
- case "Unassigned":
844
- return "text-destructive";
845
- case "Closed":
846
- return "text-success";
847
- case "In Progress":
848
- return "text-warning";
849
- default:
850
- return "text-muted-foreground";
851
- }
852
- };
853
- if (events.length === 0) {
854
- return /* @__PURE__ */ jsx("div", { className: "text-center py-8 text-muted-foreground", children: "No timeline events yet" });
855
- }
856
- return /* @__PURE__ */ jsx("div", { className: "space-y-3", children: events.map((event, index) => /* @__PURE__ */ jsxs("div", { className: "relative pl-6 pb-3", children: [
857
- index !== events.length - 1 && /* @__PURE__ */ jsx("div", { className: "absolute left-[7px] top-5 bottom-0 w-[2px] bg-border" }),
858
- /* @__PURE__ */ jsx("div", { className: cn(
859
- "absolute left-0 top-0 flex-none",
860
- getStatusColor2(event.status)
861
- ), children: /* @__PURE__ */ jsx("div", { className: "h-4 w-4", children: getIcon(event.action) }) }),
862
- /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
863
- /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-foreground", children: event.action }),
864
- /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
865
- "by ",
866
- event.user
867
- ] }),
868
- event.details && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: event.details }),
869
- event.status && /* @__PURE__ */ jsxs("p", { className: cn("text-xs font-medium", getStatusColor2(event.status)), children: [
870
- "Status: ",
871
- event.status
872
- ] }),
873
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground/70 pt-0.5", children: event.timestamp })
874
- ] })
875
- ] }, event.id)) });
876
- };
877
- var cardVariants = cva(
878
- "rounded-lg border bg-card text-card-foreground transition-all duration-200",
879
- {
880
- variants: {
881
- variant: {
882
- default: "shadow-sm",
883
- elevated: "shadow-md hover:shadow-lg",
884
- outlined: "border-2 shadow-none",
885
- ghost: "border-transparent shadow-none bg-transparent",
886
- subtle: "border-border/75 shadow-none"
887
- },
888
- size: {
889
- sm: "p-3",
890
- md: "p-4",
891
- lg: "p-6",
892
- none: "p-0"
893
- },
894
- fullHeight: {
895
- true: "h-full flex flex-col",
896
- false: ""
897
- },
898
- interactive: {
899
- true: "cursor-pointer hover:shadow-md hover:scale-[1.02]",
900
- false: ""
901
- }
902
- },
903
- defaultVariants: {
904
- variant: "default",
905
- size: "none",
906
- fullHeight: false,
907
- interactive: false
908
- }
909
- }
910
- );
911
- var Card = React13.forwardRef(
912
- ({ className, variant, size, fullHeight, interactive, ...props }, ref) => /* @__PURE__ */ jsx(
913
- "div",
914
- {
915
- ref,
916
- className: cn(cardVariants({ variant, size, fullHeight, interactive }), className),
917
- ...props
918
- }
919
- )
920
- );
921
- Card.displayName = "Card";
922
- var cardHeaderVariants = cva(
923
- "flex flex-col space-y-1.5",
924
- {
925
- variants: {
926
- size: {
927
- sm: "px-3 pt-3 pb-2",
928
- md: "px-4 pt-4 pb-3",
929
- lg: "px-6 pt-6 pb-4"
930
- },
931
- align: {
932
- start: "items-start",
933
- center: "items-center",
934
- end: "items-end"
935
- },
936
- direction: {
937
- row: "flex-row justify-between items-center space-y-0 space-x-4",
938
- column: "flex-col space-y-1.5"
939
- }
940
- },
941
- defaultVariants: {
942
- size: "lg",
943
- align: "start",
944
- direction: "column"
945
- }
946
- }
947
- );
948
- var CardHeader = React13.forwardRef(
949
- ({ className, size, align, direction, ...props }, ref) => /* @__PURE__ */ jsx(
950
- "div",
951
- {
952
- ref,
953
- className: cn(cardHeaderVariants({ size, align, direction }), className),
954
- ...props
955
- }
956
- )
957
- );
958
- CardHeader.displayName = "CardHeader";
959
- var cardTitleVariants = cva(
960
- "font-semibold leading-none tracking-tight",
961
- {
962
- variants: {
963
- size: {
964
- sm: "text-base",
965
- md: "text-lg",
966
- lg: "text-xl"
967
- }
968
- },
969
- defaultVariants: {
970
- size: "md"
971
- }
972
- }
973
- );
974
- var CardTitle = React13.forwardRef(
975
- ({ className, size, ...props }, ref) => /* @__PURE__ */ jsx(
976
- "h3",
977
- {
978
- ref,
979
- className: cn(cardTitleVariants({ size }), className),
980
- ...props
981
- }
982
- )
983
- );
984
- CardTitle.displayName = "CardTitle";
985
- var CardDescription = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
986
- "p",
987
- {
988
- ref,
989
- className: cn("text-sm text-muted-foreground", className),
990
- ...props
991
- }
992
- ));
993
- CardDescription.displayName = "CardDescription";
994
- var cardContentVariants = cva(
995
- "",
996
- {
997
- variants: {
998
- size: {
999
- sm: "px-3 pb-2",
1000
- md: "px-4 pb-3",
1001
- lg: "px-6 pb-4"
1002
- },
1003
- fullHeight: {
1004
- true: "flex-1",
1005
- false: ""
1006
- }
1007
- },
1008
- defaultVariants: {
1009
- size: "lg",
1010
- fullHeight: false
1011
- }
1012
- }
1013
- );
1014
- var CardContent = React13.forwardRef(
1015
- ({ className, size, fullHeight, ...props }, ref) => /* @__PURE__ */ jsx(
1016
- "div",
1017
- {
1018
- ref,
1019
- className: cn(cardContentVariants({ size, fullHeight }), className),
1020
- ...props
1021
- }
1022
- )
1023
- );
1024
- CardContent.displayName = "CardContent";
1025
- var cardFooterVariants = cva(
1026
- "flex items-center pt-0",
1027
- {
1028
- variants: {
1029
- size: {
1030
- sm: "p-3 pt-0",
1031
- md: "p-4 pt-0",
1032
- lg: "p-6 pt-0"
1033
- },
1034
- justify: {
1035
- start: "justify-start",
1036
- center: "justify-center",
1037
- end: "justify-end",
1038
- between: "justify-between"
1039
- }
1040
- },
1041
- defaultVariants: {
1042
- size: "lg",
1043
- justify: "start"
1044
- }
1045
- }
1046
- );
1047
- var CardFooter = React13.forwardRef(
1048
- ({ className, size, justify, ...props }, ref) => /* @__PURE__ */ jsx(
1049
- "div",
1050
- {
1051
- ref,
1052
- className: cn(cardFooterVariants({ size, justify }), className),
1053
- ...props
1054
- }
1055
- )
1056
- );
1057
- CardFooter.displayName = "CardFooter";
1058
- var FormCard = React13.forwardRef(
1059
- ({ title, description, children, headerActions, className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsxs(
1060
- Card,
1061
- {
1062
- ref,
1063
- variant,
1064
- fullHeight: true,
1065
- className: cn("", className),
1066
- ...props,
1067
- children: [
1068
- /* @__PURE__ */ jsxs(
1069
- CardHeader,
1070
- {
1071
- direction: headerActions ? "row" : "column",
1072
- size: "md",
1073
- children: [
1074
- /* @__PURE__ */ jsx("div", { className: "space-y-1", children: /* @__PURE__ */ jsx(CardTitle, { size: "md", children: title }) }),
1075
- headerActions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: headerActions })
1076
- ]
1077
- }
1078
- ),
1079
- /* @__PURE__ */ jsx(CardContent, { size: "md", fullHeight: true, children })
1080
- ]
1081
- }
1082
- )
1083
- );
1084
- FormCard.displayName = "FormCard";
1055
+ ),
1056
+ /* @__PURE__ */ jsx(
1057
+ Button,
1058
+ {
1059
+ variant: "ghost",
1060
+ size: "sm",
1061
+ className: "h-8 w-8 p-0",
1062
+ onClick: () => toast({ title: "Download", description: `Downloading ${doc.name}` }),
1063
+ children: /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" })
1064
+ }
1065
+ ),
1066
+ /* @__PURE__ */ jsx(
1067
+ Button,
1068
+ {
1069
+ variant: "ghost",
1070
+ size: "sm",
1071
+ className: "h-8 w-8 p-0 text-muted-foreground hover:text-foreground",
1072
+ onClick: () => toast({ title: "Delete", description: `Deleted ${doc.name}` }),
1073
+ children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" })
1074
+ }
1075
+ )
1076
+ ] })
1077
+ ] })
1078
+ ]
1079
+ },
1080
+ doc.id
1081
+ )) })
1082
+ ] })
1083
+ ] });
1084
+ };
1085
1085
  var InfoField = ({ label, value, layout = "vertical", className }) => {
1086
1086
  if (layout === "horizontal") {
1087
1087
  return /* @__PURE__ */ jsxs("div", { className: `flex items-start gap-3 ${className || ""}`, children: [
@@ -1394,6 +1394,184 @@ var ContextSection = ({ alert }) => {
1394
1394
  ] }) })
1395
1395
  ] });
1396
1396
  };
1397
+ var EditableInfoField = ({
1398
+ label,
1399
+ value,
1400
+ options,
1401
+ onChange,
1402
+ placeholder = "Select...",
1403
+ renderValue,
1404
+ className
1405
+ }) => {
1406
+ const [isEditing, setIsEditing] = useState(false);
1407
+ const handleChange = (newValue) => {
1408
+ onChange(newValue);
1409
+ setIsEditing(false);
1410
+ };
1411
+ if (isEditing) {
1412
+ return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(
1413
+ EnhancedSelect,
1414
+ {
1415
+ label,
1416
+ value: value || "",
1417
+ onValueChange: handleChange,
1418
+ options,
1419
+ placeholder
1420
+ }
1421
+ ) });
1422
+ }
1423
+ const displayValue = value ? renderValue ? renderValue(value) : value : placeholder;
1424
+ return /* @__PURE__ */ jsx(
1425
+ "div",
1426
+ {
1427
+ className: cn("cursor-pointer transition-colors hover:bg-muted/50 rounded-md -mx-2 px-2 -my-1 py-1", className),
1428
+ onClick: () => setIsEditing(true),
1429
+ role: "button",
1430
+ tabIndex: 0,
1431
+ onKeyDown: (e) => {
1432
+ if (e.key === "Enter" || e.key === " ") {
1433
+ e.preventDefault();
1434
+ setIsEditing(true);
1435
+ }
1436
+ },
1437
+ children: /* @__PURE__ */ jsx(InfoField, { label, value: displayValue })
1438
+ }
1439
+ );
1440
+ };
1441
+
1442
+ // src/lib/utils/alert-utils.ts
1443
+ var getTypeBadgeVariant = (type) => {
1444
+ switch (type) {
1445
+ case "Ofac":
1446
+ return "alert-ofac";
1447
+ case "Dual Approval":
1448
+ return "alert-dual";
1449
+ case "Transaction Monitoring":
1450
+ return "alert-monitoring";
1451
+ case "Transaction Processing Error":
1452
+ return "alert-error";
1453
+ default:
1454
+ return "outline";
1455
+ }
1456
+ };
1457
+ var getStatusColor = (status) => {
1458
+ switch (status) {
1459
+ case "Unassigned":
1460
+ return "text-destructive";
1461
+ case "Closed":
1462
+ return "text-success";
1463
+ case "In Progress":
1464
+ return "text-warning";
1465
+ default:
1466
+ return "";
1467
+ }
1468
+ };
1469
+
1470
+ // src/lib/constants.ts
1471
+ var COUNTRY_OPTIONS = [
1472
+ { value: "US", label: "United States" },
1473
+ { value: "CA", label: "Canada" },
1474
+ { value: "GB", label: "United Kingdom" },
1475
+ { value: "DE", label: "Germany" },
1476
+ { value: "FR", label: "France" }
1477
+ ];
1478
+ var FI_ID_TYPE_OPTIONS = [
1479
+ { value: "bic", label: "BIC" },
1480
+ { value: "swift", label: "SWIFT" },
1481
+ { value: "aba", label: "ABA" },
1482
+ { value: "iban", label: "IBAN" },
1483
+ { value: "routing", label: "Routing Number" }
1484
+ ];
1485
+ var ADDRESS_TYPE_OPTIONS = {
1486
+ FI: [
1487
+ { value: "headquarters", label: "Headquarters" },
1488
+ { value: "branch", label: "Branch Office" },
1489
+ { value: "correspondent", label: "Correspondent Bank" }
1490
+ ]
1491
+ };
1492
+ var RFI_STATUS_OPTIONS = [
1493
+ { value: "Completed", label: "Completed" },
1494
+ { value: "Provided", label: "Provided" },
1495
+ { value: "Pending", label: "Pending" }
1496
+ ];
1497
+ var ASSIGNEE_OPTIONS = [
1498
+ { value: "John Smith", label: "John Smith" },
1499
+ { value: "Sarah Johnson", label: "Sarah Johnson" },
1500
+ { value: "Michael Chen", label: "Michael Chen" },
1501
+ { value: "approverdev", label: "approverdev" },
1502
+ { value: "Unassigned", label: "Unassigned" }
1503
+ ];
1504
+ var AlertDetailView = ({
1505
+ alert,
1506
+ rfiStatus,
1507
+ assignee,
1508
+ onRfiStatusChange,
1509
+ onAssigneeChange
1510
+ }) => {
1511
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col lg:flex-row gap-6", children: [
1512
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
1513
+ /* @__PURE__ */ jsx(
1514
+ FormCard,
1515
+ {
1516
+ title: "Alert Information",
1517
+ headerActions: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", children: /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4" }) }),
1518
+ children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
1519
+ /* @__PURE__ */ jsx(InfoField, { label: "Alert ID", value: alert.id }),
1520
+ /* @__PURE__ */ jsx(
1521
+ InfoField,
1522
+ {
1523
+ label: "Type",
1524
+ value: /* @__PURE__ */ jsx(Badge, { variant: getTypeBadgeVariant(alert.type), children: alert.type })
1525
+ }
1526
+ ),
1527
+ /* @__PURE__ */ jsx(
1528
+ InfoField,
1529
+ {
1530
+ label: "Status",
1531
+ value: /* @__PURE__ */ jsx("span", { className: cn("font-medium", getStatusColor(alert.status)), children: alert.status })
1532
+ }
1533
+ ),
1534
+ /* @__PURE__ */ jsx(InfoField, { label: "Created At", value: alert.createdAt }),
1535
+ /* @__PURE__ */ jsx(
1536
+ InfoField,
1537
+ {
1538
+ label: "Context Type",
1539
+ value: /* @__PURE__ */ jsx(Badge, { variant: "outline", children: alert.contextType })
1540
+ }
1541
+ ),
1542
+ /* @__PURE__ */ jsx(InfoField, { label: "Context ID", value: alert.contextId || "N/A" }),
1543
+ /* @__PURE__ */ jsx(
1544
+ EditableInfoField,
1545
+ {
1546
+ label: "Assignee",
1547
+ value: assignee,
1548
+ options: ASSIGNEE_OPTIONS,
1549
+ onChange: onAssigneeChange,
1550
+ placeholder: "Unassigned"
1551
+ }
1552
+ ),
1553
+ /* @__PURE__ */ jsx(
1554
+ EditableInfoField,
1555
+ {
1556
+ label: "RFI Status",
1557
+ value: rfiStatus,
1558
+ options: RFI_STATUS_OPTIONS,
1559
+ onChange: onRfiStatusChange,
1560
+ placeholder: "Select status",
1561
+ renderValue: (value) => /* @__PURE__ */ jsx(Badge, { variant: "success", children: value })
1562
+ }
1563
+ ),
1564
+ /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(InfoField, { label: "Description", value: alert.description }) })
1565
+ ] })
1566
+ }
1567
+ ),
1568
+ /* @__PURE__ */ jsx(ContextSection, { alert }),
1569
+ /* @__PURE__ */ jsx(FormCard, { title: "Notes", children: /* @__PURE__ */ jsx(AlertNotes, { alertId: alert.id, notes: alert.notes || [] }) }),
1570
+ /* @__PURE__ */ jsx(FormCard, { title: "Documents", children: /* @__PURE__ */ jsx(AlertDocuments, { alertId: alert.id, documents: alert.documents || [] }) })
1571
+ ] }),
1572
+ /* @__PURE__ */ jsx("div", { className: "lg:w-64", children: /* @__PURE__ */ jsx(FormCard, { title: "Status Timeline", className: "h-full", children: /* @__PURE__ */ jsx(AlertTimeline, { events: alert.timeline || [] }) }) })
1573
+ ] });
1574
+ };
1397
1575
 
1398
1576
  // src/assets/braid-logo.png
1399
1577
  var braid_logo_default = "./braid-logo-343BOQZ2.png";
@@ -3062,41 +3240,6 @@ var ACHTransferSection = ({ isEditing, onToggleEdit, className, hideActions }) =
3062
3240
  }
3063
3241
  );
3064
3242
  };
3065
-
3066
- // src/lib/constants.ts
3067
- var COUNTRY_OPTIONS = [
3068
- { value: "US", label: "United States" },
3069
- { value: "CA", label: "Canada" },
3070
- { value: "GB", label: "United Kingdom" },
3071
- { value: "DE", label: "Germany" },
3072
- { value: "FR", label: "France" }
3073
- ];
3074
- var FI_ID_TYPE_OPTIONS = [
3075
- { value: "bic", label: "BIC" },
3076
- { value: "swift", label: "SWIFT" },
3077
- { value: "aba", label: "ABA" },
3078
- { value: "iban", label: "IBAN" },
3079
- { value: "routing", label: "Routing Number" }
3080
- ];
3081
- var ADDRESS_TYPE_OPTIONS = {
3082
- FI: [
3083
- { value: "headquarters", label: "Headquarters" },
3084
- { value: "branch", label: "Branch Office" },
3085
- { value: "correspondent", label: "Correspondent Bank" }
3086
- ]
3087
- };
3088
- var RFI_STATUS_OPTIONS = [
3089
- { value: "Completed", label: "Completed" },
3090
- { value: "Provided", label: "Provided" },
3091
- { value: "Pending", label: "Pending" }
3092
- ];
3093
- var ASSIGNEE_OPTIONS = [
3094
- { value: "John Smith", label: "John Smith" },
3095
- { value: "Sarah Johnson", label: "Sarah Johnson" },
3096
- { value: "Michael Chen", label: "Michael Chen" },
3097
- { value: "approverdev", label: "approverdev" },
3098
- { value: "Unassigned", label: "Unassigned" }
3099
- ];
3100
3243
  var AddressForm = ({
3101
3244
  title,
3102
3245
  description,
@@ -4794,6 +4937,75 @@ var ListPage = React13.forwardRef(
4794
4937
  }
4795
4938
  );
4796
4939
  ListPage.displayName = "ListPage";
4940
+ var StatementHeader = ({ data, onEdit }) => {
4941
+ return /* @__PURE__ */ jsxs(Card, { children: [
4942
+ /* @__PURE__ */ jsxs(CardHeader, { direction: "row", children: [
4943
+ /* @__PURE__ */ jsx(CardTitle, { size: "md", children: "Statement Summary" }),
4944
+ /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: onEdit, children: [
4945
+ /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4 mr-2" }),
4946
+ "Edit"
4947
+ ] })
4948
+ ] }),
4949
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: [
4950
+ /* @__PURE__ */ jsx(
4951
+ InfoField,
4952
+ {
4953
+ label: "Account",
4954
+ value: data.account,
4955
+ layout: "horizontal"
4956
+ }
4957
+ ),
4958
+ /* @__PURE__ */ jsx(
4959
+ InfoField,
4960
+ {
4961
+ label: "Product ID",
4962
+ value: data.productId,
4963
+ layout: "horizontal"
4964
+ }
4965
+ ),
4966
+ /* @__PURE__ */ jsx(
4967
+ InfoField,
4968
+ {
4969
+ label: "Program ID",
4970
+ value: data.programId,
4971
+ layout: "horizontal"
4972
+ }
4973
+ ),
4974
+ /* @__PURE__ */ jsx(
4975
+ InfoField,
4976
+ {
4977
+ label: "Start Date",
4978
+ value: data.startDate,
4979
+ layout: "horizontal"
4980
+ }
4981
+ ),
4982
+ /* @__PURE__ */ jsx(
4983
+ InfoField,
4984
+ {
4985
+ label: "End Date",
4986
+ value: data.endDate,
4987
+ layout: "horizontal"
4988
+ }
4989
+ ),
4990
+ /* @__PURE__ */ jsx(
4991
+ InfoField,
4992
+ {
4993
+ label: "Starting Balance",
4994
+ value: data.startingBalance,
4995
+ layout: "horizontal"
4996
+ }
4997
+ ),
4998
+ /* @__PURE__ */ jsx(
4999
+ InfoField,
5000
+ {
5001
+ label: "Ending Balance",
5002
+ value: data.endingBalance,
5003
+ layout: "horizontal"
5004
+ }
5005
+ )
5006
+ ] }) })
5007
+ ] });
5008
+ };
4797
5009
  var ACHDetailsSection = ({ data }) => {
4798
5010
  const formatCurrency = (value) => {
4799
5011
  return new Intl.NumberFormat("en-US", {
@@ -5338,50 +5550,6 @@ var DropdownMenuSeparator = React13.forwardRef(({ className, ...props }, ref) =>
5338
5550
  }
5339
5551
  ));
5340
5552
  DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
5341
- var EditableInfoField = ({
5342
- label,
5343
- value,
5344
- options,
5345
- onChange,
5346
- placeholder = "Select...",
5347
- renderValue,
5348
- className
5349
- }) => {
5350
- const [isEditing, setIsEditing] = useState(false);
5351
- const handleChange = (newValue) => {
5352
- onChange(newValue);
5353
- setIsEditing(false);
5354
- };
5355
- if (isEditing) {
5356
- return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(
5357
- EnhancedSelect,
5358
- {
5359
- label,
5360
- value: value || "",
5361
- onValueChange: handleChange,
5362
- options,
5363
- placeholder
5364
- }
5365
- ) });
5366
- }
5367
- const displayValue = value ? renderValue ? renderValue(value) : value : placeholder;
5368
- return /* @__PURE__ */ jsx(
5369
- "div",
5370
- {
5371
- className: cn("cursor-pointer transition-colors hover:bg-muted/50 rounded-md -mx-2 px-2 -my-1 py-1", className),
5372
- onClick: () => setIsEditing(true),
5373
- role: "button",
5374
- tabIndex: 0,
5375
- onKeyDown: (e) => {
5376
- if (e.key === "Enter" || e.key === " ") {
5377
- e.preventDefault();
5378
- setIsEditing(true);
5379
- }
5380
- },
5381
- children: /* @__PURE__ */ jsx(InfoField, { label, value: displayValue })
5382
- }
5383
- );
5384
- };
5385
5553
  var EntityCard = React13.forwardRef(
5386
5554
  ({
5387
5555
  entity,
@@ -6527,105 +6695,6 @@ var useAlertDetail = (id) => {
6527
6695
  handleAssigneeChange
6528
6696
  };
6529
6697
  };
6530
-
6531
- // src/lib/utils/alert-utils.ts
6532
- var getTypeBadgeVariant = (type) => {
6533
- switch (type) {
6534
- case "Ofac":
6535
- return "alert-ofac";
6536
- case "Dual Approval":
6537
- return "alert-dual";
6538
- case "Transaction Monitoring":
6539
- return "alert-monitoring";
6540
- case "Transaction Processing Error":
6541
- return "alert-error";
6542
- default:
6543
- return "outline";
6544
- }
6545
- };
6546
- var getStatusColor = (status) => {
6547
- switch (status) {
6548
- case "Unassigned":
6549
- return "text-destructive";
6550
- case "Closed":
6551
- return "text-success";
6552
- case "In Progress":
6553
- return "text-warning";
6554
- default:
6555
- return "";
6556
- }
6557
- };
6558
- var AlertDetailView = ({
6559
- alert,
6560
- rfiStatus,
6561
- assignee,
6562
- onRfiStatusChange,
6563
- onAssigneeChange
6564
- }) => {
6565
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col lg:flex-row gap-6", children: [
6566
- /* @__PURE__ */ jsxs("div", { className: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
6567
- /* @__PURE__ */ jsx(
6568
- FormCard,
6569
- {
6570
- title: "Alert Information",
6571
- headerActions: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", children: /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4" }) }),
6572
- children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
6573
- /* @__PURE__ */ jsx(InfoField, { label: "Alert ID", value: alert.id }),
6574
- /* @__PURE__ */ jsx(
6575
- InfoField,
6576
- {
6577
- label: "Type",
6578
- value: /* @__PURE__ */ jsx(Badge, { variant: getTypeBadgeVariant(alert.type), children: alert.type })
6579
- }
6580
- ),
6581
- /* @__PURE__ */ jsx(
6582
- InfoField,
6583
- {
6584
- label: "Status",
6585
- value: /* @__PURE__ */ jsx("span", { className: cn("font-medium", getStatusColor(alert.status)), children: alert.status })
6586
- }
6587
- ),
6588
- /* @__PURE__ */ jsx(InfoField, { label: "Created At", value: alert.createdAt }),
6589
- /* @__PURE__ */ jsx(
6590
- InfoField,
6591
- {
6592
- label: "Context Type",
6593
- value: /* @__PURE__ */ jsx(Badge, { variant: "outline", children: alert.contextType })
6594
- }
6595
- ),
6596
- /* @__PURE__ */ jsx(InfoField, { label: "Context ID", value: alert.contextId || "N/A" }),
6597
- /* @__PURE__ */ jsx(
6598
- EditableInfoField,
6599
- {
6600
- label: "Assignee",
6601
- value: assignee,
6602
- options: ASSIGNEE_OPTIONS,
6603
- onChange: onAssigneeChange,
6604
- placeholder: "Unassigned"
6605
- }
6606
- ),
6607
- /* @__PURE__ */ jsx(
6608
- EditableInfoField,
6609
- {
6610
- label: "RFI Status",
6611
- value: rfiStatus,
6612
- options: RFI_STATUS_OPTIONS,
6613
- onChange: onRfiStatusChange,
6614
- placeholder: "Select status",
6615
- renderValue: (value) => /* @__PURE__ */ jsx(Badge, { variant: "success", children: value })
6616
- }
6617
- ),
6618
- /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(InfoField, { label: "Description", value: alert.description }) })
6619
- ] })
6620
- }
6621
- ),
6622
- /* @__PURE__ */ jsx(ContextSection, { alert }),
6623
- /* @__PURE__ */ jsx(FormCard, { title: "Notes", children: /* @__PURE__ */ jsx(AlertNotes, { alertId: alert.id, notes: alert.notes || [] }) }),
6624
- /* @__PURE__ */ jsx(FormCard, { title: "Documents", children: /* @__PURE__ */ jsx(AlertDocuments, { alertId: alert.id, documents: alert.documents || [] }) })
6625
- ] }),
6626
- /* @__PURE__ */ jsx("div", { className: "lg:w-64", children: /* @__PURE__ */ jsx(FormCard, { title: "Status Timeline", className: "h-full", children: /* @__PURE__ */ jsx(AlertTimeline, { events: alert.timeline || [] }) }) })
6627
- ] });
6628
- };
6629
6698
  var AlertDetail = () => {
6630
6699
  const { id } = useParams();
6631
6700
  const navigate = useNavigate();
@@ -7830,75 +7899,6 @@ var NotFound = () => {
7830
7899
  ] }) });
7831
7900
  };
7832
7901
  var NotFound_default = NotFound;
7833
- var StatementHeader = ({ data, onEdit }) => {
7834
- return /* @__PURE__ */ jsxs(Card, { children: [
7835
- /* @__PURE__ */ jsxs(CardHeader, { direction: "row", children: [
7836
- /* @__PURE__ */ jsx(CardTitle, { size: "md", children: "Statement Summary" }),
7837
- /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: onEdit, children: [
7838
- /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4 mr-2" }),
7839
- "Edit"
7840
- ] })
7841
- ] }),
7842
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: [
7843
- /* @__PURE__ */ jsx(
7844
- InfoField,
7845
- {
7846
- label: "Account",
7847
- value: data.account,
7848
- layout: "horizontal"
7849
- }
7850
- ),
7851
- /* @__PURE__ */ jsx(
7852
- InfoField,
7853
- {
7854
- label: "Product ID",
7855
- value: data.productId,
7856
- layout: "horizontal"
7857
- }
7858
- ),
7859
- /* @__PURE__ */ jsx(
7860
- InfoField,
7861
- {
7862
- label: "Program ID",
7863
- value: data.programId,
7864
- layout: "horizontal"
7865
- }
7866
- ),
7867
- /* @__PURE__ */ jsx(
7868
- InfoField,
7869
- {
7870
- label: "Start Date",
7871
- value: data.startDate,
7872
- layout: "horizontal"
7873
- }
7874
- ),
7875
- /* @__PURE__ */ jsx(
7876
- InfoField,
7877
- {
7878
- label: "End Date",
7879
- value: data.endDate,
7880
- layout: "horizontal"
7881
- }
7882
- ),
7883
- /* @__PURE__ */ jsx(
7884
- InfoField,
7885
- {
7886
- label: "Starting Balance",
7887
- value: data.startingBalance,
7888
- layout: "horizontal"
7889
- }
7890
- ),
7891
- /* @__PURE__ */ jsx(
7892
- InfoField,
7893
- {
7894
- label: "Ending Balance",
7895
- value: data.endingBalance,
7896
- layout: "horizontal"
7897
- }
7898
- )
7899
- ] }) })
7900
- ] });
7901
- };
7902
7902
 
7903
7903
  // src/lib/mock-data/statement-data.ts
7904
7904
  var mockStatementHeader = {
@@ -9561,6 +9561,6 @@ function UIKit() {
9561
9561
  ] }) }) });
9562
9562
  }
9563
9563
 
9564
- export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AddressForm, AlertDetail_default as AlertDetail, AlertDocuments, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, ContactInfoCard, Container, ContextSection, CounterpartyBasicInfo, DomesticWire_default as CounterpartyDomesticWire, Manage_default as CounterpartyManage, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, Create_default2 as CreateCounterparty, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound, OriginatorCard, OriginatorFI, OriginatorFIAddress, PageLayout, PatternLibrary, PaymentInformationSection, Popover, PopoverContent, PopoverTrigger, ReceiverCard, ResponsiveGrid, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Stack, Statement, StatusBadge, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransactionDetail_default as TransactionDetail, TransactionHistory_default as TransactionHistory, UIKit, UIKitShowcase, WireDetailsSection, WireTransferSection, badgeVariants, buttonVariants, cardVariants, inputVariants, reducer, textareaVariants, toast, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
9564
+ export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AddressForm, AlertDetail_default as AlertDetail, AlertDetailView, AlertDocuments, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, ContactInfoCard, Container, ContextSection, CounterpartyBasicInfo, DomesticWire_default as CounterpartyDomesticWire, Manage_default as CounterpartyManage, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, Create_default2 as CreateCounterparty, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound, OriginatorCard, OriginatorFI, OriginatorFIAddress, PageLayout, PatternLibrary, PaymentInformationSection, Popover, PopoverContent, PopoverTrigger, ReceiverCard, ResponsiveGrid, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Stack, Statement, StatementHeader, StatusBadge, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransactionDetail_default as TransactionDetail, TransactionHistory_default as TransactionHistory, UIKit, UIKitShowcase, WireDetailsSection, WireTransferSection, badgeVariants, buttonVariants, cardVariants, inputVariants, reducer, textareaVariants, toast, useAlertDetail, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
9565
9565
  //# sourceMappingURL=index.js.map
9566
9566
  //# sourceMappingURL=index.js.map