braid-ui 1.0.49 → 1.0.50

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
@@ -12,7 +12,7 @@ import { NavLink, useLocation, useNavigate, useSearchParams, useParams, Link } f
12
12
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
13
13
  import * as DialogPrimitive from '@radix-ui/react-dialog';
14
14
  import { FormProvider as FormProvider$1, useFormContext, Controller, useForm } from 'react-hook-form';
15
- import { get } from 'lodash';
15
+ import { get, debounce } from 'lodash';
16
16
  import { zodResolver } from '@hookform/resolvers/zod';
17
17
  import { z } from 'zod';
18
18
  import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@radix-ui/react-collapsible';
@@ -8369,15 +8369,14 @@ var TRANSACTION_TYPES = [
8369
8369
  { value: "ach", label: "ACH", icon: Building2 },
8370
8370
  { value: "wire", label: "Wire", icon: Zap }
8371
8371
  ];
8372
- var CURRENCY_OPTIONS = [
8373
- { value: "USD", label: "USD - US Dollar" },
8374
- { value: "EUR", label: "EUR - Euro" },
8375
- { value: "GBP", label: "GBP - British Pound" },
8376
- { value: "JPY", label: "JPY - Japanese Yen" },
8377
- { value: "CAD", label: "CAD - Canadian Dollar" },
8378
- { value: "AUD", label: "AUD - Australian Dollar" },
8379
- { value: "CHF", label: "CHF - Swiss Franc" },
8380
- { value: "CNY", label: "CNY - Chinese Yuan" }
8372
+ var ADJUSTMENT_DIRECTION_OPTIONS = [
8373
+ { value: "debit", label: "Debit" },
8374
+ { value: "credit", label: "Credit" }
8375
+ ];
8376
+ var ADJUSTMENT_TYPE_OPTIONS = [
8377
+ { value: "collection", label: "Collection" },
8378
+ { value: "transaction_reversal", label: "Transaction Reversal" },
8379
+ { value: "transaction_adjustment", label: "Transaction Adjustment" }
8381
8380
  ];
8382
8381
  var NewTransactionView = ({
8383
8382
  form,
@@ -8389,19 +8388,39 @@ var NewTransactionView = ({
8389
8388
  submissionStatus,
8390
8389
  errorMessage,
8391
8390
  transactionId,
8391
+ isAccountLoading,
8392
+ isCounterpartyLoading,
8393
+ isSubmitting,
8394
+ counterpartySearchResults,
8395
+ isCounterpartySearching,
8396
+ showCounterpartyDropdown,
8392
8397
  onAccountLookup,
8393
- onCounterpartyLookup,
8394
8398
  onEditAccount,
8395
8399
  onEditCounterparty,
8400
+ onTransactionTypeChange,
8396
8401
  onSubmit,
8397
8402
  onCancel,
8398
8403
  onConfirmationClose,
8399
- onConfirmationOpenChange
8404
+ onConfirmationOpenChange,
8405
+ onCounterpartySearchChange,
8406
+ onCounterpartySelect,
8407
+ onCounterpartyDropdownClose,
8408
+ receiverAccountLookedUp,
8409
+ receiverAccountData,
8410
+ isReceiverAccountLoading,
8411
+ onReceiverAccountLookup,
8412
+ onEditReceiverAccount
8400
8413
  }) => {
8401
8414
  const transactionType = form.watch("transactionType");
8402
8415
  const accountNumber = form.watch("accountNumber");
8403
8416
  const counterpartyName = form.watch("counterpartyName");
8404
8417
  const amount = form.watch("amount");
8418
+ const receiverAccountNumber = form.watch("receiverAccountNumber");
8419
+ const adjustmentDirection = form.watch("adjustmentDirection");
8420
+ const adjustmentType = form.watch("adjustmentType");
8421
+ const requiresCounterparty = ["ach", "wire"].includes(transactionType);
8422
+ const isTransfer = transactionType === "transfer";
8423
+ const isAdjustment = transactionType === "adjustment";
8405
8424
  const accountDataGrid = accountData ? [
8406
8425
  {
8407
8426
  title: "Account Information",
@@ -8421,27 +8440,41 @@ var NewTransactionView = ({
8421
8440
  items: [
8422
8441
  { label: "Counterparty Name", value: counterpartyData.counterpartyName },
8423
8442
  { label: "Counterparty ID", value: counterpartyData.counterpartyId },
8424
- { label: "Type", value: counterpartyData.counterpartyType },
8425
- { label: "Status", value: counterpartyData.status },
8426
- { label: "Tax ID", value: counterpartyData.taxId },
8427
- { label: "Primary Contact", value: counterpartyData.primaryContact },
8443
+ { label: "Instrument Type", value: counterpartyData.paymentInstrumentType?.toUpperCase() || "-" },
8428
8444
  { label: "Contact Email", value: counterpartyData.contactEmail },
8429
- { label: "Contact Phone", value: counterpartyData.contactPhone },
8430
- { label: "Address", value: counterpartyData.address }
8445
+ { label: "Contact Phone", value: counterpartyData.contactPhone }
8431
8446
  ]
8432
8447
  }
8433
8448
  ] : [];
8434
- const reviewData = [
8449
+ const receiverAccountDataGrid = receiverAccountData ? [
8435
8450
  {
8436
- title: "Transaction Summary",
8451
+ title: "Receiver Account Information",
8437
8452
  items: [
8438
- { label: "Transaction Type", value: TRANSACTION_TYPES.find((t) => t.value === transactionType)?.label || "-" },
8439
- { label: "Account Number", value: accountNumber || "-" },
8440
- { label: "Counterparty", value: counterpartyName || "-" },
8441
- { label: "Amount", value: amount ? `$${amount}` : "-" },
8442
- { label: "Description", value: form.watch("description") || "N/A" }
8453
+ { label: "Account Number", value: receiverAccountData.accountNumber },
8454
+ { label: "Account Name", value: receiverAccountData.accountName },
8455
+ { label: "Account Type", value: receiverAccountData.accountType },
8456
+ { label: "Customer Name", value: receiverAccountData.customerName },
8457
+ { label: "Customer ID", value: receiverAccountData.customerId }
8443
8458
  ]
8444
8459
  }
8460
+ ] : [];
8461
+ const reviewItems = [
8462
+ { label: "Transaction Type", value: TRANSACTION_TYPES.find((t) => t.value === transactionType)?.label || "-" },
8463
+ { label: "Account Number", value: accountNumber || "-" },
8464
+ ...isAdjustment ? [
8465
+ { label: "Direction", value: adjustmentDirection === "debit" ? "Debit" : adjustmentDirection === "credit" ? "Credit" : "-" },
8466
+ { label: "Adjustment Type", value: ADJUSTMENT_TYPE_OPTIONS.find((t) => t.value === adjustmentType)?.label || "-" }
8467
+ ] : [],
8468
+ ...isTransfer ? [{ label: "Receiver Account", value: receiverAccountNumber || "-" }] : [],
8469
+ ...requiresCounterparty ? [{ label: "Counterparty", value: counterpartyName || "-" }] : [],
8470
+ { label: "Amount", value: amount ? `$${amount}` : "-" },
8471
+ { label: "Description", value: form.watch("description") || "N/A" }
8472
+ ];
8473
+ const reviewData = [
8474
+ {
8475
+ title: "Transaction Summary",
8476
+ items: reviewItems
8477
+ }
8445
8478
  ];
8446
8479
  return /* @__PURE__ */ jsx(PageLayout, { title: "New Transaction", children: /* @__PURE__ */ jsxs("div", { className: "max-w-4xl mx-auto space-y-6", children: [
8447
8480
  /* @__PURE__ */ jsx(FormProvider, { form, children: /* @__PURE__ */ jsxs("form", { onSubmit: (e) => e.preventDefault(), children: [
@@ -8453,16 +8486,19 @@ var NewTransactionView = ({
8453
8486
  placeholder: "Enter account number"
8454
8487
  }
8455
8488
  ) }),
8456
- /* @__PURE__ */ jsxs(
8489
+ /* @__PURE__ */ jsx(
8457
8490
  Button,
8458
8491
  {
8459
8492
  onClick: onAccountLookup,
8460
- disabled: !accountNumber,
8493
+ disabled: !accountNumber || isAccountLoading,
8461
8494
  className: "shrink-0 mt-0 w-48",
8462
- children: [
8495
+ children: isAccountLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
8496
+ /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
8497
+ "Looking up..."
8498
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
8463
8499
  /* @__PURE__ */ jsx(Search, { className: "h-4 w-4 mr-2" }),
8464
8500
  "Lookup Account"
8465
- ]
8501
+ ] })
8466
8502
  }
8467
8503
  )
8468
8504
  ] }) }) : /* @__PURE__ */ jsx(
@@ -8493,7 +8529,7 @@ var NewTransactionView = ({
8493
8529
  "button",
8494
8530
  {
8495
8531
  type: "button",
8496
- onClick: () => form.setValue("transactionType", type.value),
8532
+ onClick: () => onTransactionTypeChange(type.value),
8497
8533
  disabled: !accountLookedUp,
8498
8534
  className: cn(
8499
8535
  "flex flex-col items-center justify-center p-4 lg:p-3 rounded-lg border-2 transition-all",
@@ -8516,31 +8552,99 @@ var NewTransactionView = ({
8516
8552
  }) })
8517
8553
  }
8518
8554
  ),
8519
- !counterpartyLookedUp ? /* @__PURE__ */ jsx(
8555
+ requiresCounterparty && (!counterpartyLookedUp ? /* @__PURE__ */ jsxs(
8520
8556
  FormCard,
8521
8557
  {
8522
- title: "Counterparty Lookup",
8558
+ title: "Counterparty Search",
8559
+ variant: "default",
8560
+ className: cn(!transactionType && "opacity-50 pointer-events-none"),
8561
+ children: [
8562
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
8563
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
8564
+ /* @__PURE__ */ jsx(
8565
+ "input",
8566
+ {
8567
+ type: "text",
8568
+ placeholder: "Start typing to search counterparties...",
8569
+ value: counterpartyName,
8570
+ onChange: (e) => onCounterpartySearchChange(e.target.value),
8571
+ disabled: !transactionType,
8572
+ className: cn(
8573
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
8574
+ "ring-offset-background placeholder:text-muted-foreground",
8575
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
8576
+ "disabled:cursor-not-allowed disabled:opacity-50",
8577
+ isCounterpartySearching && "pr-10"
8578
+ )
8579
+ }
8580
+ ),
8581
+ isCounterpartySearching && /* @__PURE__ */ jsx("div", { className: "absolute right-3 top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) })
8582
+ ] }),
8583
+ showCounterpartyDropdown && counterpartySearchResults.length > 0 && /* @__PURE__ */ jsx("div", { className: "absolute z-50 w-full mt-1 bg-popover border border-border rounded-md shadow-lg max-h-60 overflow-auto", children: counterpartySearchResults.map((result) => /* @__PURE__ */ jsxs(
8584
+ "button",
8585
+ {
8586
+ type: "button",
8587
+ onClick: () => onCounterpartySelect(result),
8588
+ className: "w-full px-3 py-2 text-left hover:bg-accent transition-colors",
8589
+ children: [
8590
+ /* @__PURE__ */ jsx("div", { className: "font-medium text-sm", children: result.name }),
8591
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: result.id })
8592
+ ]
8593
+ },
8594
+ result.id
8595
+ )) }),
8596
+ showCounterpartyDropdown && counterpartySearchResults.length === 0 && !isCounterpartySearching && counterpartyName.length >= 2 && /* @__PURE__ */ jsx("div", { className: "absolute z-50 w-full mt-1 bg-popover border border-border rounded-md shadow-lg p-3", children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
8597
+ 'No counterparties found matching "',
8598
+ counterpartyName,
8599
+ '"'
8600
+ ] }) })
8601
+ ] }),
8602
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: "Type at least 2 characters to search" })
8603
+ ]
8604
+ }
8605
+ ) : /* @__PURE__ */ jsx(
8606
+ FormCard,
8607
+ {
8608
+ title: "Counterparty Information",
8609
+ variant: "subtle",
8610
+ headerActions: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
8611
+ /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5 text-success" }),
8612
+ /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onEditCounterparty, children: [
8613
+ /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4 mr-1" }),
8614
+ "Edit"
8615
+ ] })
8616
+ ] }),
8617
+ children: /* @__PURE__ */ jsx(DataGrid, { data: counterpartyDataGrid, columns: 2 })
8618
+ }
8619
+ )),
8620
+ isTransfer && (!receiverAccountLookedUp ? /* @__PURE__ */ jsx(
8621
+ FormCard,
8622
+ {
8623
+ title: "Receiver Account",
8523
8624
  variant: "default",
8524
8625
  className: cn(!transactionType && "opacity-50 pointer-events-none"),
8525
8626
  children: /* @__PURE__ */ jsxs("div", { className: "flex gap-3 items-start w-full", children: [
8526
8627
  /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
8527
8628
  FormInput,
8528
8629
  {
8529
- name: "counterpartyName",
8530
- placeholder: "Enter counterparty name",
8630
+ name: "receiverAccountNumber",
8631
+ placeholder: "Enter receiver account number",
8531
8632
  disabled: !transactionType
8532
8633
  }
8533
8634
  ) }),
8534
- /* @__PURE__ */ jsxs(
8635
+ /* @__PURE__ */ jsx(
8535
8636
  Button,
8536
8637
  {
8537
- onClick: onCounterpartyLookup,
8538
- disabled: !transactionType || !counterpartyName,
8638
+ onClick: onReceiverAccountLookup,
8639
+ disabled: !receiverAccountNumber || isReceiverAccountLoading,
8539
8640
  className: "shrink-0 mt-0 w-48",
8540
- children: [
8641
+ children: isReceiverAccountLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
8642
+ /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
8643
+ "Looking up..."
8644
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
8541
8645
  /* @__PURE__ */ jsx(Search, { className: "h-4 w-4 mr-2" }),
8542
- "Lookup Counterparty"
8543
- ]
8646
+ "Lookup Receiver"
8647
+ ] })
8544
8648
  }
8545
8649
  )
8546
8650
  ] })
@@ -8548,54 +8652,66 @@ var NewTransactionView = ({
8548
8652
  ) : /* @__PURE__ */ jsx(
8549
8653
  FormCard,
8550
8654
  {
8551
- title: "Counterparty Information",
8655
+ title: "Receiver Account Information",
8552
8656
  variant: "subtle",
8553
8657
  headerActions: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
8554
8658
  /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5 text-success" }),
8555
- /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onEditCounterparty, children: [
8659
+ /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onEditReceiverAccount, children: [
8556
8660
  /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4 mr-1" }),
8557
8661
  "Edit"
8558
8662
  ] })
8559
8663
  ] }),
8560
- children: /* @__PURE__ */ jsx(DataGrid, { data: counterpartyDataGrid, columns: 2 })
8664
+ children: /* @__PURE__ */ jsx(DataGrid, { data: receiverAccountDataGrid, columns: 2 })
8561
8665
  }
8562
- ),
8666
+ )),
8563
8667
  /* @__PURE__ */ jsx(
8564
8668
  FormCard,
8565
8669
  {
8566
8670
  title: "Transaction Details",
8567
8671
  variant: "default",
8568
- className: cn(!counterpartyLookedUp && "opacity-50 pointer-events-none"),
8672
+ className: cn(
8673
+ requiresCounterparty ? !counterpartyLookedUp && "opacity-50 pointer-events-none" : isTransfer ? !receiverAccountLookedUp && "opacity-50 pointer-events-none" : !transactionType && "opacity-50 pointer-events-none"
8674
+ ),
8569
8675
  children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
8570
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-[1fr_auto] gap-4", children: [
8676
+ isAdjustment && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
8571
8677
  /* @__PURE__ */ jsx(
8572
- FormInput,
8678
+ FormSelect,
8573
8679
  {
8574
- name: "amount",
8575
- label: "Amount",
8576
- placeholder: "0.00",
8577
- type: "number",
8578
- disabled: !counterpartyLookedUp
8680
+ name: "adjustmentDirection",
8681
+ label: "Direction",
8682
+ placeholder: "Select direction",
8683
+ options: ADJUSTMENT_DIRECTION_OPTIONS,
8684
+ disabled: !transactionType
8579
8685
  }
8580
8686
  ),
8581
8687
  /* @__PURE__ */ jsx(
8582
8688
  FormSelect,
8583
8689
  {
8584
- name: "currency",
8585
- label: "Currency",
8586
- options: CURRENCY_OPTIONS,
8587
- disabled: !counterpartyLookedUp,
8588
- className: "w-48"
8690
+ name: "adjustmentType",
8691
+ label: "Adjustment Type",
8692
+ placeholder: "Select type",
8693
+ options: ADJUSTMENT_TYPE_OPTIONS,
8694
+ disabled: !transactionType
8589
8695
  }
8590
8696
  )
8591
8697
  ] }),
8698
+ /* @__PURE__ */ jsx(
8699
+ FormInput,
8700
+ {
8701
+ name: "amount",
8702
+ label: "Amount",
8703
+ placeholder: "0.00",
8704
+ type: "number",
8705
+ disabled: requiresCounterparty ? !counterpartyLookedUp : isTransfer ? !receiverAccountLookedUp : !transactionType
8706
+ }
8707
+ ),
8592
8708
  /* @__PURE__ */ jsx(
8593
8709
  FormInput,
8594
8710
  {
8595
8711
  name: "description",
8596
8712
  label: "Description (Optional)",
8597
8713
  placeholder: "Enter transaction description",
8598
- disabled: !counterpartyLookedUp
8714
+ disabled: requiresCounterparty ? !counterpartyLookedUp : isTransfer ? !receiverAccountLookedUp : !transactionType
8599
8715
  }
8600
8716
  )
8601
8717
  ] })
@@ -8633,17 +8749,20 @@ var NewTransactionView = ({
8633
8749
  ) }),
8634
8750
  /* @__PURE__ */ jsxs("div", { className: "flex gap-3 justify-end pt-4 border-t border-border", children: [
8635
8751
  /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: onCancel, className: "w-32", children: "Cancel" }),
8636
- /* @__PURE__ */ jsxs(
8752
+ /* @__PURE__ */ jsx(
8637
8753
  Button,
8638
8754
  {
8639
8755
  type: "button",
8640
8756
  onClick: onSubmit,
8641
8757
  className: "w-48",
8642
- disabled: !transactionType || !accountNumber || !counterpartyName || !amount || !form.watch("certifyInformation"),
8643
- children: [
8758
+ disabled: !transactionType || !accountNumber || requiresCounterparty && !counterpartyName || isTransfer && !receiverAccountLookedUp || isAdjustment && (!adjustmentDirection || !adjustmentType) || !amount || !form.watch("certifyInformation") || isSubmitting,
8759
+ children: isSubmitting ? /* @__PURE__ */ jsxs(Fragment, { children: [
8760
+ /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
8761
+ "Submitting..."
8762
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
8644
8763
  /* @__PURE__ */ jsx(CheckCircle2, { className: "h-4 w-4 mr-2" }),
8645
8764
  "Submit Transaction"
8646
- ]
8765
+ ] })
8647
8766
  }
8648
8767
  )
8649
8768
  ] })
@@ -8673,7 +8792,7 @@ var NewTransactionView = ({
8673
8792
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Type:" }),
8674
8793
  /* @__PURE__ */ jsx("span", { className: "font-medium", children: TRANSACTION_TYPES.find((t) => t.value === transactionType)?.label })
8675
8794
  ] }),
8676
- /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
8795
+ requiresCounterparty && counterpartyName && /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
8677
8796
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Counterparty:" }),
8678
8797
  /* @__PURE__ */ jsx("span", { className: "font-medium", children: counterpartyName })
8679
8798
  ] })
@@ -14155,13 +14274,42 @@ var TransactionHistory_default = TransactionHistory;
14155
14274
  var newTransactionSchema = z.object({
14156
14275
  transactionType: z.string().min(1, "Transaction type is required"),
14157
14276
  accountNumber: z.string().min(1, "Account number is required"),
14158
- counterpartyName: z.string().min(1, "Counterparty name is required"),
14277
+ counterpartyName: z.string().optional(),
14159
14278
  amount: z.string().min(1, "Amount is required"),
14160
- currency: z.string().min(1, "Currency is required"),
14161
14279
  description: z.string().optional(),
14162
14280
  certifyInformation: z.boolean().refine((val) => val === true, {
14163
14281
  message: "You must certify the information is correct"
14164
- })
14282
+ }),
14283
+ // Adjustment-specific fields
14284
+ adjustmentDirection: z.string().optional(),
14285
+ adjustmentType: z.string().optional(),
14286
+ // Transfer-specific fields
14287
+ receiverAccountNumber: z.string().optional()
14288
+ }).refine((data) => {
14289
+ const requiresCounterparty = ["ach", "wire"].includes(data.transactionType);
14290
+ if (requiresCounterparty && !data.counterpartyName) {
14291
+ return false;
14292
+ }
14293
+ return true;
14294
+ }, {
14295
+ message: "Counterparty is required for ACH and Wire transactions",
14296
+ path: ["counterpartyName"]
14297
+ }).refine((data) => {
14298
+ if (data.transactionType === "adjustment") {
14299
+ if (!data.adjustmentDirection || !data.adjustmentType) return false;
14300
+ }
14301
+ return true;
14302
+ }, {
14303
+ message: "Direction and Type are required for Adjustment transactions",
14304
+ path: ["adjustmentDirection"]
14305
+ }).refine((data) => {
14306
+ if (data.transactionType === "transfer") {
14307
+ if (!data.receiverAccountNumber) return false;
14308
+ }
14309
+ return true;
14310
+ }, {
14311
+ message: "Receiver account number is required for Transfer transactions",
14312
+ path: ["receiverAccountNumber"]
14165
14313
  });
14166
14314
  var mockAccountData = {
14167
14315
  accountNumber: "****1234",
@@ -14172,27 +14320,25 @@ var mockAccountData = {
14172
14320
  customerId: "CUST-001",
14173
14321
  customerType: "Business"
14174
14322
  };
14175
- var mockCounterpartyData = {
14176
- counterpartyName: "Global Tech Solutions Inc.",
14177
- counterpartyId: "CP-5678",
14178
- counterpartyType: "Business",
14179
- status: "Active",
14180
- taxId: "98-7654321",
14181
- primaryContact: "Sarah Johnson",
14182
- contactEmail: "sarah.johnson@globaltech.com",
14183
- contactPhone: "+1 (555) 987-6543",
14184
- address: "456 Innovation Drive, San Francisco, CA 94105"
14185
- };
14186
14323
  function NewTransaction() {
14187
14324
  const navigate = useNavigate();
14188
14325
  const [accountLookedUp, setAccountLookedUp] = useState(false);
14189
14326
  const [accountData, setAccountData] = useState(null);
14190
14327
  const [counterpartyLookedUp, setCounterpartyLookedUp] = useState(false);
14191
14328
  const [counterpartyData, setCounterpartyData] = useState(null);
14329
+ const [counterpartySearchResults, setCounterpartySearchResults] = useState([]);
14330
+ const [isCounterpartySearching, setIsCounterpartySearching] = useState(false);
14331
+ const [showCounterpartyDropdown, setShowCounterpartyDropdown] = useState(false);
14192
14332
  const [confirmationOpen, setConfirmationOpen] = useState(false);
14193
14333
  const [submissionStatus, setSubmissionStatus] = useState(null);
14194
14334
  const [errorMessage, setErrorMessage] = useState("");
14195
14335
  const [transactionId, setTransactionId] = useState("");
14336
+ const [isAccountLoading, setIsAccountLoading] = useState(false);
14337
+ const [isCounterpartyLoading, setIsCounterpartyLoading] = useState(false);
14338
+ const [isSubmitting, setIsSubmitting] = useState(false);
14339
+ const [receiverAccountLookedUp, setReceiverAccountLookedUp] = useState(false);
14340
+ const [receiverAccountData, setReceiverAccountData] = useState(null);
14341
+ const [isReceiverAccountLoading, setIsReceiverAccountLoading] = useState(false);
14196
14342
  const form = useForm({
14197
14343
  resolver: zodResolver(newTransactionSchema),
14198
14344
  defaultValues: {
@@ -14200,30 +14346,131 @@ function NewTransaction() {
14200
14346
  accountNumber: "",
14201
14347
  counterpartyName: "",
14202
14348
  amount: "",
14203
- currency: "USD",
14204
14349
  description: "",
14205
- certifyInformation: false
14350
+ certifyInformation: false,
14351
+ adjustmentDirection: "",
14352
+ adjustmentType: "",
14353
+ receiverAccountNumber: ""
14206
14354
  }
14207
14355
  });
14208
- const handleAccountLookup = () => {
14356
+ const handleAccountLookup = async () => {
14209
14357
  const accNum = form.getValues("accountNumber");
14210
14358
  if (!accNum) {
14211
14359
  toast$1.error("Please enter an account number");
14212
14360
  return;
14213
14361
  }
14214
- setAccountData(mockAccountData);
14215
- setAccountLookedUp(true);
14216
- toast$1.success("Account found");
14362
+ setIsAccountLoading(true);
14363
+ try {
14364
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
14365
+ setAccountData(mockAccountData);
14366
+ setAccountLookedUp(true);
14367
+ toast$1.success("Account found");
14368
+ } catch (error) {
14369
+ toast$1.error("Failed to lookup account");
14370
+ } finally {
14371
+ setIsAccountLoading(false);
14372
+ }
14217
14373
  };
14218
- const handleCounterpartyLookup = () => {
14219
- const cpName = form.getValues("counterpartyName");
14220
- if (!cpName) {
14221
- toast$1.error("Please enter a counterparty name");
14222
- return;
14374
+ const mockSearchResults = [
14375
+ { id: "CP-5678", name: "Global Tech Solutions Inc.", type: "Business", paymentInstrumentType: "wire" },
14376
+ { id: "CP-1234", name: "Global Industries LLC", type: "Business", paymentInstrumentType: "ach" },
14377
+ { id: "CP-9012", name: "GlobalCorp Partners", type: "Business", paymentInstrumentType: "both" },
14378
+ { id: "CP-3456", name: "Acme Corporation", type: "Business", paymentInstrumentType: "wire" },
14379
+ { id: "CP-7890", name: "Tech Innovations Ltd", type: "Business", paymentInstrumentType: "ach" }
14380
+ ];
14381
+ const isCounterpartyCompatible = (instrumentType, transactionType) => {
14382
+ if (instrumentType === "both") return true;
14383
+ if (transactionType === "ach" && instrumentType === "ach") return true;
14384
+ if (transactionType === "wire" && instrumentType === "wire") return true;
14385
+ return false;
14386
+ };
14387
+ const debouncedSearch = useMemo(
14388
+ () => debounce(async (query, txType) => {
14389
+ if (query.length < 2) {
14390
+ setCounterpartySearchResults([]);
14391
+ setShowCounterpartyDropdown(false);
14392
+ return;
14393
+ }
14394
+ setIsCounterpartySearching(true);
14395
+ try {
14396
+ await new Promise((resolve) => setTimeout(resolve, 350));
14397
+ let results = mockSearchResults.filter(
14398
+ (cp) => cp.name.toLowerCase().includes(query.toLowerCase())
14399
+ );
14400
+ if (txType === "ach") {
14401
+ results = results.filter(
14402
+ (cp) => cp.paymentInstrumentType === "ach" || cp.paymentInstrumentType === "both"
14403
+ );
14404
+ } else if (txType === "wire") {
14405
+ results = results.filter(
14406
+ (cp) => cp.paymentInstrumentType === "wire" || cp.paymentInstrumentType === "both"
14407
+ );
14408
+ }
14409
+ setCounterpartySearchResults(results);
14410
+ setShowCounterpartyDropdown(true);
14411
+ } finally {
14412
+ setIsCounterpartySearching(false);
14413
+ }
14414
+ }, 350),
14415
+ []
14416
+ );
14417
+ useEffect(() => {
14418
+ return () => {
14419
+ debouncedSearch.cancel();
14420
+ };
14421
+ }, [debouncedSearch]);
14422
+ const handleCounterpartySearchChange = (value) => {
14423
+ form.setValue("counterpartyName", value);
14424
+ if (counterpartyLookedUp) {
14425
+ setCounterpartyLookedUp(false);
14426
+ setCounterpartyData(null);
14223
14427
  }
14224
- setCounterpartyData(mockCounterpartyData);
14225
- setCounterpartyLookedUp(true);
14226
- toast$1.success("Counterparty found");
14428
+ debouncedSearch(value, form.getValues("transactionType"));
14429
+ };
14430
+ const handleTransactionTypeChange = (newType) => {
14431
+ form.setValue("transactionType", newType);
14432
+ if (counterpartyData && counterpartyLookedUp) {
14433
+ const requiresCounterparty = ["ach", "wire"].includes(newType);
14434
+ if (requiresCounterparty) {
14435
+ const isCompatible = isCounterpartyCompatible(
14436
+ counterpartyData.paymentInstrumentType,
14437
+ newType
14438
+ );
14439
+ if (!isCompatible) {
14440
+ setCounterpartyLookedUp(false);
14441
+ setCounterpartyData(null);
14442
+ setCounterpartySearchResults([]);
14443
+ form.setValue("counterpartyName", "");
14444
+ const typeLabel = newType === "ach" ? "ACH" : "Wire";
14445
+ toast$1.warning(
14446
+ `${counterpartyData.counterpartyName} doesn't support ${typeLabel} transactions. Please select a different counterparty.`
14447
+ );
14448
+ }
14449
+ }
14450
+ }
14451
+ };
14452
+ const handleCounterpartySelect = (result) => {
14453
+ form.setValue("counterpartyName", result.name);
14454
+ setShowCounterpartyDropdown(false);
14455
+ setCounterpartySearchResults([]);
14456
+ setIsCounterpartyLoading(true);
14457
+ setTimeout(() => {
14458
+ setCounterpartyData({
14459
+ counterpartyName: result.name,
14460
+ counterpartyId: result.id,
14461
+ counterpartyType: result.type,
14462
+ status: "Active",
14463
+ taxId: "XX-XXXXXXX",
14464
+ primaryContact: "Contact Name",
14465
+ contactEmail: "contact@example.com",
14466
+ contactPhone: "+1 (555) 123-4567",
14467
+ address: "123 Business Ave, City, ST 12345",
14468
+ paymentInstrumentType: result.paymentInstrumentType
14469
+ });
14470
+ setCounterpartyLookedUp(true);
14471
+ setIsCounterpartyLoading(false);
14472
+ toast$1.success("Counterparty selected");
14473
+ }, 500);
14227
14474
  };
14228
14475
  const handleEditAccount = () => {
14229
14476
  setAccountLookedUp(false);
@@ -14234,39 +14481,100 @@ function NewTransaction() {
14234
14481
  form.setValue("counterpartyName", "");
14235
14482
  form.setValue("amount", "");
14236
14483
  form.setValue("description", "");
14484
+ form.setValue("adjustmentDirection", "");
14485
+ form.setValue("adjustmentType", "");
14486
+ setReceiverAccountLookedUp(false);
14487
+ setReceiverAccountData(null);
14488
+ form.setValue("receiverAccountNumber", "");
14489
+ };
14490
+ const handleReceiverAccountLookup = async () => {
14491
+ const receiverNum = form.getValues("receiverAccountNumber");
14492
+ if (!receiverNum) {
14493
+ toast$1.error("Please enter a receiver account number");
14494
+ return;
14495
+ }
14496
+ setIsReceiverAccountLoading(true);
14497
+ try {
14498
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
14499
+ setReceiverAccountData({
14500
+ accountNumber: "****" + receiverNum.slice(-4),
14501
+ accountName: "Receiver Account",
14502
+ accountType: "Checking",
14503
+ balance: "$45,230.00",
14504
+ customerName: "Receiver Corp",
14505
+ customerId: "CUST-RCV-001",
14506
+ customerType: "Business"
14507
+ });
14508
+ setReceiverAccountLookedUp(true);
14509
+ toast$1.success("Receiver account found");
14510
+ } catch (error) {
14511
+ toast$1.error("Failed to lookup receiver account");
14512
+ } finally {
14513
+ setIsReceiverAccountLoading(false);
14514
+ }
14515
+ };
14516
+ const handleEditReceiverAccount = () => {
14517
+ setReceiverAccountLookedUp(false);
14518
+ setReceiverAccountData(null);
14519
+ form.setValue("receiverAccountNumber", "");
14237
14520
  };
14238
14521
  const handleEditCounterparty = () => {
14239
14522
  setCounterpartyLookedUp(false);
14240
14523
  setCounterpartyData(null);
14524
+ setCounterpartySearchResults([]);
14525
+ setShowCounterpartyDropdown(false);
14526
+ form.setValue("counterpartyName", "");
14241
14527
  form.setValue("amount", "");
14242
14528
  form.setValue("description", "");
14243
14529
  };
14244
- const handleSubmit = () => {
14530
+ const handleSubmit = async () => {
14245
14531
  const data = form.getValues();
14246
- if (!data.transactionType || !data.accountNumber || !data.counterpartyName || !data.amount) {
14532
+ const requiresCounterparty = ["ach", "wire"].includes(data.transactionType);
14533
+ if (!data.transactionType || !data.accountNumber || !data.amount) {
14247
14534
  toast$1.error("Please complete all required fields");
14248
14535
  return;
14249
14536
  }
14250
- if (!accountLookedUp || !counterpartyLookedUp) {
14251
- toast$1.error("Please lookup both account and counterparty");
14537
+ if (requiresCounterparty && (!data.counterpartyName || !counterpartyLookedUp)) {
14538
+ toast$1.error("Please lookup counterparty for this transaction type");
14252
14539
  return;
14253
14540
  }
14254
- const hasError = Math.random() > 0.7;
14255
- if (hasError) {
14256
- const errorScenarios = [
14257
- "Insufficient funds. Current balance: $125,450.00, Required: $" + parseFloat(data.amount).toFixed(2),
14258
- "Transaction limit exceeded. Daily limit: $50,000.00",
14259
- "Counterparty account is temporarily unavailable. Please try again later.",
14260
- "Invalid routing number for the selected transaction type."
14261
- ];
14262
- setSubmissionStatus("error");
14263
- setErrorMessage(errorScenarios[Math.floor(Math.random() * errorScenarios.length)]);
14264
- setConfirmationOpen(true);
14265
- } else {
14266
- const txId = "TXN-" + Math.random().toString(36).substr(2, 9).toUpperCase();
14267
- setTransactionId(txId);
14268
- setSubmissionStatus("success");
14541
+ if (!accountLookedUp) {
14542
+ toast$1.error("Please lookup account");
14543
+ return;
14544
+ }
14545
+ if (data.transactionType === "adjustment") {
14546
+ if (!data.adjustmentDirection || !data.adjustmentType) {
14547
+ toast$1.error("Please select direction and type for adjustment");
14548
+ return;
14549
+ }
14550
+ }
14551
+ if (data.transactionType === "transfer") {
14552
+ if (!data.receiverAccountNumber || !receiverAccountLookedUp) {
14553
+ toast$1.error("Please lookup receiver account for transfer");
14554
+ return;
14555
+ }
14556
+ }
14557
+ setIsSubmitting(true);
14558
+ try {
14559
+ await new Promise((resolve) => setTimeout(resolve, 1500));
14560
+ const hasError = Math.random() > 0.7;
14561
+ if (hasError) {
14562
+ const errorScenarios = [
14563
+ "Insufficient funds. Current balance: $125,450.00, Required: $" + parseFloat(data.amount).toFixed(2),
14564
+ "Transaction limit exceeded. Daily limit: $50,000.00",
14565
+ "Counterparty account is temporarily unavailable. Please try again later.",
14566
+ "Invalid routing number for the selected transaction type."
14567
+ ];
14568
+ setSubmissionStatus("error");
14569
+ setErrorMessage(errorScenarios[Math.floor(Math.random() * errorScenarios.length)]);
14570
+ } else {
14571
+ const txId = "TXN-" + Math.random().toString(36).substr(2, 9).toUpperCase();
14572
+ setTransactionId(txId);
14573
+ setSubmissionStatus("success");
14574
+ }
14269
14575
  setConfirmationOpen(true);
14576
+ } finally {
14577
+ setIsSubmitting(false);
14270
14578
  }
14271
14579
  };
14272
14580
  const handleConfirmationClose = () => {
@@ -14290,14 +14598,28 @@ function NewTransaction() {
14290
14598
  submissionStatus,
14291
14599
  errorMessage,
14292
14600
  transactionId,
14601
+ isAccountLoading,
14602
+ isCounterpartyLoading,
14603
+ isSubmitting,
14293
14604
  onAccountLookup: handleAccountLookup,
14294
- onCounterpartyLookup: handleCounterpartyLookup,
14295
14605
  onEditAccount: handleEditAccount,
14606
+ counterpartySearchResults,
14607
+ isCounterpartySearching,
14608
+ showCounterpartyDropdown,
14609
+ onCounterpartySearchChange: handleCounterpartySearchChange,
14610
+ onCounterpartySelect: handleCounterpartySelect,
14611
+ onCounterpartyDropdownClose: () => setShowCounterpartyDropdown(false),
14296
14612
  onEditCounterparty: handleEditCounterparty,
14613
+ onTransactionTypeChange: handleTransactionTypeChange,
14297
14614
  onSubmit: handleSubmit,
14298
14615
  onCancel: handleCancel,
14299
14616
  onConfirmationClose: handleConfirmationClose,
14300
- onConfirmationOpenChange: setConfirmationOpen
14617
+ onConfirmationOpenChange: setConfirmationOpen,
14618
+ receiverAccountLookedUp,
14619
+ receiverAccountData,
14620
+ isReceiverAccountLoading,
14621
+ onReceiverAccountLookup: handleReceiverAccountLookup,
14622
+ onEditReceiverAccount: handleEditReceiverAccount
14301
14623
  }
14302
14624
  );
14303
14625
  }
@@ -16330,6 +16652,6 @@ function ReconExceptions() {
16330
16652
  ] }) });
16331
16653
  }
16332
16654
 
16333
- 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, CURRENCY_OPTIONS, 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, CreateCounterpartyView, 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, NewTransactionView, 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, TRANSACTION_TYPES, 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, newTransactionSchema, reducer, textareaVariants, toast, useAlertDetail, useCounterpartyEntity, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
16655
+ export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, ADJUSTMENT_DIRECTION_OPTIONS, ADJUSTMENT_TYPE_OPTIONS, 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, CreateCounterpartyView, 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, NewTransactionView, 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, TRANSACTION_TYPES, 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, newTransactionSchema, reducer, textareaVariants, toast, useAlertDetail, useCounterpartyEntity, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
16334
16656
  //# sourceMappingURL=index.js.map
16335
16657
  //# sourceMappingURL=index.js.map