braid-ui 1.0.40 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as React15 from 'react';
2
- import { useState, useEffect, useCallback, useMemo } from 'react';
2
+ import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Plus, MessageSquare, Upload, FileText, Download, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Zap, Box, Settings, BarChart3, Key, ChevronLeft, AlertTriangle, XCircle, CheckCircle, Clock, Ban, Circle, Wallet, Filter, User, Loader2, ArrowDownRight, ArrowUpRight, CheckCircle2, StickyNote, FileUp, RotateCcw, Send, PlayCircle, UserPlus, ChevronsUpDown, UserCheck, CalendarIcon, Package, FileJson, DollarSign } from 'lucide-react';
7
+ import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Plus, MessageSquare, Upload, FileText, Download, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Zap, Box, Settings, BarChart3, Key, ChevronLeft, AlertTriangle, XCircle, CheckCircle, Clock, Ban, Circle, Wallet, Filter, User, Loader2, ArrowDownRight, ArrowUpRight, CheckCircle2, ArrowLeft, StickyNote, FileUp, RotateCcw, Send, PlayCircle, UserPlus, ChevronsUpDown, ArrowRightLeft, UserCheck, CalendarIcon, Package, File, FileJson, DollarSign } from 'lucide-react';
8
8
  import { createPortal } from 'react-dom';
9
9
  import { Slot } from '@radix-ui/react-slot';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
@@ -18,7 +18,7 @@ import { z } from 'zod';
18
18
  import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@radix-ui/react-collapsible';
19
19
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
20
20
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
21
- import { parseISO, isBefore, startOfDay, isAfter, endOfDay, format } from 'date-fns';
21
+ import { format, parseISO } from 'date-fns';
22
22
  import { DayPicker } from 'react-day-picker';
23
23
  import * as PopoverPrimitive from '@radix-ui/react-popover';
24
24
  import { Toaster as Toaster$1, toast as toast$1 } from 'sonner';
@@ -524,8 +524,8 @@ var reducer = (state, action) => {
524
524
  if (toastId) {
525
525
  addToRemoveQueue(toastId);
526
526
  } else {
527
- state.toasts.forEach((toast5) => {
528
- addToRemoveQueue(toast5.id);
527
+ state.toasts.forEach((toast6) => {
528
+ addToRemoveQueue(toast6.id);
529
529
  });
530
530
  }
531
531
  return {
@@ -4427,7 +4427,7 @@ function DatePicker({
4427
4427
  ) })
4428
4428
  ] });
4429
4429
  if (label) {
4430
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-2", wrapperClassName), children: [
4430
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", wrapperClassName), children: [
4431
4431
  /* @__PURE__ */ jsx("label", { className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: label }),
4432
4432
  picker
4433
4433
  ] });
@@ -5775,9 +5775,9 @@ var CounterpartyProfileCard = ({
5775
5775
  isEditing = false,
5776
5776
  onToggleEdit,
5777
5777
  hideActions = false,
5778
- className
5778
+ className,
5779
+ onEntityClick
5779
5780
  }) => {
5780
- const navigate = useNavigate();
5781
5781
  const form = useFormWithEditState({
5782
5782
  schema: counterpartyDetailSchema,
5783
5783
  defaultValues: { ...defaultCounterpartyDetail, ...data },
@@ -5900,20 +5900,6 @@ var CounterpartyProfileCard = ({
5900
5900
  ] }) });
5901
5901
  const formValues = form.watch();
5902
5902
  const idTypeLabel = formValues?.idType === "product_id" ? "Product ID" : formValues?.idType === "business_id" ? "Business ID" : formValues?.idType === "individual_id" ? "Individual ID" : "Account Number";
5903
- const getEntityLink = () => {
5904
- if (!formValues?.idValue) return null;
5905
- switch (formValues?.idType) {
5906
- case "business_id":
5907
- return `/business/${formValues.idValue}`;
5908
- case "individual_id":
5909
- return `/individual/${formValues.idValue}`;
5910
- case "account_number":
5911
- return `/account/${formValues.idValue}`;
5912
- default:
5913
- return null;
5914
- }
5915
- };
5916
- const entityLink = getEntityLink();
5917
5903
  const viewContent = /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
5918
5904
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
5919
5905
  /* @__PURE__ */ jsx(InfoField, { label: "Associated with", value: formValues?.idType === "product_id" ? "Product ID" : formValues?.idType === "business_id" ? "Business ID" : formValues?.idType === "individual_id" ? "Individual ID" : "Account Number", layout: "horizontal" }),
@@ -5921,12 +5907,12 @@ var CounterpartyProfileCard = ({
5921
5907
  InfoField,
5922
5908
  {
5923
5909
  label: idTypeLabel,
5924
- value: entityLink ? /* @__PURE__ */ jsx(
5910
+ value: formValues?.idValue && formValues?.idType && onEntityClick ? /* @__PURE__ */ jsx(
5925
5911
  "button",
5926
5912
  {
5927
5913
  onClick: (e) => {
5928
5914
  e.preventDefault();
5929
- navigate(entityLink);
5915
+ onEntityClick(formValues.idType, formValues.idValue);
5930
5916
  },
5931
5917
  className: "text-primary hover:underline font-medium text-left cursor-pointer",
5932
5918
  children: formValues?.idValue || "-"
@@ -6156,12 +6142,41 @@ var CounterpartyDetailView = ({
6156
6142
  currentStatus,
6157
6143
  isEditingProfile,
6158
6144
  mockPaymentMethods: mockPaymentMethods2,
6159
- documentsTable,
6145
+ documents,
6160
6146
  onStatusChange,
6161
6147
  onToggleProfileEdit,
6162
6148
  onAddPaymentMethod,
6163
- onAddDocument
6149
+ onAddDocument,
6150
+ onEntityClick
6164
6151
  }) => {
6152
+ const documentColumns = [
6153
+ {
6154
+ key: "name",
6155
+ title: "Document Name",
6156
+ sortable: true,
6157
+ width: "40%"
6158
+ },
6159
+ {
6160
+ key: "type",
6161
+ title: "Type",
6162
+ sortable: true,
6163
+ width: "20%"
6164
+ },
6165
+ {
6166
+ key: "uploadedDate",
6167
+ title: "Uploaded",
6168
+ sortable: true,
6169
+ width: "20%"
6170
+ },
6171
+ {
6172
+ key: "status",
6173
+ title: "Status",
6174
+ sortable: true,
6175
+ width: "20%",
6176
+ align: "right",
6177
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "capitalize", children: value })
6178
+ }
6179
+ ];
6165
6180
  return /* @__PURE__ */ jsx(
6166
6181
  PageLayout,
6167
6182
  {
@@ -6192,7 +6207,8 @@ var CounterpartyDetailView = ({
6192
6207
  CounterpartyProfileCard,
6193
6208
  {
6194
6209
  isEditing: isEditingProfile,
6195
- onToggleEdit: onToggleProfileEdit
6210
+ onToggleEdit: onToggleProfileEdit,
6211
+ onEntityClick
6196
6212
  }
6197
6213
  ),
6198
6214
  /* @__PURE__ */ jsxs(Card, { children: [
@@ -6216,7 +6232,16 @@ var CounterpartyDetailView = ({
6216
6232
  "Document"
6217
6233
  ] })
6218
6234
  ] }),
6219
- /* @__PURE__ */ jsx(CardContent, { children: documentsTable })
6235
+ /* @__PURE__ */ jsx(CardContent, { children: documents.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-4 text-sm text-muted-foreground", children: [
6236
+ /* @__PURE__ */ jsx(FileText, { className: "h-5 w-5 opacity-50" }),
6237
+ /* @__PURE__ */ jsx("p", { children: "No documents found" })
6238
+ ] }) : /* @__PURE__ */ jsx(
6239
+ DataTable,
6240
+ {
6241
+ columns: documentColumns,
6242
+ data: documents
6243
+ }
6244
+ ) })
6220
6245
  ] })
6221
6246
  ] }),
6222
6247
  /* @__PURE__ */ jsx("div", { className: "lg:w-64", children: /* @__PURE__ */ jsx(CounterpartyStatusCard, { isEditing: false, onToggleEdit: () => {
@@ -8346,7 +8371,8 @@ var DetailPageLayout = ({
8346
8371
  description,
8347
8372
  cards,
8348
8373
  actions,
8349
- initialEditingState = {}
8374
+ initialEditingState = {},
8375
+ headerContent
8350
8376
  }) => {
8351
8377
  const [editingCards, setEditingCards] = useState(
8352
8378
  initialEditingState
@@ -8365,6 +8391,7 @@ var DetailPageLayout = ({
8365
8391
  {
8366
8392
  title,
8367
8393
  description,
8394
+ headerContent,
8368
8395
  actions: actions?.map((action) => ({
8369
8396
  label: action.label,
8370
8397
  variant: action.variant || "default",
@@ -11509,39 +11536,24 @@ var mockPaymentMethods = [
11509
11536
  ];
11510
11537
  var CounterpartyDetail = () => {
11511
11538
  const { id } = useParams();
11512
- useNavigate();
11539
+ const navigate = useNavigate();
11513
11540
  const counterparty = mockCounterpartiesList.find((c) => c.id === id);
11514
11541
  const counterpartyDocuments = id ? mockBusinessDocuments[id] || [] : [];
11515
11542
  const [currentStatus, setCurrentStatus] = useState(counterparty?.status || "ACTIVE");
11516
11543
  const [isEditingProfile, setIsEditingProfile] = useState(false);
11517
- const documentColumns = [
11518
- {
11519
- key: "name",
11520
- title: "Document Name",
11521
- sortable: true,
11522
- width: "40%"
11523
- },
11524
- {
11525
- key: "type",
11526
- title: "Type",
11527
- sortable: true,
11528
- width: "20%"
11529
- },
11530
- {
11531
- key: "uploadedDate",
11532
- title: "Uploaded",
11533
- sortable: true,
11534
- width: "20%"
11535
- },
11536
- {
11537
- key: "status",
11538
- title: "Status",
11539
- sortable: true,
11540
- width: "20%",
11541
- align: "right",
11542
- render: (value) => /* @__PURE__ */ jsx("span", { className: "capitalize", children: value })
11544
+ const handleEntityClick = (entityType, entityId) => {
11545
+ switch (entityType) {
11546
+ case "business_id":
11547
+ navigate(`/business/${entityId}`);
11548
+ break;
11549
+ case "individual_id":
11550
+ navigate(`/individual/${entityId}`);
11551
+ break;
11552
+ case "account_number":
11553
+ navigate(`/account/${entityId}`);
11554
+ break;
11543
11555
  }
11544
- ];
11556
+ };
11545
11557
  const handleStatusChange = (newStatus) => {
11546
11558
  setCurrentStatus(newStatus);
11547
11559
  };
@@ -11554,21 +11566,6 @@ var CounterpartyDetail = () => {
11554
11566
  const handleAddDocument = () => {
11555
11567
  console.log("Add document");
11556
11568
  };
11557
- const documentsTable = useMemo(() => {
11558
- if (counterpartyDocuments.length === 0) {
11559
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-4 text-sm text-muted-foreground", children: [
11560
- /* @__PURE__ */ jsx(FileText, { className: "h-5 w-5 opacity-50" }),
11561
- /* @__PURE__ */ jsx("p", { children: "No documents found" })
11562
- ] });
11563
- }
11564
- return /* @__PURE__ */ jsx(
11565
- DataTable,
11566
- {
11567
- columns: documentColumns,
11568
- data: counterpartyDocuments
11569
- }
11570
- );
11571
- }, [counterpartyDocuments, documentColumns]);
11572
11569
  if (!counterparty) {
11573
11570
  return /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-8", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
11574
11571
  /* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold mb-2", children: "Counterparty Not Found" }),
@@ -11583,15 +11580,63 @@ var CounterpartyDetail = () => {
11583
11580
  currentStatus,
11584
11581
  isEditingProfile,
11585
11582
  mockPaymentMethods,
11586
- documentsTable,
11583
+ documents: counterpartyDocuments,
11587
11584
  onStatusChange: handleStatusChange,
11588
11585
  onToggleProfileEdit: handleToggleProfileEdit,
11589
11586
  onAddPaymentMethod: handleAddPaymentMethod,
11590
- onAddDocument: handleAddDocument
11587
+ onAddDocument: handleAddDocument,
11588
+ onEntityClick: handleEntityClick
11591
11589
  }
11592
11590
  );
11593
11591
  };
11594
11592
  var CounterpartyDetail_default = CounterpartyDetail;
11593
+ var CreateCounterpartyView = ({
11594
+ paymentMethods,
11595
+ onPaymentMethodsChange,
11596
+ onBasicInfoChange,
11597
+ onCancel,
11598
+ onSubmit
11599
+ }) => {
11600
+ return /* @__PURE__ */ jsx(
11601
+ PageLayout,
11602
+ {
11603
+ title: "Create Counterparty",
11604
+ description: "Create a new counterparty with all required information",
11605
+ actions: [
11606
+ { label: "Cancel", variant: "outline", onClick: onCancel },
11607
+ { label: "Create Counterparty", variant: "default", onClick: onSubmit }
11608
+ ],
11609
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
11610
+ /* @__PURE__ */ jsxs(Card, { children: [
11611
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Basic Information" }) }),
11612
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(CounterpartyBasicInfo, { onDataChange: onBasicInfoChange }) })
11613
+ ] }),
11614
+ /* @__PURE__ */ jsxs(Card, { children: [
11615
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { children: [
11616
+ "Address",
11617
+ paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
11618
+ ] }) }),
11619
+ /* @__PURE__ */ jsxs(CardContent, { children: [
11620
+ paymentMethods.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Optional for ACH payments, required for wire transfers" }),
11621
+ paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Required because you have wire payment methods" }),
11622
+ /* @__PURE__ */ jsx(
11623
+ AddressForm,
11624
+ {
11625
+ title: "",
11626
+ description: "",
11627
+ showApartment: true
11628
+ }
11629
+ )
11630
+ ] })
11631
+ ] }),
11632
+ /* @__PURE__ */ jsxs(Card, { children: [
11633
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Payment Configuration" }) }),
11634
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(PaymentInformationSection, { onPaymentMethodsChange }) })
11635
+ ] })
11636
+ ] })
11637
+ }
11638
+ );
11639
+ };
11595
11640
  var CreateCounterparty = () => {
11596
11641
  const navigate = useNavigate();
11597
11642
  const [counterpartyData, setCounterpartyData] = useState(null);
@@ -11602,11 +11647,11 @@ var CreateCounterparty = () => {
11602
11647
  const handleBasicInfoChange = (data) => {
11603
11648
  setCounterpartyData(data);
11604
11649
  };
11605
- const counterpartyType = counterpartyData?.type || "";
11606
11650
  const handleCancel = () => {
11607
11651
  navigate("/counterparty");
11608
11652
  };
11609
11653
  const handleSubmit = () => {
11654
+ const counterpartyType = counterpartyData?.type || "";
11610
11655
  if (!counterpartyType) {
11611
11656
  toast({
11612
11657
  title: "Error",
@@ -11639,42 +11684,13 @@ var CreateCounterparty = () => {
11639
11684
  }, 1e3);
11640
11685
  };
11641
11686
  return /* @__PURE__ */ jsx(
11642
- PageLayout,
11687
+ CreateCounterpartyView,
11643
11688
  {
11644
- title: "Create Counterparty",
11645
- description: "Create a new counterparty with all required information",
11646
- actions: [
11647
- { label: "Cancel", variant: "outline", onClick: handleCancel },
11648
- { label: "Create Counterparty", variant: "default", onClick: handleSubmit }
11649
- ],
11650
- children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
11651
- /* @__PURE__ */ jsxs(Card, { children: [
11652
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Basic Information" }) }),
11653
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(CounterpartyBasicInfo, { onDataChange: handleBasicInfoChange }) })
11654
- ] }),
11655
- /* @__PURE__ */ jsxs(Card, { children: [
11656
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { children: [
11657
- "Address",
11658
- paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
11659
- ] }) }),
11660
- /* @__PURE__ */ jsxs(CardContent, { children: [
11661
- paymentMethods.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Optional for ACH payments, required for wire transfers" }),
11662
- paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Required because you have wire payment methods" }),
11663
- /* @__PURE__ */ jsx(
11664
- AddressForm,
11665
- {
11666
- title: "",
11667
- description: "",
11668
- showApartment: true
11669
- }
11670
- )
11671
- ] })
11672
- ] }),
11673
- /* @__PURE__ */ jsxs(Card, { children: [
11674
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Payment Configuration" }) }),
11675
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(PaymentInformationSection, { onPaymentMethodsChange: handlePaymentMethodsChange }) })
11676
- ] })
11677
- ] })
11689
+ paymentMethods,
11690
+ onPaymentMethodsChange: handlePaymentMethodsChange,
11691
+ onBasicInfoChange: handleBasicInfoChange,
11692
+ onCancel: handleCancel,
11693
+ onSubmit: handleSubmit
11678
11694
  }
11679
11695
  );
11680
11696
  };
@@ -14225,7 +14241,7 @@ var TransactionDetail = () => {
14225
14241
  /* @__PURE__ */ jsx(Button, { onClick: () => navigate("/transactions/history"), children: "Back to Transaction History" })
14226
14242
  ] }) });
14227
14243
  }
14228
- const getStatusVariant2 = (status) => {
14244
+ const getStatusVariant3 = (status) => {
14229
14245
  switch (status) {
14230
14246
  case "POSTED":
14231
14247
  return "success";
@@ -14281,7 +14297,7 @@ var TransactionDetail = () => {
14281
14297
  isInbound: transaction.isInbound
14282
14298
  }
14283
14299
  ),
14284
- /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant2(transaction.status), children: transaction.status }),
14300
+ /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant3(transaction.status), children: transaction.status }),
14285
14301
  /* @__PURE__ */ jsx(Badge, { variant: getProcessingStatusVariant(transaction.processingStatus), children: transaction.processingStatus })
14286
14302
  ] }),
14287
14303
  maxWidth: "full",
@@ -14380,22 +14396,22 @@ function UIKit() {
14380
14396
  ] })
14381
14397
  ] }) }) });
14382
14398
  }
14383
- function OFACFiltersSheet({
14399
+ function VelocityLimitFiltersSheet({
14384
14400
  filters,
14385
14401
  onFilterChange,
14386
14402
  onResetFilters
14387
14403
  }) {
14388
- const hasActiveFilters = filters.status !== "" || filters.entityType !== "" || filters.startDate !== void 0 || filters.endDate !== void 0;
14404
+ const hasActiveFilters = filters.accountNumber !== "" || filters.counterpartyId !== "" || filters.productId !== "" || filters.programId !== "" || filters.limitName !== "" || filters.limitType !== "" || filters.status !== "" || filters.aggregationLevel !== "" || filters.action !== "" || filters.transactionType !== "" || filters.transactionGroup !== "";
14389
14405
  return /* @__PURE__ */ jsxs(Sheet, { children: [
14390
14406
  /* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "outline", children: [
14391
14407
  /* @__PURE__ */ jsx(Filter, { className: "mr-2 h-4 w-4" }),
14392
14408
  "Filters",
14393
- hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "ml-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground", children: [filters.status, filters.entityType, filters.startDate, filters.endDate].filter(Boolean).length })
14409
+ hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "ml-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground", children: Object.values(filters).filter((v) => v !== "").length })
14394
14410
  ] }) }),
14395
14411
  /* @__PURE__ */ jsxs(SheetContent, { className: "w-full sm:max-w-md overflow-y-auto", children: [
14396
14412
  /* @__PURE__ */ jsxs(SheetHeader, { children: [
14397
14413
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
14398
- /* @__PURE__ */ jsx(SheetTitle, { children: "Filter OFAC Checks" }),
14414
+ /* @__PURE__ */ jsx(SheetTitle, { children: "Filter Velocity Limits" }),
14399
14415
  hasActiveFilters && /* @__PURE__ */ jsxs(
14400
14416
  Button,
14401
14417
  {
@@ -14410,20 +14426,78 @@ function OFACFiltersSheet({
14410
14426
  }
14411
14427
  )
14412
14428
  ] }),
14413
- /* @__PURE__ */ jsx(SheetDescription, { children: "Filter OFAC screening results by status, entity type, and date range" })
14429
+ /* @__PURE__ */ jsx(SheetDescription, { children: "Filter velocity limits by account, limit details, and transaction settings" })
14414
14430
  ] }),
14415
- /* @__PURE__ */ jsxs("div", { className: "space-y-6 mt-6", children: [
14431
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4 mt-6", children: [
14432
+ /* @__PURE__ */ jsx(
14433
+ EnhancedInput,
14434
+ {
14435
+ label: "Account Number",
14436
+ placeholder: "Enter account number",
14437
+ value: filters.accountNumber,
14438
+ onChange: (e) => onFilterChange("accountNumber", e.target.value)
14439
+ }
14440
+ ),
14441
+ /* @__PURE__ */ jsx(
14442
+ EnhancedInput,
14443
+ {
14444
+ label: "Counterparty ID",
14445
+ placeholder: "Enter counterparty ID",
14446
+ value: filters.counterpartyId,
14447
+ onChange: (e) => onFilterChange("counterpartyId", e.target.value)
14448
+ }
14449
+ ),
14450
+ /* @__PURE__ */ jsx(
14451
+ EnhancedInput,
14452
+ {
14453
+ label: "Product ID",
14454
+ placeholder: "Enter product ID",
14455
+ value: filters.productId,
14456
+ onChange: (e) => onFilterChange("productId", e.target.value)
14457
+ }
14458
+ ),
14459
+ /* @__PURE__ */ jsx(
14460
+ EnhancedInput,
14461
+ {
14462
+ label: "Program ID",
14463
+ placeholder: "Enter program ID",
14464
+ value: filters.programId,
14465
+ onChange: (e) => onFilterChange("programId", e.target.value)
14466
+ }
14467
+ ),
14468
+ /* @__PURE__ */ jsx(
14469
+ EnhancedInput,
14470
+ {
14471
+ label: "Limit Name",
14472
+ placeholder: "Enter limit name",
14473
+ value: filters.limitName,
14474
+ onChange: (e) => onFilterChange("limitName", e.target.value)
14475
+ }
14476
+ ),
14477
+ /* @__PURE__ */ jsx(
14478
+ EnhancedSelect,
14479
+ {
14480
+ label: "Limit Type",
14481
+ placeholder: "Select limit type",
14482
+ options: [
14483
+ { value: "all", label: "All types" },
14484
+ { value: "AMOUNT", label: "Amount" },
14485
+ { value: "COUNT", label: "Count" }
14486
+ ],
14487
+ value: filters.limitType || "all",
14488
+ onValueChange: (value) => onFilterChange("limitType", value === "all" ? "" : value)
14489
+ }
14490
+ ),
14416
14491
  /* @__PURE__ */ jsx(
14417
14492
  EnhancedSelect,
14418
14493
  {
14419
14494
  label: "Status",
14420
- placeholder: "All statuses",
14495
+ placeholder: "Select status",
14421
14496
  options: [
14422
14497
  { value: "all", label: "All statuses" },
14423
- { value: "NO MATCH", label: "No Match" },
14424
- { value: "REVIEW", label: "Review" },
14425
- { value: "CLEARED", label: "Cleared" },
14426
- { value: "CONFIRMED", label: "Confirmed" }
14498
+ { value: "ACTIVE", label: "Active" },
14499
+ { value: "INACTIVE", label: "Inactive" },
14500
+ { value: "DELETED", label: "Deleted" }
14427
14501
  ],
14428
14502
  value: filters.status || "all",
14429
14503
  onValueChange: (value) => onFilterChange("status", value === "all" ? "" : value)
@@ -14432,180 +14506,246 @@ function OFACFiltersSheet({
14432
14506
  /* @__PURE__ */ jsx(
14433
14507
  EnhancedSelect,
14434
14508
  {
14435
- label: "Entity Type",
14436
- placeholder: "All entity types",
14509
+ label: "Aggregation Level",
14510
+ placeholder: "Select aggregation level",
14437
14511
  options: [
14438
- { value: "all", label: "All entity types" },
14439
- { value: "Business", label: "Business" },
14440
- { value: "Individual", label: "Individual" },
14441
- { value: "Counterparty", label: "Counterparty" }
14512
+ { value: "all", label: "All levels" },
14513
+ { value: "ACCOUNT", label: "Account" },
14514
+ { value: "PROGRAM", label: "Program" },
14515
+ { value: "PRODUCT", label: "Product" }
14442
14516
  ],
14443
- value: filters.entityType || "all",
14444
- onValueChange: (value) => onFilterChange("entityType", value === "all" ? "" : value)
14517
+ value: filters.aggregationLevel || "all",
14518
+ onValueChange: (value) => onFilterChange("aggregationLevel", value === "all" ? "" : value)
14445
14519
  }
14446
14520
  ),
14447
14521
  /* @__PURE__ */ jsx(
14448
- DatePicker,
14522
+ EnhancedSelect,
14449
14523
  {
14450
- date: filters.startDate,
14451
- onDateChange: (date) => onFilterChange("startDate", date),
14452
- label: "Start Date",
14453
- placeholder: "MM/DD/YYYY"
14524
+ label: "Action",
14525
+ placeholder: "Select action",
14526
+ options: [
14527
+ { value: "all", label: "All actions" },
14528
+ { value: "DECLINE", label: "Decline" },
14529
+ { value: "FLAG", label: "Flag" }
14530
+ ],
14531
+ value: filters.action || "all",
14532
+ onValueChange: (value) => onFilterChange("action", value === "all" ? "" : value)
14454
14533
  }
14455
14534
  ),
14456
14535
  /* @__PURE__ */ jsx(
14457
- DatePicker,
14536
+ EnhancedSelect,
14458
14537
  {
14459
- date: filters.endDate,
14460
- onDateChange: (date) => onFilterChange("endDate", date),
14461
- label: "End Date",
14462
- placeholder: "MM/DD/YYYY",
14463
- disabledDates: (date) => filters.startDate ? date < filters.startDate : false
14538
+ label: "Transaction Type",
14539
+ placeholder: "Select transaction type",
14540
+ options: [
14541
+ { value: "all", label: "All types" },
14542
+ { value: "WIRE", label: "Wire" },
14543
+ { value: "ACH", label: "ACH" },
14544
+ { value: "CARD", label: "Card" }
14545
+ ],
14546
+ value: filters.transactionType || "all",
14547
+ onValueChange: (value) => onFilterChange("transactionType", value === "all" ? "" : value)
14464
14548
  }
14465
- )
14549
+ ),
14550
+ /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
14551
+ EnhancedSelect,
14552
+ {
14553
+ label: "Transaction Group",
14554
+ placeholder: "Select transaction group",
14555
+ options: [
14556
+ { value: "all", label: "All groups" },
14557
+ { value: "INBOUND", label: "Inbound" },
14558
+ { value: "OUTBOUND", label: "Outbound" }
14559
+ ],
14560
+ value: filters.transactionGroup || "all",
14561
+ onValueChange: (value) => onFilterChange("transactionGroup", value === "all" ? "" : value)
14562
+ }
14563
+ ) })
14466
14564
  ] })
14467
14565
  ] })
14468
14566
  ] });
14469
14567
  }
14470
14568
 
14471
- // src/lib/mock-data/ofac-data.ts
14472
- var mockOFACChecks = [
14473
- {
14474
- id: "ofac-001",
14475
- created: "2024-01-15T10:30:00Z",
14476
- entityId: "8112488",
14477
- entityName: "Acme Corporation",
14478
- entityType: "Business",
14479
- alertId: "ALT-001",
14480
- status: "CLEARED"
14481
- },
14482
- {
14483
- id: "ofac-002",
14484
- created: "2024-01-14T14:22:00Z",
14485
- entityId: "8111609",
14486
- entityName: "Global Tech Industries",
14487
- entityType: "Business",
14488
- alertId: "ALT-002",
14489
- status: "REVIEW"
14490
- },
14491
- {
14492
- id: "ofac-003",
14493
- created: "2024-01-14T09:15:00Z",
14494
- entityId: "IND-001",
14495
- entityName: "John Smith",
14496
- entityType: "Individual",
14497
- alertId: null,
14498
- status: "NO MATCH"
14499
- },
14500
- {
14501
- id: "ofac-004",
14502
- created: "2024-01-13T16:45:00Z",
14503
- entityId: "8111026",
14504
- entityName: "Innovation Partners LLC",
14505
- entityType: "Business",
14506
- alertId: "ALT-003",
14507
- status: "CONFIRMED"
14508
- },
14509
- {
14510
- id: "ofac-005",
14511
- created: "2024-01-13T11:20:00Z",
14512
- entityId: "IND-002",
14513
- entityName: "Jane Doe",
14514
- entityType: "Individual",
14515
- alertId: null,
14516
- status: "NO MATCH"
14517
- },
14518
- {
14519
- id: "ofac-006",
14520
- created: "2024-01-12T13:30:00Z",
14521
- entityId: "CP-001",
14522
- entityName: "International Suppliers Inc",
14523
- entityType: "Counterparty",
14524
- alertId: "ALT-004",
14525
- status: "REVIEW"
14526
- },
14527
- {
14528
- id: "ofac-007",
14529
- created: "2024-01-12T08:00:00Z",
14530
- entityId: "8110892",
14531
- entityName: "NextGen Solutions",
14532
- entityType: "Business",
14533
- alertId: null,
14534
- status: "NO MATCH"
14535
- },
14536
- {
14537
- id: "ofac-008",
14538
- created: "2024-01-11T15:10:00Z",
14539
- entityId: "IND-003",
14540
- entityName: "Robert Johnson",
14541
- entityType: "Individual",
14542
- alertId: "ALT-005",
14543
- status: "CLEARED"
14544
- },
14545
- {
14546
- id: "ofac-009",
14547
- created: "2024-01-11T10:45:00Z",
14548
- entityId: "CP-002",
14549
- entityName: "Overseas Trading Company",
14550
- entityType: "Counterparty",
14551
- alertId: "ALT-006",
14552
- status: "REVIEW"
14553
- },
14554
- {
14555
- id: "ofac-010",
14556
- created: "2024-01-10T14:25:00Z",
14557
- entityId: "8110654",
14558
- entityName: "Digital Ventures Group",
14559
- entityType: "Business",
14560
- alertId: null,
14561
- status: "NO MATCH"
14569
+ // src/lib/mock-data/velocity-limit-data.ts
14570
+ var mockVelocityLimits = [
14571
+ {
14572
+ id: "1",
14573
+ created: "2025-11-13T10:00:00Z",
14574
+ limitName: "QA - Decline inbound wire",
14575
+ limitType: "transaction",
14576
+ action: "DECLINE",
14577
+ status: "ACTIVE",
14578
+ associatedEntity: "Account",
14579
+ associatedEntityId: "9539334834",
14580
+ transactionGroup: ["inbound"],
14581
+ transactionType: ["wire"],
14582
+ aggregationLevel: "account",
14583
+ timePeriod: "daily",
14584
+ maxAmount: "50000",
14585
+ maxCount: "10"
14586
+ },
14587
+ {
14588
+ id: "2",
14589
+ created: "2025-11-13T10:00:00Z",
14590
+ limitName: "QA - Decline inbound wire",
14591
+ limitType: "transaction",
14592
+ action: "DECLINE",
14593
+ status: "ACTIVE",
14594
+ associatedEntity: "Account",
14595
+ associatedEntityId: "8895578481",
14596
+ transactionType: ["wire"],
14597
+ aggregationLevel: "account",
14598
+ timePeriod: "daily",
14599
+ maxAmount: "100000",
14600
+ maxCount: "20"
14601
+ },
14602
+ {
14603
+ id: "3",
14604
+ created: "2025-11-13T10:00:00Z",
14605
+ limitName: "QA - Decline inbound wire",
14606
+ limitType: "transaction",
14607
+ action: "DECLINE",
14608
+ status: "ACTIVE",
14609
+ associatedEntity: "Account",
14610
+ associatedEntityId: "86046257",
14611
+ transactionType: ["wire"],
14612
+ aggregationLevel: "transaction",
14613
+ maxAmount: "25000"
14614
+ },
14615
+ {
14616
+ id: "4",
14617
+ created: "2025-11-13T10:00:00Z",
14618
+ limitName: "QA - Decline inbound wire",
14619
+ limitType: "transaction",
14620
+ action: "DECLINE",
14621
+ status: "ACTIVE",
14622
+ associatedEntity: "Account",
14623
+ associatedEntityId: "86046257",
14624
+ transactionType: ["ACH_RECEIVER_CREDIT", "ACH_ORIGINATOR_CREDIT", "WIRE_INBOUND", "WIRE_OUTBOUND", "CARD_TRANSACTION"],
14625
+ aggregationLevel: "account",
14626
+ timePeriod: "monthly",
14627
+ maxAmount: "500000",
14628
+ maxCount: "50"
14629
+ },
14630
+ {
14631
+ id: "5",
14632
+ created: "2025-10-23T10:00:00Z",
14633
+ limitName: "prohibited country list v2",
14634
+ limitType: "prohibited_entity",
14635
+ action: "DECLINE",
14636
+ status: "DELETED",
14637
+ associatedEntity: "Global",
14638
+ entityListName: "OFAC Sanctioned Countries",
14639
+ entityType: "country",
14640
+ prohibitedEntities: "Iran, North Korea, Syria, Cuba"
14641
+ },
14642
+ {
14643
+ id: "6",
14644
+ created: "2025-10-16T10:00:00Z",
14645
+ limitName: "global wire debit limit",
14646
+ limitType: "transaction",
14647
+ action: "DECLINE",
14648
+ status: "INACTIVE",
14649
+ associatedEntity: "Global",
14650
+ transactionType: ["wire"],
14651
+ aggregationLevel: "program",
14652
+ timePeriod: "daily",
14653
+ maxAmount: "1000000",
14654
+ maxCount: "100"
14655
+ },
14656
+ {
14657
+ id: "7",
14658
+ created: "2025-10-16T10:00:00Z",
14659
+ limitName: "global wire debit limit",
14660
+ limitType: "transaction",
14661
+ action: "DECLINE",
14662
+ status: "ACTIVE",
14663
+ associatedEntity: "Global",
14664
+ transactionType: ["wire"],
14665
+ aggregationLevel: "program",
14666
+ timePeriod: "daily",
14667
+ maxAmount: "1000000",
14668
+ maxCount: "100"
14669
+ },
14670
+ {
14671
+ id: "8",
14672
+ created: "2025-09-04T10:00:00Z",
14673
+ limitName: "wire_ach_rounded_amt",
14674
+ limitType: "round_number",
14675
+ action: "FLAG",
14676
+ status: "ACTIVE",
14677
+ associatedEntity: "Program",
14678
+ associatedEntityId: "167989",
14679
+ amountThreshold: "10000",
14680
+ roundPattern: "1000, 5000, 10000, 50000"
14681
+ },
14682
+ {
14683
+ id: "9",
14684
+ created: "2025-08-20T10:00:00Z",
14685
+ limitName: "receiver name validation",
14686
+ limitType: "receiver_name_mismatch",
14687
+ action: "FLAG",
14688
+ status: "ACTIVE",
14689
+ associatedEntity: "Global",
14690
+ mismatchThreshold: "80",
14691
+ comparisonMethod: "fuzzy"
14562
14692
  }
14563
14693
  ];
14564
14694
  var getStatusVariant = (status) => {
14565
14695
  switch (status) {
14566
- case "NO MATCH":
14696
+ case "ACTIVE":
14567
14697
  return "success";
14568
- case "REVIEW":
14698
+ case "INACTIVE":
14569
14699
  return "warning";
14570
- case "CLEARED":
14571
- return "active";
14572
- case "CONFIRMED":
14700
+ case "DELETED":
14573
14701
  return "destructive";
14574
14702
  default:
14575
14703
  return "secondary";
14576
14704
  }
14577
14705
  };
14578
- var getEntityUrl = (entityType, entityId) => {
14579
- switch (entityType) {
14580
- case "Business":
14581
- return `/business/${entityId}`;
14582
- case "Individual":
14583
- return `/individual/${entityId}`;
14584
- case "Counterparty":
14585
- return `/counterparty/${entityId}`;
14706
+ var getActionVariant = (action) => {
14707
+ switch (action) {
14708
+ case "DECLINE":
14709
+ return "destructive";
14710
+ case "FLAG":
14711
+ return "warning";
14586
14712
  default:
14587
- return "#";
14713
+ return "secondary";
14588
14714
  }
14589
14715
  };
14590
- function OFAC() {
14716
+ function VelocityLimits() {
14591
14717
  const navigate = useNavigate();
14592
14718
  const [sortField, setSortField] = useState("created");
14593
14719
  const [sortDirection, setSortDirection] = useState("desc");
14594
14720
  const [filters, setFilters] = useState({
14721
+ accountNumber: "",
14722
+ counterpartyId: "",
14723
+ productId: "",
14724
+ programId: "",
14725
+ limitName: "",
14726
+ limitType: "",
14595
14727
  status: "",
14596
- entityType: "",
14597
- startDate: void 0,
14598
- endDate: void 0
14728
+ aggregationLevel: "",
14729
+ action: "",
14730
+ transactionType: "",
14731
+ transactionGroup: ""
14599
14732
  });
14600
14733
  const handleFilterChange = (field, value) => {
14601
14734
  setFilters((prev) => ({ ...prev, [field]: value }));
14602
14735
  };
14603
14736
  const handleResetFilters = () => {
14604
14737
  setFilters({
14738
+ accountNumber: "",
14739
+ counterpartyId: "",
14740
+ productId: "",
14741
+ programId: "",
14742
+ limitName: "",
14743
+ limitType: "",
14605
14744
  status: "",
14606
- entityType: "",
14607
- startDate: void 0,
14608
- endDate: void 0
14745
+ aggregationLevel: "",
14746
+ action: "",
14747
+ transactionType: "",
14748
+ transactionGroup: ""
14609
14749
  });
14610
14750
  };
14611
14751
  const handleSort = (field) => {
@@ -14616,27 +14756,24 @@ function OFAC() {
14616
14756
  setSortDirection("desc");
14617
14757
  }
14618
14758
  };
14619
- const filteredChecks = useMemo(() => {
14620
- return mockOFACChecks.filter((check) => {
14621
- if (filters.status && check.status !== filters.status) {
14759
+ const filteredLimits = useMemo(() => {
14760
+ return mockVelocityLimits.filter((limit) => {
14761
+ if (filters.accountNumber && limit.associatedEntityId && !limit.associatedEntityId.includes(filters.accountNumber)) {
14622
14762
  return false;
14623
14763
  }
14624
- if (filters.entityType && check.entityType !== filters.entityType) {
14764
+ if (filters.limitName && !limit.limitName.toLowerCase().includes(filters.limitName.toLowerCase())) {
14625
14765
  return false;
14626
14766
  }
14627
- if (filters.startDate || filters.endDate) {
14628
- const checkDate = parseISO(check.created);
14629
- if (filters.startDate && isBefore(checkDate, startOfDay(filters.startDate))) {
14630
- return false;
14631
- }
14632
- if (filters.endDate && isAfter(checkDate, endOfDay(filters.endDate))) {
14633
- return false;
14634
- }
14767
+ if (filters.action && limit.action !== filters.action) {
14768
+ return false;
14769
+ }
14770
+ if (filters.status && limit.status !== filters.status) {
14771
+ return false;
14635
14772
  }
14636
14773
  return true;
14637
14774
  });
14638
14775
  }, [filters]);
14639
- const sortedChecks = [...filteredChecks].sort((a, b) => {
14776
+ const sortedLimits = [...filteredLimits].sort((a, b) => {
14640
14777
  const aValue = a[sortField];
14641
14778
  const bValue = b[sortField];
14642
14779
  if (aValue == null) return 1;
@@ -14652,62 +14789,1035 @@ function OFAC() {
14652
14789
  key: "created",
14653
14790
  title: "Created",
14654
14791
  sortable: true,
14655
- render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: format(parseISO(value), "MMM d, yyyy h:mm a") })
14792
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: format(parseISO(value), "yyyy-MM-dd") })
14656
14793
  },
14657
14794
  {
14658
- key: "entityName",
14659
- title: "Entity",
14660
- render: (value, row) => /* @__PURE__ */ jsx(
14661
- "button",
14795
+ key: "limitName",
14796
+ title: "Limit Name",
14797
+ sortable: true,
14798
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: value })
14799
+ },
14800
+ {
14801
+ key: "action",
14802
+ title: "Action",
14803
+ sortable: true,
14804
+ render: (value) => /* @__PURE__ */ jsx(Badge, { variant: getActionVariant(value), children: value })
14805
+ },
14806
+ {
14807
+ key: "status",
14808
+ title: "Status",
14809
+ sortable: true,
14810
+ render: (value) => /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant(value), children: value })
14811
+ },
14812
+ {
14813
+ key: "associatedEntity",
14814
+ title: "Associated Entity",
14815
+ sortable: true,
14816
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
14817
+ },
14818
+ {
14819
+ key: "associatedEntityId",
14820
+ title: "Associated Entity ID",
14821
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value || "\u2014" })
14822
+ }
14823
+ ];
14824
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
14825
+ /* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
14826
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Velocity Limits" }) }),
14827
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
14828
+ /* @__PURE__ */ jsx(
14829
+ VelocityLimitFiltersSheet,
14830
+ {
14831
+ filters,
14832
+ onFilterChange: handleFilterChange,
14833
+ onResetFilters: handleResetFilters
14834
+ }
14835
+ ),
14836
+ /* @__PURE__ */ jsxs(Button, { onClick: () => navigate("/compliance/velocity/create"), children: [
14837
+ /* @__PURE__ */ jsx(Plus, { className: "mr-2 h-4 w-4" }),
14838
+ "Create Limit"
14839
+ ] })
14840
+ ] })
14841
+ ] }) }) }),
14842
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 h-full max-w-none flex flex-col", children: /* @__PURE__ */ jsx("div", { className: "flex-1 mt-4 overflow-auto", children: /* @__PURE__ */ jsx(
14843
+ DataTable,
14844
+ {
14845
+ columns: columns3,
14846
+ data: sortedLimits,
14847
+ sortBy: sortField,
14848
+ sortDirection,
14849
+ onSort: handleSort,
14850
+ onRowClick: (limit) => navigate(`/compliance/velocity/${limit.id}`),
14851
+ pagination: {
14852
+ pageSize: 10,
14853
+ currentPage: 1,
14854
+ totalItems: sortedLimits.length,
14855
+ onPageChange: () => {
14856
+ }
14857
+ }
14858
+ }
14859
+ ) }) }) })
14860
+ ] });
14861
+ }
14862
+ function CreateVelocityLimit() {
14863
+ const navigate = useNavigate();
14864
+ const [limitType, setLimitType] = useState("");
14865
+ const [formData, setFormData] = useState({
14866
+ limitName: "",
14867
+ action: "",
14868
+ associatedEntityType: "",
14869
+ associatedEntityId: "",
14870
+ transactionFilterType: "",
14871
+ // "type" or "group"
14872
+ transactionType: "",
14873
+ transactionGroup: "",
14874
+ aggregationLevel: ""
14875
+ // Type-specific fields will be added based on limitType
14876
+ });
14877
+ const handleFieldChange = (field, value) => {
14878
+ setFormData((prev) => ({ ...prev, [field]: value }));
14879
+ };
14880
+ const handleSubmit = (e) => {
14881
+ e.preventDefault();
14882
+ console.log("Creating velocity limit:", { limitType, ...formData });
14883
+ navigate("/compliance/velocity");
14884
+ };
14885
+ const renderTypeSpecificFields = () => {
14886
+ switch (limitType) {
14887
+ case "receiver_name_mismatch":
14888
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
14889
+ /* @__PURE__ */ jsx(
14890
+ EnhancedInput,
14891
+ {
14892
+ label: "Mismatch Threshold (%)",
14893
+ placeholder: "Enter threshold percentage",
14894
+ onChange: (e) => handleFieldChange("mismatchThreshold", e.target.value)
14895
+ }
14896
+ ),
14897
+ /* @__PURE__ */ jsx(
14898
+ EnhancedSelect,
14899
+ {
14900
+ label: "Comparison Method",
14901
+ placeholder: "Select method",
14902
+ options: [
14903
+ { value: "exact", label: "Exact Match" },
14904
+ { value: "fuzzy", label: "Fuzzy Match" },
14905
+ { value: "partial", label: "Partial Match" }
14906
+ ],
14907
+ onValueChange: (value) => handleFieldChange("comparisonMethod", value)
14908
+ }
14909
+ )
14910
+ ] }) });
14911
+ case "round_number":
14912
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
14913
+ /* @__PURE__ */ jsx(
14914
+ EnhancedInput,
14915
+ {
14916
+ label: "Amount Threshold",
14917
+ placeholder: "Enter amount",
14918
+ onChange: (e) => handleFieldChange("amountThreshold", e.target.value)
14919
+ }
14920
+ ),
14921
+ /* @__PURE__ */ jsx(
14922
+ EnhancedInput,
14923
+ {
14924
+ label: "Round Number Pattern",
14925
+ placeholder: "e.g., 1000, 5000, 10000",
14926
+ onChange: (e) => handleFieldChange("roundPattern", e.target.value)
14927
+ }
14928
+ )
14929
+ ] }) });
14930
+ case "transaction":
14931
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
14932
+ /* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
14933
+ /* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-foreground mb-3 block", children: "Filter By" }),
14934
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
14935
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-6", children: [
14936
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
14937
+ /* @__PURE__ */ jsx(
14938
+ "input",
14939
+ {
14940
+ type: "radio",
14941
+ name: "transactionFilterType",
14942
+ value: "type",
14943
+ checked: formData.transactionFilterType === "type",
14944
+ onChange: (e) => {
14945
+ handleFieldChange("transactionFilterType", e.target.value);
14946
+ handleFieldChange("transactionGroup", "");
14947
+ },
14948
+ className: "w-4 h-4 text-primary border-border focus:ring-2 focus:ring-primary"
14949
+ }
14950
+ ),
14951
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: "Transaction Type" })
14952
+ ] }),
14953
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
14954
+ /* @__PURE__ */ jsx(
14955
+ "input",
14956
+ {
14957
+ type: "radio",
14958
+ name: "transactionFilterType",
14959
+ value: "group",
14960
+ checked: formData.transactionFilterType === "group",
14961
+ onChange: (e) => {
14962
+ handleFieldChange("transactionFilterType", e.target.value);
14963
+ handleFieldChange("transactionType", "");
14964
+ },
14965
+ className: "w-4 h-4 text-primary border-border focus:ring-2 focus:ring-primary"
14966
+ }
14967
+ ),
14968
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: "Transaction Group" })
14969
+ ] })
14970
+ ] }),
14971
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
14972
+ formData.transactionFilterType === "type" && /* @__PURE__ */ jsx(
14973
+ EnhancedSelect,
14974
+ {
14975
+ label: "",
14976
+ placeholder: "Select type",
14977
+ options: [
14978
+ { value: "wire", label: "Wire" },
14979
+ { value: "ach", label: "ACH" },
14980
+ { value: "card", label: "Card" }
14981
+ ],
14982
+ value: formData.transactionType,
14983
+ onValueChange: (value) => handleFieldChange("transactionType", value)
14984
+ }
14985
+ ),
14986
+ formData.transactionFilterType === "group" && /* @__PURE__ */ jsx(
14987
+ EnhancedSelect,
14988
+ {
14989
+ label: "",
14990
+ placeholder: "Select group",
14991
+ options: [
14992
+ { value: "inbound", label: "Inbound" },
14993
+ { value: "outbound", label: "Outbound" }
14994
+ ],
14995
+ value: formData.transactionGroup,
14996
+ onValueChange: (value) => handleFieldChange("transactionGroup", value)
14997
+ }
14998
+ )
14999
+ ] })
15000
+ ] })
15001
+ ] }),
15002
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15003
+ /* @__PURE__ */ jsx(
15004
+ EnhancedSelect,
15005
+ {
15006
+ label: "Aggregation Level",
15007
+ placeholder: "Select level",
15008
+ options: [
15009
+ { value: "transaction", label: "Transaction" },
15010
+ { value: "account", label: "Account" },
15011
+ { value: "program", label: "Program" },
15012
+ { value: "product", label: "Product" }
15013
+ ],
15014
+ onValueChange: (value) => handleFieldChange("aggregationLevel", value)
15015
+ }
15016
+ ),
15017
+ formData.aggregationLevel !== "transaction" && /* @__PURE__ */ jsx(
15018
+ EnhancedSelect,
15019
+ {
15020
+ label: "Time Period",
15021
+ placeholder: "Select period",
15022
+ options: [
15023
+ { value: "daily", label: "Daily" },
15024
+ { value: "weekly", label: "Weekly" },
15025
+ { value: "monthly", label: "Monthly" }
15026
+ ],
15027
+ onValueChange: (value) => handleFieldChange("timePeriod", value)
15028
+ }
15029
+ ),
15030
+ /* @__PURE__ */ jsx(
15031
+ EnhancedInput,
15032
+ {
15033
+ label: "Max Transaction Amount",
15034
+ placeholder: "Enter amount",
15035
+ onChange: (e) => handleFieldChange("maxAmount", e.target.value)
15036
+ }
15037
+ ),
15038
+ formData.aggregationLevel !== "transaction" && /* @__PURE__ */ jsx(
15039
+ EnhancedInput,
15040
+ {
15041
+ label: "Max Transaction Count",
15042
+ placeholder: "Enter count",
15043
+ onChange: (e) => handleFieldChange("maxCount", e.target.value)
15044
+ }
15045
+ )
15046
+ ] })
15047
+ ] });
15048
+ case "prohibited_entity":
15049
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15050
+ /* @__PURE__ */ jsx(
15051
+ EnhancedInput,
15052
+ {
15053
+ label: "Entity List Name",
15054
+ placeholder: "Enter list name",
15055
+ onChange: (e) => handleFieldChange("entityListName", e.target.value)
15056
+ }
15057
+ ),
15058
+ /* @__PURE__ */ jsx(
15059
+ EnhancedSelect,
15060
+ {
15061
+ label: "Entity Type",
15062
+ placeholder: "Select type",
15063
+ options: [
15064
+ { value: "country", label: "Country" },
15065
+ { value: "individual", label: "Individual" },
15066
+ { value: "business", label: "Business" }
15067
+ ],
15068
+ onValueChange: (value) => handleFieldChange("entityType", value)
15069
+ }
15070
+ ),
15071
+ /* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
15072
+ EnhancedInput,
15073
+ {
15074
+ label: "Prohibited Entities (comma-separated)",
15075
+ placeholder: "Enter entities",
15076
+ onChange: (e) => handleFieldChange("prohibitedEntities", e.target.value)
15077
+ }
15078
+ ) })
15079
+ ] }) });
15080
+ default:
15081
+ return null;
15082
+ }
15083
+ };
15084
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
15085
+ /* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
15086
+ /* @__PURE__ */ jsxs(
15087
+ Button,
15088
+ {
15089
+ variant: "ghost",
15090
+ size: "sm",
15091
+ onClick: () => navigate("/compliance/velocity"),
15092
+ children: [
15093
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }),
15094
+ "Back"
15095
+ ]
15096
+ }
15097
+ ),
15098
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Create Velocity Limit" }) })
15099
+ ] }) }) }),
15100
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-4xl", children: /* @__PURE__ */ jsx("form", { onSubmit: handleSubmit, children: /* @__PURE__ */ jsx(Card, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
15101
+ /* @__PURE__ */ jsxs("div", { children: [
15102
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Select Limit Type" }),
15103
+ /* @__PURE__ */ jsx(
15104
+ EnhancedSelect,
15105
+ {
15106
+ label: "Limit Type",
15107
+ placeholder: "Select a limit type",
15108
+ options: [
15109
+ { value: "receiver_name_mismatch", label: "Receiver Name Mismatch" },
15110
+ { value: "round_number", label: "Round Number" },
15111
+ { value: "transaction", label: "Transaction" },
15112
+ { value: "prohibited_entity", label: "Prohibited Entity" }
15113
+ ],
15114
+ value: limitType,
15115
+ onValueChange: (value) => setLimitType(value)
15116
+ }
15117
+ )
15118
+ ] }),
15119
+ limitType && /* @__PURE__ */ jsxs(Fragment, { children: [
15120
+ /* @__PURE__ */ jsxs("div", { className: "border-t pt-6", children: [
15121
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Basic Information" }),
15122
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15123
+ /* @__PURE__ */ jsx(
15124
+ EnhancedInput,
15125
+ {
15126
+ label: "Limit Name",
15127
+ placeholder: "Enter limit name",
15128
+ value: formData.limitName,
15129
+ onChange: (e) => handleFieldChange("limitName", e.target.value)
15130
+ }
15131
+ ),
15132
+ /* @__PURE__ */ jsx(
15133
+ EnhancedSelect,
15134
+ {
15135
+ label: "Action",
15136
+ placeholder: "Select action",
15137
+ options: [
15138
+ { value: "decline", label: "Decline" },
15139
+ { value: "flag", label: "Flag" }
15140
+ ],
15141
+ onValueChange: (value) => handleFieldChange("action", value)
15142
+ }
15143
+ ),
15144
+ /* @__PURE__ */ jsx(
15145
+ EnhancedSelect,
15146
+ {
15147
+ label: "Associated Entity Type",
15148
+ placeholder: "Select entity type",
15149
+ options: [
15150
+ { value: "global", label: "Global" },
15151
+ { value: "program", label: "Program" },
15152
+ { value: "product", label: "Product" },
15153
+ { value: "account", label: "Account" }
15154
+ ],
15155
+ value: formData.associatedEntityType,
15156
+ onValueChange: (value) => {
15157
+ handleFieldChange("associatedEntityType", value);
15158
+ handleFieldChange("associatedEntityId", "");
15159
+ }
15160
+ }
15161
+ ),
15162
+ formData.associatedEntityType && formData.associatedEntityType !== "global" && /* @__PURE__ */ jsx(
15163
+ EnhancedInput,
15164
+ {
15165
+ label: `${formData.associatedEntityType.charAt(0).toUpperCase() + formData.associatedEntityType.slice(1)} ID`,
15166
+ placeholder: `Enter ${formData.associatedEntityType} ID`,
15167
+ value: formData.associatedEntityId,
15168
+ onChange: (e) => handleFieldChange("associatedEntityId", e.target.value)
15169
+ }
15170
+ )
15171
+ ] })
15172
+ ] }),
15173
+ /* @__PURE__ */ jsxs("div", { className: "border-t pt-6", children: [
15174
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Limit Configuration" }),
15175
+ renderTypeSpecificFields()
15176
+ ] }),
15177
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-3 border-t pt-6", children: [
15178
+ /* @__PURE__ */ jsx(
15179
+ Button,
15180
+ {
15181
+ type: "button",
15182
+ variant: "outline",
15183
+ onClick: () => navigate("/compliance/velocity"),
15184
+ children: "Cancel"
15185
+ }
15186
+ ),
15187
+ /* @__PURE__ */ jsx(Button, { type: "submit", children: "Create Limit" })
15188
+ ] })
15189
+ ] })
15190
+ ] }) }) }) }) })
15191
+ ] });
15192
+ }
15193
+ var getStatusVariant2 = (status) => {
15194
+ switch (status) {
15195
+ case "ACTIVE":
15196
+ return "success";
15197
+ case "INACTIVE":
15198
+ return "warning";
15199
+ case "DELETED":
15200
+ return "destructive";
15201
+ default:
15202
+ return "secondary";
15203
+ }
15204
+ };
15205
+ var getActionVariant2 = (action) => {
15206
+ switch (action) {
15207
+ case "DECLINE":
15208
+ return "destructive";
15209
+ case "FLAG":
15210
+ return "warning";
15211
+ default:
15212
+ return "secondary";
15213
+ }
15214
+ };
15215
+ var VelocityLimitDetailsCard = ({
15216
+ isEditing,
15217
+ onToggleEdit,
15218
+ limit
15219
+ }) => {
15220
+ const renderTransactionFields = () => /* @__PURE__ */ jsxs(Fragment, { children: [
15221
+ limit.transactionType && limit.transactionType.length > 0 && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15222
+ /* @__PURE__ */ jsxs("div", { children: [
15223
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Type" }),
15224
+ /* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionType.map((type, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: type }, index)) })
15225
+ ] }),
15226
+ limit.transactionGroup && limit.transactionGroup.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
15227
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Group" }),
15228
+ /* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionGroup.map((group, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: group.toUpperCase() }, index)) })
15229
+ ] })
15230
+ ] }),
15231
+ !limit.transactionType && limit.transactionGroup && limit.transactionGroup.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxs("div", { children: [
15232
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Group" }),
15233
+ /* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionGroup.map((group, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: group.toUpperCase() }, index)) })
15234
+ ] }) }),
15235
+ (limit.aggregationLevel || limit.timePeriod) && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15236
+ limit.aggregationLevel && /* @__PURE__ */ jsx(
15237
+ InfoField,
15238
+ {
15239
+ label: "Aggregation Level",
15240
+ value: limit.aggregationLevel.charAt(0).toUpperCase() + limit.aggregationLevel.slice(1),
15241
+ layout: "horizontal"
15242
+ }
15243
+ ),
15244
+ limit.timePeriod && /* @__PURE__ */ jsx(
15245
+ InfoField,
15246
+ {
15247
+ label: "Time Period",
15248
+ value: limit.timePeriod.charAt(0).toUpperCase() + limit.timePeriod.slice(1),
15249
+ layout: "horizontal"
15250
+ }
15251
+ )
15252
+ ] }),
15253
+ (limit.maxAmount || limit.maxCount) && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15254
+ limit.maxAmount && /* @__PURE__ */ jsx(
15255
+ InfoField,
15256
+ {
15257
+ label: "Max Amount",
15258
+ value: `$${parseFloat(limit.maxAmount).toLocaleString()}`,
15259
+ layout: "horizontal"
15260
+ }
15261
+ ),
15262
+ limit.maxCount && /* @__PURE__ */ jsx(
15263
+ InfoField,
15264
+ {
15265
+ label: "Max Count",
15266
+ value: limit.maxCount,
15267
+ layout: "horizontal"
15268
+ }
15269
+ )
15270
+ ] })
15271
+ ] });
15272
+ const renderReceiverNameMismatchFields = () => /* @__PURE__ */ jsx(Fragment, { children: limit.mismatchThreshold && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15273
+ /* @__PURE__ */ jsx(
15274
+ InfoField,
15275
+ {
15276
+ label: "Mismatch Threshold",
15277
+ value: `${limit.mismatchThreshold}%`,
15278
+ layout: "horizontal"
15279
+ }
15280
+ ),
15281
+ limit.comparisonMethod && /* @__PURE__ */ jsx(
15282
+ InfoField,
15283
+ {
15284
+ label: "Comparison Method",
15285
+ value: limit.comparisonMethod.charAt(0).toUpperCase() + limit.comparisonMethod.slice(1),
15286
+ layout: "horizontal"
15287
+ }
15288
+ )
15289
+ ] }) });
15290
+ const renderRoundNumberFields = () => /* @__PURE__ */ jsx(Fragment, { children: limit.amountThreshold && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15291
+ /* @__PURE__ */ jsx(
15292
+ InfoField,
15293
+ {
15294
+ label: "Amount Threshold",
15295
+ value: `$${parseFloat(limit.amountThreshold).toLocaleString()}`,
15296
+ layout: "horizontal"
15297
+ }
15298
+ ),
15299
+ limit.roundPattern && /* @__PURE__ */ jsx(
15300
+ InfoField,
15301
+ {
15302
+ label: "Round Patterns",
15303
+ value: limit.roundPattern,
15304
+ layout: "horizontal"
15305
+ }
15306
+ )
15307
+ ] }) });
15308
+ const renderProhibitedEntityFields = () => /* @__PURE__ */ jsxs(Fragment, { children: [
15309
+ limit.entityListName && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15310
+ /* @__PURE__ */ jsx(
15311
+ InfoField,
15312
+ {
15313
+ label: "Entity List Name",
15314
+ value: limit.entityListName,
15315
+ layout: "horizontal"
15316
+ }
15317
+ ),
15318
+ limit.entityType && /* @__PURE__ */ jsx(
15319
+ InfoField,
15320
+ {
15321
+ label: "Entity Type",
15322
+ value: limit.entityType.charAt(0).toUpperCase() + limit.entityType.slice(1),
15323
+ layout: "horizontal"
15324
+ }
15325
+ )
15326
+ ] }),
15327
+ limit.prohibitedEntities && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsx(
15328
+ InfoField,
15329
+ {
15330
+ label: "Prohibited Entities",
15331
+ value: limit.prohibitedEntities,
15332
+ layout: "horizontal"
15333
+ }
15334
+ ) })
15335
+ ] });
15336
+ const viewContent = /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
15337
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15338
+ /* @__PURE__ */ jsx(
15339
+ InfoField,
15340
+ {
15341
+ label: "Limit Name",
15342
+ value: limit.limitName,
15343
+ layout: "horizontal"
15344
+ }
15345
+ ),
15346
+ /* @__PURE__ */ jsx(
15347
+ InfoField,
15348
+ {
15349
+ label: "Limit Type",
15350
+ value: limit.limitType.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
15351
+ layout: "horizontal"
15352
+ }
15353
+ )
15354
+ ] }),
15355
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15356
+ /* @__PURE__ */ jsx(
15357
+ InfoField,
15358
+ {
15359
+ label: "Action",
15360
+ value: /* @__PURE__ */ jsx(Badge, { variant: getActionVariant2(limit.action), children: limit.action }),
15361
+ layout: "horizontal"
15362
+ }
15363
+ ),
15364
+ /* @__PURE__ */ jsx(
15365
+ InfoField,
15366
+ {
15367
+ label: "Created",
15368
+ value: format(parseISO(limit.created), "MMM dd, yyyy 'at' h:mm a"),
15369
+ layout: "horizontal"
15370
+ }
15371
+ )
15372
+ ] }),
15373
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
15374
+ /* @__PURE__ */ jsx(
15375
+ InfoField,
15376
+ {
15377
+ label: "Associated Entity",
15378
+ value: limit.associatedEntity,
15379
+ layout: "horizontal"
15380
+ }
15381
+ ),
15382
+ limit.associatedEntityId && /* @__PURE__ */ jsx(
15383
+ InfoField,
15384
+ {
15385
+ label: "Associated Entity ID",
15386
+ value: limit.associatedEntityId,
15387
+ layout: "horizontal"
15388
+ }
15389
+ )
15390
+ ] }),
15391
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
15392
+ limit.limitType === "transaction" && renderTransactionFields(),
15393
+ limit.limitType === "receiver_name_mismatch" && renderReceiverNameMismatchFields(),
15394
+ limit.limitType === "round_number" && renderRoundNumberFields(),
15395
+ limit.limitType === "prohibited_entity" && renderProhibitedEntityFields()
15396
+ ] })
15397
+ ] });
15398
+ const editContent = /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Edit mode coming soon..." });
15399
+ return /* @__PURE__ */ jsx(
15400
+ EditableFormCard,
15401
+ {
15402
+ title: "Velocity Limit Details",
15403
+ viewContent,
15404
+ editContent,
15405
+ isEditing,
15406
+ onToggleEdit,
15407
+ variant: "subtle"
15408
+ }
15409
+ );
15410
+ };
15411
+ function VelocityLimitDetail() {
15412
+ const { id } = useParams();
15413
+ const navigate = useNavigate();
15414
+ const limit = mockVelocityLimits.find((l) => l.id === id);
15415
+ if (!limit) {
15416
+ return /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-8", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
15417
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold mb-2", children: "Velocity Limit Not Found" }),
15418
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: "The velocity limit could not be found." }),
15419
+ /* @__PURE__ */ jsxs(Button, { onClick: () => navigate("/compliance/velocity"), children: [
15420
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }),
15421
+ "Back to Velocity Limits"
15422
+ ] })
15423
+ ] }) });
15424
+ }
15425
+ return /* @__PURE__ */ jsx(
15426
+ DetailPageLayout,
15427
+ {
15428
+ title: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
15429
+ /* @__PURE__ */ jsx("span", { children: limit.limitName }),
15430
+ /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant2(limit.status), children: limit.status })
15431
+ ] }),
15432
+ cards: [
15433
+ {
15434
+ key: "details",
15435
+ component: (props) => /* @__PURE__ */ jsx(VelocityLimitDetailsCard, { ...props, limit })
15436
+ }
15437
+ ],
15438
+ actions: [
15439
+ {
15440
+ label: "Deactivate",
15441
+ variant: "destructive",
15442
+ onClick: () => console.log("Deactivate limit")
15443
+ }
15444
+ ]
15445
+ }
15446
+ );
15447
+ }
15448
+ function UploadReconDialog({ open, onOpenChange }) {
15449
+ const [fileType, setFileType] = useState(null);
15450
+ const [selectedFile, setSelectedFile] = useState(null);
15451
+ const [isUploading, setIsUploading] = useState(false);
15452
+ const fileInputRef = useRef(null);
15453
+ const handleFileChange = (event) => {
15454
+ const file = event.target.files?.[0];
15455
+ if (file) {
15456
+ setSelectedFile(file);
15457
+ }
15458
+ };
15459
+ const handleRemoveFile = () => {
15460
+ setSelectedFile(null);
15461
+ if (fileInputRef.current) {
15462
+ fileInputRef.current.value = "";
15463
+ }
15464
+ };
15465
+ const handleReset = () => {
15466
+ setFileType(null);
15467
+ setSelectedFile(null);
15468
+ if (fileInputRef.current) {
15469
+ fileInputRef.current.value = "";
15470
+ }
15471
+ };
15472
+ const handleUpload = async () => {
15473
+ if (!selectedFile || !fileType) return;
15474
+ setIsUploading(true);
15475
+ setTimeout(() => {
15476
+ setIsUploading(false);
15477
+ toast$1.success(`${fileType} file uploaded successfully`);
15478
+ handleReset();
15479
+ onOpenChange(false);
15480
+ }, 2e3);
15481
+ };
15482
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-[500px]", children: [
15483
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Upload Recon File" }) }),
15484
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 py-4", children: [
15485
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
15486
+ /* @__PURE__ */ jsx(Label, { children: "File Type" }),
15487
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
15488
+ /* @__PURE__ */ jsxs(
15489
+ "button",
15490
+ {
15491
+ type: "button",
15492
+ onClick: () => setFileType("ACH"),
15493
+ className: cn(
15494
+ "flex flex-col items-center gap-3 p-4 border-2 rounded-lg transition-all",
15495
+ fileType === "ACH" ? "border-primary bg-primary/5" : "border-border hover:border-primary/50"
15496
+ ),
15497
+ children: [
15498
+ /* @__PURE__ */ jsx(ArrowRightLeft, { className: "h-8 w-8 text-primary" }),
15499
+ /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
15500
+ /* @__PURE__ */ jsx("div", { className: "font-medium", children: "ACH" }),
15501
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: "ACH Originated/Received Entries Detail Report in .csv format" })
15502
+ ] })
15503
+ ]
15504
+ }
15505
+ ),
15506
+ /* @__PURE__ */ jsxs(
15507
+ "button",
15508
+ {
15509
+ type: "button",
15510
+ onClick: () => setFileType("Wire"),
15511
+ className: cn(
15512
+ "flex flex-col items-center gap-3 p-4 border-2 rounded-lg transition-all",
15513
+ fileType === "Wire" ? "border-primary bg-primary/5" : "border-border hover:border-primary/50"
15514
+ ),
15515
+ children: [
15516
+ /* @__PURE__ */ jsx(Zap, { className: "h-8 w-8 text-primary" }),
15517
+ /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
15518
+ /* @__PURE__ */ jsx("div", { className: "font-medium", children: "Wire" }),
15519
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: "FedTransaction Analyzer report in .csv format" })
15520
+ ] })
15521
+ ]
15522
+ }
15523
+ )
15524
+ ] })
15525
+ ] }),
15526
+ fileType && /* @__PURE__ */ jsx("div", { className: "border-2 border-dashed border-border rounded-lg p-6", children: !selectedFile ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4", children: [
15527
+ /* @__PURE__ */ jsx(Upload, { className: "h-12 w-12 text-muted-foreground" }),
15528
+ /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
15529
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Select a file to upload" }),
15530
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "CSV, TXT files supported" })
15531
+ ] }),
15532
+ /* @__PURE__ */ jsx(
15533
+ "input",
15534
+ {
15535
+ ref: fileInputRef,
15536
+ type: "file",
15537
+ onChange: handleFileChange,
15538
+ className: "hidden",
15539
+ accept: ".csv,.txt",
15540
+ id: "recon-file-upload"
15541
+ }
15542
+ ),
15543
+ /* @__PURE__ */ jsx(
15544
+ Button,
15545
+ {
15546
+ type: "button",
15547
+ variant: "outline",
15548
+ onClick: () => fileInputRef.current?.click(),
15549
+ children: "Select File"
15550
+ }
15551
+ )
15552
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
15553
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
15554
+ /* @__PURE__ */ jsx(File, { className: "h-8 w-8 text-primary flex-shrink-0" }),
15555
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
15556
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium truncate", children: selectedFile.name }),
15557
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
15558
+ (selectedFile.size / 1024).toFixed(2),
15559
+ " KB"
15560
+ ] })
15561
+ ] })
15562
+ ] }),
15563
+ /* @__PURE__ */ jsx(
15564
+ Button,
15565
+ {
15566
+ type: "button",
15567
+ variant: "ghost",
15568
+ size: "icon",
15569
+ onClick: handleRemoveFile,
15570
+ className: "flex-shrink-0",
15571
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
15572
+ }
15573
+ )
15574
+ ] }) })
15575
+ ] }),
15576
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
15577
+ /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => {
15578
+ handleReset();
15579
+ onOpenChange(false);
15580
+ }, children: "Cancel" }),
15581
+ /* @__PURE__ */ jsx(
15582
+ Button,
14662
15583
  {
14663
- onClick: () => navigate(getEntityUrl(row.entityType, row.entityId)),
14664
- className: "text-sm text-primary hover:underline font-medium",
14665
- children: value
15584
+ onClick: handleUpload,
15585
+ disabled: !selectedFile || !fileType || isUploading,
15586
+ children: isUploading ? "Uploading..." : "Upload"
14666
15587
  }
14667
15588
  )
14668
- },
15589
+ ] })
15590
+ ] }) });
15591
+ }
15592
+
15593
+ // src/lib/mock-data/recon-data.ts
15594
+ var mockReconUploads = [
15595
+ {
15596
+ id: "1",
15597
+ uploaded: "2025-11-14T10:30:00Z",
15598
+ fileName: "OE_ACH Originated Entries ...",
15599
+ type: "FED_ACH_CONF...",
15600
+ status: "Processed",
15601
+ requester: "bcontrucci@ssbp...",
15602
+ totalRecords: 2872,
15603
+ matchedRecords: 2872,
15604
+ exceptionRecords: 0,
15605
+ skippedRecords: 0,
15606
+ invalidRecords: 0
15607
+ },
15608
+ {
15609
+ id: "2",
15610
+ uploaded: "2025-11-14T09:15:00Z",
15611
+ fileName: "RER_ACH Received Entries ...",
15612
+ type: "FED_ACH_CONF...",
15613
+ status: "Processed",
15614
+ requester: "bcontrucci@ssbp...",
15615
+ totalRecords: 220,
15616
+ matchedRecords: 220,
15617
+ exceptionRecords: 0,
15618
+ skippedRecords: 0,
15619
+ invalidRecords: 0
15620
+ },
15621
+ {
15622
+ id: "3",
15623
+ uploaded: "2025-11-14T08:45:00Z",
15624
+ fileName: "243073959_335935.csv",
15625
+ type: "FED_WIRE_CON...",
15626
+ status: "Processed",
15627
+ requester: "bcontrucci@ssbp...",
15628
+ totalRecords: 304,
15629
+ matchedRecords: 220,
15630
+ exceptionRecords: 2,
15631
+ skippedRecords: 82,
15632
+ invalidRecords: 0
15633
+ },
15634
+ {
15635
+ id: "4",
15636
+ uploaded: "2025-11-13T16:20:00Z",
15637
+ fileName: "OE_ACH Originated Entries ...",
15638
+ type: "FED_ACH_CONF...",
15639
+ status: "Processed",
15640
+ requester: "bcontrucci@ssbp...",
15641
+ totalRecords: 4813,
15642
+ matchedRecords: 4811,
15643
+ exceptionRecords: 2,
15644
+ skippedRecords: 0,
15645
+ invalidRecords: 0
15646
+ },
15647
+ {
15648
+ id: "5",
15649
+ uploaded: "2025-11-13T15:10:00Z",
15650
+ fileName: "243073959_335846.csv",
15651
+ type: "FED_WIRE_CON...",
15652
+ status: "Processed",
15653
+ requester: "bcontrucci@ssbp...",
15654
+ totalRecords: 391,
15655
+ matchedRecords: 258,
15656
+ exceptionRecords: 2,
15657
+ skippedRecords: 131,
15658
+ invalidRecords: 0
15659
+ },
15660
+ {
15661
+ id: "6",
15662
+ uploaded: "2025-11-13T14:30:00Z",
15663
+ fileName: "RER_ACH Received Entries ...",
15664
+ type: "FED_ACH_CONF...",
15665
+ status: "Processed",
15666
+ requester: "bcontrucci@ssbp...",
15667
+ totalRecords: 227,
15668
+ matchedRecords: 221,
15669
+ exceptionRecords: 6,
15670
+ skippedRecords: 0,
15671
+ invalidRecords: 0
15672
+ },
15673
+ {
15674
+ id: "7",
15675
+ uploaded: "2025-11-13T13:45:00Z",
15676
+ fileName: "OE_ACH Originated Entries ...",
15677
+ type: "FED_ACH_CONF...",
15678
+ status: "Processed",
15679
+ requester: "bcontrucci@ssbp...",
15680
+ totalRecords: 6471,
15681
+ matchedRecords: 6471,
15682
+ exceptionRecords: 0,
15683
+ skippedRecords: 0,
15684
+ invalidRecords: 0
15685
+ },
15686
+ {
15687
+ id: "8",
15688
+ uploaded: "2025-11-12T11:20:00Z",
15689
+ fileName: "OE_ACH Originated Entries ...",
15690
+ type: "FED_ACH_CONF...",
15691
+ status: "Failed",
15692
+ requester: "bcontrucci@ssbp...",
15693
+ totalRecords: 0,
15694
+ matchedRecords: 0,
15695
+ exceptionRecords: 0,
15696
+ skippedRecords: 0,
15697
+ invalidRecords: 0
15698
+ },
15699
+ {
15700
+ id: "9",
15701
+ uploaded: "2025-11-12T10:15:00Z",
15702
+ fileName: "RER_ACH Received Entries ...",
15703
+ type: "FED_ACH_CONF...",
15704
+ status: "Processed",
15705
+ requester: "bcontrucci@ssbp...",
15706
+ totalRecords: 189,
15707
+ matchedRecords: 170,
15708
+ exceptionRecords: 19,
15709
+ skippedRecords: 0,
15710
+ invalidRecords: 0
15711
+ }
15712
+ ];
15713
+ function ReconUpload() {
15714
+ const [sortField, setSortField] = useState("uploaded");
15715
+ const [sortDirection, setSortDirection] = useState("desc");
15716
+ const [uploadDialogOpen, setUploadDialogOpen] = useState(false);
15717
+ const handleSort = (field) => {
15718
+ if (sortField === field) {
15719
+ setSortDirection(sortDirection === "asc" ? "desc" : "asc");
15720
+ } else {
15721
+ setSortField(field);
15722
+ setSortDirection("desc");
15723
+ }
15724
+ };
15725
+ const sortedUploads = [...mockReconUploads].sort((a, b) => {
15726
+ const aValue = a[sortField];
15727
+ const bValue = b[sortField];
15728
+ if (aValue == null) return 1;
15729
+ if (bValue == null) return -1;
15730
+ if (sortDirection === "asc") {
15731
+ return aValue > bValue ? 1 : -1;
15732
+ } else {
15733
+ return aValue < bValue ? 1 : -1;
15734
+ }
15735
+ });
15736
+ const columns3 = [
14669
15737
  {
14670
- key: "entityType",
14671
- title: "Entity Type",
15738
+ key: "uploaded",
15739
+ title: "Uploaded",
14672
15740
  sortable: true,
14673
- render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
15741
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: format(parseISO(value), "yyyy-MM-dd") })
14674
15742
  },
14675
15743
  {
14676
- key: "alertId",
14677
- title: "Alert ID",
14678
- render: (value) => value ? /* @__PURE__ */ jsx(
14679
- "button",
14680
- {
14681
- onClick: () => navigate(`/alerts/${value}`),
14682
- className: "text-sm text-primary hover:underline font-medium",
14683
- children: value
14684
- }
14685
- ) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "\u2014" })
15744
+ key: "fileName",
15745
+ title: "File Name",
15746
+ render: (value, row) => {
15747
+ const isACH = row.type.includes("ACH");
15748
+ const Icon2 = isACH ? ArrowRightLeft : Zap;
15749
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
15750
+ /* @__PURE__ */ jsx(Icon2, { className: "h-4 w-4 text-muted-foreground flex-shrink-0" }),
15751
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: value })
15752
+ ] });
15753
+ }
14686
15754
  },
14687
15755
  {
14688
15756
  key: "status",
14689
15757
  title: "Status",
15758
+ render: (value) => {
15759
+ if (value === "Processed") {
15760
+ return /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5 text-green-600" });
15761
+ }
15762
+ if (value === "Failed") {
15763
+ return /* @__PURE__ */ jsx(XCircle, { className: "h-5 w-5 text-red-600" });
15764
+ }
15765
+ if (value === "Processing") {
15766
+ return /* @__PURE__ */ jsx(Circle, { className: "h-5 w-5 text-green-600" });
15767
+ }
15768
+ return /* @__PURE__ */ jsx("span", { className: "text-sm", children: value });
15769
+ }
15770
+ },
15771
+ {
15772
+ key: "requester",
15773
+ title: "Requester",
15774
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
15775
+ },
15776
+ {
15777
+ key: "totalRecords",
15778
+ title: "Total",
14690
15779
  sortable: true,
14691
- render: (value) => /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant(value), children: value })
15780
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
15781
+ },
15782
+ {
15783
+ key: "matchedRecords",
15784
+ title: "Matched",
15785
+ sortable: true,
15786
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
15787
+ },
15788
+ {
15789
+ key: "exceptionRecords",
15790
+ title: "Exception",
15791
+ sortable: true,
15792
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
15793
+ },
15794
+ {
15795
+ key: "skippedRecords",
15796
+ title: "Skipped",
15797
+ sortable: true,
15798
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
15799
+ },
15800
+ {
15801
+ key: "invalidRecords",
15802
+ title: "Invalid",
15803
+ sortable: true,
15804
+ render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
14692
15805
  }
14693
15806
  ];
14694
15807
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
14695
15808
  /* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
14696
- /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "OFAC Checks" }) }),
14697
- /* @__PURE__ */ jsx(
14698
- OFACFiltersSheet,
14699
- {
14700
- filters,
14701
- onFilterChange: handleFilterChange,
14702
- onResetFilters: handleResetFilters
14703
- }
14704
- )
15809
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Recon File Uploads" }) }),
15810
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsxs(Button, { onClick: () => setUploadDialogOpen(true), children: [
15811
+ /* @__PURE__ */ jsx(Upload, { className: "mr-2 h-4 w-4" }),
15812
+ "Upload Recon file"
15813
+ ] }) })
14705
15814
  ] }) }) }),
15815
+ /* @__PURE__ */ jsx(UploadReconDialog, { open: uploadDialogOpen, onOpenChange: setUploadDialogOpen }),
14706
15816
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 h-full max-w-none flex flex-col", children: /* @__PURE__ */ jsx("div", { className: "flex-1 mt-4 overflow-auto", children: /* @__PURE__ */ jsx(
14707
15817
  DataTable,
14708
15818
  {
14709
15819
  columns: columns3,
14710
- data: sortedChecks,
15820
+ data: sortedUploads,
14711
15821
  sortBy: sortField,
14712
15822
  sortDirection,
14713
15823
  onSort: handleSort
@@ -14716,6 +15826,435 @@ function OFAC() {
14716
15826
  ] });
14717
15827
  }
14718
15828
 
14719
- export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AccountDetail_default as AccountDetail, Accounts_default as Accounts, AddressForm, AlertDetail_default as AlertDetail, AlertDetailRouter, AlertDocuments, AlertHeaderControls, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessDetailView, BusinessFiltersSheet, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, CIPStatusBadge, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, Checkbox, ContactInfoCard, Container, ContextSection, Counterparties_default as Counterparties, CounterpartiesView, CounterpartyBasicInfo, CounterpartyDetail_default as CounterpartyDetail, CounterpartyDetailView, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, CreateBusinessView, Create_default2 as CreateCounterparty, Create_default3 as CreateIndividual, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, IndividualDetail_default as IndividualDetail, Individuals_default as Individuals, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound, OFAC, OFACAlertView, OriginatorCard, OriginatorFI, OriginatorFIAddress, PageLayout, PatternLibrary, PaymentInformationSection, Popover, PopoverContent, PopoverTrigger, ReceiverCard, ResolveAlertDialog, ResponsiveGrid, ScrollArea, ScrollBar, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Stack, Statement, StatementHeader, StatementView, StatusBadge, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransactionDetail_default as TransactionDetail, TransactionHistory_default as TransactionHistory, TransactionTypeBadge, UIKit, UIKitShowcase, WireDetailsSection, WireTransferSection, badgeVariants, buttonVariants, cardVariants, downloadCSV, generateStatementCSV, inputVariants, reducer, textareaVariants, toast, useAlertDetail, useCounterpartyEntity, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
15829
+ // src/lib/mock-data/recon-exception-data.ts
15830
+ var mockBraidTransactions = [
15831
+ {
15832
+ id: "BT-001",
15833
+ amount: 15e3,
15834
+ postDate: "2025-01-15",
15835
+ senderAccount: "1234567890",
15836
+ receiverAccount: "9876543210",
15837
+ type: "ACH"
15838
+ },
15839
+ {
15840
+ id: "BT-002",
15841
+ amount: 8500.5,
15842
+ postDate: "2025-01-15",
15843
+ senderAccount: "2345678901",
15844
+ receiverAccount: "8765432109",
15845
+ type: "ACH"
15846
+ },
15847
+ {
15848
+ id: "BT-003",
15849
+ amount: 25e3,
15850
+ postDate: "2025-01-16",
15851
+ senderAccount: "3456789012",
15852
+ receiverAccount: "7654321098",
15853
+ type: "ACH"
15854
+ },
15855
+ {
15856
+ id: "BT-004",
15857
+ amount: 5e4,
15858
+ postDate: "2025-01-15",
15859
+ senderAccount: "4567890123",
15860
+ receiverAccount: "6543210987",
15861
+ type: "Wire"
15862
+ },
15863
+ {
15864
+ id: "BT-005",
15865
+ amount: 12500.75,
15866
+ postDate: "2025-01-16",
15867
+ senderAccount: "5678901234",
15868
+ receiverAccount: "5432109876",
15869
+ type: "Wire"
15870
+ },
15871
+ {
15872
+ id: "BT-006",
15873
+ amount: 3200,
15874
+ postDate: "2025-01-17",
15875
+ senderAccount: "6789012345",
15876
+ receiverAccount: "4321098765",
15877
+ type: "ACH"
15878
+ }
15879
+ ];
15880
+ var mockFedSettlements = [
15881
+ {
15882
+ id: "FS-001",
15883
+ amount: 15e3,
15884
+ settlementDate: "2025-01-15",
15885
+ receiverAccount: "9876543210",
15886
+ type: "ACH"
15887
+ },
15888
+ {
15889
+ id: "FS-002",
15890
+ amount: 8500.5,
15891
+ settlementDate: "2025-01-15",
15892
+ receiverAccount: "8765432109",
15893
+ type: "ACH"
15894
+ },
15895
+ {
15896
+ id: "FS-003",
15897
+ amount: 24999,
15898
+ settlementDate: "2025-01-16",
15899
+ receiverAccount: "7654321098",
15900
+ type: "ACH"
15901
+ },
15902
+ {
15903
+ id: "FS-004",
15904
+ amount: 5e4,
15905
+ settlementDate: "2025-01-15",
15906
+ receiverAccount: "6543210987",
15907
+ type: "Wire"
15908
+ },
15909
+ {
15910
+ id: "FS-005",
15911
+ amount: 12500.75,
15912
+ settlementDate: "2025-01-16",
15913
+ receiverAccount: "5432109876",
15914
+ type: "Wire"
15915
+ },
15916
+ {
15917
+ id: "FS-006",
15918
+ amount: 7800,
15919
+ settlementDate: "2025-01-17",
15920
+ receiverAccount: "3210987654",
15921
+ type: "ACH"
15922
+ }
15923
+ ];
15924
+ function ReconExceptions() {
15925
+ const [fromDate, setFromDate] = useState();
15926
+ const [toDate, setToDate] = useState();
15927
+ const [transactionType, setTransactionType] = useState("ACH");
15928
+ const [braidData, setBraidData] = useState(mockBraidTransactions);
15929
+ const [fedData, setFedData] = useState(mockFedSettlements);
15930
+ const [selectedBraid, setSelectedBraid] = useState(null);
15931
+ const [selectedFed, setSelectedFed] = useState(null);
15932
+ const [dataLoaded, setDataLoaded] = useState(true);
15933
+ const [braidPage, setBraidPage] = useState(1);
15934
+ const [braidRowsPerPage, setBraidRowsPerPage] = useState(10);
15935
+ const [fedPage, setFedPage] = useState(1);
15936
+ const [fedRowsPerPage, setFedRowsPerPage] = useState(10);
15937
+ const handleSearch = () => {
15938
+ if (!fromDate || !toDate) {
15939
+ toast({
15940
+ title: "Missing Date Range",
15941
+ description: "Please select both from and to dates",
15942
+ variant: "destructive"
15943
+ });
15944
+ return;
15945
+ }
15946
+ const filteredBraid = mockBraidTransactions.filter((t) => {
15947
+ const tDate = new Date(t.postDate);
15948
+ return t.type === transactionType && tDate >= fromDate && tDate <= toDate;
15949
+ });
15950
+ const filteredFed = mockFedSettlements.filter((s) => {
15951
+ const sDate = new Date(s.settlementDate);
15952
+ return s.type === transactionType && sDate >= fromDate && sDate <= toDate;
15953
+ });
15954
+ setBraidData(filteredBraid);
15955
+ setFedData(filteredFed);
15956
+ setDataLoaded(true);
15957
+ setSelectedBraid(null);
15958
+ setSelectedFed(null);
15959
+ setBraidPage(1);
15960
+ setFedPage(1);
15961
+ toast({
15962
+ title: "Data Loaded",
15963
+ description: `Found ${filteredBraid.length} Braid transactions and ${filteredFed.length} Fed settlements`
15964
+ });
15965
+ };
15966
+ const handleMatch = () => {
15967
+ if (!selectedBraid || !selectedFed) {
15968
+ toast({
15969
+ title: "Selection Required",
15970
+ description: "Please select one transaction from each table",
15971
+ variant: "destructive"
15972
+ });
15973
+ return;
15974
+ }
15975
+ const braidTxn = braidData.find((t) => t.id === selectedBraid);
15976
+ const fedTxn = fedData.find((s) => s.id === selectedFed);
15977
+ setBraidData((prev) => prev.filter((t) => t.id !== selectedBraid));
15978
+ setFedData((prev) => prev.filter((s) => s.id !== selectedFed));
15979
+ setSelectedBraid(null);
15980
+ setSelectedFed(null);
15981
+ toast({
15982
+ title: "Transactions Matched",
15983
+ description: `Matched ${braidTxn?.id} with ${fedTxn?.id}`
15984
+ });
15985
+ };
15986
+ const canMatch = selectedBraid && selectedFed;
15987
+ const braidTotalPages = Math.ceil(braidData.length / braidRowsPerPage);
15988
+ const braidStartIndex = (braidPage - 1) * braidRowsPerPage;
15989
+ const braidPaginatedData = braidData.slice(braidStartIndex, braidStartIndex + braidRowsPerPage);
15990
+ const fedTotalPages = Math.ceil(fedData.length / fedRowsPerPage);
15991
+ const fedStartIndex = (fedPage - 1) * fedRowsPerPage;
15992
+ const fedPaginatedData = fedData.slice(fedStartIndex, fedStartIndex + fedRowsPerPage);
15993
+ return /* @__PURE__ */ jsx(Container, { size: "full", padding: "lg", children: /* @__PURE__ */ jsxs(Stack, { spacing: "lg", children: [
15994
+ /* @__PURE__ */ jsxs("div", { children: [
15995
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight", children: "Exception Review" }),
15996
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-2", children: "Compare Braid posted transactions with Fed settlement records for reconciliation" })
15997
+ ] }),
15998
+ /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "pt-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end gap-4", children: [
15999
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-[200px]", children: /* @__PURE__ */ jsx(
16000
+ DatePicker,
16001
+ {
16002
+ label: "From Date",
16003
+ date: fromDate,
16004
+ onDateChange: setFromDate,
16005
+ placeholder: "Select from date"
16006
+ }
16007
+ ) }),
16008
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-[200px]", children: /* @__PURE__ */ jsx(
16009
+ DatePicker,
16010
+ {
16011
+ label: "To Date",
16012
+ date: toDate,
16013
+ onDateChange: setToDate,
16014
+ placeholder: "Select to date"
16015
+ }
16016
+ ) }),
16017
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-[200px]", children: [
16018
+ /* @__PURE__ */ jsx(Label, { children: "Transaction Type" }),
16019
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-4 mt-2", children: [
16020
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
16021
+ /* @__PURE__ */ jsx(
16022
+ "input",
16023
+ {
16024
+ type: "radio",
16025
+ value: "ACH",
16026
+ checked: transactionType === "ACH",
16027
+ onChange: (e) => setTransactionType(e.target.value),
16028
+ className: "w-4 h-4 text-primary"
16029
+ }
16030
+ ),
16031
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: "ACH" })
16032
+ ] }),
16033
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
16034
+ /* @__PURE__ */ jsx(
16035
+ "input",
16036
+ {
16037
+ type: "radio",
16038
+ value: "Wire",
16039
+ checked: transactionType === "Wire",
16040
+ onChange: (e) => setTransactionType(e.target.value),
16041
+ className: "w-4 h-4 text-primary"
16042
+ }
16043
+ ),
16044
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: "Wire" })
16045
+ ] })
16046
+ ] })
16047
+ ] }),
16048
+ /* @__PURE__ */ jsxs(Button, { onClick: handleSearch, className: "gap-2", children: [
16049
+ /* @__PURE__ */ jsx(Search, { className: "h-4 w-4" }),
16050
+ "Search"
16051
+ ] })
16052
+ ] }) }) }),
16053
+ !dataLoaded ? /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "py-12 text-center text-muted-foreground", children: "Select date range and transaction type, then click Search to load data" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
16054
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
16055
+ /* @__PURE__ */ jsxs(Card, { className: "flex flex-col", children: [
16056
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "text-lg", children: [
16057
+ "Braid Posted Transactions (",
16058
+ braidData.length,
16059
+ ")"
16060
+ ] }) }),
16061
+ /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col flex-1", children: [
16062
+ /* @__PURE__ */ jsx("div", { className: "rounded-md border flex-1 overflow-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
16063
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
16064
+ /* @__PURE__ */ jsx(TableHead, { className: "w-12" }),
16065
+ /* @__PURE__ */ jsx(TableHead, { children: "Amount" }),
16066
+ /* @__PURE__ */ jsx(TableHead, { children: "Post Date" }),
16067
+ /* @__PURE__ */ jsx(TableHead, { children: "Sender Account" }),
16068
+ /* @__PURE__ */ jsx(TableHead, { children: "Receiver Account" })
16069
+ ] }) }),
16070
+ /* @__PURE__ */ jsx(TableBody, { children: braidData.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 5, className: "text-center text-muted-foreground", children: "No transactions found" }) }) : braidPaginatedData.map((txn) => /* @__PURE__ */ jsxs(
16071
+ TableRow,
16072
+ {
16073
+ className: selectedBraid === txn.id ? "bg-muted" : "",
16074
+ children: [
16075
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
16076
+ "input",
16077
+ {
16078
+ type: "radio",
16079
+ name: "braid-select",
16080
+ checked: selectedBraid === txn.id,
16081
+ onChange: () => setSelectedBraid(txn.id),
16082
+ className: "w-4 h-4 text-primary cursor-pointer"
16083
+ }
16084
+ ) }),
16085
+ /* @__PURE__ */ jsxs(TableCell, { className: "font-medium", children: [
16086
+ "$",
16087
+ txn.amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
16088
+ ] }),
16089
+ /* @__PURE__ */ jsx(TableCell, { children: format(new Date(txn.postDate), "MMM dd, yyyy") }),
16090
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: txn.senderAccount }),
16091
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: txn.receiverAccount })
16092
+ ]
16093
+ },
16094
+ txn.id
16095
+ )) })
16096
+ ] }) }),
16097
+ braidData.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4", children: [
16098
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
16099
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Rows per page:" }),
16100
+ /* @__PURE__ */ jsxs(
16101
+ "select",
16102
+ {
16103
+ value: braidRowsPerPage,
16104
+ onChange: (e) => {
16105
+ setBraidRowsPerPage(Number(e.target.value));
16106
+ setBraidPage(1);
16107
+ },
16108
+ className: "h-8 w-16 rounded-md border border-input bg-background px-2 text-sm",
16109
+ children: [
16110
+ /* @__PURE__ */ jsx("option", { value: 10, children: "10" }),
16111
+ /* @__PURE__ */ jsx("option", { value: 25, children: "25" }),
16112
+ /* @__PURE__ */ jsx("option", { value: 50, children: "50" })
16113
+ ]
16114
+ }
16115
+ )
16116
+ ] }),
16117
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
16118
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
16119
+ "Page ",
16120
+ braidPage,
16121
+ " of ",
16122
+ braidTotalPages
16123
+ ] }),
16124
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
16125
+ /* @__PURE__ */ jsx(
16126
+ Button,
16127
+ {
16128
+ variant: "outline",
16129
+ size: "sm",
16130
+ onClick: () => setBraidPage(Math.max(1, braidPage - 1)),
16131
+ disabled: braidPage === 1,
16132
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
16133
+ }
16134
+ ),
16135
+ /* @__PURE__ */ jsx(
16136
+ Button,
16137
+ {
16138
+ variant: "outline",
16139
+ size: "sm",
16140
+ onClick: () => setBraidPage(Math.min(braidTotalPages, braidPage + 1)),
16141
+ disabled: braidPage === braidTotalPages,
16142
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
16143
+ }
16144
+ )
16145
+ ] })
16146
+ ] })
16147
+ ] })
16148
+ ] })
16149
+ ] }),
16150
+ /* @__PURE__ */ jsxs(Card, { className: "flex flex-col", children: [
16151
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "text-lg", children: [
16152
+ "Fed Settlement Records (",
16153
+ fedData.length,
16154
+ ")"
16155
+ ] }) }),
16156
+ /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col flex-1", children: [
16157
+ /* @__PURE__ */ jsx("div", { className: "rounded-md border flex-1 overflow-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
16158
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
16159
+ /* @__PURE__ */ jsx(TableHead, { className: "w-12" }),
16160
+ /* @__PURE__ */ jsx(TableHead, { children: "Amount" }),
16161
+ /* @__PURE__ */ jsx(TableHead, { children: "Settlement Date" }),
16162
+ /* @__PURE__ */ jsx(TableHead, { children: "Receiver Account" })
16163
+ ] }) }),
16164
+ /* @__PURE__ */ jsx(TableBody, { children: fedData.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 4, className: "text-center text-muted-foreground", children: "No settlements found" }) }) : fedPaginatedData.map((settlement) => /* @__PURE__ */ jsxs(
16165
+ TableRow,
16166
+ {
16167
+ className: selectedFed === settlement.id ? "bg-muted" : "",
16168
+ children: [
16169
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
16170
+ "input",
16171
+ {
16172
+ type: "radio",
16173
+ name: "fed-select",
16174
+ checked: selectedFed === settlement.id,
16175
+ onChange: () => setSelectedFed(settlement.id),
16176
+ className: "w-4 h-4 text-primary cursor-pointer"
16177
+ }
16178
+ ) }),
16179
+ /* @__PURE__ */ jsxs(TableCell, { className: "font-medium", children: [
16180
+ "$",
16181
+ settlement.amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
16182
+ ] }),
16183
+ /* @__PURE__ */ jsx(TableCell, { children: format(new Date(settlement.settlementDate), "MMM dd, yyyy") }),
16184
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: settlement.receiverAccount })
16185
+ ]
16186
+ },
16187
+ settlement.id
16188
+ )) })
16189
+ ] }) }),
16190
+ fedData.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4", children: [
16191
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
16192
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Rows per page:" }),
16193
+ /* @__PURE__ */ jsxs(
16194
+ "select",
16195
+ {
16196
+ value: fedRowsPerPage,
16197
+ onChange: (e) => {
16198
+ setFedRowsPerPage(Number(e.target.value));
16199
+ setFedPage(1);
16200
+ },
16201
+ className: "h-8 w-16 rounded-md border border-input bg-background px-2 text-sm",
16202
+ children: [
16203
+ /* @__PURE__ */ jsx("option", { value: 10, children: "10" }),
16204
+ /* @__PURE__ */ jsx("option", { value: 25, children: "25" }),
16205
+ /* @__PURE__ */ jsx("option", { value: 50, children: "50" })
16206
+ ]
16207
+ }
16208
+ )
16209
+ ] }),
16210
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
16211
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
16212
+ "Page ",
16213
+ fedPage,
16214
+ " of ",
16215
+ fedTotalPages
16216
+ ] }),
16217
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
16218
+ /* @__PURE__ */ jsx(
16219
+ Button,
16220
+ {
16221
+ variant: "outline",
16222
+ size: "sm",
16223
+ onClick: () => setFedPage(Math.max(1, fedPage - 1)),
16224
+ disabled: fedPage === 1,
16225
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
16226
+ }
16227
+ ),
16228
+ /* @__PURE__ */ jsx(
16229
+ Button,
16230
+ {
16231
+ variant: "outline",
16232
+ size: "sm",
16233
+ onClick: () => setFedPage(Math.min(fedTotalPages, fedPage + 1)),
16234
+ disabled: fedPage === fedTotalPages,
16235
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
16236
+ }
16237
+ )
16238
+ ] })
16239
+ ] })
16240
+ ] })
16241
+ ] })
16242
+ ] })
16243
+ ] }),
16244
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(
16245
+ Button,
16246
+ {
16247
+ size: "lg",
16248
+ onClick: handleMatch,
16249
+ disabled: !canMatch,
16250
+ className: "min-w-[200px]",
16251
+ children: "Match Selected"
16252
+ }
16253
+ ) })
16254
+ ] })
16255
+ ] }) });
16256
+ }
16257
+
16258
+ export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AccountDetail_default as AccountDetail, Accounts_default as Accounts, AddressForm, AlertDetail_default as AlertDetail, AlertDetailRouter, AlertDocuments, AlertHeaderControls, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessDetailView, BusinessFiltersSheet, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, CIPStatusBadge, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, Checkbox, ContactInfoCard, Container, ContextSection, Counterparties_default as Counterparties, CounterpartiesView, CounterpartyBasicInfo, CounterpartyDetail_default as CounterpartyDetail, CounterpartyDetailView, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, CreateBusinessView, Create_default2 as CreateCounterparty, Create_default3 as CreateIndividual, CreateVelocityLimit, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, IndividualDetail_default as IndividualDetail, Individuals_default as Individuals, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound, OFACAlertView, OriginatorCard, OriginatorFI, OriginatorFIAddress, PageLayout, PatternLibrary, PaymentInformationSection, Popover, PopoverContent, PopoverTrigger, ReceiverCard, ReconExceptions, ReconUpload, ResolveAlertDialog, ResponsiveGrid, ScrollArea, ScrollBar, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Stack, Statement, StatementHeader, StatementView, StatusBadge, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransactionDetail_default as TransactionDetail, TransactionHistory_default as TransactionHistory, TransactionTypeBadge, UIKit, UIKitShowcase, VelocityLimitDetail, VelocityLimits, WireDetailsSection, WireTransferSection, badgeVariants, buttonVariants, cardVariants, downloadCSV, generateStatementCSV, inputVariants, reducer, textareaVariants, toast, useAlertDetail, useCounterpartyEntity, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
14720
16259
  //# sourceMappingURL=index.js.map
14721
16260
  //# sourceMappingURL=index.js.map