@layerfi/components 0.1.42 → 0.1.44

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
@@ -5389,7 +5389,8 @@ var MatchForm = ({
5389
5389
  bankTransaction,
5390
5390
  selectedMatchId,
5391
5391
  setSelectedMatchId,
5392
- matchFormError
5392
+ matchFormError,
5393
+ readOnly = false
5393
5394
  }) => {
5394
5395
  return /* @__PURE__ */ import_react62.default.createElement("div", { className: `${classNamePrefix}__match-table` }, /* @__PURE__ */ import_react62.default.createElement("div", { className: `${classNamePrefix}__match-table__header` }, /* @__PURE__ */ import_react62.default.createElement("div", { className: `${classNamePrefix}__match-table__date` }, "Date"), /* @__PURE__ */ import_react62.default.createElement("div", { className: `${classNamePrefix}__match-table__desc` }, "Description"), /* @__PURE__ */ import_react62.default.createElement("div", { className: `${classNamePrefix}__match-table__amount` }, "Amount"), /* @__PURE__ */ import_react62.default.createElement(
5395
5396
  "div",
@@ -5406,6 +5407,9 @@ var MatchForm = ({
5406
5407
  match.id === selectedMatchId ? `${classNamePrefix}__match-row--selected` : ""
5407
5408
  ),
5408
5409
  onClick: () => {
5410
+ if (readOnly === true) {
5411
+ return;
5412
+ }
5409
5413
  if (selectedMatchId === match.id) {
5410
5414
  setSelectedMatchId(void 0);
5411
5415
  return;
@@ -5814,6 +5818,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
5814
5818
  submitBtnText = "Save",
5815
5819
  containerWidth,
5816
5820
  showDescriptions,
5821
+ mode,
5817
5822
  showReceiptUploads,
5818
5823
  hardRefreshPnlOnCategorize
5819
5824
  }, ref) => {
@@ -5886,7 +5891,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
5886
5891
  };
5887
5892
  const sanitizeNumberInput = (input) => {
5888
5893
  let sanitized = input.replace(/[^0-9.]/g, "");
5889
- let parts = sanitized.split(".");
5894
+ const parts = sanitized.split(".");
5890
5895
  if (parts.length > 2) {
5891
5896
  sanitized = parts[0] + "." + parts.slice(1).join("");
5892
5897
  }
@@ -6076,7 +6081,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6076
6081
  style: { height },
6077
6082
  onTransitionEnd: handleTransitionEnd
6078
6083
  },
6079
- shouldHide ? null : /* @__PURE__ */ import_react67.default.createElement("span", { className: `${className}__wrapper`, ref: bodyRef }, /* @__PURE__ */ import_react67.default.createElement("div", { className: `${className}__content-toggle` }, /* @__PURE__ */ import_react67.default.createElement(
6084
+ shouldHide ? null : /* @__PURE__ */ import_react67.default.createElement("span", { className: `${className}__wrapper`, ref: bodyRef }, categorizationEnabled(mode) ? /* @__PURE__ */ import_react67.default.createElement("div", { className: `${className}__content-toggle` }, /* @__PURE__ */ import_react67.default.createElement(
6080
6085
  Toggle,
6081
6086
  {
6082
6087
  name: `purpose-${bankTransaction.id}${asListItem ? "-li" : ""}`,
@@ -6096,7 +6101,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6096
6101
  selected: purpose,
6097
6102
  onChange: onChangePurpose
6098
6103
  }
6099
- )), /* @__PURE__ */ import_react67.default.createElement(
6104
+ )) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null), /* @__PURE__ */ import_react67.default.createElement(
6100
6105
  "div",
6101
6106
  {
6102
6107
  className: `${className}__content`,
@@ -6117,6 +6122,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6117
6122
  classNamePrefix: className,
6118
6123
  bankTransaction,
6119
6124
  selectedMatchId,
6125
+ readOnly: !categorizationEnabled(mode),
6120
6126
  setSelectedMatchId: (id) => {
6121
6127
  setMatchFormError(void 0);
6122
6128
  setSelectedMatchId(id);
@@ -6144,7 +6150,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6144
6150
  {
6145
6151
  type: "text",
6146
6152
  name: `split-${index}${asListItem ? "-li" : ""}`,
6147
- disabled: index === 0,
6153
+ disabled: index === 0 || !categorizationEnabled(mode),
6148
6154
  onChange: updateAmounts(index),
6149
6155
  value: split.inputValue,
6150
6156
  onBlur,
@@ -6166,7 +6172,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6166
6172
  value: split.category,
6167
6173
  onChange: (value) => changeCategory(index, value),
6168
6174
  className: "Layer__category-menu--full",
6169
- disabled: bankTransaction.processing,
6175
+ disabled: bankTransaction.processing || !categorizationEnabled(mode),
6170
6176
  excludeMatches: true
6171
6177
  }
6172
6178
  ),
@@ -6194,7 +6200,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6194
6200
  )
6195
6201
  )}`
6196
6202
  }
6197
- ), /* @__PURE__ */ import_react67.default.createElement("div", { className: `${className}__splits-buttons` }, rowState.splits.length > 1 ? /* @__PURE__ */ import_react67.default.createElement(
6203
+ ), categorizationEnabled(mode) ? /* @__PURE__ */ import_react67.default.createElement("div", { className: `${className}__splits-buttons` }, rowState.splits.length > 1 ? /* @__PURE__ */ import_react67.default.createElement(
6198
6204
  TextButton,
6199
6205
  {
6200
6206
  onClick: addSplit,
@@ -6210,7 +6216,7 @@ var ExpandedBankTransactionRow = (0, import_react67.forwardRef)(
6210
6216
  disabled: rowState.splits.length > 5
6211
6217
  },
6212
6218
  "Split"
6213
- ))))
6219
+ )) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null)))
6214
6220
  )),
6215
6221
  showDescriptions && /* @__PURE__ */ import_react67.default.createElement(
6216
6222
  InputGroup,
@@ -6330,6 +6336,7 @@ var BankTransactionRow = ({
6330
6336
  editable,
6331
6337
  dateFormat,
6332
6338
  bankTransaction,
6339
+ mode,
6333
6340
  removeTransaction,
6334
6341
  containerWidth,
6335
6342
  initialLoad,
@@ -6549,7 +6556,7 @@ var BankTransactionRow = ({
6549
6556
  /* @__PURE__ */ import_react69.default.createElement("span", null, "Unsaved"),
6550
6557
  /* @__PURE__ */ import_react69.default.createElement(AlertCircle_default, { size: 12 })
6551
6558
  ) : null,
6552
- !categorized && (open || !open && !showRetry) || categorized && open ? /* @__PURE__ */ import_react69.default.createElement(
6559
+ !categorized && (open || !open && !showRetry) || categorizationEnabled(mode) && categorized && open ? /* @__PURE__ */ import_react69.default.createElement(
6553
6560
  SubmitButton,
6554
6561
  {
6555
6562
  onClick: () => {
@@ -6586,6 +6593,7 @@ var BankTransactionRow = ({
6586
6593
  bankTransaction,
6587
6594
  categorized,
6588
6595
  isOpen: open,
6596
+ mode,
6589
6597
  close: () => setOpen(false),
6590
6598
  containerWidth,
6591
6599
  showDescriptions,
@@ -6640,6 +6648,7 @@ var BankTransactionListItem = ({
6640
6648
  dateFormat,
6641
6649
  bankTransaction,
6642
6650
  editable,
6651
+ mode,
6643
6652
  showDescriptions,
6644
6653
  showReceiptUploads,
6645
6654
  hardRefreshPnlOnCategorize,
@@ -6735,6 +6744,7 @@ var BankTransactionListItem = ({
6735
6744
  ref: expandedRowRef,
6736
6745
  bankTransaction,
6737
6746
  isOpen: open,
6747
+ mode,
6738
6748
  close: () => setOpen(false),
6739
6749
  categorized,
6740
6750
  asListItem: true,
@@ -6790,6 +6800,7 @@ var BankTransactionList = ({
6790
6800
  bankTransactions,
6791
6801
  editable,
6792
6802
  removeTransaction,
6803
+ mode,
6793
6804
  containerWidth,
6794
6805
  showDescriptions = false,
6795
6806
  showReceiptUploads = false,
@@ -6804,6 +6815,7 @@ var BankTransactionList = ({
6804
6815
  key: bankTransaction.id,
6805
6816
  dateFormat: DATE_FORMAT,
6806
6817
  bankTransaction,
6818
+ mode,
6807
6819
  editable,
6808
6820
  removeTransaction,
6809
6821
  containerWidth,
@@ -7312,6 +7324,7 @@ var BankTransactionMobileListItem = ({
7312
7324
  bankTransaction,
7313
7325
  removeTransaction,
7314
7326
  editable,
7327
+ mode,
7315
7328
  initialLoad,
7316
7329
  hardRefreshPnlOnCategorize = false
7317
7330
  }) => {
@@ -7402,31 +7415,29 @@ var BankTransactionMobileListItem = ({
7402
7415
  open ? openClassName : "",
7403
7416
  showComponent ? "show" : ""
7404
7417
  );
7405
- return /* @__PURE__ */ import_react80.default.createElement(
7406
- "li",
7418
+ return /* @__PURE__ */ import_react80.default.createElement("li", { ref: itemRef, className: rowClassName, "data-item": bankTransaction.id }, /* @__PURE__ */ import_react80.default.createElement(
7419
+ "span",
7407
7420
  {
7408
- ref: itemRef,
7409
- className: rowClassName,
7410
- "data-item": bankTransaction.id
7421
+ className: `${className}__heading`,
7422
+ onClick: toggleOpen,
7423
+ role: "button",
7424
+ style: { height: headingHeight }
7411
7425
  },
7412
- /* @__PURE__ */ import_react80.default.createElement(
7426
+ /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__content`, ref: headingRowRef }, /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__main` }, /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__heading__tx-name` }, bankTransaction.counterparty_name ?? bankTransaction.description), /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__heading__account-name` }, categorized && bankTransaction.categorization_status ? getAssignedValue2(bankTransaction) : null, !categorized && bankTransaction.account_name), categorized && open && /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__categorized-name` }, bankTransaction.account_name)), /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__amount` }, /* @__PURE__ */ import_react80.default.createElement(
7413
7427
  "span",
7414
7428
  {
7415
- className: `${className}__heading`,
7416
- onClick: toggleOpen,
7417
- role: "button",
7418
- style: { height: headingHeight }
7429
+ className: `${className}__amount-${isCredit(bankTransaction) ? "credit" : "debit"}`
7419
7430
  },
7420
- /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__content`, ref: headingRowRef }, /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__main` }, /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__heading__tx-name` }, bankTransaction.counterparty_name ?? bankTransaction.description), /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__heading__account-name` }, categorized && bankTransaction.categorization_status ? getAssignedValue2(bankTransaction) : null, !categorized && bankTransaction.account_name), categorized && open && /* @__PURE__ */ import_react80.default.createElement(Text, { as: "span", className: `${className}__categorized-name` }, bankTransaction.account_name)), /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__heading__amount` }, /* @__PURE__ */ import_react80.default.createElement(
7421
- "span",
7422
- {
7423
- className: `${className}__amount-${isCredit(bankTransaction) ? "credit" : "debit"}`
7424
- },
7425
- isCredit(bankTransaction) ? "+$" : " $",
7426
- centsToDollars(bankTransaction.amount)
7427
- ), /* @__PURE__ */ import_react80.default.createElement("span", { className: `${className}__heading__date` }, (0, import_date_fns12.format)((0, import_date_fns12.parseISO)(bankTransaction.date), DATE_FORMAT2))))
7428
- ),
7429
- /* @__PURE__ */ import_react80.default.createElement("div", { className: `${className}__expanded-row`, style: { height: !open || removeAnim ? 0 : height } }, open && /* @__PURE__ */ import_react80.default.createElement(
7431
+ isCredit(bankTransaction) ? "+$" : " $",
7432
+ centsToDollars(bankTransaction.amount)
7433
+ ), /* @__PURE__ */ import_react80.default.createElement("span", { className: `${className}__heading__date` }, (0, import_date_fns12.format)((0, import_date_fns12.parseISO)(bankTransaction.date), DATE_FORMAT2))))
7434
+ ), categorizationEnabled(mode) ? /* @__PURE__ */ import_react80.default.createElement(
7435
+ "div",
7436
+ {
7437
+ className: `${className}__expanded-row`,
7438
+ style: { height: !open || removeAnim ? 0 : height }
7439
+ },
7440
+ open && /* @__PURE__ */ import_react80.default.createElement(
7430
7441
  "div",
7431
7442
  {
7432
7443
  className: `${className}__expanded-row__content`,
@@ -7441,17 +7452,20 @@ var BankTransactionMobileListItem = ({
7441
7452
  {
7442
7453
  value: "business",
7443
7454
  label: "Business",
7444
- style: { minWidth: 84 }
7455
+ style: { minWidth: 84 },
7456
+ disabled: categorizationEnabled(mode)
7445
7457
  },
7446
7458
  {
7447
7459
  value: "personal",
7448
7460
  label: "Personal",
7449
- style: { minWidth: 84 }
7461
+ style: { minWidth: 84 },
7462
+ disabled: categorizationEnabled(mode)
7450
7463
  },
7451
7464
  {
7452
7465
  value: "more",
7453
7466
  label: "More",
7454
- style: { minWidth: 84 }
7467
+ style: { minWidth: 84 },
7468
+ disabled: categorizationEnabled(mode)
7455
7469
  }
7456
7470
  ],
7457
7471
  selected: purpose,
@@ -7466,8 +7480,8 @@ var BankTransactionMobileListItem = ({
7466
7480
  hardRefreshPnlOnCategorize
7467
7481
  }
7468
7482
  )
7469
- ))
7470
- );
7483
+ )
7484
+ ) : /* @__PURE__ */ import_react80.default.createElement(import_react80.default.Fragment, null));
7471
7485
  };
7472
7486
 
7473
7487
  // src/components/BankTransactionMobileList/BankTransactionMobileList.tsx
@@ -7476,6 +7490,7 @@ var BankTransactionMobileList = ({
7476
7490
  removeTransaction,
7477
7491
  editable,
7478
7492
  initialLoad,
7493
+ mode,
7479
7494
  hardRefreshPnlOnCategorize
7480
7495
  }) => {
7481
7496
  const transactionToOpenContextData = useTransactionToOpen();
@@ -7484,6 +7499,7 @@ var BankTransactionMobileList = ({
7484
7499
  BankTransactionMobileListItem,
7485
7500
  {
7486
7501
  index,
7502
+ mode,
7487
7503
  key: bankTransaction.id,
7488
7504
  bankTransaction,
7489
7505
  editable,
@@ -7623,6 +7639,7 @@ var BankTransactionsTable = ({
7623
7639
  editable,
7624
7640
  isLoading,
7625
7641
  bankTransactions,
7642
+ mode,
7626
7643
  initialLoad,
7627
7644
  containerWidth,
7628
7645
  removeTransaction,
@@ -7651,6 +7668,7 @@ var BankTransactionsTable = ({
7651
7668
  initialLoad,
7652
7669
  index,
7653
7670
  editable,
7671
+ mode,
7654
7672
  key: bankTransaction.id,
7655
7673
  dateFormat: DATE_FORMAT,
7656
7674
  bankTransaction,
@@ -7953,7 +7971,6 @@ var isDateAllowedToBrowse = (date, business) => {
7953
7971
  // src/components/DatePicker/DatePicker.tsx
7954
7972
  var import_react92 = __toESM(require("react"));
7955
7973
  var import_react_datepicker = __toESM(require("react-datepicker"));
7956
- var import_react_datepicker2 = require("react-datepicker/dist/react-datepicker.css");
7957
7974
 
7958
7975
  // src/components/DatePicker/DatePickerOptions.tsx
7959
7976
  var import_react91 = __toESM(require("react"));
@@ -8537,12 +8554,12 @@ var BankTransactionsHeader = ({
8537
8554
  minDate: getEarliestDateToBrowse(business)
8538
8555
  }
8539
8556
  ) : null),
8540
- /* @__PURE__ */ import_react95.default.createElement("div", { className: "Layer__header__actions-wrapper" }, !categorizedOnly && !(mobileComponent == "mobileList" && listView) && categorizeView && /* @__PURE__ */ import_react95.default.createElement("div", { className: "Layer__header__actions" }, /* @__PURE__ */ import_react95.default.createElement(
8557
+ /* @__PURE__ */ import_react95.default.createElement("div", { className: "Layer__header__actions-wrapper" }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "Layer__header__actions" }, /* @__PURE__ */ import_react95.default.createElement(
8541
8558
  DownloadButton,
8542
8559
  {
8543
8560
  downloadButtonTextOverride: stringOverrides?.downloadButton
8544
8561
  }
8545
- ), /* @__PURE__ */ import_react95.default.createElement(
8562
+ ), !categorizedOnly && !(mobileComponent == "mobileList" && listView) && categorizeView && /* @__PURE__ */ import_react95.default.createElement(
8546
8563
  Toggle,
8547
8564
  {
8548
8565
  name: "bank-transaction-display",
@@ -8643,6 +8660,12 @@ var import_date_fns16 = require("date-fns");
8643
8660
  var COMPONENT_NAME2 = "bank-transactions";
8644
8661
  var TEST_EMPTY_STATE = false;
8645
8662
  var POLL_INTERVAL = 1e4;
8663
+ var categorizationEnabled = (mode) => {
8664
+ if (mode === "bookkeeping-client") {
8665
+ return false;
8666
+ }
8667
+ return true;
8668
+ };
8646
8669
  var BankTransactions = ({
8647
8670
  onError,
8648
8671
  ...props
@@ -8652,8 +8675,7 @@ var BankTransactions = ({
8652
8675
  var BankTransactionsContent = ({
8653
8676
  asWidget = false,
8654
8677
  pageSize = 20,
8655
- categorizedOnly = false,
8656
- categorizeView = true,
8678
+ mode = "self-serve",
8657
8679
  showDescriptions = false,
8658
8680
  showReceiptUploads = false,
8659
8681
  hardRefreshPnlOnCategorize = false,
@@ -8669,6 +8691,7 @@ var BankTransactionsContent = ({
8669
8691
  startDate: (0, import_date_fns16.startOfMonth)(/* @__PURE__ */ new Date()),
8670
8692
  endDate: (0, import_date_fns16.endOfMonth)(/* @__PURE__ */ new Date())
8671
8693
  });
8694
+ const categorizeView = categorizationEnabled(mode);
8672
8695
  const {
8673
8696
  activate,
8674
8697
  data,
@@ -8728,7 +8751,7 @@ var BankTransactionsContent = ({
8728
8751
  ...inputFilters,
8729
8752
  categorizationStatus: "review" /* review */
8730
8753
  });
8731
- } else if (!filters?.categorizationStatus && categorizedOnly) {
8754
+ } else if (!filters?.categorizationStatus && !categorizationEnabled(mode)) {
8732
8755
  setFilters({
8733
8756
  ...filters,
8734
8757
  ...inputFilters,
@@ -8741,12 +8764,12 @@ var BankTransactionsContent = ({
8741
8764
  setFilters({
8742
8765
  categorizationStatus: "review" /* review */
8743
8766
  });
8744
- } else if (!filters?.categorizationStatus && categorizedOnly) {
8767
+ } else if (!filters?.categorizationStatus && !categorizationEnabled(mode)) {
8745
8768
  setFilters({
8746
8769
  categorizationStatus: "categorized" /* categorized */
8747
8770
  });
8748
8771
  }
8749
- }, [inputFilters, categorizeView, categorizedOnly]);
8772
+ }, [inputFilters, categorizeView, mode]);
8750
8773
  (0, import_react97.useEffect)(() => {
8751
8774
  if (loadingStatus === "complete") {
8752
8775
  const timeoutLoad = setTimeout(() => {
@@ -8809,7 +8832,7 @@ var BankTransactionsContent = ({
8809
8832
  {
8810
8833
  shiftStickyHeader,
8811
8834
  asWidget,
8812
- categorizedOnly,
8835
+ categorizedOnly: !categorizationEnabled(mode),
8813
8836
  categorizeView,
8814
8837
  display,
8815
8838
  onCategorizationDisplayChange,
@@ -8831,6 +8854,7 @@ var BankTransactionsContent = ({
8831
8854
  isLoading,
8832
8855
  isSyncing,
8833
8856
  bankTransactions,
8857
+ mode,
8834
8858
  initialLoad,
8835
8859
  containerWidth,
8836
8860
  removeTransaction,
@@ -8846,6 +8870,7 @@ var BankTransactionsContent = ({
8846
8870
  !isLoading && listView && mobileComponent !== "mobileList" ? /* @__PURE__ */ import_react97.default.createElement(
8847
8871
  BankTransactionList,
8848
8872
  {
8873
+ mode,
8849
8874
  bankTransactions,
8850
8875
  editable,
8851
8876
  removeTransaction,
@@ -8859,6 +8884,7 @@ var BankTransactionsContent = ({
8859
8884
  {
8860
8885
  bankTransactions,
8861
8886
  editable,
8887
+ mode,
8862
8888
  removeTransaction,
8863
8889
  initialLoad,
8864
8890
  hardRefreshPnlOnCategorize
@@ -9460,9 +9486,9 @@ var ProfitAndLossChart = ({
9460
9486
  name: getMonthName(pnl),
9461
9487
  revenue: pnl?.income || 0,
9462
9488
  revenueUncategorized: pnl?.uncategorizedInflows || 0,
9463
- expenses: -(pnl?.operatingExpenses || 0),
9489
+ expenses: -(pnl?.totalExpenses || 0),
9464
9490
  expensesUncategorized: -(pnl?.uncategorizedOutflows || 0),
9465
- operatingExpensesInverse: pnl?.operatingExpensesInverse || 0,
9491
+ totalExpensesInverse: pnl?.totalExpensesInverse || 0,
9466
9492
  uncategorizedOutflowsInverse: pnl?.uncategorizedOutflowsInverse || 0,
9467
9493
  netProfit: pnl?.netProfit || 0,
9468
9494
  selected: !!pnl && pnl.month === selectionMonth.month + 1 && pnl.year === selectionMonth.year,
@@ -9482,7 +9508,7 @@ var ProfitAndLossChart = ({
9482
9508
  name: (0, import_date_fns19.format)(currentDate, compactView ? "LLLLL" : "LLL"),
9483
9509
  revenue: 0,
9484
9510
  revenueUncategorized: 0,
9485
- operatingExpensesInverse: 0,
9511
+ totalExpensesInverse: 0,
9486
9512
  uncategorizedOutflowsInverse: 0,
9487
9513
  expenses: 0,
9488
9514
  expensesUncategorized: 0,
@@ -9502,9 +9528,9 @@ var ProfitAndLossChart = ({
9502
9528
  if (totalExpenses < 0 || x.uncategorizedOutflows < 0) {
9503
9529
  return {
9504
9530
  ...x,
9505
- operatingExpenses: totalExpenses < 0 ? 0 : totalExpenses,
9531
+ totalExpenses: totalExpenses < 0 ? 0 : totalExpenses,
9506
9532
  uncategorizedOutflows: x.uncategorizedOutflows < 0 ? 0 : x.uncategorizedOutflows,
9507
- operatingExpensesInverse: totalExpenses < 0 ? -totalExpenses : 0,
9533
+ totalExpensesInverse: totalExpenses < 0 ? -totalExpenses : 0,
9508
9534
  uncategorizedOutflowsInverse: x.uncategorizedOutflows < 0 ? -x.uncategorizedOutflows : 0
9509
9535
  };
9510
9536
  }
@@ -9800,7 +9826,7 @@ var ProfitAndLossChart = ({
9800
9826
  /* @__PURE__ */ import_react103.default.createElement(
9801
9827
  import_recharts.Bar,
9802
9828
  {
9803
- dataKey: "operatingExpensesInverse",
9829
+ dataKey: "totalExpensesInverse",
9804
9830
  barSize,
9805
9831
  isAnimationActive: barAnimActive,
9806
9832
  animationDuration: 100,
@@ -10906,17 +10932,18 @@ var ProfitAndLossRow = ({
10906
10932
  variant,
10907
10933
  lineItem,
10908
10934
  depth = 0,
10909
- maxDepth = 1,
10935
+ maxDepth = 8,
10910
10936
  direction = "DEBIT" /* DEBIT */,
10911
10937
  lockExpanded = false,
10912
10938
  scope,
10913
- setSidebarScope
10939
+ setSidebarScope,
10940
+ defaultExpanded = false
10914
10941
  }) => {
10915
10942
  if (!lineItem) {
10916
10943
  return null;
10917
10944
  }
10918
10945
  const { value, display_name, line_items } = lineItem;
10919
- const [expanded, setExpanded] = (0, import_react111.useState)(true);
10946
+ const [expanded, setExpanded] = (0, import_react111.useState)(lockExpanded || defaultExpanded);
10920
10947
  const amount = value ?? 0;
10921
10948
  const amountString = centsToDollars(Math.abs(amount));
10922
10949
  const labelClasses = [
@@ -10951,7 +10978,10 @@ var ProfitAndLossRow = ({
10951
10978
  "div",
10952
10979
  {
10953
10980
  className: labelClasses.join(" "),
10954
- onClick: () => !lockExpanded && toggleExpanded()
10981
+ onClick: () => !lockExpanded && toggleExpanded(),
10982
+ style: {
10983
+ paddingLeft: depth === 0 && !hasChildren ? 28 : 16 * (depth + 1) + 2
10984
+ }
10955
10985
  },
10956
10986
  /* @__PURE__ */ import_react111.default.createElement("span", { className: "Layer__profit-and-loss-row__label__title" }, !lockExpanded && variant !== "summation" ? /* @__PURE__ */ import_react111.default.createElement(
10957
10987
  ChevronDownFill_default,
@@ -11039,7 +11069,11 @@ var empty_profit_and_loss_report_default = {
11039
11069
 
11040
11070
  // src/components/ProfitAndLossTable/ProfitAndLossTable.tsx
11041
11071
  var import_classnames46 = __toESM(require("classnames"));
11042
- var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11072
+ var ProfitAndLossTable = ({
11073
+ lockExpanded,
11074
+ asContainer,
11075
+ stringOverrides
11076
+ }) => {
11043
11077
  const {
11044
11078
  data: actualData,
11045
11079
  isLoading,
@@ -11074,7 +11108,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11074
11108
  direction: "CREDIT" /* CREDIT */,
11075
11109
  lockExpanded,
11076
11110
  scope: "revenue",
11077
- setSidebarScope
11111
+ setSidebarScope,
11112
+ defaultExpanded: true
11078
11113
  }
11079
11114
  ),
11080
11115
  /* @__PURE__ */ import_react112.default.createElement(
@@ -11084,7 +11119,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11084
11119
  direction: "DEBIT" /* DEBIT */,
11085
11120
  lockExpanded,
11086
11121
  scope: "expenses",
11087
- setSidebarScope
11122
+ setSidebarScope,
11123
+ defaultExpanded: true
11088
11124
  }
11089
11125
  ),
11090
11126
  /* @__PURE__ */ import_react112.default.createElement(
@@ -11098,7 +11134,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11098
11134
  direction: "CREDIT" /* CREDIT */,
11099
11135
  lockExpanded,
11100
11136
  scope: "revenue",
11101
- setSidebarScope
11137
+ setSidebarScope,
11138
+ defaultExpanded: true
11102
11139
  }
11103
11140
  ),
11104
11141
  /* @__PURE__ */ import_react112.default.createElement(
@@ -11108,7 +11145,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11108
11145
  direction: "DEBIT" /* DEBIT */,
11109
11146
  lockExpanded,
11110
11147
  scope: "expenses",
11111
- setSidebarScope
11148
+ setSidebarScope,
11149
+ defaultExpanded: true
11112
11150
  }
11113
11151
  ),
11114
11152
  /* @__PURE__ */ import_react112.default.createElement(
@@ -11122,7 +11160,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11122
11160
  direction: "CREDIT" /* CREDIT */,
11123
11161
  lockExpanded,
11124
11162
  scope: "revenue",
11125
- setSidebarScope
11163
+ setSidebarScope,
11164
+ defaultExpanded: true
11126
11165
  }
11127
11166
  ),
11128
11167
  /* @__PURE__ */ import_react112.default.createElement(
@@ -11132,7 +11171,8 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer, stringOverrides }) => {
11132
11171
  direction: "DEBIT" /* DEBIT */,
11133
11172
  lockExpanded,
11134
11173
  scope: "expenses",
11135
- setSidebarScope
11174
+ setSidebarScope,
11175
+ defaultExpanded: true
11136
11176
  }
11137
11177
  ),
11138
11178
  /* @__PURE__ */ import_react112.default.createElement(
@@ -15411,7 +15451,7 @@ var BankTransactionsWithLinkedAccounts = ({
15411
15451
  showLedgerBalance = true,
15412
15452
  showUnlinkItem = false,
15413
15453
  showBreakConnection = false,
15414
- categorizedOnly = false,
15454
+ mode = "self-serve",
15415
15455
  hardRefreshPnlOnCategorize = false,
15416
15456
  showDescriptions,
15417
15457
  showReceiptUploads,
@@ -15434,7 +15474,7 @@ var BankTransactionsWithLinkedAccounts = ({
15434
15474
  showDescriptions,
15435
15475
  showReceiptUploads,
15436
15476
  mobileComponent,
15437
- categorizedOnly,
15477
+ mode,
15438
15478
  hardRefreshPnlOnCategorize,
15439
15479
  stringOverrides: stringOverrides?.bankTransactions
15440
15480
  }
@@ -15478,7 +15518,9 @@ var GeneralLedgerView = ({
15478
15518
 
15479
15519
  // src/views/Reports/Reports.tsx
15480
15520
  var import_react177 = __toESM(require("react"));
15481
- var DownloadButton2 = ({ stringOverrides }) => {
15521
+ var DownloadButton2 = ({
15522
+ stringOverrides
15523
+ }) => {
15482
15524
  const { dateRange } = (0, import_react177.useContext)(ProfitAndLoss.Context);
15483
15525
  const { auth, businessId, apiUrl } = useLayerContext();
15484
15526
  const [requestFailed, setRequestFailed] = (0, import_react177.useState)(false);
@@ -15526,33 +15568,64 @@ var DownloadButton2 = ({ stringOverrides }) => {
15526
15568
  stringOverrides?.downloadButtonText || "Download"
15527
15569
  );
15528
15570
  };
15529
- var Reports = ({ title, stringOverrides }) => {
15571
+ var getOptions = (enabledReports) => {
15572
+ return [
15573
+ enabledReports.includes("profitAndLoss") ? {
15574
+ value: "profitAndLoss",
15575
+ label: "Profit & Loss"
15576
+ } : null,
15577
+ enabledReports.includes("balanceSheet") ? {
15578
+ value: "balanceSheet",
15579
+ label: "Balance Sheet"
15580
+ } : null,
15581
+ enabledReports.includes("statementOfCashFlow") ? {
15582
+ value: "statementOfCashFlow",
15583
+ label: "Statement of Cash Flow"
15584
+ } : null
15585
+ ].filter((o) => !!o);
15586
+ };
15587
+ var Reports = ({
15588
+ title,
15589
+ stringOverrides,
15590
+ enabledReports = ["profitAndLoss", "balanceSheet", "statementOfCashFlow"]
15591
+ }) => {
15530
15592
  const containerRef = (0, import_react177.useRef)(null);
15531
- const [activeTab, setActiveTab] = (0, import_react177.useState)("profitAndLoss");
15532
- return /* @__PURE__ */ import_react177.default.createElement(View, { title: stringOverrides?.title || title || "Reports" }, /* @__PURE__ */ import_react177.default.createElement("div", { className: "Layer__component Layer__header__actions" }, /* @__PURE__ */ import_react177.default.createElement(
15593
+ const [activeTab, setActiveTab] = (0, import_react177.useState)(enabledReports[0]);
15594
+ const options = getOptions(enabledReports);
15595
+ const defaultTitle = enabledReports.length > 1 ? "Reports" : options.find((option) => option.value = enabledReports[0])?.label;
15596
+ return /* @__PURE__ */ import_react177.default.createElement(View, { title: stringOverrides?.title || title || defaultTitle }, enabledReports.length > 1 && /* @__PURE__ */ import_react177.default.createElement("div", { className: "Layer__component Layer__header__actions" }, /* @__PURE__ */ import_react177.default.createElement(
15533
15597
  Toggle,
15534
15598
  {
15535
15599
  name: "reports-tabs",
15536
- options: [
15537
- { value: "profitAndLoss", label: "Profit & loss" },
15538
- { value: "balanceSheet", label: "Balance sheet" },
15539
- {
15540
- value: "statementOfCashFlow",
15541
- label: "Statement of Cash Flow"
15542
- }
15543
- ],
15600
+ options,
15544
15601
  selected: activeTab,
15545
15602
  onChange: (opt) => setActiveTab(opt.target.value)
15546
15603
  }
15547
- )), /* @__PURE__ */ import_react177.default.createElement(Container, { name: "reports", ref: containerRef }, /* @__PURE__ */ import_react177.default.createElement(ProfitAndLoss, { asContainer: false }, /* @__PURE__ */ import_react177.default.createElement(ReportsPanel, { containerRef, openReport: activeTab, stringOverrides }))));
15604
+ )), /* @__PURE__ */ import_react177.default.createElement(Container, { name: "reports", ref: containerRef }, /* @__PURE__ */ import_react177.default.createElement(ProfitAndLoss, { asContainer: false }, /* @__PURE__ */ import_react177.default.createElement(
15605
+ ReportsPanel,
15606
+ {
15607
+ containerRef,
15608
+ openReport: activeTab,
15609
+ stringOverrides
15610
+ }
15611
+ ))));
15548
15612
  };
15549
- var ReportsPanel = ({ containerRef, openReport, stringOverrides }) => {
15613
+ var ReportsPanel = ({
15614
+ containerRef,
15615
+ openReport,
15616
+ stringOverrides
15617
+ }) => {
15550
15618
  const { sidebarScope } = (0, import_react177.useContext)(ProfitAndLoss.Context);
15551
15619
  return /* @__PURE__ */ import_react177.default.createElement(import_react177.default.Fragment, null, openReport === "profitAndLoss" && /* @__PURE__ */ import_react177.default.createElement(
15552
15620
  View,
15553
15621
  {
15554
15622
  type: "panel",
15555
- headerControls: /* @__PURE__ */ import_react177.default.createElement(import_react177.default.Fragment, null, /* @__PURE__ */ import_react177.default.createElement(ProfitAndLoss.DatePicker, null), /* @__PURE__ */ import_react177.default.createElement(DownloadButton2, { stringOverrides: stringOverrides?.downloadButton }))
15623
+ headerControls: /* @__PURE__ */ import_react177.default.createElement(import_react177.default.Fragment, null, /* @__PURE__ */ import_react177.default.createElement(ProfitAndLoss.DatePicker, null), /* @__PURE__ */ import_react177.default.createElement(
15624
+ DownloadButton2,
15625
+ {
15626
+ stringOverrides: stringOverrides?.downloadButton
15627
+ }
15628
+ ))
15556
15629
  },
15557
15630
  /* @__PURE__ */ import_react177.default.createElement(
15558
15631
  Panel,
@@ -15575,7 +15648,12 @@ var ReportsPanel = ({ containerRef, openReport, stringOverrides }) => {
15575
15648
  }
15576
15649
  )
15577
15650
  )
15578
- ), openReport === "balanceSheet" && /* @__PURE__ */ import_react177.default.createElement(BalanceSheet, { stringOverrides: stringOverrides?.balanceSheet }), openReport === "statementOfCashFlow" && /* @__PURE__ */ import_react177.default.createElement(StatementOfCashFlow, { stringOverrides: stringOverrides?.statementOfCashflow }));
15651
+ ), openReport === "balanceSheet" && /* @__PURE__ */ import_react177.default.createElement(BalanceSheet, { stringOverrides: stringOverrides?.balanceSheet }), openReport === "statementOfCashFlow" && /* @__PURE__ */ import_react177.default.createElement(
15652
+ StatementOfCashFlow,
15653
+ {
15654
+ stringOverrides: stringOverrides?.statementOfCashflow
15655
+ }
15656
+ ));
15579
15657
  };
15580
15658
 
15581
15659
  // src/components/ProfitAndLossView/ProfitAndLossView.tsx