braid-ui 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -3
- package/dist/index.cjs +1977 -1396
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +137 -25
- package/dist/index.d.ts +137 -25
- package/dist/index.js +1895 -1332
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/styles.css +3 -2
package/dist/index.cjs
CHANGED
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React15 = require('react');
|
|
4
4
|
var classVarianceAuthority = require('class-variance-authority');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
-
var reactSlot = require('@radix-ui/react-slot');
|
|
9
8
|
var lucideReact = require('lucide-react');
|
|
10
9
|
var reactDom = require('react-dom');
|
|
10
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
11
11
|
var SelectPrimitive = require('@radix-ui/react-select');
|
|
12
|
-
var DialogPrimitive = require('@radix-ui/react-dialog');
|
|
13
12
|
var reactRouterDom = require('react-router-dom');
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var TooltipPrimitive = require('@radix-ui/react-tooltip');
|
|
13
|
+
var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
|
|
14
|
+
var DialogPrimitive = require('@radix-ui/react-dialog');
|
|
17
15
|
var reactHookForm = require('react-hook-form');
|
|
18
16
|
var zod$1 = require('@hookform/resolvers/zod');
|
|
19
17
|
var zod = require('zod');
|
|
18
|
+
var reactCollapsible = require('@radix-ui/react-collapsible');
|
|
19
|
+
var SeparatorPrimitive = require('@radix-ui/react-separator');
|
|
20
|
+
var TooltipPrimitive = require('@radix-ui/react-tooltip');
|
|
20
21
|
var LabelPrimitive = require('@radix-ui/react-label');
|
|
22
|
+
var dateFns = require('date-fns');
|
|
21
23
|
var reactDayPicker = require('react-day-picker');
|
|
22
|
-
var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
|
|
23
24
|
var PopoverPrimitive = require('@radix-ui/react-popover');
|
|
25
|
+
var CheckboxPrimitive = require('@radix-ui/react-checkbox');
|
|
26
|
+
var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
|
|
24
27
|
var nextThemes = require('next-themes');
|
|
25
28
|
var sonner = require('sonner');
|
|
26
29
|
var TabsPrimitive = require('@radix-ui/react-tabs');
|
|
27
30
|
var ToastPrimitives = require('@radix-ui/react-toast');
|
|
28
|
-
var dateFns = require('date-fns');
|
|
29
31
|
|
|
30
32
|
function _interopNamespace(e) {
|
|
31
33
|
if (e && e.__esModule) return e;
|
|
@@ -45,18 +47,20 @@ function _interopNamespace(e) {
|
|
|
45
47
|
return Object.freeze(n);
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
var
|
|
50
|
+
var React15__namespace = /*#__PURE__*/_interopNamespace(React15);
|
|
49
51
|
var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
|
|
52
|
+
var ScrollAreaPrimitive__namespace = /*#__PURE__*/_interopNamespace(ScrollAreaPrimitive);
|
|
50
53
|
var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
|
|
51
54
|
var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
|
|
52
55
|
var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
|
|
53
56
|
var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
|
|
54
|
-
var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
|
|
55
57
|
var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
|
|
58
|
+
var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
|
|
59
|
+
var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
|
|
56
60
|
var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
|
|
57
61
|
var ToastPrimitives__namespace = /*#__PURE__*/_interopNamespace(ToastPrimitives);
|
|
58
62
|
|
|
59
|
-
// src/components/
|
|
63
|
+
// src/components/alerts/OFACAlertView.tsx
|
|
60
64
|
function cn(...inputs) {
|
|
61
65
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
62
66
|
}
|
|
@@ -94,7 +98,7 @@ var cardVariants = classVarianceAuthority.cva(
|
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
);
|
|
97
|
-
var Card =
|
|
101
|
+
var Card = React15__namespace.forwardRef(
|
|
98
102
|
({ className, variant, size, fullHeight, interactive, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
99
103
|
"div",
|
|
100
104
|
{
|
|
@@ -131,7 +135,7 @@ var cardHeaderVariants = classVarianceAuthority.cva(
|
|
|
131
135
|
}
|
|
132
136
|
}
|
|
133
137
|
);
|
|
134
|
-
var CardHeader =
|
|
138
|
+
var CardHeader = React15__namespace.forwardRef(
|
|
135
139
|
({ className, size, align, direction, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
140
|
"div",
|
|
137
141
|
{
|
|
@@ -157,7 +161,7 @@ var cardTitleVariants = classVarianceAuthority.cva(
|
|
|
157
161
|
}
|
|
158
162
|
}
|
|
159
163
|
);
|
|
160
|
-
var CardTitle =
|
|
164
|
+
var CardTitle = React15__namespace.forwardRef(
|
|
161
165
|
({ className, size, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
162
166
|
"h3",
|
|
163
167
|
{
|
|
@@ -168,7 +172,7 @@ var CardTitle = React13__namespace.forwardRef(
|
|
|
168
172
|
)
|
|
169
173
|
);
|
|
170
174
|
CardTitle.displayName = "CardTitle";
|
|
171
|
-
var CardDescription =
|
|
175
|
+
var CardDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
172
176
|
"p",
|
|
173
177
|
{
|
|
174
178
|
ref,
|
|
@@ -197,7 +201,7 @@ var cardContentVariants = classVarianceAuthority.cva(
|
|
|
197
201
|
}
|
|
198
202
|
}
|
|
199
203
|
);
|
|
200
|
-
var CardContent =
|
|
204
|
+
var CardContent = React15__namespace.forwardRef(
|
|
201
205
|
({ className, size, fullHeight, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
202
206
|
"div",
|
|
203
207
|
{
|
|
@@ -230,7 +234,7 @@ var cardFooterVariants = classVarianceAuthority.cva(
|
|
|
230
234
|
}
|
|
231
235
|
}
|
|
232
236
|
);
|
|
233
|
-
var CardFooter =
|
|
237
|
+
var CardFooter = React15__namespace.forwardRef(
|
|
234
238
|
({ className, size, justify, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
235
239
|
"div",
|
|
236
240
|
{
|
|
@@ -241,7 +245,7 @@ var CardFooter = React13__namespace.forwardRef(
|
|
|
241
245
|
)
|
|
242
246
|
);
|
|
243
247
|
CardFooter.displayName = "CardFooter";
|
|
244
|
-
var FormCard =
|
|
248
|
+
var FormCard = React15__namespace.forwardRef(
|
|
245
249
|
({ title, description, children, headerActions, className, variant = "default", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
246
250
|
Card,
|
|
247
251
|
{
|
|
@@ -268,45 +272,6 @@ var FormCard = React13__namespace.forwardRef(
|
|
|
268
272
|
)
|
|
269
273
|
);
|
|
270
274
|
FormCard.displayName = "FormCard";
|
|
271
|
-
var buttonVariants = classVarianceAuthority.cva(
|
|
272
|
-
"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",
|
|
273
|
-
{
|
|
274
|
-
variants: {
|
|
275
|
-
variant: {
|
|
276
|
-
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
277
|
-
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
278
|
-
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
|
279
|
-
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
280
|
-
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
281
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
282
|
-
},
|
|
283
|
-
size: {
|
|
284
|
-
default: "h-10 px-4 py-2",
|
|
285
|
-
sm: "h-9 rounded-md px-3",
|
|
286
|
-
lg: "h-11 rounded-md px-8",
|
|
287
|
-
icon: "h-10 w-10"
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
defaultVariants: {
|
|
291
|
-
variant: "default",
|
|
292
|
-
size: "default"
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
);
|
|
296
|
-
var Button = React13__namespace.forwardRef(
|
|
297
|
-
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
298
|
-
const Comp = asChild ? reactSlot.Slot : "button";
|
|
299
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
300
|
-
Comp,
|
|
301
|
-
{
|
|
302
|
-
className: cn(buttonVariants({ variant, size, className })),
|
|
303
|
-
ref,
|
|
304
|
-
...props
|
|
305
|
-
}
|
|
306
|
-
);
|
|
307
|
-
}
|
|
308
|
-
);
|
|
309
|
-
Button.displayName = "Button";
|
|
310
275
|
var badgeVariants = classVarianceAuthority.cva(
|
|
311
276
|
"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",
|
|
312
277
|
{
|
|
@@ -318,6 +283,8 @@ var badgeVariants = classVarianceAuthority.cva(
|
|
|
318
283
|
outline: "text-foreground",
|
|
319
284
|
success: "border-transparent bg-success text-success-foreground hover:bg-success/80",
|
|
320
285
|
warning: "border-transparent bg-warning text-warning-foreground hover:bg-warning/80",
|
|
286
|
+
inbound: "border-transparent bg-blue-500 text-white hover:bg-blue-600",
|
|
287
|
+
outbound: "border-transparent bg-orange-500 text-white hover:bg-orange-600",
|
|
321
288
|
// Business type specific variants
|
|
322
289
|
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",
|
|
323
290
|
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",
|
|
@@ -350,6 +317,11 @@ function Badge({ className, variant, ...props }) {
|
|
|
350
317
|
}
|
|
351
318
|
var AlertTimeline = ({ events }) => {
|
|
352
319
|
const getIcon = (action) => {
|
|
320
|
+
if (action.includes("Note added")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.StickyNote, { className: "h-4 w-4" });
|
|
321
|
+
if (action.includes("Document added")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileUp, { className: "h-4 w-4" });
|
|
322
|
+
if (action.includes("Alert Approved")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle, { className: "h-4 w-4" });
|
|
323
|
+
if (action.includes("Alert Declined")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-4 w-4" });
|
|
324
|
+
if (action.includes("RFI Status change")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-4 w-4" });
|
|
353
325
|
if (action.includes("Created")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-4 w-4" });
|
|
354
326
|
if (action.includes("Assigned")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlus, { className: "h-4 w-4" });
|
|
355
327
|
if (action.includes("Updated") || action.includes("Modified")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit, { className: "h-4 w-4" });
|
|
@@ -357,7 +329,12 @@ var AlertTimeline = ({ events }) => {
|
|
|
357
329
|
if (action.includes("Rejected")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-4 w-4" });
|
|
358
330
|
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-4 w-4" });
|
|
359
331
|
};
|
|
360
|
-
const getStatusColor2 = (status) => {
|
|
332
|
+
const getStatusColor2 = (status, action) => {
|
|
333
|
+
if (action?.includes("Note added")) return "text-blue-500";
|
|
334
|
+
if (action?.includes("Document added")) return "text-purple-500";
|
|
335
|
+
if (action?.includes("Alert Approved")) return "text-success";
|
|
336
|
+
if (action?.includes("Alert Declined")) return "text-destructive";
|
|
337
|
+
if (action?.includes("RFI Status change")) return "text-warning";
|
|
361
338
|
switch (status) {
|
|
362
339
|
case "Unassigned":
|
|
363
340
|
return "text-destructive";
|
|
@@ -374,10 +351,7 @@ var AlertTimeline = ({ events }) => {
|
|
|
374
351
|
}
|
|
375
352
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: events.map((event, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative pl-6 pb-3", children: [
|
|
376
353
|
index !== events.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-[7px] top-5 bottom-0 w-[2px] bg-border" }),
|
|
377
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(
|
|
378
|
-
"absolute left-0 top-0 flex-none",
|
|
379
|
-
getStatusColor2(event.status)
|
|
380
|
-
), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4", children: getIcon(event.action) }) }),
|
|
354
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("absolute left-0 top-0 flex-none", getStatusColor2(event.status, event.action)), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4", children: getIcon(event.action) }) }),
|
|
381
355
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
|
|
382
356
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-foreground", children: event.action }),
|
|
383
357
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
@@ -385,14 +359,49 @@ var AlertTimeline = ({ events }) => {
|
|
|
385
359
|
event.user
|
|
386
360
|
] }),
|
|
387
361
|
event.details && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: event.details }),
|
|
388
|
-
event.status && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-xs font-medium", getStatusColor2(event.status)), children: [
|
|
389
|
-
"Status: ",
|
|
390
|
-
event.status
|
|
391
|
-
] }),
|
|
392
362
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground/70 pt-0.5", children: event.timestamp })
|
|
393
363
|
] })
|
|
394
364
|
] }, event.id)) });
|
|
395
365
|
};
|
|
366
|
+
var buttonVariants = classVarianceAuthority.cva(
|
|
367
|
+
"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",
|
|
368
|
+
{
|
|
369
|
+
variants: {
|
|
370
|
+
variant: {
|
|
371
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
372
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
373
|
+
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
|
374
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
375
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
376
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
377
|
+
},
|
|
378
|
+
size: {
|
|
379
|
+
default: "h-10 px-4 py-2",
|
|
380
|
+
sm: "h-9 rounded-md px-3",
|
|
381
|
+
lg: "h-11 rounded-md px-8",
|
|
382
|
+
icon: "h-10 w-10"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
defaultVariants: {
|
|
386
|
+
variant: "default",
|
|
387
|
+
size: "default"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
);
|
|
391
|
+
var Button = React15__namespace.forwardRef(
|
|
392
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
393
|
+
const Comp = asChild ? reactSlot.Slot : "button";
|
|
394
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
395
|
+
Comp,
|
|
396
|
+
{
|
|
397
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
398
|
+
ref,
|
|
399
|
+
...props
|
|
400
|
+
}
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
);
|
|
404
|
+
Button.displayName = "Button";
|
|
396
405
|
var textareaVariants = classVarianceAuthority.cva(
|
|
397
406
|
"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",
|
|
398
407
|
{
|
|
@@ -410,7 +419,7 @@ var textareaVariants = classVarianceAuthority.cva(
|
|
|
410
419
|
}
|
|
411
420
|
}
|
|
412
421
|
);
|
|
413
|
-
var EnhancedTextarea =
|
|
422
|
+
var EnhancedTextarea = React15__namespace.forwardRef(
|
|
414
423
|
({ className, variant, label, hint, error, success, ...props }, ref) => {
|
|
415
424
|
const textareaVariant = error ? "error" : success ? "success" : props.disabled ? "disabled" : props.readOnly ? "readonly" : variant;
|
|
416
425
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
@@ -449,9 +458,9 @@ var selectVariants = classVarianceAuthority.cva(
|
|
|
449
458
|
}
|
|
450
459
|
}
|
|
451
460
|
);
|
|
452
|
-
var EnhancedSelect =
|
|
461
|
+
var EnhancedSelect = React15__namespace.forwardRef(({ variant, label, hint, error, success, placeholder, options, disabled, className, ...props }, ref) => {
|
|
453
462
|
const selectVariant = error ? "error" : success ? "success" : disabled ? "disabled" : variant;
|
|
454
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
463
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-2", className), children: [
|
|
455
464
|
label && /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: label }),
|
|
456
465
|
/* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Root, { ...props, disabled, children: [
|
|
457
466
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -465,7 +474,7 @@ var EnhancedSelect = React13__namespace.forwardRef(({ variant, label, hint, erro
|
|
|
465
474
|
]
|
|
466
475
|
}
|
|
467
476
|
),
|
|
468
|
-
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Content, { className: "relative z-
|
|
477
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Content, { className: "relative z-[9999] max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", children: [
|
|
469
478
|
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ScrollUpButton, { className: "flex cursor-default items-center justify-center py-1", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "h-4 w-4" }) }),
|
|
470
479
|
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Viewport, { className: "p-1", children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
471
480
|
SelectPrimitive__namespace.Item,
|
|
@@ -589,8 +598,8 @@ function toast({ ...props }) {
|
|
|
589
598
|
};
|
|
590
599
|
}
|
|
591
600
|
function useToast() {
|
|
592
|
-
const [state, setState] =
|
|
593
|
-
|
|
601
|
+
const [state, setState] = React15__namespace.useState(memoryState);
|
|
602
|
+
React15__namespace.useEffect(() => {
|
|
594
603
|
listeners.push(setState);
|
|
595
604
|
return () => {
|
|
596
605
|
const index = listeners.indexOf(setState);
|
|
@@ -610,10 +619,10 @@ var NOTE_TYPE_OPTIONS = [
|
|
|
610
619
|
{ value: "Internal Note", label: "Internal Note" }
|
|
611
620
|
];
|
|
612
621
|
var AlertNotes = ({ alertId, notes }) => {
|
|
613
|
-
const [showNoteDialog, setShowNoteDialog] =
|
|
614
|
-
const [newNote, setNewNote] =
|
|
615
|
-
const [noteType, setNoteType] =
|
|
616
|
-
const [isSubmitting, setIsSubmitting] =
|
|
622
|
+
const [showNoteDialog, setShowNoteDialog] = React15.useState(false);
|
|
623
|
+
const [newNote, setNewNote] = React15.useState("");
|
|
624
|
+
const [noteType, setNoteType] = React15.useState("RFI Note");
|
|
625
|
+
const [isSubmitting, setIsSubmitting] = React15.useState(false);
|
|
617
626
|
const resetForm = () => {
|
|
618
627
|
setNewNote("");
|
|
619
628
|
setNoteType("RFI Note");
|
|
@@ -690,7 +699,8 @@ var AlertNotes = ({ alertId, notes }) => {
|
|
|
690
699
|
placeholder: "Enter your note here...",
|
|
691
700
|
value: newNote,
|
|
692
701
|
onChange: (e) => setNewNote(e.target.value),
|
|
693
|
-
rows: 6
|
|
702
|
+
rows: 6,
|
|
703
|
+
required: true
|
|
694
704
|
}
|
|
695
705
|
)
|
|
696
706
|
] }),
|
|
@@ -747,7 +757,7 @@ var AlertNotes = ({ alertId, notes }) => {
|
|
|
747
757
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4 mb-2", children: [
|
|
748
758
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
749
759
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium text-sm text-foreground", children: note.user }),
|
|
750
|
-
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: note.type === "RFI Note" ? "default" : "outline", children: note.type })
|
|
760
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: note.type === "RFI Note" ? "default" : "outline", children: note.type === "RFI Note" ? "RFI" : "Internal" })
|
|
751
761
|
] }),
|
|
752
762
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
753
763
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground whitespace-nowrap", children: note.timestamp }),
|
|
@@ -794,7 +804,7 @@ var inputVariants = classVarianceAuthority.cva(
|
|
|
794
804
|
}
|
|
795
805
|
}
|
|
796
806
|
);
|
|
797
|
-
var EnhancedInput =
|
|
807
|
+
var EnhancedInput = React15__namespace.forwardRef(
|
|
798
808
|
({ className, variant, size, label, hint, error, success, isLoading, ...props }, ref) => {
|
|
799
809
|
const inputVariant = error ? "error" : success ? "success" : props.disabled ? "disabled" : props.readOnly ? "readonly" : variant;
|
|
800
810
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
@@ -821,12 +831,12 @@ var EnhancedInput = React13__namespace.forwardRef(
|
|
|
821
831
|
);
|
|
822
832
|
EnhancedInput.displayName = "EnhancedInput";
|
|
823
833
|
var AlertDocuments = ({ alertId, documents }) => {
|
|
824
|
-
const [isUploading, setIsUploading] =
|
|
825
|
-
const [showUploadDialog, setShowUploadDialog] =
|
|
826
|
-
const [selectedFile, setSelectedFile] =
|
|
827
|
-
const [documentName, setDocumentName] =
|
|
828
|
-
const [description, setDescription] =
|
|
829
|
-
const [documentType, setDocumentType] =
|
|
834
|
+
const [isUploading, setIsUploading] = React15.useState(false);
|
|
835
|
+
const [showUploadDialog, setShowUploadDialog] = React15.useState(false);
|
|
836
|
+
const [selectedFile, setSelectedFile] = React15.useState(null);
|
|
837
|
+
const [documentName, setDocumentName] = React15.useState("");
|
|
838
|
+
const [description, setDescription] = React15.useState("");
|
|
839
|
+
const [documentType, setDocumentType] = React15.useState("");
|
|
830
840
|
const handleFileSelect = (e) => {
|
|
831
841
|
const file = e.target.files?.[0];
|
|
832
842
|
if (!file) return;
|
|
@@ -1058,10 +1068,8 @@ var AlertDocuments = ({ alertId, documents }) => {
|
|
|
1058
1068
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
|
|
1059
1069
|
!isImageType(doc.name) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(getFileTypeColor(doc.type)), children: getFileIcon(doc.type) }),
|
|
1060
1070
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
1061
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1062
|
-
|
|
1063
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-xs px-2 py-0.5 rounded-full bg-muted", getFileTypeColor(doc.type)), children: doc.type })
|
|
1064
|
-
] }),
|
|
1071
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-medium text-sm truncate", children: doc.name }),
|
|
1072
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-xs px-2 py-0.5 rounded-full bg-muted inline-block mt-1", getFileTypeColor(doc.type)), children: doc.type }),
|
|
1065
1073
|
doc.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground mt-1", children: doc.description }),
|
|
1066
1074
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
|
|
1067
1075
|
doc.size,
|
|
@@ -1133,23 +1141,127 @@ var InfoField = ({ label, value, layout = "vertical", className }) => {
|
|
|
1133
1141
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `text-sm text-foreground ${label ? "mt-1" : ""}`, children: value })
|
|
1134
1142
|
] });
|
|
1135
1143
|
};
|
|
1144
|
+
var ScrollArea = React15__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1145
|
+
ScrollAreaPrimitive__namespace.Root,
|
|
1146
|
+
{
|
|
1147
|
+
ref,
|
|
1148
|
+
className: cn("relative overflow-hidden", className),
|
|
1149
|
+
...props,
|
|
1150
|
+
children: [
|
|
1151
|
+
/* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
|
|
1152
|
+
/* @__PURE__ */ jsxRuntime.jsx(ScrollBar, {}),
|
|
1153
|
+
/* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.Corner, {})
|
|
1154
|
+
]
|
|
1155
|
+
}
|
|
1156
|
+
));
|
|
1157
|
+
ScrollArea.displayName = ScrollAreaPrimitive__namespace.Root.displayName;
|
|
1158
|
+
var ScrollBar = React15__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1159
|
+
ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
|
|
1160
|
+
{
|
|
1161
|
+
ref,
|
|
1162
|
+
orientation,
|
|
1163
|
+
className: cn(
|
|
1164
|
+
"flex touch-none select-none transition-colors",
|
|
1165
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
|
|
1166
|
+
orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
|
|
1167
|
+
className
|
|
1168
|
+
),
|
|
1169
|
+
...props,
|
|
1170
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
|
|
1171
|
+
}
|
|
1172
|
+
));
|
|
1173
|
+
ScrollBar.displayName = ScrollAreaPrimitive__namespace.ScrollAreaScrollbar.displayName;
|
|
1174
|
+
var Table = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1175
|
+
"table",
|
|
1176
|
+
{
|
|
1177
|
+
ref,
|
|
1178
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
1179
|
+
...props
|
|
1180
|
+
}
|
|
1181
|
+
) }));
|
|
1182
|
+
Table.displayName = "Table";
|
|
1183
|
+
var TableHeader = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
|
|
1184
|
+
TableHeader.displayName = "TableHeader";
|
|
1185
|
+
var TableBody = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1186
|
+
"tbody",
|
|
1187
|
+
{
|
|
1188
|
+
ref,
|
|
1189
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
1190
|
+
...props
|
|
1191
|
+
}
|
|
1192
|
+
));
|
|
1193
|
+
TableBody.displayName = "TableBody";
|
|
1194
|
+
var TableFooter = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1195
|
+
"tfoot",
|
|
1196
|
+
{
|
|
1197
|
+
ref,
|
|
1198
|
+
className: cn(
|
|
1199
|
+
"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
1200
|
+
className
|
|
1201
|
+
),
|
|
1202
|
+
...props
|
|
1203
|
+
}
|
|
1204
|
+
));
|
|
1205
|
+
TableFooter.displayName = "TableFooter";
|
|
1206
|
+
var TableRow = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1207
|
+
"tr",
|
|
1208
|
+
{
|
|
1209
|
+
ref,
|
|
1210
|
+
className: cn(
|
|
1211
|
+
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
1212
|
+
className
|
|
1213
|
+
),
|
|
1214
|
+
...props
|
|
1215
|
+
}
|
|
1216
|
+
));
|
|
1217
|
+
TableRow.displayName = "TableRow";
|
|
1218
|
+
var TableHead = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1219
|
+
"th",
|
|
1220
|
+
{
|
|
1221
|
+
ref,
|
|
1222
|
+
className: cn(
|
|
1223
|
+
"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
|
|
1224
|
+
className
|
|
1225
|
+
),
|
|
1226
|
+
...props
|
|
1227
|
+
}
|
|
1228
|
+
));
|
|
1229
|
+
TableHead.displayName = "TableHead";
|
|
1230
|
+
var TableCell = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1231
|
+
"td",
|
|
1232
|
+
{
|
|
1233
|
+
ref,
|
|
1234
|
+
className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
|
|
1235
|
+
...props
|
|
1236
|
+
}
|
|
1237
|
+
));
|
|
1238
|
+
TableCell.displayName = "TableCell";
|
|
1239
|
+
var TableCaption = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1240
|
+
"caption",
|
|
1241
|
+
{
|
|
1242
|
+
ref,
|
|
1243
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
1244
|
+
...props
|
|
1245
|
+
}
|
|
1246
|
+
));
|
|
1247
|
+
TableCaption.displayName = "TableCaption";
|
|
1136
1248
|
var Dialog = DialogPrimitive__namespace.Root;
|
|
1137
1249
|
var DialogTrigger = DialogPrimitive__namespace.Trigger;
|
|
1138
1250
|
var DialogPortal = DialogPrimitive__namespace.Portal;
|
|
1139
1251
|
var DialogClose = DialogPrimitive__namespace.Close;
|
|
1140
|
-
var DialogOverlay =
|
|
1252
|
+
var DialogOverlay = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1141
1253
|
DialogPrimitive__namespace.Overlay,
|
|
1142
1254
|
{
|
|
1143
1255
|
ref,
|
|
1144
1256
|
className: cn(
|
|
1145
|
-
"fixed inset-0 z-50 bg-
|
|
1257
|
+
"fixed inset-0 z-50 bg-white/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1146
1258
|
className
|
|
1147
1259
|
),
|
|
1148
1260
|
...props
|
|
1149
1261
|
}
|
|
1150
1262
|
));
|
|
1151
1263
|
DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
|
|
1152
|
-
var DialogContent =
|
|
1264
|
+
var DialogContent = React15__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
|
|
1153
1265
|
/* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
|
|
1154
1266
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1155
1267
|
DialogPrimitive__namespace.Content,
|
|
@@ -1199,7 +1311,7 @@ var DialogFooter = ({
|
|
|
1199
1311
|
}
|
|
1200
1312
|
);
|
|
1201
1313
|
DialogFooter.displayName = "DialogFooter";
|
|
1202
|
-
var DialogTitle =
|
|
1314
|
+
var DialogTitle = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1203
1315
|
DialogPrimitive__namespace.Title,
|
|
1204
1316
|
{
|
|
1205
1317
|
ref,
|
|
@@ -1211,7 +1323,7 @@ var DialogTitle = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
1211
1323
|
}
|
|
1212
1324
|
));
|
|
1213
1325
|
DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
1214
|
-
var DialogDescription =
|
|
1326
|
+
var DialogDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1215
1327
|
DialogPrimitive__namespace.Description,
|
|
1216
1328
|
{
|
|
1217
1329
|
ref,
|
|
@@ -1221,7 +1333,7 @@ var DialogDescription = React13__namespace.forwardRef(({ className, ...props },
|
|
|
1221
1333
|
));
|
|
1222
1334
|
DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
|
|
1223
1335
|
var JsonViewer = ({ data, className, compact = false, maxHeight = "60vh" }) => {
|
|
1224
|
-
const [copied, setCopied] =
|
|
1336
|
+
const [copied, setCopied] = React15.useState(false);
|
|
1225
1337
|
const handleCopy = () => {
|
|
1226
1338
|
navigator.clipboard.writeText(JSON.stringify(data, null, 2));
|
|
1227
1339
|
setCopied(true);
|
|
@@ -1258,7 +1370,7 @@ var JsonViewer = ({ data, className, compact = false, maxHeight = "60vh" }) => {
|
|
|
1258
1370
|
] });
|
|
1259
1371
|
};
|
|
1260
1372
|
var JsonNode = ({ data, name, depth, compact = false }) => {
|
|
1261
|
-
const [isExpanded, setIsExpanded] =
|
|
1373
|
+
const [isExpanded, setIsExpanded] = React15.useState(compact ? depth < 1 : depth < 2);
|
|
1262
1374
|
const indent = compact ? depth * 12 : depth * 16;
|
|
1263
1375
|
if (data === null) {
|
|
1264
1376
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { paddingLeft: indent }, className: "text-muted-foreground", children: [
|
|
@@ -1320,45 +1432,124 @@ var JsonNode = ({ data, name, depth, compact = false }) => {
|
|
|
1320
1432
|
] })
|
|
1321
1433
|
] });
|
|
1322
1434
|
};
|
|
1323
|
-
var
|
|
1324
|
-
const [
|
|
1435
|
+
var OFACAlertView = ({ alert }) => {
|
|
1436
|
+
const [isJsonDialogOpen, setIsJsonDialogOpen] = React15.useState(false);
|
|
1437
|
+
const parseOFACMatches = (data) => {
|
|
1438
|
+
if (!data.rawResults || !data.ofacCheckDetails) return [];
|
|
1439
|
+
try {
|
|
1440
|
+
const rawResults = JSON.parse(data.rawResults);
|
|
1441
|
+
const tableRows = [];
|
|
1442
|
+
const getListName = (listType) => {
|
|
1443
|
+
const listNames = {
|
|
1444
|
+
"SDNs": "OFAC SDN List",
|
|
1445
|
+
"altNames": "OFAC Alternate Names",
|
|
1446
|
+
"sectoralSanctions": "OFAC Sectoral Sanctions",
|
|
1447
|
+
"nonSDNMenuBasedSanctionsList": "OFAC Non-SDN List",
|
|
1448
|
+
"ukConsolidatedSanctionsList": "UK Consolidated List"
|
|
1449
|
+
};
|
|
1450
|
+
return listNames[listType] || listType;
|
|
1451
|
+
};
|
|
1452
|
+
const formatCheckKey = (key) => {
|
|
1453
|
+
return key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()).trim();
|
|
1454
|
+
};
|
|
1455
|
+
const listTypes = [
|
|
1456
|
+
{ key: "SDNs", nameField: "sdnName" },
|
|
1457
|
+
{ key: "altNames", nameField: "alternateName" },
|
|
1458
|
+
{ key: "sectoralSanctions", nameField: "Name" },
|
|
1459
|
+
{ key: "nonSDNMenuBasedSanctionsList", nameField: "Name" },
|
|
1460
|
+
{ key: "ukConsolidatedSanctionsList", nameField: "Names" }
|
|
1461
|
+
];
|
|
1462
|
+
listTypes.forEach(({ key, nameField }) => {
|
|
1463
|
+
const list = rawResults[key];
|
|
1464
|
+
if (list && Array.isArray(list)) {
|
|
1465
|
+
list.forEach((item) => {
|
|
1466
|
+
data.ofacCheckDetails.forEach((check) => {
|
|
1467
|
+
tableRows.push({
|
|
1468
|
+
type: formatCheckKey(check.checkKey),
|
|
1469
|
+
name: check.checkValue,
|
|
1470
|
+
matchedName: item.matchedName || item[nameField] || "N/A",
|
|
1471
|
+
list: getListName(key),
|
|
1472
|
+
matchScore: item.match ? `${(item.match * 100).toFixed(2)}%` : "N/A"
|
|
1473
|
+
});
|
|
1474
|
+
});
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
});
|
|
1478
|
+
return tableRows;
|
|
1479
|
+
} catch (error) {
|
|
1480
|
+
console.error("Error parsing OFAC results:", error);
|
|
1481
|
+
return [];
|
|
1482
|
+
}
|
|
1483
|
+
};
|
|
1325
1484
|
const renderOFACContext = () => {
|
|
1326
1485
|
const data = alert.contextData;
|
|
1327
1486
|
if (!data) return null;
|
|
1487
|
+
const tableRows = parseOFACMatches(data);
|
|
1488
|
+
const entityName = data.counterpartyName || data.businessName || data.individualName || data.transactionPaymentId || "N/A";
|
|
1489
|
+
const entityType = data.counterpartyName ? "Counterparty" : data.businessName ? "Business" : data.individualName ? "Individual" : data.transactionPaymentId ? "Transaction" : "N/A";
|
|
1490
|
+
const entityId = data.counterpartyId || data.businessId || data.individualId || data.transactionPaymentId;
|
|
1491
|
+
const entityLink = entityId ? data.counterpartyId ? `/counterparties/${entityId}` : data.businessId ? `/businesses/${entityId}` : data.individualId ? `/individuals/${entityId}` : data.transactionPaymentId ? `/transactions/${entityId}` : null : null;
|
|
1328
1492
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
1329
1493
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
1330
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: parseInt(item.matchScore) > 90 ? "alert-ofac" : "outline", children: item.matchScore }) })
|
|
1347
|
-
] }, index)) })
|
|
1348
|
-
] }) })
|
|
1494
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1495
|
+
InfoField,
|
|
1496
|
+
{
|
|
1497
|
+
label: "Entity Name",
|
|
1498
|
+
value: entityLink ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1499
|
+
reactRouterDom.Link,
|
|
1500
|
+
{
|
|
1501
|
+
to: entityLink,
|
|
1502
|
+
className: "text-primary hover:underline",
|
|
1503
|
+
children: entityName
|
|
1504
|
+
}
|
|
1505
|
+
) : entityName,
|
|
1506
|
+
layout: "horizontal"
|
|
1507
|
+
}
|
|
1508
|
+
),
|
|
1509
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Entity Type", value: entityType, layout: "horizontal" })
|
|
1349
1510
|
] }),
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1511
|
+
tableRows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "h-[300px] rounded-md border", children: /* @__PURE__ */ jsxRuntime.jsxs(Table, { children: [
|
|
1512
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { children: [
|
|
1513
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHead, { children: "Type" }),
|
|
1514
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHead, { children: "Name" }),
|
|
1515
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHead, { children: "Matched Name" }),
|
|
1516
|
+
/* @__PURE__ */ jsxRuntime.jsxs(TableHead, { className: "flex items-center gap-1", children: [
|
|
1517
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "List" }),
|
|
1518
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Dialog, { open: isJsonDialogOpen, onOpenChange: setIsJsonDialogOpen, children: [
|
|
1519
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1520
|
+
Button,
|
|
1521
|
+
{
|
|
1522
|
+
variant: "ghost",
|
|
1523
|
+
size: "icon",
|
|
1524
|
+
className: "h-6 w-6 text-primary hover:text-primary/80",
|
|
1525
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { className: "h-4 w-4" })
|
|
1526
|
+
}
|
|
1527
|
+
) }),
|
|
1528
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-4xl max-h-[80vh]", children: [
|
|
1529
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
|
|
1530
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "OFAC Raw Results" }),
|
|
1531
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Complete JSON response from the OFAC screening check" })
|
|
1532
|
+
] }),
|
|
1533
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1534
|
+
JsonViewer,
|
|
1535
|
+
{
|
|
1536
|
+
data: data.rawResults ? JSON.parse(data.rawResults) : {},
|
|
1537
|
+
maxHeight: "60vh"
|
|
1538
|
+
}
|
|
1539
|
+
)
|
|
1540
|
+
] })
|
|
1541
|
+
] })
|
|
1542
|
+
] }),
|
|
1543
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHead, { children: "Match Score" })
|
|
1544
|
+
] }) }),
|
|
1545
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: tableRows.map((row, index) => /* @__PURE__ */ jsxRuntime.jsxs(TableRow, { children: [
|
|
1546
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: row.type }),
|
|
1547
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: row.name }),
|
|
1548
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: row.matchedName }),
|
|
1549
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: row.list }),
|
|
1550
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: row.matchScore })
|
|
1551
|
+
] }, index)) })
|
|
1552
|
+
] }) }) })
|
|
1362
1553
|
] });
|
|
1363
1554
|
};
|
|
1364
1555
|
const renderTransactionContext = () => {
|
|
@@ -1385,20 +1576,6 @@ var ContextSection = ({ alert }) => {
|
|
|
1385
1576
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Reason", value: "Compliance review required" })
|
|
1386
1577
|
] });
|
|
1387
1578
|
};
|
|
1388
|
-
const getContextTitle = () => {
|
|
1389
|
-
switch (alert.contextType) {
|
|
1390
|
-
case "Ofac":
|
|
1391
|
-
return "OFAC Context";
|
|
1392
|
-
case "Transaction":
|
|
1393
|
-
return "Transaction Context";
|
|
1394
|
-
case "File Record":
|
|
1395
|
-
return "File Processing Context";
|
|
1396
|
-
case "Product":
|
|
1397
|
-
return "Product Context";
|
|
1398
|
-
default:
|
|
1399
|
-
return "Context Information";
|
|
1400
|
-
}
|
|
1401
|
-
};
|
|
1402
1579
|
const renderContext = () => {
|
|
1403
1580
|
switch (alert.contextType) {
|
|
1404
1581
|
case "Ofac":
|
|
@@ -1413,87 +1590,39 @@ var ContextSection = ({ alert }) => {
|
|
|
1413
1590
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No additional context available" });
|
|
1414
1591
|
}
|
|
1415
1592
|
};
|
|
1416
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1417
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
" - Detail Result"
|
|
1593
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col lg:flex-row gap-6", children: [
|
|
1594
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
|
|
1595
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Alert Details", className: "lg:col-span-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
1596
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Description", value: alert.description, layout: "horizontal" }),
|
|
1597
|
+
renderContext()
|
|
1422
1598
|
] }) }),
|
|
1423
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1424
|
-
|
|
1599
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Notes", children: /* @__PURE__ */ jsxRuntime.jsx(AlertNotes, { alertId: alert.id, notes: alert.notes || [] }) }),
|
|
1600
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Documents", children: /* @__PURE__ */ jsxRuntime.jsx(AlertDocuments, { alertId: alert.id, documents: alert.documents || [] }) })
|
|
1601
|
+
] }),
|
|
1602
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lg:w-64", children: /* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Status Timeline", className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsx(AlertTimeline, { events: alert.timeline || [] }) }) })
|
|
1425
1603
|
] });
|
|
1426
1604
|
};
|
|
1427
|
-
var
|
|
1428
|
-
|
|
1429
|
-
value,
|
|
1430
|
-
options,
|
|
1431
|
-
onChange,
|
|
1432
|
-
placeholder = "Select...",
|
|
1433
|
-
renderValue,
|
|
1434
|
-
className
|
|
1435
|
-
}) => {
|
|
1436
|
-
const [isEditing, setIsEditing] = React13.useState(false);
|
|
1437
|
-
const handleChange = (newValue) => {
|
|
1438
|
-
onChange(newValue);
|
|
1439
|
-
setIsEditing(false);
|
|
1440
|
-
};
|
|
1441
|
-
if (isEditing) {
|
|
1442
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1443
|
-
EnhancedSelect,
|
|
1444
|
-
{
|
|
1445
|
-
label,
|
|
1446
|
-
value: value || "",
|
|
1447
|
-
onValueChange: handleChange,
|
|
1448
|
-
options,
|
|
1449
|
-
placeholder
|
|
1450
|
-
}
|
|
1451
|
-
) });
|
|
1452
|
-
}
|
|
1453
|
-
const displayValue = value ? renderValue ? renderValue(value) : value : placeholder;
|
|
1454
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1455
|
-
"div",
|
|
1456
|
-
{
|
|
1457
|
-
className: cn("cursor-pointer transition-colors hover:bg-muted/50 rounded-md -mx-2 px-2 -my-1 py-1", className),
|
|
1458
|
-
onClick: () => setIsEditing(true),
|
|
1459
|
-
role: "button",
|
|
1460
|
-
tabIndex: 0,
|
|
1461
|
-
onKeyDown: (e) => {
|
|
1462
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
1463
|
-
e.preventDefault();
|
|
1464
|
-
setIsEditing(true);
|
|
1465
|
-
}
|
|
1466
|
-
},
|
|
1467
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(InfoField, { label, value: displayValue })
|
|
1468
|
-
}
|
|
1469
|
-
);
|
|
1470
|
-
};
|
|
1471
|
-
|
|
1472
|
-
// src/lib/utils/alert-utils.ts
|
|
1473
|
-
var getTypeBadgeVariant = (type) => {
|
|
1474
|
-
switch (type) {
|
|
1605
|
+
var AlertDetailRouter = ({ alert }) => {
|
|
1606
|
+
switch (alert.type) {
|
|
1475
1607
|
case "Ofac":
|
|
1476
|
-
return
|
|
1477
|
-
case "Dual Approval":
|
|
1478
|
-
return "alert-dual";
|
|
1608
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OFACAlertView, { alert });
|
|
1479
1609
|
case "Transaction Monitoring":
|
|
1480
|
-
return "
|
|
1610
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Transaction Monitoring view - Coming soon" });
|
|
1611
|
+
case "Prohibited Entity":
|
|
1612
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Prohibited Entity view - Coming soon" });
|
|
1613
|
+
case "314a":
|
|
1614
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "314a view - Coming soon" });
|
|
1615
|
+
case "Dual Approval":
|
|
1616
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Dual Approval view - Coming soon" });
|
|
1481
1617
|
case "Transaction Processing Error":
|
|
1482
|
-
return "
|
|
1483
|
-
|
|
1484
|
-
return "
|
|
1485
|
-
}
|
|
1486
|
-
};
|
|
1487
|
-
var getStatusColor = (status) => {
|
|
1488
|
-
switch (status) {
|
|
1489
|
-
case "Unassigned":
|
|
1490
|
-
return "text-destructive";
|
|
1491
|
-
case "Closed":
|
|
1492
|
-
return "text-success";
|
|
1493
|
-
case "In Progress":
|
|
1494
|
-
return "text-warning";
|
|
1618
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Transaction Processing Error view - Coming soon" });
|
|
1619
|
+
case "ACH Return":
|
|
1620
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: "ACH Return view - Coming soon" });
|
|
1495
1621
|
default:
|
|
1496
|
-
return ""
|
|
1622
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1623
|
+
"Unknown alert type: ",
|
|
1624
|
+
alert.type
|
|
1625
|
+
] });
|
|
1497
1626
|
}
|
|
1498
1627
|
};
|
|
1499
1628
|
|
|
@@ -1531,134 +1660,505 @@ var ASSIGNEE_OPTIONS = [
|
|
|
1531
1660
|
{ value: "approverdev", label: "approverdev" },
|
|
1532
1661
|
{ value: "Unassigned", label: "Unassigned" }
|
|
1533
1662
|
];
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1663
|
+
|
|
1664
|
+
// src/lib/utils/alert-utils.ts
|
|
1665
|
+
var getTypeBadgeVariant = (type) => {
|
|
1666
|
+
switch (type) {
|
|
1667
|
+
case "Ofac":
|
|
1668
|
+
return "alert-ofac";
|
|
1669
|
+
case "Dual Approval":
|
|
1670
|
+
return "alert-dual";
|
|
1671
|
+
case "Transaction Monitoring":
|
|
1672
|
+
return "alert-monitoring";
|
|
1673
|
+
case "Transaction Processing Error":
|
|
1674
|
+
return "alert-error";
|
|
1675
|
+
default:
|
|
1676
|
+
return "outline";
|
|
1677
|
+
}
|
|
1678
|
+
};
|
|
1679
|
+
var getStatusColor = (status) => {
|
|
1680
|
+
switch (status) {
|
|
1681
|
+
case "Unassigned":
|
|
1682
|
+
return "text-destructive";
|
|
1683
|
+
case "Closed":
|
|
1684
|
+
return "text-success";
|
|
1685
|
+
case "In Progress":
|
|
1686
|
+
return "text-warning";
|
|
1687
|
+
default:
|
|
1688
|
+
return "";
|
|
1689
|
+
}
|
|
1690
|
+
};
|
|
1691
|
+
var AlertHeaderControls = ({
|
|
1692
|
+
status,
|
|
1537
1693
|
assignee,
|
|
1538
|
-
|
|
1539
|
-
onAssigneeChange
|
|
1694
|
+
rfiStatus,
|
|
1695
|
+
onAssigneeChange,
|
|
1696
|
+
onRfiStatusChange
|
|
1540
1697
|
}) => {
|
|
1541
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex
|
|
1542
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex
|
|
1698
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
|
|
1699
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1700
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Status:" }),
|
|
1701
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium text-sm", getStatusColor(status)), children: status })
|
|
1702
|
+
] }),
|
|
1703
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-[180px]", children: [
|
|
1704
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Assignee:" }),
|
|
1543
1705
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1544
|
-
|
|
1706
|
+
EnhancedSelect,
|
|
1545
1707
|
{
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1551
|
-
InfoField,
|
|
1552
|
-
{
|
|
1553
|
-
label: "Type",
|
|
1554
|
-
value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: getTypeBadgeVariant(alert.type), children: alert.type })
|
|
1555
|
-
}
|
|
1556
|
-
),
|
|
1557
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1558
|
-
InfoField,
|
|
1559
|
-
{
|
|
1560
|
-
label: "Status",
|
|
1561
|
-
value: /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium", getStatusColor(alert.status)), children: alert.status })
|
|
1562
|
-
}
|
|
1563
|
-
),
|
|
1564
|
-
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Created At", value: alert.createdAt }),
|
|
1565
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1566
|
-
InfoField,
|
|
1567
|
-
{
|
|
1568
|
-
label: "Context Type",
|
|
1569
|
-
value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", children: alert.contextType })
|
|
1570
|
-
}
|
|
1571
|
-
),
|
|
1572
|
-
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Context ID", value: alert.contextId || "N/A" }),
|
|
1573
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1574
|
-
EditableInfoField,
|
|
1575
|
-
{
|
|
1576
|
-
label: "Assignee",
|
|
1577
|
-
value: assignee,
|
|
1578
|
-
options: ASSIGNEE_OPTIONS,
|
|
1579
|
-
onChange: onAssigneeChange,
|
|
1580
|
-
placeholder: "Unassigned"
|
|
1581
|
-
}
|
|
1582
|
-
),
|
|
1583
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1584
|
-
EditableInfoField,
|
|
1585
|
-
{
|
|
1586
|
-
label: "RFI Status",
|
|
1587
|
-
value: rfiStatus,
|
|
1588
|
-
options: RFI_STATUS_OPTIONS,
|
|
1589
|
-
onChange: onRfiStatusChange,
|
|
1590
|
-
placeholder: "Select status",
|
|
1591
|
-
renderValue: (value) => /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "success", children: value })
|
|
1592
|
-
}
|
|
1593
|
-
),
|
|
1594
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Description", value: alert.description }) })
|
|
1595
|
-
] })
|
|
1708
|
+
value: assignee,
|
|
1709
|
+
onValueChange: onAssigneeChange,
|
|
1710
|
+
options: ASSIGNEE_OPTIONS,
|
|
1711
|
+
placeholder: "Unassigned"
|
|
1596
1712
|
}
|
|
1597
|
-
)
|
|
1598
|
-
/* @__PURE__ */ jsxRuntime.jsx(ContextSection, { alert }),
|
|
1599
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Notes", children: /* @__PURE__ */ jsxRuntime.jsx(AlertNotes, { alertId: alert.id, notes: alert.notes || [] }) }),
|
|
1600
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Documents", children: /* @__PURE__ */ jsxRuntime.jsx(AlertDocuments, { alertId: alert.id, documents: alert.documents || [] }) })
|
|
1713
|
+
)
|
|
1601
1714
|
] }),
|
|
1602
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1715
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-[180px]", children: [
|
|
1716
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "RFI Status:" }),
|
|
1717
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1718
|
+
EnhancedSelect,
|
|
1719
|
+
{
|
|
1720
|
+
value: rfiStatus,
|
|
1721
|
+
onValueChange: onRfiStatusChange,
|
|
1722
|
+
options: RFI_STATUS_OPTIONS,
|
|
1723
|
+
placeholder: "Select status"
|
|
1724
|
+
}
|
|
1725
|
+
)
|
|
1726
|
+
] })
|
|
1603
1727
|
] });
|
|
1604
1728
|
};
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
}
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1729
|
+
var ContextSection = ({ alert }) => {
|
|
1730
|
+
const [isDialogOpen, setIsDialogOpen] = React15.useState(false);
|
|
1731
|
+
const renderOFACContext = () => {
|
|
1732
|
+
const data = alert.contextData;
|
|
1733
|
+
if (!data) return null;
|
|
1734
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
1735
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
1736
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Entity Name", value: data.entityName }),
|
|
1737
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Entity Type", value: data.entityType }),
|
|
1738
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Match Score", value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "alert-ofac", children: data.matchScore }) }),
|
|
1739
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "List Name", value: data.listName })
|
|
1740
|
+
] }),
|
|
1741
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1742
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium mb-3", children: "Flagged Items" }),
|
|
1743
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto border rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
1744
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "border-b bg-muted/50", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
1745
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 text-left text-sm font-medium", children: "Field" }),
|
|
1746
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 text-left text-sm font-medium", children: "Value" }),
|
|
1747
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 text-left text-sm font-medium", children: "Match Score" })
|
|
1748
|
+
] }) }),
|
|
1749
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: data.flaggedItems?.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b hover:bg-muted/50", children: [
|
|
1750
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-sm font-medium", children: item.field }),
|
|
1751
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-sm", children: item.value }),
|
|
1752
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: parseInt(item.matchScore) > 90 ? "alert-ofac" : "outline", children: item.matchScore }) })
|
|
1753
|
+
] }, index)) })
|
|
1754
|
+
] }) })
|
|
1755
|
+
] }),
|
|
1756
|
+
alert.contextData && /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1757
|
+
Button,
|
|
1758
|
+
{
|
|
1759
|
+
variant: "ghost",
|
|
1760
|
+
className: "w-full justify-between h-auto py-3 px-4 border rounded-lg hover:bg-muted/50",
|
|
1761
|
+
onClick: () => setIsDialogOpen(true),
|
|
1762
|
+
children: [
|
|
1763
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Detail Result" }),
|
|
1764
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
|
|
1765
|
+
]
|
|
1766
|
+
}
|
|
1767
|
+
) })
|
|
1768
|
+
] });
|
|
1769
|
+
};
|
|
1770
|
+
const renderTransactionContext = () => {
|
|
1771
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
1772
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Transaction ID", value: "TXN-12345" }),
|
|
1773
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Amount", value: "$30,000.00" }),
|
|
1774
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Transaction Type", value: "Wire Transfer" }),
|
|
1775
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Date", value: "2025-09-30" })
|
|
1776
|
+
] });
|
|
1777
|
+
};
|
|
1778
|
+
const renderFileRecordContext = () => {
|
|
1779
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
1780
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "File Name", value: "wire_batch_093025.csv" }),
|
|
1781
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Record Count", value: "1,234" }),
|
|
1782
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Error Count", value: "3" }),
|
|
1783
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Status", value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "alert-error", children: "Failed" }) })
|
|
1784
|
+
] });
|
|
1785
|
+
};
|
|
1786
|
+
const renderProductContext = () => {
|
|
1787
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
1788
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Product ID", value: "PROD-2787" }),
|
|
1789
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Product Name", value: "Business Checking Account" }),
|
|
1790
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Status", value: "Pending Deactivation" }),
|
|
1791
|
+
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Reason", value: "Compliance review required" })
|
|
1792
|
+
] });
|
|
1793
|
+
};
|
|
1794
|
+
const getContextTitle = () => {
|
|
1795
|
+
switch (alert.contextType) {
|
|
1796
|
+
case "Ofac":
|
|
1797
|
+
return "OFAC Context";
|
|
1798
|
+
case "Transaction":
|
|
1799
|
+
return "Transaction Context";
|
|
1800
|
+
case "File Record":
|
|
1801
|
+
return "File Processing Context";
|
|
1802
|
+
case "Product":
|
|
1803
|
+
return "Product Context";
|
|
1804
|
+
default:
|
|
1805
|
+
return "Context Information";
|
|
1635
1806
|
}
|
|
1636
|
-
|
|
1637
|
-
)
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1807
|
+
};
|
|
1808
|
+
const renderContext = () => {
|
|
1809
|
+
switch (alert.contextType) {
|
|
1810
|
+
case "Ofac":
|
|
1811
|
+
return renderOFACContext();
|
|
1812
|
+
case "Transaction":
|
|
1813
|
+
return renderTransactionContext();
|
|
1814
|
+
case "File Record":
|
|
1815
|
+
return renderFileRecordContext();
|
|
1816
|
+
case "Product":
|
|
1817
|
+
return renderProductContext();
|
|
1818
|
+
default:
|
|
1819
|
+
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No additional context available" });
|
|
1820
|
+
}
|
|
1821
|
+
};
|
|
1822
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1823
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: getContextTitle(), children: renderContext() }),
|
|
1824
|
+
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-4xl", children: [
|
|
1825
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { children: [
|
|
1826
|
+
getContextTitle(),
|
|
1827
|
+
" - Detail Result"
|
|
1828
|
+
] }) }),
|
|
1829
|
+
/* @__PURE__ */ jsxRuntime.jsx(JsonViewer, { data: alert.contextData })
|
|
1830
|
+
] }) })
|
|
1831
|
+
] });
|
|
1832
|
+
};
|
|
1833
|
+
var FormProvider = ({
|
|
1834
|
+
form,
|
|
1835
|
+
children
|
|
1836
|
+
}) => {
|
|
1837
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children });
|
|
1838
|
+
};
|
|
1839
|
+
var FormInput = ({
|
|
1840
|
+
name,
|
|
1841
|
+
...props
|
|
1842
|
+
}) => {
|
|
1843
|
+
const { control, formState } = reactHookForm.useFormContext();
|
|
1844
|
+
const error = formState.errors[name]?.message;
|
|
1845
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1846
|
+
reactHookForm.Controller,
|
|
1847
|
+
{
|
|
1848
|
+
name,
|
|
1849
|
+
control,
|
|
1850
|
+
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1851
|
+
EnhancedInput,
|
|
1852
|
+
{
|
|
1853
|
+
...props,
|
|
1854
|
+
...field,
|
|
1855
|
+
error
|
|
1856
|
+
}
|
|
1857
|
+
)
|
|
1858
|
+
}
|
|
1859
|
+
);
|
|
1860
|
+
};
|
|
1861
|
+
var FormSelect = ({
|
|
1862
|
+
name,
|
|
1863
|
+
...props
|
|
1864
|
+
}) => {
|
|
1865
|
+
const { control, formState } = reactHookForm.useFormContext();
|
|
1866
|
+
const error = formState.errors[name]?.message;
|
|
1867
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1868
|
+
reactHookForm.Controller,
|
|
1869
|
+
{
|
|
1870
|
+
name,
|
|
1871
|
+
control,
|
|
1872
|
+
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1873
|
+
EnhancedSelect,
|
|
1874
|
+
{
|
|
1875
|
+
...props,
|
|
1876
|
+
value: field.value,
|
|
1877
|
+
onValueChange: field.onChange,
|
|
1878
|
+
error
|
|
1879
|
+
}
|
|
1880
|
+
)
|
|
1881
|
+
}
|
|
1882
|
+
);
|
|
1883
|
+
};
|
|
1884
|
+
var useFormWithEditState = ({
|
|
1885
|
+
schema,
|
|
1886
|
+
initialEditing = false,
|
|
1887
|
+
onToggleEdit,
|
|
1888
|
+
onSave,
|
|
1889
|
+
onCancel,
|
|
1890
|
+
...formProps
|
|
1891
|
+
}) => {
|
|
1892
|
+
const [localEditing, setLocalEditing] = React15.useState(initialEditing);
|
|
1893
|
+
const [isLoading, setIsLoading] = React15.useState(false);
|
|
1894
|
+
const form = reactHookForm.useForm({
|
|
1895
|
+
...formProps,
|
|
1896
|
+
resolver: schema ? zod$1.zodResolver(schema) : void 0
|
|
1897
|
+
});
|
|
1898
|
+
const { formState, reset, setError } = form;
|
|
1899
|
+
const { isValid, isDirty } = formState;
|
|
1900
|
+
React15.useEffect(() => {
|
|
1901
|
+
setLocalEditing(initialEditing);
|
|
1902
|
+
}, [initialEditing]);
|
|
1903
|
+
const isEditing = onToggleEdit !== void 0 ? initialEditing : localEditing;
|
|
1904
|
+
const handleToggleEdit = React15.useCallback(() => {
|
|
1905
|
+
if (onToggleEdit) {
|
|
1906
|
+
onToggleEdit();
|
|
1907
|
+
} else {
|
|
1908
|
+
setLocalEditing((prev) => !prev);
|
|
1909
|
+
}
|
|
1910
|
+
}, [onToggleEdit]);
|
|
1911
|
+
const handleSave = React15.useCallback(async () => {
|
|
1912
|
+
if (!isValid) return;
|
|
1913
|
+
setIsLoading(true);
|
|
1914
|
+
try {
|
|
1915
|
+
const data = form.getValues();
|
|
1916
|
+
if (onSave) {
|
|
1917
|
+
await onSave(data);
|
|
1918
|
+
}
|
|
1919
|
+
if (onToggleEdit) {
|
|
1920
|
+
onToggleEdit();
|
|
1921
|
+
} else {
|
|
1922
|
+
setLocalEditing(false);
|
|
1923
|
+
}
|
|
1924
|
+
} catch (error) {
|
|
1925
|
+
console.error("Form save error:", error);
|
|
1926
|
+
} finally {
|
|
1927
|
+
setIsLoading(false);
|
|
1928
|
+
}
|
|
1929
|
+
}, [form, isValid, onSave, onToggleEdit]);
|
|
1930
|
+
const handleCancel = React15.useCallback(() => {
|
|
1931
|
+
reset();
|
|
1932
|
+
if (onCancel) {
|
|
1933
|
+
onCancel();
|
|
1934
|
+
}
|
|
1935
|
+
if (onToggleEdit) {
|
|
1936
|
+
onToggleEdit();
|
|
1937
|
+
} else {
|
|
1938
|
+
setLocalEditing(false);
|
|
1939
|
+
}
|
|
1940
|
+
}, [reset, onCancel, onToggleEdit]);
|
|
1941
|
+
const setFieldError = React15.useCallback((field, error) => {
|
|
1942
|
+
setError(field, { type: "manual", message: error });
|
|
1943
|
+
}, [setError]);
|
|
1944
|
+
return {
|
|
1945
|
+
...form,
|
|
1946
|
+
isEditing,
|
|
1947
|
+
isLoading,
|
|
1948
|
+
handleToggleEdit,
|
|
1949
|
+
handleSave,
|
|
1950
|
+
handleCancel,
|
|
1951
|
+
isFormValid: isValid,
|
|
1952
|
+
isDirty,
|
|
1953
|
+
setFieldError
|
|
1954
|
+
};
|
|
1955
|
+
};
|
|
1956
|
+
var resolveAlertSchema = zod.z.object({
|
|
1957
|
+
action: zod.z.enum(["APPROVE", "DECLINE", "CLOSE"], {
|
|
1958
|
+
required_error: "Please select an action"
|
|
1959
|
+
}),
|
|
1960
|
+
changeToAccount: zod.z.string().optional(),
|
|
1961
|
+
note: zod.z.string().min(1, "Note is required").max(1e3, "Note must be less than 1000 characters"),
|
|
1962
|
+
returnCode: zod.z.string().optional()
|
|
1963
|
+
}).refine((data) => {
|
|
1964
|
+
if (data.action === "DECLINE" && !data.returnCode) {
|
|
1965
|
+
return false;
|
|
1966
|
+
}
|
|
1967
|
+
return true;
|
|
1968
|
+
}, {
|
|
1969
|
+
message: "Return code is required when declining",
|
|
1970
|
+
path: ["returnCode"]
|
|
1971
|
+
});
|
|
1972
|
+
var RETURN_CODES = [
|
|
1973
|
+
{ value: "R03_NO_ACCOUNT", label: "R03 - No Account/Unable to Locate Account" },
|
|
1974
|
+
{ value: "R01_INSUFFICIENT_FUNDS", label: "R01 - Insufficient Funds" },
|
|
1975
|
+
{ value: "R02_ACCOUNT_CLOSED", label: "R02 - Account Closed" },
|
|
1976
|
+
{ value: "R04_INVALID_ACCOUNT", label: "R04 - Invalid Account Number" },
|
|
1977
|
+
{ value: "R10_UNAUTHORIZED", label: "R10 - Customer Advises Unauthorized" },
|
|
1978
|
+
{ value: "R07_AUTHORIZATION_REVOKED", label: "R07 - Authorization Revoked" },
|
|
1979
|
+
{ value: "R08_PAYMENT_STOPPED", label: "R08 - Payment Stopped" },
|
|
1980
|
+
{ value: "R09_UNCOLLECTED_FUNDS", label: "R09 - Uncollected Funds" }
|
|
1981
|
+
];
|
|
1982
|
+
var ResolveAlertDialog = ({
|
|
1983
|
+
alertId,
|
|
1984
|
+
open,
|
|
1985
|
+
onOpenChange,
|
|
1986
|
+
onResolve
|
|
1987
|
+
}) => {
|
|
1988
|
+
const form = useFormWithEditState({
|
|
1989
|
+
schema: resolveAlertSchema,
|
|
1990
|
+
defaultValues: {
|
|
1991
|
+
action: "APPROVE",
|
|
1992
|
+
changeToAccount: "",
|
|
1993
|
+
note: "",
|
|
1994
|
+
returnCode: ""
|
|
1995
|
+
}
|
|
1996
|
+
});
|
|
1997
|
+
const { handleSubmit, watch, control, formState } = form;
|
|
1998
|
+
const action = watch("action");
|
|
1999
|
+
const onSubmit = async (data) => {
|
|
2000
|
+
try {
|
|
2001
|
+
await onResolve(data);
|
|
2002
|
+
toast({
|
|
2003
|
+
title: "Alert Resolved",
|
|
2004
|
+
description: `Alert #${alertId} has been ${data.action.toLowerCase()}d successfully.`
|
|
2005
|
+
});
|
|
2006
|
+
onOpenChange(false);
|
|
2007
|
+
form.reset();
|
|
2008
|
+
} catch (error) {
|
|
2009
|
+
toast({
|
|
2010
|
+
title: "Error",
|
|
2011
|
+
description: "Failed to resolve alert. Please try again.",
|
|
2012
|
+
variant: "destructive"
|
|
2013
|
+
});
|
|
2014
|
+
}
|
|
2015
|
+
};
|
|
2016
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "sm:max-w-[600px]", children: [
|
|
2017
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
|
|
2018
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { children: [
|
|
2019
|
+
"Resolve Alert #",
|
|
2020
|
+
alertId
|
|
2021
|
+
] }),
|
|
2022
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Select an action and provide details to resolve this alert." })
|
|
2023
|
+
] }),
|
|
2024
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormProvider, { form, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit(onSubmit), className: "space-y-4", children: [
|
|
2025
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2026
|
+
FormSelect,
|
|
2027
|
+
{
|
|
2028
|
+
name: "action",
|
|
2029
|
+
label: "Action",
|
|
2030
|
+
placeholder: "Select action",
|
|
2031
|
+
options: [
|
|
2032
|
+
{ value: "APPROVE", label: "Approve" },
|
|
2033
|
+
{ value: "DECLINE", label: "Decline" },
|
|
2034
|
+
{ value: "CLOSE", label: "Close" }
|
|
2035
|
+
]
|
|
2036
|
+
}
|
|
2037
|
+
),
|
|
2038
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2039
|
+
FormInput,
|
|
2040
|
+
{
|
|
2041
|
+
name: "changeToAccount",
|
|
2042
|
+
label: "Change to Account (Optional)",
|
|
2043
|
+
placeholder: "Enter account number"
|
|
2044
|
+
}
|
|
2045
|
+
),
|
|
2046
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
2047
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "text-sm font-medium text-foreground", children: [
|
|
2048
|
+
"Note ",
|
|
2049
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })
|
|
2050
|
+
] }),
|
|
2051
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2052
|
+
reactHookForm.Controller,
|
|
2053
|
+
{
|
|
2054
|
+
name: "note",
|
|
2055
|
+
control,
|
|
2056
|
+
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2057
|
+
EnhancedTextarea,
|
|
2058
|
+
{
|
|
2059
|
+
...field,
|
|
2060
|
+
placeholder: "Enter resolution notes...",
|
|
2061
|
+
rows: 4,
|
|
2062
|
+
error: formState.errors.note?.message
|
|
2063
|
+
}
|
|
2064
|
+
)
|
|
2065
|
+
}
|
|
2066
|
+
)
|
|
2067
|
+
] }),
|
|
2068
|
+
action === "DECLINE" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2069
|
+
FormSelect,
|
|
2070
|
+
{
|
|
2071
|
+
name: "returnCode",
|
|
2072
|
+
label: "Return Code",
|
|
2073
|
+
placeholder: "Select return code",
|
|
2074
|
+
options: RETURN_CODES.map((code) => ({
|
|
2075
|
+
value: code.value,
|
|
2076
|
+
label: code.label
|
|
2077
|
+
}))
|
|
2078
|
+
}
|
|
2079
|
+
),
|
|
2080
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
2081
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2082
|
+
Button,
|
|
2083
|
+
{
|
|
2084
|
+
type: "button",
|
|
2085
|
+
variant: "outline",
|
|
2086
|
+
onClick: () => {
|
|
2087
|
+
onOpenChange(false);
|
|
2088
|
+
form.reset();
|
|
2089
|
+
},
|
|
2090
|
+
children: "Cancel"
|
|
2091
|
+
}
|
|
2092
|
+
),
|
|
2093
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2094
|
+
Button,
|
|
2095
|
+
{
|
|
2096
|
+
type: "submit",
|
|
2097
|
+
disabled: !formState.isValid || formState.isSubmitting,
|
|
2098
|
+
children: formState.isSubmitting ? "Submitting..." : "Resolve"
|
|
2099
|
+
}
|
|
2100
|
+
)
|
|
2101
|
+
] })
|
|
2102
|
+
] }) })
|
|
2103
|
+
] }) });
|
|
2104
|
+
};
|
|
2105
|
+
|
|
2106
|
+
// src/assets/braid-logo.png
|
|
2107
|
+
var braid_logo_default = "./braid-logo-343BOQZ2.png";
|
|
2108
|
+
var MOBILE_BREAKPOINT = 768;
|
|
2109
|
+
function useIsMobile() {
|
|
2110
|
+
const [isMobile, setIsMobile] = React15__namespace.useState(void 0);
|
|
2111
|
+
React15__namespace.useEffect(() => {
|
|
2112
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
2113
|
+
const onChange = () => {
|
|
2114
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
2115
|
+
};
|
|
2116
|
+
mql.addEventListener("change", onChange);
|
|
2117
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
2118
|
+
return () => mql.removeEventListener("change", onChange);
|
|
2119
|
+
}, []);
|
|
2120
|
+
return !!isMobile;
|
|
2121
|
+
}
|
|
2122
|
+
var Separator = React15__namespace.forwardRef(
|
|
2123
|
+
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2124
|
+
SeparatorPrimitive__namespace.Root,
|
|
2125
|
+
{
|
|
2126
|
+
ref,
|
|
2127
|
+
decorative,
|
|
2128
|
+
orientation,
|
|
2129
|
+
className: cn(
|
|
2130
|
+
"shrink-0 bg-border",
|
|
2131
|
+
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
2132
|
+
className
|
|
2133
|
+
),
|
|
2134
|
+
...props
|
|
2135
|
+
}
|
|
2136
|
+
)
|
|
2137
|
+
);
|
|
2138
|
+
Separator.displayName = SeparatorPrimitive__namespace.Root.displayName;
|
|
2139
|
+
var Sheet = DialogPrimitive__namespace.Root;
|
|
2140
|
+
var SheetTrigger = DialogPrimitive__namespace.Trigger;
|
|
2141
|
+
var SheetClose = DialogPrimitive__namespace.Close;
|
|
2142
|
+
var SheetPortal = DialogPrimitive__namespace.Portal;
|
|
2143
|
+
var SheetOverlay = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2144
|
+
DialogPrimitive__namespace.Overlay,
|
|
2145
|
+
{
|
|
2146
|
+
className: cn(
|
|
2147
|
+
"fixed inset-0 z-50 bg-white/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
2148
|
+
className
|
|
2149
|
+
),
|
|
2150
|
+
...props,
|
|
2151
|
+
ref
|
|
2152
|
+
}
|
|
2153
|
+
));
|
|
2154
|
+
SheetOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
|
|
2155
|
+
var sheetVariants = classVarianceAuthority.cva(
|
|
2156
|
+
"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
|
|
2157
|
+
{
|
|
2158
|
+
variants: {
|
|
2159
|
+
side: {
|
|
2160
|
+
top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
2161
|
+
bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
1662
2162
|
left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
|
|
1663
2163
|
right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
|
|
1664
2164
|
}
|
|
@@ -1668,7 +2168,7 @@ var sheetVariants = classVarianceAuthority.cva(
|
|
|
1668
2168
|
}
|
|
1669
2169
|
}
|
|
1670
2170
|
);
|
|
1671
|
-
var SheetContent =
|
|
2171
|
+
var SheetContent = React15__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(SheetPortal, { children: [
|
|
1672
2172
|
/* @__PURE__ */ jsxRuntime.jsx(SheetOverlay, {}),
|
|
1673
2173
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1674
2174
|
DialogPrimitive__namespace.Content,
|
|
@@ -1715,7 +2215,7 @@ var SheetFooter = ({
|
|
|
1715
2215
|
}
|
|
1716
2216
|
);
|
|
1717
2217
|
SheetFooter.displayName = "SheetFooter";
|
|
1718
|
-
var SheetTitle =
|
|
2218
|
+
var SheetTitle = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1719
2219
|
DialogPrimitive__namespace.Title,
|
|
1720
2220
|
{
|
|
1721
2221
|
ref,
|
|
@@ -1724,7 +2224,7 @@ var SheetTitle = React13__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
1724
2224
|
}
|
|
1725
2225
|
));
|
|
1726
2226
|
SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
1727
|
-
var SheetDescription =
|
|
2227
|
+
var SheetDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1728
2228
|
DialogPrimitive__namespace.Description,
|
|
1729
2229
|
{
|
|
1730
2230
|
ref,
|
|
@@ -1736,7 +2236,7 @@ SheetDescription.displayName = DialogPrimitive__namespace.Description.displayNam
|
|
|
1736
2236
|
var TooltipProvider = TooltipPrimitive__namespace.Provider;
|
|
1737
2237
|
var Tooltip = TooltipPrimitive__namespace.Root;
|
|
1738
2238
|
var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
|
|
1739
|
-
var TooltipContent =
|
|
2239
|
+
var TooltipContent = React15__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1740
2240
|
TooltipPrimitive__namespace.Content,
|
|
1741
2241
|
{
|
|
1742
2242
|
ref,
|
|
@@ -1755,15 +2255,15 @@ var SIDEBAR_WIDTH = "15rem";
|
|
|
1755
2255
|
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
1756
2256
|
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
1757
2257
|
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
1758
|
-
var SidebarContext =
|
|
2258
|
+
var SidebarContext = React15__namespace.createContext(null);
|
|
1759
2259
|
function useSidebar() {
|
|
1760
|
-
const context =
|
|
2260
|
+
const context = React15__namespace.useContext(SidebarContext);
|
|
1761
2261
|
if (!context) {
|
|
1762
2262
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
1763
2263
|
}
|
|
1764
2264
|
return context;
|
|
1765
2265
|
}
|
|
1766
|
-
var SidebarProvider =
|
|
2266
|
+
var SidebarProvider = React15__namespace.forwardRef(
|
|
1767
2267
|
({
|
|
1768
2268
|
defaultOpen = true,
|
|
1769
2269
|
open: openProp,
|
|
@@ -1774,10 +2274,10 @@ var SidebarProvider = React13__namespace.forwardRef(
|
|
|
1774
2274
|
...props
|
|
1775
2275
|
}, ref) => {
|
|
1776
2276
|
const isMobile = useIsMobile();
|
|
1777
|
-
const [openMobile, setOpenMobile] =
|
|
1778
|
-
const [_open, _setOpen] =
|
|
2277
|
+
const [openMobile, setOpenMobile] = React15__namespace.useState(false);
|
|
2278
|
+
const [_open, _setOpen] = React15__namespace.useState(defaultOpen);
|
|
1779
2279
|
const open = openProp ?? _open;
|
|
1780
|
-
const setOpen =
|
|
2280
|
+
const setOpen = React15__namespace.useCallback(
|
|
1781
2281
|
(value) => {
|
|
1782
2282
|
const openState = typeof value === "function" ? value(open) : value;
|
|
1783
2283
|
if (setOpenProp) {
|
|
@@ -1789,10 +2289,10 @@ var SidebarProvider = React13__namespace.forwardRef(
|
|
|
1789
2289
|
},
|
|
1790
2290
|
[setOpenProp, open]
|
|
1791
2291
|
);
|
|
1792
|
-
const toggleSidebar =
|
|
2292
|
+
const toggleSidebar = React15__namespace.useCallback(() => {
|
|
1793
2293
|
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
1794
2294
|
}, [isMobile, setOpen, setOpenMobile]);
|
|
1795
|
-
|
|
2295
|
+
React15__namespace.useEffect(() => {
|
|
1796
2296
|
const handleKeyDown = (event) => {
|
|
1797
2297
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
1798
2298
|
event.preventDefault();
|
|
@@ -1803,7 +2303,7 @@ var SidebarProvider = React13__namespace.forwardRef(
|
|
|
1803
2303
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
1804
2304
|
}, [toggleSidebar]);
|
|
1805
2305
|
const state = open ? "expanded" : "collapsed";
|
|
1806
|
-
const contextValue =
|
|
2306
|
+
const contextValue = React15__namespace.useMemo(
|
|
1807
2307
|
() => ({
|
|
1808
2308
|
state,
|
|
1809
2309
|
open,
|
|
@@ -1835,7 +2335,7 @@ var SidebarProvider = React13__namespace.forwardRef(
|
|
|
1835
2335
|
}
|
|
1836
2336
|
);
|
|
1837
2337
|
SidebarProvider.displayName = "SidebarProvider";
|
|
1838
|
-
var Sidebar =
|
|
2338
|
+
var Sidebar = React15__namespace.forwardRef(
|
|
1839
2339
|
({
|
|
1840
2340
|
side = "left",
|
|
1841
2341
|
variant = "sidebar",
|
|
@@ -1922,7 +2422,7 @@ var Sidebar = React13__namespace.forwardRef(
|
|
|
1922
2422
|
}
|
|
1923
2423
|
);
|
|
1924
2424
|
Sidebar.displayName = "Sidebar";
|
|
1925
|
-
var SidebarTrigger =
|
|
2425
|
+
var SidebarTrigger = React15__namespace.forwardRef(({ className, onClick, ...props }, ref) => {
|
|
1926
2426
|
const { toggleSidebar } = useSidebar();
|
|
1927
2427
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1928
2428
|
Button,
|
|
@@ -1945,7 +2445,7 @@ var SidebarTrigger = React13__namespace.forwardRef(({ className, onClick, ...pro
|
|
|
1945
2445
|
);
|
|
1946
2446
|
});
|
|
1947
2447
|
SidebarTrigger.displayName = "SidebarTrigger";
|
|
1948
|
-
var SidebarRail =
|
|
2448
|
+
var SidebarRail = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
1949
2449
|
const { toggleSidebar } = useSidebar();
|
|
1950
2450
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1951
2451
|
"button",
|
|
@@ -1970,7 +2470,7 @@ var SidebarRail = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
1970
2470
|
);
|
|
1971
2471
|
});
|
|
1972
2472
|
SidebarRail.displayName = "SidebarRail";
|
|
1973
|
-
var SidebarInset =
|
|
2473
|
+
var SidebarInset = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
1974
2474
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1975
2475
|
"main",
|
|
1976
2476
|
{
|
|
@@ -1985,7 +2485,7 @@ var SidebarInset = React13__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
1985
2485
|
);
|
|
1986
2486
|
});
|
|
1987
2487
|
SidebarInset.displayName = "SidebarInset";
|
|
1988
|
-
var SidebarInput =
|
|
2488
|
+
var SidebarInput = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
1989
2489
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1990
2490
|
"input",
|
|
1991
2491
|
{
|
|
@@ -2000,7 +2500,7 @@ var SidebarInput = React13__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
2000
2500
|
);
|
|
2001
2501
|
});
|
|
2002
2502
|
SidebarInput.displayName = "SidebarInput";
|
|
2003
|
-
var SidebarHeader =
|
|
2503
|
+
var SidebarHeader = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2004
2504
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2005
2505
|
"div",
|
|
2006
2506
|
{
|
|
@@ -2012,7 +2512,7 @@ var SidebarHeader = React13__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
2012
2512
|
);
|
|
2013
2513
|
});
|
|
2014
2514
|
SidebarHeader.displayName = "SidebarHeader";
|
|
2015
|
-
var SidebarFooter =
|
|
2515
|
+
var SidebarFooter = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2016
2516
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2017
2517
|
"div",
|
|
2018
2518
|
{
|
|
@@ -2024,7 +2524,7 @@ var SidebarFooter = React13__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
2024
2524
|
);
|
|
2025
2525
|
});
|
|
2026
2526
|
SidebarFooter.displayName = "SidebarFooter";
|
|
2027
|
-
var SidebarSeparator =
|
|
2527
|
+
var SidebarSeparator = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2028
2528
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2029
2529
|
Separator,
|
|
2030
2530
|
{
|
|
@@ -2036,7 +2536,7 @@ var SidebarSeparator = React13__namespace.forwardRef(({ className, ...props }, r
|
|
|
2036
2536
|
);
|
|
2037
2537
|
});
|
|
2038
2538
|
SidebarSeparator.displayName = "SidebarSeparator";
|
|
2039
|
-
var SidebarContent =
|
|
2539
|
+
var SidebarContent = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2040
2540
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2041
2541
|
"div",
|
|
2042
2542
|
{
|
|
@@ -2051,7 +2551,7 @@ var SidebarContent = React13__namespace.forwardRef(({ className, ...props }, ref
|
|
|
2051
2551
|
);
|
|
2052
2552
|
});
|
|
2053
2553
|
SidebarContent.displayName = "SidebarContent";
|
|
2054
|
-
var SidebarGroup =
|
|
2554
|
+
var SidebarGroup = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2055
2555
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2056
2556
|
"div",
|
|
2057
2557
|
{
|
|
@@ -2063,7 +2563,7 @@ var SidebarGroup = React13__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
2063
2563
|
);
|
|
2064
2564
|
});
|
|
2065
2565
|
SidebarGroup.displayName = "SidebarGroup";
|
|
2066
|
-
var SidebarGroupLabel =
|
|
2566
|
+
var SidebarGroupLabel = React15__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
|
|
2067
2567
|
const Comp = asChild ? reactSlot.Slot : "div";
|
|
2068
2568
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2069
2569
|
Comp,
|
|
@@ -2080,7 +2580,7 @@ var SidebarGroupLabel = React13__namespace.forwardRef(({ className, asChild = fa
|
|
|
2080
2580
|
);
|
|
2081
2581
|
});
|
|
2082
2582
|
SidebarGroupLabel.displayName = "SidebarGroupLabel";
|
|
2083
|
-
var SidebarGroupAction =
|
|
2583
|
+
var SidebarGroupAction = React15__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
|
|
2084
2584
|
const Comp = asChild ? reactSlot.Slot : "button";
|
|
2085
2585
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2086
2586
|
Comp,
|
|
@@ -2099,7 +2599,7 @@ var SidebarGroupAction = React13__namespace.forwardRef(({ className, asChild = f
|
|
|
2099
2599
|
);
|
|
2100
2600
|
});
|
|
2101
2601
|
SidebarGroupAction.displayName = "SidebarGroupAction";
|
|
2102
|
-
var SidebarGroupContent =
|
|
2602
|
+
var SidebarGroupContent = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2103
2603
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2104
2604
|
"div",
|
|
2105
2605
|
{
|
|
@@ -2111,7 +2611,7 @@ var SidebarGroupContent = React13__namespace.forwardRef(({ className, ...props }
|
|
|
2111
2611
|
);
|
|
2112
2612
|
});
|
|
2113
2613
|
SidebarGroupContent.displayName = "SidebarGroupContent";
|
|
2114
|
-
var SidebarMenu =
|
|
2614
|
+
var SidebarMenu = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2115
2615
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2116
2616
|
"ul",
|
|
2117
2617
|
{
|
|
@@ -2123,7 +2623,7 @@ var SidebarMenu = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
2123
2623
|
);
|
|
2124
2624
|
});
|
|
2125
2625
|
SidebarMenu.displayName = "SidebarMenu";
|
|
2126
|
-
var SidebarMenuItem =
|
|
2626
|
+
var SidebarMenuItem = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2127
2627
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2128
2628
|
"li",
|
|
2129
2629
|
{
|
|
@@ -2155,7 +2655,7 @@ var sidebarMenuButtonVariants = classVarianceAuthority.cva(
|
|
|
2155
2655
|
}
|
|
2156
2656
|
}
|
|
2157
2657
|
);
|
|
2158
|
-
var SidebarMenuButton =
|
|
2658
|
+
var SidebarMenuButton = React15__namespace.forwardRef(
|
|
2159
2659
|
({
|
|
2160
2660
|
asChild = false,
|
|
2161
2661
|
isActive = false,
|
|
@@ -2201,7 +2701,7 @@ var SidebarMenuButton = React13__namespace.forwardRef(
|
|
|
2201
2701
|
}
|
|
2202
2702
|
);
|
|
2203
2703
|
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
2204
|
-
var SidebarMenuAction =
|
|
2704
|
+
var SidebarMenuAction = React15__namespace.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
|
|
2205
2705
|
const Comp = asChild ? reactSlot.Slot : "button";
|
|
2206
2706
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2207
2707
|
Comp,
|
|
@@ -2224,7 +2724,7 @@ var SidebarMenuAction = React13__namespace.forwardRef(({ className, asChild = fa
|
|
|
2224
2724
|
);
|
|
2225
2725
|
});
|
|
2226
2726
|
SidebarMenuAction.displayName = "SidebarMenuAction";
|
|
2227
|
-
var SidebarMenuBadge =
|
|
2727
|
+
var SidebarMenuBadge = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2228
2728
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2229
2729
|
"div",
|
|
2230
2730
|
{
|
|
@@ -2244,8 +2744,8 @@ var SidebarMenuBadge = React13__namespace.forwardRef(({ className, ...props }, r
|
|
|
2244
2744
|
);
|
|
2245
2745
|
});
|
|
2246
2746
|
SidebarMenuBadge.displayName = "SidebarMenuBadge";
|
|
2247
|
-
var SidebarMenuSkeleton =
|
|
2248
|
-
const width =
|
|
2747
|
+
var SidebarMenuSkeleton = React15__namespace.forwardRef(({ className, showIcon = false, ...props }, ref) => {
|
|
2748
|
+
const width = React15__namespace.useMemo(() => {
|
|
2249
2749
|
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
2250
2750
|
}, []);
|
|
2251
2751
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -2271,7 +2771,7 @@ var SidebarMenuSkeleton = React13__namespace.forwardRef(({ className, showIcon =
|
|
|
2271
2771
|
);
|
|
2272
2772
|
});
|
|
2273
2773
|
SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
|
|
2274
|
-
var SidebarMenuSub =
|
|
2774
|
+
var SidebarMenuSub = React15__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
2275
2775
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2276
2776
|
"ul",
|
|
2277
2777
|
{
|
|
@@ -2287,11 +2787,11 @@ var SidebarMenuSub = React13__namespace.forwardRef(({ className, ...props }, ref
|
|
|
2287
2787
|
);
|
|
2288
2788
|
});
|
|
2289
2789
|
SidebarMenuSub.displayName = "SidebarMenuSub";
|
|
2290
|
-
var SidebarMenuSubItem =
|
|
2790
|
+
var SidebarMenuSubItem = React15__namespace.forwardRef(({ ...props }, ref) => {
|
|
2291
2791
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { ref, ...props });
|
|
2292
2792
|
});
|
|
2293
2793
|
SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
|
|
2294
|
-
var SidebarMenuSubButton =
|
|
2794
|
+
var SidebarMenuSubButton = React15__namespace.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
|
|
2295
2795
|
const Comp = asChild ? reactSlot.Slot : "a";
|
|
2296
2796
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2297
2797
|
Comp,
|
|
@@ -2524,7 +3024,7 @@ function AppSidebar() {
|
|
|
2524
3024
|
const { state } = useSidebar();
|
|
2525
3025
|
const location = reactRouterDom.useLocation();
|
|
2526
3026
|
const currentPath = location.pathname;
|
|
2527
|
-
const [openItems, setOpenItems] =
|
|
3027
|
+
const [openItems, setOpenItems] = React15.useState([]);
|
|
2528
3028
|
const isActive = (path) => currentPath === path;
|
|
2529
3029
|
const toggleItem = (title) => {
|
|
2530
3030
|
setOpenItems(
|
|
@@ -2597,20 +3097,20 @@ var MainLayout = ({ children }) => {
|
|
|
2597
3097
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-screen w-full", children: /* @__PURE__ */ jsxRuntime.jsx("main", { className: "flex-1 pl-4", children }) });
|
|
2598
3098
|
};
|
|
2599
3099
|
var useEditState = ({ initialEditing = false, onToggleEdit, onSave, onCancel }) => {
|
|
2600
|
-
const [localEditing, setLocalEditing] =
|
|
2601
|
-
const [isLoading, setIsLoading] =
|
|
2602
|
-
|
|
3100
|
+
const [localEditing, setLocalEditing] = React15.useState(initialEditing);
|
|
3101
|
+
const [isLoading, setIsLoading] = React15.useState(false);
|
|
3102
|
+
React15.useEffect(() => {
|
|
2603
3103
|
setLocalEditing(initialEditing);
|
|
2604
3104
|
}, [initialEditing]);
|
|
2605
3105
|
const isEditing = onToggleEdit !== void 0 ? initialEditing : localEditing;
|
|
2606
|
-
const handleToggleEdit =
|
|
3106
|
+
const handleToggleEdit = React15.useCallback(() => {
|
|
2607
3107
|
if (onToggleEdit) {
|
|
2608
3108
|
onToggleEdit();
|
|
2609
3109
|
} else {
|
|
2610
3110
|
setLocalEditing((prev) => !prev);
|
|
2611
3111
|
}
|
|
2612
3112
|
}, [onToggleEdit]);
|
|
2613
|
-
const handleSave =
|
|
3113
|
+
const handleSave = React15.useCallback(async () => {
|
|
2614
3114
|
setIsLoading(true);
|
|
2615
3115
|
try {
|
|
2616
3116
|
if (onSave) {
|
|
@@ -2627,7 +3127,7 @@ var useEditState = ({ initialEditing = false, onToggleEdit, onSave, onCancel })
|
|
|
2627
3127
|
setIsLoading(false);
|
|
2628
3128
|
}
|
|
2629
3129
|
}, [onSave, onToggleEdit]);
|
|
2630
|
-
const handleCancel =
|
|
3130
|
+
const handleCancel = React15.useCallback(() => {
|
|
2631
3131
|
if (onCancel) {
|
|
2632
3132
|
onCancel();
|
|
2633
3133
|
}
|
|
@@ -2645,7 +3145,7 @@ var useEditState = ({ initialEditing = false, onToggleEdit, onSave, onCancel })
|
|
|
2645
3145
|
handleCancel
|
|
2646
3146
|
};
|
|
2647
3147
|
};
|
|
2648
|
-
var EditableFormCard =
|
|
3148
|
+
var EditableFormCard = React15__namespace.forwardRef(
|
|
2649
3149
|
({
|
|
2650
3150
|
title,
|
|
2651
3151
|
description,
|
|
@@ -2710,111 +3210,11 @@ var EditableFormCard = React13__namespace.forwardRef(
|
|
|
2710
3210
|
) }) : void 0,
|
|
2711
3211
|
...props,
|
|
2712
3212
|
children: currentlyEditing ? editContent : viewContent
|
|
2713
|
-
}
|
|
2714
|
-
);
|
|
2715
|
-
}
|
|
2716
|
-
);
|
|
2717
|
-
EditableFormCard.displayName = "EditableFormCard";
|
|
2718
|
-
var FormProvider = ({
|
|
2719
|
-
form,
|
|
2720
|
-
children
|
|
2721
|
-
}) => {
|
|
2722
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children });
|
|
2723
|
-
};
|
|
2724
|
-
var FormInput = ({
|
|
2725
|
-
name,
|
|
2726
|
-
...props
|
|
2727
|
-
}) => {
|
|
2728
|
-
const { control, formState } = reactHookForm.useFormContext();
|
|
2729
|
-
const error = formState.errors[name]?.message;
|
|
2730
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2731
|
-
reactHookForm.Controller,
|
|
2732
|
-
{
|
|
2733
|
-
name,
|
|
2734
|
-
control,
|
|
2735
|
-
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2736
|
-
EnhancedInput,
|
|
2737
|
-
{
|
|
2738
|
-
...props,
|
|
2739
|
-
...field,
|
|
2740
|
-
error
|
|
2741
|
-
}
|
|
2742
|
-
)
|
|
2743
|
-
}
|
|
2744
|
-
);
|
|
2745
|
-
};
|
|
2746
|
-
var useFormWithEditState = ({
|
|
2747
|
-
schema,
|
|
2748
|
-
initialEditing = false,
|
|
2749
|
-
onToggleEdit,
|
|
2750
|
-
onSave,
|
|
2751
|
-
onCancel,
|
|
2752
|
-
...formProps
|
|
2753
|
-
}) => {
|
|
2754
|
-
const [localEditing, setLocalEditing] = React13.useState(initialEditing);
|
|
2755
|
-
const [isLoading, setIsLoading] = React13.useState(false);
|
|
2756
|
-
const form = reactHookForm.useForm({
|
|
2757
|
-
...formProps,
|
|
2758
|
-
resolver: schema ? zod$1.zodResolver(schema) : void 0
|
|
2759
|
-
});
|
|
2760
|
-
const { formState, reset, setError } = form;
|
|
2761
|
-
const { isValid, isDirty } = formState;
|
|
2762
|
-
React13.useEffect(() => {
|
|
2763
|
-
setLocalEditing(initialEditing);
|
|
2764
|
-
}, [initialEditing]);
|
|
2765
|
-
const isEditing = onToggleEdit !== void 0 ? initialEditing : localEditing;
|
|
2766
|
-
const handleToggleEdit = React13.useCallback(() => {
|
|
2767
|
-
if (onToggleEdit) {
|
|
2768
|
-
onToggleEdit();
|
|
2769
|
-
} else {
|
|
2770
|
-
setLocalEditing((prev) => !prev);
|
|
2771
|
-
}
|
|
2772
|
-
}, [onToggleEdit]);
|
|
2773
|
-
const handleSave = React13.useCallback(async () => {
|
|
2774
|
-
if (!isValid) return;
|
|
2775
|
-
setIsLoading(true);
|
|
2776
|
-
try {
|
|
2777
|
-
const data = form.getValues();
|
|
2778
|
-
if (onSave) {
|
|
2779
|
-
await onSave(data);
|
|
2780
|
-
}
|
|
2781
|
-
if (onToggleEdit) {
|
|
2782
|
-
onToggleEdit();
|
|
2783
|
-
} else {
|
|
2784
|
-
setLocalEditing(false);
|
|
2785
|
-
}
|
|
2786
|
-
} catch (error) {
|
|
2787
|
-
console.error("Form save error:", error);
|
|
2788
|
-
} finally {
|
|
2789
|
-
setIsLoading(false);
|
|
2790
|
-
}
|
|
2791
|
-
}, [form, isValid, onSave, onToggleEdit]);
|
|
2792
|
-
const handleCancel = React13.useCallback(() => {
|
|
2793
|
-
reset();
|
|
2794
|
-
if (onCancel) {
|
|
2795
|
-
onCancel();
|
|
2796
|
-
}
|
|
2797
|
-
if (onToggleEdit) {
|
|
2798
|
-
onToggleEdit();
|
|
2799
|
-
} else {
|
|
2800
|
-
setLocalEditing(false);
|
|
2801
|
-
}
|
|
2802
|
-
}, [reset, onCancel, onToggleEdit]);
|
|
2803
|
-
const setFieldError = React13.useCallback((field, error) => {
|
|
2804
|
-
setError(field, { type: "manual", message: error });
|
|
2805
|
-
}, [setError]);
|
|
2806
|
-
return {
|
|
2807
|
-
...form,
|
|
2808
|
-
isEditing,
|
|
2809
|
-
isLoading,
|
|
2810
|
-
handleToggleEdit,
|
|
2811
|
-
handleSave,
|
|
2812
|
-
handleCancel,
|
|
2813
|
-
isFormValid: isValid,
|
|
2814
|
-
isDirty,
|
|
2815
|
-
setFieldError
|
|
2816
|
-
};
|
|
2817
|
-
};
|
|
3213
|
+
}
|
|
3214
|
+
);
|
|
3215
|
+
}
|
|
3216
|
+
);
|
|
3217
|
+
EditableFormCard.displayName = "EditableFormCard";
|
|
2818
3218
|
var achBasicInfoSchema = zod.z.object({
|
|
2819
3219
|
counterpartyName: zod.z.string().min(1, "Counterparty name is required"),
|
|
2820
3220
|
shortName: zod.z.string().min(1, "Short name is required"),
|
|
@@ -2913,29 +3313,6 @@ var ACHBankCard = ({ data, onDataChange, isEditing, onToggleEdit, className, hid
|
|
|
2913
3313
|
}
|
|
2914
3314
|
);
|
|
2915
3315
|
};
|
|
2916
|
-
var FormSelect = ({
|
|
2917
|
-
name,
|
|
2918
|
-
...props
|
|
2919
|
-
}) => {
|
|
2920
|
-
const { control, formState } = reactHookForm.useFormContext();
|
|
2921
|
-
const error = formState.errors[name]?.message;
|
|
2922
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2923
|
-
reactHookForm.Controller,
|
|
2924
|
-
{
|
|
2925
|
-
name,
|
|
2926
|
-
control,
|
|
2927
|
-
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2928
|
-
EnhancedSelect,
|
|
2929
|
-
{
|
|
2930
|
-
...props,
|
|
2931
|
-
value: field.value,
|
|
2932
|
-
onValueChange: field.onChange,
|
|
2933
|
-
error
|
|
2934
|
-
}
|
|
2935
|
-
)
|
|
2936
|
-
}
|
|
2937
|
-
);
|
|
2938
|
-
};
|
|
2939
3316
|
var ACHBasicInfoCard = ({
|
|
2940
3317
|
data,
|
|
2941
3318
|
onDataChange,
|
|
@@ -3031,7 +3408,7 @@ var gapClasses = {
|
|
|
3031
3408
|
lg: "gap-6",
|
|
3032
3409
|
xl: "gap-8"
|
|
3033
3410
|
};
|
|
3034
|
-
var ResponsiveGrid =
|
|
3411
|
+
var ResponsiveGrid = React15__namespace.forwardRef(
|
|
3035
3412
|
({ children, type = "cards", gap = "md", editMode = false, className }, ref) => {
|
|
3036
3413
|
const gridClasses2 = editMode ? "grid-cols-1" : typeClasses[type];
|
|
3037
3414
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3224,7 +3601,7 @@ var BankAddressCard = ({
|
|
|
3224
3601
|
);
|
|
3225
3602
|
};
|
|
3226
3603
|
var ACHTransferSection = ({ isEditing, onToggleEdit, className, hideActions }) => {
|
|
3227
|
-
const [achData, setAchData] =
|
|
3604
|
+
const [achData, setAchData] = React15.useState(defaultACHTransfer);
|
|
3228
3605
|
const handleDataChange = (newData) => {
|
|
3229
3606
|
setAchData(newData);
|
|
3230
3607
|
};
|
|
@@ -3456,8 +3833,8 @@ var StatusBadge = ({ status, className }) => {
|
|
|
3456
3833
|
] });
|
|
3457
3834
|
};
|
|
3458
3835
|
var BasicInfoCard = ({ isEditing, onToggleEdit, className, hideActions }) => {
|
|
3459
|
-
const [name, setName] =
|
|
3460
|
-
const [status, setStatus] =
|
|
3836
|
+
const [name, setName] = React15.useState("John wire hot");
|
|
3837
|
+
const [status, setStatus] = React15.useState("ACTIVE");
|
|
3461
3838
|
const editContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
3462
3839
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
|
|
3463
3840
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3711,8 +4088,8 @@ var columnClasses = {
|
|
|
3711
4088
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
|
3712
4089
|
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
|
|
3713
4090
|
};
|
|
3714
|
-
var DataGrid =
|
|
3715
|
-
({ data, columns = 2, gap = "md", className }, ref) => {
|
|
4091
|
+
var DataGrid = React15__namespace.forwardRef(
|
|
4092
|
+
({ data, columns: columns2 = 2, gap = "md", className }, ref) => {
|
|
3716
4093
|
const isItemArray = data.length > 0 && "label" in data[0];
|
|
3717
4094
|
if (isItemArray) {
|
|
3718
4095
|
const items = data;
|
|
@@ -3722,7 +4099,7 @@ var DataGrid = React13__namespace.forwardRef(
|
|
|
3722
4099
|
ref,
|
|
3723
4100
|
className: cn(
|
|
3724
4101
|
"grid",
|
|
3725
|
-
columnClasses[
|
|
4102
|
+
columnClasses[columns2],
|
|
3726
4103
|
gapClasses2[gap],
|
|
3727
4104
|
className
|
|
3728
4105
|
),
|
|
@@ -3743,7 +4120,7 @@ var DataGrid = React13__namespace.forwardRef(
|
|
|
3743
4120
|
section.title && /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium text-foreground mb-2", children: section.title }),
|
|
3744
4121
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(
|
|
3745
4122
|
"grid",
|
|
3746
|
-
columnClasses[
|
|
4123
|
+
columnClasses[columns2],
|
|
3747
4124
|
gapClasses2[gap]
|
|
3748
4125
|
), children: section.items.map((item, itemIndex) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3749
4126
|
InfoField,
|
|
@@ -4186,7 +4563,7 @@ var ContactInfoCard = ({ isEditing, onToggleEdit, className }) => {
|
|
|
4186
4563
|
var labelVariants = classVarianceAuthority.cva(
|
|
4187
4564
|
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
4188
4565
|
);
|
|
4189
|
-
var Label =
|
|
4566
|
+
var Label = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4190
4567
|
LabelPrimitive__namespace.Root,
|
|
4191
4568
|
{
|
|
4192
4569
|
ref,
|
|
@@ -4196,7 +4573,7 @@ var Label = React13__namespace.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
4196
4573
|
));
|
|
4197
4574
|
Label.displayName = LabelPrimitive__namespace.Root.displayName;
|
|
4198
4575
|
var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
4199
|
-
const [formData, setFormData] =
|
|
4576
|
+
const [formData, setFormData] = React15.useState({
|
|
4200
4577
|
name: "",
|
|
4201
4578
|
type: "business",
|
|
4202
4579
|
email: "",
|
|
@@ -4307,7 +4684,7 @@ var gridClasses = {
|
|
|
4307
4684
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
|
4308
4685
|
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
|
|
4309
4686
|
};
|
|
4310
|
-
var FormSection =
|
|
4687
|
+
var FormSection = React15__namespace.forwardRef(
|
|
4311
4688
|
({
|
|
4312
4689
|
title,
|
|
4313
4690
|
description,
|
|
@@ -4315,7 +4692,7 @@ var FormSection = React13__namespace.forwardRef(
|
|
|
4315
4692
|
className,
|
|
4316
4693
|
spacing: spacing2 = "md",
|
|
4317
4694
|
layout = "vertical",
|
|
4318
|
-
columns = 2
|
|
4695
|
+
columns: columns2 = 2
|
|
4319
4696
|
}, ref) => {
|
|
4320
4697
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("space-y-4", className), children: [
|
|
4321
4698
|
(title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
@@ -4323,7 +4700,7 @@ var FormSection = React13__namespace.forwardRef(
|
|
|
4323
4700
|
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: description })
|
|
4324
4701
|
] }),
|
|
4325
4702
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(
|
|
4326
|
-
layout === "grid" ? `grid gap-4 ${gridClasses[
|
|
4703
|
+
layout === "grid" ? `grid gap-4 ${gridClasses[columns2]}` : spacingClasses[spacing2]
|
|
4327
4704
|
), children })
|
|
4328
4705
|
] });
|
|
4329
4706
|
}
|
|
@@ -4611,9 +4988,9 @@ var ReceiverCard = ({
|
|
|
4611
4988
|
);
|
|
4612
4989
|
};
|
|
4613
4990
|
var PaymentInformationSection = () => {
|
|
4614
|
-
const [paymentMethods, setPaymentMethods] =
|
|
4615
|
-
const [showAddMenu, setShowAddMenu] =
|
|
4616
|
-
const [achData, setAchData] =
|
|
4991
|
+
const [paymentMethods, setPaymentMethods] = React15.useState([]);
|
|
4992
|
+
const [showAddMenu, setShowAddMenu] = React15.useState(false);
|
|
4993
|
+
const [achData, setAchData] = React15.useState(defaultACHTransfer);
|
|
4617
4994
|
const addPaymentMethod = (type) => {
|
|
4618
4995
|
const newMethod = {
|
|
4619
4996
|
id: `${type}-${Date.now()}`,
|
|
@@ -4738,7 +5115,7 @@ var PaymentInformationSection = () => {
|
|
|
4738
5115
|
] });
|
|
4739
5116
|
};
|
|
4740
5117
|
var WireTransferSection = ({ isEditing, onToggleEdit, className, hideActions }) => {
|
|
4741
|
-
const [wireTransferType, setWireTransferType] =
|
|
5118
|
+
const [wireTransferType, setWireTransferType] = React15.useState("INTERNATIONAL");
|
|
4742
5119
|
const editContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
4743
5120
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4744
5121
|
EnhancedSelect,
|
|
@@ -4773,267 +5150,618 @@ var WireTransferSection = ({ isEditing, onToggleEdit, className, hideActions })
|
|
|
4773
5150
|
] })
|
|
4774
5151
|
] });
|
|
4775
5152
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4776
|
-
EditableFormCard,
|
|
5153
|
+
EditableFormCard,
|
|
5154
|
+
{
|
|
5155
|
+
title: "Wire Transfer Configuration",
|
|
5156
|
+
description: "Configure wire transfer settings and participants",
|
|
5157
|
+
variant: "subtle",
|
|
5158
|
+
className,
|
|
5159
|
+
isEditing,
|
|
5160
|
+
onToggleEdit,
|
|
5161
|
+
hideActions,
|
|
5162
|
+
editContent,
|
|
5163
|
+
viewContent
|
|
5164
|
+
}
|
|
5165
|
+
);
|
|
5166
|
+
};
|
|
5167
|
+
var sizeClasses = {
|
|
5168
|
+
sm: "max-w-2xl",
|
|
5169
|
+
md: "max-w-4xl",
|
|
5170
|
+
lg: "max-w-6xl",
|
|
5171
|
+
xl: "max-w-7xl",
|
|
5172
|
+
full: "max-w-full"
|
|
5173
|
+
};
|
|
5174
|
+
var paddingClasses = {
|
|
5175
|
+
none: "",
|
|
5176
|
+
sm: "px-4 py-4",
|
|
5177
|
+
md: "px-6 py-6",
|
|
5178
|
+
lg: "px-8 py-8"
|
|
5179
|
+
};
|
|
5180
|
+
var Container = React15__namespace.forwardRef(
|
|
5181
|
+
({ children, size = "lg", padding = "md", center = true, className }, ref) => {
|
|
5182
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5183
|
+
"div",
|
|
5184
|
+
{
|
|
5185
|
+
ref,
|
|
5186
|
+
className: cn(
|
|
5187
|
+
sizeClasses[size],
|
|
5188
|
+
paddingClasses[padding],
|
|
5189
|
+
center && "mx-auto",
|
|
5190
|
+
className
|
|
5191
|
+
),
|
|
5192
|
+
children
|
|
5193
|
+
}
|
|
5194
|
+
);
|
|
5195
|
+
}
|
|
5196
|
+
);
|
|
5197
|
+
Container.displayName = "Container";
|
|
5198
|
+
var spacingClasses2 = {
|
|
5199
|
+
vertical: {
|
|
5200
|
+
none: "",
|
|
5201
|
+
xs: "space-y-1",
|
|
5202
|
+
sm: "space-y-2",
|
|
5203
|
+
md: "space-y-4",
|
|
5204
|
+
lg: "space-y-6",
|
|
5205
|
+
xl: "space-y-8"
|
|
5206
|
+
},
|
|
5207
|
+
horizontal: {
|
|
5208
|
+
none: "",
|
|
5209
|
+
xs: "space-x-1",
|
|
5210
|
+
sm: "space-x-2",
|
|
5211
|
+
md: "space-x-4",
|
|
5212
|
+
lg: "space-x-6",
|
|
5213
|
+
xl: "space-x-8"
|
|
5214
|
+
}
|
|
5215
|
+
};
|
|
5216
|
+
var alignClasses = {
|
|
5217
|
+
vertical: {
|
|
5218
|
+
start: "",
|
|
5219
|
+
center: "items-center",
|
|
5220
|
+
end: "items-end",
|
|
5221
|
+
stretch: "items-stretch"
|
|
5222
|
+
},
|
|
5223
|
+
horizontal: {
|
|
5224
|
+
start: "",
|
|
5225
|
+
center: "items-center",
|
|
5226
|
+
end: "items-end",
|
|
5227
|
+
stretch: "items-stretch"
|
|
5228
|
+
}
|
|
5229
|
+
};
|
|
5230
|
+
var justifyClasses = {
|
|
5231
|
+
start: "",
|
|
5232
|
+
center: "justify-center",
|
|
5233
|
+
end: "justify-end",
|
|
5234
|
+
between: "justify-between",
|
|
5235
|
+
around: "justify-around"
|
|
5236
|
+
};
|
|
5237
|
+
var Stack = React15__namespace.forwardRef(
|
|
5238
|
+
({ children, direction = "vertical", spacing: spacing2 = "md", align = "start", justify = "start", className }, ref) => {
|
|
5239
|
+
const isHorizontal = direction === "horizontal";
|
|
5240
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5241
|
+
"div",
|
|
5242
|
+
{
|
|
5243
|
+
ref,
|
|
5244
|
+
className: cn(
|
|
5245
|
+
"flex",
|
|
5246
|
+
isHorizontal ? "flex-row" : "flex-col",
|
|
5247
|
+
spacingClasses2[direction][spacing2],
|
|
5248
|
+
alignClasses[direction][align],
|
|
5249
|
+
justifyClasses[justify],
|
|
5250
|
+
className
|
|
5251
|
+
),
|
|
5252
|
+
children
|
|
5253
|
+
}
|
|
5254
|
+
);
|
|
5255
|
+
}
|
|
5256
|
+
);
|
|
5257
|
+
Stack.displayName = "Stack";
|
|
5258
|
+
var Breadcrumb = React15__namespace.forwardRef(
|
|
5259
|
+
({ items, showHome = true, separator, className }, ref) => {
|
|
5260
|
+
const defaultSeparator = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "w-4 h-4 text-muted-foreground" });
|
|
5261
|
+
const separatorElement = separator || defaultSeparator;
|
|
5262
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5263
|
+
"nav",
|
|
5264
|
+
{
|
|
5265
|
+
ref,
|
|
5266
|
+
"aria-label": "Breadcrumb",
|
|
5267
|
+
className: cn("flex items-center space-x-1 text-sm", className),
|
|
5268
|
+
children: [
|
|
5269
|
+
showHome && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5270
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5271
|
+
reactRouterDom.NavLink,
|
|
5272
|
+
{
|
|
5273
|
+
to: "/",
|
|
5274
|
+
className: "flex items-center text-muted-foreground hover:text-foreground transition-colors",
|
|
5275
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Home, { className: "w-4 h-4" })
|
|
5276
|
+
}
|
|
5277
|
+
),
|
|
5278
|
+
items.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: separatorElement })
|
|
5279
|
+
] }),
|
|
5280
|
+
items.map((item, index) => {
|
|
5281
|
+
const isLast = index === items.length - 1;
|
|
5282
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React15__namespace.Fragment, { children: [
|
|
5283
|
+
item.href && !isLast ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5284
|
+
reactRouterDom.NavLink,
|
|
5285
|
+
{
|
|
5286
|
+
to: item.href,
|
|
5287
|
+
className: "flex items-center text-muted-foreground hover:text-foreground transition-colors",
|
|
5288
|
+
children: [
|
|
5289
|
+
item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1", children: item.icon }),
|
|
5290
|
+
item.label
|
|
5291
|
+
]
|
|
5292
|
+
}
|
|
5293
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(
|
|
5294
|
+
"flex items-center",
|
|
5295
|
+
isLast ? "text-foreground font-medium" : "text-muted-foreground"
|
|
5296
|
+
), children: [
|
|
5297
|
+
item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1", children: item.icon }),
|
|
5298
|
+
item.label
|
|
5299
|
+
] }),
|
|
5300
|
+
!isLast && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: separatorElement })
|
|
5301
|
+
] }, index);
|
|
5302
|
+
})
|
|
5303
|
+
]
|
|
5304
|
+
}
|
|
5305
|
+
);
|
|
5306
|
+
}
|
|
5307
|
+
);
|
|
5308
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
5309
|
+
var ListPage = React15__namespace.forwardRef(
|
|
5310
|
+
({
|
|
5311
|
+
title,
|
|
5312
|
+
description,
|
|
5313
|
+
breadcrumbs,
|
|
5314
|
+
actions,
|
|
5315
|
+
children,
|
|
5316
|
+
maxWidth = "xl",
|
|
5317
|
+
loading = false,
|
|
5318
|
+
emptyState,
|
|
5319
|
+
className
|
|
5320
|
+
}, ref) => {
|
|
5321
|
+
const hasData = React15__namespace.Children.count(children) > 0;
|
|
5322
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("min-h-screen bg-gradient-subtle", className), children: /* @__PURE__ */ jsxRuntime.jsx(Container, { size: maxWidth, children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: "lg", children: [
|
|
5323
|
+
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { items: breadcrumbs }),
|
|
5324
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
|
|
5325
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: "sm", children: [
|
|
5326
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-foreground", children: title }),
|
|
5327
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground max-w-2xl", children: description })
|
|
5328
|
+
] }),
|
|
5329
|
+
actions && actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Stack, { direction: "horizontal", spacing: "sm", children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5330
|
+
Button,
|
|
5331
|
+
{
|
|
5332
|
+
variant: action.variant || "default",
|
|
5333
|
+
onClick: action.onClick,
|
|
5334
|
+
children: [
|
|
5335
|
+
action.icon,
|
|
5336
|
+
action.label
|
|
5337
|
+
]
|
|
5338
|
+
},
|
|
5339
|
+
index
|
|
5340
|
+
)) })
|
|
5341
|
+
] }),
|
|
5342
|
+
loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse text-muted-foreground", children: "Loading..." }) }) : hasData ? /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGrid, { type: "cards", gap: "lg", children }) : emptyState ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: emptyState }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: "No items found" }) }) })
|
|
5343
|
+
] }) }) });
|
|
5344
|
+
}
|
|
5345
|
+
);
|
|
5346
|
+
ListPage.displayName = "ListPage";
|
|
5347
|
+
var StatementHeader = ({ data, onEdit }) => {
|
|
5348
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
5349
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { direction: "row", children: [
|
|
5350
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { size: "md", children: "Statement Summary" }),
|
|
5351
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", size: "sm", onClick: onEdit, children: [
|
|
5352
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit, { className: "h-4 w-4 mr-2" }),
|
|
5353
|
+
"Edit"
|
|
5354
|
+
] })
|
|
5355
|
+
] }),
|
|
5356
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: [
|
|
5357
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5358
|
+
InfoField,
|
|
5359
|
+
{
|
|
5360
|
+
label: "Account",
|
|
5361
|
+
value: data.account,
|
|
5362
|
+
layout: "horizontal"
|
|
5363
|
+
}
|
|
5364
|
+
),
|
|
5365
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5366
|
+
InfoField,
|
|
5367
|
+
{
|
|
5368
|
+
label: "Product ID",
|
|
5369
|
+
value: data.productId,
|
|
5370
|
+
layout: "horizontal"
|
|
5371
|
+
}
|
|
5372
|
+
),
|
|
5373
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5374
|
+
InfoField,
|
|
5375
|
+
{
|
|
5376
|
+
label: "Program ID",
|
|
5377
|
+
value: data.programId,
|
|
5378
|
+
layout: "horizontal"
|
|
5379
|
+
}
|
|
5380
|
+
),
|
|
5381
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5382
|
+
InfoField,
|
|
5383
|
+
{
|
|
5384
|
+
label: "Start Date",
|
|
5385
|
+
value: data.startDate,
|
|
5386
|
+
layout: "horizontal"
|
|
5387
|
+
}
|
|
5388
|
+
),
|
|
5389
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5390
|
+
InfoField,
|
|
5391
|
+
{
|
|
5392
|
+
label: "End Date",
|
|
5393
|
+
value: data.endDate,
|
|
5394
|
+
layout: "horizontal"
|
|
5395
|
+
}
|
|
5396
|
+
),
|
|
5397
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5398
|
+
InfoField,
|
|
5399
|
+
{
|
|
5400
|
+
label: "Starting Balance",
|
|
5401
|
+
value: data.startingBalance,
|
|
5402
|
+
layout: "horizontal"
|
|
5403
|
+
}
|
|
5404
|
+
),
|
|
5405
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5406
|
+
InfoField,
|
|
5407
|
+
{
|
|
5408
|
+
label: "Ending Balance",
|
|
5409
|
+
value: data.endingBalance,
|
|
5410
|
+
layout: "horizontal"
|
|
5411
|
+
}
|
|
5412
|
+
)
|
|
5413
|
+
] }) })
|
|
5414
|
+
] });
|
|
5415
|
+
};
|
|
5416
|
+
function Calendar({
|
|
5417
|
+
className,
|
|
5418
|
+
classNames,
|
|
5419
|
+
showOutsideDays = true,
|
|
5420
|
+
...props
|
|
5421
|
+
}) {
|
|
5422
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5423
|
+
reactDayPicker.DayPicker,
|
|
4777
5424
|
{
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
5425
|
+
showOutsideDays,
|
|
5426
|
+
className: cn("p-3 pointer-events-auto", className),
|
|
5427
|
+
classNames: {
|
|
5428
|
+
months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
|
|
5429
|
+
month: "space-y-4",
|
|
5430
|
+
caption: "flex justify-center pt-1 relative items-center",
|
|
5431
|
+
caption_label: "text-sm font-medium",
|
|
5432
|
+
nav: "space-x-1 flex items-center",
|
|
5433
|
+
button_previous: "absolute left-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
5434
|
+
button_next: "absolute right-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
5435
|
+
month_grid: "w-full border-collapse space-y-1",
|
|
5436
|
+
weekdays: "flex",
|
|
5437
|
+
weekday: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
|
|
5438
|
+
week: "flex w-full mt-2",
|
|
5439
|
+
day: "h-9 w-9 text-center text-sm p-0 relative hover:bg-accent hover:text-accent-foreground rounded-md",
|
|
5440
|
+
day_button: cn(
|
|
5441
|
+
buttonVariants({ variant: "ghost" }),
|
|
5442
|
+
"h-9 w-9 p-0 font-normal"
|
|
5443
|
+
),
|
|
5444
|
+
selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground",
|
|
5445
|
+
today: "bg-accent text-accent-foreground",
|
|
5446
|
+
outside: "text-muted-foreground opacity-50",
|
|
5447
|
+
disabled: "text-muted-foreground opacity-50",
|
|
5448
|
+
hidden: "invisible",
|
|
5449
|
+
...classNames
|
|
5450
|
+
},
|
|
5451
|
+
...props
|
|
4787
5452
|
}
|
|
4788
5453
|
);
|
|
4789
|
-
}
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
({ children, size = "lg", padding = "md", center = true, className }, ref) => {
|
|
4805
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4806
|
-
"div",
|
|
4807
|
-
{
|
|
4808
|
-
ref,
|
|
4809
|
-
className: cn(
|
|
4810
|
-
sizeClasses[size],
|
|
4811
|
-
paddingClasses[padding],
|
|
4812
|
-
center && "mx-auto",
|
|
4813
|
-
className
|
|
4814
|
-
),
|
|
4815
|
-
children
|
|
4816
|
-
}
|
|
4817
|
-
);
|
|
4818
|
-
}
|
|
4819
|
-
);
|
|
4820
|
-
Container.displayName = "Container";
|
|
4821
|
-
var spacingClasses2 = {
|
|
4822
|
-
vertical: {
|
|
4823
|
-
none: "",
|
|
4824
|
-
xs: "space-y-1",
|
|
4825
|
-
sm: "space-y-2",
|
|
4826
|
-
md: "space-y-4",
|
|
4827
|
-
lg: "space-y-6",
|
|
4828
|
-
xl: "space-y-8"
|
|
4829
|
-
},
|
|
4830
|
-
horizontal: {
|
|
4831
|
-
none: "",
|
|
4832
|
-
xs: "space-x-1",
|
|
4833
|
-
sm: "space-x-2",
|
|
4834
|
-
md: "space-x-4",
|
|
4835
|
-
lg: "space-x-6",
|
|
4836
|
-
xl: "space-x-8"
|
|
5454
|
+
}
|
|
5455
|
+
Calendar.displayName = "Calendar";
|
|
5456
|
+
var Popover = PopoverPrimitive__namespace.Root;
|
|
5457
|
+
var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
|
|
5458
|
+
var PopoverContent = React15__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5459
|
+
PopoverPrimitive__namespace.Content,
|
|
5460
|
+
{
|
|
5461
|
+
ref,
|
|
5462
|
+
align,
|
|
5463
|
+
sideOffset,
|
|
5464
|
+
className: cn(
|
|
5465
|
+
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
5466
|
+
className
|
|
5467
|
+
),
|
|
5468
|
+
...props
|
|
4837
5469
|
}
|
|
4838
|
-
};
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
5470
|
+
) }));
|
|
5471
|
+
PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
|
|
5472
|
+
function DataTable({
|
|
5473
|
+
columns: columns2,
|
|
5474
|
+
data,
|
|
5475
|
+
sortBy,
|
|
5476
|
+
sortDirection,
|
|
5477
|
+
onSort,
|
|
5478
|
+
onRowClick,
|
|
5479
|
+
loading = false,
|
|
5480
|
+
emptyMessage = "No data available",
|
|
5481
|
+
className
|
|
5482
|
+
}) {
|
|
5483
|
+
const handleSort = (key) => {
|
|
5484
|
+
if (onSort) {
|
|
5485
|
+
onSort(key);
|
|
5486
|
+
}
|
|
5487
|
+
};
|
|
5488
|
+
const renderSortIcon = (column) => {
|
|
5489
|
+
if (!column.sortable || !onSort) return null;
|
|
5490
|
+
if (sortBy === column.key) {
|
|
5491
|
+
return sortDirection === "asc" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "w-4 h-4 ml-1" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "w-4 h-4 ml-1" });
|
|
5492
|
+
}
|
|
5493
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: "w-4 h-4 ml-1 opacity-50" });
|
|
5494
|
+
};
|
|
5495
|
+
const renderCell = (column, row) => {
|
|
5496
|
+
const value = row[column.key];
|
|
5497
|
+
if (column.render) {
|
|
5498
|
+
return column.render(value, row);
|
|
5499
|
+
}
|
|
5500
|
+
if (typeof value === "boolean") {
|
|
5501
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: value ? "success" : "secondary", children: value ? "Yes" : "No" });
|
|
5502
|
+
}
|
|
5503
|
+
if (Array.isArray(value)) {
|
|
5504
|
+
return value.join(", ");
|
|
5505
|
+
}
|
|
5506
|
+
return value?.toString() || "-";
|
|
5507
|
+
};
|
|
5508
|
+
if (loading) {
|
|
5509
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("rounded-md border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse text-muted-foreground", children: "Loading..." }) }) });
|
|
4851
5510
|
}
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
center: "justify-center",
|
|
4856
|
-
end: "justify-end",
|
|
4857
|
-
between: "justify-between",
|
|
4858
|
-
around: "justify-around"
|
|
4859
|
-
};
|
|
4860
|
-
var Stack = React13__namespace.forwardRef(
|
|
4861
|
-
({ children, direction = "vertical", spacing: spacing2 = "md", align = "start", justify = "start", className }, ref) => {
|
|
4862
|
-
const isHorizontal = direction === "horizontal";
|
|
4863
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4864
|
-
"div",
|
|
5511
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("rounded-md border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
5512
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "border-b bg-muted/50", children: columns2.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5513
|
+
"th",
|
|
4865
5514
|
{
|
|
4866
|
-
ref,
|
|
4867
5515
|
className: cn(
|
|
4868
|
-
"
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
justifyClasses[justify],
|
|
4873
|
-
className
|
|
5516
|
+
"px-3 py-2 text-left align-middle text-sm font-medium bg-muted/50",
|
|
5517
|
+
column.align === "center" && "text-center",
|
|
5518
|
+
column.align === "right" && "text-right",
|
|
5519
|
+
column.width && `w-[${column.width}]`
|
|
4874
5520
|
),
|
|
4875
|
-
children
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
5521
|
+
children: column.sortable && onSort ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
5522
|
+
Button,
|
|
5523
|
+
{
|
|
5524
|
+
variant: "ghost",
|
|
5525
|
+
size: "sm",
|
|
5526
|
+
className: "h-auto p-0 text-sm font-medium hover:bg-transparent",
|
|
5527
|
+
onClick: () => handleSort(column.key),
|
|
5528
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
|
|
5529
|
+
column.title,
|
|
5530
|
+
renderSortIcon(column)
|
|
5531
|
+
] })
|
|
5532
|
+
}
|
|
5533
|
+
) : column.title
|
|
5534
|
+
},
|
|
5535
|
+
column.key
|
|
5536
|
+
)) }) }),
|
|
5537
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: data.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: columns2.length, className: "h-24 text-center text-muted-foreground", children: emptyMessage }) }) : data.map((row, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5538
|
+
"tr",
|
|
4887
5539
|
{
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
5540
|
+
className: cn(
|
|
5541
|
+
"border-b transition-colors hover:bg-muted/50",
|
|
5542
|
+
onRowClick && "cursor-pointer"
|
|
5543
|
+
),
|
|
5544
|
+
onClick: () => onRowClick?.(row),
|
|
5545
|
+
children: columns2.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5546
|
+
"td",
|
|
5547
|
+
{
|
|
5548
|
+
className: cn(
|
|
5549
|
+
"px-3 py-2 align-middle text-sm",
|
|
5550
|
+
column.align === "center" && "text-center",
|
|
5551
|
+
column.align === "right" && "text-right"
|
|
4900
5552
|
),
|
|
4901
|
-
|
|
5553
|
+
children: renderCell(column, row)
|
|
5554
|
+
},
|
|
5555
|
+
column.key
|
|
5556
|
+
))
|
|
5557
|
+
},
|
|
5558
|
+
index
|
|
5559
|
+
)) })
|
|
5560
|
+
] }) }) });
|
|
5561
|
+
}
|
|
5562
|
+
var statementTypes = [
|
|
5563
|
+
{ value: "root", label: "Root" },
|
|
5564
|
+
{ value: "program", label: "Program" },
|
|
5565
|
+
{ value: "product", label: "Product" },
|
|
5566
|
+
{ value: "account", label: "Account" }
|
|
5567
|
+
];
|
|
5568
|
+
var columns = [
|
|
5569
|
+
{
|
|
5570
|
+
key: "transactionType",
|
|
5571
|
+
title: "Transaction Type",
|
|
5572
|
+
sortable: true,
|
|
5573
|
+
align: "left"
|
|
5574
|
+
},
|
|
5575
|
+
{
|
|
5576
|
+
key: "direction",
|
|
5577
|
+
title: "Direction",
|
|
5578
|
+
sortable: true,
|
|
5579
|
+
align: "left",
|
|
5580
|
+
render: (value) => /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: value === "CREDIT" ? "success" : "secondary", children: value })
|
|
5581
|
+
},
|
|
5582
|
+
{
|
|
5583
|
+
key: "amount",
|
|
5584
|
+
title: "Amount",
|
|
5585
|
+
sortable: true,
|
|
5586
|
+
align: "right",
|
|
5587
|
+
render: (value) => `$${value.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
|
|
5588
|
+
},
|
|
5589
|
+
{
|
|
5590
|
+
key: "count",
|
|
5591
|
+
title: "Count",
|
|
5592
|
+
sortable: true,
|
|
5593
|
+
align: "right"
|
|
5594
|
+
}
|
|
5595
|
+
];
|
|
5596
|
+
var StatementView = ({
|
|
5597
|
+
statementType,
|
|
5598
|
+
selectedProgram,
|
|
5599
|
+
selectedProduct,
|
|
5600
|
+
accountNumber,
|
|
5601
|
+
startDate,
|
|
5602
|
+
endDate,
|
|
5603
|
+
statementGenerated,
|
|
5604
|
+
programs,
|
|
5605
|
+
products,
|
|
5606
|
+
statementHeader,
|
|
5607
|
+
statementTransactions,
|
|
5608
|
+
onStatementTypeChange,
|
|
5609
|
+
onProgramChange,
|
|
5610
|
+
onProductChange,
|
|
5611
|
+
onAccountNumberChange,
|
|
5612
|
+
onStartDateChange,
|
|
5613
|
+
onEndDateChange,
|
|
5614
|
+
onGenerateStatement,
|
|
5615
|
+
onEdit,
|
|
5616
|
+
onDownloadCSV,
|
|
5617
|
+
onPrintPDF,
|
|
5618
|
+
isGenerateDisabled,
|
|
5619
|
+
isLoading
|
|
5620
|
+
}) => {
|
|
5621
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "container mx-auto p-6 space-y-6", children: [
|
|
5622
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
5623
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold tracking-tight", children: "Statement" }),
|
|
5624
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1", children: "Generate and view statement reports" })
|
|
5625
|
+
] }),
|
|
5626
|
+
!statementGenerated && /* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
5627
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { size: "md", children: "Statement Parameters" }) }),
|
|
5628
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-4", children: [
|
|
5629
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4", children: [
|
|
5630
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5631
|
+
EnhancedSelect,
|
|
5632
|
+
{
|
|
5633
|
+
label: "Statement Type",
|
|
5634
|
+
placeholder: "Select type",
|
|
5635
|
+
options: statementTypes,
|
|
5636
|
+
value: statementType,
|
|
5637
|
+
onValueChange: onStatementTypeChange
|
|
5638
|
+
}
|
|
5639
|
+
),
|
|
5640
|
+
statementType === "program" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5641
|
+
EnhancedSelect,
|
|
5642
|
+
{
|
|
5643
|
+
label: "Program Name",
|
|
5644
|
+
placeholder: "Select program",
|
|
5645
|
+
options: programs,
|
|
5646
|
+
value: selectedProgram,
|
|
5647
|
+
onValueChange: onProgramChange
|
|
5648
|
+
}
|
|
5649
|
+
),
|
|
5650
|
+
statementType === "product" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5651
|
+
EnhancedSelect,
|
|
5652
|
+
{
|
|
5653
|
+
label: "Product Name",
|
|
5654
|
+
placeholder: "Select product",
|
|
5655
|
+
options: products,
|
|
5656
|
+
value: selectedProduct,
|
|
5657
|
+
onValueChange: onProductChange
|
|
5658
|
+
}
|
|
5659
|
+
),
|
|
5660
|
+
statementType === "account" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5661
|
+
EnhancedInput,
|
|
5662
|
+
{
|
|
5663
|
+
label: "Account Number",
|
|
5664
|
+
placeholder: "Enter account number",
|
|
5665
|
+
value: accountNumber,
|
|
5666
|
+
onChange: (e) => onAccountNumberChange(e.target.value)
|
|
5667
|
+
}
|
|
5668
|
+
),
|
|
5669
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
5670
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: "Start Date" }),
|
|
5671
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
5672
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5673
|
+
Button,
|
|
5674
|
+
{
|
|
5675
|
+
variant: "outline",
|
|
5676
|
+
className: cn(
|
|
5677
|
+
"justify-start text-left font-normal",
|
|
5678
|
+
!startDate && "text-muted-foreground"
|
|
5679
|
+
),
|
|
5680
|
+
children: [
|
|
5681
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "mr-2 h-4 w-4" }),
|
|
5682
|
+
startDate ? dateFns.format(startDate, "MM/dd/yyyy") : "Select date"
|
|
5683
|
+
]
|
|
5684
|
+
}
|
|
5685
|
+
) }),
|
|
5686
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5687
|
+
Calendar,
|
|
5688
|
+
{
|
|
5689
|
+
mode: "single",
|
|
5690
|
+
selected: startDate,
|
|
5691
|
+
onSelect: onStartDateChange,
|
|
5692
|
+
initialFocus: true
|
|
5693
|
+
}
|
|
5694
|
+
) })
|
|
5695
|
+
] })
|
|
4902
5696
|
] }),
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
5697
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
5698
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: "End Date" }),
|
|
5699
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
5700
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5701
|
+
Button,
|
|
4908
5702
|
{
|
|
4909
|
-
|
|
4910
|
-
className:
|
|
5703
|
+
variant: "outline",
|
|
5704
|
+
className: cn(
|
|
5705
|
+
"justify-start text-left font-normal",
|
|
5706
|
+
!endDate && "text-muted-foreground"
|
|
5707
|
+
),
|
|
4911
5708
|
children: [
|
|
4912
|
-
|
|
4913
|
-
|
|
5709
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "mr-2 h-4 w-4" }),
|
|
5710
|
+
endDate ? dateFns.format(endDate, "MM/dd/yyyy") : "Select date"
|
|
4914
5711
|
]
|
|
4915
5712
|
}
|
|
4916
|
-
)
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
|
|
4920
|
-
|
|
4921
|
-
|
|
4922
|
-
|
|
4923
|
-
|
|
4924
|
-
|
|
4925
|
-
|
|
4926
|
-
|
|
4927
|
-
|
|
4928
|
-
);
|
|
4929
|
-
}
|
|
4930
|
-
);
|
|
4931
|
-
Breadcrumb.displayName = "Breadcrumb";
|
|
4932
|
-
var ListPage = React13__namespace.forwardRef(
|
|
4933
|
-
({
|
|
4934
|
-
title,
|
|
4935
|
-
description,
|
|
4936
|
-
breadcrumbs,
|
|
4937
|
-
actions,
|
|
4938
|
-
children,
|
|
4939
|
-
maxWidth = "xl",
|
|
4940
|
-
loading = false,
|
|
4941
|
-
emptyState,
|
|
4942
|
-
className
|
|
4943
|
-
}, ref) => {
|
|
4944
|
-
const hasData = React13__namespace.Children.count(children) > 0;
|
|
4945
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("min-h-screen bg-gradient-subtle", className), children: /* @__PURE__ */ jsxRuntime.jsx(Container, { size: maxWidth, children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: "lg", children: [
|
|
4946
|
-
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { items: breadcrumbs }),
|
|
4947
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
|
|
4948
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: "sm", children: [
|
|
4949
|
-
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-foreground", children: title }),
|
|
4950
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground max-w-2xl", children: description })
|
|
5713
|
+
) }),
|
|
5714
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5715
|
+
Calendar,
|
|
5716
|
+
{
|
|
5717
|
+
mode: "single",
|
|
5718
|
+
selected: endDate,
|
|
5719
|
+
onSelect: onEndDateChange,
|
|
5720
|
+
initialFocus: true
|
|
5721
|
+
}
|
|
5722
|
+
) })
|
|
5723
|
+
] })
|
|
5724
|
+
] })
|
|
4951
5725
|
] }),
|
|
4952
|
-
|
|
5726
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4953
5727
|
Button,
|
|
4954
5728
|
{
|
|
4955
|
-
|
|
4956
|
-
|
|
5729
|
+
onClick: onGenerateStatement,
|
|
5730
|
+
disabled: isGenerateDisabled || isLoading,
|
|
4957
5731
|
children: [
|
|
4958
|
-
|
|
4959
|
-
|
|
5732
|
+
isLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
5733
|
+
isLoading ? "Generating..." : "Generate Statement"
|
|
4960
5734
|
]
|
|
4961
|
-
}
|
|
4962
|
-
|
|
4963
|
-
)) })
|
|
4964
|
-
] }),
|
|
4965
|
-
loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse text-muted-foreground", children: "Loading..." }) }) : hasData ? /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGrid, { type: "cards", gap: "lg", children }) : emptyState ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: emptyState }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: "No items found" }) }) })
|
|
4966
|
-
] }) }) });
|
|
4967
|
-
}
|
|
4968
|
-
);
|
|
4969
|
-
ListPage.displayName = "ListPage";
|
|
4970
|
-
var StatementHeader = ({ data, onEdit }) => {
|
|
4971
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
4972
|
-
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { direction: "row", children: [
|
|
4973
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { size: "md", children: "Statement Summary" }),
|
|
4974
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", size: "sm", onClick: onEdit, children: [
|
|
4975
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit, { className: "h-4 w-4 mr-2" }),
|
|
4976
|
-
"Edit"
|
|
5735
|
+
}
|
|
5736
|
+
) })
|
|
4977
5737
|
] })
|
|
4978
5738
|
] }),
|
|
4979
|
-
|
|
4980
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4981
|
-
|
|
4982
|
-
{
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
}
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
}
|
|
5003
|
-
)
|
|
5004
|
-
|
|
5005
|
-
InfoField,
|
|
5006
|
-
{
|
|
5007
|
-
label: "Start Date",
|
|
5008
|
-
value: data.startDate,
|
|
5009
|
-
layout: "horizontal"
|
|
5010
|
-
}
|
|
5011
|
-
),
|
|
5012
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5013
|
-
InfoField,
|
|
5014
|
-
{
|
|
5015
|
-
label: "End Date",
|
|
5016
|
-
value: data.endDate,
|
|
5017
|
-
layout: "horizontal"
|
|
5018
|
-
}
|
|
5019
|
-
),
|
|
5020
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5021
|
-
InfoField,
|
|
5022
|
-
{
|
|
5023
|
-
label: "Starting Balance",
|
|
5024
|
-
value: data.startingBalance,
|
|
5025
|
-
layout: "horizontal"
|
|
5026
|
-
}
|
|
5027
|
-
),
|
|
5028
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5029
|
-
InfoField,
|
|
5030
|
-
{
|
|
5031
|
-
label: "Ending Balance",
|
|
5032
|
-
value: data.endingBalance,
|
|
5033
|
-
layout: "horizontal"
|
|
5034
|
-
}
|
|
5035
|
-
)
|
|
5036
|
-
] }) })
|
|
5739
|
+
statementGenerated && statementHeader && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5740
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatementHeader, { data: statementHeader, onEdit }),
|
|
5741
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
5742
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { direction: "row", children: [
|
|
5743
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { size: "md", children: "Transaction Summary" }),
|
|
5744
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5745
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", onClick: onDownloadCSV, children: [
|
|
5746
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "h-4 w-4 mr-2" }),
|
|
5747
|
+
"Download CSV"
|
|
5748
|
+
] }),
|
|
5749
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", onClick: onPrintPDF, children: [
|
|
5750
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-4 w-4 mr-2" }),
|
|
5751
|
+
"Print PDF"
|
|
5752
|
+
] })
|
|
5753
|
+
] })
|
|
5754
|
+
] }),
|
|
5755
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5756
|
+
DataTable,
|
|
5757
|
+
{
|
|
5758
|
+
columns,
|
|
5759
|
+
data: statementTransactions,
|
|
5760
|
+
emptyMessage: "No transactions found"
|
|
5761
|
+
}
|
|
5762
|
+
) })
|
|
5763
|
+
] })
|
|
5764
|
+
] })
|
|
5037
5765
|
] });
|
|
5038
5766
|
};
|
|
5039
5767
|
var ACHDetailsSection = ({ data }) => {
|
|
@@ -5168,7 +5896,7 @@ var typeLabels = {
|
|
|
5168
5896
|
credit: "Credit",
|
|
5169
5897
|
investment: "Investment"
|
|
5170
5898
|
};
|
|
5171
|
-
var AccountCard =
|
|
5899
|
+
var AccountCard = React15__namespace.forwardRef(
|
|
5172
5900
|
({ account, showBalance = true, className }, ref) => {
|
|
5173
5901
|
const TypeIcon = typeIcons[account.type];
|
|
5174
5902
|
const accountData = [
|
|
@@ -5230,136 +5958,25 @@ var BusinessTypeBadge = ({ type, className }) => {
|
|
|
5230
5958
|
config.label
|
|
5231
5959
|
] });
|
|
5232
5960
|
};
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5244
|
-
classNames: {
|
|
5245
|
-
months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
|
|
5246
|
-
month: "space-y-4",
|
|
5247
|
-
caption: "flex justify-center pt-1 relative items-center",
|
|
5248
|
-
caption_label: "text-sm font-medium",
|
|
5249
|
-
nav: "space-x-1 flex items-center",
|
|
5250
|
-
button_previous: "absolute left-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
5251
|
-
button_next: "absolute right-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
|
5252
|
-
month_grid: "w-full border-collapse space-y-1",
|
|
5253
|
-
weekdays: "flex",
|
|
5254
|
-
weekday: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
|
|
5255
|
-
week: "flex w-full mt-2",
|
|
5256
|
-
day: "h-9 w-9 text-center text-sm p-0 relative hover:bg-accent hover:text-accent-foreground rounded-md",
|
|
5257
|
-
day_button: cn(
|
|
5258
|
-
buttonVariants({ variant: "ghost" }),
|
|
5259
|
-
"h-9 w-9 p-0 font-normal"
|
|
5260
|
-
),
|
|
5261
|
-
selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground",
|
|
5262
|
-
today: "bg-accent text-accent-foreground",
|
|
5263
|
-
outside: "text-muted-foreground opacity-50",
|
|
5264
|
-
disabled: "text-muted-foreground opacity-50",
|
|
5265
|
-
hidden: "invisible",
|
|
5266
|
-
...classNames
|
|
5267
|
-
},
|
|
5268
|
-
...props
|
|
5269
|
-
}
|
|
5270
|
-
);
|
|
5271
|
-
}
|
|
5272
|
-
Calendar.displayName = "Calendar";
|
|
5273
|
-
function DataTable({
|
|
5274
|
-
columns,
|
|
5275
|
-
data,
|
|
5276
|
-
sortBy,
|
|
5277
|
-
sortDirection,
|
|
5278
|
-
onSort,
|
|
5279
|
-
onRowClick,
|
|
5280
|
-
loading = false,
|
|
5281
|
-
emptyMessage = "No data available",
|
|
5282
|
-
className
|
|
5283
|
-
}) {
|
|
5284
|
-
const handleSort = (key) => {
|
|
5285
|
-
if (onSort) {
|
|
5286
|
-
onSort(key);
|
|
5287
|
-
}
|
|
5288
|
-
};
|
|
5289
|
-
const renderSortIcon = (column) => {
|
|
5290
|
-
if (!column.sortable || !onSort) return null;
|
|
5291
|
-
if (sortBy === column.key) {
|
|
5292
|
-
return sortDirection === "asc" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "w-4 h-4 ml-1" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "w-4 h-4 ml-1" });
|
|
5293
|
-
}
|
|
5294
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: "w-4 h-4 ml-1 opacity-50" });
|
|
5295
|
-
};
|
|
5296
|
-
const renderCell = (column, row) => {
|
|
5297
|
-
const value = row[column.key];
|
|
5298
|
-
if (column.render) {
|
|
5299
|
-
return column.render(value, row);
|
|
5300
|
-
}
|
|
5301
|
-
if (typeof value === "boolean") {
|
|
5302
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: value ? "success" : "secondary", children: value ? "Yes" : "No" });
|
|
5303
|
-
}
|
|
5304
|
-
if (Array.isArray(value)) {
|
|
5305
|
-
return value.join(", ");
|
|
5306
|
-
}
|
|
5307
|
-
return value?.toString() || "-";
|
|
5308
|
-
};
|
|
5309
|
-
if (loading) {
|
|
5310
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("rounded-md border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse text-muted-foreground", children: "Loading..." }) }) });
|
|
5311
|
-
}
|
|
5312
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("rounded-md border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
5313
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "border-b bg-muted/50", children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5314
|
-
"th",
|
|
5315
|
-
{
|
|
5316
|
-
className: cn(
|
|
5317
|
-
"px-3 py-2 text-left align-middle text-sm font-medium bg-muted/50",
|
|
5318
|
-
column.align === "center" && "text-center",
|
|
5319
|
-
column.align === "right" && "text-right",
|
|
5320
|
-
column.width && `w-[${column.width}]`
|
|
5321
|
-
),
|
|
5322
|
-
children: column.sortable && onSort ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
5323
|
-
Button,
|
|
5324
|
-
{
|
|
5325
|
-
variant: "ghost",
|
|
5326
|
-
size: "sm",
|
|
5327
|
-
className: "h-auto p-0 text-sm font-medium hover:bg-transparent",
|
|
5328
|
-
onClick: () => handleSort(column.key),
|
|
5329
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
|
|
5330
|
-
column.title,
|
|
5331
|
-
renderSortIcon(column)
|
|
5332
|
-
] })
|
|
5333
|
-
}
|
|
5334
|
-
) : column.title
|
|
5335
|
-
},
|
|
5336
|
-
column.key
|
|
5337
|
-
)) }) }),
|
|
5338
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: data.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: columns.length, className: "h-24 text-center text-muted-foreground", children: emptyMessage }) }) : data.map((row, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5339
|
-
"tr",
|
|
5961
|
+
var Checkbox = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5962
|
+
CheckboxPrimitive__namespace.Root,
|
|
5963
|
+
{
|
|
5964
|
+
ref,
|
|
5965
|
+
className: cn(
|
|
5966
|
+
"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
|
|
5967
|
+
className
|
|
5968
|
+
),
|
|
5969
|
+
...props,
|
|
5970
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5971
|
+
CheckboxPrimitive__namespace.Indicator,
|
|
5340
5972
|
{
|
|
5341
|
-
className: cn(
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5347
|
-
|
|
5348
|
-
{
|
|
5349
|
-
className: cn(
|
|
5350
|
-
"px-3 py-2 align-middle text-sm",
|
|
5351
|
-
column.align === "center" && "text-center",
|
|
5352
|
-
column.align === "right" && "text-right"
|
|
5353
|
-
),
|
|
5354
|
-
children: renderCell(column, row)
|
|
5355
|
-
},
|
|
5356
|
-
column.key
|
|
5357
|
-
))
|
|
5358
|
-
},
|
|
5359
|
-
index
|
|
5360
|
-
)) })
|
|
5361
|
-
] }) }) });
|
|
5362
|
-
}
|
|
5973
|
+
className: cn("flex items-center justify-center text-current"),
|
|
5974
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" })
|
|
5975
|
+
}
|
|
5976
|
+
)
|
|
5977
|
+
}
|
|
5978
|
+
));
|
|
5979
|
+
Checkbox.displayName = CheckboxPrimitive__namespace.Root.displayName;
|
|
5363
5980
|
var maxWidthClasses = {
|
|
5364
5981
|
sm: "max-w-2xl",
|
|
5365
5982
|
md: "max-w-4xl",
|
|
@@ -5391,7 +6008,7 @@ var getGridClasses = (gridCols, responsive) => {
|
|
|
5391
6008
|
return "grid-cols-1 lg:grid-cols-2";
|
|
5392
6009
|
}
|
|
5393
6010
|
};
|
|
5394
|
-
var PageLayout =
|
|
6011
|
+
var PageLayout = React15__namespace.forwardRef(
|
|
5395
6012
|
({
|
|
5396
6013
|
title,
|
|
5397
6014
|
description,
|
|
@@ -5402,9 +6019,10 @@ var PageLayout = React13__namespace.forwardRef(
|
|
|
5402
6019
|
maxWidth = "xl",
|
|
5403
6020
|
gridCols = 2,
|
|
5404
6021
|
responsive = true,
|
|
5405
|
-
className
|
|
6022
|
+
className,
|
|
6023
|
+
headerContent
|
|
5406
6024
|
}, ref) => {
|
|
5407
|
-
const [editingCards, setEditingCards] =
|
|
6025
|
+
const [editingCards, setEditingCards] = React15__namespace.useState(/* @__PURE__ */ new Set());
|
|
5408
6026
|
const toggleEdit = (cardKey) => {
|
|
5409
6027
|
setEditingCards((prev) => {
|
|
5410
6028
|
const next = new Set(prev);
|
|
@@ -5421,11 +6039,12 @@ var PageLayout = React13__namespace.forwardRef(
|
|
|
5421
6039
|
"sticky top-0 z-10 bg-gradient-subtle border-b border-border/40",
|
|
5422
6040
|
"container mx-auto px-4 pt-8 pb-4",
|
|
5423
6041
|
maxWidthClasses[maxWidth]
|
|
5424
|
-
), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
|
|
5425
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
6042
|
+
), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
|
|
6043
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
5426
6044
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-foreground mb-2", children: title }),
|
|
5427
6045
|
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: description })
|
|
5428
6046
|
] }),
|
|
6047
|
+
headerContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: headerContent }),
|
|
5429
6048
|
actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: actions.map((action, index) => {
|
|
5430
6049
|
const Icon2 = action.icon;
|
|
5431
6050
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -5488,7 +6107,7 @@ var DetailPageLayout = ({
|
|
|
5488
6107
|
actions,
|
|
5489
6108
|
initialEditingState = {}
|
|
5490
6109
|
}) => {
|
|
5491
|
-
const [editingCards, setEditingCards] =
|
|
6110
|
+
const [editingCards, setEditingCards] = React15.useState(
|
|
5492
6111
|
initialEditingState
|
|
5493
6112
|
);
|
|
5494
6113
|
const toggleEdit = (cardKey) => {
|
|
@@ -5532,7 +6151,7 @@ var DetailPageLayout = ({
|
|
|
5532
6151
|
};
|
|
5533
6152
|
var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
|
|
5534
6153
|
var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
|
|
5535
|
-
var DropdownMenuContent =
|
|
6154
|
+
var DropdownMenuContent = React15__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5536
6155
|
DropdownMenuPrimitive__namespace.Content,
|
|
5537
6156
|
{
|
|
5538
6157
|
ref,
|
|
@@ -5545,7 +6164,7 @@ var DropdownMenuContent = React13__namespace.forwardRef(({ className, sideOffset
|
|
|
5545
6164
|
}
|
|
5546
6165
|
) }));
|
|
5547
6166
|
DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
|
|
5548
|
-
var DropdownMenuItem =
|
|
6167
|
+
var DropdownMenuItem = React15__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5549
6168
|
DropdownMenuPrimitive__namespace.Item,
|
|
5550
6169
|
{
|
|
5551
6170
|
ref,
|
|
@@ -5558,7 +6177,7 @@ var DropdownMenuItem = React13__namespace.forwardRef(({ className, inset, ...pro
|
|
|
5558
6177
|
}
|
|
5559
6178
|
));
|
|
5560
6179
|
DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
|
|
5561
|
-
var DropdownMenuLabel =
|
|
6180
|
+
var DropdownMenuLabel = React15__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5562
6181
|
DropdownMenuPrimitive__namespace.Label,
|
|
5563
6182
|
{
|
|
5564
6183
|
ref,
|
|
@@ -5571,7 +6190,7 @@ var DropdownMenuLabel = React13__namespace.forwardRef(({ className, inset, ...pr
|
|
|
5571
6190
|
}
|
|
5572
6191
|
));
|
|
5573
6192
|
DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
|
|
5574
|
-
var DropdownMenuSeparator =
|
|
6193
|
+
var DropdownMenuSeparator = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5575
6194
|
DropdownMenuPrimitive__namespace.Separator,
|
|
5576
6195
|
{
|
|
5577
6196
|
ref,
|
|
@@ -5580,7 +6199,51 @@ var DropdownMenuSeparator = React13__namespace.forwardRef(({ className, ...props
|
|
|
5580
6199
|
}
|
|
5581
6200
|
));
|
|
5582
6201
|
DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
|
|
5583
|
-
var
|
|
6202
|
+
var EditableInfoField = ({
|
|
6203
|
+
label,
|
|
6204
|
+
value,
|
|
6205
|
+
options,
|
|
6206
|
+
onChange,
|
|
6207
|
+
placeholder = "Select...",
|
|
6208
|
+
renderValue,
|
|
6209
|
+
className
|
|
6210
|
+
}) => {
|
|
6211
|
+
const [isEditing, setIsEditing] = React15.useState(false);
|
|
6212
|
+
const handleChange = (newValue) => {
|
|
6213
|
+
onChange(newValue);
|
|
6214
|
+
setIsEditing(false);
|
|
6215
|
+
};
|
|
6216
|
+
if (isEditing) {
|
|
6217
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6218
|
+
EnhancedSelect,
|
|
6219
|
+
{
|
|
6220
|
+
label,
|
|
6221
|
+
value: value || "",
|
|
6222
|
+
onValueChange: handleChange,
|
|
6223
|
+
options,
|
|
6224
|
+
placeholder
|
|
6225
|
+
}
|
|
6226
|
+
) });
|
|
6227
|
+
}
|
|
6228
|
+
const displayValue = value ? renderValue ? renderValue(value) : value : placeholder;
|
|
6229
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6230
|
+
"div",
|
|
6231
|
+
{
|
|
6232
|
+
className: cn("cursor-pointer transition-colors hover:bg-muted/50 rounded-md -mx-2 px-2 -my-1 py-1", className),
|
|
6233
|
+
onClick: () => setIsEditing(true),
|
|
6234
|
+
role: "button",
|
|
6235
|
+
tabIndex: 0,
|
|
6236
|
+
onKeyDown: (e) => {
|
|
6237
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
6238
|
+
e.preventDefault();
|
|
6239
|
+
setIsEditing(true);
|
|
6240
|
+
}
|
|
6241
|
+
},
|
|
6242
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(InfoField, { label, value: displayValue })
|
|
6243
|
+
}
|
|
6244
|
+
);
|
|
6245
|
+
};
|
|
6246
|
+
var EntityCard = React15__namespace.forwardRef(
|
|
5584
6247
|
({
|
|
5585
6248
|
entity,
|
|
5586
6249
|
actions,
|
|
@@ -5626,7 +6289,7 @@ var EntityCard = React13__namespace.forwardRef(
|
|
|
5626
6289
|
] }),
|
|
5627
6290
|
allActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu, { children: [
|
|
5628
6291
|
/* @__PURE__ */ jsxRuntime.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreVertical, { className: "w-4 h-4" }) }) }),
|
|
5629
|
-
/* @__PURE__ */ jsxRuntime.jsx(DropdownMenuContent, { align: "end", children: allActions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6292
|
+
/* @__PURE__ */ jsxRuntime.jsx(DropdownMenuContent, { align: "end", children: allActions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsxs(React15__namespace.Fragment, { children: [
|
|
5630
6293
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5631
6294
|
DropdownMenuItem,
|
|
5632
6295
|
{
|
|
@@ -5652,7 +6315,7 @@ var EntityCard = React13__namespace.forwardRef(
|
|
|
5652
6315
|
}
|
|
5653
6316
|
);
|
|
5654
6317
|
EntityCard.displayName = "EntityCard";
|
|
5655
|
-
var FormField =
|
|
6318
|
+
var FormField = React15__namespace.forwardRef(
|
|
5656
6319
|
({ label, description, error, required, children, className, layout = "vertical" }, ref) => {
|
|
5657
6320
|
const isHorizontal = layout === "horizontal";
|
|
5658
6321
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -5698,7 +6361,7 @@ var trendColors = {
|
|
|
5698
6361
|
down: "destructive",
|
|
5699
6362
|
neutral: "secondary"
|
|
5700
6363
|
};
|
|
5701
|
-
var MetricCard =
|
|
6364
|
+
var MetricCard = React15__namespace.forwardRef(
|
|
5702
6365
|
({ title, value, description, trend, icon, variant = "default", className }, ref) => {
|
|
5703
6366
|
const TrendIcon = trend ? trendIcons[trend.direction] : null;
|
|
5704
6367
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -5730,22 +6393,6 @@ var MetricCard = React13__namespace.forwardRef(
|
|
|
5730
6393
|
}
|
|
5731
6394
|
);
|
|
5732
6395
|
MetricCard.displayName = "MetricCard";
|
|
5733
|
-
var Popover = PopoverPrimitive__namespace.Root;
|
|
5734
|
-
var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
|
|
5735
|
-
var PopoverContent = React13__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5736
|
-
PopoverPrimitive__namespace.Content,
|
|
5737
|
-
{
|
|
5738
|
-
ref,
|
|
5739
|
-
align,
|
|
5740
|
-
sideOffset,
|
|
5741
|
-
className: cn(
|
|
5742
|
-
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
5743
|
-
className
|
|
5744
|
-
),
|
|
5745
|
-
...props
|
|
5746
|
-
}
|
|
5747
|
-
) }));
|
|
5748
|
-
PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
|
|
5749
6396
|
var Toaster = ({ ...props }) => {
|
|
5750
6397
|
const { theme = "system" } = nextThemes.useTheme();
|
|
5751
6398
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5766,7 +6413,7 @@ var Toaster = ({ ...props }) => {
|
|
|
5766
6413
|
);
|
|
5767
6414
|
};
|
|
5768
6415
|
var Tabs = TabsPrimitive__namespace.Root;
|
|
5769
|
-
var TabsList =
|
|
6416
|
+
var TabsList = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5770
6417
|
TabsPrimitive__namespace.List,
|
|
5771
6418
|
{
|
|
5772
6419
|
ref,
|
|
@@ -5778,7 +6425,7 @@ var TabsList = React13__namespace.forwardRef(({ className, ...props }, ref) => /
|
|
|
5778
6425
|
}
|
|
5779
6426
|
));
|
|
5780
6427
|
TabsList.displayName = TabsPrimitive__namespace.List.displayName;
|
|
5781
|
-
var TabsTrigger =
|
|
6428
|
+
var TabsTrigger = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5782
6429
|
TabsPrimitive__namespace.Trigger,
|
|
5783
6430
|
{
|
|
5784
6431
|
ref,
|
|
@@ -5790,7 +6437,7 @@ var TabsTrigger = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
5790
6437
|
}
|
|
5791
6438
|
));
|
|
5792
6439
|
TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
|
|
5793
|
-
var TabsContent =
|
|
6440
|
+
var TabsContent = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5794
6441
|
TabsPrimitive__namespace.Content,
|
|
5795
6442
|
{
|
|
5796
6443
|
ref,
|
|
@@ -5803,7 +6450,7 @@ var TabsContent = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
5803
6450
|
));
|
|
5804
6451
|
TabsContent.displayName = TabsPrimitive__namespace.Content.displayName;
|
|
5805
6452
|
var ToastProvider = ToastPrimitives__namespace.Provider;
|
|
5806
|
-
var ToastViewport =
|
|
6453
|
+
var ToastViewport = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5807
6454
|
ToastPrimitives__namespace.Viewport,
|
|
5808
6455
|
{
|
|
5809
6456
|
ref,
|
|
@@ -5829,7 +6476,7 @@ var toastVariants = classVarianceAuthority.cva(
|
|
|
5829
6476
|
}
|
|
5830
6477
|
}
|
|
5831
6478
|
);
|
|
5832
|
-
var Toast =
|
|
6479
|
+
var Toast = React15__namespace.forwardRef(({ className, variant, ...props }, ref) => {
|
|
5833
6480
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5834
6481
|
ToastPrimitives__namespace.Root,
|
|
5835
6482
|
{
|
|
@@ -5840,7 +6487,7 @@ var Toast = React13__namespace.forwardRef(({ className, variant, ...props }, ref
|
|
|
5840
6487
|
);
|
|
5841
6488
|
});
|
|
5842
6489
|
Toast.displayName = ToastPrimitives__namespace.Root.displayName;
|
|
5843
|
-
var ToastAction =
|
|
6490
|
+
var ToastAction = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5844
6491
|
ToastPrimitives__namespace.Action,
|
|
5845
6492
|
{
|
|
5846
6493
|
ref,
|
|
@@ -5852,7 +6499,7 @@ var ToastAction = React13__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
5852
6499
|
}
|
|
5853
6500
|
));
|
|
5854
6501
|
ToastAction.displayName = ToastPrimitives__namespace.Action.displayName;
|
|
5855
|
-
var ToastClose =
|
|
6502
|
+
var ToastClose = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5856
6503
|
ToastPrimitives__namespace.Close,
|
|
5857
6504
|
{
|
|
5858
6505
|
ref,
|
|
@@ -5866,7 +6513,7 @@ var ToastClose = React13__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
5866
6513
|
}
|
|
5867
6514
|
));
|
|
5868
6515
|
ToastClose.displayName = ToastPrimitives__namespace.Close.displayName;
|
|
5869
|
-
var ToastTitle =
|
|
6516
|
+
var ToastTitle = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5870
6517
|
ToastPrimitives__namespace.Title,
|
|
5871
6518
|
{
|
|
5872
6519
|
ref,
|
|
@@ -5875,7 +6522,7 @@ var ToastTitle = React13__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
5875
6522
|
}
|
|
5876
6523
|
));
|
|
5877
6524
|
ToastTitle.displayName = ToastPrimitives__namespace.Title.displayName;
|
|
5878
|
-
var ToastDescription =
|
|
6525
|
+
var ToastDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5879
6526
|
ToastPrimitives__namespace.Description,
|
|
5880
6527
|
{
|
|
5881
6528
|
ref,
|
|
@@ -5884,6 +6531,19 @@ var ToastDescription = React13__namespace.forwardRef(({ className, ...props }, r
|
|
|
5884
6531
|
}
|
|
5885
6532
|
));
|
|
5886
6533
|
ToastDescription.displayName = ToastPrimitives__namespace.Description.displayName;
|
|
6534
|
+
var TransactionTypeBadge = ({
|
|
6535
|
+
transactionType,
|
|
6536
|
+
isInbound,
|
|
6537
|
+
className
|
|
6538
|
+
}) => {
|
|
6539
|
+
const Icon2 = isInbound ? lucideReact.ArrowDownRight : lucideReact.ArrowUpRight;
|
|
6540
|
+
const variant = "outline";
|
|
6541
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { variant, className, children: [
|
|
6542
|
+
isInbound && /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "w-3 h-3 mr-1" }),
|
|
6543
|
+
transactionType,
|
|
6544
|
+
!isInbound && /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "w-3 h-3 ml-1" })
|
|
6545
|
+
] });
|
|
6546
|
+
};
|
|
5887
6547
|
var mockCounterparties = [
|
|
5888
6548
|
{
|
|
5889
6549
|
id: "1",
|
|
@@ -6098,8 +6758,8 @@ var transactionColumns = [
|
|
|
6098
6758
|
{ key: "date", title: "Date", sortable: true }
|
|
6099
6759
|
];
|
|
6100
6760
|
function DashboardDemo() {
|
|
6101
|
-
const [sortBy, setSortBy] =
|
|
6102
|
-
const [sortDirection, setSortDirection] =
|
|
6761
|
+
const [sortBy, setSortBy] = React15__namespace.useState();
|
|
6762
|
+
const [sortDirection, setSortDirection] = React15__namespace.useState("asc");
|
|
6103
6763
|
const handleSort = (key) => {
|
|
6104
6764
|
if (sortBy === key) {
|
|
6105
6765
|
setSortDirection(sortDirection === "asc" ? "desc" : "asc");
|
|
@@ -6233,7 +6893,7 @@ var badgeVariants2 = [
|
|
|
6233
6893
|
"suspended"
|
|
6234
6894
|
];
|
|
6235
6895
|
function ColorSwatch({ color }) {
|
|
6236
|
-
const [copied, setCopied] =
|
|
6896
|
+
const [copied, setCopied] = React15__namespace.useState(false);
|
|
6237
6897
|
const copyToClipboard = () => {
|
|
6238
6898
|
navigator.clipboard.writeText(color.value);
|
|
6239
6899
|
setCopied(true);
|
|
@@ -6339,8 +6999,8 @@ var tableColumns = [
|
|
|
6339
6999
|
{ key: "verified", title: "Verified", sortable: true }
|
|
6340
7000
|
];
|
|
6341
7001
|
function UIKitShowcase() {
|
|
6342
|
-
const [sortBy, setSortBy] =
|
|
6343
|
-
const [sortDirection, setSortDirection] =
|
|
7002
|
+
const [sortBy, setSortBy] = React15__namespace.useState();
|
|
7003
|
+
const [sortDirection, setSortDirection] = React15__namespace.useState("asc");
|
|
6344
7004
|
const handleSort = (key) => {
|
|
6345
7005
|
if (sortBy === key) {
|
|
6346
7006
|
setSortDirection(sortDirection === "asc" ? "desc" : "asc");
|
|
@@ -6477,10 +7137,15 @@ var mockAlerts = [
|
|
|
6477
7137
|
type: "Ofac",
|
|
6478
7138
|
status: "Unassigned",
|
|
6479
7139
|
contextType: "Ofac",
|
|
6480
|
-
description: "
|
|
7140
|
+
description: "WIRE TRANSFER: Multiple OFAC matches detected for beneficiary bank",
|
|
6481
7141
|
timeline: [
|
|
6482
7142
|
{ id: "1", timestamp: "2025-09-30 03:00:21", user: "System", action: "Alert Created", status: "Unassigned" },
|
|
6483
|
-
{ id: "2", timestamp: "2025-09-30 09:15:32", user: "John Smith", action: "Alert Assigned", details: "Assigned to compliance team", status: "In Progress" }
|
|
7143
|
+
{ id: "2", timestamp: "2025-09-30 09:15:32", user: "John Smith", action: "Alert Assigned", details: "Assigned to compliance team", status: "In Progress" },
|
|
7144
|
+
{ id: "3", timestamp: "2025-09-30 10:22:15", user: "John Smith", action: "Note added", details: "Added RFI note requesting documentation" },
|
|
7145
|
+
{ id: "4", timestamp: "2025-09-30 10:25:00", user: "John Smith", action: "Document added", details: "Uploaded passport_scan.pdf" },
|
|
7146
|
+
{ id: "5", timestamp: "2025-09-30 11:50:00", user: "Sarah Johnson", action: "Document added", details: "Uploaded proof_of_address.jpg" },
|
|
7147
|
+
{ id: "6", timestamp: "2025-10-01 08:30:00", user: "System", action: "RFI Status change", details: "Status changed from Pending to Provided" },
|
|
7148
|
+
{ id: "7", timestamp: "2025-10-01 14:20:00", user: "Michael Chen", action: "Alert Approved", details: "Approved after review - false positive confirmed" }
|
|
6484
7149
|
],
|
|
6485
7150
|
notes: [
|
|
6486
7151
|
{ id: "1", timestamp: "2025-09-30 10:22:15", user: "John Smith", content: "Reviewing OFAC match. Need to verify identity documents.", type: "RFI Note" },
|
|
@@ -6511,111 +7176,45 @@ var mockAlerts = [
|
|
|
6511
7176
|
}
|
|
6512
7177
|
],
|
|
6513
7178
|
contextData: {
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
7179
|
+
ofacId: 5043462,
|
|
7180
|
+
counterpartyName: null,
|
|
7181
|
+
counterpartyId: null,
|
|
7182
|
+
businessName: null,
|
|
7183
|
+
businessId: null,
|
|
7184
|
+
individualName: null,
|
|
7185
|
+
individualId: null,
|
|
7186
|
+
uboId: null,
|
|
7187
|
+
transactionPaymentId: "5c73200c-3ade-4ba5-b6e6-39ad4b519fab",
|
|
7188
|
+
tenantId: "JakeUAT",
|
|
7189
|
+
alertId: 4425,
|
|
7190
|
+
note: null,
|
|
7191
|
+
status: "REVIEW",
|
|
7192
|
+
createdAt: 1760162113,
|
|
7193
|
+
updatedAt: 176016211300416e-5,
|
|
7194
|
+
updatedBy: null,
|
|
7195
|
+
ofacCheckDetails: [
|
|
6523
7196
|
{
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
sdnType: "Individual",
|
|
6528
|
-
programs: ["SYRIA", "SDGT"],
|
|
6529
|
-
title: "Military Commander",
|
|
6530
|
-
remarks: "DOB 12 Mar 1985; POB Damascus, Syria; Passport D1234567 (Syria); alt. Passport E7654321 (Lebanon); Linked to Entity XYZ",
|
|
6531
|
-
nationalities: ["Syria", "Lebanon"],
|
|
6532
|
-
citizenships: ["Syria"],
|
|
6533
|
-
dateOfBirthList: [
|
|
6534
|
-
{ dateOfBirth: "1985-03-12", mainEntry: true },
|
|
6535
|
-
{ dateOfBirth: "1985-03-15", mainEntry: false }
|
|
6536
|
-
],
|
|
6537
|
-
placeOfBirthList: [
|
|
6538
|
-
{ placeOfBirth: "Damascus, Syria", mainEntry: true },
|
|
6539
|
-
{ placeOfBirth: "Aleppo, Syria", mainEntry: false }
|
|
6540
|
-
],
|
|
6541
|
-
akaList: [
|
|
6542
|
-
{ category: "strong", firstName: "Ali", lastName: "Al-Hassan" },
|
|
6543
|
-
{ category: "weak", firstName: "Ali", lastName: "Hasan" },
|
|
6544
|
-
{ category: "strong", firstName: "Ali Hassan", lastName: "Mohamed" }
|
|
6545
|
-
],
|
|
6546
|
-
idList: [
|
|
6547
|
-
{ idType: "Passport", idNumber: "D1234567", idCountry: "Syria", issueDate: "2010-01-15", expirationDate: "2020-01-15" },
|
|
6548
|
-
{ idType: "Passport", idNumber: "E7654321", idCountry: "Lebanon", issueDate: "2015-06-20", expirationDate: "2025-06-20" },
|
|
6549
|
-
{ idType: "National ID", idNumber: "SY123456789", idCountry: "Syria" }
|
|
6550
|
-
]
|
|
6551
|
-
}
|
|
6552
|
-
],
|
|
6553
|
-
addresses: [
|
|
6554
|
-
{
|
|
6555
|
-
uid: 67890,
|
|
6556
|
-
address1: "Building 42, Al-Mazzeh",
|
|
6557
|
-
city: "Damascus",
|
|
6558
|
-
stateOrProvince: "Damascus Governorate",
|
|
6559
|
-
postalCode: "12345",
|
|
6560
|
-
country: "Syria",
|
|
6561
|
-
addressRemarks: "Primary Residence"
|
|
7197
|
+
id: 24870,
|
|
7198
|
+
checkKey: "originatorName",
|
|
7199
|
+
checkValue: "Kim jung un"
|
|
6562
7200
|
},
|
|
6563
7201
|
{
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
country: "Lebanon",
|
|
6568
|
-
addressRemarks: "Secondary Address"
|
|
6569
|
-
},
|
|
6570
|
-
{
|
|
6571
|
-
uid: 67892,
|
|
6572
|
-
address1: "Office 203, Business District",
|
|
6573
|
-
city: "Aleppo",
|
|
6574
|
-
stateOrProvince: "Aleppo Governorate",
|
|
6575
|
-
country: "Syria",
|
|
6576
|
-
addressRemarks: "Business Address - Suspected Front Company"
|
|
6577
|
-
}
|
|
6578
|
-
],
|
|
6579
|
-
alt_names: [
|
|
6580
|
-
{ uid: 54321, type: "aka", category: "strong", firstName: "Ali", lastName: "Al-Hassan" },
|
|
6581
|
-
{ uid: 54322, type: "aka", category: "weak", firstName: "Ali", lastName: "Hasan" },
|
|
6582
|
-
{ uid: 54323, type: "aka", category: "strong", firstName: "Ali Hassan", lastName: "Mohamed" },
|
|
6583
|
-
{ uid: 54324, type: "fka", category: "weak", firstName: "Ali", lastName: "Hassani" }
|
|
6584
|
-
],
|
|
6585
|
-
sanctions_entries: [
|
|
6586
|
-
{
|
|
6587
|
-
program: "SYRIA",
|
|
6588
|
-
effectiveDate: "2015-03-15",
|
|
6589
|
-
authority: "Executive Order 13572",
|
|
6590
|
-
legalBasis: "Involvement in human rights abuses in Syria"
|
|
7202
|
+
id: 24871,
|
|
7203
|
+
checkKey: "originatorBankName",
|
|
7204
|
+
checkValue: "TD bank"
|
|
6591
7205
|
},
|
|
6592
7206
|
{
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
legalBasis: "Specially Designated Global Terrorist"
|
|
6597
|
-
}
|
|
6598
|
-
],
|
|
6599
|
-
associated_entities: [
|
|
6600
|
-
{
|
|
6601
|
-
entityName: "XYZ Trading Company",
|
|
6602
|
-
relationship: "Director",
|
|
6603
|
-
entityType: "Business"
|
|
7207
|
+
id: 24872,
|
|
7208
|
+
checkKey: "beneficiaryName",
|
|
7209
|
+
checkValue: "Jake from Braid LLC"
|
|
6604
7210
|
},
|
|
6605
7211
|
{
|
|
6606
|
-
|
|
6607
|
-
|
|
6608
|
-
|
|
7212
|
+
id: 24873,
|
|
7213
|
+
checkKey: "beneficiaryBankName",
|
|
7214
|
+
checkValue: "RUssian bank"
|
|
6609
7215
|
}
|
|
6610
7216
|
],
|
|
6611
|
-
screening_metadata: {
|
|
6612
|
-
screenedAt: "2025-09-30T03:00:21Z",
|
|
6613
|
-
screeningEngine: "OFAC Advanced Matcher v3.2",
|
|
6614
|
-
datasetVersion: "2025-09-25",
|
|
6615
|
-
totalRecordsScreened: 1,
|
|
6616
|
-
matchAlgorithm: "Fuzzy + Phonetic",
|
|
6617
|
-
confidenceThreshold: 0.85
|
|
6618
|
-
}
|
|
7217
|
+
rawResults: `{"SDNs":[{"entityID":"51656","sdnName":"RUSSIAN UNIVERSAL BANK","sdnType":"","program":["RUSSIA-EO14024"],"title":"","callSign":"","vesselType":"","tonnage":"","grossRegisteredTonnage":"","vesselFlag":"","vesselOwner":"","remarks":"SWIFT/BIC RUNIRUMM; Website www.rubank.ru; Secondary sanctions risk: See Section 11 of Executive Order 14024.; Target Type Financial Institution; Tax ID No. 7718120593 (Russia); Legal Entity Number 253400YYHA5GJQB46R62; Registration Number 1027739671288 (Russia).","match":0.9325,"matchedName":"russian universal bank"},{"entityID":"17755","sdnName":"RUSSIAN NATIONAL COMMERCIAL BANK","sdnType":"","program":["UKRAINE-EO13685"],"title":"","callSign":"","vesselType":"","tonnage":"","grossRegisteredTonnage":"","vesselFlag":"","vesselOwner":"","remarks":"SWIFT/BIC RNCORUMM; Website http://www.rncb.ru; Email Address rncb@rncb.ru; BIK (RU) 044525607; Secondary sanctions risk: Ukraine-/Russia-Related Sanctions Regulations, 31 CFR 589.201 and/or 589.209; Registration ID 1027700381290 (Russia); Tax ID No. 7701105460 (Russia); Government Gazette Number 09610705 (Russia); a.k.a. 'RNCB'.","match":0.906896551724138,"matchedName":"russian national commercial bank"}],"altNames":[{"entityID":"51760","alternateID":"81078","alternateType":"aka","alternateName":"RUSSITA BANK","alternateRemarks":"","match":0.9636363636363636,"matchedName":"russita bank"},{"entityID":"18268","alternateID":"28201","alternateType":"aka","alternateName":"RUSSIAN EXPORT-IMPORT BANK","alternateRemarks":"","match":0.9217391304347826,"matchedName":"russian export import bank"},{"entityID":"16681","alternateID":"25333","alternateType":"fka","alternateName":"AKTSIONERNY BANK RUSSIAN FEDERATION","alternateRemarks":"","match":0.9015625,"matchedName":"aktsionerny bank russian federation"}],"sectoralSanctions":[{"Addresses":["3, Gagarinsky Pereulok, Moscow, 119034, RU","3 Gagarinsky per., Moscow, 119034, RU"],"AlternateNames":["Russian Agricultural Bank","Russian Agricultural Bank Open Joint Stock Company","Rosselkhozbank","Russian Agricultural Bank OJSC","RusAg"],"EntityID":"17014","IDsOnRecord":["Registration Number, 1027700342890, RU","Government Gazette Number, 52750822, RU","Website, http://www.rshb.ru","SWIFT/BIC, RUAGRUMM","Executive Order 13662 Directive Determination -, Subject to Directive 1","Executive Order 14024 Directive Information -, For more information on directives, please visit the following link: https://home.treasury.gov/policy-issues/financial-sanctions/sanctions-programs-and-country-information/russian-harmful-foreign-activities-sanctions#directives","Executive Order 14024 Directive Information, Subject to Directive 3 - All transactions in, provision of financing for, and other dealings in new debt of longer than 14 days maturity or new equity where such new debt or new equity is issued on or after the 'Effective Date (EO 14024 Directive)' associated with this name are prohibited.","Listing Date (EO 14024 Directive 3):, 2022-02-24","Effective Date (EO 14024 Directive 3):, 2022-03-26","Secondary sanctions risk:, Ukraine-/Russia-Related Sanctions Regulations, 31 CFR 589.201 and/or 589.209"],"Name":"Joint Stock Company Russian Agricultural Bank","Programs":["UKRAINE-EO13662","RUSSIA-EO14024"],"Remarks":["For more information on directives, please visit the following link: http://www.treasury.gov/resource-center/sanctions/Programs/Pages/ukraine.aspx#directives."],"SourceInfoURL":"https://ofac.treasury.gov/other-ofac-sanctions-lists","SourceListURL":"https://sanctionslist.ofac.treas.gov/Home/ConsolidatedList","Type":"Entity","match":0.9217391304347826,"matchedName":"russian agricultural bank"},{"Addresses":["12 Krasnopresnenskaya Embankments, Moscow, 123610, RU"],"AlternateNames":["ROSEKSIMBANK, ZAO","RUSSIAN EXPORT-IMPORT BANK","GOSUDARSTVENNY SPETSIALIZIROVANNY ROSSISKI EKSPORTNO-IMPORTNY BANK (ZAKRYTOE AKTSIONERNOE OBSHCHESTVO)","STATE SPECIALIZED RUSSIAN EXPORT-IMPORT BANK JOINT-STOCK COMPANY","Eximbank of Russia ZAO","Eximbank of Russia","AO Roseksimbank"],"EntityID":"18268","IDsOnRecord":["Registration Number, 1027739109133, RU","Tax ID No., 7704001959, RU","Legal Entity Number, 253400HA6URWT39X2982","SWIFT/BIC, EXIRRUMM","Website, eximbank.ru","Executive Order 13662 Directive Determination -, Subject to Directive 1","Organization Established Date, 1994-05-24","Target Type, Financial Institution","Secondary sanctions risk:, Ukraine-/Russia-Related Sanctions Regulations, 31 CFR 589.201 and/or 589.209","Secondary sanctions risk:, See Section 11 of Executive Order 14024."],"Name":"EXIMBANK OF RUSSIA JSC","Programs":["UKRAINE-EO13662","RUSSIA-EO14024"],"Remarks":["All offices worldwide","for more information on directives, please visit the following link: http://www.treasury.gov/resource-center/sanctions/Programs/Pages/ukraine.aspx#directives."],"SourceInfoURL":"https://ofac.treasury.gov/other-ofac-sanctions-lists","SourceListURL":"https://sanctionslist.ofac.treas.gov/Home/ConsolidatedList","Type":"Entity","match":0.9217391304347826,"matchedName":"russian export import bank"},{"Addresses":["65/1 Suschevsky Val, Moscow, 129594, RU","65 Sushchevskiy val, Moscow, 129594, RU"],"AlternateNames":["RUSSIAN REGIONAL DEVELOPMENT BANK","VBRR"],"EntityID":"18298","IDsOnRecord":["Registration ID, 3287, RU","Website, www.vbrr.ru","Executive Order 13662 Directive Determination -, Subject to Directive 2","Executive Order 13662 Directive Determination -, Subject to Directive 4","Secondary sanctions risk:, Ukraine-/Russia-Related Sanctions Regulations, 31 CFR 589.201 and/or 589.209"],"Name":"OJSC RUSSIAN REGIONAL DEVELOPMENT BANK","Programs":["UKRAINE-EO13662"],"Remarks":["For more information on directives, please visit the following link: http://www.treasury.gov/resource-center/sanctions/Programs/Pages/ukraine.aspx#directives."],"SourceInfoURL":"https://ofac.treasury.gov/other-ofac-sanctions-lists","SourceListURL":"https://sanctionslist.ofac.treas.gov/Home/ConsolidatedList","Type":"Entity","match":0.905,"matchedName":"russian regional development bank"}],"nonSDNMenuBasedSanctionsList":[{"Addresses":["Neglinnaya St 12, Moscow, 107016, RU","Moscow, RU"],"AlternateNames":["Bank Rossi, Federal State Budgetary Institution","Bank of Russia","Bank of Russia, Central Bank","Tsentralny Bank Rossiskoi Federatsii","Central Bank of Russia"],"EntityID":"31695","EntityNumber":"31695","IDs":["Registration Number, 1037700013020, RU","Government Gazette Number, 00032253, RU","Tax ID No., 7702235133, RU","SWIFT/BIC, CBRFRUMM","Website, www.cbr.ru","Organization Established Date, 1990-07-13","Organization Type:, Central banking","Executive Order 14024 Directive Information -, For more information on directives, please visit the following link: https://home.treasury.gov/policy-issues/financial-sanctions/sanctions-programs-and-country-information/russian-harmful-foreign-activities-sanctions#directives","Executive Order 14024 Directive Information, Subject to Directive 1a - As of the effective date, participation in the secondary market for ruble or non-ruble denominated bonds issued on or after the effective date by the Central Bank of the Russian Federation, the National Wealth Fund of the Russian Federation, or the Ministry of Finance of the Russian Federation is prohibited.","Target Type, Government Entity","Listing Date (EO 14024 Directive 1a):, 2022-02-22","Effective Date (EO 14024 Directive 1a):, 2022-03-01","Executive Order 14024 Directive Information, Subject to Directive 4 - any transaction involving the Central Bank of the Russian Federation, the National Wealth Fund of the Russian Federation, or the Ministry of Finance of the Russian Federation, including any transfer of assets to such entities or any foreign exchange transaction for or on behalf of such entities is prohibited."],"Name":"Central Bank of the Russian Federation","Programs":["RUSSIA-EO14024"],"SourceInfoURL":"https://ofac.treasury.gov/other-ofac-sanctions-lists","Type":"Entity","match":0.9326268221574344,"matchedName":"bank of russia"},{"Addresses":["3, Gagarinsky Pereulok, Moscow, 119034, RU","3 Gagarinsky per., Moscow, 119034, RU"],"AlternateNames":["Russian Agricultural Bank","Russian Agricultural Bank Open Joint Stock Company","Rosselkhozbank","Russian Agricultural Bank OJSC","RusAg"],"EntityID":"17014","EntityNumber":"17014","IDs":["Registration Number, 1027700342890, RU","Government Gazette Number, 52750822, RU","Website, http://www.rshb.ru","SWIFT/BIC, RUAGRUMM","Executive Order 13662 Directive Determination -, Subject to Directive 1","Executive Order 14024 Directive Information -, For more information on directives, please visit the following link: https://home.treasury.gov/policy-issues/financial-sanctions/sanctions-programs-and-country-information/russian-harmful-foreign-activities-sanctions#directives","Executive Order 14024 Directive Information, Subject to Directive 3 - All transactions in, provision of financing for, and other dealings in new debt of longer than 14 days maturity or new equity where such new debt or new equity is issued on or after the 'Effective Date (EO 14024 Directive)' associated with this name are prohibited.","Listing Date (EO 14024 Directive 3):, 2022-02-24","Effective Date (EO 14024 Directive 3):, 2022-03-26","Secondary sanctions risk:, Ukraine-/Russia-Related Sanctions Regulations, 31 CFR 589.201 and/or 589.209"],"Name":"Joint Stock Company Russian Agricultural Bank","Programs":["UKRAINE-EO13662","RUSSIA-EO14024"],"Remarks":["For more information on directives, please visit the following link: http://www.treasury.gov/resource-center/sanctions/Programs/Pages/ukraine.aspx#directives."],"SourceInfoURL":"https://ofac.treasury.gov/other-ofac-sanctions-lists","Type":"Entity","match":0.9217391304347826,"matchedName":"russian agricultural bank"}],"ukConsolidatedSanctionsList":[{"Addresses":["Rastrelli Square, 2A, Saint-Petersburg"],"GroupID":14177,"GroupType":"Entity","LastUpdates":["15/12/2023"],"ListedDates":["22/02/2022"],"Names":["BANK OF RUSSIA","BANK ROSSIYA","RUSSIA BANK"],"OtherInfos":["(UK Sanctions List Ref):RUS0232. Financial sanctions imposed in addition to an asset freeze: Correspondent banking relationships etc. Trust services. Date trust services sanctions imposed: 21/03/2023. The prohibition on correspondent banking relationships etc. measure was imposed on 15/12/2023. (UK Statement of Reasons):Bank \\"Rossiya\\" is a Russian bank privately owned by elite Russian billionaires with direct links to Putin. Bank \\"Rossiya\\" also has important stakes in the National Media Group, which controls television stations which actively support the Russian Government's policies of destabilisation in Ukraine. Since the annexation of Crimea, Bank \\"Rossiya\\" has opened branches across Crimea and Sevastopol, and provided travel cards for the public to travel across the peninsula thereby supporting the integration of Crimea and Sevastopol into the Russian Federation through the financial system. Bank \\"Rossiya\\" has also contributed to the provision of insurance and investment throughout Crimea and Sevastopol and services to support military capability and major transport links. Bank \\"Rossiya\\" therefore is or has been involved in providing financial services, or making available funds, economic resources, goods or technology and engaging in, providing support for, or promoting any policy or action that could contribute to destabilising Ukraine or undermining or threatening the territorial integrity, sovereignty or independence of Ukraine. (Website):https://abr.ru/ (Type of entity):Public Joint Stock Company (PJSC) (Business Reg No):License number: 328 INN: 7831000122 OGRN: 1027800000084"],"PostalCodes":["191124"],"SanctionListDates":["22/02/2022"],"match":0.9565403304178814,"matchedName":"russia bank"},{"Addresses":["0 Bld. 2 Presnenskaya Emb. (Moscow City, IQ-quarter Complex), Moscow","3, Gagarinsky Pereulok, Moscow"],"Countries":["Russia"],"GroupID":15016,"GroupType":"Entity","LastUpdates":["15/12/2023"],"ListedDates":["24/03/2022"],"Names":["JSC ROSSELKHOZBANK","RUSAG","RUSSIAN AGRICULTURAL BANK"],"OtherInfos":["(UK Sanctions List Ref):RUS1073. Financial sanctions imposed in addition to an asset freeze: Dealing with transferable securities or money-market instruments. Loans and credit arrangements. Correspondent banking relationships etc. Trust services. Date trust services sanctions imposed: 21/03/2023. The prohibition on correspondent banking relationships etc. measure was imposed on 15/12/2023. (UK Statement of Reasons):RUSSIAN AGRICULTURAL BANK is a Russian bank. RUSSIAN AGRICULTURAL BANK is or has been involved in obtaining a benefit from or supporting the Government of Russia by carrying on business in the financial services sector - a sector of strategic significance to the Government of Russia. (Phone number):(1) 7 (495) 777-11-00 (2) 7 (495) 787-7-787 (3) 8 (800) 100-0-100 (Website):(1) http://www.rshb.ru/en/ (2) https://www.rshb.ru/ (Email address):office@rshb.ru"],"PostalCodes":["123112","119034"],"SanctionListDates":["24/03/2022"],"match":0.9217391304347826,"matchedName":"russian agricultural bank"},{"Addresses":["27 Kalanchevskaya str., Moscow"],"Countries":["Russia"],"GroupID":15017,"GroupType":"Entity","LastUpdates":["15/12/2023"],"ListedDates":["24/03/2022"],"Names":["ALFA-BANK JSC","ALFA-BANK RUSSIA"],"OtherInfos":["(UK Sanctions List Ref):RUS1074. Financial sanctions imposed in addition to an asset freeze: Correspondent banking relationships etc. Trust services. Date trust services sanctions imposed: 21/03/2023. The prohibition on correspondent banking relationships etc. measure was imposed on 15/12/2023. (UK Statement of Reasons):Alfa-Bank JSC is a Russian bank. There are reasonable grounds to suspect that Alfa-Bank JSC is or has been involved in obtaining a benefit from or supporting the Government of Russia by carrying on business in the financial services sector - a sector of strategic significance to the Government of Russia. (Phone number):7 495 755-58-58. 7 495 78-888-78 (Website):https://alfabank.ru/ (Type of entity):Bank, Financial Services Company, JSC"],"PostalCodes":["107078"],"SanctionListDates":["24/03/2022"],"match":0.9155457448285437,"matchedName":"alfa bank russia"},{"Addresses":["Naberezhnaja street, 34, Simferopol, The Autonomous Republic of Crimea and the city of Sevastopol"],"Countries":["Ukraine"],"GroupID":13078,"GroupType":"Entity","LastUpdates":["21/03/2023"],"ListedDates":["31/07/2014"],"Names":["RUSSIAN NATIONAL COMMERCIAL BANK"],"OtherInfos":["(UK Sanctions List Ref):RUS0193. Financial sanctions imposed in addition to an asset freeze: Trust services. Date trust services sanctions imposed: 21/03/2023. (UK Statement of Reasons):After the illegal annexation of Crimea, Russian National Commercial Bank (RNCB) became fully owned by the so-called 'Republic of Crimea'. In January 2016 became a property of Federal Agency for State Property Management also known as Rosimushchestvo. It has become the dominant player in the market, while it had no presence in Crimea before the annexation. By buying or taking over from branches of retreating banks operating in Crimea, RNBC supported materially and financially the actions of the Russian government to integrate Crimea into the Russian Federation, thus undermining Ukraine's territorial integrity. (Website):http://www.rncb.ru"],"PostalCodes":["295000"],"SanctionListDates":["31/12/2020"],"match":0.906896551724138,"matchedName":"russian national commercial bank"},{"Addresses":["65 Sushchevskiy val, Moscow"],"Countries":["Russia"],"GroupID":15918,"GroupType":"Entity","LastUpdates":["15/12/2023"],"ListedDates":["19/05/2023"],"Names":["RUSSIAN REGIONAL DEVELOPMENT BANK"],"OtherInfos":["(UK Sanctions List Ref):RUS1860. Financial sanctions imposed in addition to an asset freeze: Correspondent banking relationships etc. Trust services. Date trust services sanctions imposed: 18/05/2023. The prohibition on correspondent banking relationships etc. measure was imposed on 15/12/2023. (UK Statement of Reasons):RUSSIAN REGIONAL DEVELOPMENT BANK is an involved person under the Russia (EU Exit) (Sanctions) Regulations 2019 because it is or has been involved in obtaining a benefit from or supporting the Government of Russia by carrying on business in a sector of strategic significance to the Government of Russia, namely the Russian financial services sector."],"PostalCodes":["129594"],"SanctionListDates":["18/05/2023"],"match":0.905,"matchedName":"russian regional development bank"}],"refreshedAt":"2025-10-11T00:54:13.808076626Z"}`
|
|
6619
7218
|
}
|
|
6620
7219
|
},
|
|
6621
7220
|
{
|
|
@@ -6704,9 +7303,9 @@ var mockAlerts = [
|
|
|
6704
7303
|
|
|
6705
7304
|
// src/hooks/useAlertDetail.ts
|
|
6706
7305
|
var useAlertDetail = (id) => {
|
|
6707
|
-
const alert =
|
|
6708
|
-
const [rfiStatus, setRfiStatus] =
|
|
6709
|
-
const [assignee, setAssignee] =
|
|
7306
|
+
const alert = React15.useMemo(() => mockAlerts.find((a) => a.id === id), [id]);
|
|
7307
|
+
const [rfiStatus, setRfiStatus] = React15.useState(alert?.rfiStatus || "");
|
|
7308
|
+
const [assignee, setAssignee] = React15.useState(alert?.assignee || "Unassigned");
|
|
6710
7309
|
const handleRfiStatusChange = (newStatus) => {
|
|
6711
7310
|
setRfiStatus(newStatus);
|
|
6712
7311
|
console.log("RFI Status updated to:", newStatus);
|
|
@@ -6715,6 +7314,11 @@ var useAlertDetail = (id) => {
|
|
|
6715
7314
|
setAssignee(newAssignee);
|
|
6716
7315
|
console.log("Assignee updated to:", newAssignee);
|
|
6717
7316
|
};
|
|
7317
|
+
const handleResolveAlert = async (data) => {
|
|
7318
|
+
console.log("Resolving alert with data:", data);
|
|
7319
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
7320
|
+
console.log("Alert resolved successfully");
|
|
7321
|
+
};
|
|
6718
7322
|
return {
|
|
6719
7323
|
alert,
|
|
6720
7324
|
isLoading: false,
|
|
@@ -6722,18 +7326,21 @@ var useAlertDetail = (id) => {
|
|
|
6722
7326
|
rfiStatus,
|
|
6723
7327
|
assignee,
|
|
6724
7328
|
handleRfiStatusChange,
|
|
6725
|
-
handleAssigneeChange
|
|
7329
|
+
handleAssigneeChange,
|
|
7330
|
+
handleResolveAlert
|
|
6726
7331
|
};
|
|
6727
7332
|
};
|
|
6728
7333
|
var AlertDetail = () => {
|
|
6729
7334
|
const { id } = reactRouterDom.useParams();
|
|
6730
7335
|
const navigate = reactRouterDom.useNavigate();
|
|
7336
|
+
const [resolveDialogOpen, setResolveDialogOpen] = React15.useState(false);
|
|
6731
7337
|
const {
|
|
6732
7338
|
alert,
|
|
6733
7339
|
rfiStatus,
|
|
6734
7340
|
assignee,
|
|
6735
7341
|
handleRfiStatusChange,
|
|
6736
|
-
handleAssigneeChange
|
|
7342
|
+
handleAssigneeChange,
|
|
7343
|
+
handleResolveAlert
|
|
6737
7344
|
} = useAlertDetail(id);
|
|
6738
7345
|
if (!alert) {
|
|
6739
7346
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container mx-auto px-4 py-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
@@ -6746,46 +7353,53 @@ var AlertDetail = () => {
|
|
|
6746
7353
|
/* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: () => navigate("/alerts"), children: "Back to Alerts" })
|
|
6747
7354
|
] }) });
|
|
6748
7355
|
}
|
|
6749
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
7356
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6750
7357
|
PageLayout,
|
|
6751
7358
|
{
|
|
6752
|
-
title:
|
|
6753
|
-
|
|
7359
|
+
title: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
7360
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
7361
|
+
"Alert #",
|
|
7362
|
+
alert.id
|
|
7363
|
+
] }),
|
|
7364
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: getTypeBadgeVariant(alert.type), children: alert.type })
|
|
7365
|
+
] }),
|
|
6754
7366
|
maxWidth: "full",
|
|
6755
|
-
|
|
6756
|
-
|
|
6757
|
-
label: "Back to Alerts",
|
|
6758
|
-
variant: "outline",
|
|
6759
|
-
onClick: () => navigate("/alerts")
|
|
6760
|
-
},
|
|
7367
|
+
headerContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7368
|
+
AlertHeaderControls,
|
|
6761
7369
|
{
|
|
6762
|
-
|
|
6763
|
-
|
|
6764
|
-
|
|
6765
|
-
|
|
7370
|
+
status: alert.status,
|
|
7371
|
+
assignee,
|
|
7372
|
+
rfiStatus,
|
|
7373
|
+
onAssigneeChange: handleAssigneeChange,
|
|
7374
|
+
onRfiStatusChange: handleRfiStatusChange
|
|
7375
|
+
}
|
|
7376
|
+
),
|
|
7377
|
+
actions: [
|
|
6766
7378
|
{
|
|
6767
|
-
label: "
|
|
7379
|
+
label: "Resolve Alert",
|
|
6768
7380
|
variant: "default",
|
|
6769
|
-
onClick: () =>
|
|
7381
|
+
onClick: () => setResolveDialogOpen(true)
|
|
6770
7382
|
}
|
|
6771
7383
|
],
|
|
6772
|
-
children:
|
|
6773
|
-
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6777
|
-
|
|
6778
|
-
|
|
6779
|
-
|
|
6780
|
-
|
|
6781
|
-
|
|
7384
|
+
children: [
|
|
7385
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDetailRouter, { alert }),
|
|
7386
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7387
|
+
ResolveAlertDialog,
|
|
7388
|
+
{
|
|
7389
|
+
alertId: alert.id,
|
|
7390
|
+
open: resolveDialogOpen,
|
|
7391
|
+
onOpenChange: setResolveDialogOpen,
|
|
7392
|
+
onResolve: handleResolveAlert
|
|
7393
|
+
}
|
|
7394
|
+
)
|
|
7395
|
+
]
|
|
6782
7396
|
}
|
|
6783
7397
|
);
|
|
6784
7398
|
};
|
|
6785
7399
|
var AlertDetail_default = AlertDetail;
|
|
6786
7400
|
var Alerts = () => {
|
|
6787
7401
|
const navigate = reactRouterDom.useNavigate();
|
|
6788
|
-
const [filters, setFilters] =
|
|
7402
|
+
const [filters, setFilters] = React15.useState({
|
|
6789
7403
|
alertId: "",
|
|
6790
7404
|
contextId: "",
|
|
6791
7405
|
contextType: "",
|
|
@@ -6796,9 +7410,9 @@ var Alerts = () => {
|
|
|
6796
7410
|
startDate: "",
|
|
6797
7411
|
endDate: ""
|
|
6798
7412
|
});
|
|
6799
|
-
const [filteredAlerts, setFilteredAlerts] =
|
|
6800
|
-
const [currentPage, setCurrentPage] =
|
|
6801
|
-
const [rowsPerPage, setRowsPerPage] =
|
|
7413
|
+
const [filteredAlerts, setFilteredAlerts] = React15.useState(mockAlerts);
|
|
7414
|
+
const [currentPage, setCurrentPage] = React15.useState(1);
|
|
7415
|
+
const [rowsPerPage, setRowsPerPage] = React15.useState(100);
|
|
6802
7416
|
const handleFilterChange = (field, value) => {
|
|
6803
7417
|
setFilters((prev) => ({ ...prev, [field]: value }));
|
|
6804
7418
|
};
|
|
@@ -7141,11 +7755,11 @@ var mockBusinessesList = [
|
|
|
7141
7755
|
];
|
|
7142
7756
|
var Businesses = () => {
|
|
7143
7757
|
const navigate = reactRouterDom.useNavigate();
|
|
7144
|
-
const [businesses, setBusinesses] =
|
|
7145
|
-
const [filteredBusinesses, setFilteredBusinesses] =
|
|
7146
|
-
const [sortBy, setSortBy] =
|
|
7147
|
-
const [sortDirection, setSortDirection] =
|
|
7148
|
-
const [filters, setFilters] =
|
|
7758
|
+
const [businesses, setBusinesses] = React15.useState(mockBusinessesList);
|
|
7759
|
+
const [filteredBusinesses, setFilteredBusinesses] = React15.useState(mockBusinessesList);
|
|
7760
|
+
const [sortBy, setSortBy] = React15.useState("created");
|
|
7761
|
+
const [sortDirection, setSortDirection] = React15.useState("desc");
|
|
7762
|
+
const [filters, setFilters] = React15.useState({
|
|
7149
7763
|
name: "",
|
|
7150
7764
|
productName: "",
|
|
7151
7765
|
status: "",
|
|
@@ -7203,7 +7817,7 @@ var Businesses = () => {
|
|
|
7203
7817
|
const handleRowClick = (business) => {
|
|
7204
7818
|
navigate(`/business/${business.id}`);
|
|
7205
7819
|
};
|
|
7206
|
-
const
|
|
7820
|
+
const columns2 = [
|
|
7207
7821
|
{
|
|
7208
7822
|
key: "id",
|
|
7209
7823
|
title: "Business ID",
|
|
@@ -7380,7 +7994,7 @@ var Businesses = () => {
|
|
|
7380
7994
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container mx-auto px-4 h-full max-w-none flex flex-col", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 mt-4 overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7381
7995
|
DataTable,
|
|
7382
7996
|
{
|
|
7383
|
-
columns,
|
|
7997
|
+
columns: columns2,
|
|
7384
7998
|
data: sortedBusinesses,
|
|
7385
7999
|
sortBy,
|
|
7386
8000
|
sortDirection,
|
|
@@ -7464,6 +8078,9 @@ var businessCounterparties = [
|
|
|
7464
8078
|
}
|
|
7465
8079
|
];
|
|
7466
8080
|
var Business = () => {
|
|
8081
|
+
const { id } = reactRouterDom.useParams();
|
|
8082
|
+
const business = mockBusinessesList.find((b) => b.id === id);
|
|
8083
|
+
const [currentStatus, setCurrentStatus] = React15.useState(business?.status || "active");
|
|
7467
8084
|
const accountColumns = [
|
|
7468
8085
|
{
|
|
7469
8086
|
key: "number",
|
|
@@ -7487,80 +8104,107 @@ var Business = () => {
|
|
|
7487
8104
|
render: (value) => /* @__PURE__ */ jsxRuntime.jsx(StatusBadge, { status: value })
|
|
7488
8105
|
}
|
|
7489
8106
|
];
|
|
7490
|
-
|
|
7491
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.
|
|
7492
|
-
|
|
7493
|
-
/* @__PURE__ */ jsxRuntime.
|
|
7494
|
-
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
),
|
|
7502
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7503
|
-
TabsTrigger,
|
|
7504
|
-
{
|
|
7505
|
-
value: "kyc",
|
|
7506
|
-
className: "rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none pb-3",
|
|
7507
|
-
children: "KYC"
|
|
7508
|
-
}
|
|
7509
|
-
),
|
|
8107
|
+
if (!business) {
|
|
8108
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container mx-auto px-4 py-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
8109
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-bold mb-2", children: "Business Not Found" }),
|
|
8110
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mb-4", children: "The business could not be found." })
|
|
8111
|
+
] }) });
|
|
8112
|
+
}
|
|
8113
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8114
|
+
PageLayout,
|
|
8115
|
+
{
|
|
8116
|
+
title: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
8117
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: business.businessName }),
|
|
7510
8118
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7511
|
-
|
|
8119
|
+
EditableInfoField,
|
|
7512
8120
|
{
|
|
7513
|
-
|
|
7514
|
-
|
|
7515
|
-
|
|
8121
|
+
label: "",
|
|
8122
|
+
value: currentStatus,
|
|
8123
|
+
options: [
|
|
8124
|
+
{ value: "active", label: "Active" },
|
|
8125
|
+
{ value: "inactive", label: "Inactive" },
|
|
8126
|
+
{ value: "suspended", label: "Suspended" }
|
|
8127
|
+
],
|
|
8128
|
+
onChange: (newStatus) => setCurrentStatus(newStatus),
|
|
8129
|
+
renderValue: (value) => /* @__PURE__ */ jsxRuntime.jsx(StatusBadge, { status: value.toUpperCase() }),
|
|
8130
|
+
className: "inline-block"
|
|
7516
8131
|
}
|
|
7517
8132
|
)
|
|
7518
8133
|
] }),
|
|
7519
|
-
|
|
7520
|
-
|
|
7521
|
-
|
|
7522
|
-
|
|
7523
|
-
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7530
|
-
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
|
|
8134
|
+
maxWidth: "full",
|
|
8135
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Tabs, { defaultValue: "profile", className: "space-y-6", children: [
|
|
8136
|
+
/* @__PURE__ */ jsxRuntime.jsxs(TabsList, { className: "inline-flex gap-8 h-auto bg-transparent border-b border-border w-full p-0 rounded-none justify-start", children: [
|
|
8137
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8138
|
+
TabsTrigger,
|
|
8139
|
+
{
|
|
8140
|
+
value: "profile",
|
|
8141
|
+
className: "rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none pb-3",
|
|
8142
|
+
children: "Profile"
|
|
8143
|
+
}
|
|
8144
|
+
),
|
|
8145
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8146
|
+
TabsTrigger,
|
|
8147
|
+
{
|
|
8148
|
+
value: "kyc",
|
|
8149
|
+
className: "rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none pb-3",
|
|
8150
|
+
children: "KYC"
|
|
8151
|
+
}
|
|
8152
|
+
),
|
|
8153
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8154
|
+
TabsTrigger,
|
|
8155
|
+
{
|
|
8156
|
+
value: "counterparty",
|
|
8157
|
+
className: "rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none pb-3",
|
|
8158
|
+
children: "Counterparty"
|
|
8159
|
+
}
|
|
8160
|
+
)
|
|
7537
8161
|
] }),
|
|
7538
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
8162
|
+
/* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "profile", className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col lg:flex-row items-start gap-6", children: [
|
|
8163
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-6", children: [
|
|
8164
|
+
/* @__PURE__ */ jsxRuntime.jsx(BusinessProfileCard, { isEditing: false, onToggleEdit: () => {
|
|
8165
|
+
} }),
|
|
8166
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
8167
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-4", children: [
|
|
8168
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { children: "Accounts" }),
|
|
8169
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", children: "+ New Account" })
|
|
8170
|
+
] }),
|
|
8171
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8172
|
+
DataTable,
|
|
8173
|
+
{
|
|
8174
|
+
columns: accountColumns,
|
|
8175
|
+
data: businessAccounts,
|
|
8176
|
+
emptyMessage: "No accounts found"
|
|
8177
|
+
}
|
|
8178
|
+
) })
|
|
8179
|
+
] })
|
|
7547
8180
|
] }),
|
|
7548
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
7549
|
-
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
7554
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8181
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lg:w-64", children: /* @__PURE__ */ jsxRuntime.jsx(BusinessStatusCard, { isEditing: false, onToggleEdit: () => {
|
|
8182
|
+
} }) })
|
|
8183
|
+
] }) }),
|
|
8184
|
+
/* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "kyc", className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-8 text-center text-muted-foreground", children: "KYC content coming soon" }) }),
|
|
8185
|
+
/* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "counterparty", className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6", children: businessCounterparties.map((counterparty) => /* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
8186
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { children: [
|
|
8187
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
8188
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: "text-lg", children: counterparty.name }),
|
|
8189
|
+
/* @__PURE__ */ jsxRuntime.jsx(CounterpartyTypeBadge, { type: counterparty.type })
|
|
8190
|
+
] }),
|
|
8191
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 mt-2", children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: counterparty.status === "active" ? "default" : "secondary", children: counterparty.status }) })
|
|
8192
|
+
] }),
|
|
8193
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-3", children: [
|
|
8194
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: counterparty.description }),
|
|
8195
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center text-sm", children: [
|
|
8196
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Last Transaction" }),
|
|
8197
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: counterparty.lastTransaction })
|
|
8198
|
+
] })
|
|
7555
8199
|
] })
|
|
7556
|
-
] })
|
|
7557
|
-
] }
|
|
7558
|
-
|
|
7559
|
-
|
|
8200
|
+
] }, counterparty.id)) }) })
|
|
8201
|
+
] })
|
|
8202
|
+
}
|
|
8203
|
+
);
|
|
7560
8204
|
};
|
|
7561
8205
|
var BusinessDetail_default = Business;
|
|
7562
8206
|
var CreateBusiness = () => {
|
|
7563
|
-
const [businessType, setBusinessType] =
|
|
8207
|
+
const [businessType, setBusinessType] = React15.useState("");
|
|
7564
8208
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7565
8209
|
PageLayout,
|
|
7566
8210
|
{
|
|
@@ -7759,7 +8403,7 @@ var Cases = () => {
|
|
|
7759
8403
|
};
|
|
7760
8404
|
var Cases_default = Cases;
|
|
7761
8405
|
var CreateCounterparty = () => {
|
|
7762
|
-
const [counterpartyData, setCounterpartyData] =
|
|
8406
|
+
const [counterpartyData, setCounterpartyData] = React15.useState(null);
|
|
7763
8407
|
const handleBasicInfoChange = (data) => {
|
|
7764
8408
|
setCounterpartyData(data);
|
|
7765
8409
|
};
|
|
@@ -7786,7 +8430,7 @@ var CreateCounterparty = () => {
|
|
|
7786
8430
|
var Create_default2 = CreateCounterparty;
|
|
7787
8431
|
var CounterpartyDomesticWire = () => {
|
|
7788
8432
|
const { isEditing, handleToggleEdit, handleSave, handleCancel } = useEditState({});
|
|
7789
|
-
const [transferType, setTransferType] =
|
|
8433
|
+
const [transferType, setTransferType] = React15.useState("DOMESTIC");
|
|
7790
8434
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7791
8435
|
PageLayout,
|
|
7792
8436
|
{
|
|
@@ -7916,7 +8560,7 @@ var Dashboard = () => {
|
|
|
7916
8560
|
var Dashboard_default = Dashboard;
|
|
7917
8561
|
var NotFound = () => {
|
|
7918
8562
|
const location = reactRouterDom.useLocation();
|
|
7919
|
-
|
|
8563
|
+
React15.useEffect(() => {
|
|
7920
8564
|
console.error(
|
|
7921
8565
|
"404 Error: User attempted to access non-existent route:",
|
|
7922
8566
|
location.pathname
|
|
@@ -7967,32 +8611,47 @@ var mockProducts = [
|
|
|
7967
8611
|
{ value: "PROD-003", label: "Money Market Account" },
|
|
7968
8612
|
{ value: "PROD-004", label: "Business Checking" }
|
|
7969
8613
|
];
|
|
7970
|
-
var statementTypes = [
|
|
7971
|
-
{ value: "root", label: "Root" },
|
|
7972
|
-
{ value: "program", label: "Program" },
|
|
7973
|
-
{ value: "product", label: "Product" },
|
|
7974
|
-
{ value: "account", label: "Account" }
|
|
7975
|
-
];
|
|
7976
8614
|
function Statement() {
|
|
7977
|
-
const [statementType, setStatementType] =
|
|
7978
|
-
const [selectedProgram, setSelectedProgram] =
|
|
7979
|
-
const [selectedProduct, setSelectedProduct] =
|
|
7980
|
-
const [accountNumber, setAccountNumber] =
|
|
7981
|
-
const [startDate, setStartDate] =
|
|
7982
|
-
const [endDate, setEndDate] =
|
|
7983
|
-
const [statementGenerated, setStatementGenerated] =
|
|
8615
|
+
const [statementType, setStatementType] = React15.useState("");
|
|
8616
|
+
const [selectedProgram, setSelectedProgram] = React15.useState("");
|
|
8617
|
+
const [selectedProduct, setSelectedProduct] = React15.useState("");
|
|
8618
|
+
const [accountNumber, setAccountNumber] = React15.useState("");
|
|
8619
|
+
const [startDate, setStartDate] = React15.useState();
|
|
8620
|
+
const [endDate, setEndDate] = React15.useState();
|
|
8621
|
+
const [statementGenerated, setStatementGenerated] = React15.useState(false);
|
|
8622
|
+
const [isLoading, setIsLoading] = React15.useState(false);
|
|
8623
|
+
const [programs] = React15.useState(mockPrograms);
|
|
8624
|
+
const [products] = React15.useState(mockProducts);
|
|
8625
|
+
const [statementHeader, setStatementHeader] = React15.useState(null);
|
|
8626
|
+
const [statementTransactions, setStatementTransactions] = React15.useState([]);
|
|
7984
8627
|
const handleStatementTypeChange = (value) => {
|
|
7985
8628
|
setStatementType(value);
|
|
7986
8629
|
setSelectedProgram("");
|
|
7987
8630
|
setSelectedProduct("");
|
|
7988
8631
|
setAccountNumber("");
|
|
7989
8632
|
};
|
|
7990
|
-
const handleGenerateStatement = () => {
|
|
8633
|
+
const handleGenerateStatement = async () => {
|
|
7991
8634
|
if (!statementType || !startDate || !endDate) return;
|
|
7992
8635
|
if (statementType === "program" && !selectedProgram) return;
|
|
7993
8636
|
if (statementType === "product" && !selectedProduct) return;
|
|
7994
8637
|
if (statementType === "account" && !accountNumber) return;
|
|
7995
|
-
|
|
8638
|
+
setIsLoading(true);
|
|
8639
|
+
try {
|
|
8640
|
+
console.log("Generating statement with:", {
|
|
8641
|
+
statementType,
|
|
8642
|
+
selectedProgram,
|
|
8643
|
+
selectedProduct,
|
|
8644
|
+
accountNumber,
|
|
8645
|
+
startDate,
|
|
8646
|
+
endDate
|
|
8647
|
+
});
|
|
8648
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
8649
|
+
setStatementHeader(mockStatementHeader);
|
|
8650
|
+
setStatementTransactions(mockStatementTransactions);
|
|
8651
|
+
setStatementGenerated(true);
|
|
8652
|
+
} finally {
|
|
8653
|
+
setIsLoading(false);
|
|
8654
|
+
}
|
|
7996
8655
|
};
|
|
7997
8656
|
const isGenerateDisabled = () => {
|
|
7998
8657
|
if (!statementType || !startDate || !endDate) return true;
|
|
@@ -8001,34 +8660,6 @@ function Statement() {
|
|
|
8001
8660
|
if (statementType === "account" && !accountNumber) return true;
|
|
8002
8661
|
return false;
|
|
8003
8662
|
};
|
|
8004
|
-
const columns = [
|
|
8005
|
-
{
|
|
8006
|
-
key: "transactionType",
|
|
8007
|
-
title: "Transaction Type",
|
|
8008
|
-
sortable: true,
|
|
8009
|
-
align: "left"
|
|
8010
|
-
},
|
|
8011
|
-
{
|
|
8012
|
-
key: "direction",
|
|
8013
|
-
title: "Direction",
|
|
8014
|
-
sortable: true,
|
|
8015
|
-
align: "left",
|
|
8016
|
-
render: (value) => /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: value === "CREDIT" ? "success" : "secondary", children: value })
|
|
8017
|
-
},
|
|
8018
|
-
{
|
|
8019
|
-
key: "amount",
|
|
8020
|
-
title: "Amount",
|
|
8021
|
-
sortable: true,
|
|
8022
|
-
align: "right",
|
|
8023
|
-
render: (value) => `$${value.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
|
|
8024
|
-
},
|
|
8025
|
-
{
|
|
8026
|
-
key: "count",
|
|
8027
|
-
title: "Count",
|
|
8028
|
-
sortable: true,
|
|
8029
|
-
align: "right"
|
|
8030
|
-
}
|
|
8031
|
-
];
|
|
8032
8663
|
const handleDownloadCSV = () => {
|
|
8033
8664
|
console.log("Downloading CSV...");
|
|
8034
8665
|
};
|
|
@@ -8038,148 +8669,34 @@ function Statement() {
|
|
|
8038
8669
|
const handleEdit = () => {
|
|
8039
8670
|
setStatementGenerated(false);
|
|
8040
8671
|
};
|
|
8041
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
8042
|
-
|
|
8043
|
-
|
|
8044
|
-
|
|
8045
|
-
|
|
8046
|
-
|
|
8047
|
-
|
|
8048
|
-
|
|
8049
|
-
|
|
8050
|
-
|
|
8051
|
-
|
|
8052
|
-
|
|
8053
|
-
|
|
8054
|
-
|
|
8055
|
-
|
|
8056
|
-
|
|
8057
|
-
|
|
8058
|
-
|
|
8059
|
-
|
|
8060
|
-
|
|
8061
|
-
|
|
8062
|
-
|
|
8063
|
-
|
|
8064
|
-
|
|
8065
|
-
|
|
8066
|
-
|
|
8067
|
-
|
|
8068
|
-
|
|
8069
|
-
),
|
|
8070
|
-
statementType === "product" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8071
|
-
EnhancedSelect,
|
|
8072
|
-
{
|
|
8073
|
-
label: "Product Name",
|
|
8074
|
-
placeholder: "Select product",
|
|
8075
|
-
options: mockProducts,
|
|
8076
|
-
value: selectedProduct,
|
|
8077
|
-
onValueChange: setSelectedProduct
|
|
8078
|
-
}
|
|
8079
|
-
),
|
|
8080
|
-
statementType === "account" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8081
|
-
EnhancedInput,
|
|
8082
|
-
{
|
|
8083
|
-
label: "Account Number",
|
|
8084
|
-
placeholder: "Enter account number",
|
|
8085
|
-
value: accountNumber,
|
|
8086
|
-
onChange: (e) => setAccountNumber(e.target.value)
|
|
8087
|
-
}
|
|
8088
|
-
),
|
|
8089
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
8090
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: "Start Date" }),
|
|
8091
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
8092
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8093
|
-
Button,
|
|
8094
|
-
{
|
|
8095
|
-
variant: "outline",
|
|
8096
|
-
className: cn(
|
|
8097
|
-
"justify-start text-left font-normal",
|
|
8098
|
-
!startDate && "text-muted-foreground"
|
|
8099
|
-
),
|
|
8100
|
-
children: [
|
|
8101
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "mr-2 h-4 w-4" }),
|
|
8102
|
-
startDate ? dateFns.format(startDate, "MM/dd/yyyy") : "Select date"
|
|
8103
|
-
]
|
|
8104
|
-
}
|
|
8105
|
-
) }),
|
|
8106
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8107
|
-
Calendar,
|
|
8108
|
-
{
|
|
8109
|
-
mode: "single",
|
|
8110
|
-
selected: startDate,
|
|
8111
|
-
onSelect: setStartDate,
|
|
8112
|
-
initialFocus: true
|
|
8113
|
-
}
|
|
8114
|
-
) })
|
|
8115
|
-
] })
|
|
8116
|
-
] }),
|
|
8117
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
8118
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: "End Date" }),
|
|
8119
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
8120
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8121
|
-
Button,
|
|
8122
|
-
{
|
|
8123
|
-
variant: "outline",
|
|
8124
|
-
className: cn(
|
|
8125
|
-
"justify-start text-left font-normal",
|
|
8126
|
-
!endDate && "text-muted-foreground"
|
|
8127
|
-
),
|
|
8128
|
-
children: [
|
|
8129
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "mr-2 h-4 w-4" }),
|
|
8130
|
-
endDate ? dateFns.format(endDate, "MM/dd/yyyy") : "Select date"
|
|
8131
|
-
]
|
|
8132
|
-
}
|
|
8133
|
-
) }),
|
|
8134
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8135
|
-
Calendar,
|
|
8136
|
-
{
|
|
8137
|
-
mode: "single",
|
|
8138
|
-
selected: endDate,
|
|
8139
|
-
onSelect: setEndDate,
|
|
8140
|
-
initialFocus: true
|
|
8141
|
-
}
|
|
8142
|
-
) })
|
|
8143
|
-
] })
|
|
8144
|
-
] })
|
|
8145
|
-
] }),
|
|
8146
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8147
|
-
Button,
|
|
8148
|
-
{
|
|
8149
|
-
onClick: handleGenerateStatement,
|
|
8150
|
-
disabled: isGenerateDisabled(),
|
|
8151
|
-
children: "Generate Statement"
|
|
8152
|
-
}
|
|
8153
|
-
) })
|
|
8154
|
-
] })
|
|
8155
|
-
] }),
|
|
8156
|
-
statementGenerated && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
8157
|
-
/* @__PURE__ */ jsxRuntime.jsx(StatementHeader, { data: mockStatementHeader, onEdit: handleEdit }),
|
|
8158
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
|
|
8159
|
-
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { direction: "row", children: [
|
|
8160
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardTitle, { size: "md", children: "Transaction Summary" }),
|
|
8161
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
8162
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", onClick: handleDownloadCSV, children: [
|
|
8163
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "h-4 w-4 mr-2" }),
|
|
8164
|
-
"Download CSV"
|
|
8165
|
-
] }),
|
|
8166
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", onClick: handlePrintPDF, children: [
|
|
8167
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-4 w-4 mr-2" }),
|
|
8168
|
-
"Print PDF"
|
|
8169
|
-
] })
|
|
8170
|
-
] })
|
|
8171
|
-
] }),
|
|
8172
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8173
|
-
DataTable,
|
|
8174
|
-
{
|
|
8175
|
-
columns,
|
|
8176
|
-
data: mockStatementTransactions,
|
|
8177
|
-
emptyMessage: "No transactions found"
|
|
8178
|
-
}
|
|
8179
|
-
) })
|
|
8180
|
-
] })
|
|
8181
|
-
] })
|
|
8182
|
-
] });
|
|
8672
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8673
|
+
StatementView,
|
|
8674
|
+
{
|
|
8675
|
+
statementType,
|
|
8676
|
+
selectedProgram,
|
|
8677
|
+
selectedProduct,
|
|
8678
|
+
accountNumber,
|
|
8679
|
+
startDate,
|
|
8680
|
+
endDate,
|
|
8681
|
+
statementGenerated,
|
|
8682
|
+
programs,
|
|
8683
|
+
products,
|
|
8684
|
+
statementHeader,
|
|
8685
|
+
statementTransactions,
|
|
8686
|
+
onStatementTypeChange: handleStatementTypeChange,
|
|
8687
|
+
onProgramChange: setSelectedProgram,
|
|
8688
|
+
onProductChange: setSelectedProduct,
|
|
8689
|
+
onAccountNumberChange: setAccountNumber,
|
|
8690
|
+
onStartDateChange: setStartDate,
|
|
8691
|
+
onEndDateChange: setEndDate,
|
|
8692
|
+
onGenerateStatement: handleGenerateStatement,
|
|
8693
|
+
onEdit: handleEdit,
|
|
8694
|
+
onDownloadCSV: handleDownloadCSV,
|
|
8695
|
+
onPrintPDF: handlePrintPDF,
|
|
8696
|
+
isGenerateDisabled: isGenerateDisabled(),
|
|
8697
|
+
isLoading
|
|
8698
|
+
}
|
|
8699
|
+
);
|
|
8183
8700
|
}
|
|
8184
8701
|
|
|
8185
8702
|
// src/lib/mock-data/transaction-data.ts
|
|
@@ -8188,13 +8705,15 @@ var mockTransactions = [
|
|
|
8188
8705
|
id: "1",
|
|
8189
8706
|
created: "2025-10-01 00:16",
|
|
8190
8707
|
accountNumber: "126713605718",
|
|
8191
|
-
amount:
|
|
8708
|
+
amount: 34539.18,
|
|
8192
8709
|
customer: "Rise Works Inc",
|
|
8193
8710
|
counterparty: "VEDANT JAYESHKUMAR PATI",
|
|
8194
8711
|
description: "4NnuJKyD9a8LUmkm",
|
|
8195
8712
|
transactionType: "Ach Originator Credit",
|
|
8196
8713
|
status: "PENDING",
|
|
8714
|
+
processingStatus: "SENT",
|
|
8197
8715
|
updated: "2025-10-01 00:16",
|
|
8716
|
+
isInbound: true,
|
|
8198
8717
|
achDetails: {
|
|
8199
8718
|
type: "ACH Credit",
|
|
8200
8719
|
originatorName: "Rise Works Inc",
|
|
@@ -8249,7 +8768,9 @@ var mockTransactions = [
|
|
|
8249
8768
|
description: "ACH Fee",
|
|
8250
8769
|
transactionType: "Fee Ach Transaction",
|
|
8251
8770
|
status: "POSTED",
|
|
8252
|
-
|
|
8771
|
+
processingStatus: "CONFIRMED",
|
|
8772
|
+
updated: "2025-10-01 00:09",
|
|
8773
|
+
isInbound: false
|
|
8253
8774
|
},
|
|
8254
8775
|
{
|
|
8255
8776
|
id: "3",
|
|
@@ -8261,7 +8782,9 @@ var mockTransactions = [
|
|
|
8261
8782
|
description: "Invoice Payment #INV-2024-089",
|
|
8262
8783
|
transactionType: "Wire Domestic Credit",
|
|
8263
8784
|
status: "POSTED",
|
|
8785
|
+
processingStatus: "CONFIRMED",
|
|
8264
8786
|
updated: "2025-10-01 00:12",
|
|
8787
|
+
isInbound: false,
|
|
8265
8788
|
wireDetails: {
|
|
8266
8789
|
type: "Domestic Wire",
|
|
8267
8790
|
originatorName: "Tech Solutions LLC",
|
|
@@ -8359,7 +8882,9 @@ var mockTransactions = [
|
|
|
8359
8882
|
description: "Vendor Payment",
|
|
8360
8883
|
transactionType: "Ach Originator Debit",
|
|
8361
8884
|
status: "POSTED",
|
|
8362
|
-
|
|
8885
|
+
processingStatus: "CONFIRMED",
|
|
8886
|
+
updated: "2025-09-30 23:01",
|
|
8887
|
+
isInbound: false
|
|
8363
8888
|
},
|
|
8364
8889
|
{
|
|
8365
8890
|
id: "5",
|
|
@@ -8371,7 +8896,9 @@ var mockTransactions = [
|
|
|
8371
8896
|
description: "Contractor Payment",
|
|
8372
8897
|
transactionType: "Ach Originator Credit",
|
|
8373
8898
|
status: "PENDING",
|
|
8374
|
-
|
|
8899
|
+
processingStatus: "CUSTOMER_REVIEW",
|
|
8900
|
+
updated: "2025-09-30 21:05",
|
|
8901
|
+
isInbound: false
|
|
8375
8902
|
},
|
|
8376
8903
|
{
|
|
8377
8904
|
id: "6",
|
|
@@ -8383,7 +8910,9 @@ var mockTransactions = [
|
|
|
8383
8910
|
description: "Monthly Rent Payment",
|
|
8384
8911
|
transactionType: "Wire Domestic Debit",
|
|
8385
8912
|
status: "POSTED",
|
|
8386
|
-
|
|
8913
|
+
processingStatus: "CONFIRMED",
|
|
8914
|
+
updated: "2025-09-30 20:15",
|
|
8915
|
+
isInbound: false
|
|
8387
8916
|
},
|
|
8388
8917
|
{
|
|
8389
8918
|
id: "7",
|
|
@@ -8395,7 +8924,9 @@ var mockTransactions = [
|
|
|
8395
8924
|
description: "Wire Transfer Fee",
|
|
8396
8925
|
transactionType: "Fee Wire Transaction",
|
|
8397
8926
|
status: "POSTED",
|
|
8398
|
-
|
|
8927
|
+
processingStatus: "CONFIRMED",
|
|
8928
|
+
updated: "2025-09-30 17:22",
|
|
8929
|
+
isInbound: false
|
|
8399
8930
|
},
|
|
8400
8931
|
{
|
|
8401
8932
|
id: "8",
|
|
@@ -8407,7 +8938,9 @@ var mockTransactions = [
|
|
|
8407
8938
|
description: "R&D Funding Transfer",
|
|
8408
8939
|
transactionType: "Ach Originator Credit",
|
|
8409
8940
|
status: "FAILED",
|
|
8410
|
-
|
|
8941
|
+
processingStatus: "MANUAL_REVIEW",
|
|
8942
|
+
updated: "2025-09-30 16:10",
|
|
8943
|
+
isInbound: false
|
|
8411
8944
|
}
|
|
8412
8945
|
];
|
|
8413
8946
|
var mockTransactionTimeline = [
|
|
@@ -8452,9 +8985,9 @@ var mockTransactionTimeline = [
|
|
|
8452
8985
|
];
|
|
8453
8986
|
var TransactionHistory = () => {
|
|
8454
8987
|
const navigate = reactRouterDom.useNavigate();
|
|
8455
|
-
const [currentPage, setCurrentPage] =
|
|
8456
|
-
const [rowsPerPage, setRowsPerPage] =
|
|
8457
|
-
const [filters, setFilters] =
|
|
8988
|
+
const [currentPage, setCurrentPage] = React15.useState(1);
|
|
8989
|
+
const [rowsPerPage, setRowsPerPage] = React15.useState(100);
|
|
8990
|
+
const [filters, setFilters] = React15.useState({
|
|
8458
8991
|
accountNumber: "",
|
|
8459
8992
|
product: "",
|
|
8460
8993
|
customerId: "",
|
|
@@ -8946,7 +9479,10 @@ var newTransactionSchema = zod.z.object({
|
|
|
8946
9479
|
counterpartyName: zod.z.string().min(1, "Counterparty name is required"),
|
|
8947
9480
|
amount: zod.z.string().min(1, "Amount is required"),
|
|
8948
9481
|
currency: zod.z.string().min(1, "Currency is required"),
|
|
8949
|
-
description: zod.z.string().optional()
|
|
9482
|
+
description: zod.z.string().optional(),
|
|
9483
|
+
certifyInformation: zod.z.boolean().refine((val) => val === true, {
|
|
9484
|
+
message: "You must certify the information is correct"
|
|
9485
|
+
})
|
|
8950
9486
|
});
|
|
8951
9487
|
var TRANSACTION_TYPES = [
|
|
8952
9488
|
{ value: "transfer", label: "Transfer", icon: lucideReact.ArrowLeftRight },
|
|
@@ -8986,14 +9522,14 @@ var mockCounterpartyData = {
|
|
|
8986
9522
|
};
|
|
8987
9523
|
function NewTransaction() {
|
|
8988
9524
|
const navigate = reactRouterDom.useNavigate();
|
|
8989
|
-
const [accountLookedUp, setAccountLookedUp] =
|
|
8990
|
-
const [accountData, setAccountData] =
|
|
8991
|
-
const [counterpartyLookedUp, setCounterpartyLookedUp] =
|
|
8992
|
-
const [counterpartyData, setCounterpartyData] =
|
|
8993
|
-
const [confirmationOpen, setConfirmationOpen] =
|
|
8994
|
-
const [submissionStatus, setSubmissionStatus] =
|
|
8995
|
-
const [errorMessage, setErrorMessage] =
|
|
8996
|
-
const [transactionId, setTransactionId] =
|
|
9525
|
+
const [accountLookedUp, setAccountLookedUp] = React15.useState(false);
|
|
9526
|
+
const [accountData, setAccountData] = React15.useState(null);
|
|
9527
|
+
const [counterpartyLookedUp, setCounterpartyLookedUp] = React15.useState(false);
|
|
9528
|
+
const [counterpartyData, setCounterpartyData] = React15.useState(null);
|
|
9529
|
+
const [confirmationOpen, setConfirmationOpen] = React15.useState(false);
|
|
9530
|
+
const [submissionStatus, setSubmissionStatus] = React15.useState(null);
|
|
9531
|
+
const [errorMessage, setErrorMessage] = React15.useState("");
|
|
9532
|
+
const [transactionId, setTransactionId] = React15.useState("");
|
|
8997
9533
|
const form = reactHookForm.useForm({
|
|
8998
9534
|
resolver: zod$1.zodResolver(newTransactionSchema),
|
|
8999
9535
|
defaultValues: {
|
|
@@ -9002,7 +9538,8 @@ function NewTransaction() {
|
|
|
9002
9538
|
counterpartyName: "",
|
|
9003
9539
|
amount: "",
|
|
9004
9540
|
currency: "USD",
|
|
9005
|
-
description: ""
|
|
9541
|
+
description: "",
|
|
9542
|
+
certifyInformation: false
|
|
9006
9543
|
}
|
|
9007
9544
|
});
|
|
9008
9545
|
const transactionType = form.watch("transactionType");
|
|
@@ -9128,7 +9665,6 @@ function NewTransaction() {
|
|
|
9128
9665
|
PageLayout,
|
|
9129
9666
|
{
|
|
9130
9667
|
title: "New Transaction",
|
|
9131
|
-
description: "Complete the form below to initiate a new transaction",
|
|
9132
9668
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-4xl mx-auto space-y-6", children: [
|
|
9133
9669
|
/* @__PURE__ */ jsxRuntime.jsx(FormProvider, { form, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: (e) => e.preventDefault(), children: [
|
|
9134
9670
|
!accountLookedUp ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -9136,21 +9672,20 @@ function NewTransaction() {
|
|
|
9136
9672
|
{
|
|
9137
9673
|
title: "Account Lookup",
|
|
9138
9674
|
variant: "default",
|
|
9139
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
9140
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9675
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 items-start w-full", children: [
|
|
9676
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9141
9677
|
FormInput,
|
|
9142
9678
|
{
|
|
9143
9679
|
name: "accountNumber",
|
|
9144
|
-
label: "Account Number",
|
|
9145
9680
|
placeholder: "Enter account number"
|
|
9146
9681
|
}
|
|
9147
|
-
),
|
|
9682
|
+
) }),
|
|
9148
9683
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9149
9684
|
Button,
|
|
9150
9685
|
{
|
|
9151
9686
|
onClick: handleAccountLookup,
|
|
9152
|
-
className: "w-full sm:w-auto",
|
|
9153
9687
|
disabled: !accountNumber,
|
|
9688
|
+
className: "shrink-0 mt-0 w-48",
|
|
9154
9689
|
children: [
|
|
9155
9690
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "h-4 w-4 mr-2" }),
|
|
9156
9691
|
"Lookup Account"
|
|
@@ -9227,22 +9762,21 @@ function NewTransaction() {
|
|
|
9227
9762
|
title: "Counterparty Lookup",
|
|
9228
9763
|
variant: "default",
|
|
9229
9764
|
className: cn(!transactionType && "opacity-50 pointer-events-none"),
|
|
9230
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
9231
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9765
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 items-start w-full", children: [
|
|
9766
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9232
9767
|
FormInput,
|
|
9233
9768
|
{
|
|
9234
9769
|
name: "counterpartyName",
|
|
9235
|
-
label: "Counterparty Name",
|
|
9236
9770
|
placeholder: "Enter counterparty name",
|
|
9237
9771
|
disabled: !transactionType
|
|
9238
9772
|
}
|
|
9239
|
-
),
|
|
9773
|
+
) }),
|
|
9240
9774
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9241
9775
|
Button,
|
|
9242
9776
|
{
|
|
9243
9777
|
onClick: handleCounterpartyLookup,
|
|
9244
|
-
className: "w-full sm:w-auto",
|
|
9245
9778
|
disabled: !transactionType || !counterpartyName,
|
|
9779
|
+
className: "shrink-0 mt-0 w-48",
|
|
9246
9780
|
children: [
|
|
9247
9781
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "h-4 w-4 mr-2" }),
|
|
9248
9782
|
"Lookup Counterparty"
|
|
@@ -9301,7 +9835,8 @@ function NewTransaction() {
|
|
|
9301
9835
|
name: "currency",
|
|
9302
9836
|
label: "Currency",
|
|
9303
9837
|
options: CURRENCY_OPTIONS,
|
|
9304
|
-
disabled: !counterpartyLookedUp
|
|
9838
|
+
disabled: !counterpartyLookedUp,
|
|
9839
|
+
className: "w-48"
|
|
9305
9840
|
}
|
|
9306
9841
|
)
|
|
9307
9842
|
] }),
|
|
@@ -9324,6 +9859,34 @@ function NewTransaction() {
|
|
|
9324
9859
|
variant: "default",
|
|
9325
9860
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
9326
9861
|
/* @__PURE__ */ jsxRuntime.jsx(DataGrid, { data: reviewData, columns: 2 }),
|
|
9862
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted/30 rounded-lg p-4 border border-border/50", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9863
|
+
reactHookForm.Controller,
|
|
9864
|
+
{
|
|
9865
|
+
name: "certifyInformation",
|
|
9866
|
+
control: form.control,
|
|
9867
|
+
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
9868
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
9869
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9870
|
+
Checkbox,
|
|
9871
|
+
{
|
|
9872
|
+
id: "certifyInformation",
|
|
9873
|
+
checked: field.value,
|
|
9874
|
+
onCheckedChange: field.onChange
|
|
9875
|
+
}
|
|
9876
|
+
),
|
|
9877
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9878
|
+
"label",
|
|
9879
|
+
{
|
|
9880
|
+
htmlFor: "certifyInformation",
|
|
9881
|
+
className: "text-sm font-medium leading-relaxed cursor-pointer select-none",
|
|
9882
|
+
children: "I certify that all information entered is correct and accurate to the best of my knowledge"
|
|
9883
|
+
}
|
|
9884
|
+
)
|
|
9885
|
+
] }),
|
|
9886
|
+
form.formState.errors.certifyInformation && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive ml-7", children: form.formState.errors.certifyInformation.message })
|
|
9887
|
+
] })
|
|
9888
|
+
}
|
|
9889
|
+
) }),
|
|
9327
9890
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 justify-end pt-4 border-t border-border", children: [
|
|
9328
9891
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9329
9892
|
Button,
|
|
@@ -9341,7 +9904,7 @@ function NewTransaction() {
|
|
|
9341
9904
|
type: "button",
|
|
9342
9905
|
onClick: handleSubmit,
|
|
9343
9906
|
className: "w-48",
|
|
9344
|
-
disabled: !transactionType || !accountNumber || !counterpartyName || !amount,
|
|
9907
|
+
disabled: !transactionType || !accountNumber || !counterpartyName || !amount || !form.watch("certifyInformation"),
|
|
9345
9908
|
children: [
|
|
9346
9909
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "h-4 w-4 mr-2" }),
|
|
9347
9910
|
"Submit Transaction"
|
|
@@ -9451,6 +10014,24 @@ var TransactionDetail = () => {
|
|
|
9451
10014
|
return "outline";
|
|
9452
10015
|
}
|
|
9453
10016
|
};
|
|
10017
|
+
const getProcessingStatusVariant = (status) => {
|
|
10018
|
+
switch (status) {
|
|
10019
|
+
case "CONFIRMED":
|
|
10020
|
+
return "success";
|
|
10021
|
+
case "SENT":
|
|
10022
|
+
return "success";
|
|
10023
|
+
case "SUBMITTED":
|
|
10024
|
+
return "warning";
|
|
10025
|
+
case "CUSTOMER_REVIEW":
|
|
10026
|
+
return "warning";
|
|
10027
|
+
case "MANUAL_REVIEW":
|
|
10028
|
+
return "warning";
|
|
10029
|
+
case "INITIATED":
|
|
10030
|
+
return "outline";
|
|
10031
|
+
default:
|
|
10032
|
+
return "outline";
|
|
10033
|
+
}
|
|
10034
|
+
};
|
|
9454
10035
|
const formatCurrency = (value) => {
|
|
9455
10036
|
return new Intl.NumberFormat("en-US", {
|
|
9456
10037
|
style: "currency",
|
|
@@ -9463,7 +10044,21 @@ var TransactionDetail = () => {
|
|
|
9463
10044
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9464
10045
|
PageLayout,
|
|
9465
10046
|
{
|
|
9466
|
-
title:
|
|
10047
|
+
title: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
10048
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
|
|
10049
|
+
"font-semibold",
|
|
10050
|
+
transaction.amount < 0 ? "text-destructive" : "text-success"
|
|
10051
|
+
), children: formatCurrency(transaction.amount) }),
|
|
10052
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10053
|
+
TransactionTypeBadge,
|
|
10054
|
+
{
|
|
10055
|
+
transactionType: transaction.transactionType,
|
|
10056
|
+
isInbound: transaction.isInbound
|
|
10057
|
+
}
|
|
10058
|
+
),
|
|
10059
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: getStatusVariant(transaction.status), children: transaction.status }),
|
|
10060
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: getProcessingStatusVariant(transaction.processingStatus), children: transaction.processingStatus })
|
|
10061
|
+
] }),
|
|
9467
10062
|
maxWidth: "full",
|
|
9468
10063
|
actions: [
|
|
9469
10064
|
{
|
|
@@ -9480,33 +10075,6 @@ var TransactionDetail = () => {
|
|
|
9480
10075
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col lg:flex-row items-start gap-6", children: [
|
|
9481
10076
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-6", children: [
|
|
9482
10077
|
/* @__PURE__ */ jsxRuntime.jsx(FormCard, { title: "Details", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-x-8 gap-y-4", children: [
|
|
9483
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9484
|
-
InfoField,
|
|
9485
|
-
{
|
|
9486
|
-
label: "Transaction Type",
|
|
9487
|
-
value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", children: transaction.transactionType }),
|
|
9488
|
-
layout: "horizontal"
|
|
9489
|
-
}
|
|
9490
|
-
),
|
|
9491
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9492
|
-
InfoField,
|
|
9493
|
-
{
|
|
9494
|
-
label: "Status",
|
|
9495
|
-
value: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: getStatusVariant(transaction.status), children: transaction.status }),
|
|
9496
|
-
layout: "horizontal"
|
|
9497
|
-
}
|
|
9498
|
-
),
|
|
9499
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9500
|
-
InfoField,
|
|
9501
|
-
{
|
|
9502
|
-
label: "Amount",
|
|
9503
|
-
value: /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
|
|
9504
|
-
"font-semibold",
|
|
9505
|
-
transaction.amount < 0 ? "text-destructive" : "text-success"
|
|
9506
|
-
), children: formatCurrency(transaction.amount) }),
|
|
9507
|
-
layout: "horizontal"
|
|
9508
|
-
}
|
|
9509
|
-
),
|
|
9510
10078
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9511
10079
|
InfoField,
|
|
9512
10080
|
{
|
|
@@ -9518,7 +10086,7 @@ var TransactionDetail = () => {
|
|
|
9518
10086
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9519
10087
|
InfoField,
|
|
9520
10088
|
{
|
|
9521
|
-
label: "Customer
|
|
10089
|
+
label: "Customer",
|
|
9522
10090
|
value: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "link", className: "h-auto p-0 text-sm", children: transaction.customer }),
|
|
9523
10091
|
layout: "horizontal"
|
|
9524
10092
|
}
|
|
@@ -9527,21 +10095,18 @@ var TransactionDetail = () => {
|
|
|
9527
10095
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9528
10096
|
InfoField,
|
|
9529
10097
|
{
|
|
9530
|
-
label: "
|
|
9531
|
-
value:
|
|
10098
|
+
label: "Counterparty",
|
|
10099
|
+
value: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "link", className: "h-auto p-0 text-sm", children: transaction.counterparty }),
|
|
9532
10100
|
layout: "horizontal"
|
|
9533
10101
|
}
|
|
9534
10102
|
),
|
|
9535
|
-
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Counterparty Name", value: transaction.counterparty, layout: "horizontal" }),
|
|
9536
10103
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Post Date", value: transaction.created.split(" ")[0], layout: "horizontal" }),
|
|
9537
10104
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "OFAC ID", value: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "link", className: "h-auto p-0 text-sm", children: "18323208" }), layout: "horizontal" }),
|
|
9538
10105
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Original Filename", value: "-", layout: "horizontal" }),
|
|
9539
10106
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Loaded From File", value: "iso21130757012764355B7.xml.126534273Q299", layout: "horizontal" }),
|
|
9540
10107
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Payment ID", value: transaction.id, layout: "horizontal" }),
|
|
9541
10108
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Linked Payment ID", value: "-", layout: "horizontal" }),
|
|
9542
|
-
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Is Inbound", value: "True", layout: "horizontal" }),
|
|
9543
10109
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Pending until Date", value: "-", layout: "horizontal" }),
|
|
9544
|
-
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Processing Status", value: "Sent", layout: "horizontal" }),
|
|
9545
10110
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Further Credit To", value: "-", layout: "horizontal" }),
|
|
9546
10111
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Balance Available Date", value: "-", layout: "horizontal" }),
|
|
9547
10112
|
/* @__PURE__ */ jsxRuntime.jsx(InfoField, { label: "Requester Username", value: "-", layout: "horizontal" }),
|
|
@@ -9598,8 +10163,9 @@ exports.ACHTransferSection = ACHTransferSection;
|
|
|
9598
10163
|
exports.AccountCard = AccountCard;
|
|
9599
10164
|
exports.AddressForm = AddressForm;
|
|
9600
10165
|
exports.AlertDetail = AlertDetail_default;
|
|
9601
|
-
exports.
|
|
10166
|
+
exports.AlertDetailRouter = AlertDetailRouter;
|
|
9602
10167
|
exports.AlertDocuments = AlertDocuments;
|
|
10168
|
+
exports.AlertHeaderControls = AlertHeaderControls;
|
|
9603
10169
|
exports.AlertNotes = AlertNotes;
|
|
9604
10170
|
exports.AlertTimeline = AlertTimeline;
|
|
9605
10171
|
exports.Alerts = Alerts_default;
|
|
@@ -9627,6 +10193,7 @@ exports.CardFooter = CardFooter;
|
|
|
9627
10193
|
exports.CardHeader = CardHeader;
|
|
9628
10194
|
exports.CardTitle = CardTitle;
|
|
9629
10195
|
exports.Cases = Cases_default;
|
|
10196
|
+
exports.Checkbox = Checkbox;
|
|
9630
10197
|
exports.ContactInfoCard = ContactInfoCard;
|
|
9631
10198
|
exports.Container = Container;
|
|
9632
10199
|
exports.ContextSection = ContextSection;
|
|
@@ -9682,6 +10249,7 @@ exports.MainLayout = MainLayout;
|
|
|
9682
10249
|
exports.MetricCard = MetricCard;
|
|
9683
10250
|
exports.NewTransaction = NewTransaction;
|
|
9684
10251
|
exports.NotFound = NotFound_default;
|
|
10252
|
+
exports.OFACAlertView = OFACAlertView;
|
|
9685
10253
|
exports.OriginatorCard = OriginatorCard;
|
|
9686
10254
|
exports.OriginatorFI = OriginatorFI;
|
|
9687
10255
|
exports.OriginatorFIAddress = OriginatorFIAddress;
|
|
@@ -9692,7 +10260,10 @@ exports.Popover = Popover;
|
|
|
9692
10260
|
exports.PopoverContent = PopoverContent;
|
|
9693
10261
|
exports.PopoverTrigger = PopoverTrigger;
|
|
9694
10262
|
exports.ReceiverCard = ReceiverCard;
|
|
10263
|
+
exports.ResolveAlertDialog = ResolveAlertDialog;
|
|
9695
10264
|
exports.ResponsiveGrid = ResponsiveGrid;
|
|
10265
|
+
exports.ScrollArea = ScrollArea;
|
|
10266
|
+
exports.ScrollBar = ScrollBar;
|
|
9696
10267
|
exports.Separator = Separator;
|
|
9697
10268
|
exports.Sheet = Sheet;
|
|
9698
10269
|
exports.SheetClose = SheetClose;
|
|
@@ -9730,7 +10301,16 @@ exports.SidebarTrigger = SidebarTrigger;
|
|
|
9730
10301
|
exports.Stack = Stack;
|
|
9731
10302
|
exports.Statement = Statement;
|
|
9732
10303
|
exports.StatementHeader = StatementHeader;
|
|
10304
|
+
exports.StatementView = StatementView;
|
|
9733
10305
|
exports.StatusBadge = StatusBadge;
|
|
10306
|
+
exports.Table = Table;
|
|
10307
|
+
exports.TableBody = TableBody;
|
|
10308
|
+
exports.TableCaption = TableCaption;
|
|
10309
|
+
exports.TableCell = TableCell;
|
|
10310
|
+
exports.TableFooter = TableFooter;
|
|
10311
|
+
exports.TableHead = TableHead;
|
|
10312
|
+
exports.TableHeader = TableHeader;
|
|
10313
|
+
exports.TableRow = TableRow;
|
|
9734
10314
|
exports.Tabs = Tabs;
|
|
9735
10315
|
exports.TabsContent = TabsContent;
|
|
9736
10316
|
exports.TabsList = TabsList;
|
|
@@ -9749,6 +10329,7 @@ exports.TooltipProvider = TooltipProvider;
|
|
|
9749
10329
|
exports.TooltipTrigger = TooltipTrigger;
|
|
9750
10330
|
exports.TransactionDetail = TransactionDetail_default;
|
|
9751
10331
|
exports.TransactionHistory = TransactionHistory_default;
|
|
10332
|
+
exports.TransactionTypeBadge = TransactionTypeBadge;
|
|
9752
10333
|
exports.UIKit = UIKit;
|
|
9753
10334
|
exports.UIKitShowcase = UIKitShowcase;
|
|
9754
10335
|
exports.WireDetailsSection = WireDetailsSection;
|